md5sum有多准确?


27

当使用md5sum来验证文件的完整性,准确度如何处理?

经过验证的MD5是否意味着每个位都完全相同,还是在MD5中反映二进制更改之前必须打破某个阈值?

任何有关如何生成md5的文档也将不胜感激。



@choroba如果我正确地阅读了所有这些内容,则未检测到的更改的可能性会随着要验证的文件大小而增加。但是,这仍然是一个可能性,只有16字节的文件才能具有100%的确定性。我对么?
Konner Rasmussen 2014年

@Konner我阅读了您有关文件传输的问题。为此,它是安全的。假设我了解您以前的情况,那么在传输中被破坏的几率很小,并且您很可能在传输中丢失了部分复制文件。MD5等效于比较两个文件,其优点是您不需要同时访问两个文件。
Doktoro Reichard 2014年

15
“经过验证的MD5是否表示每个位都完全相同。” 请注意,这要归功于Pigeonhole原理。en.wikipedia.org/wiki/Pigeonhole_principle
Plutor

3
我认为您也无法保证16字节文件。
Mooing Duck

Answers:


65

为此,MD5遭到了智能对手的攻击。可能会恶意地构造两个产生相同MD5哈希值的不同数据块。

但是,使用MD5来防止传输或存储中的意外数据损坏是完全合适的(尽管几乎肯定有更好的方法)。尽管可以想象这样的事件可能导致MD5哈希相同,但是该概率是如此之低,以至于几乎是无法想象的值得担心的概率。由背景辐射,隧道效应,静态效应和许多其他来源引起的故障可能性更大。

即使您拥有四千万分之一的数据单位,不匹配的MD5产生属于这些四分之一单位之一的MD5哈希的概率也要比四分之一中的概率小得多。


虽然从理论上讲可能会生成具有相同散列的两个文件,但实际上是不可行的。特别是如果替换文件也应该有意义。例如,如果原始文件是英文文本,则可能没有其他匹配的英文文件。或者,如果它是Excel电子表格,则其他具有相同哈希值的文件都不是有效的电子表格。
Barmar 2014年

1
@Barmar:win.tue.nl/hashclash/Nostradamus这些家伙创建了许多具有相同MD5哈希值的pdf文件,以证明它是切实可行的。
philfr 2014年

26

MD5是哈希。它基本上将文件的整个内容映射为一个16字节长的IIRC小字符串。

显然会有多个文件散列到相同的MD5总和。因此,匹配的MD5总和不能保证文件之间的完全匹配。

这样就没有阈值,因为哈希的工作方式。因此,MD5和甚至可以检测到单个位的变化。但是,许多单个位更改在一起可能会导致MD5哈希相同。因此,使用MD5来验证文件完整性以防止随机破坏是非常合理的,但是如果可能存在恶意,则不可能,因为有人可以在确保MD5哈希相同的同时修改文件。


1
长话短说,md5只是一种验证文件完整性的快速而肮脏的方法,仅应在未检测到的错误不会引起灾难性后果的情况下使用md5,对吗?
Konner Rasmussen 2014年

3
最好的用途是检测传输或复制期间的损坏。并不是真正的安全性。
Michael Martinez

12
@KonnerRasmussen-这与影响的程度无关,这是威胁的性质。如果您担心两个文档可能意外地具有相同的MD5,请不要担心:您的计算机自发燃烧的可能性要高得多;如果您担心聪明的攻击者可能会生成与您已有的文档匹配的文档,那将是一个严重的问题,您应该获得更好的哈希值;如果您担心一个聪明的攻击者可能会生成两个相互匹配的文档,请不要“担心”:这一定发生。
Malvolio 2014年

5
当然,虽然从理论上讲可能会产生MD5哈希冲突,但要产生有用的冲突(例如,冲突文件是同一类型的文件,并且其内容至少是真实可信的)就很难了……
Shadur

6
@Shadur:曾经是这种情况,但是正在进行的安全性研究已经发现了生成MD5冲突的新方法,这使其变得更容易。特别是,如果您的文件格式允许使用大量自由格式的“注释”数据,则可以通过插入适当的注释来匹配任何MD5哈希。
MSalters 2014年

17

MD5-Hash由128位组成。源中的单个翻转位(平均)翻转哈希中的64位。

两个哈希偶然碰撞的概率为1/2 ^ 128,这是340非十进制中的282非十进制366非十进制920八十亿938 9月463六十亿463五十亿374四十亿万千607万亿431万亿768亿211000 456。

但是,如果保留所有哈希值,则由于生日的矛盾,概率更高。要使任何哈希冲突的可能性达到50%,您需要2 ^ 64个哈希。这意味着,要平均产生碰撞,您需要在100年内每秒散列60亿个文件。

资料来源:porneL,https ://stackoverflow.com/questions/201705/how-many-random-elements-before-md5-produces-collisions


8
所以你说还有机会吗?:p
Holloway 2014年

1
问题是,尽管您需要在100年内每秒散列60亿个文件,以确保您发现了碰撞;它很可能在第一秒内发生。
deroby 2014年

没错,它可能会在第一秒发生。但与以往一样,这都是出于平衡的原因。在可能无法接受这种风险的军事应用中,但是我会毫不犹豫地租用安全气囊传感器使用md5的汽车。请记住,在等待md5碰撞时,您可能多次遭到闪电击中。
Zsolt Szilagy 2014年

抱歉,2 ^ 128的一半是2 ^ 127,而不是2 ^ 64。
fischi 2014年

2
@fischi,阅读关于生日悖论的链接,以及en.wikipedia.org/wiki/Birthday_attack-这并不是简单地将哈希总数减半的问题。给定搜索空间H,在有50%的碰撞机会之前必须生成的哈希数大约为sqrt((pi / 2)* H)。如果您使用2 ^ 128进行数学运算,您将得到大约2 ^ 64的数字
Paul Dixon 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.