提问者:小点点

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


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

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

哪个是最安全的?

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


共1个答案

匿名用户

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

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

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

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