md5假阳性校验和的可能性有多大?

Gar*_*son 8 checksum md5

我有一个客户端在内部分发大型二进制文件.他们还传递文件的md5校验和,并在用作工作流程的一部分之前显然根据校验和验证文件.

然而,他们声称"经常"他们在文件中遇到腐败,其中md5仍然说该文件是好的.

我读过的所有内容都表明这应该是非常不可能的.

听起来有可能吗?另一种哈希算法会提供更好的结果吗?我是否应该查看流程问题,例如他们声称要检查校验和,但不是真的这样做?

NB,我还不知道在这种情况下"经常"意味着什么.他们每天处理数百个文件.我不知道这是每日,每月还是每年发生.

rec*_*ive 11

MD5是128位加密散列函数,因此不同的消息应该在128位空间上很好地分布.这意味着两个文件(不包括专门用于击败MD5的文件)应该有1到2 ^ 128的碰撞几率.换句话说,如果每隔纳秒比较一对文件,那么它就不会发生.

  • 好吧,你知道它已经发生了,不是吗?当然,这些冲突是被激起的(一个是试图制作两个具有相同 MD5 校验和的不同文件),但这并没有改变这样一个事实,即有几个人类已知的文件(这些文件也在野外)产生完全相同的 MD5 校验和,即使它们包含完全不同的数据。 (2认同)
  • @Mecki:您是否阅读过我所说过的部分"(不包括专门为打败MD5而建的文件)"? (2认同)
  • 这是因为"生日悖论".尽管如此,没有人有足够的文件证明他们偶然发生了碰撞.没有人拥有100万亿份文件. (2认同)

Nor*_*ame 5

如果文件已损坏,则损坏的文件与未损坏的文件具有相同的md5校验和的概率为1:2 ^ 128.换句话说,它几乎就像"经常"一样永远发生.天文数据更可能是您的客户误报了实际发生的事情(比如他们正在计算错误的哈希值)


Set*_*eth 5

听起来像是在使用MD5时出现了错误(也许是在MD5中使用了错误的文件),或者在使用的库中出现了错误。例如,我曾经使用的旧版MD5程序无法处理2GB以上的文件。

这个问题表明,平均而言,如果每秒生成60亿个文件,则平均每100年就会发生一次碰撞,因此这不太可能。