用于文件完整性的SHA-256或MD5



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

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

  1. 是否需要两倍的时间来计算哈希值?

  2. 在时间不重要的地方,比如在备份程序中,文件完整性是所需要的,有人会反对MD5的不同算法,甚至建议一种不同的技术吗?

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

SHA256和MD5都是哈希算法。它们接受你的输入数据,在这个例子中是你的文件,然后输出一个256/128位的数字。这个数字是校验和。没有加密发生,因为无限数量的输入可以产生相同的哈希值,尽管在现实中很少发生冲突。

根据这个答案,

SHA256比MD5需要更多的时间来计算。

随便地说,MD5可能适合您的需要。

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

有专门设计的算法来尽可能快地散列文件以检查完整性和比较(murmur, XXhash…)。显然,这些不是为安全性而设计的,因为它们不满足安全哈希算法(即随机性)的要求,但对于大型消息具有低碰撞率。如果你不是在寻找安全,而是在寻找速度,这些特性使它们成为理想的选择。

这种算法和比较的例子可以在这个很好的答案中找到:哪种哈希算法在唯一性和速度方面最好?

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

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

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

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

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

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

另一位评论者指出Ubuntu和其他软件使用MD5校验和。除了MD5之外,Ubuntu已经转向了PGP和SHA256,但是更强大的验证策略的文档更难找到。请参阅HowToSHA256SUM页面了解更多细节。

  1. 不,它没那么快,但也没那么慢
  2. 对于备份程序,可能需要比MD5更快的东西

总而言之,我想说MD5除了文件名是绝对安全的。由于SHA-256的大小,它会更慢,更难处理。

你也可以使用比MD5更不安全的东西。如果没有人试图破坏你的文件完整性,这也是安全的。

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

您可以签出以下资源:

  • 常用加密算法的速度比较
  • 加密哈希函数比较
  1. 是的,在大多数cpu上,SHA-256比MD5慢两到三倍,尽管主要不是因为它的哈希更长。在这里查看其他答案以及这个堆栈溢出问题的答案。
  2. 这是一个MD5不合适的备份场景:
    • 你的备份程序散列每个正在备份的文件。然后存储每个文件的数据按其哈希值,所以如果备份相同的文件两次你只得到一个副本。
    • 攻击者可以使系统备份他们控制的文件。
    • 攻击者知道他们想从网络中删除的文件的MD5哈希值备份。
    • 攻击者可以利用MD5的已知弱点来制作一个新的与要删除的文件具有相同哈希值的文件。当这个文件备份后,它会替换要删除的文件,然后那个文件就备份了数据将会丢失。
    • 这个备份系统可以加强一点(并且更有效)通过不替换先前遇到的散列文件,但是然后攻击者可以阻止具有已知散列的目标文件通过预先备份一个特殊构造的伪造文件来备份
    • 显然,大多数系统,备份和其他,不满足这次袭击的必要条件,但我只是想给出一个SHA-256更可取的情况的例子MD5。对于您正在创建的系统来说,是否会出现这种情况不仅仅依赖于MD5和SHA-256的特性。
  3. 是的,像MD5和SHA-256生成的加密哈希是一种校验和。

哈希快乐!

最新更新