Math 猜测(匹配)Guid的概率是多少?
只是好奇,但匹配Guid的概率是多少 假设来自SQL server的Guid:5AC7E650-CFC3-4534-803C-E7E5BBE29B3D 它是阶乘吗?:(36*32)!=(1152)! 讨论Math 猜测(匹配)Guid的概率是多少?,math,guid,probability,Math,Guid,Probability,只是好奇,但匹配Guid的概率是多少 假设来自SQL server的Guid:5AC7E650-CFC3-4534-803C-E7E5BBE29B3D 它是阶乘吗?:(36*32)!=(1152)! 讨论 =D它是1/(给定UID长度下可能出现的唯一数字的数量)。在上面的例子中,我们看到16个字节,或128位。2^128,所以匹配的概率是1/2^128。可能的GUID(128位值)的数量是2^128或3.4×10^38-大约是地球整个体积的每立方毫米2万亿 换句话说,有点低 (地球体积参考资料来
=D它是1/(给定UID长度下可能出现的唯一数字的数量)。在上面的例子中,我们看到16个字节,或128位。2^128,所以匹配的概率是1/2^128。可能的GUID(128位值)的数量是2^128或3.4×10^38-大约是地球整个体积的每立方毫米2万亿 换句话说,有点低
(地球体积参考资料来源:维基百科)取决于GUID生成算法的类型。目前的算法使用124个随机比特,因此概率为1/2^124
使用较旧的算法(使用时间和MAC地址)的概率要高得多。您的计算有很多错误。 首先,36*32表示任何字母数字字符都可以是GUID的一部分。事实并非如此;只允许使用十六进制字符 其次,计算唯一guid的数量 有效字符数(16:0-9,A-F)^ GUID长度(32个字符) 所以我们有16^32==>2^(4^32)==>2^128
猜测任何一个GUID的几率为1/2^128。这取决于生成的GUID数量。这与统计学中的生日问题类似。请参阅Wikipedia和(这一个特别有一个GUID示例)
一般来说,在N个可能的guid上生成M个guid的冲突概率是
1-(1-(1/N))^C(M,2)
其中C(M,2)
是'M choose 2'不清楚您在问什么。我有两种方法来解释你的问题
g
,有人猜到它的概率是多少?为了简单起见,让我们假设GUID的所有128位都可用。然后猜测g
的概率是2^-128
。那很小。让我们从中获得一些直觉。让我们假设攻击者每秒可以生成10亿个guid。为了有50%的机会猜测g
,我们的攻击者必须生成2^127个guid。以每秒10亿的速度,需要5391448762278159040348年才能生成2^127个GUIp(n)=1-exp(-n^2/2*2^128)
(这是生日问题,可能的生日数为2^128)np(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的碰撞几率。让我们想想,一到。。。如果GUID中只有两个字符,它会是(2*36)?36*36听起来更像。。。算出三个字符,然后看看答案看起来有什么意义。为什么你会认为这是一个阶乘呢。只有在不能重复值的情况下才会出现这种情况。我敢打赌,这些字段中只有一个(例如E7E5BBE29B3D)是随机的。其他是固定的(例如,通过主机或服务器实例)或基于当前时间。这严重降低了可能性。我认为26个字母加上10个可能的数字可以为GUID中的一个位置(不包括破折号)生成36个可能的值。不知道为什么我会想到阶乘,大概是粗略的记忆=\这假设GUID的每个字节都是真正随机的。为了确保guid在主机之间是唯一的,UUID的大多数部分实际上是固定的(例如MAC地址)。然后用当前时间填充其余部分,几个字节是随机的。当你知道一些先前生成的UUID时,甚至那些随机字节也是可以猜测的。)比如说48位MAC地址+64位微时间。128-48-64=16. 我想说的是,赔率更接近2^16,而不是2^128。2^64正确吗?2^128的一半是2^127。统计不是我的强项,所以可能只需要sqrt(n)就可以达到50%的阈值。