MD5散列是否可以通过分治算法进行

信息安全 哈希 md5 算法
2021-08-30 04:43:20

我想计算文件的 MD5 哈希

文件由我的客户端上传到我的网络服务器 文件分段上传(称为块) 客户端还发送文件的 md5 哈希,以便验证文件完整性

块可以以任何随机顺序出现。(第一个块并不总是首先出现)我的 Web 服务器将这些块存储在持久性存储中。

我是否可以计算各个块的散列(或任何摘要)并得出文件的散列?

1个回答

经典的解决方案是使用Merkle-Tree为了使用 Merkle-Tree 进行上传,客户端形成 Merkle-Tree 并计算哈希值,并预先在带有数字签名的安全通道中向您发送根哈希值。

在 Merkle Tree 中,数据(块)可以随同从数据到根的路径的兄弟散列随机顺序到达服务器。服务器可以使用根哈希以及数据和兄弟哈希来检查数据是否有效。

这将增加带宽,O(log n)其中n零件的数量是多少。使用 MD5 它将是128*log nlog n用于树的高度)。

例如,对于一个1GB文件,每个部分都1MB使用32B哈希函数,如 SHA256,为此客户端需要存储 64KB 哈希值,并且发送1MB具有 320KB 哈希数据的块将被传输,传输的开销将是0.031%

验证每个块的成本将是O(log n),并且记住密码散列函数非常快。

并且不要使用 MD5 它不再被认为是安全的加密哈希函数,而是至少更喜欢 SHA256 或使用具有速度记录的Blake2 。还有并行哈希,例如SHA3​​ 的ParallelHashBlake3每当并行化提供好处时,这可以加快计算速度。

有关 Merkle-Tree 如何工作的完整指南,请参阅 Squeamish Ossifrage在 Cryptography.SE 上的回答