99

我知道 SHA-256 在安全性等方面优于 MD5,但是,如果我要使用一种仅检查文件完整性的方法(即与密码加密等无关),是否有任何优势使用 SHA-256?

由于 MD5 是 128 位,而 SHA-256 是 256 位(因此是两倍大)...

  1. 加密需要两倍的时间吗?

  2. 在时间不重要的情况下,例如在备份程序中,只需要文件完整性,有人会反对 MD5 的不同算法,甚至建议不同的技术吗?

  3. 使用 MD5 会产生校验和吗?

4

7 回答 7

93

SHA256 和 MDA5 都是散列算法。他们获取您的输入数据,在本例中是您的文件,并输出一个 256/128 位数字。这个数字是一个校验和。没有进行加密,因为无限数量的输入可能导致相同的哈希值,尽管实际上冲突很少见。

根据这个答案,SHA256 的计算时间比 MD5 多一些。

顺便说一句,我会说 MD5 可能适合您的需要。

于 2013-01-03T13:26:52.757 回答
23

To 1):是的,在大多数 CPU 上,SHA-256 的速度只有 MD5 的 40%。

To 2):在这种情况下,我会主张与 MD5 不同的算法。我肯定更喜欢被认为是安全的算法。不过,这更多的是一种感觉。在这种情况下,这很重要,而不是现实,例如,如果您的备份系统遇到攻击基于 MD5 的证书的示例案例,那么在这样的示例中,您可能有两个文件具有不同的数据,但具有相同的 MD5 校验和。对于其他情况,这无关紧要,因为 MD5 校验和实际上只有在故意引发时才会发生冲突(= 不同数据的相同校验和)。我不是各种散列(校验和生成)算法的专家,所以我不能建议另一种算法。因此,这部分问题仍然悬而未决。建议的进一步阅读是Cryptographic Hash Function -维基百科上的文件或数据标识符。在该页面的下方还有一个加密哈希算法列表。

To 3): MD5 是一种计算校验和的算法。使用此算法计算的校验和称为 MD5 校验和。

于 2013-01-03T13:22:05.000 回答
23

每个答案似乎都表明您需要使用安全哈希来完成这项工作,但所有这些都被调整为缓慢以迫使暴力攻击者拥有大量计算能力,并且根据您的需要,这可能不是最佳解决方案。

有专门设计用于尽可能快地散列文件以检查完整性和比较(murmur... XXhash)的算法。显然,这些不是为安全而设计的,因为它们不符合安全散列算法(即随机性)的要求,但对于大消息的冲突率很低。如果您追求的不是安全性而是速度,这些特性使它们成为理想之选。

这种算法和比较的例子可以在这个优秀的答案中找到:哪种散列算法最适合唯一性和速度?.

例如,我们在 Q&A 网站上使用murmur3对用户上传的图像进行哈希处理,因此即使用户在多个答案中上传相同的图像,我们也只存储一次。

于 2016-01-11T11:32:46.083 回答
12

底层 MD5 算法不再被认为是安全的,因此虽然 md5sum 非常适合在与安全无关的情况下识别已知文件,但如果文件有可能被故意和恶意篡改,则不应依赖它。在后一种情况下,强烈建议使用更新的散列工具,例如 sha256sum。

因此,如果您只是想检查文件损坏或文件差异,当文件的来源受信任时,MD5 就足够了。如果您要验证来自不受信任来源的文件的完整性,或者通过未加密连接来自受信任来源的文件的完整性,MD5 是不够的。

另一位评论者指出,Ubuntu 和其他人使用 MD5 校验和。Ubuntu 已经迁移到 PGP 和 SHA256,除了 MD5,但更强大的验证策略的文档更难找到。有关详细信息,请参阅HowToSHA256SUM 页面

于 2015-07-05T23:35:55.607 回答
11
  1. 不,它不那么快但没那么慢
  2. 对于备份程序,可能需要比 MD5 更快的东西

总而言之,我会说除了文件名之外的 MD5 是绝对安全的。SHA-256 会因为它的大小而变得更慢且更难处理。

您也可以毫无问题地使用比 MD5 更安全的东西。如果没有人试图破解您的文件完整性,这也是安全的。

于 2013-01-03T13:29:37.507 回答
6

技术上认可 MD5 比 SHA256 更快,因此仅验证文件完整性就足够了,并且性能更好。

您可以查看以下资源:

于 2013-01-03T13:30:09.847 回答
6
  1. 是的,在大多数 CPU 上,SHA-256 比 MD5 慢 2 到 3 倍,但主要不是因为它的哈希值更长。在此处查看其他答案以及此 Stack Overflow 问题的答案。
  2. 这是不适合 MD5 的备份方案:
    • 您的备份程序会散列每个要备份的文件。然后它通过其哈希存储每个文件的数据,因此如果您备份同一个文件两次,您最终只会得到一份副本。
    • 攻击者可以使系统备份他们控制的文件。
    • 攻击者知道他们想要从备份中删除的文件的 MD5 哈希值。
    • 然后,攻击者可以使用 MD5 的已知弱点来制作一个新文件,该文件与要删除的文件具有相同的哈希值。备份该文件时,它将替换要删除的文件,并且该文件的备份数据将丢失。
    • 这个备份系统可以通过不替换之前遇到过哈希的文件来加强一点(并提高效率),但是攻击者可以通过抢先备份一个特殊构造的虚假文件来阻止备份具有已知哈希的目标文件具有相同哈希的文件。
    • 显然,大多数系统(备份系统和其他系统)不满足这种攻击实际所需的条件,但我只是想举一个例子,说明 SHA-256 比 MD5 更可取的情况。您正在创建的系统是否属于这种情况不仅取决于 MD5 和 SHA-256 的特性。
  3. 是的,像 MD5 和 SHA-256 生成的加密哈希是一种校验和。

快乐散列!

于 2018-02-15T08:46:33.360 回答