HMAC 256 与 HMAC 512 JWT 签名加密

Posted

技术标签:

【中文标题】HMAC 256 与 HMAC 512 JWT 签名加密【英文标题】:HMAC 256 vs HMAC 512 JWT signature encryption 【发布时间】:2016-11-23 04:45:30 【问题描述】:

HS256 和 HS512 加密算法之间是否存在实际差异,或者与已经牢不可破的密钥相比,较长密钥的额外安全性是多余的?我应该使用哪一个来加密 JWT 令牌?

是否甚至可以使用带有 auth0 的 java JWT 的 HS512 加密?

【问题讨论】:

【参考方案1】:

该算法用于对令牌的标头和有效负载执行数字签名(不是加密)。如果要加密令牌有效负载,则需要应用 JWE 标准(请参阅RFC)

HS256 和 HS512 加密算法之间是否存在实际差异,或者与已经牢不可破的密钥相比,较长密钥的额外安全性是多余的?我应该使用哪一个来加密 JWT 令牌?

HS256 表示 HMAC-SHA256。与 HS512 的区别在于哈希方法本身的强度。您可以查看keylength.com 网站和answer。你会看到,即使是 SHA-256 也有相当大的安全余量。更重要的是,HMAC 算法几乎没有受到对底层哈希算法的攻击。所以即使你也可以安全地使用 HMAC-SHA1。

是否可以通过 auth0 的 java JWT 使用 HS512 加密?

我查看了代码,这是可能的(但没有记录)。使用类似于

JWTSigner.Options options = new JWTSigner.Options();
options.setAlgorithm(Algorithm.HS512);
jwtSigner.sign(claims, options);

【讨论】:

以上是关于HMAC 256 与 HMAC 512 JWT 签名加密的主要内容,如果未能解决你的问题,请参考以下文章

Python JWT 库 PyJWT 使用 HS256 签名时遇到问题 - 使用 SHA-256 哈希算法的 HMAC

hmac sha256和sha256的区别

PBKDF2-HMAC-SHA-512 测试向量

hashilib模块和hmac模块

HMAC加密的消息摘要码

网络安全——Base64编码MD5SHA1-SHA512HMAC(SHA1-SHA512)哈希