![对于非常大的文件,SHA1 总和与 MD5 总和有多可靠?](https://linux22.com/image/1523938/%E5%AF%B9%E4%BA%8E%E9%9D%9E%E5%B8%B8%E5%A4%A7%E7%9A%84%E6%96%87%E4%BB%B6%EF%BC%8CSHA1%20%E6%80%BB%E5%92%8C%E4%B8%8E%20MD5%20%E6%80%BB%E5%92%8C%E6%9C%89%E5%A4%9A%E5%8F%AF%E9%9D%A0%EF%BC%9F.png)
我不断使用 SSH 通过 rclone 将磁盘映像和虚拟机映像(通常每个文件 800GB 到近 1 TB)传输到云服务器,我想知道在验证非常大的文件的完整性时 sha1sum 和 md5sum 有多可靠。
我找到了这个: 如何验证 1TB 文件是否已正确传输?
然而,它与性能有关,而不是与生成的哈希的可靠性有关。
考虑到有这么多不同的文件,是否有可能另一个文件共享生成的相同哈希值?
那么,MD5 和 SHA-1 总和对于非常大的文件有多可靠?谢谢。
我还发现了有关碰撞的情况: https://stackoverflow.com/questions/4032209/is-md5-still-good-enough-to-uniquely-identify-files
https://www.theregister.co.uk/2017/02/23/google_first_sha1_collision/
答案1
MD5 和 SHA-1 都可以检测偶然文件的损坏/更改。意外更改的文件具有相同 MD5 摘要的概率是 2^128 分之一 = 340,282,366,920,938,463,463,374,607,431,768,211,456。意外 SHA-1 冲突的概率更小,为 2^160 分之一。如果我们谈论在一组文件中找到意外匹配(称为生日问题),您需要大约 2^64 = 180 亿亿,MD5 冲突才有可能发生。请注意,文件的大小并不重要;重要的是所涉及的文件数量。
但 MD5 和 SHA-1 都不足以防范恶意的替换文件,或为文件提供可靠的唯一 ID。例如,如果您使用其中任何一种,有人可能会给您一个文件,让您计算哈希摘要,然后通过将其替换为具有相同哈希值的另一个文件来欺骗您。或者提交两个具有相同哈希值的文件,这可能会使您的系统感到困惑。
顺便说一句,意外/恶意的区别有点模糊。假设有人发现 Google 生成的两个 PDF 具有相同的 SHA-1 哈希值,并认为“这很酷!我应该保存它们以备后用”,然后尝试使用您的系统来存储和分发它们……从而意外破坏了系统。如果可以想象到这样的事情,您最好改用 SHA-256。
编辑:BitErrant与我在上一段中描述的类似:它是对 BitTorrent 的攻击,利用 BitTorrent 使用 SHA-1 校验和作为文件块的 ID 这一事实。