假设用户注册了您的网站,您将他们选择的密码哈希,然后将该哈希用作盐,并使用该盐重新密码。
示例:
String hash1 = MD5(password);
String endHash = MD5(hash1 + password);
然后将endHash存储在您的数据库中。如果我的数据库被压缩,这个有效的反对彩虹表会攻击吗?或者我错过了一些容易破解的东西?
答案 0 :(得分:7)
这是关键的强化(http://en.wikipedia.org/wiki/Key_strengthening),这是一种很好的技术,但却无法取代实际的盐。它不会保护您免受使用此双哈希函数编写的彩虹表。
答案 1 :(得分:5)
腌制的目的是防止使用巨大的预先计算的表格。使用此方法,可以计算任何密码的哈希值,而无需访问您的数据库。您应该存储一个随机值并将密码和该值一起散列。
答案 2 :(得分:1)
散列密码的弱点是攻击者对哈希函数的了解。如果他们知道你的哈希函数而不是你的盐,盐就保护了你的密码。如果他们既知道散列函数又知道你的盐,那么你的数据就有风险。
因为这适用于您的问题 - 使用动态盐通常会使您更难以找出您的盐。这会增加安全性,但如果有人知道您的算法,则无济于事。
以这种方式增加复杂性确实会使您的系统更难破解。然而,鉴于有足够的资源,没有什么是不可破解的。
答案 3 :(得分:1)
答案 4 :(得分:0)
没有区别:您存储的数据仍然完全基于密码,因此没有额外的保护。
答案 5 :(得分:0)
此外,您应该避免使用MD5来支持当前强大的哈希算法,例如SHA1,SHA-256,SHA-512。