现有的答案都没有涵盖这个问题的关键部分,令我满意:盐呢?
如果只发布密码哈希值,其他破解者不可能知道:
实际的每个密码(假设是随机的,每个源)盐值。
盐如何与代码中的密码混合。
他们所拥有的只是最终的哈希值!
有很多方法可以组合密码和盐来形成哈希:
sha256(pass + salt)
sha256(salt + pass)
sha256(sha256(pass) + sha256(salt))
sha256(pass + sha256(salt))
sha256(sha256(...(salt + pass + salt)...))
但是如果盐是推荐的8个纯随机字符……
sha256("monkey1" + "w&yu2P2@")
sha256("w&yu2P2@" + "monkey1")
……这意味着“典型”的 7 或 8 个字符的密码变得非常难以暴力破解,因为它实际上是 15 个或更多字符!此外,要破解你知道是加盐的密码哈希,除非你也有盐,否则除了蛮力你别无选择!
根据我使用 GPU 破解所做的研究,我使用两张高端 ATI 卡暴力破解 MD5 密码哈希实现了 8213.6 M c/s。在我的基准测试中,这意味着我可以尝试:
all 6 character password MD5s 47 seconds
all 7 character password MD5s 1 hour, 14 minutes
all 8 character password MD5s ~465 days
all 9 character password MD5s fuggedaboudit
请注意,SHA-256 在使用Hashcat的 GPU 上是 MD5 速度的 13% 。因此,将这些数字乘以大约 8 以查看需要多长时间。
如果不知道盐,这意味着您实际上是在强制使用相当于 12 个以上字符的密码。这远远超出了任何已知计算能力的范围。
现在,如果您想争辩……
原始饼干也获得了盐,但选择不发布它们。
原始破解者也有源代码(或者它是开源的),所以他们知道密码是如何加盐的,但选择不发布该信息。
Formspring 在撒谎,他们的密码没有加盐或加盐不当,因此盐没有效果。
......那么是的,在几天内破解 200k 的 400k 密码哈希是很容易的。