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

问题描述 投票:147回答:8

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

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

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

random md5 hash
8个回答
269
投票

只有两个哈希意外碰撞的可能性是1/2128 which is 1 340 340十亿282十亿366非亿元920 octillion 938 septillion 463 sextillion 463 quintillion 374 quadrillion 607万亿431亿768百万211千456。

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


25
投票

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

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


17
投票

等等,是吗:

md5(filename) + timestamp

要么:

md5(filename + timestamp)

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


10
投票

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


7
投票

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


4
投票

虽然由于碰撞已经公布了MD5的问题,但随机数据之间的UNINTENTIONAL碰撞是exceedingly rare。另一方面,如果您对文件名进行散列,那么这不是随机数据,我希望快速发生冲突。


1
投票

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


0
投票

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

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.