Hash MD5逆恒等式:(X,Y)是否存在MD5(X)=Y和MD5(Y)=X

Hash MD5逆恒等式:(X,Y)是否存在MD5(X)=Y和MD5(Y)=X,hash,md5,Hash,Md5,是否存在两个相互散列的128位值 Find (X,Y) such that md5(X) = Y and md5(Y) = X 他们能在没有暴力的情况下被发现吗 额外学分: 我可以编一个术语“md5直观逆恒等式”吗 如果不是空的,解决方案集将是稀疏的 为了你今天的LOL,来吧: 相关的: 这与凯伯身份搜索不同 考虑以下情况的差异: md5(X) == X 要使其为真,X必须是128位的值 这与以下内容不同: bin2hex(md5('string')) == 'string' 这正是

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

Find (X,Y) such that md5(X) = Y and md5(Y) = X
他们能在没有暴力的情况下被发现吗

额外学分: 我可以编一个术语“md5直观逆恒等式”吗

如果不是空的,解决方案集将是稀疏的

为了你今天的LOL,来吧:

相关的:

这与凯伯身份搜索不同

考虑以下情况的差异:

md5(X) == X
要使其为真,X必须是128位的值


这与以下内容不同:

bin2hex(md5('string')) == 'string' 
这正是肯伯身份搜索的真正目的。如果您查看他们站点上的任何搜索实现,您可以很容易地看到,他们使用32个字符串,而不是128位数字作为md5函数的输入,因此不寻求md5(X)==X

我也不是第一个指出这一点的人,你可能会觉得很有启发性。

(两个答案都是在阅读时找到的)

回答问题(1),考虑以下内容:

bin2hex(md5('string')) == 'string' 
强制所有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

两个块之间有6个字节不同(字节39、91、119、167、219和247),散列为
790540225255FB1A26E4BC422AEF54EB4
。我可以想象这些块是由某种智能力算法†发现的,尽管我不确定


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

第一个问题在这里和XKCD论坛上进行了详细讨论。第二个问题是防止重复。这里可能是第一个指向XKCD on Stack Overflow的非漫画链接@蜥蜴比尔:是xkcd,不是xkcd;-):@Mechanicalsnail我不相信问题2是重复的,它是搜索两个128位的数字,其中md5操作作为一个逆运算。例如,值“1.618”和“0.618”(黄金分割比)以及操作“1/x”问题2未得到回答。。。您回答了md5(X)=Y和md5(X')=Y问题2是查找(X,Y),这样md5(X)=Y和md5(Y)=X(或证明解决方案将其设置为空)