Hai affermato che sei interessato a considerare entrambe le collisioni generate da mezzi e attacchi "corretti" che implicano maliziosamente generare GUID in modo improprio. Le risposte a queste due situazioni sono straordinariamente diverse.
Se tutti i GUID che entrano nel tuo sistema sono generati con mezzi adeguati (cioè generati secondo RFC 4122, allora puoi aspettarti che siano tutti unici. I GUID / UUID sono stati progettati sin dall'inizio per fornire la garanzia specifica. UUID generato ovunque sarà unico da tutti gli altri GUID / UUID senza richiedere alcuna autorità centralizzata.Ci sono server Oracle che generano milioni di UUID al secondo in giganteschi database distribuiti senza collisioni.Gli UID / GUID sono stati creati per questo .
Se sei preoccupato per gli utenti malintenzionati che creano GUID / UUID in modo improprio, hai qualche preoccupazione. Da questa risposta relativa agli UUID :
GUIDs generated by calling other people's GUID generation functions are still not suitable for use as unguessable auth tokens though, because that's not the purpose of the GUID generation function - you're merely exploiting a side effect.
Questa risposta ha colpito l'unghia sulla testa. I GUID / UUID non sono mai stati progettati per essere ingestibili. Sono stati progettati per essere unici. Se il metodo che utilizzi per generare questi GUID / UUID fornisce l'inaffidabilità, si tratta di un effetto collaterale del processo. Dovresti indagare su come funziona il tuo particolare generatore.
Come hai notato, i GUID v1 sono particolarmente ipotizzabili. La loro univocità dipende interamente da un indirizzo MAC e da un timestamp con incrementi di 100ns. Questo è relativamente facile da spoofing. Se è possibile limitare il tempo in cui è stata generata una sessione, ad esempio 1/10 di secondo, sono disponibili solo 1.000.000 di valori. L'unica altra protezione che possiedi è il campo della sequenza di clock, che non è destinato a essere non diagnosticabile, quindi è probabile che rimanga lo stesso tra i riavvii di un computer.
v4, d'altra parte, è quasi completamente definito da un numero casuale di 122 bit. Questi sono altamente inaffidabili, purché tu possa fidarti del generatore di numeri casuali sottostante. Tuttavia, ricorda che stai facendo affidamento su un effetto collaterale del processo qui. Non ci sono garanzie sulla qualità del numero casuale perché non è richiesto per generare valori univoci - è solo richiesto per l'inaffidabilità.
Pertanto, se si dipende dalla casualità degli ID di sessione come funzionalità di sicurezza, è necessario generarli autonomamente, utilizzando un generatore di crittografia affidabile. Non c'è niente di sbagliato nell'usare il formato GUID per questi numeri. Avranno ancora più di abbastanza entropia per gestire le semplici chiavi di sessione. Il trucco è che non ci si deve fidare dei generatori GUID integrati per fornire garanzie che non fanno esplicitamente parte dello scopo della generazione GUID.