为什么要计算下载文件的校验和?

为什么要计算下载文件的校验和?

我经常看到可供下载的文件旁边有一个校验和。我不明白这种做法的目的。显然是为了检测损坏的文件,但是这种腐败的原因可能是什么?有可能吗?

当然,文件不会因传输错误而损坏,因为传输错误是由网络协议检测到的。当然,任何可以出于恶意目的更改文件的攻击者也可以同样更改给定的校验和。我们正在检查硬盘驱动器错误吗?写作时比阅读时更有可能发生这些情况吗?我错过了什么重要的事情吗?

答案1

当然,任何可以出于恶意目的更改文件的攻击者也可以同样更改给定的校验和。

不总是。

您可以在 HTTPS 上提供内容链接以及校验和。该链接可以是非加密链接——纯 HTTP 或 FTP,或其他链接。

不利的一面是,未加密的连接可以轻松地由中间人管理,有利的一面是,对于网站管理员来说,它可以更快或更方便(所需的计算资源更少,并且网络有机会缓存​​这些内容)。

如果校验和是在不间断的可信连接上提供的,并且有效负载与校验和匹配,那么您将获得两全其美的效果(前提是校验和是加密安全的)。


也就是说,您提醒我,有一些发行版声称是“安全的”,但他们的网站仅基于 HTTP,其图像链接也是如此。

例子:

这有点有趣,因为你不可能比这更没有安全感了。即使他们本身没有恶意,任何 ISP 都可以轻松地用假冒的网站和图像替换网站和图像,并让某人安装被操纵的操作系统,同时让他们看起来像是在获得“安全”的 Linux 发行版,这才是最终的结果pwnage。

答案2

检测腐败并不完全正确。确定软件的完整性将是更正确的用法。通常软件不是从单个服务器分发的。相同的软件可以从许多服务器分发。因此,当您下载特定软件时,会选择距离您目的地最近的服务器作为下载源,以提高下载速度。然而,这些“非官方”(第三​​方)服务器并不总是值得信任的。他们可能/可以将木马/病毒/广告软件/后门包含到程序中不好

因此,为了确保下载的软件与相关组织发布的“官方”软件完全相同,需要使用校验和。用于生成校验和的算法使得即使程序中的微小变化也会导致完全不同的校验和。

示例取自实用 Unix 和互联网安全

MD5(蓝色盒子里有1500美元。) = 05f8cfc03f4e58cbee731aa4a14b3f03

MD5(蓝色盒子里有1100美元。) = d6dee11aae89661a45eb9d21e30d34cb

这些消息仅相差一个字符(并且在该字符内仅相差一个二进制位),具有完全不同的消息摘要。

如果下载的文件具有与“官方”网站上给出的校验和相同的校验和,则可以假定该软件未被修改。

边注:理论上,两个不同的文件可以具有相同的哈希值。为了使哈希/校验和算法被认为是安全的,找到另一个产生相同校验和的文件在计算上应该是非常昂贵的。

答案3

至于为什么 TCP/IP 错误检查不能捕获所有内容:https://stackoverflow.com/a/17083365/2551539

可能会出现不同的错误(TCP 将检测到)[Jacob Krall 指出]:

  • 数据包顺序不正确
  • 数据包丢失
  • 数据包内的数据损坏
  • 幻像数据包(接收方收到从未发送过的数据包)

编辑一些附加信息:

本研究第 9 页:http://paperhub.s3.amazonaws.com/8ff1e4414c070e900da8ab3885593085.pdf表明存在 TCP 无法检测到的错误。我的理解是,当错误的数据报(在研究中称为“坏双胞胎”)与预期数据报(在研究中称为“好双胞胎”)具有相同的校验和时,就会发生这种情况。

答案4

理论上,网络会正确地传送每个片段,并且它们会正确地组装在磁盘上,不会出现任何问题。

事实上,计算机是机器和软件,两者都是由容易犯错的人类设计和构建的。如果由于某种原因导致下载失败,例如通过某种中间设备进行下载,无论是无害的还是恶意的,都会破坏数据,最好有一种方法来检查该文件是否几乎肯定是下载为提供商方面文件的准确副本。

高质量校验和是验证数据完整性的可靠方法。

相关内容