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

时间:2018-09-06 18:13:10

标签: node.js security express authentication jwt

我一直在将我们的JWT签名和验证结构重构为更安全的方式。我以本文为起点(并建议使用RS256算法而不是HS256算法):https://medium.com/@siddharthac6/json-web-token-jwt-the-right-way-of-implementing-with-node-js-65b8915d550e,建议使用512位密钥说

  

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

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

  

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

感觉好像有冲突的信息。本质上,我的问题是我应在企业应用程序中使用哪种jwt算法和密钥大小,RS256 + 512位密钥是否足够(我改用了什么)?我在某种程度上理解了安全性和速度之间的权衡,但是我很困惑为什么在中篇文章中建议使用512位密钥,但是在github脚本中甚至没有提到,RSA说到2030年甚至2048位密钥都可能过时了。 / p>

谢谢。

1 个答案:

答案 0 :(得分:3)

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

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

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

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

在您提到的博客文章中,我们可以阅读

  

«RSA密钥长度每增加一倍,解密速度至少降低6倍。 »

是的,但是一般来说,密钥要使用很长一段时间(例如2周),而使用2048位密钥进行签名计算/验证大约需要花费大约2秒钟的时间。 250µs。

因此,除非您不在生产中,否则RSA 512位密钥是个坏主意。 您将在Recommendation for Key Management from NIST第53和54页中找到有用的信息。