我应该对jwt使用什么算法

问题描述 投票:0回答:1

jwt.io提到有很多算法,它们是:

[HS256HS384HS512

[RS256RS384RS512

[ES256ES384ES512

[PS256PS384PS512

我的问题是这些算法之间有什么区别?而最安全的是什么?如果我要将jwt存储在cookie中,应该使用哪种算法?

algorithm security cookies jwt
1个回答
2
投票

前缀字母代表签名算法系列,可以简要解释为

HS-HMAC

RS-RSA

ES-ECDSA

PS-RSA-PSS(RSA概率签名方案)

后一位数字表示由相应算法生成的HASH值的长度,例如HS256代表HMAC-SHA256

HMAC算法

这可能是用于签名JWT的最常见算法。

基于哈希的消息验证码(HMAC)是一组算法,它们提供了一种通过共享密钥对消息进行签名的方法。在HMAC的情况下,使用加密哈希函数(例如SHA256)。强度(即伪造HMAC的难度)取决于所使用的哈希算法。

RSA和ECDSA算法RSA和ECDSA都是非对称加密和数字签名算法。一方使用其私人方来签署JWT。接收者依次使用该方的公共密钥(必须以与HMAC共享密钥相同的方式共享)来验证JWT。接收方无法使用发送者的公钥创建新的JWT。

RSA和ECDSA算法都比HMAC更复杂。

RSA和ECDSA之间的主要区别在于速度和密钥大小。 ECDSA需要较小的密钥来实现与RSA相同的安全级别。这使其成为小型JWT的绝佳选择。但是,RSA通常比ECDSA更快。与往常一样,选择最符合您要求的一种。

RSA-PSS被标准化为PKCS#1 v2.1的一部分。通过以下方式验证JWS的RSA-PSS SHA-256数字签名:使用SHA将JWS签名输入,JWS签名以及与签名者使用的私钥相对应的公钥提交给RSA-PSS-VERIFY算法。 -256作为哈希函数。

[使用RSA-PSS SHA-384和RSA-PSS SHA-512算法进行签名和验证的过程与RSA-PSS SHA-256的过程相同-仅在两个角色中都使用替代哈希算法。

JWT Cookie存储安全性

并且回答您的最后一个问题,当与HttpOnly cookie标志一起使用时,Cookie无法通过JavaScript访问,并且不受XSS的影响。您还可以设置安全cookie标志,以确保仅通过HTTPS发送cookie。这是过去曾利用Cookie存储令牌或会话数据的主要原因之一。现代开发人员不愿使用Cookie,因为传统上他们要求将状态存储在服务器上,从而破坏了RESTful最佳实践。如果将JWT存储在cookie中,则cookie作为一种存储机制不需要在服务器上存储状态。这是因为JWT封装了服务器处理请求所需的所有内容。

但是,Cookie容易受到其他类型的攻击:跨站点请求伪造(CSRF)。 CSRF攻击是一种攻击,当恶意网站,电子邮件或博客导致用户的Web浏览器在当前已对其进行身份验证的受信任站点上执行有害操作时,就会发生这种攻击。这是对浏览器如何处理Cookie的一种利用。 Cookie只能发送到允许它的域。

CSRF可以通过使用同步令牌模式来防止。这听起来很复杂,但是所有现代Web框架都支持此功能。

© www.soinside.com 2019 - 2024. All rights reserved.