我一直在研究bcrypt散列,当然,该方案的最大好处之一就是它的“适应性”。然而,除了简单地增加在SHA-1散列上进行的迭代次数之外,它还有什么可适应性的?比方说,不是SHA-1散列值1000次,而是将其增加到10,000次迭代。这不是达到了同样的目标吗?是什么让bcrypt具有更强的适应性?
发布于 2011-07-24 22:25:12
使用散列函数进行多次迭代有一些微妙之处,因为必须涉及某种“加盐”,而且现有的散列函数并不像预期的那样“随机”;因此必须小心,在这种情况下,您最终会使用PBKDF2。PBKDF2是为密钥派生而设计的,这与密码散列不完全相同,但事实证明它在这方面也相当不错。
bcrypt比PBKDF2-with-SHA-1有(轻微)优势,因为bcrypt是从Blowfish块密码派生而来的。进行多次迭代的目的是使密码处理变慢,尤其是对攻击者来说更是如此。对于正常的、诚实的系统,我们容忍该函数变得很慢,因为它阻止了广泛的密码猜测。但攻击者可能会使用正常系统不使用的硬件,例如programmable GPU,这会给适合这种硬件的计算带来相当大的提升。Blowfish和bcrypt使用基于RAM的查找表(在处理过程中修改的表);这样的表很容易在通用CPU上处理,但在GPU上相当繁琐;因此,bcrypt在某种程度上阻碍了使用GPU的攻击者的处理增强。这是一个额外的好处,这使得bcrypt比PBKDF2更适合作为密码存储。
发布于 2011-07-25 12:01:51
两者的替代方案是scrypt。与bcrypt不同的是,它没有使用某种不同寻常的河豚密码,而是使用任何标准的散列函数,而且它被特别设计为难以在专用硬件上实现,因为它的内存和时间效率都很低。
发布于 2011-07-22 22:05:43
你的选择有点太少了。您没有说明如何将密码和盐组合到您的散列方案中。以错误的方式执行此操作可能会导致漏洞。bcrypt(和其他标准KDF)的优点是这一点得到了很好的规定。
如果您在常见的HMAC-SHA1模式下查看PBKDF2,它与您的建议非常相似。
https://stackoverflow.com/questions/6791126
复制相似问题