使用 MD5 进行文件完整性检查?

信息安全 正直 md5
2021-08-24 11:29:07

一般的

始终检查 .NET Framework 程序集的 MD5 哈希,以防止框架中存在 rootkit。改变的组件是可能的并且易于生产。检查 MD5 哈希将防止在服务器或客户端计算机上使用更改的程序集。

来源:https : //www.owasp.org/index.php/.NET_Security_Cheat_Sheet

MD5不就是为了这个目的而彻底坏掉的吗?

4个回答

MD5 哈希算法已被证明对碰撞攻击很弱。这意味着攻击者可以生成两个将产生相同哈希值的文件。这与文件完整性检查无关。

要创建与先前已知的哈希匹配的文件,该算法必须对第二次原像攻击很弱。虽然 MD5 在这方面存在一些理论上的弱点,但目前的攻击在计算上仍然不可行。

当然,未来可能会出现新的攻击。MD5 已被证明有几个明显的弱点。尝试改用 SHA256 之类的哈希函数。

完成@Terry 的回答:MD5 在碰撞中被彻底破坏,但对于原像和第二原像只有非常轻微的削弱。最著名的攻击成本为 2 123.4(请参阅文章),这对于现有技术来说是非常不可行的,但是从学术的角度来看,这比具有 128 位输出的完美哈希函数应该预期的 2 127阻力要好一些提供。

SHA-256 是当前的“默认散列函数”,您应该将其用于需要散列函数的任何内容,除非某些特定的上下文特征需要另一个函数。但是,替换 MD5 进行完整性检查并不是紧急情况;没有必要为此担心。

虽然 MD5 仍然可以用于完整性检查,但您必须意识到这只能解决问题:您仍然必须确保使用正确的哈希值。例如,确保您从 HTTPS 网站(从信誉良好的服务器)获取哈希值。哈希值足够小,可以使用一些额外的机制:例如,您可以将它们写在纸上或通过电话口述它们,而这对于 3 GB 存档是无法做到的。

关于 MD5 对文件完整性的安全性,其他两个答案是正确的。我的分歧点是您不一定默认使用 SHA-256。加密选择是关于权衡的。在完整性之后,性能是我对用于检查文件的哈希函数的最大关注。我见过 MD5 哈希比 SHA-256 快四倍。生成的哈希列表也占用了 MD5 的一半空间,这可能有助于内存有限的系统。

因此,MD5 对于这个应用领域来说是安全的,而且速度会快几倍。所以,我会用它。

注意:我在过去 b/c 中用 HAVAL 代替了 MD5,它也很快。SHA-3 竞争也已经完成,因此我们有更多的性能分析,并可能在不久的将来取代 MD5 以实现高性能散列。此外,威盛 Padlock Engine 加速了 SHA-256,所以我在这样的平台上使用它。有很多事情需要考虑,但我总是说专注于端点、网络和应用程序安全 b/c 加密通常是最强大的链接。

如果您想验证文件的完整性(内容未被篡改),并将散列存储在某处,那么只需像 anmd5和 a那样成对生成散列,sha256并在验证时比较两者。为同一文件同时查找两个哈希的冲突是不可能的......

    your applications lifetime on earth
 or any applications lifetime on earth
 or any lifetime on earth
 or lifetime of earth

...你明白了。

我们在这里讨论的是一个文件,有人试图使被篡改的文件具有与原始文件相同的哈希值。使用任何当前/未来的技术,他们甚至可以制造一个与原始文件具有相同哈希(甚至 sha384)的文件,但是拥有相同的文件也具有与原始文件相同的 md5 是一个很长的镜头。所以多重检查>单一检查。