To może zależeć od systemu operacyjnego. Mogę sobie wyobrazić, że najnowsze jądra GNU/Linux mogą używać sprzętowych generatorów losowych dla np. /dev/random
(od strony man random(4)
sugeruje, że używa szumu), ale mogę się mylić.
Normalną praktyką jest stosowanie jakiś wspólny generator pseudo-losowych (jak np standardowa funkcja random(3)
), ale do materiału siewnego go podczas uruchamiania aplikacji, od jakiegoś bardziej losowego źródła (np czytania /dev/urandom
korzystając getpid()
i coś z bieżący czas z gettimeofday()
itd.).
Bardzo prawdopodobne jest, że uzyskanie bardzo dobrych liczb losowych jest czarną sztuką, przynajmniej dla mnie. Ale powyższe rozwiązanie ma co najmniej tę zaletę, że nie jest łatwo odtwarzalne z jednej aplikacji na drugą.
Jeśli twoja aplikacja jest długotrwała (np. Usługa sieciowa działająca w tym samym procesie przez wiele godzin), być może od czasu do czasu możesz ponownie uruchomić generator liczb pseudolosowych. Jeśli chodzi o serwer sieciowy, wyobrażam sobie, że można również użyć czasów żądań (mierząc je z milisekundową szczegółowością) jako źródła losowości (aby wysiać swój PRNG).
Która platforma systemu operacyjnego? Nie zdziwiłbym się, gdyby był wykonywany automatycznie zarówno w systemie Linux, jak i Windows, w oparciu o możliwości sprzętowe. – unwind
Rozwijam się pod Windows 7, ale mój projekt używa Qt i docelowo docelowo zarówno dla Windows, jak i Linuksa, i jeśli zgodność Qt kakao zostanie wkrótce poprawiona, mam nadzieję, że również MacOS – dtech
Po prostu napisz trochę wbudowanego zestawu do wykonania instrukcji RDRAND. Lub poczekaj na kompilator, aby obsługiwać wewnętrzne. Albo jeszcze lepiej, poczekaj kilka lat, aby uzyskać pewne szanse, że twój użytkownik będzie miał maszynę, która go obsługuje. Podręcznik znajduje się tutaj: http://software.intel.com/file/36945 –