2011-02-02 12 views
11

Solo curioso, ma qual è la probabilità di abbinare un Guid?Qual è la probabilità di indovinare (corrispondenza) un Guid?

Di 'un GUID dal server SQL: 5AC7E650-CFC3-4534-803C-E7E5BBE29B3D

si tratta di un fattoriale ?: (36 * 32)! = (1152)!

discutere = D

+1

Pensiamo che uno a ... se ci fossero solo due caratteri nel GUID, sarebbe (2 * 36)! ? 36 * 36 sembra più probabile ... Lavoralo per tre caratteri e poi vedi quale risposta avrà senso. –

+0

Perché dovresti pensare che sia un fattoriale. Questo sarebbe solo il caso se non potessi ripetere valori. –

+0

Scommetto che solo uno di quei campi (ad es. E7E5BBE29B3D) è casuale. Altri sono corretti (ad esempio, dall'istanza di host o server) o basati sull'ora corrente. Questo riduce seriamente le possibilità. – arnaud576875

risposta

26

Non è chiaro cosa stai chiedendo Vedo due modi per interpretare la tua domanda.

  1. Dato un GUID g, qual è la probabilità che qualcuno lo indovini? Supponiamo per semplicità che tutti i 128 bit di un GUID siano disponibili. Quindi la probabilità di indovinare g è 2^-128. È piccolo Intendiamoci attorno. Supponiamo che il nostro aggressore possa generare un miliardo di GUID al secondo. Per avere il 50% di possibilità di indovinare g, il nostro aggressore dovrebbe generare 2^127 GUID. Ad un tasso di un miliardo al secondo, occorrerebbero 5391448762278159040348 anni per generare 2^127 GUID.

  2. Stiamo generando una raccolta di guids. Qual è la probabilità di una collisione? Cioè, qual è la probabilità che generiamo due guidi con lo stesso valore? Questo è il paradosso del compleanno.Se si genera una sequenza di n GUID casualmente, la probabilità di almeno una collisione è approssimativamente di p(n) = 1 - exp(-n^2/2 * 2^128) (questo è il problema del compleanno con il numero di possibili compleanni di 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

Quindi, anche se si genera 2^60 GUID, le probabilità di una collisione sono estremamente piccole. Se è possibile generare un miliardo di GUID al secondo, ci vorranno ancora 36 anni per avere una possibilità di collisione 1.95e-03.

+0

2^64 è corretto? La metà di 2^128 è 2^127. Le statistiche non sono il mio punto di forza, quindi forse ci vuole solo sqrt (n) per raggiungere una soglia del 50%. – Jimothy

0

è 1/(numero di numeri unici possibili con la lunghezza data UID). Nell'esempio sopra vediamo 16 byte o 128 bit. 2^128, quindi la probabilità di una corrispondenza è 1/2^128.

6

Il numero di possibili GUID (valore a 128 bit) è 2^128 o 3.4 × 10^38 - circa 2 trilioni per millimetro cubo dell'intero volume della Terra.

In altre parole, tipo di basso.

(Fonte per la Terra di riferimento del volume: Wikipedia)

3

dipende dal tipo di algoritmo di generazione GUID. Gli algoritmi attuali utilizzano 124 bit casuali, quindi la probabilità è 1 in 2^124.

Con algoritmi obsoleti (che utilizzano il tempo e l'indirizzo MAC) la probabilità è molto più alta.

2

Ci sono un certo numero di cose sbagliate nei calcoli. Prima di tutto, 36 * 32 implica che qualsiasi carattere alfanumerico può far parte del GUID. Questo non è il caso; sono ammessi solo caratteri HEX.

In secondo luogo, il calcolo per il numero di GUID univoci è Numero di caratteri validi (16: 0-9, AF)^lunghezza del GUID (32 caratteri)

Così abbiamo 16^32 ==> 2^(4^32) ==> 2^128

Le probabilità di indovinare qualsiasi GUID sono 1/2^128.

+0

Ciò presuppone che ogni singolo byte del GUID sia veramente casuale. Per garantire che i GUID siano univoci tra gli host, la maggior parte delle parti di un UUID sono effettivamente fisse (ad esempio un indirizzo MAC). Quindi il resto viene riempito con l'ora corrente e alcuni byte sono casuali. E anche quei byte casuali sono immaginabili quando si conoscono alcuni UUID generati in precedenza.) Dire 48 bit di indirizzo MAC + 64 di microtime. 128-48-64 = 16. Direi che le probabilità sono più vicine a 2^16 che a 2^128. – arnaud576875

0

Dipende dal numero di GUID generati. Questo è simile al problema del compleanno nelle statistiche. Vedi Wikipedia e http://betterexplained.com/articles/understanding-the-birthday-paradox/ (questo ha specificamente un esempio GUID)

In generale, la probabilità di una collisione per la generazione di M GUID sopra N possibili GUID è 1 - (1- (1/N))^C(M,2) dove C(M,2) è 'M scelgono 2'

Problemi correlati