是否有像bcrypt这样的慢速Javascript哈希算法?

Xeo*_*oss 5 javascript hash sha bcrypt

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

我想对我网站客户端的密钥使用慢哈希算法.我发现SHA-256的实现似乎是可靠的.我还发现了这个导致OP 创建自己的库的问题.

但是,我不确定我是否应该进行多轮SHA散列或信任某些代码,因为我不是安全专家,并且它似乎没有大的追随者只被36人"盯着" .

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

我想要一个缓慢的散列(非加密)算法,我宁愿它产生一个短字符串.例如,慢速60 char bcrypt vs fast 70 char SHA-256.

jos*_*736 7

目前有三种密钥推导函数被广泛认为是对抗暴力破解尝试的安全性.密钥派生函数与常规哈希算法略有不同,因为即使面对基于GPU的现代计算,它们的设计也很慢.

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

  • PBKDF2由RSA设计,基于SHA,是NIST推荐的算法.有一对夫妇 的实现,你可以在浏览器中使用.

    Node用户注意: Node的crypto模块具有内置的PBKDF2功能.用那个.

  • 基于Blowfish的bcrypt比PBKDF2稍微安全一些.它已经过相对良好的测试和验证,但是如果这是您的考虑因素,则没有任何标准机构的批准.这里有一个通用的JS实现.

    节点用户注意:使用node.bcrypt,它在单独的线程上执行计算上昂贵的东西.

  • 最后,scrypt是理论上最安全(最慢)的KDF.遗憾的是,该算法非常新,因此尚未通过加密社区的严格研究和测试进行验证.然而,它有望成为IETF标准.

    因为算法是如此新,所以很难找到实现.我只能找到这个半生不熟的.虽然安全性的好处是非常有希望的,但在算法本身及其实现被验证安全之前,我不建议使用scrypt.

这三个实际上如何比较?该scrypt纸有一个比较:

算法比较表

实际上,即使是PBKDF2,除了政府之外的所有人都要破解一个8个字符的密码.