假设我使用哈希来识别文件,所以我不需要它是安全的,我只需要尽量减少冲突。我在想我可以通过使用 SIMD 并行运行四个散列然后对最终结果进行散列来加速散列。如果哈希被设计为采用 512 位块,我只需单步执行文件,一次采用 4x512 位块并从中生成四个哈希;然后在文件的末尾,我将四个结果散列在一起。
我很确定这种方法会产生更差的哈希值......但是差多少?有没有粗略的计算?
假设我使用哈希来识别文件,所以我不需要它是安全的,我只需要尽量减少冲突。我在想我可以通过使用 SIMD 并行运行四个散列然后对最终结果进行散列来加速散列。如果哈希被设计为采用 512 位块,我只需单步执行文件,一次采用 4x512 位块并从中生成四个哈希;然后在文件的末尾,我将四个结果散列在一起。
我很确定这种方法会产生更差的哈希值......但是差多少?有没有粗略的计算?
您可以比散列它们更快地从磁盘读取文件块的想法是未经测试的假设吗?磁盘 IO - 甚至 SSD - 比散列运行的 RAM 慢很多数量级。
确保低冲突是所有哈希的设计标准,所有主流哈希都做得很好——只需使用主流哈希,例如 MD5。
具体到发布者正在考虑的解决方案,并行散列不会削弱散列。正如海报所说,有专门为块的并行散列和组合结果而设计的散列,尽管可能尚未广泛采用(例如MD6,它从 SHA3 中完整退出)
更一般地说,存在使用 SIMD 的散列函数的主流实现。散列实现者非常注重性能,并且确实需要时间来优化他们的实现;你将有一项艰巨的工作,相当于他们的努力。用于强散列的最佳软件约为 6 到 10 个周期/字节。 如果散列是真正的瓶颈,也可以使用硬件加速散列。