有没有像 bcrypt 这样慢的 Javascript 哈希算法?

2024-01-05

我不是在谈论服务器端 Node.js。

我想对我网站客户端上的密钥使用慢速哈希算法。我发现了SHA-256 https://github.com/bitwiseshiftleft/sjcl/blob/master/core/sha256.js which 似乎可靠 http://bitwiseshiftleft.github.com/sjcl/。我还发现这个问题 https://stackoverflow.com/questions/2299434/bcrypt-implementation-in-javascript这导致OP创建自己的图书馆 http://code.google.com/p/javascript-bcrypt/.

然而,我不确定我是否应该进行多轮 SHA 散列或信任其中一些代码,因为我不是安全专家,而且它似乎没有大量的追随者,只有 36 个人“盯着” 。

在这种情况下最好的选择是什么?一旦我选择了某件事,我(基本上)就无法改变方法。

我想要一个缓慢的散列(而不是加密)算法,我宁愿它产生一个短字符串。例如,慢速 60 字符 bcrypt 与快速 70 字符 SHA-256。


目前,三种密钥派生函数被广泛认为可以安全地抵御暴力破解尝试。密钥派生函数与常规哈希算法略有不同,因为它们是designed即使面对基于 GPU 的现代计算,速度也很慢。

我将按以下顺序列出它们理论的安全:

  • PBKDF2 http://en.wikipedia.org/wiki/PBKDF2由RSA设计,基于SHA,是NIST推荐的算法。有a couple http://code.google.com/p/crypto-js/#PBKDF2 实施 http://anandam.name/pbkdf2/您可以在浏览器中使用。

    节点用户注意事项: Node's crypto模块有一个内置PBKDF2功能 http://nodejs.org/api/crypto.html#crypto_crypto_pbkdf2_password_salt_iterations_keylen_callback。用那个。

  • bcrypt http://en.wikipedia.org/wiki/Bcrypt,基于 Blowfish,比 PBKDF2 稍微安全一些。它已经过相对良好的测试和安全验证,但没有任何标准机构的批准印章(如果您考虑的话)。有这里有一个通用的 JS 实现 http://code.google.com/p/javascript-bcrypt/.

    节点用户注意事项: Use 节点.bcrypt https://github.com/ncb000gt/node.bcrypt.js/,它在单独的线程上执行计算量大的事情。

  • 最后,scrypt http://en.wikipedia.org/wiki/Scrypt无疑是理论上最安全(最慢)的 KDF。不幸的是,该算法非常新,因此尚未经过密码学界严格的研究和测试的验证。然而,它是有望成为 IETF 标准 https://datatracker.ietf.org/doc/html/draft-josefsson-scrypt-kdf-00.

    由于该算法非常新,因此很难找到实现。我只能找到这个半生不熟的 https://github.com/cheongwy/node-scrypt-js。虽然安全优势非常有希望,但在算法本身及其实现都经过安全验证之前,我不会推荐 scrypt。

这三者实际上如何比较?这加密纸 http://www.tarsnap.com/scrypt/scrypt.pdf有一个比较:

实际上,即使是 PBKDF2,除了政府之外,任何人破解单个 8 字符密码的成本都高昂。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有没有像 bcrypt 这样慢的 Javascript 哈希算法? 的相关文章

随机推荐