Jak utworzyć generator losowy
On 10 lutego, 2021 by adminJak można zaimplementować generator losowy?
Nie mówię o wywołaniu języka mathRandom () , ale implementacja procedur, które prowadzą do generowania liczb całkowicie losowych.
Komentarze
- I ' zaryzykuję stwierdzenie, że prawdziwa losowość nie jest obecnie możliwa.
- @Dynamic Myślę to samo, ale zawsze w razie potrzeby wywołałem funkcję losową, ale nie ' nie mam pojęcia, jak należy zaimplementować metodę losową.
- ” całkowicie losowe ” to bardzo głęboka królicza nora.
- @Dynamic: Uzyskanie sekwencji nie do odróżnienia od naprawdę losowych danych jest właściwie trywialne, o ile spójrz na świat zewnętrzny ze wsparciem sprzętowym. Fizyka atomowa i subatomowa (rozpad atomu, zdarzenia typu czujnika uderzającego foton) jest (w stopniu f aktualna teoria naukowa) prawdziwie losowe i łatwe do zmierzenia. Termodynamika na dużą skalę jest tak chaotyczna, że możemy ją uznać za przypadkową, gdy badamy układ makro w skali mikro itp. Szum czujnika aparatu cyfrowego jest dobrym przykładem …..
Odpowiedź
Kluczem do prawdziwie losowej liczby jest losowe źródło danych. Czasami są to informacje, takie jak opóźnienia w zdarzeniach związanych z klawiaturą lub zdarzenia sieciowe. Tam, gdzie pożądane są losowe dane wysokiej jakości, może to być rozpad radioaktywny . SGI zaimplementował lavarand , który czerpał swoje ziarno dla generatora liczb losowych ze zdigitalizowanego obrazu lampy lawowej. To wystarczyło, aby zostać uznanym za generator liczb losowych.
Poza prawdziwie losowymi danymi można pracować z deterministycznym, ale chaotycznym systemem. Na przykład twister mersenne . W takich sytuacjach zasiewa się generator liczbą, a następnie przesyła go do przodu, aby uzyskać liczby pseudolosowe. Są one wystarczające do gier i tym podobnych, gdzie nie jest krytyczne, jeśli ktoś może określić ziarno (i następną liczbę w sekwencji).
Rozważ przeczytanie patentu 5 732 138 i http://www.lavarnd.org/ , aby zapoznać się ze szczegółami implementacji dotyczącymi tworzenia liczby.
Komentarze
- +1 Rozważę różne źródła danych, takie jak pomiary pogody dla twojego materiału siewnego. wiki.cdyne .com /? title = CDYNE_Weather
- @ emeraldcode.com Wyzwaniem związanym z pomiarami pogody jest to, że nie są one całkowicie przypadkowe. Przewidywanie pogody ma całe pole. Temperatura zwykle rośnie. w ciągu dnia. Zima jest chłodniejsza niż lato. System gorących bitów wykorzystuje losowość dwóch zdarzeń rozpadu, które są nieprzewidywalne (mierzą czas od zdarzenia 1 do zdarzenia 2 i czas od zdarzenia 3 do zdarzenia 4 – jeżeli 1 : 2 == 3: 4, wyrzuć dane. Jeśli 1: 2 3: 4, bit losowy to 0. Jeśli 1: 2 > 3: 4, bit losowy to 1.
- Ja ' mówię o prędkości wiatru, ciśnieniu barometrycznym, temperaturze, wilgotności itp. Możesz wziąć próbkę pomiarów i ciężko się spierać o przypadkowość w tym względzie. Również sama temperatura mierzona z wystarczającą dokładnością jest bardzo przypadkowa.
Odpowiedź
O jakiego rodzaju przypadkowości mówisz o?
Istnieją dwie główne właściwości, które definiują losowe w sensie matematycznym: pierwsza to nieprzewidywalność a druga to jednolita dystrybucja .
Jeśli mówisz o po pierwsze, generowanie go w całości w oprogramowaniu jest prawie niemożliwe (i zrobienie tego poprawnie). Jest kilka sposobów, takich jak zbieranie entropii z urządzeń interfejsu ludzkiego, np. /dev/random
w Linuksie, ale generujemy dość niski poziom entropii, aby była użyteczna. Inni wskazali już niektóre implementacje sprzętowe. Wszystkie mają korzenie głęboko w teorii fizyki (podobnie jak nasze przekonanie, że dokładny moment uderzenia fotonu w detektor jest naprawdę losowy). Jest do tego kilka algorytmów programowych, na przykład Blum-Blum-Shub . Generalnie nie „nie pisz PRNG, jeśli potrzebujesz nieprzewidywalności, ale raczej użyj ustalonej wartości . Dotyczy to zwłaszcza kryptowalut.
Inną ważną właściwość funkcji losowych jest w rzeczywistości dość łatwa do spełnienia. Jest wiele przykładów tego, jak RNG za RC4 , Liniowe rejestry przesunięcia sprzężenia zwrotnego (to było faktycznie używane również w przypadku kryptowalut, dawno temu, ale okazało się, że jest on niewystarczająco bezpieczny) itp.Nawet standardowa biblioteka C rand()
prawdopodobnie będzie dobrze działać w tym celu.
Najważniejsze: upewnij się, że wiesz, która z dwóch właściwości jest fundamentalna dla twoich potrzeb. Nieprzewidywalne PRNG również są równomiernie rozłożone, ale odwrotnie nie jest prawdą. Ponadto, jeśli ujawniasz przypadkowość wewnątrz jakiegoś „silnika” (np. Silnika gry), upewnij się, że ludzie nie mogą grać w ten system, ponieważ możesz być zaskoczony, jakie to w rzeczywistości jest łatwe. Na przykład CSS (algorytm szyfrowania DVD) wykorzystywał 2 LSFR do celów kryptograficznych i został dość łatwo złamany.
Odpowiedź
Pierwsza , nie możesz generować naprawdę losowych liczb w oprogramowaniu. Istnieje mnóstwo różnych algorytmów, które pozwalają generować liczby pseudolosowe. W zależności od tego, dlaczego potrzebujesz liczb pseudolosowych (tj. jeśli używasz ich w kryptografii, wymagania są bardzo duże inny), generalnie użyłbyś czegoś takiego jak generator liczb losowych w bibliotece naukowej GNU (którą oczywiście możesz zaimplementować w dowolnym języku).
Odpowiedź
Sprzęt. Musisz połączyć się ze sprzętem, który może zbierać entropię z … skądkolwiek. Odczytaj statyczne z radia, umieść kamerę internetową na lavalampie lub pozwól użytkownikowi bełkotać lub bawić się myszą. Bez kontaktu z rzeczywistym światem generowanie prawdziwej losowości jest niemożliwe. To ważny obszar f studiu i włożono w to dużo pracy. Wątpię, czy „zamierzasz przecierać nowe szlaki, więc naprawdę powinieneś stanąć na ramionach gigantów i zacząć czytać wpisy wikipedii.
„ Generowanie liczb losowych jest zbyt ważne, aby je pozostawić szansa. „
-Robert R. Coveyou
EDYTUJ
Więc ja” ve dowiedziałem się, że żądany sprzęt to w rzeczywistości po prostu układ CMOS . Taki w tanich aparatach. Po prostu trzymaj go w ciemności, zwiększ czułość, a najprawdopodobniej drobne odchylenia, które obserwuje, mają korzenie w mechanice kwantowej, z której czerpiemy naszą entropię w prawdziwym życiu.
Odpowiedź
Ostatnim razem, gdy sprawdzałem, co było DUŻO DAWNIEJ temu, kanoniczne odniesienie do implementacji generatorów liczb pseudolosowych (PRNG ) to Knuth, tom. 2, „Seminumerical Algorithms” .
Nie myśl nawet o próbie wdrożenia własnego PRNG, dopóki przynajmniej nie przejrzysz Knutha.
Dodaj komentarz