推荐用于重复数据删除的短(128 位)和快速校验和?

Recommended short (128 bit) and fast checksum for deduplication?

我正在使用 MD5 进行文件去重。这很好,因为文件来自受信任的来源,他们不会故意利用 MD5 的缺点。

稍后,我可能会接受不受信任的文件,并对它们进行重复数据删除。我已经阅读了 MD5 on Wikipedia 的摘要,并且该散列的质量似乎存在许多缺点。一般推荐使用SHA-1或更好的。

SHA-1 和 SHA-256 更长。我可以使用 XOR 两半来得到 128 位的答案,但这似乎效率不高。

是否有适合重复数据删除用例的推荐 128 位散列?我知道它太小了,我可以继续使用 MD5,但现在似乎已经开发了另一个 128 位替代方案?

您可以使用左边的 128 位来砍掉 SHA-256 或 SHA-512。 SHA-512 在 64 位系统上实际上快了 30% 到 60%。除了更小的摘要长度(128 位摘要 = 128 位抗原像强度和 64 位抗冲突强度)之外,安全性没有降低。

另一种选择是SHAKE256。 NIST 将 SHA-2 的 4 个固定长度替换编码为 SHA3-224、SHA3-256、SHA3-384、SAH3-512,但底层算法支持任意位长度。术语 SHAKE256 适用于用于任意大小输出的底层算法。您可以使用 SHAKE256 获得 128 位甚至 179 位的输出。

我仍然会考虑使用 SHA-2 重新散列您的文件存储以获得 256 位标识符,同时所有文件都来自受信任的来源,然后在接受可能不可信的数据之前迁移到全 SHA-256 系统。