假设我们有十亿个独特的图像,每个图像一兆字节。 我们计算每个文件内容的SHA-256哈希值。 碰撞的可能性取决于:
假设它为零,我们可以在多大程度上忽略这种可能性?
答案 0 :(得分:353)
通常的答案是这样的:一个流氓小行星在下一秒内在地球上坠毁的可能性是什么,它消灭了我们所知道的文明,杀死了几十亿人?可以说,任何概率低于该事件的不幸事件实际上都不是非常重要。
如果我们有一个“完美”的散列函数,输出大小 n ,并且我们有 p 消息要散列(单个消息长度并不重要),那么概率为碰撞是关于 p 2 / 2 n + 1 (这是一个对“小” p ,即基本上小于 2 n / 2 。例如,使用SHA-256( n = 256 )和10亿条消息( p = 10 9 ),则概率约为 4.3×10 -60
大规模杀人犯太空岩石平均每3000万年发生一次。这导致这种事件在下一秒发生的概率大约 10 -15 。比SHA-256碰撞更可能 45 几个数量级。简而言之,如果你发现SHA-256碰撞可怕,那么你的优先事项是错误的。
在安全设置中,攻击者可以选择要进行哈希处理的消息,然后攻击者可能会使用超过10亿条消息;但是,你会发现攻击者的成功概率仍然很小。这就是使用具有256位输出的散列函数的全部意义:因此可以忽略碰撞的风险。
当然,以上所有都假设SHA-256是一个“完美”的哈希函数,这远未得到证实。不过,SHA-256似乎相当强大。
答案 1 :(得分:46)
发生碰撞的可能性并不取决于文件的大小,只取决于文件的数量。
这是birthday paradox的一个例子。维基百科页面给出了碰撞可能性的估计。如果你运行这些数字,你会发现地球上生成的所有硬盘都不能容纳足够的1MB文件,因此SHA-256的碰撞可能会达到0.01%。
基本上,你可以忽略这种可能性。
答案 2 :(得分:17)
首先,it is not zero, but very close to zero。
关键问题是如果实际发生碰撞会发生什么?如果答案是“核电站将爆炸”,那么你可能不应该忽视碰撞的可能性。在大多数情况下,后果并不严重,因此您可以忽略碰撞的可能性。
另外请不要忘记,您可以部署软件(或其中的一小部分)并同时在大量计算机中使用(现在几乎所有地方都包含一些微型嵌入式微型计算机)。在这种情况下,您需要将您获得的估计值乘以最大可能的副本数。