为啥密码散列函数中的冲突检测使查找其他冲突更容易?

Posted

技术标签:

【中文标题】为啥密码散列函数中的冲突检测使查找其他冲突更容易?【英文标题】:Why does a collision detection in a cryptographic hash function make finding other collisions easier?为什么密码散列函数中的冲突检测使查找其他冲突更容易? 【发布时间】:2010-10-25 16:46:58 【问题描述】:

从***,我读到:

Joux[3] 指出,2 次冲突导致 n 次冲突:如果找到具有相同 MD5 哈希的两条消息是可行的,那么找到攻击者想要的尽可能多的消息实际上并不困难具有相同的 MD5 哈希值。

但是为什么会这样呢?我无法想象为什么?算法是开放的,人们可以阅读生成哈希的数学,这是摘要机器。那么,如果我们知道一次碰撞,为什么它有助于找到新的碰撞?

是否只是对第一个碰撞消息进行小迭代,然后监视它们的更改以重新映射它们?

【问题讨论】:

好问题,但不幸的是与编程无关。 寻找其他碰撞需要编程... 【参考方案1】:

这不是所有散列函数的属性,而是Merkle–Damgård construction(MD5 和 SHA-1 的基础)的一个弱点,称为长度扩展。弱点在于您可以使用特别选择的附加数据“恢复”哈希计算。有关如何使用它来生成任意多次碰撞的完整详细信息,请参阅:

Multicollisions in Iterated Hash Functions. Application to Cascaded Constructions (Antoine Joux)

基于此思想的相关攻击,参见:

Understanding hash length extension attacks Flickr's API Signature Forgery Vulnerability

【讨论】:

虽然长度扩展是相关的,但这是一个明显的弱点。特别是哈希函数可以具有此属性,而不会受到长度扩展的影响。例如,当您在 Skein-512-512 中发现相同长度的碰撞时,这意味着状态碰撞,因此允许多次碰撞。对于其他哈希函数,输出冲突并不意味着状态冲突,但状态冲突仍然意味着多重冲突。【参考方案2】:

我认为这里的关键是“可行”这个词。在加密领域,可行意味着“与我试图打破的任何东西的价值相比,合理的时间量”,或者可能是“使用蛮力所花费的时间更少”,这取决于你如何看待事物。

所以,如果我可以找到 1 次碰撞,那么我可以找到 n 次碰撞,因为n*small 仍然很小。

n*small > value of breakage 处仍然会有 一些 n。

这是否适用于其他哈希函数?我相信是这样,但我可能是错的。

让火焰开始。

【讨论】:

如果你知道一个 MD5 冲突(相同长度的消息)找到更多相关的冲突比找到第一个冲突非常便宜/便宜得多。只需将相同的字符串附加到它们两个,它仍然是一个冲突。

以上是关于为啥密码散列函数中的冲突检测使查找其他冲突更容易?的主要内容,如果未能解决你的问题,请参考以下文章

散列表

散列查找的查找插入及冲突处理方法

散列表常见散列函数及处理冲突的方法

数据结构----哈希

散列函数之单散列算法解决冲突问题

散列密码的最佳实践 - SHA256 还是 SHA512?