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


19

我经常在可下载的文件旁边看到校验和。这种做法的目的使我难以理解。显然可以检测到损坏的文件,但是可能导致此损坏的原因是什么呢?

由于网络协议已检测到传输错误,因此文件肯定不会因传输错误而损坏。当然,任何可以出于恶意目的更改文件的攻击者都可以更改给定的校验和。我们是否正在检查硬盘驱动器错误?写作和阅读时更有可能发生这种情况吗?我缺少重要的东西吗?


2
当然,任何可以出于恶意目的更改文件的攻击者都可以更改给定的校验和。-同意,如果不通过HTTPS 提供校验和,则校验和不能保证真实性,或者您不确定SSL证书是否属于软件的创建者。
Mihai 2015年

1
实际上,TCP校验和非常糟糕:只有16位。如果您要为成千上万的人提供大文件(请考虑:安装DVD映像),则几乎可以肯定其中的某些下载将被不可检测地破坏。
2015年

@Mihai当然,它可能确实确实降低了风险。例如,如果您的服务器感染了病毒,该病毒会自动修改所有二进制响应(或仅替换您下载的所有可执行文件)。它不是完美的,但是在某些情况下可以提供帮助。
a安2015年

Answers:


9

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

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

摘自实用Unix和Internet安全性的示例

MD5(蓝色框中有$ 1500。)= 05f8cfc03f4e58cbee731aa4a14b3f03

MD5(蓝色框中有$ 1100。)= d6dee11aae89661a45eb9d21e30d34cb

消息的区别仅在于单个字符(并且在该字符内仅具有单个二进制位),它们具有完全不同的消息摘要。

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

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


1
因此,如果文件和校验和是由同一主机提供的,那么它有点没用吗?
KarolisJuodelė2015年

也许。校验和只是确定完整性的一种手段。假设在特定情况下,如果攻击者获得对组织FTP服务器的访问权限,则他可能会更改软件。但是您仍然可以使用相同的校验和来确定完整性(如果并且仅在攻击者没有闯入HTTP服务器的情况下)。因此,如果两者都在攻击者的控制之下,则他可以轻松地更改两者,并且您不会知道两者之间的区别。
Aswin PJ 2015年

1
校验和可能相关的另一种情况是检测打h后恢复文件传输但在此期间文件已更改的情况。
2015年

@KarolisJuodelė下载链接可能位于同一网站/主机中。但是根据最近的服务器,解析的位置可能会有所不同。还要注意,校验和页面应该是https,而下载可以是任何协议http或ftp
balki 2015年

10

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

不总是。

您可能具有内容链接以及在HTTPS上提供的校验和。该链接可以是未加密的链接-纯HTTP或FTP或其他内容。

不利的一面是,未加密的连接很容易成为中型,而不利的一面,它对于网站管理员来说可以更快或更方便(所需的计算资源更少,并且网络可以缓存这些东西)。

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


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

例子:

这很有趣,因为您可能无法获得更多的不安全感。即使他们本身不是恶意的,任何ISP都可以轻松地用假冒产品替换网站和图像,并且让某人安装经过操纵的操作系统,同时看起来好像他们正在获得“安全的” Linux版本一样,这是最终的选择。挤。


1
许多事情比未经身份验证的HTTP安全得多,后者需要活动的MITM进行颠覆。
user253751

4

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

有可能发生不同的错误(TCP将检测到)[由Jacob Krall指出]

  • 报文顺序错误
  • 丢包
  • 数据包内的数据损坏
  • 虚拟数据包(接收方收到从未发送过的数据包)

编辑一些其他信息:

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


2
仔细阅读该答案-这些都是TCP可以纠正的错误。
Jacob Krall

4

传输错误可能发生。链路层协议通常包含校验和或纠错码来避免它们,但它们并不是完美的:错误很少会被纠正。TCP数据包还包含一个校验和,可将错误概率降低2 ^ 16。这使得传输错误的可能性很小,但非零。这是大多数人一生中永远不会在不知不觉中遇到的事情,但并不是在加密校验和的永不超过十亿年的范围内。

在下载后立即检查是不可能检测到客户端上的硬件错误(例如磁盘损坏)的,因为校验和将根据缓存的副本计算得出。另一方面,检查启动媒体是否无法启动是否损坏是很有用的-您实际上是在测试媒体,并且前提是硬件可能已经损坏。

计算校验和的真正原因实际上是检测软件级错误。这些确实发生了。可能的错误包括:

  • 文件已部分下载。Web服务器和浏览器往往无法检测到中断的连接并清理部分文件。该错误可能是在您下载期间发生的,也可能是在上传期间发生的,它累计了。
  • 一路上有一些腐败。例如,文件分发中的某个中间节点决定将文本编码转换应用于二进制文件。或某些配置错误的服务器提供了错误消息而不是内容。
  • 变体:上传了错误的文件。
  • 很少见,但可以防止以下情况:对手更改了文件,但无法更改参考校验和。安全基础结构往往使攻击者比无效文件传播无效的校验和更加困难。例如,大文件通常是通过镜像分发的,而校验和是由中央站点提供的,篡改的机会较少(服务器仅访问项目负责人,通过HTTPS分发)。

实际上,检查下载文件的大小会发现最常见的错误,这些错误会被截断或转换无效。校验和的优点是可以严格检测更多问题。


2

从理论上讲,网络将正确地传递每个段,并将它们正确地组装在磁盘上,并且不会出错。

实际上,计算机是机器和软件,两者都是由易犯错误的人设计和制造的。如果某个下载由于某种原因而无法正确下载,例如通过某种中间设备进行的下载(无论是无害的还是恶意的)破坏了数据,那么最好使用一种方法来检查文件是否确实正确在提供商方面作为文件的精确副本下载。

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


0

由于许多文件都映射到相同的校验和,因此校验和不能100%可靠。

当我们向火车添加另一个校验和时,我们会乘以检测错误的概率。

互联网上的流量如此之多,以至于错误实际上非常普遍。


还有一点烂。
鹿猎人

应该由存储硬件本身来检测,但是校验和是ZFS和btrfs的关键功能,我怀疑它是否工作正常。
Max Ried

0

校验和还有助于防止由于以下情况导致的下载损坏:

服务器在提供下载服务时发生内部错误,因此下载被终止。

发生这种情况时,可能会有一些结果:

  • 良好的服务器 -服务器的实施分块传输编码,不是车:
    • 好的客户端(例如cURL,wget)将能够通知您这是一次错误的下载,因为从未从服务器发送终止块。
    • 错误的客户端会认为下载已完成,因为没有收到来自服务器的更多数据。
  • 坏服务器 -服务器实现的块传输编码 越野车,它发送的终端块这个坏下载:
    • 任何客户端都会认为此下载已成功完成。

我已经在流行的客户端工具和服务器框架中看到了这些行为,因此当您不使用校验和时,那么在“良好服务器+不良客户端”或“不良服务器+任何客户端”的情况下,损坏的下载将不会被注意到。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.