假设我们有十亿个唯一的图像,每个图像一兆字节。我们为每个文件的内容计算SHA-256哈希。碰撞的可能性取决于:
- 文件数
单个文件的大小
假设可能性为零,我们可以忽略多远?
假设我们有十亿个唯一的图像,每个图像一兆字节。我们为每个文件的内容计算SHA-256哈希。碰撞的可能性取决于:
假设可能性为零,我们可以忽略多远?
Answers:
因此,通常的答案是:流氓小行星在下一秒钟内撞向地球,摧毁我们所知道的文明并杀死数十亿人的概率是多少?可以说,任何不幸的事件的概率实际上都不太重要。
如果我们有与输出尺寸的“完美”的散列函数Ñ,我们有p消息散列(单独的消息长度是不重要的),则碰撞的可能性为大约p 2 /2 n + 1个(这是一个近似值,其是对于“小” p有效,即实质上小于2 n / 2)。例如,对于SHA-256(n = 256)和十亿条消息(p = 10 9),则概率约为4.3 * 10 -60。
大规模杀人犯的太空岩石平均每三千万年发生一次。这导致在下一秒至大约10 -15发生此类事件的可能性。这是45个比SHA-256的碰撞更可能的订单。简而言之,如果您发现SHA-256冲突令人恐惧,那么您的优先级是错误的。
在安全设置中,攻击者可以选择将被散列的消息,然后,攻击者可能会使用超过十亿条消息。但是,您会发现攻击者的成功概率仍然很小。这就是使用具有256位输出的哈希函数的全部要点:这样可以避免发生冲突的风险。
当然,以上所有假设均假定SHA-256是“完美的”哈希函数,远未得到证实。尽管如此,SHA-256似乎仍然很健壮。
发生冲突的可能性并不取决于文件的大小,而仅取决于文件的数量。
这是生日悖论的一个例子。Wikipedia页面提供了碰撞可能性的估计。如果运行这些数字,您会发现地球上生产的所有硬盘都无法容纳足够的1MB文件,因此SHA-256发生冲突的可能性甚至为0.01%。
基本上,您可以简单地忽略这种可能性。
首先,它不是零,而是非常接近零。
关键问题是如果实际发生碰撞会发生什么?如果答案是“核电站将爆炸”,那么您可能不应该忽略碰撞的可能性。在大多数情况下,后果并不那么可怕,因此您可以忽略碰撞的可能性。
同样不要忘记,您的软件(或软件的一小部分)可能已在数百万台计算机(当今几乎随处可见的一些小型嵌入式微型计算机)中部署并同时使用。在这种情况下,您需要将获得的估计值乘以最大可能的份数。