2011-02-02 5 views
11

Po prostu ciekawy, ale jakie jest prawdopodobieństwo dopasowania Guida?Jakie jest prawdopodobieństwo zgadywania (dopasowywania) Guida?

Say Guid z serwera SQL: 5AC7E650-CFC3-4534-803C-E7E5BBE29B3D

jest to silnia ?: (36 * 32)! = (1152)!

omówienia = D

+1

Pomyślmy, że od jednego do ... jeśli byłyby tylko dwa znaki w identyfikatorze GUID, to byłoby (2 * 36)! ? 36 * 36 brzmi bardziej prawdopodobnie ... Wypracuj trzy znaki, a następnie zobacz, jak wygląda odpowiedź. –

+0

Dlaczego uważasz, że to silnia. Tak będzie tylko w przypadku, gdy nie można powtórzyć wartości. –

+0

Założę się, że tylko jedno z tych pól (np. E7E5BBE29B3D) jest losowe. Inne są naprawione (na przykład przez instancję hosta lub serwera) lub na podstawie bieżącego czasu. To poważnie ogranicza możliwości. – arnaud576875

Odpowiedz

26

Nie jest jasne o co prosisz. Widzę dwa sposoby na zinterpretowanie twojego pytania.

  1. Na podstawie identyfikatora GUID g, jakie jest prawdopodobieństwo, że ktoś zgadnie? Załóżmy dla uproszczenia, że ​​wszystkie 128 bitów GUID są dostępne. Wtedy prawdopodobieństwo zgadnięcia g jest 2^-128. To jest małe. Przejdźmy przez to trochę intuicji. Załóżmy, że nasz atakujący może wygenerować miliard identyfikatorów GUID na sekundę. Aby mieć 50% szans na odgadnięcie g, nasz atakujący musiałby wygenerować 2^127 identyfikatorów GUID. W tempie miliarda na sekundę wygenerowanie 2^127 identyfikatorów GUID zajęłoby 5391448762278159040348 lat.

  2. Generujemy kolekcję przewodników. Jakie jest prawdopodobieństwo kolizji? To jest, jakie jest prawdopodobieństwo, że wygenerujemy dwa guidy o tej samej wartości? To jest paradoks urodzin.Jeśli generowana jest sekwencja n identyfikatorów GUID losowo, prawdopodobieństwo wystąpienia co najmniej jednej kolizji wynosi około p(n) = 1 - exp(-n^2/2 * 2^128) (jest to problem dotyczący urodzin z liczbą możliwych urodzin wynoszącą 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

Tak więc, nawet jeśli wygenerowania 2^60 GUID, szanse zderzenia są bardzo małe. Jeśli możesz wygenerować miliard identyfikatorów GUID na sekundę, potrzeba 36 lat, aby uzyskać szansę kolizji na 1,95e-03.

+0

Czy 2^64 jest prawidłowe? Połowa z 2^128 to 2^127. Statystyki nie są moją mocną stroną, więc może to wystarczy, aby sqrt (n) osiągnął próg 50%. – Jimothy

0

jest 1/(liczba unikalnych liczby możliwych przy danej długości UID). W powyższym przykładzie widzimy 16 bajtów lub 128 bitów. 2^128, więc prawdopodobieństwo meczu wynosi 1/2^128.

6

Liczba możliwych identyfikatorów GUID (128-bitowa wartość) wynosi 2^128 lub 3,4 × 10^38 - około 2 tryliony na milimetr sześcienny całej objętości Ziemi.

Innymi słowy, niska.

(źródło odniesienia głośności Earth: Wikipedia)

3

Zależy od typu algorytmu generacji GUID. Obecne algorytmy używają 124 losowych bitów, więc prawdopodobieństwo wynosi 1 na 2^124.

Przy starszych algorytmach (wykorzystujących czas i adres MAC) prawdopodobieństwo jest znacznie wyższe.

2

Jest kilka rzeczy nie tak z twoimi obliczeniami. Po pierwsze, 36 * 32 oznacza, że ​​każdy znak alfanumeryczny może być częścią identyfikatora GUID. Nie o to chodzi; dozwolone są tylko znaki HEX.

drugie, obliczenia dla liczby unikalnych identyfikatorów GUID jest Ilość poprawnych znaków (16: 0-9, AF)^długość GUID (32 znaków)

Więc mamy 16^32 ==> 2^(4^32) ==> 2^128

Szanse na zgadnięcie dowolnego GUID to 1/2^128.

+0

Zakłada się, że każdy pojedynczy bajt GUID jest naprawdę losowy. Aby upewnić się, że identyfikatory GUID są unikalne wśród hostów, większość części identyfikatora UUID jest naprawiona (np. Adres MAC). Resztę dopełnia aktualny czas, a kilka bajtów jest losowych. Nawet te losowe bajty można odgadnąć, gdy znasz niektóre z wcześniej wygenerowanych identyfikatorów UUID. Powiedz 48 bitów adresu MAC + 64 mikrotime. 128-48-64 = 16. Powiedziałbym, że szanse są bliższe 2^16 niż 2^128. – arnaud576875

0

To zależy od liczby wygenerowanych identyfikatorów GUID. Jest to podobne do problemu urodzinowego w statystykach. Patrz Wikipedia i http://betterexplained.com/articles/understanding-the-birthday-paradox/ (ten konkretnie ma przykład GUID)

W ogóle, prawdopodobieństwo kolizji do generowania GUID M na N możliwych GUID jest 1 - (1- (1/N))^C(M,2) gdzie C(M,2) jest „M wybrać 2”

Powiązane problemy