是否有MD5定点,其中md5(x)== x?


114

MD5转换中是否有固定点,即是否存在x这样md5(x) == x


8
哪个md5转换?数学上的一个(从任何位串到128位)还是数学上的一个(从任何字节串到32个字符的十六进制串)(实用的)?这不是很明显,对他们俩的答案都是一样的...
拉法尔Dowgird

4
好吧,他们相同的答案,对不对?我们知道不存在非128位长的x md5(x) == x,因为md5(x) 它的长度 128位。因此,当且仅当在128位域的md5中存在固定点时,md5中的定点适合任意大小的输入。
保罗,2015年

1
我不认为它们是相同的答案,因为对于实际的32个字符的十六进制字符串,您是使用大写[AF]还是小写[af]表示十六进制数字是一个任意选择。两种表示都对应于相同的128位数字,但是当作为MD5的输入提供时,它们将产生不同的哈希值。所以,有一个固定点的概率或者申述的,其实是1-(1/e)*(1/e) ≈ 86.47%
杜尚

Answers:


138

由于MD5总和为128位长,因​​此任何固定点也必须必须为128位长。假设任何字符串的MD5和均匀地分布在所有可能的和,则概率任何给定的128位串是一个固定点是1 / 2 128

因此,没有128位串是一个固定点的概率是(1 - 1 / 2 1282 128,使得存在一个固定的点的概率为1 - (1 - 1 / 2 1282 128

由于随着n进入的无穷大的极限(1 - 1 / ÑÑ1 / ë,和2 128是肯定一个非常大的数字,这个概率是几乎完全1 - 1 / Ë ≈63.21%。

当然,实际上不涉及任何随机性-有固定点或没有固定点。但是,我们可以63.21%的信心存在一个固定点。(此外,请注意,此数字并不取决于键空间的大小-如果MD5的总和是32位或1024位,则答案是相同的,只要它大于大约4位或5位即可。)


11
您是否可以实际假设任何字符串的MD5和都均匀地分布在所有可能的和上?
Ori Pessach,2009年

13
是。大数和模数形成大致随机的分布。如果没有,您将不断发生碰撞。md5的性质强制其输出随机分布。
Stefan Kendall,2009年

2
我用你的答案为这个答案基地:security.stackexchange.com/questions/3851/...
CesarB

1
在这里,有一个金徽章。
丹尼斯

除了md5是确定性的,不是随机的。
PyRulez

13

我的暴力破解尝试找到了12个前缀和12个后缀匹配项。

前缀12:54db1011d76dc70a0a9df3ff3e0b390f-> 54db1011d76d137956603122ad86d762

后缀12:df12c1434cec7850a7900ce027af4b78-> b2f6053087022898fe920ce027af4b78

博客文章:https : //plus.google.com/103541237243849171137/posts/SRxXrTMdrFN


链接无效。Google plus于4月关闭
-Typewar,

抱歉...我尚未保存博客文章,并且google +备份对我不起作用。但是这是我的github项目:github.com/thomasegense/MD5FixPointSearch
Thomas Egense

您是否确定此问题:前缀12:54db1011d76dc70a0a9df3ff3e0b390f-> 54db1011d76d137956603122ad86d762我使用了md5sumlinux命令,所以得到了不同的结果
ThunderPhoenix

然后不确定您使用的md5sum是否正确。您也可以在此处在线确认:onlinemd5.com
Thomas Egense

11

由于哈希是不可逆的,因此很难弄清楚。解决此问题的唯一方法是在哈希的所有可能输出上计算哈希,然后查看是否匹配。

详细地说,MD5哈希中有16个字节。这意味着有2 ^(16 * 8)= 3.4 * 10 ^ 38个组合。如果在16字节值上计算哈希值花了1毫秒,那么计算所有这些哈希值将需要10790283070806014188970529154.99年。


2
是的,如果您必须尝试每一个。但是您只需要尝试所有可能的输入来验证没有固定点。如果有一个固定的点(亚当·罗森菲尔德的答案表明可能存在),那么就需要一个幸运的猜测。
纳夫2009年

该函数在没有数学逆的意义上是不可逆的,但这仅意味着对于给定的输出,可能有多个输入。通常,给定输出的输入空间将是无限的,但是如果您知道它以128位值开头,则可以缩小可能性。如果您不将该函数视为黑盒,而是有可能“向后工作”,而是阅读规范并运用一些数学思想。
rndmcnlly

2
@Naaff:“只需要尝试所有可能的输入”-这比尝试每个哈希更容易,怎么办?相反,因为几个可能的输入可能会散列到同一输出中。
Piskvor于

1
@Piskvor:您误解了纳夫的意思(我也花了一分钟时间)。一种更清晰的说法是“只有在没有固定点的情况下,您才能尝试尝试所有可能的输入(从2 ^ 128空间开始)”。换句话说,如果在此之前没有任何可能性,您只需尝试所有可能性。那么1.08e28年,还是一个幸运的猜测!
P爸爸2009年

“如果花费1毫秒来计算哈希”。现代GPU每秒可以计算数十亿个哈希,比这快得多。但是,仍然需要很长时间。
markasoftware

0

虽然我没有“是/否”的答案,但我的猜测是“是”,此外,大概有2 ^ 32这样的固定点(用于位字符串解释,而不是字符串解释)。我正在积极研究这一问题,因为这似乎是一个很棒的,简洁的难题,需要大量的创造力(如果您不立即进行暴力搜索的话)。

我的方法如下:将其视为数学问题。我们有128个布尔变量和128个方程式,它们根据输入(应该匹配)描述输出。通过插入算法表和填充位中的所有常量,我希望可以大大简化方程式,以生成针对128位输入情况进行优化的算法。然后,可以用某种不错的语言对这些简化的方程式进行编程,以进行有效搜索,或者再次进行抽象处理,一次分配单个位,注意矛盾。您只需要查看输出的几位即可知道它与输入不匹配!


这真的很有趣,请分享您在这条道路上的进展情况?
user230910

-1

可能会,但是找到它会比我们花费更长的时间,或者会损害MD5。


6
它没有被破坏。他们所能做的就是,在合理的时间内生成两个等于相同哈希值的字符串。生成等于特定哈希值的字符串仍然非常困难。
Kibbee

9
不知道如何找到一个会破坏md5的方法,甚至比如果我告诉您MD5(“褐狐的快速跳过懒狗”)会破坏算法的方法还多
Kip,

5
固定点可能会在数学上产生一些影响,从而可能导致更全面地违反MD5。我不相信Glomek确实可以证明“可能”合理;我会毫不含糊地接受“可能”。
乔纳森·勒夫勒

-9

有两种解释,如果允许其中一种选择,则找到固定点的可能性会增加到81.5%。

  • 解释1:二进制的MD5输出的MD5是否与输入匹配?
  • 解释2:十六进制 MD5输出的MD5是否匹配其输入?

13
关于MD5算法,没有什么暗示十六进制的内容-它对字节进行操作并产生字节-因此我认为后一种解释是无效的。
尼克·约翰逊,

解释1是否有固定点,解释2仍然存在(或不存在)。但是,如果您有兴趣探索问题,那么解释1似乎是一个更好的起点,因为您赢得了不必对大小写和字符编码做出各种任意决定。最重要的是,二进制大小写的位数更少!
rndmcnlly

4
您误解了十六进制的真正含义。您可以用十六进制表示二进制,就像用十进制,八进制或基数3表示二进制一样。它是一个数字,并且具有不同的表示形式。因此,解释1和2是同一回事。您要考虑的是字符串表示形式,它根本不是相同的十六进制,而是完全不同的二进制值。实际上,您可能在不同的字符集中有许多不同的十六进制字符串。128位哈希值可以表示为“十六进制”字符串,但不等于该字符串。该字符串不是相同的二进制数据。

Dustin,解释2确实表示显示字符串的MD5。
约书亚

4
但是,这个想法有一个很大的问题,因为它直接取决于您的字符编码。不同的编码方案将导致完全不同的结果集。甚至有一个完整的项目和一篇文章,基于对MD5运作方式的误解而将其揭穿acodingfool.typepad.com/blog/2009/05/the-kembler-identity.html
定义了2009年

-23

严格来说,由于MD5的输入为512位长,输出为128位,因此从定义上讲这是不可能的。


4
否,存在1字节字符串的MD5。
约书亚

7
输入可以是任何大小。如果输入少于512字节,则将其填充,但是小的输入仍然可以接受。摘自Wikipedia:“ MD5将可变长度消息处理为128位固定长度输出。输入消息分为512位块的块(16个32位小字节序整数);对消息进行填充,以便其长度可被512整除。”
纳夫2009年

因此,您假设0000000001 = 1?那我会争辩说,充其量这个问题没有明确说明。
Ori Pessach,2009年

11
MD5 的输入可以是128位。坦率地说,如果MD5想要填充该输入,那就是MD5的事。输入仍然定义良好。同样,输出是定义良好的128位。如果(定义明确的)输入和(定义明确的)输出都相同,则MD5(x)= x。
纳夫2009年

2
@Joshua空字符串(即0字节)的MD5甚至存在
Kip
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.