re question non-random-salt-for-password-hashes Potato Head先生表示使用md5而不是SHA-512可以更容易地生成彩虹表吗?我曾经想过,一旦生成彩虹表,所使用的算法无关紧要?如何使用彩虹表来检查已知的哈希值会有什么不同?有没有办法知道什么样的哈希算法被使用?
修改更新:
我认为需要对密码表进行适当的哈希处理,不是为了保护您的应用程序,而是为了保护用户重用密码和ID的其他人。
答案 0 :(得分:3)
答案 1 :(得分:2)
纯粹是一个性能问题。 MD5比SHA-512简单,因此您可以在给定的时间范围内生成更多的彩虹表格或更多暴力攻击。
答案 2 :(得分:1)
Enough With The Rainbow Tables: What You Need To Know About Secure Password Schemes简要介绍了这一点。最初是关于人们误解彩虹表及其存在的实际危险程度的迷你咆哮,但随后对密码散列算法性能的影响进行了很好的讨论。
在最后一个问题上,更直接的答案是,通过单独检查输出,您只能确定最终散列算法输出中的位数。根据算法的不同,这可能是也可能不是唯一的,但是,如果算法有任何好处,就不会有任何可检测的模式来准确识别它。 (我说“最终”,因为仅MD5的输出看起来与SHA512-then-MD5的最终结果相同,因为在两种情况下最后一步都是相同的。)
更实际的是,任何可以窃取您的密码数据库的人都可能窃取您的源代码,因此他们可以查看您的源代码以查看您的算法是什么,并将其复制以攻击您的数据库。
答案 3 :(得分:1)
实际上,生成表格的时间非常无关紧要,因为您只执行一次。
破解的时间更为重要。彩虹表只是减少恢复密码所需的哈希操作数量的一种方法,但您仍然需要在破解密码时应用哈希函数。例如,彩虹表可以将散列操作的数量减少10'000倍。如果您的哈希值较慢(例如SHA-512),则破解速度会变慢。
注意一个好的密码哈希函数不仅包括salt,它还应用哈希函数几千次。对于所有实际目的而言,散列仍然很快,但破解(通过任何方法)将慢几千倍。