2012-11-07 39 views
4

我不是在谈论服务器端node.js.是否有像bcrypt一样的缓慢的Javascript散列算法?

我想在我的网站的客户端使用缓慢的散列算法。我找到了SHA-256的实现,其中seem to be reliable。我还发现导致OP creating his own librarythis question

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

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

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

回答

7

目前有三个关键推导函数被广泛认为是对抗暴力破解企图的安全措施。密钥衍生函数与常规哈希算法略有不同,因为即使面对基于GPU的现代计算,它们也可以设计为,设计为

我将列出他们为了理论安全:

  • PBKDF2由RSA设计的基础上,SHA,并且是由NIST推荐算法。您可以在浏览器中使用a coupleimplementations

    对节点用户的注意事项:节点的crypto模块有一个built-in PBKDF2 function。使用它。

  • bcrypt,基于Blowfish,比PBKDF2稍微安全一些。它已经过相对良好的测试和验证,但没有任何标准机构的批准,如果这是您的考虑因素。有a generic JS implementation here

    对节点用户的注意事项:使用node.bcrypt,它在单独的线程上执行计算量很大的东西。

  • 最后,scrypt是理论上最安全(最慢)的KDF。不幸的是,该算法是非常新的,所以它没有通过密码社区的严格研究和测试来验证。然而,它是,on track to become a IETF standard

    由于该算法如此新颖,因此很难找到实现。我只能找到this half-baked one。虽然安全性好处非常有希望,但我不会推荐scrypt,直到算法本身及其实现经过验证安全。

这三者究竟如何比较呢?该scrypt paper有一个比较:

algorithm comparison table

实际上,即使PBKDF2使得成本过高的人,但政府破解一个8个字符的密码。

0

您总是可以忽略快速SHA-256的最后10个字符。或者包含前10个字符。

SHA具有可变数量的回合。两轮SHA应该有点可逆。我有一个模糊的想法,认为20轮被认为是“安全的”。 30轮应该是“高度安全的”,并且50轮几乎没有任何改善。

SHA旨在保证安全 - 不是希望破解者拥有足够慢的机器 - 而是通过数学证明。如果并且当每轮中不可逆比特的数量增加并且置换为256比特散列码时,将不会有足够的计算机能力来尝试产生该特定散列码的所有可能的序列。宇宙中还没有足够的能量来包装256位计数器。

除非产生散列的字符串非常小或写在某人的监视器上的文章上。

+0

是的,我可以,但我宁愿不。无论如何,我的问题是关于使用Javascript慢慢计算哈希的最佳方法。 – Xeoncross

+0

为什么它要慢? –

+0

减少每秒可以计算的数量。例如,某人可以跳过Javascript计算,而是使用他们的GPU来计算每秒数百万次SHA2哈希值。 http://stackoverflow.com/q/6791126/99923 – Xeoncross

相关问题