Può essere accettabile assumere che i numeri casuali siano unici ma bisogna stare attenti.
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 generati e k è il numero di possibili valori che un numero "casuale" può assumere.
Non imponi un numero astronomicamente improbabile, quindi prendilo come 1 su 2 30 (circa su un miliardo). Diciamo inoltre che generi 2 pacchetti 30 (se ogni pacchetto rappresenta circa un kilobyte di dati, allora questo significa circa un terabyte di dati totali, grande ma non in modo inimmaginabile). 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 valori possibili. Per un server impegnato che non è mai abbastanza vicino.
In secondo luogo il generatore di numeri casuali deve avere uno stato interno sufficientemente grande. 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 possibili valori 32 .
In terzo luogo, se hai bisogno che i numeri casuali siano unici attraverso le connessioni anziché solo all'interno di una connessione, il tuo generatore di numeri casuali deve essere ben seminato. Questo è particolarmente vero se il tuo 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 generalmente sono.