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