如果哈希有冲突,一个密码可以有另一个的哈希吗?

If hash has collision, can a password have the hash of another?

有点疑惑

我不是加密或散列方面的专家,但我知道散列可能会有一些冲突,即两个不同的文本输入可以给出相同的散列字符串。

所以..这意味着(也是远程)两个密码可以给出相同的哈希值,因此一个用户可以使用另一个密码登录(因为哈希值相同)?

是的,这在数学上是不可能的,但有可能。

它可能会发生,但不太可能。我使用 ripemd320 是因为在我开始使用它时,它从未被黑过。这相当于意味着它会生成非常独特的哈希码。

这并不是那么重要,因为 25% 的密码可以在 15 分钟内被猜出。如果您知道用户的狗、孩子和配偶的姓名和出生日期,则更少。

重点是,如果有人使用哈希码获取您的用户数据库,则很容易尝试使用糟糕的哈希算法进行黑客攻击。

破解它的方法是为所有常用密码生成一个散列码,看看它是否与存储的散列匹配。

几年前一些政府安全机构表示,在使用 rip320 时,没有已知的此类成功黑客攻击。

是的,并且已知它会发生在较差的哈希函数中(想想 crc32)。现代哈希函数发生这种情况的可能性实际上几乎为零。使用某种字典攻击猜测正确密码的机会要高得多。

攻击者在散列密码时是否能发现冲突并不重要。一个用户知道多个有效密码不是问题。

事实上,对于 PBKDF2 和 scrypt,它们都是流行和推荐的密码哈希,发现冲突和第二原像 is easy, but you need quite a bit of imagination to come up with scenarios where this matters

重要的是:

  1. 给定一个哈希很难算出密码(第一个原像阻力)
  2. 冲突很少见,因此它们不会减少密码熵。任何具有至少 128 位输出的体面散列都可以满足这一要求。
  3. 计算成本高,减缓密码猜测攻击。这意味着你不能
  4. 盐渍化,防止多目标攻击。

有关详细信息,请参阅 security.se 上的 How to securely hash passwords?