为什么一个好的哈希算法不允许攻击者找到两个产生相同哈希的消息?

Vas*_*ass 2 security hash cryptography

我正在阅读维基百科,它说

加密散列函数是第三种加密算法.它们将任意长度的消息作为输入,并输出一个短的,固定长度的散列,可用于(例如)数字签名.对于良好的散列函数,攻击者无法找到两条产生相同散列的消息.

但为什么?我的理解是你可以将长的Macbeth故事放入哈希函数中并从中获取X长哈希值.然后你可以放入Beowulf故事中再次获得另一个哈希值X long.

因此,由于这个函数将大量事物映射到较短的长度,所以必然会有重叠,就像我可能将Hobit的故事放入哈希函数并得到与Beowulf相同的输出,好吧,但这是不可避免的( ?)因为我们从输入产生较短的长度输出?即使找到输出,为什么会出现问题?

我可以想象,如果我将其反转并退出Hobit而不是Beowulf,那会很糟糕,但为什么它对攻击者有用呢?

最好,

Luk*_*keH 5

是的,当然会因为您描述的原因而发生碰撞.

我想这句话应该是这样的:"对于好的哈希函数,攻击者找不到两条产生相同哈希值的消息,除非是暴力破解".

至于为什么......

散列算法通常用于身份验证.通过检查消息的散列,您可以(几乎)确定消息本身未被篡改.这依赖于找到两条生成相同哈希的消息是不可行的.

如果散列算法允许相对容易地找到冲突,那么它对于认证变得无用,因为攻击者然后(理论上)可以篡改消息并且使得被篡改的消息生成与原始相同的散列.