Può essere accettabile supporre che i numeri casuali saranno univoci ma devi stare attento.
Supponendo che i tuoi numeri casuali siano equamente distribuiti, la probabilità di una collisione è approssimativamente (n 2/2 ) / k dove n è il numero di numeri casuali che generi e k è il numero di possibili valori che un numero "casuale" può assumere.
Non inserisci un numero astronomicamente improbabile, quindi prendiamolo come 1 su 2 30 (all'incirca in un miliardo). Supponiamo inoltre di generare 2 30 pacchetti (se ogni pacchetto rappresenta circa un kilobyte di dati, ciò significa circa un terabyte di dati totali, grandi ma non inimmaginabili). Troviamo che abbiamo bisogno di un numero casuale con almeno 2 89 valori possibili.
Innanzitutto i tuoi numeri casuali devono essere abbastanza grandi. Un numero casuale a 32 bit può avere al massimo 2 32 possibili valori. Per un server impegnato che non è abbastanza vicino.
In secondo luogo, il generatore di numeri casuali deve avere uno stato interno sufficientemente ampio. Se il tuo generatore di numeri casuali ha solo uno stato interno a 32 bit, non importa quanto sia grande il valore che generi da esso otterrai comunque solo 2 32 valori possibili.
In terzo luogo, se hai bisogno che i numeri casuali siano univoci tra le connessioni piuttosto che all'interno di una connessione, il tuo generatore di numeri casuali deve essere ben strutturato. Ciò è particolarmente vero se il programma viene riavviato frequentemente.
In generale, i generatori di numeri casuali "regolari" nei linguaggi di programmazione non sono adatti a tale uso. I generatori di numeri casuali forniti dalle librerie di crittografia sono generalmente.