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

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

20706 次浏览

也许吧,但是找到它要比我们花更长的时间或者会危及到 MD5。

因为散列是不可逆的,所以很难计算出来。解决这个问题的唯一方法,就是计算散列的每个可能输出的散列,然后看看是否能找到匹配的。

To elaborate, there are 16 bytes in an MD5 hash. That means there are 2^(16*8) = 3.4 * 10 ^ 38 combinations. If it took 1 millisecond to compute a hash on a 16 byte value, it would take 10790283070806014188970529154.99 years to calculate all those hashes.

因为 MD5和是128位长,所以任何固定点也必须是128位长。假设任何字符串的 MD5和均匀分布在所有可能的和上,那么任何给定的128位字符串是一个不动点的概率是 1/2 < sup > 128

因此,没有128位字符串是一个固定点的概率是(1-1/2128) 2 < sup > 128 ,所以存在一个固定点的概率是1-(1-1/2128) 2 < sup > 128

由于 n 趋向于(1-1/n) N的无穷大的极限是 1/[俄语],而2128几乎肯定是一个非常大的数,所以这个概率几乎正好是1-1/[俄语]≈63.21% 。

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

Strictly speaking, since the input of MD5 is 512 bits long and the output is 128 bits, I would say that's impossible by definition.

有两种解释,如果任选一种,找到一个固定点的概率增加到81.5% 。

  • 解释1: 二进制中 MD5输出的 MD5与其输入匹配吗?
  • 解释2: 巫术中 MD5输出的 MD5与其输入匹配吗?

While I don't have a yes/no answer, my guess is "yes" and furthermore that there are maybe 2^32 such fixed points (for the bit-string interpretation, not the character-string intepretation). I'm actively working on this because it seems like an awesome, concise puzzle that will require a lot of creativity (if you don't settle for brute force search right away).

我的方法是这样的: 把它当作一个数学问题。我们有128个布尔变量和128个方程来描述输入的输出(它们应该匹配)。通过在算法中插入表中的所有常量和填充位,我希望这些方程可以被极大地简化,从而产生一个优化到128位输入情况的算法。这些简化的方程可以用一些漂亮的语言编程,以便进行有效的搜索,或者再次进行抽象处理,一次分配一个位,注意矛盾。您只需要看到输出的一小部分就可以知道它与输入不匹配!

我的蛮力尝试找到了一个12前缀和12后缀匹配。

prefix 12: 54db1011d76dc70a0a9df3ff3e0b390f-> 54db1011d76d13795603122ad86d762

后缀12: df12c1434cec7850a7900ce027af4b78 -> b2f6053087022898fe920ce027af4b78

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