Questa è un'ottima domanda Non credo sia stato adeguatamente considerato nella fretta di utilizzare gli UUID ovunque. Non ho trovato nessuna ricerca solida.
Un suggerimento: cammina molto attentamente qui e conosci bene la tua crittografia. Se usi un UUID a 128 bit, l '"effetto compleanno" ci dice che è probabile una collisione dopo aver generato circa 2 ^ 64 chiavi, a condizione che tu abbia 128 bit di entropia in ciascuna chiave .
In realtà è piuttosto difficile garantire che sia così. La vera casualità può essere generata da (a) decadimento radioattivo (b) rumore di fondo casuale, spesso contaminato se non si è attenti (c) rumore elettronico opportunamente scelto, ad esempio prelevato da un diodo Zener polarizzato al contrario. (Ho giocato con l'ultimo, e funziona come un fascino, a proposito).
Non mi fiderei di pronunce come "Non l'ho visto in un anno di utilizzo", a meno che l'utente non abbia generato qualcosa che si avvicina a 2 ^ 64 (cioè circa 10 ^ 19) chiavi e le abbia confrontate tutte l'una contro l'altra, a esercizio non banale.
Il problema è questo Diciamo che hai solo 100 bit di entropia, quando si confrontano le tue chiavi con tutte le altre chiavi che tutti gli altri stanno generando in uno spazio chiave comune. Inizierai a vedere le collisioni tra circa 2 ^ 50 ie. circa 10 ^ 15 tasti. Le possibilità di vedere una collisione se hai popolato il tuo database con solo 1000 miliardi di chiavi sono ancora trascurabili. E se non controlli, in seguito otterrai errori imprevisti che si insinuano nel tuo database di dimensioni peta-row. Questo potrebbe mordere duro.
Il fatto stesso che ci siano più approcci per generare tali UUID dovrebbe causare un momentaneo spasmo di preoccupazione. Quando ti rendi conto che pochi generatori usano processi "veramente casuali" con entropia sufficiente per un UUID di tipo 4, dovresti essere eccessivamente preoccupato a meno che tu non abbia esaminato attentamente il contenuto di entropia del generatore. (La maggior parte delle persone non lo farà, o nemmeno saprà farlo; potresti iniziare con la suite DieHarder). NON confondere la generazione di numeri pseudocasuali con la generazione di numeri casuali reali.
È fondamentale rendersi conto che l'entropia che si inserisce è l'entropia che si possiede e semplicemente perturbare la chiave applicando una funzione crittografica non altera l'entropia. Potrebbe non essere intuitivamente ovvio che se il mio intero spazio comprende le cifre 0 e 1, il contenuto di entropia è lo stesso di quello delle seguenti due stringhe, a condizione che siano le uniche due opzioni: "Questa è una stringa davvero molto complessa 293290729382832 * ! @@ # & ^% $$) ,. m} "e" E ADESSO PER QUALCOSA DIVERSAMENTE COMPLETO ". Ci sono ancora solo due opzioni.
La casualità è difficile da ottenere, e semplicemente credere che "gli esperti l'hanno guardata, quindi è OK" potrebbe non essere sufficiente. I crittografi esperti (e ce ne sono alcuni che sono veramente competenti) sono i primi ad ammettere che spesso sbagliano. Ci siamo fidati di cuore, DigiNotar, ecc.
Penso che Paul Tomblin stia esercitando la dovuta cautela. Il mio 2c.