为啥密码散列函数中的冲突检测使查找其他冲突更容易?
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 冲突(相同长度的消息)找到更多相关的冲突比找到第一个冲突非常便宜/便宜得多。只需将相同的字符串附加到它们两个,它仍然是一个冲突。以上是关于为啥密码散列函数中的冲突检测使查找其他冲突更容易?的主要内容,如果未能解决你的问题,请参考以下文章