公开的实际问题:
我使用一个名为 youtube-dl 的程序从 YouTube 和 Twitch 等网站下载和存档视频。为了验证下载的完整性,我下载了两次相同的视频并验证它们的校验和是否匹配。我担心一些未被注意到的问题可能会导致两个视频以相同的方式被静默损坏,即使它们的数据完整性已受到损害,也会导致匹配校验和。
最初发布的问题:
特定数据损坏是否可以重现到其产生的哈希值?
例如,如果某个文件在执行后由于某些底层软件或硬件问题而发生数据损坏,那么该文件的副本在类似执行后是否会遇到完全相同的数据损坏方式,从而导致哈希值与原始损坏的文件?
换句话说,所有数据损坏是否都必须以某种方式唯一,或者某些损坏是否可以一致并准确复制?
理论上,是的。在实践中,这要困难得多。
创建文件时有很多因素在起作用,从电力到拼写错误。要创建一致的损坏,您需要控制每一个因素,而这基本上只有在严格控制的实验室环境中才有可能。在这种情况下,可以始终创建相同的位串,从而产生相同的散列。
因此,例如,如果您在某处下载文件,每个文件哈希都匹配并且每个文件都已损坏,则损坏很可能在原始文件中。该站点可能会显示一个哈希值供您验证下载,但这不一定是可用文件的哈希值;原件在上传到该位置之前进行了散列处理,并将该值呈现给访问者进行验证。在有人告诉他们之前,创作者甚至不会知道上传的文件以某种方式损坏:-)
Uri,如果系统中有病毒将自己植入每个可执行文件中,我希望他以相同的方式操作两个相同的文件,给出两个相同的操作文件作为输出。比较两个操作文件不会显示任何差异。当使用加密散列时,攻击者必须知道第二个文件是散列,并且攻击者将被迫重写与被操纵文件相对应的新散列。
一旦你把盐放在你的散列前面并加密(盐+散列)链,攻击者就不能再操纵你的散列了。
在一个高度理论化的问题背后的真正问题被披露后,我的答案也发生了变化:
由于 Youtube 不为其网站上的视频提供哈希值,即使重复下载也无法保护您免受数据损坏。
此外,没有建立机制可以让您上传您生成的哈希以验证下载的完整性。