Il peut être acceptable de supposer que les nombres aléatoires seront uniques, mais vous devez faire attention.
En supposant que vos nombres aléatoires soient distribués de manière égale, la probabilité de collision est approximativement (n 2/2 ) / k, où n est le nombre de nombres aléatoires que vous générez et k le nombre de valeurs possibles pouvant être prises par un nombre "aléatoire".
Vous ne mettez pas un chiffre astronomiquement improbable, alors prenons le chiffre 1 sur 2 30 (environ 1 milliard). Disons en outre que vous générez 2 à 30 paquets (si chaque paquet représente environ un kilo-octet de données, cela signifie environ un téraoctet de données totales, mais sans que cela ne soit pas imaginable). Nous constatons que nous avons besoin d'un nombre aléatoire avec au moins 2 89 valeurs possibles.
Premièrement, vos nombres aléatoires doivent être suffisamment grands. Un nombre aléatoire de 32 bits peut avoir au plus 2 32 valeurs possibles. Pour un serveur occupé qui est loin d'être assez élevé.
Deuxièmement, votre générateur de nombres aléatoires doit avoir un état interne suffisamment grand. Si votre générateur de nombres aléatoires a uniquement un état interne à 32 bits, quelle que soit la taille de la valeur que vous en générez, vous n'obtiendrez toujours que 2 32 valeurs possibles au maximum.
Troisièmement, si vous souhaitez que les nombres aléatoires soient uniques dans toutes les connexions plutôt que dans une seule connexion, votre générateur de nombres aléatoires doit être bien amorcé. Cela est particulièrement vrai si votre programme est redémarré fréquemment.
En général, les générateurs de nombres aléatoires "normaux" dans les langages de programmation ne conviennent pas à une telle utilisation. Les générateurs de nombres aléatoires fournis par les bibliothèques de cryptographie sont généralement.