使用多个算法会使密码更安全吗?(还是更不安全?)
我想明确一下,我不是在讨论像这样做任何事情:
key = Hash(Hash(salt + password))
我在谈论使用两个独立的算法并进行匹配:
key1 = Hash1(user_salt1 + password)
key2 = Hash2(user_salt2 + password)
要求在身份验证时匹配两者。我看到有人建议这样可以消除冲突匹配,但我担心会产生意想不到的后果,例如创建“最弱链”情景或提供使用户数据库更容易破解的信息,因为此方法提供比单个密钥更多的数据。例如,将信息与哈希组合以更轻松地找到它们。另外,如果真正消除了冲突,理论上可以暴力破解实际密码而不仅仅是匹配的密码。事实上,你必须这样做才能完全暴力破解系统。
我实际上没有计划实施这一点,但我很好奇这是否比使用单个“key = Hash(user_salt + password)”的标准做法更好。
编辑:有很多好答案,总结一下,这应该是显而易见的,但是使用两者会创建一个最弱的链接,因为较弱的算法的匹配可以尝试与其他算法匹配。例如,如果您使用了一个弱(快速)MD5和一个PBKDF2,我会先暴力破解MD5,然后尝试任何匹配项与其他匹配,因此通过拥有MD5(或其他东西),您实际上会使情况变得更糟。此外,即使两者都属于更安全的集合(例如bcrypt + PBKDF2),您也会将暴露风险加倍。