Puede ser aceptable suponer que los números aleatorios serán únicos, pero hay que tener cuidado.
Suponiendo que sus números aleatorios están distribuidos equitativamente, la probabilidad de una colisión es aproximadamente (n 2/2 ) / k donde n es el número de números aleatorios que genera yk es el número de valores posibles que puede tomar un número "aleatorio".
No pone un número en astronómicamente improbable, así que tomemos como 1 en 2 30 (aproximadamente en mil millones). Digamos además que genera 2 30 paquetes (si cada paquete representa aproximadamente un kilobyte de datos, esto significa aproximadamente un terabyte de datos totales, grandes pero no inimaginablemente). Encontramos que necesitamos un número aleatorio con al menos 2 89 valores posibles.
En primer lugar, tus números aleatorios deben ser lo suficientemente grandes. Un número aleatorio de 32 bits puede tener como máximo 2 32 valores posibles. Para un servidor ocupado que no está lo suficientemente cerca.
En segundo lugar, su generador de números aleatorios debe tener un estado interno suficientemente grande. Si su generador de números aleatorios solo tiene un estado interno de 32 bits, no importa cuán grande sea el valor que genere, solo obtendrá como máximo 2 32 valores posibles.
En tercer lugar, si necesita que los números aleatorios sean únicos en todas las conexiones en lugar de solo dentro de una conexión, su generador de números aleatorios debe estar bien sembrado. Esto es especialmente cierto si su programa se reinicia con frecuencia.
En general, los generadores de números aleatorios "regulares" en lenguajes de programación no son adecuados para tal uso. Los generadores de números aleatorios proporcionados por las bibliotecas de criptografía generalmente son.