提问者:小点点

是512位密钥(公钥私钥对)JWT(NodeJS)足够安全


我一直在将我们的JWT签名和验证结构重构为更安全的结构。我已经用这篇文章作为起点(并接受使用RS256算法而不是HS256算法的建议):https://medium.com/@siddharthac6/json-web-token-jwt-the-right-way-of-实现-node-js-65b8915d550e,它建议使用512位密钥说

“对256位密钥进行暴力搜索几乎是不可能的”

但是,当我寻找一个openssl脚本来生成这个令牌时,我到达了这个默认为4096位密钥的页面:https://gist.github.com/ygotthilf/baa58da5c3dd1f69fae9一个用户引用了RSA说:

RSA声称[…] 2048位密钥在2030年之前就足够了。

感觉有冲突的信息。本质上,我的问题是我应该为企业应用程序使用什么jwt算法和密钥大小,RS256 512位密钥是否足够(我切换到的)?我有点理解安全性和速度的权衡,但我很困惑为什么在媒体文章中建议使用512位密钥,但在github脚本中甚至没有提到,RSA说即使是2048位密钥也可能在2030年过时。

谢谢你。


共1个答案

匿名用户

在密码学中,因此对于JWS/JWE规范定义的签名和加密算法,我们可以有两种类型的密钥:

  • 对称(=共享秘密)
  • 非对称(=公钥/私钥对)

HS256算法使用对称密钥,对于这种类型的密钥,当前建议使用至少256位密钥。

RS256算法使用非对称RSA密钥对。建议的最小大小为2048位。

在你提到的博客文章中我们可以读到

"RSA密钥长度每增加一倍,解密速度至少要慢6倍。"

这是真的,但是通常密钥会使用很长一段时间(例如2周),使用2048位密钥进行签名计算/验证大约需要250µs。

因此,除非您不在生产环境中,否则RSA的512位密钥是个坏主意。您可以在第53页和第54页NIST密钥管理建议中找到有用的信息。