Puede ser aceptable asumir que los números aleatorios serán únicos, pero debes 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 y k es el número de posibles valores que un número "aleatorio" puede tomar.
No le asignas un número astronómicamente improbable, así que vamos a tomarlo 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). Descubrimos que necesitamos un número aleatorio con al menos 2 89 valores posibles.
Primero, tus números aleatorios deben ser lo suficientemente grandes. Un número aleatorio de 32 bits puede tener como máximo 2 valores posibles 32 . Para un servidor ocupado que no es lo suficientemente alto.
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 qué tan grande sea el valor que genere de él, solo obtendrá un máximo de 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 en general son.