To jest bardzo dobre pytanie. Nie sądzę, by w pośpiechu rozważano stosowanie UUID wszędzie. Nie znalazłem żadnych solidnych badań.
Sugestia: stąpaj bardzo ostrożnie tutaj i dobrze poznaj swoją kryptografię. Jeśli używasz 128-bitowego UUID, „efekt urodzinowy” mówi nam, że kolizja jest prawdopodobna po wygenerowaniu około 2 ^ 64 kluczy, pod warunkiem, że masz 128 bitów entropii w każdym kluczu .
Właściwie raczej trudno jest to zapewnić. Prawdziwą przypadkowość można wygenerować na podstawie (a) rozpadu promieniotwórczego (b) losowego szumu radiowego tła, często zanieczyszczonego, chyba że jesteś ostrożny (c) odpowiednio dobranego szumu elektronicznego, np. Pobranego z diody Zenera z uprzedzeniem wstecznym. (Grałem z ostatnim i działa jak urok, BTW).
Nie ufałbym takim stwierdzeniom, jak „Nie widziałem tego od roku użytkowania”, chyba że użytkownik wygenerował coś zbliżającego się do 2 ^ 64 (tj. Około 10 ^ 19) kluczy i nie sprawdziłby ich wszystkich względem siebie, a ćwiczenie nietrywialne.
Problem jest taki. Załóżmy, że masz tylko 100 bitów entropii, gdy porównujesz klucze ze wszystkimi innymi kluczami, które wszyscy inni generują we wspólnej przestrzeni klawiszy. Zaczniesz widzieć kolizje za około 2 ^ 50 tj. około 10 ^ 15 kluczy. Twoje szanse na kolizję, jeśli zapełnisz bazę danych zaledwie 1000 miliardami kluczy, są nadal znikome. A jeśli nie sprawdzisz, później otrzymasz nieoczekiwane błędy, które wkradną się do bazy danych wielkości wiersza peta. To może mocno ugryźć.
Sam fakt, że istnieje wiele podejść do generowania takich UUID, powinien wywołać chwilowy przypływ niepokoju. Kiedy zdasz sobie sprawę, że niewiele generatorów używa „prawdziwie losowych” procesów z wystarczającą entropią dla UUID typu 4, powinieneś być nadmiernie zaniepokojony, chyba że dokładnie zbadałeś zawartość entropii w generatorze. (Większość ludzi tego nie zrobi, a nawet wie, jak to zrobić; możesz zacząć od pakietu DieHarder). NIE mylić generowania liczb pseudolosowych z prawdziwym generowaniem liczb losowych.
Ważne jest, abyś zdał sobie sprawę, że entropia, którą wprowadziłeś, jest entropią, którą masz, a po prostu zaburzenie klucza przez zastosowanie funkcji kryptograficznej nie zmienia entropii. Może nie być intuicyjnie oczywiste, że jeśli cała moja przestrzeń zawiera cyfry 0 i 1, zawartość entropii jest taka sama jak następujących dwóch ciągów, pod warunkiem, że są to jedyne dwie opcje: „To naprawdę bardzo złożony ciąg 293290729382832 * ! @@ # & ^% $$) ,. m} ”i„ A TERAZ DLA COŚ ZUPEŁNIE INNEGO ”. Nadal są tylko dwie opcje.
Losowość jest trudna do poprawienia, a samo przekonanie, że „eksperci to obejrzeli, dlatego jest w porządku” może nie wystarczyć. Doświadczeni kryptografowie (a niewielu z nich jest naprawdę biegłych) jako pierwsi przyznają, że często mylą się. Zaufaliśmy heartbleed, DigiNotar itp.
Myślę, że Paul Tomblin zachowuje odpowiednią ostrożność. Mój 2c.