在我遇到MD5哈希冲突之前,我需要计算多高?

时间:2010-11-03 14:43:56

标签: md5

别介意我为什么要这样做 - 这主要是理论上的。

如果我是整数的MD5散列字符串表示,在两个散列碰撞之前我需要计算多高?

4 个答案:

答案 0 :(得分:2)

此问题(一般情况下)称为Birthday Paradox

可以轻松计算一般情况下的碰撞概率。但是,在您的特定情况下,您必须实际计算(并存储!)每个MD5。

编辑@Scott:不是真的。 Pigeonhole原则(仅仅是生日问题的一个特例)会说有2 ^ 128个可能的MD5值,我们肯定会在1 + 2 ^ 128次尝试后发生碰撞。生日悖论说,对于大约2 ^ 70个MD5值,碰撞概率将大于0.5。

根据存储要求的这些估算,由您来决定问题是否值得。我没有。

答案 1 :(得分:0)

显然,人们可以base a thesis on this very thing(或类似的问题,无论如何)。我还没看过,但史蒂文斯的论文中的某些内容可能对你有帮助(它显然与维基百科文章有关)。

答案 2 :(得分:0)

在一个完美的世界中,1 + 2^128。但我怀疑md5是完美的,我不能给你一个数字,但保证是<= 1+ 2^128

答案 3 :(得分:0)

这是一种科学的方法,可以找出你需要计算多高的估计值。

将MD5哈希值减少为4位。计算一下(确保计算直到达到100次碰撞,这样你才能得到一个好的平均值)

然后以8位进行相同的操作(再次,等待多次碰撞,以便计算平均值)。

一次又一次地执行此操作,直到您获得4,8,12,16位的平均值,然后查看是否可以找到趋势。遵循该趋势高达128位

您可能希望xor全部128位来提出您的较短版本。考虑第一部分或最后部分可能不是最佳测试。