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

在MD5转换中是否存在一个不动点,即是否存在x使得md5(x) == x

由于MD5总和是128位长,所以任何固定点必须也必须是128位长。 假设任何string的MD5总和均匀分布在所有可能的总和上,那么任何给定的128位string是固定点的概率是1/2 128

因此,没有128位的string是一个固定点的概率是(1 – 1/2 1282 128 ,所以有一个不动点的概率是1 – (1 – 1/2 1282 128

由于n的极限值达到(1 – 1 / n )的无穷大,所以n1 / e ,而2 128肯定是一个非常大的数字,这个概率几乎正好是1 – 1 / e≈63.21%。

当然,实际上并不存在随机性,要么是固定的,要么是没有的。 但是,我们可以有63.21%相信有一个固定点。 (另外请注意,这个数字并不取决于密钥空间的大小 – 如果MD5总和是32位或1024位,只要大于大约4或5位,答案将是相同的)。

由于哈希是不可逆转的,所以这很难弄清楚。 解决这个问题的唯一方法是计算散列的每个可能输出的散列值,然后查看是否find了匹配项。

详细说明,MD5哈希中有16个字节。 这意味着有2 ^(16 * 8)= 3.4 * 10 ^ 38的组合。 如果花费1毫秒来计算16字节值的散列值,则需要花费10790283070806014188970529154.99年来计算所有这些散列值。

我的蛮力尝试发现了12个前缀和12个后缀匹配。

前缀12:54db1011d76dc70a0a9df3ff3e0b390f – > 54db1011d76d137956603122ad86d762

后缀12:df12c1434cec7850a7900ce027af4b78 – > b2f6053087022898fe920ce027af4b78

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

虽然我没有是/否的答案,但是我的猜测是“是”,而且可能有2 ^ 32个这样的固定点(对于位串解释而不是string解释)。 我正在积极研究这个问题,因为它看起来像一个真棒,简洁的谜题,需要大量的创造力(如果你不立即进行蛮力search)。

我的方法如下:将其视为math问题。 我们有128个布尔variables,128个方程描述了input的input(应该匹配)。 通过插入algorithm表中的所有常量和填充位,我希望可以大大简化方程,从而产生一个针对128位input情况而优化的algorithm。 这些简化的等式可以用一些很好的语言进行编程,以便进行有效的search,或者再次抽象地处理,一次分配单个位,注意矛盾。 您只需要查看输出的几个位就可以知道它与input不匹配!

也许,但是find这个要比我们现在要花费的时间要长,或者会涉及折中MD5。

有两种解释,如果允许select一个,find一个固定点的概率增加到81.5%。

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

严格地说,由于MD5的input是512位长,输出是128位,所以我认为这是不可能的。