`md5sum` 的准确度如何?

Kon*_*sen 27 linux md5sum

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

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

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

Dav*_*rtz 65

为此目的,MD5 已被破解,以对抗智能对手。有可能恶意构建产生相同 MD5 哈希值的两个不同数据块。

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

即使您拥有千万亿个单位的数据,不匹配的 MD5 产生属于这些千万亿单位之一的 MD5 哈希值的概率也远小于千万分之一。


Ita*_*tai 26

MD5 是一个哈希值。它基本上将文件的全部内容映射到一个 16 字节长的 IIRC 小字符串中。

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

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

  • @KonnerRasmussen——这不是影响程度的问题,而是威胁的性质。如果您担心两个文档可能会意外地具有相同的 MD5,请不要担心:您的计算机自发起火的可能性要高得多;如果您担心聪明的攻击者可能会生成与您已有的文档匹配的文档,这是一个严重的问题,您应该获得更好的哈希值;如果您担心聪明的攻击者可能会生成两个相互匹配的文档,请不要“担心”:它*肯定* 会发生。 (12认同)
  • @Shadur:过去是这样,但正在进行的安全研究发现了产生 MD5 冲突的新方法,这使得这更容易。特别是,如果您的文件格式允许自由格式的“注释”数据块,则可以通过插入合适的注释来匹配任何 MD5 哈希。 (6认同)
  • 当然,虽然理论上可以生成 MD5 哈希冲突,但生成*有用* 冲突(例如,冲突文件是相同类型的文件,其内容至少是可信的)要困难得多...... (5认同)
  • 它的最佳用途是检测传输或复制过程中的损坏。不是真的作为一个安全的东西。 (3认同)

小智 17

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

两个散列意外碰撞的概率为 1/2^128,即 340 亿分之一 282 十亿 366 非亿 920 octillion 938 septillion 463 六亿 463 quintillion 374 万亿 615716334000000000000000000000000000000000000000000

但是,如果您保留所有哈希值,那么由于生日悖论,概率会更高一些。要使任何散列冲突有 50% 的机会,您需要 2^64 个散列。这意味着要发生冲突,平均需要在 100 年内每秒散列 60 亿个文件。

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

  • 所以你说还有机会吗?:p (8认同)
  • @fischi,阅读关于生日悖论的链接,还有 http://en.wikipedia.org/wiki/Birthday_attack - 这不是简单地将哈希总数减半的问题。给定搜索空间 H,在获得 50% 的碰撞机会之前必须生成的哈希数约为 sqrt((pi/2) * H)。如果你用 2^128 做那个数学运算,你会得到一个大约 2^64 的数字 (2认同)