2011-02-02 21 views
11

只是好奇,但匹配Guid的概率是多少?猜測(匹配)Guid的概率是多少?

從SQL Server假設一個GUID:5AC7E650-CFC3-4534-803C-E7E5BBE29B3D

它是一個階乘?:(36 * 32)! =(1152)!

討論 = d

+1

讓我們認爲通過...如果GUID中只有兩個字符,它會是(2 * 36)! ? 36 * 36聽起來更有可能......爲三個字母做出解釋,然後看看答案看起來是否合理。 – 2011-02-02 18:38:33

+0

你爲什麼認爲這是一個因子。只有當你不能重複價值時,情況纔會如此。 – 2011-02-02 18:42:16

+0

我敢打賭,只有其中一個領域(例如E7E5BBE29B3D)是隨機的。其他則是固定的(例如通過主機或服務器實例)或基於當前時間。這嚴重降低了可能性。 – arnaud576875 2011-02-02 18:42:23

回答

26

目前尚不清楚你在問什麼。我看到兩種方式來解釋你的問題。

  1. 給定一個GUID g,有人猜測它的概率是多少?爲簡單起見,假設所有128位的GUID都可用。那麼猜測g的概率是2^-128。這很小。讓我們圍繞這個做一些直覺。假設我們的攻擊者每秒可以產生10億個GUID。要有50%的機會猜測g,我們的攻擊者必須生成2^127個GUID。以每秒十億的速度,需要5391448762278159040348年才能生成2^127個GUID。

  2. 我們正在生成guid集合。碰撞的可能性是什麼?也就是說,我們生成兩個具有相同值的guid的可能性是多少?這是生日悖論。如果隨機生成一個n個GUID序列,那麼至少有一次碰撞的概率大約爲p(n) = 1 - exp(-n^2/2 * 2^128)(這是生日問題,可能的生日數是2^128)。

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,那麼碰撞機率爲1.95e-03仍需要36年時間。

0

它爲1 /(唯一號碼可能與給定的UID長度的數量)。在上面的例子中,我們看到了16個字節或128位。 2^128,所以匹配的概率是1/2^128。

6

可能的GUID(128位的值)的數是2^128或3.4×10^38 - 每立方毫米地球的整個體積的約2萬億美元。

換句話說,種類很低。

(來源對於地球體積參考:維基百科)

3

取決於GUID生成算法的類型。目前的算法使用124個隨機比特,所以概率在2^124中爲1。

對於較早的算法(即使用時間和MAC地址)的概率高得多。

2

有許多事情錯了你的計算。 首先,36 * 32意味着任何字母數字字符都可以是GUID的一部分。不是這種情況;只允許使用HEX字符。

其次,對於獨特的GUID的數目的計算是 數字有效性狀的(16:0-9,AF)^長度GUID的(32個字符)

因此,我們有16^32 ==> 2 ^(4^32)==> 2^128

猜測的機率任一項GUID爲1/2^128。