猜测(匹配)Guid的概率是多少?

时间:2011-02-02 18:33:16

标签: math guid probability

好奇但匹配Guid的概率是多少?

从SQL服务器上说一个Guid:5AC7E650-CFC3-4534-803C-E7E5BBE29B3D

这是一个因素吗?:(36 * 32)! =(1152)!

讨论 = d

6 个答案:

答案 0 :(得分:26)

目前尚不清楚你在问什么。我看到两种解释你问题的方法。

  1. 鉴于GUID g,有人猜测它的概率是多少?为简单起见,我们假设GUID的所有128位都可用。然后猜测g的概率是2^-128。那很小。让我们对此有所了解。假设我们的攻击者每秒可以生成10亿个GUID。要有50%的机会猜测g,我们的攻击者必须生成2 ^ 127个GUID。以每秒10亿的速度生成2 ^ 127个GUID需要5391448762278159040348年。

  2. 我们正在制作一系列guids。发生碰撞的可能性有多大?也就是说,我们生成具有相同值的两个guid的可能性是多少?这是生日悖论。如果你随机生成一个n GUID序列,那么至少有一次碰撞的概率大约是p(n) = 1 - exp(-n^2 / 2 * 2^128)(这是生日问题,可能的生日数是2 ^ 128)。

  3. n p(n) 2^30 1.69e-21 2^40 1.77e-15 2^50 1.86e-10 2^60 1.95e-03

    因此,即使您生成2 ^ 60个GUID,碰撞的几率也非常小。如果你每秒可以产生10亿个GUID,那么发生碰撞的机率仍然需要36年才能达到1.95e-03。

答案 1 :(得分:6)

可能的GUID(128位值)的数量是2 ^ 128或3.4×10 ^ 38 - 大约2万亿每立方毫米的整个地球体积。

换句话说,有点低。

(地球卷参考资料来源:WikiPedia)

答案 2 :(得分:3)

取决于GUID生成算法的类型。当前算法使用124个随机位,因此概率为2 ^ 124中的1。

使用较旧的算法(使用时间和MAC地址)概率要高得多。

答案 3 :(得分:3)

你的计算有很多问题。 首先,36 * 32意味着任何字母数字字符都可以成为GUID的一部分。不是这种情况;只允许使用十六进制字符。

其次,唯一GUID数量的计算是 有效字符数(16:0-9,A-F)^ GUID长度(32个字符)

所以我们有16 ^ 32 ==> 2 ^(4 ^ 32)==> 2 ^ 128

猜测任何一个GUID的几率是1/2 ^ 128。

答案 4 :(得分:0)

它是1 /(给定UID长度可能的唯一数字的数量)。在上面的例子中,我们看到16个字节,或128位。 2 ^ 128,所以匹配的概率是1/2 ^ 128。

答案 5 :(得分:0)

这取决于生成的GUID数量。这类似于统计中的生日问题。请参阅Wikipedia和http://betterexplained.com/articles/understanding-the-birthday-paradox/(这个具体有一个GUID示例)

一般来说,在{N}个guid上产生M个guid的碰撞概率是1 - (1- (1/N))^C(M,2),其中C(M,2)是'M选择2'