【发布时间】:2011-01-14 05:40:28
【问题描述】:
我一直在消息摘要领域进行一些初步研究。特别是加密哈希函数如 MD5 和 SHA-1 的碰撞攻击,如 Postscript example 和 X.509 certificate duplicate。
据我所知,在 postscript 攻击的情况下,生成了特定数据并将其嵌入到 postscript 文件的标题中(在渲染过程中会被忽略),这导致 md5 的内部状态达到这样的状态修改后的文件措辞将导致最终的 MD 值与原始 postscript 文件相同。 X.509 采用了类似的方法,将数据注入证书的注释/空白部分。
好的,这是我的问题,我似乎找不到任何人问这个问题:
为什么不将ONLY正在消耗的数据的长度作为最终块添加到 MD 计算中?
对于 X.509 - 为什么将空格和 cmets 作为 MD 的一部分考虑在内?
诸如以下之一的简单过程是否足以解决所提议的碰撞攻击:
- MD(M + |M|) = xyz
- MD(M + |M| + |M| * magicseed_0 +...+ |M| * magicseed_n) = xyz
在哪里:
- M : 是消息
- |M| : 消息大小
- MD : 是消息摘要函数(例如:md5、sha、whirlpool 等)
- xyz : 是消息 M 和 |M| 的实际消息摘要值的配对。
- magicseed_{i}:是使用种子根据添加大小之前的内部状态生成的一组随机值。
这项技术应该可以工作,因为迄今为止所有此类碰撞攻击都依赖于向原始消息添加更多数据。
简而言之,生成碰撞消息所涉及的难度级别如下:
- 不仅生成相同的MD
- 但也是可理解/可解析/兼容的
- 并且与原始消息的大小相同,
如果不是几乎不可能的话,也是非常困难的。有没有讨论过这种方法?任何指向论文等的链接都会很好。
进一步的问题:对于从 U 中随机选择的散列函数 H,公共长度的消息冲突的下限是多少,其中 U 是通用散列函数的集合?
是 1/N(其中 N 是 2^(|M|))还是更大?如果它更大,则意味着有不止 1 条长度为 N 的消息将映射到给定 H 的相同 MD 值。
如果是这样,找到这些其他消息的实用性如何? bruteforce 将是 O(2^N),有没有一种时间复杂度低于 bruteforce 的方法?
【问题讨论】:
-
由于这是一个研究/理论问题,您可能希望将其迁移到cstheory.stackexchange.com
-
只针对前 5 个备用站点,不幸的是 ctheory 不是其中之一。不过,我有一半的答案。
标签: cryptography math hash-collision message-digest