我对这篇博文http://blogs.technet.com/dmelanchthon/archive/2009/07/23/windows-7-rtm.aspx(德语)
有点启发目前的观点是md5和sha1都有些破碎。不容易和快速,但至少对于实际可能范围内的md5。 (我不是一个加密专家,所以也许我错了这样的东西)。
所以我问自己是否可以创建一个文件A',其中相同的大小,相同的md5总和,以及相同的sha1总和作为原始文件A。
首先,它有可能吗?
第二,现实中是否有可能使用当前的硬件/软件?
如果没有,那么即使它们存在某种弱点,也不是最简单的方法来保证文件的完整性总是使用两种不同的算法吗?
更新:
只是为了澄清:想法是有一个文件A和一个满足条件的文件A':
size(A) == size(A') && md5sum(A) == md5sum(A') && sha1sum(A) == sha1sum(A')
答案 0 :(得分:7)
“它有可能吗?” - 是的,如果校验和的总大小小于文件的总大小,则无法避免冲突。
“现实中是否有可能使用当前的硬件/软件?” - 如果可以构造一个文本来匹配使用中的每个校验和的给定校验和,那么是。
请参阅wikipedia on concatenation of cryptographic hash functions,这也是谷歌的有用术语。
从该页面开始:
“然而,对于Merkle-Damgård哈希 函数,连接函数 只有最好的一样强大 组件,而不是更强。 Joux指出 2次碰撞导致 n-collisions:如果可行的话 找到具有相同MD5的两条消息 哈希,实际上已经没有了 很难找到尽可能多的消息 攻击者的欲望与之相同 MD5哈希。在n条消息中 相同的MD5哈希,有可能 是SHA-1中的碰撞。该 需要额外的工作才能找到 SHA-1碰撞(超越 指数生日搜索)是 多项式。这个论点是 芬尼总结道。“
答案 1 :(得分:0)
对于天真的回答,我们会做出一些(不正确的)假设:
(基本上,没有丛生和分布良好的域名。)
如果发现与另一个SHA1哈希冲突的字符串的概率是p1,而MD5的概率是p2,则天真的答案是找到与两者冲突的概率是p1 * p2。
然而,哈希都被打破了,所以我们知道我们的假设是错误的。
哈希有结块,对某些数据的变化比其他数据更敏感,换句话说,并不完美。另一方面,一个完美的,非破碎的哈希算法将具有上述属性,而这正是使得难以找到冲突的原因。他们是随机的。
概率本质上取决于算法的属性 - 基本上,由于我们的假设是无效的,我们不能“轻易地”确定它有多难。事实上,难以找到碰撞的输入可能非常强烈地取决于输入字符串本身的特征。有些可能相对容易(但在今天的硬件上仍然可能不切实际),并且由于这两种算法的性质不同,有些可能实际上是不可能的。
答案 2 :(得分:-1)
所以我问自己是不是 可以创建一个文件A' 相同的大小,相同的md5总和,和 与原始文件相同的sha1和 甲
是的,复制一份文件。
除此之外,不是没有大量的计算资源来检查大量的排列(假设文件大小非常重要)。
你可以这样想:
如果文件大小增加n,则假冒伪装的可能性会增加,但测试组合所需的计算成本会以指数方式增加2 ^ n。
因此,文件越大, 的欺骗就越有可能,但你发现它的可能性就越小。
答案 3 :(得分:-1)
理论上是的,你可以拥有它,在实践中它是一个共谋的地狱。在实践中,甚至没有人能够创建SHA1共谋,更不用说MD5 + SHA1 + Size了。如果没有全世界的计算机功能并且运行一段时间,这种组合现在根本不可能。
虽然在不久的将来我们可能会看到SHA1和MD5中存在更多漏洞。并且在更好的硬件(尤其是GPU)的支持下,为什么不呢。
答案 4 :(得分:-2)
理论上你可以做到这一点。实际上,如果从MD5和SHA1提供的两个校验和开始并尝试创建一个产生相同的两个校验和的文件 - 这将非常困难(比创建生成相同MD5校验和的文件困难许多倍,或者单独的SHA1校验和)。