使用多种算法会使密码更安全吗?(或更少?)
为了清楚起见,我不是在谈论做这样的事情:
key = Hash(Hash(salt + password))
我说的是使用两个单独的算法并匹配两者:
key1 = Hash1(user_salt1 + password)
key2 = Hash2(user_salt2 + password)
然后在进行身份验证时要求两者匹配。我已经看到这是一种消除冲突匹配的方法,但我想知道意想不到的后果,例如创建“最弱链接”场景或提供使用户数据库更容易破解的信息,因为这种方法提供的数据比一个键就可以了。例如,将信息与哈希结合起来以更容易地找到它们。此外,如果真正消除了冲突,理论上您可以暴力破解实际密码,而不仅仅是匹配密码。实际上,您必须完全强制系统。
我实际上并不打算实现这一点,但我很好奇这是否实际上是对 single 标准实践的改进key = Hash(user_salt + password)
。
编辑:
很多好的答案,所以只是在这里推测,这应该是显而易见的,但是你确实通过使用两者来创建一个最薄弱的链接,因为可以尝试两种算法中较弱的匹配。例如,如果您使用弱(快速)MD5 和 PBKDF2,我会先暴力破解 MD5,然后尝试我找到的任何匹配项,因此通过使用 MD5(或其他),您实际上会使情况变得更糟。此外,即使两者都属于更安全的集合(例如 bcrypt+PBKDF2),您也会将其中一个破坏的风险加倍。