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



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

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

以下哪一个最安全?

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

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

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

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

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

最新更新