Istnieje kilka metod generowania identyfikatorów UUID.
Wikipedia dobrze ilustruje je.
http://en.wikipedia.org/wiki/Universally_unique_identifier
v4 UUID:
Kluczową ideą o losowy, czy to jest rzeczywiście bardzo trudno wygenerować przy odnoszeniu się do szyfrowania. Większość generatorów liczb losowych to formuła matematyczna, która wymaga LOOK losowego i działa dobrze dla większości aplikacji. Wiele programów użyje $ pid | czas, aby wygenerować losowy materiał siewny.
Co, nie jest zbyt obiecujące ... Wiem, o której godzinie wygenerowano żądanie i istnieje tylko 65 534 zestawów. Mogę odgadnąć losowe nasienie z tego.
Tak więc, jeśli zaszczepiasz generator liczb UUIDv4 dokładnie w tym samym czasie (ta sama sekunda) z $ pid | time() na 100 maszynach z numerami PID, wtedy masz (domyślam się) 100/65536 szansę na duplikację. Można to zrobić dość łatwo jak to
for MACH in `cat machine_list`; do ; ssh $MACH -c "restart something" & ; done
SecureRandom:
Kod z SecureRandom, dociera OpenSSL/dev/urandom, potem win32 ...
Podczas czytania z/dev/urandom, jest bardzo losowy, ale jeśli w systemie nie ma wystarczającej ilości chaosu, urandom zrobi wszystko, aby dostarczyć losowe dane. Podczas odczytu z/dev/random, jest to "BŁĘDNE losowe, a jeśli nie ma wystarczającej ilości chaosu,/dev/random będzie blokować.
UUID:
UUID gem wykorzystuje rand()
r = [rand(0x100000000)].pack "N"
adresu MAC.
UUID również nie dostarcza v4 UUID :)
Praktycznie, jeśli kiedykolwiek ma md5 lub UUID kolizji kupuję bilet na loterii!
"Większa szansa", że nie jest unikalna, jest wysoce nieprawdopodobna w praktyce. * Myślę, że * klej UUID to v1 uuids, a tutaj jest coś niejasno powiązanego (ale nie odpowiedź): http://stackoverflow.com/questions/703035/when-are-youy-forlyforced-to-use- uuid-as-part-of-the-design/786541 # 786541 –
To właściwie dość dobrze odpowiada na pytanie. Wersja ruby to v4, a gem to v1. Prawdopodobieństwo, że wpadnę na dwa identyczne UUID przy użyciu metody ruby jest niewielkie.Użycie v1 jest w rzeczywistości zerowe w mojej konfiguracji (chyba że wygenerowałem 256 exobajtów uuids). "Szczerze mówiąc, w pojedynczej aplikacji bez złośliwych aktorów, wyginięcie całego życia na Ziemi nastąpi na długo przed kolizją, nawet na UUID w wersji 4, nawet jeśli generujesz sporo UUID na sekundę." –
Również UUID v1 opierają się na unikalności adresów MAC. W mocno zwirtualizowanym świecie możesz być zaskoczony, że wyjątkowość adresu mac wirtualnej karty sieciowej może nie być tak silną gwarancją, jak losowe bity pozyskane z 'OpenSSL :: Random' – dbenhur