【问题标题】:about MD5 checksum for Http big file downloading关于Http大文件下载的MD5校验
【发布时间】:2011-01-04 10:53:22
【问题描述】:

MD5校验和广泛用于Http下载大文件的完整性检查。我的问题是,因为 TCP 本身提供了可靠的机制(即每个 TCP 包的校验和以确保其完整性)。所以,总之TCP是可靠的。 Http 是基于 TCP 的(所以 Http 也应该是可靠的),那为什么我们需要另一种完整性检查机制(即 MD5 校验和)?

提前致谢, 乔治

【问题讨论】:

  • 校验和仅适用于该数据包。这并不意味着这些经过完整性检查的小数据块会生成具有相同完整性的大文件。
  • 嗨泰语,我很困惑。我认为如果小包完整性没问题,那么整个文件(由小包组成)也应该没问题。有cmets吗?

标签: http tcp md5 checksum integrity


【解决方案1】:

大多数情况下,您将哈希和用于带外(例如在网站上打印)检查下载完整性,而不是编程。

这可以防止对下载工件的操纵。

【讨论】:

  • "manipulation of the download artifact" -- 你是什么意思的下载 artifact 的操作,你能给我看一个示例吗?
  • 我的意思只是一种替换下载的攻击——通过闯入服务器,进行创造性的重定向……你下载了另一个被操纵的文件。但是,如果您与其他方式提供的校验和进行比较,您可能会意识到作弊。这种另一种方式通常被称为“带外”——攻击者必须破坏两种机制。
  • 他也许可以,但他必须闯入下载区域包含校验和的页面所在的内容管理系统(通常是数据库)
  • 查看典型的下载页面,例如hc.apache.org/downloads.cgi。校验和始终由 apache 托管。下载在某个镜像上。如果你有一个安全的基础,你可以使用不太安全的委托。但你是对的 - 如果有人闯入 apache 服务器,这对你没有多大帮助。如果你有更高的安全需求,你必须使用其他OOB(有人在下载后给你发邮件,打电话给你,......)或其他技术(签名提供更高的安全性,你也可以在apache页面上找到它们)。
  • 我不会向基于 TCP 的普通协议添加散列功能,例如 HTTP 请求/响应方案。也许(没有实际经验)如果您在此之上安装更复杂的协议(例如可以恢复的下载器),这可能很有用,其中细微的错误(双方在下载时与文件指针不同步,文件内容已更改下载时,...) 可能会发生
【解决方案2】:

在我的一生中,我下载了超过 3 次损坏的 ISO 或 EXE,当我再次下载它时,它仍然有效。这向我证明了 TCP 机制不足以确保完整性。

【讨论】:

  • 发生在我身上,不过可能来自浏览器
【解决方案3】:

答案很简单。在您开始下载之前,源文件可能已经损坏。 TCP 仅验证您下载的文件与源文件是否相同。 MD5 保证您可以知道它是否损坏,原因是传输问题还是初始文件本身。

【讨论】:

  • “导致传输出现问题”——对这一点感到困惑。我认为 TCP 期间的传输是可靠的。例如,为什么您认为传输存在问题?
  • TCP 与连接一样可靠,但是使用 TCP 传输仍然存在潜在问题。如果连接中断(例如从网络中拔出您的计算机),TCP 会尽最大努力重新建立连接并从中断的地方继续,但经过一定次数的尝试后它会停止。未完成的文件留在磁盘上。当然,这种情况很少发生,因为大多数失败的连接都是在几次尝试后重新建立的。
【解决方案4】:

当涉及到 35G 的 TED-LIUM 语料库或更大的 400G 的小图像时,每次下载的文件似乎几乎都有错误。对于35G的TED-LIUM语料,我至少下载了20次,总共700G的网络传输了几个月。 CRC 只是一场噩梦。

【讨论】:

    猜你喜欢
    • 2016-01-18
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 2017-08-13
    • 1970-01-01
    • 2014-06-21
    相关资源
    最近更新 更多