← 返回首页

梦里找到的MD5不动点

发布时间: 2026-02-15 11:02(北京时间)

摘要: 作者描述了一个梦境,在梦中发现了一个MD5哈希函数的不动点,并探讨了其理论难度和验证方法。随后,作者转向现实中的计算尝试,计划使用快慢指针算法寻找MD5的环,以降低内存开销,并分析了该方法的滞后性。整体语调冷静而具反思性,结合了幻想与理性分析。

标签: MD5算法, 不动点理论, 计算复杂度, 梦境叙事, 快慢指针, 反思, 冷静, 技术探索

字数: 1131

原文链接: /7402396589/QrV1f0JYa

昨晚梦到自己发了一篇很短很短的论文,整个论文的价值就只有一个等式
MD5(x)===x

是的,在梦里我发现了一个128bit的MD5不动点。

当然,这目前也只能存在我的梦里。因为找到一个MD5不动点是一件非常非常非常困难的事情,想要MD5(x)===x 成立,那么能知道信息是x一定是128bit的长度,总空间是2^128,也就是约3.4x10^38。假设全球人类人手一部 iPhone 17 Pro Max,一起算,也需要接近270亿亿年才可能找到。而目前宇宙的年龄推测才138亿年,所以《我是宇宙,重生就为了算MD5不动点》也得拍195亿部才能看到大结局。

在梦里论文发表之前我想了很多办法来证明这是自己发现的,因为这个东西,一旦发布出来,所谓的难度就坍缩下来了,成为了一条谁都可以拥有并且可以验证的信息。

我先想到的是ZK Proof,我把Proof进行SHA256后发布到微博。也把SHA256(MD5(x))发布到微博。一环套一环,360度无死角全部进行一个时间戳认证,证明这就是我自己发现的。

论文发表之后,各种声音都有,有些人觉得不就是一串数据,也没啥用。有些人就觉得这个发现很有意义,各种吵闹。还有人认为,找到不动点可能不重要,但这个人怎么找到的可能是一件很重要的事情,于是把我抓起来拷问了。

微博正文我以前也好奇过MD5的环和不动点,而找环与找不动点的算法其实是可以用一套的,如果找到的环长度是1那么这就是一个不动点。不管是找到了环还是不动点,都不亏。

但以前跑过一段时间的找环脚本,有很多“缺陷”。首先我太贪心了,直接去找128bit的。第二是为了能判断环的存在,选择了缓存所有路径的办法,内存开销极大。

所以今天打算继续找环。目标截断到64bit,根据生日悖论来说搜索空间约42.9亿次,我的电脑应该是能跑出来的。但即便是截断到64bit,如果缓存所有的路径,理论上需要32GB的内存,而用Python跑的话实际开销可能达到128GB或更多。

我非常需要一种办法,可以不缓存所有的路径还能判断出环的存在。请教了下Gemini,还是有收获的,学到了一种叫“快慢指针(Floyd’s Cycle Finding Algorithm)”的办法。原理是只缓存快慢两个指针,假如存在环,那么快指针一定会有追上慢指针的时刻。类似在环形跑道上的龟兔赛跑。

内存是狠狠地省下了,但快慢指针的代价是什么呢?我觉得是滞后性,因为判断成环的条件是快指针跑完一圈追上慢指针,假如这个环的长度非常非常长,那么为了“追上”慢指针,就需要更多的计算步数。

按照瑞利分布,我有99%的可能性,能在440分钟内找到一个MD5按64bit截断的环。