512位哈希与4 128位哈希

时间:2011-09-13 20:10:35

标签: hash cryptography hash-collision

有趣的是,我没有找到关于任何测试或实验的单个512位哈希碰撞机会的充分信息,如漩涡与4个128位哈希的连接,如md5,sha1等。

当执行散列的数据仅相当于平均100个字符的小尺寸时,4个128位散列看起来相同的可能性似乎比单个512位散列更不可能。

但它只是一个明显的猜测而没有基础,因为我没有进行过任何测试。你怎么看待它?

编辑就像 512位散列与128位散列。 128位哈希。 128位哈希。 128位散列(4 128位散列连接)

EDIT2 我想为此index on url or hashing considering RAM使用哈希 目的是最小化碰撞的可能性,因为我想将哈希列设置为唯一而不是url列。

EDIT3 请注意,这个问题的目的是找到最小化碰撞可能性的方法。话虽如此,为什么我需要更多地关注最小化碰撞的可能性?这是我的Edit2描述,它导致找到使用更少RAM的解决方案。因此,兴趣在于最小化冲突并降低RAM使用率。但这个问题的主要焦点是降低碰撞的可能性。

4 个答案:

答案 0 :(得分:6)

听起来你想要比较碰撞行为:

hash512(x)

碰撞行为:

hash128_a(x) . hash128_b(x) . hash128_c(x) . hash128_d(x)

其中“.”表示连接,hash128_ahash128_b等是四种不同的128位哈希算法。

答案是:它完全取决于所涉及的各个哈希的属性。

例如,考虑128位散列函数可以实现为:

uint128_t hash128_a(T x)   { return hash512(x)[  0:127]; }
uint128_t hash128_b(T x)   { return hash512(x)[128:255]; }
uint128_t hash128_c(T x)   { return hash512(x)[256:383]; }
uint128_t hash128_d(T x)   { return hash512(x)[384:511]; }

在这种情况下,表现会相同。

答案 1 :(得分:4)

阅读该问题的经典文章归因于Hoch and Shamir。它建立在以前的发现之上,尤其是Joux。底线如下:如果你使用128位输出的四个散列函数,并且四个散列函数使用Merkle-Damgård构造,那么找到整个512位输出的碰撞并不比找到一个哈希函数的碰撞。 MD5,SHA-1 ...使用MD构造。

另一方面,如果某些哈希函数使用不同的结构,特别是具有更宽的运行状态,则连接可以产生更强大的功能。请参阅@Oli中的示例:如果所有四个函数都是SHA-512,并且在输出上进行了一些手术,那么连接的散列函数可能是普通的SHA-512。

关于四个散列函数的串联唯一确定的事情是结果将比四个散列函数中最强的一样具有抗冲突性。这已经在SSL/TLS中使用,在版本1.1中,内部同时使用MD5和SHA-1以试图抵制任何一个中断。

答案 2 :(得分:3)

512位是512位。唯一的区别在于哈希中不完美的差异。使用可用的最佳算法,最佳总体哈希值为512。

编辑以添加说明,因为评论时间过长:

理想的哈希将内容统一映射到x位。如果你有4个(完全独立的)x位哈希值,则将文件均匀地映射到4x位; 4x位散列仍然将同一文件均匀地映射到4x位。 4x位是4x位;只要它完全一致,无论它来自一个(4x)散列函数还是4(x)都无关紧要。但是,没有散列可以完全理想,所以你想要最均匀的可获得的分布,如果你使用4个不同的函数,只有1可以是最接近最优的,所以你有x个最佳位和3个次优,而单个算法可以覆盖整个4x空间,具有最佳分布。

我认为有可能足够大的算法可以拥有比单个512更均匀分布的子集位,并且可以组合以获得更多的均匀性,但这似乎是大量的额外研究和实施,几乎没有潜在的好处。

答案 3 :(得分:2)

如果您将四种不同的“理想”128位散列算法与一种理想的512位散列算法进行比较,那么两种方法都会让您获得相同的碰撞概率。使用md5可以更容易破解哈希。例如,如果一个攻击者知道你正在用另一种盐做md5 + md5 w / salt + md5那么......那么作为md5碰撞攻击会更容易破解。 Look here 有关已知攻击的哈希函数的更多信息。