什么是机会,两个消息具有相同的MD5摘要和相同的SHA1摘要?(What are the chanc

2019-08-02 08:07发布

由于两个不同的消息,A和B(文字也许20-80个字符,如果在所有大小事务),什么是A的MD5摘要与B相同的MD5摘要 A的SHA1摘要的概率与B相同的SHA1摘要? 那是:

(MD5(A) == MD5(B)) && (SHA1(A) == SHA1(B))

假定没有恶意的,即,该消息不与查找冲突的目的选择的。 我只是想知道这种情况发生的几率自然。

我想机会是“天文数字低,”但我不知道如何来验证这一点。

更多信息:可能的消息池的大小受到限制,但大的(几百元)。 生日悖论情况是正是我担心的。

Answer 1:

假设均匀散布在MD5和SHA-1散列的随机字符串的范围(这是不是这样),并假设我们只谈论两个字符串,而不是谈论串池(所以我们避免生日悖论型的复杂性):

MD5哈希是128个位宽,和SHA-1的是160.上述假设,两个串A和B有碰撞p如果两个散列碰撞的概率。 所以

P(both collide) = P(MD5 collides) * P(SHA-1 collides)

P(MD5 collides) = 1/(2^128)
P(SHA-1 collides) = 1/(2^160)

所以

P(both) = 2^-128 * 2^-160 = 2^-288 ~= 2.01 x 10^-87

同样,如果你有一个字符串池,你正在试图确定与池碰撞的概率,你在域生日悖论和这个概率我在这里计算并不适用。 这和散列不如统一的,因为他们应该的。 在现实中你将有一个更高的碰撞率,但它仍然是很小的。


编辑

既然你是在处理一个生日悖论的情况下,应用相同的逻辑解决生日悖论。 让我们来看看它的观点只是一个哈希函数的观点:

N := the number of hashes in your pool (several hundred million)
S := the size of your hash space (2^288)
Therefore,
P(There are no collisions) = (S!)/(S^N * (S - N)!)

让我们假设我们有哈希值的一个很好的偶数如2 ^ 29(约5.3亿)。

P = (2^288!)/(2^288^(2^29) * (2^288 - 2^29)!)

总之,我甚至不想去想计算这个数字。 我什至不知道你如何去估算它。 你至少需要能够处理庞大的阶乘没有死一个任意精度的计算器。

注意概率将遵循开始于接近0的曲线当N = 1 or 2 ,并且将达到1时N >= 2^288 ,其形状为生日悖论维基百科页面上的一个类似。

生日悖论到达P = .5N = 23 。 换句话说,发生碰撞的概率是当N是S的6%,如果秤(我不知道如果这样做)的50%,这意味着将有当你有一个碰撞的几率为50%的2 ^ 288散列6%。 的2 ^ 288 6%是大约2 ^ 284。 你的N(几百元)值是远不及。 相比于你的S这实际上是微不足道的,所以我不认为你有什么可担心的。 冲突是不太可能。



Answer 2:

增编Welbog的帖子:

大阶乘的比率,可以计算,而无需使用高精度计算,通过使用斯特灵公式 :

N! ≈SQRT(2πN)*(N / E)N

因此,(S!)/(S ^ N *(SN)!)≈的sqrt(2πS)/开方(2π(SN))*(S / E)S /((SN)/ E)SN / S N

= SQRT(S /(SN))*(S /(SN))SN * E -N

= SQRT(1 +α)*(1 +α)SN * E -N其中α= N /(SN)是小的。

近似(1 + A / N)NX≈Ë 持有正→∞(或者至少变得非常大)

**因此,这意味着(1 +(N /(SN)))≈SNËN表示SN >> N.

所以,我期望

(S!)/(S ^ N *(SN)!)≈SQRT(1 + N /(SN))* E N *Ê-N = SQRT(1 + N /(SN)),用于SN >> ñ....

除了这是大于1 ...这样的近似中的一个是不够好。 :p

(**警告:N / S必须很小:对于N = 22,S = 365,这是通过关闭的2倍)



Answer 3:

如果消息大小没有特别限定,机会渐近地接近100%,因为有可能的消息的无限数量和可能的散列的有限数。

(注:编辑以现在的问题使得这种相关性较低)



Answer 4:

通常,当一个拾取N个元件中随机更容易计算碰撞比冲突的概率的预期数量。 由于碰撞的预期数量不能超过它可以经常被用作合适的上限碰撞的概率变小。

假定p是两个随机拾取元件碰撞的概率。 如果我们选择N个随机元素然后有N *(N-1)/ 2对元件,因此碰撞的预期数是

P * N *(N-1)/ 2。

例如,如果我们假设为MD5和SHA1碰撞的概率为p = 2 -288那么即使经过随机挑选2 100元,我们仍然只希望2 -89冲突。

又如:如果我们选择2种30随机元素和仅计算MD5。 假设两个MD5之间的碰撞散列为p = 2 -128这给出了2 -59为冲突的次数的预计数。 因此,即使是MD5散列碰撞的两个输入的概率已经非常小。



Answer 5:

所选择的答案不正确,因为它使用了错误的概率。 我今天花了一个良好的部分研究这个(你可以八九不离十看到在评论这个问题的答案我的思维过程),相信实际的答案是以下(比你在谈论的那些稍大消息生日攻击) :

2 ^ -61 * 2 ^ -18 =一个在2 ^ 79一次碰撞。

而这是否确定只乘这些概率(我不确定那)。

这是可行的(小于一两个月,每年下降)今日超级计算机。

请注意,这是基于消息的足够大池(使生日悖论有意义)。 这也是情景你说你关心的问题。

现在,不同的情况是找到用于特定消息的一对散列(SHA1和MD5)的碰撞。 这需要你出BDAY悖论领土,是数量级的更加困难。 我不知道这是2 ^( - 61 * 2)* 2 ^( - 18 * 2)或别的东西。 如果有人知道那是什么,请张贴这个答案评论(会超感激!)。

现在你问:

由于两个不同的消息,A和B(文字也许20-80个字符,如果在所有大小事宜)

是的,无论大小一样。 点击链接到2 ^ -18人物,你会看到该值是两个输入块。 在MD5,输入块是512个字节。 文本的字符20-80是该过小,和单块值是2 ^ 41。

因此,对于数据的量,你就会得到2 ^ -61(我认为)* 2 ^ -41 = 2 ^ -102。

因此,对于它的大小似乎是安全 (链接包含SHA256的两倍当前比特币hashrate的身影:46626.93 TH /秒)。



文章来源: What are the chances that two messages have the same MD5 digest and the same SHA1 digest?