我知道 SHA-256 在安全性等方面优于 MD5,但是,如果我要使用一种仅检查文件完整性的方法(即与密码加密等无关),是否有任何优势使用 SHA-256?
由于 MD5 是 128 位,而 SHA-256 是 256 位(因此是两倍大)...
加密需要两倍的时间吗?
在时间不重要的情况下,例如在备份程序中,只需要文件完整性,有人会反对 MD5 的不同算法,甚至建议不同的技术吗?
使用 MD5 会产生校验和吗?
SHA256 和 MDA5 都是散列算法。他们获取您的输入数据,在本例中是您的文件,并输出一个 256/128 位数字。这个数字是一个校验和。没有进行加密,因为无限数量的输入可能导致相同的哈希值,尽管实际上冲突很少见。
根据这个答案,SHA256 的计算时间比 MD5 多一些。
顺便说一句,我会说 MD5 可能适合您的需要。
To 1):是的,在大多数 CPU 上,SHA-256 的速度只有 MD5 的 40%。
To 2):在这种情况下,我会主张与 MD5 不同的算法。我肯定更喜欢被认为是安全的算法。不过,这更多的是一种感觉。在这种情况下,这很重要,而不是现实,例如,如果您的备份系统遇到攻击基于 MD5 的证书的示例案例,那么在这样的示例中,您可能有两个文件具有不同的数据,但具有相同的 MD5 校验和。对于其他情况,这无关紧要,因为 MD5 校验和实际上只有在故意引发时才会发生冲突(= 不同数据的相同校验和)。我不是各种散列(校验和生成)算法的专家,所以我不能建议另一种算法。因此,这部分问题仍然悬而未决。建议的进一步阅读是Cryptographic Hash Function -维基百科上的文件或数据标识符。在该页面的下方还有一个加密哈希算法列表。
To 3): MD5 是一种计算校验和的算法。使用此算法计算的校验和称为 MD5 校验和。
每个答案似乎都表明您需要使用安全哈希来完成这项工作,但所有这些都被调整为缓慢以迫使暴力攻击者拥有大量计算能力,并且根据您的需要,这可能不是最佳解决方案。
有专门设计用于尽可能快地散列文件以检查完整性和比较(murmur
... XXhash
)的算法。显然,这些不是为安全而设计的,因为它们不符合安全散列算法(即随机性)的要求,但对于大消息的冲突率很低。如果您追求的不是安全性而是速度,这些特性使它们成为理想之选。
这种算法和比较的例子可以在这个优秀的答案中找到:哪种散列算法最适合唯一性和速度?.
例如,我们在 Q&A 网站上使用murmur3
对用户上传的图像进行哈希处理,因此即使用户在多个答案中上传相同的图像,我们也只存储一次。
底层 MD5 算法不再被认为是安全的,因此虽然 md5sum 非常适合在与安全无关的情况下识别已知文件,但如果文件有可能被故意和恶意篡改,则不应依赖它。在后一种情况下,强烈建议使用更新的散列工具,例如 sha256sum。
因此,如果您只是想检查文件损坏或文件差异,当文件的来源受信任时,MD5 就足够了。如果您要验证来自不受信任来源的文件的完整性,或者通过未加密连接来自受信任来源的文件的完整性,MD5 是不够的。
另一位评论者指出,Ubuntu 和其他人使用 MD5 校验和。Ubuntu 已经迁移到 PGP 和 SHA256,除了 MD5,但更强大的验证策略的文档更难找到。有关详细信息,请参阅HowToSHA256SUM 页面。
总而言之,我会说除了文件名之外的 MD5 是绝对安全的。SHA-256 会因为它的大小而变得更慢且更难处理。
您也可以毫无问题地使用比 MD5 更安全的东西。如果没有人试图破解您的文件完整性,这也是安全的。
快乐散列!