重复下载可以防止文件损坏吗?

重复下载可以防止文件损坏吗?

披露真实问题:
我使用一个名为 youtube-dl 的程序从 YouTube 和 Twitch 等网站下载和存档视频。为了验证下载的完整性,我会下载同一个视频两次并验证它们的校验和是否匹配。我担心的是,一些未被注意到的问题可能会导致两个视频以相同的方式被悄无声息地破坏,导致校验和匹配,尽管它们的数据完整性已经受到损害。

最初发布的问题:
特定数据损坏是否可以重现至其生成的哈希值?

例如,如果由于某些底层软件或硬件问题,文件在执行后出现数据损坏,那么该文件的副本在类似执行后是否会经历完全相同的数据损坏方式,从而产生与原始损坏文件的值相匹配的哈希值?

换句话说,所有数据损坏是否必然在某种程度上独一无二,或者某些损坏是否可以一致且完全复制?

答案1

理论上是的。但实际上却困难得多。

在创建文件时,有许多因素在起作用,从电力到拼写错误。要造成一致的损坏,您需要控制每个因素,而这基本上只有在严格控制的实验室环境中才有可能。在这种情况下,可以始终如一地创建相同的位串,从而产生相同的哈希值。

因此,如果您正在某个地方下载文件,每个文件哈希值都匹配,并且每个文件都已损坏,则损坏很可能发生在原始文件中。该网站可能会显示一个哈希值供您验证下载,但这不一定是可用文件的哈希值;原始文件在上传到该位置之前已进行哈希处理,并且该值将呈现给访问者进行验证。创建者甚至不知道上传的文件以某种方式损坏,直到有人告诉他们 :-)

答案2

@r2d3 ...想知道这是否意味着同一个文件的两个副本可以以完全相同的方式被破坏,导致它们的数据在损坏后仍然相互匹配。

Uri,如果系统中有一个病毒,它会将自己植入到每个可执行文件中,我预计它会以相同的方式操纵两个相同的文件,并输出两个相同的操纵文件。比较两个操纵文件不会显示任何差异。当使用加密哈希时,攻击者必须知道第二个文件是哈希,并且攻击者将被迫重写与操纵文件相对应的新哈希。

一旦您在哈希前面添加盐并加密(盐+哈希)链,攻击者就无法再操纵您的哈希了。

答案3

当这个理论性很强的问题背后的真正问题被揭露之后,我的回答也发生了变化:

由于 Youtube 没有为其网站上的视频提供哈希值,因此即使重复下载也无法保护您免受数据损坏。

此外,没有建立任何机制让您上传您生成的哈希值以验证下载的完整性。

相关内容