很多网站提供 MD5 或 SHA 和来验证您下载的有效性,但为什么有些东西几乎完全依赖于此?
有什么办法可以防止人们仅仅用恶意二进制的校验和替换校验和吗?
很多网站提供 MD5 或 SHA 和来验证您下载的有效性,但为什么有些东西几乎完全依赖于此?
有什么办法可以防止人们仅仅用恶意二进制的校验和替换校验和吗?
您的问题是安全性中的常见问题,称为身份验证。
校验和解决了完整性问题,你知道你刚刚下载的是正确的,但你不知道它来自谁。
如果有人在进行中间人攻击,他们显然会尝试用他们希望你拥有的二进制文件的校验和替换你需要的任何下载的校验和。
如果您想评估真实性(证明二进制文件是由您信任的人发布的),那么您需要使用数字签名等身份验证方法。
典型的过程是这样的:
如果你遵循这样的过程,你就不会受到中间人攻击。这里协议的重点显然是对公钥的验证。如果您未能评估公钥属于所有者,您可能会被欺骗。
在最简单和不安全的情况下,文件和校验和都是通过 HTTP 或 FTP 等明文协议提供的。在这种情况下,不,没有什么可以阻止文件和校验和的中间人修改。
不过,您的第一个问题是,“为什么某些流程依赖于已发布的校验和?” 答案是,如果正确验证,校验和提供完整性保护。也就是说,如果我能保证校验和的完整性和真实性,我就可以验证下载文件的完整性。
这似乎是多余的,因为如果我有一些方法来验证校验和的真实性和完整性,为什么同样的方法不能保护文件本身呢?答案是校验和主要不是为了解决恶意篡改,而是为了发现数据损坏。如果您的网络连接或磁盘驱动器或 RAM 模块以每 10 MB 1 位的速度引入错误,那么您在 50 MB 下载中出现错误的可能性非常大。但是 20 字节校验和出现位错误的可能性非常低。
这一切都很好,但是我们如何防止恶意篡改呢?以下是一些解决方案:
通过经过身份验证和完整性保护的通道提供校验和。这里最常见的解决方案是 HTTPS,其中 TLS 提供身份验证、完整性和加密。数据提供者可以(也应该)加倍努力并通过这个渠道提供文件。
提供文件的加密签名。此方法不仅提供完整性保护,还提供真实性,但需要下载者做更多的工作,下载者必须拥有或安全地获得提供者的公钥才能验证签名。相同的基本原理用于在 TLS 中提供完整性保护,但文件的单独签名依赖于不同的密钥分发通道,这可能会或可能不会更难被攻击者破坏。
这些方法可以而且应该结合起来,因为会有一些用户不信任 TLS 的保护,而另一些用户则懒得验证加密签名,但由于各种原因只能支持基本的校验和。
当然,所有这些都引出了一个问题,即文件是否可以以校验和仍然有效的方式损坏。这被称为原像攻击,并且 MD5 已被证明在理论上很容易受到攻击。您应该始终使用最安全的哈希函数:SHA-2 和 SHA-3 是不错的选择;MD5 和 SHA-1 风险更大。
文件可以被下载和传递。在某些时候,它们可以被恶意修改。
通过在网站上发布校验和,它提供了第二个验证向量。为了使不良行为者成功,他们还必须能够破解供应商的网站并修改哈希(校验和)。
不。
校验和仅用于验证您的下载,以防止传输错误。
当然,中间人可能会提供一个伪造的目录,其中包含受感染的二进制文件和正确的重新创建的校验和列表。
防止这种情况的方法是使用 PGP 或 S/Mime 对校验和进行签名。
否则,您可以校验您的校验和列表并通过安全方式(真实的纸质邮件、电话或其他加密和/或非互联网方式)发送结果。