16

是否存在两个相互散列的 128 位值?

Find (X,Y) such that md5(X) = Y and md5(Y) = X

不用蛮力就能找到它们吗?

额外加分:我可以编造术语“md5-itive inverse identity”吗?

解决方案集将是稀疏的,即使不是空的。

对于你今天的 LOL,来吧:

https://github.com/flipmcf/playground/tree/master/md5-inverse-search

有关的:

MD5 定点
MD5 哈希冲突

4

2 回答 2

4

(阅读此链接时找到了两个答案)...

要回答问题 (1),请考虑以下几点:

强制所有 md5(x)=x 意味着检查 2.4x10^38 值。我的快速测试实现每小时可以测试一些 2.3x10^9 的值,这意味着它几乎需要 10^29 小时来强制它。假设我有 100 万人来帮助我,那么我们将缩短到 10^23 年。假设通过一些巧妙的优化,算法的速度提高了 100 万倍,而我们缩短到了 10^17 年。让我们假设计算机在一夜之间变得快了一百万倍,而我们的时间缩短到了 10^11 年,这比宇宙存在的时间要长得多。

我想通过一些智能力算法可以更快地剔除上述内容†。

要回答问题(2),以下两个块具有相同的 md5 哈希:

d131dd02c5e6eec4693d9a0698aff95c 2fcab58712467eab4004583eb8fb7f89
55ad340609f4b30283e488832571415a 085125e8f7cdc99fd91dbdf280373c5b
d8823e3156348f5bae6dacd436c919c6 dd53e2b487da03fd02396306d248cda0
e99f33420f577ee8ce54b67080a80d1e c69821bcb6a8839396f9652b6ff72a70

d131dd02c5e6eec4693d9a0698aff95c 2fcab50712467eab4004583eb8fb7f89
55ad340609f4b30283e4888325f1415a 085125e8f7cdc99fd91dbd7280373c5b
d8823e3156348f5bae6dacd436c919c6 dd53e23487da03fd02396306d248cda0
e99f33420f577ee8ce54b67080280d1e c69821bcb6a8839396f965ab6ff72a70

两个块之间相差 6 个字节(字节 39、91、119、167、219 和 247),哈希为79054025255fb1a26e4bc422aef54eb4. 我想这些块是由某种智能力算法发现的†,尽管我不确定。

†:蛮力考虑到 md5 分析的弱点

于 2009-11-13T19:23:04.760 回答
3

这与 Kember 身份搜索不同。

考虑以下情况的差异:

md5(X) == X

为此,X 必须是 128 位值。

这与以下内容不同:

bin2hex(md5('string')) == 'string' 

这正是 Kember Identity Search 真正寻求的。如果您查看他们网站上的任何搜索实现,您可以很容易地看到他们使用 32 个字符的字符串,而不是 128 位数字,作为 md5 函数的输入,因此不寻找 md5 (X) == X。

我也不是第一个指出这一点的人,你可能会发现这篇文章直接针对 Kris Thompson 的“Kember Identity”很有启发性。

于 2009-06-18T15:51:34.157 回答