Można założyć, że liczby losowe będą unikalne, ale musisz być ostrożny.
Zakładając, że twoje liczby losowe są równomiernie rozmieszczone, prawdopodobieństwo zderzenia wynosi mniej więcej (n 2/2 ) / k, gdzie n jest liczbą generowanych liczb losowych, a k jest liczbą możliwych wartości, które może przyjąć „losowa” liczba.
Nie stawiasz liczb na astronomicznie mało prawdopodobne, więc weźmy to jako 1 na 2 30 (mniej więcej na miliard). Powiedzmy dalej, że generujesz 2 30 pakietów (jeśli każdy pakiet reprezentuje około kilobajta danych, oznacza to około terabajta danych ogółem, dużych, ale nie niewyobrażalnie). Okazuje się, że potrzebujemy liczby losowej o co najmniej 2 89 możliwych wartościach.
Po pierwsze, liczby losowe muszą być wystarczająco duże. 32-bitowa liczba losowa może mieć maksymalnie 2 32 możliwe wartości. Dla zajętego serwera, który nie jest wystarczająco wysoki.
Po drugie, generator liczb losowych musi mieć wystarczająco duży stan wewnętrzny. Jeśli generator liczb losowych ma tylko 32-bitowy stan wewnętrzny, to bez względu na to, jak duża wartość z niego wygenerujesz, nadal otrzymujesz maksymalnie 2 32 możliwe wartości.
Po trzecie, jeśli chcesz, aby liczby losowe były unikalne dla połączeń, a nie tylko w połączeniu, Twój generator liczb losowych musi być dobrze rozstawiony. Jest to szczególnie ważne, jeśli program jest często restartowany.
Zasadniczo „zwykłe” generatory liczb losowych w językach programowania nie są odpowiednie do takiego zastosowania. Generatory liczb losowych generowane przez biblioteki kryptograficzne są na ogół.