JWT:(目前)最安全的签名算法是什么?

rea*_*ebo 6 jwt

我正在阅读https://jwt.io/文档,发现实际支持的算法是

  • HS256
  • HS384
  • HS512
  • RS256
  • RS384
  • RS512
  • ES256
  • ES384
  • ES512
  • PS256
  • PS384
  • PS512

这哪一个最安全?

我知道双方(客户端和服务器)必须使用相同的算法,因此客户端和服务器端都必须支持它。

Sha*_*eep 12

选择实际上与安全性无关,更多地与您使用 JWT 的用途有关 - 谁可以创建/验证它们、密钥是否共享、算法速度等等。RSA 和 ES 使用公钥加密技术,因此适用于一个受信任方创建可由其他方验证的令牌(但其他方无法自己创建令牌)的情况。HMAC 比 RSA 快得多,但要求签名者和验证者使用相同的密钥(这意味着他们都可以创建令牌)。

作为一个真实的示例,OpenID 中的客户端身份验证可以使用 JWT,该 JWT 使用客户端和授权服务器共享的密钥进行 HMAC 签名。然而,对于授权服务器颁发的 JWT 令牌来表示客户端授权或 ID 令牌等内容,HMAC 并不是合适的算法,因为恶意客户端应用程序可能会伪造这些令牌并冒充授权服务器。

使用较大哈希值的算法理论上更强(例如 HS512 与 HS256),但实际上与其他安全问题相比,有人破解系统中的 JWT 算法不太可能成为主要问题。

对于加密网站来说,这可能是一个更好的问题,而不是 SO,你应该看看那里。例如,请参阅此答案此答案

  • 只有 HSxxx 算法使用共享密钥。其他的使用 RSA 或 EC 密钥对。完全同意这个答案 (5认同)