Odpowiedź Dave'a całkiem ładnie go wznowić, ale aby wyjaśnić nieco więcej na temat drugiej opcji:
prawdziwy sprzętowy generator liczb losowych wykorzystuje fizyczne źródło entropii. Takim źródłem entropii może być promieniowanie kosmiczne, szum elektryczny, efekt lawinowy diody (lub tranzystora BJT), obwód chua itp. Im mniej deterministyczne źródło entropii, tym lepsza jakość wyjścia losowego. Idealnym źródłem entropii byłoby zastosowanie efektu fizyki kwantowej lub czegoś, czego nie da się modelować równaniami deterministycznymi.
Innym ważnym czynnikiem z generatorami liczb losowych jest to, że źródło entropii może generować tylko ograniczoną ilość entropii na jednostkę czasu. Dobrym przykładem jest obwód chua: chociaż jest dość losowy, ma bardzo niską prędkość i nie może być wykorzystywany do rzeczywistych zastosowań.
W wielu procesorach / mikrokontrolerach z wbudowanymi RNG stosuje się przesunięcie zegara od 2 do 4 zegarów, które są celowo nieprawidłowo zsynchronizowane. Następnie używają filtrów analogowych i cyfrowych, aby jeszcze bardziej randomizować wzór i przesuwać wynik w rejestrze. Przeprowadzenie takiego filtrowania wymaga kilku cykli, co wyjaśnia minimalną liczbę cykli wymaganych na danym zegarze, zanim dostępna będzie nowsza wartość.
Dryfowanie zegara nie jest efektem kwantowym, więc może być modelowane, ale jest wystarczająco losowe, ponieważ zależy od wielu parametrów, takich jak temperatura, proces krzemowy, częstotliwość działania, szum elektryczny, promieniowanie tła itp. .
W aplikacjach, w których sprzętowy RNG nie ma wystarczającej przepustowości (np. W bardzo wymagających aplikacjach kryptograficznych), dość powszechne jest używanie sprzętowego RNG jako źródła dla generatora pseudolosowego liczb, takiego jak funkcja rand () w sdtlib. Jednak taka aplikacja zazwyczaj zapewnia lepszą implementację rand (), która jest specjalnie zaprojektowana do uruchamiania z zarodka, który może być bardzo często odrzucany z prawdziwymi losowymi wartościami. W nowszym procesorze Intel ze zintegrowanym sprzętowym RNG część pseudolosowa algorytmu jest bezpośrednio zintegrowana z krzemem, więc jest wykonywana sprzętowo, zapewniając bardzo wysoką losową przepustowość.
Jeśli masz na myśli samą metodę rand (), jest to tylko wyrażenie matematyczne, które ma na celu wygenerowanie wystarczająco dużej ilości entropii. Wystarczająco duży, zależny od aplikacji: w przypadku generacji kluczy kryptograficznych losowość musi być wyższej jakości niż losowość wymagana do zwykłego losowego losowania w ulubionym odtwarzaczu muzyki. Oczywiste jest, że im wyższa jakość losowego wyniku, tym wyższy koszt obliczeniowy liczby losowej.
Operacje związane z liczbą losową są bardzo podobne do operacji związanych z obliczaniem skrótu MD5 pliku: próbują użyć pewnego rodzaju efektu lawinowego, aby zmiana bitowa wartości początkowej zmieniła jeden wzorzec. Na marginesie, NIE polecam używania MD5 jako generatora liczb pseudolosowych; to był tylko przykład. Byłoby to zarówno nieefektywne, jak i nie tak losowe, ale chodzi o to: jeśli podasz ten sam plik algorytmowi MD5, zawsze uzyskasz to samo deterministyczne wyjście, prawie w ten sam sposób, w jaki zawsze uzyskasz takie samo wyjście funkcja rand (), jeśli wprowadzisz to samo ziarno, chyba że twoja implementacja zależy od niektórych dowolnych elementów, takich jak bieżący czas.