我一直在将我们的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年过时。
谢谢你。
在密码学中,因此对于JWS/JWE规范定义的签名和加密算法,我们可以有两种类型的密钥:
HS256算法使用对称密钥,对于这种类型的密钥,当前建议使用至少256位密钥。
RS256算法使用非对称RSA密钥对。建议的最小大小为2048位。
在你提到的博客文章中我们可以读到
"RSA密钥长度每增加一倍,解密速度至少要慢6倍。"
这是真的,但是通常密钥会使用很长一段时间(例如2周),使用2048位密钥进行签名计算/验证大约需要250µs。
因此,除非您不在生产环境中,否则RSA的512位密钥是个坏主意。您可以在第53页和第54页NIST密钥管理建议中找到有用的信息。