MD5产生碰撞之前有多少随机元素?

时间:2008-10-14 15:43:28

标签: random md5 hash

我在Amazon S3上有一个图像库。对于每个图像,我md5我的服务器上的源URL加上一个时间戳来获取唯一的文件名。由于S3不能有子目录,我需要将所有这些图像存储在一个平面文件夹中。

我是否需要担心产生的MD5哈希值中的冲突?

额外奖励:在我开始看到MD5产生的哈希值发生冲突之前,我可以拥有多少个文件?

8 个答案:

答案 0 :(得分:269)

只有两个哈希意外碰撞的可能性是 1/2 128 which is 1 340 in uncillion 282 decillion 366 nonillion 920 octillion 938 septillion 463 sextillion 463 quintillion 374万亿607万亿431亿768万211万456。

但是如果保留所有哈希值,那么由于birthday paradox,概率会高一些。要让任何哈希与任何其他哈希冲突的几率为50%,您需要 2 64 哈希值。这意味着,为了获得冲突,平均而言,您需要哈希6 billion files per second for 100 years

答案 1 :(得分:25)

S3可以有子目录。只需在密钥名称中加上“/”,即可访问这些文件,就好像它们位于不同的目录中一样。我使用它来根据用户在S3中的用户ID将用户文件存储在不同的文件夹中。

例如:“mybucket / users / 1234 / somefile.jpg”。它与文件系统中的目录不完全相同,但S3 API具有一些功能,可以使它几乎完全相同。我可以要求它列出以“users / 1234 /”开头的所有文件,它会显示该“目录”中的所有文件。

答案 2 :(得分:17)

等等,是吗:

md5(filename) + timestamp

或:

md5(filename + timestamp)

如果是前者,你大部分都是通往GUID的,我也不会担心。 如果是后者,那么请参阅Karg的帖子,了解你最终会如何碰撞。

答案 3 :(得分:10)

碰撞的粗略经验法则是值范围的平方根。您的MD5 sig大概是128位长,因​​此您可能会看到超过2 ^ 64个图像的碰撞。

答案 4 :(得分:7)

虽然随机MD5冲突非常罕见,但如果您的用户可以提供文件(将逐字存储),那么他们可以设计冲突。也就是说,他们可以故意创建两个具有相同MD5sum但数据不同的文件。确保您的应用程序能够以合理的方式处理这种情况,或者使用更强大的哈希值,如SHA-256。

答案 5 :(得分:4)

虽然由于碰撞导致MD5出现了很好的公开问题,但随机数据之间的UNINTENTIONAL碰撞是exceedingly rare。另一方面,如果您对文件名进行哈希处理,那么这不是随机数据,我希望快速发生冲突。

答案 6 :(得分:1)

MD5碰撞极不可能。如果您有 9万亿 MD5,那么 9万亿中只有一次机会发生碰撞。

答案 7 :(得分:0)

它的可能性并不重要;有可能的。它可能发生在您散列的前两个事项上(非常不可能,但可能),因此您需要从一开始就支持冲突。