跳到主要内容
ecdsa.com

HS256

JWS 算法之一,即使用 SHA-256 的 HMAC(RFC 7518 §3.2):颁发者与验证者共享同一个至少 256 位的密钥,因此能验证令牌的一方也能签发令牌。
其他写法HS256HMAC-SHA256 JWTHS512

它是 JWA 中唯一标为必须实现(Required)的 JWS 算法,也是许多教程和框架的默认算法。32 字节的标签用共享密钥对 header.payload 计算得出;验证时重新计算标签,并以常量时间进行比较。

弱密钥是主要问题:RFC 7518 要求密钥长度至少等于哈希长度(256 位),但如果令牌是用 secret 这类过短的密钥或字典中的密钥签名的,攻击者只需拿到一个令牌就能离线破解出密钥(hashcat 模式 16500、jwt_tool),之后就能签发任意令牌。应使用 32 字节或更多的随机字节,切勿使用密码,并用 JWT 密钥检测工具检查密钥。

当同一个服务既签发又验证令牌时,HS256 是合适的选择。对于第三方验证者、微服务或公共客户端,应使用非对称算法,让验证者只持有公钥,并为每个密钥固定算法,以免与 RS256 混淆。

标准与参考资料

全部术语