2009-11-10 67 views
2

假设我使用哈希来识别文件,所以我不需要它是安全的,我只需要最小化碰撞。我在想,我可以通过使用SIMD并行运行四个散列来加速散列,然后散列最终结果。如果散列被设计为采用512位块,那么我一步步读取4x512位块,然后生成四个散列;然后在文件的末尾,我将所得到的四个哈希散列在一起。如果我散列一堆散列,散列冲突的可能性有多大?

我敢肯定,这种方法会产生较差的哈希...但多少穷?任何信封计算的后面?

回答

4

你可以比磁盘更快地读取磁盘文件块的想法是一个未经测试的假设?磁盘IO - 甚至是SSD - 比散列正在进行的RAM慢许多个数量级。

确保低冲突是所有哈希的设计标准,所有主流哈希都做得很好 - 只需使用主流哈希即可。 MD5。

具体到海报正在考虑的解决方案,它不是一个给定的并行哈希弱化哈希。在广泛采用有专门为块的并行散列并将结果作为海报所述组合设计哈希,尽管可能尚未(例如MD6,其撤回不间断从SHA3)

更一般地,有的散列函数mainstream implementations那请使用SIMD。散列实现者非常喜欢performance-aware,并且需要时间来优化它们的实现;你会努力工作。对于强的散列的最好的软件是大约6到10个周期/字节。如果哈希是真正的瓶颈,那么散列也是可用的。

+0

如果你担心碰撞,我会绕过MD5并使用更强大的像SHA1,SHA-256或Whirlpool。 – Schwern 2009-11-10 09:20:31