我不是在谈论服务器端 node.js。
我想对我网站客户端的 key 使用慢散列算法。我找到了 SHA-256 的实现哪个seem to be reliable .我还找到了this question这导致了 OP creating his own library .
但是,我不确定我是否应该只进行多轮 SHA 散列或信任其中的一些代码,因为我不是安全专家而且它似乎没有大量的追随者只是被“盯着” 36 人。
在这种情况下最好的选择是什么?一旦我选择了某些东西,我(基本上)就不能改变方法。
我想要一个慢散列(不是加密)算法,我宁愿它产生一个短字符串。例如,60 个字符的慢速 bcrypt 与 70 个字符的快速 SHA-256。
最佳答案
目前有三种 key 派生函数被广泛认为可以抵御暴力破解尝试。 key 派生函数与常规哈希算法略有不同,因为它们设计速度较慢,即使面对现代基于 GPU 的计算也是如此。
我将按照理论上安全性的顺序列出它们:
PBKDF2由RSA设计,基于SHA,是NIST推荐的算法。有 a couple implementations您可以在浏览器中使用。
Node 用户注意:Node 的
crypto
模块有一个built-in PBKDF2 function。 .用那个。bcrypt ,基于 Blowfish,比 PBKDF2 稍微更安全。它已经过相对良好的测试和验证,安全,但没有任何标准机构的批准印章,如果您考虑的话。有 a generic JS implementation here .
Node 用户注意:使用 node.bcrypt ,它在单独的线程上执行计算量大的东西。
最后,scrypt是理论上最安全(最慢)的 KDF。不幸的是,该算法非常新,因此尚未经过密码学界的严格研究和测试验证。然而,它是 on track to become a IETF standard .
由于算法太新,很难找到实现。我只能找到 this half-baked one .虽然安全优势非常有前途,但在算法本身及其实现都经过安全验证之前,我不建议使用 scrypt。
这三者实际上如何比较? scrypt paper有比较:
实际上,即使是 PBKDF2 也使得除政府之外的任何人破解单个 8 字符密码的成本过高。
关于javascript - 是否有像 bcrypt 这样的慢速 Javascript 哈希算法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13275187/