La specifica UUID descrive diverse "versioni" che sono metodi per generare l'UUID. La maggior parte mira a garantire l'unicità (questo è il punto principale dell'UUID) utilizzando, ad esempio, la data corrente. Questo è efficiente ma significa che mentre gli UUID generati sono unici , sono anche prevedibili , il che li rende inadeguati per alcuni usi di sicurezza.
Il "4" metodo di generazione UUID (nella sezione 4.4) , tuttavia, dovrebbe utilizzare un generatore di numeri casuali crittograficamente strong. 6 dei 128 bit sono fissati su un valore convenzionale (per indicare che questo è un UUID versione 4, ovvero), quindi questo lascia 122 bit dal RNG.
Se l'RNG sottostante è sicuro (ad es. /dev/urandom
su un sistema Linux / MacOS / * BSD, o CryptGenRandom()
su Windows) allora dato molti UUID generati, un utente malintenzionato non dovrebbe essere in grado di predire il prossimo con probabilità di successo superiore a 2 -122 , che è sufficientemente piccolo per la maggior parte degli scopi, compresi i codici di lancio per i missili nucleari.
122 bit casuali assicurano l'unicità con alta probabilità. Se generi più UUID versione 4 e li accumuli, potresti aspettarti di incontrare la tua prima collisione dopo circa 2 61 UUID - che è di circa 2 miliardi di miliardi; semplicemente memorizzando quel numero di UUID si userebbero più di 30 milioni di terabyte. Se consideri "solo" 10 12 tale UUID (un miliardo di miliardi, memorizzabile oltre 16 terabyte), allora i rischi di avere due UUID identici tra questi sono circa 9.4 * 10 -14 , cioè circa 700 migliaia di volte meno probabile di vincere milioni di dollari alla lotteria.
Pertanto, UUID sono appropriati per scopi di sicurezza se (e solo se) sono UUID "versione 4" generati con un RNG sicuro.