当使用它md5sum
来验证文件的完整性时,该过程有多准确?
经过验证的 MD5 是否意味着每个位都完全相同,或者是否存在一个必须突破的阈值,二进制改变才会反映在 MD5 中?
任何有关如何生成 md5 的文档也将受到赞赏。
答案1
MD5 就是为此目的而破解的,因为聪明的对手可能会恶意构建两个不同的数据块,产生相同的 MD5 哈希值。
但是,使用 MD5 来防止传输或存储过程中意外损坏数据是完全合适的(尽管几乎肯定有更好的方法)。虽然可以想象这种事件可能会导致 MD5 哈希值相同,但这种概率非常低,几乎无法想象这是一个值得担心的概率。由背景辐射、隧道、静电和许多其他来源引起的故障的可能性要大几个数量级。
即使您有千万亿个数据单元,不匹配的 MD5 产生属于其中之一的 MD5 哈希值的概率也远小于千万亿分之一。
答案2
MD5 是一种哈希。它基本上将文件的全部内容映射到一个长度为 16 字节的小字符串中(如果我没记错的话)。
显然会有多个文件哈希值相同。因此,匹配的 MD5 值并不能保证文件之间完全匹配。
由于哈希的工作方式,因此不存在阈值。因此,MD5 总和甚至可以检测到单个位的变化。但是,许多单个位的变化可能会导致 MD5 哈希相同。因此,使用 MD5 来验证文件完整性以防止随机损坏是相当合理的,但如果存在恶意意图,则不行,因为有人可以在确保 MD5 哈希相同的同时修改文件。
答案3
MD5 哈希由 128 位组成。源中的一个翻转位会(平均)翻转哈希中的 64 位。
两个哈希值意外碰撞的概率是 1/2^128,也就是 340 十亿分之一、282 十亿分之一、366 十亿分之一、920 八亿分之一、938 九亿分之一、463 六亿分之一、463 五亿分之一、374 四亿分之一、607 万亿分之一、4317.68 亿 211 千 456 分之一。
但是如果你保留所有哈希值,那么感谢生日悖论概率稍微高一点。要使任何哈希碰撞的概率达到 50%,您需要 2^64 个哈希。这意味着,要获得碰撞,平均而言,您需要每秒对 60 亿个文件进行哈希处理,持续 100 年。
资料来源:porneL,https://stackoverflow.com/questions/201705/how-many-random-elements-before-md5-produces-collisions