MD5反身份验证:是否存在(X,Y),使得md5(X)=Y且md5(Y)=X?

16

1
@Bill the Lizard:是xkcd,不是XKCD;-) - Zifre
@Mechanicalsnail,我不认为问题2是https://dev59.com/L3I-5IYBdhLWcg3woJ9J的重复。这是在寻找两个128位数字,其中md5操作充当反向操作。例如,值“1.618”和“0.618”(黄金比例)以及操作“1/x”。 - FlipMcF
“md5反函数”是一个合适的术语,类似于易于理解的“乘法反元素”: 如果f(x) = 1/x,则数字对(2, 0.5)是它们的反元素: f(2) = 0.5 f(0.5) = 2而乘法的“单位元”或“不动点”是“1”: f(1) = 1 - FlipMcF
Notch(可能是给我们“Creeper”和“Nether”的那个家伙)利用他的数学能力,确定 md5(X)= X 存在 %37 的几率。 - FlipMcF
我正在编辑这篇文章,使得MD5(X) = Y和MD5(Y) = X,并让https://dev59.com/xHVC5IYBdhLWcg3woCjN处理MD5(X) = X的问题。 - FlipMcF
显示剩余3条评论
2个回答

4
(这两个答案都是在阅读这个链接时发现的)...
回答问题(1),请考虑以下内容:
暴力破解所有md5(x)=x的意思是检查2.4x10^38个值。我的快速测试实现每小时可以测试大约2.3x10^9个值,这意味着需要花费近10^29个小时来进行暴力破解。 假设我找到一百万人帮我,那么我们只需要10^23年.. 假设算法通过一些巧妙的优化变得快了一百万倍,那么我们只需要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的弱点进行分析。


问题2尚未回答... 你回答了md5(X)= Y和md5(X')= Y问题2是找到(X,Y),使得md5(X)= Y且md5(Y)= X (或证明解集为空) - FlipMcF

3

我不是在讨论Kember身份搜索。

考虑以下情况的区别:

md5(X) == X

为了使这个成立,X 必须是一个 128 位的值。

这与以下内容不同:

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

这就是Kember身份搜索实际寻找的内容。如果您查看其网站上的任何搜索实现,您可以轻松地看到它们正在使用32个字符的字符串,而不是128位数字作为md5函数的输入,因此不是在寻找md5(X)== X。
我并不是第一个指出这一点的人,您可能会发现Kris Thompson直接针对“Kember Identity”的文章很有启发性。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接