【问题标题】:Example of hash collision (printable strings) [closed]哈希冲突示例(可打印字符串)[关闭]
【发布时间】:2014-11-30 18:18:15
【问题描述】:

我已经搜索了很多 MD5 哈希冲突,但我只找到了二进制示例。我想找到两个 UTF-8 字符串,它们具有相同的 MD5 哈希值。有没有,或者冲突只适用于二进制数据?

【问题讨论】:

  • 肯定有,您是否愿意花时间寻找它们是另一个问题。您应该只考虑到 2**128 是一个安静的大数字。参考:en.wikipedia.org/wiki/MD5
  • 这个问题正在meta讨论。
  • crypto.stackexchange.com 上有一个关于这个的完整问题,对于这类问题来说这是一个更合适的位置。
  • @IterAtor 重点不是问题是重复的,而是它属于那个站点而不是这个站点
  • @IterAtor 仍然不是编程问题。您是否尝试编写代码将二进制数据转换为 UTF8 字符串?如果您这样做了并且在进行该工作时遇到了问题,那么您应该使用该代码编写一个新问题,以便我们提供帮助。

标签: hash cryptography md5


【解决方案1】:

绝对有可能:

  • 我们都同意,由于birthday paradox,MD5 存在冲突 - 我们将无限多可能的输入映射到属于有限序列的元素。
  • 很有可能存在无限多的冲突:我们能够产生无限多对的输入,而 MD5 会尝试统一映射它们。

仅凭这一点,其中一些冲突就绑定为有效的 UTF-8 字符串,但它们极为罕见,因为其中大部分只是随机的二进制垃圾。

如果您绝对需要查找此类消息,我建议使用collision finder written by Patrick Stach,它应该会在几个小时内返回一对任意消息,或者my attempt to improve it。后者使用了 Wang(第一个展示 MD5 碰撞示例的人)、Lian、Sasaki、Yajima 和 Klima 在后来的论文中提出的技术。

我认为你也可以在某种程度上使用length extension attack,但这需要对MD5内部发生的事情有更深入的了解。

【讨论】:

  • 真的是“生日悖论”吗?我认为应该是pigeonhole principle(也从生日悖论维基页面链接)。
【解决方案2】:

存在 UTF-8 冲突。由于加密散列的性质,很难找到它们,即使是像 MD5 这样被破坏的散列。

您可以搜索 MD5 Rainbow Tables,它可用于密码破解,因此可用于 UTF-8 字符串。正如@alk 指出的那样,蛮力搜索将需要很长时间。

【讨论】:

  • 谁在提高这个答案的分数,请不要。它很旧,值得安静地离开。
【解决方案3】:

典型的 MD5 哈希冲突示例 (hex - from here):

消息 1:

d131dd02c5e6eec4693d9a0698aff95c 2fcab58712467eab4004583eb8fb7f89
55ad340609f4b30283e488832571415a 085125e8f7cdc99fd91dbdf280373c5b
d8823e3156348f5bae6dacd436c919c6 dd53e2b487da03fd02396306d248cda0
e99f33420f577ee8ce54b67080a80d1e c69821bcb6a8839396f9652b6ff72a70

消息 2

d131dd02c5e6eec4693d9a0698aff95c 2fcab50712467eab4004583eb8fb7f89
55ad340609f4b30283e4888325f1415a 085125e8f7cdc99fd91dbd7280373c5b
d8823e3156348f5bae6dacd436c919c6 dd53e23487da03fd02396306d248cda0
e99f33420f577ee8ce54b67080280d1e c69821bcb6a8839396f965ab6ff72a70

实际上是有效的 UTF-8 字符串。它们不包含任何 NULL 字节,因此是 UTF-8 字符串。现在,它们毫无意义,解码后看起来像垃圾:

消息 1:

1i=\/ʵF~@X>U4 䈃%qAZQ%ɟ7<[؂>1V4[m6Sⴇ9cH͠3BW~Tp
Ƙ!e+o*p

(有些字符是控制字符)

消息 2:

1i=\/ʵF~@X>U4    䈃%AZQ%ɟr7<[؂>1V4[m6S49cH͠3BW~Tp(
Ƙ!eo*p

(同样的情况)


哦,在我忘记之前,这是 MD5 哈希:

79054025255fb1a26e4bc422aef54eb4

【讨论】:

  • 我不相信该网站会接受十六进制编码的数据。而且 UTF 字符串并不是完全可打印的。尝试在 *nix shell 终端管道中使用 xxdmd5sum
  • 这些显然不是有效的 UTF-8。我假设您的 UTF-8 解码器接受无效的字节序列。 31 dd 02 不能是有效的,因为 UTF-8 永远不会产生一个高位设置的字节被高位未设置的字节包围。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-04-04
  • 2018-08-04
  • 2010-10-18
  • 2010-09-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多