An Generator losowy to narzędzie lub algorytm, który generuje nieprzewidywalne i niedeterministyczne wyniki. Generatory te są niezbędne w wielu dziedzinach, od kryptografii po symulacje komputerowe.
- Nieprzewidywalne wyniki: Generatory losowe zapewniają wyniki, których nie można przewidzieć.
- Zastosowanie w kryptografii: Są one kluczowe dla bezpiecznej komunikacji.
- Symulacje komputerowe: Często stosowany w modelowaniu i analizie złożonych systemów.
Generator liczb losowych
Jak działa generator liczb losowych? ?
Generatory liczb losowych działają w oparciu o procesy fizyczne lub algorytmy matematyczne. Najważniejszymi typami są prawdziwe generatory liczb losowych (TRNG) i generatory liczb pseudolosowych (PRNG).
Gdzie grać w blackjacka online?
Mieliśmy najlepsze doświadczenia w Black Jack w Kasyno na żywo Playamo zrobione. Moim zdaniem to jest właśnie to, NAJLEPSZY WYBÓR przy stołach z krupierami na żywo i możesz bardzo dobrze przygotować się do gry w prawdziwym kasynie! W porównaniu do innych kasyn online, wygrane w Playamo są naprawdę wypłacane i dlatego zdecydowanie polecam Playamo Online Casino!
Kasyno Playamo posiada wiele stołów do blackjacka na żywo oraz Szybka płatność Wygraj.
Różne zastosowania losowości doprowadziły do opracowania różnych metod generowania losowych danych. Niektóre z nich istnieją od czasów starożytnych, w tym dobrze znane przykłady, takie jak rzucanie kośćmi, rzucanie monetami, tasowanie kart do gry, używanie łodyg krwawnika (do wróżenia) w I Ching i niezliczone inne techniki. Ze względu na mechaniczny charakter tych technik, generowanie dużych ilości wystarczająco losowych liczb (ważnych w statystyce) wymagało dużego nakładu pracy i czasu. Dlatego też wyniki były czasami gromadzone i rozpowszechniane jako tabele liczb losowych.
Istnieje kilka obliczeniowych metod generowania liczb pseudolosowych. Wszystkim z nich nie udaje się osiągnąć celu prawdziwej losowości, chociaż z różnym powodzeniem spełniają niektóre z założeń statystycznych. Testy dla losowości, które mają na celu zmierzenie, jak nieprzewidywalne są ich wyniki (tj. w jakim stopniu ich wzorce są rozpoznawalne). To sprawia, że są one generalnie bezużyteczne w zastosowaniach takich jak kryptografia. Istnieją jednak również starannie zaprojektowane, kryptograficznie bezpieczne generatory liczb pseudolosowych (CSPRNGS) ze specjalnymi funkcjami zaprojektowanymi specjalnie dla kryptografii. Wkładka zostały opracowane w kryptografii.
Zastosowania generatorów losowych
- Gry i rozrywka:
- Generatory losowe są wykorzystywane w grach do tworzenia nieprzewidywalnych elementów, takich jak rzuty kośćmi, dobieranie kart lub generowanie poziomów.
- Kryptografia:
- W bezpieczeństwie informacji generatory liczb losowych mają kluczowe znaczenie dla generowania kluczy, soli i nonces, które są wymagane do szyfrowania i uwierzytelniania.
- Statystyki i próbki:
- Podczas tworzenia prób do ankiet i badań, generatory losowe pomagają w losowaniu reprezentatywnych i bezstronnych prób.
- Modele symulacyjne:
- W nauce i technologii generatory liczb losowych są wykorzystywane do przeprowadzania symulacji Monte Carlo, które wykorzystują zmienne losowe do modelowania i analizowania złożonych systemów.
- Loterie i konkursy:
- Zapewniają one sprawiedliwy i losowy wybór zwycięzców w loteriach, loteriach i innych konkursach.
- Algorytmy optymalizacji:
- Metody losowe, takie jak algorytmy genetyczne i symulowane wyżarzanie, wykorzystują generatory losowe do efektywnego przeszukiwania przestrzeni rozwiązań i znajdowania optymalnych rozwiązań.
- Sztuczna inteligencja i uczenie maszynowe Nauka:
- Generatory losowe są używane do mieszania zestawów danych i losowego wybierania danych treningowych i testowych w celu walidacji i trenowania modeli.
Generatory liczb losowych mają zastosowanie w Hazardw próbkowaniu statystycznym, symulacji komputerowej, kryptografii, w pełni losowym projektowaniu i innych obszarach, w których pożądane jest generowanie nieprzewidywalnych wyników. Ogólnie rzecz biorąc, w zastosowaniach, w których nieprzewidywalność jest kluczową cechą, takich jak aplikacje bezpieczeństwa, generatory sprzętowe są preferowane tam, gdzie to możliwe.
Generatory liczb pseudolosowych są bardzo przydatne w opracowywaniu metod symulacji Monte Carlo, ponieważ debugowanie jest ułatwione dzięki możliwości powtarzania tej samej sekwencji liczb losowych, zaczynając od tego samego losowego ziarna. Są one również wykorzystywane w kryptografii - o ile ziarno pozostaje tajne. Nadawca i odbiorca mogą automatycznie wygenerować ten sam zestaw liczb do wykorzystania jako klucz.
Generowanie liczb pseudolosowych jest ważnym i powszechnym zadaniem w programowaniu komputerowym. Podczas gdy kryptografia i niektóre algorytmy numeryczne wymagają bardzo wysokiego stopnia pozornej losowości, wiele innych operacji wymaga jedynie umiarkowanego stopnia nieprzewidywalności. Prostymi przykładami może być prezentowanie użytkownikowi "losowego cytatu dnia" lub określanie, w którym kierunku może poruszać się kontrolowany przez komputer przeciwnik w grze komputerowej. Słabsze formy losowości są wykorzystywane w algorytmach haszujących oraz w tworzeniu zamortyzowanych algorytmów wyszukiwania i sortowania.
Niektóre aplikacje, które na pierwszy rzut oka wydają się odpowiednie dla randomizacji, w rzeczywistości nie są tak proste. Na przykład system, który "losuje" utwory muzyczne dla systemu muzyki w tle, musi tylko pojawiać się losowo i może nawet mieć sposoby kontrolowania wyboru muzyki: prawdziwie losowy system nie miałby ograniczeń co do tego, że ten sam utwór pojawia się dwa lub trzy razy z rzędu.
Prawdziwe liczby losowe a liczby pseudolosowe ?
Różnica między liczbami rzeczywistymi i pseudolosowymi polega na przewidywalności i źródle losowości.
- Prawdziwe liczby losowe: Nieprzewidywalne, oparte na procesach fizycznych.
- Liczby pseudolosowe: Generowane przez algorytmy, przewidywalne, jeśli znany jest seed.
Istnieją dwie główne metody generowania liczb losowych. Pierwsza metoda polega na pomiarze zjawiska fizycznego, które jest uważane za losowe, a następnie kompensacji możliwych zakłóceń w procesie pomiaru. Przykłady źródeł obejmują pomiar szumu atmosferycznego, szumu termicznego i innych zewnętrznych zjawisk elektromagnetycznych i kwantowo-mechanicznych. Na przykład kosmiczne promieniowanie tła lub rozpad radioaktywny mierzony w krótkich okresach czasu są źródłami naturalnej entropii (jako miary nieprzewidywalności lub zaskoczenia procesu generowania liczb).
Szybkość, z jaką entropia może być pozyskiwana z naturalnych źródeł, zależy od mierzonych zjawisk fizycznych. W związku z tym źródła naturalnie występującej "prawdziwej" entropii są określane jako blokujące - są one ograniczone do momentu zebrania wystarczającej ilości entropii, aby zaspokoić zapotrzebowanie. W niektórych systemach uniksopodobnych, w tym w większości dystrybucji Linuksa, plik pseudourządzenia /dev/random blokuje się do momentu zebrania wystarczającej ilości entropii ze środowiska. Z powodu tego blokowania, duże odczyty danych masowych z /dev/random, takie jak wypełnianie dysku twardego losowymi bitami, często mogą być powolne w systemach, które używają tego typu źródła entropii.
Druga metoda wykorzystuje algorytmy obliczeniowe, które mogą generować długie sekwencje pozornie losowych wyników, które w rzeczywistości są całkowicie zdeterminowane przez krótszą wartość początkową, znaną jako wartość początkowa lub klucz. Pozwala to na odtworzenie całej pozornie losowej sekwencji, jeśli znana jest wartość początkowa. Ten typ generatora liczb losowych jest często określany jako generator liczb pseudolosowych. Ten typ generatora jest zwykle nieblokujący, więc nie jest ograniczony szybkością przez zdarzenie zewnętrzne, co pozwala na odczytywanie dużych ilości danych.
Niektóre systemy wykorzystują podejście hybrydowe, które gromadzi losowość z naturalnych źródeł, gdy jest ona dostępna, i opiera się na kryptograficznie bezpiecznych generatorach liczb pseudolosowych (CSPRNG), które są okresowo ponownie zasilane, gdy pożądana szybkość odczytu przekracza zdolność naturalnego podejścia do zbierania do zaspokojenia popytu. Podejście to pozwala uniknąć ograniczonego tempa blokowania generatorów liczb losowych opartych na wolniejszych i czysto środowiskowych metodach.
Podczas gdy generator liczb pseudolosowych oparty wyłącznie na logice deterministycznej nigdy nie może być uznany za "prawdziwe" źródło losowe w najczystszym tego słowa znaczeniu, są one generalnie wystarczające w praktyce, nawet w przypadku wymagających aplikacji o krytycznym znaczeniu dla bezpieczeństwa. Starannie zaprojektowane i zaimplementowane generatory liczb pseudolosowych mogą być certyfikowane do celów kryptograficznych o krytycznym znaczeniu dla bezpieczeństwa, jak ma to miejsce w przypadku algorytmów Yarrow i Fortuna. Pierwszy z nich jest podstawą źródła entropii /dev/random w systemach FreeBSD, AIX, macOS, NetBSD i innych. OpenBSD używa algorytmu liczb pseudolosowych znanego jako arc4random.
Metody generowania
Metody fizyczne
Najwcześniejsze metody generowania liczb losowych, takie jak rzuty kostką, rzuty monetą i koła ruletki, są nadal używane, głównie w grach i grach hazardowych, ponieważ są zbyt powolne dla większości zastosowań w statystyce i kryptografii.
Fizyczny generator liczb losowych może być oparty na zasadniczo losowym atomowym lub subatomowym zjawisku fizycznym, którego nieprzewidywalność można przypisać prawom mechaniki kwantowej. Źródła entropii obejmują rozpad radioaktywny, szum termiczny, szum wystrzału, szum lawinowy w diodach Zenera, odchylenia zegara, czasowe ruchy głowicy odczytu dysku twardego i szum radiowy. Jednak zjawiska fizyczne i narzędzia używane do ich pomiaru zazwyczaj wykazują asymetrie i systematyczne zniekształcenia, które sprawiają, że ich wyniki nie są jednolicie losowe. Ekstraktor losowy, taki jak kryptograficzna funkcja skrótu, może być użyty do uzyskania równomiernego rozkładu bitów z niejednorodnie losowego źródła, ale przy niższej szybkości transmisji bitów.
Prototyp szybkiego generatora liczb losowych czasu rzeczywistego opartego na laserze chaotycznym został opracowany w 2013 roku.
Opracowano różne pomysłowe metody gromadzenia tych entropijnych informacji. Jedną z technik jest zastosowanie funkcji skrótu do klatki strumienia wideo z nieprzewidywalnego źródła. Lavarand użył tej techniki z obrazami z wielu lamp lawowych. HotBits zmierzył rozpad radioaktywny za pomocą rur Geigera-Müllera, podczas gdy Random.org zarejestrował wahania amplitudy szumu atmosferycznego za pomocą zwykłego radia.
Metody wspomagane komputerowo
Większość liczb losowych generowanych przez komputery wykorzystuje algorytmy PRNG, które mogą automatycznie generować długie sekwencje liczb o dobrych właściwościach losowych, ale ostatecznie sekwencje się powtarzają (lub zużycie pamięci rośnie w nieskończoność). Te liczby losowe są wystarczające w wielu sytuacjach, ale nie są tak losowe jak liczby generowane z elektromagnetycznego szumu atmosferycznego używanego jako źródło entropii. Zestaw wartości generowanych przez takie algorytmy jest zazwyczaj określany przez stałą liczbę zwaną seedem. Jednym z najpopularniejszych PRNG jest liniowy generator kongruencji, który wykorzystuje zależność rekurencyjną
Xn+1=(aXn+b)mod mX_{n+1} = (aX_n + b) \mod mXn+1=(aXn+b)modm
służy do generowania liczb, gdzie aaa, bbb i mmm są dużymi liczbami całkowitymi, a Xn+1X_{n+1}Xn+1 jest kolejną liczbą w serii liczb pseudolosowych. Maksymalna liczba liczb, które formuła może wygenerować, to moduł mmm. Zależność rekurencyjną można rozszerzyć na macierze, aby uzyskać znacznie dłuższe okresy i lepsze właściwości statystyczne. Aby uniknąć pewnych nielosowych właściwości pojedynczego generatora kongruencji liniowej, kilka takich generatorów liczb losowych z nieco innymi wartościami współczynnika mnożnika aaa może być używanych równolegle, z "głównym" generatorem liczb losowych wybierającym między różnymi generatorami.
Prostą metodą ręcznego generowania liczb losowych jest tak zwana metoda średnich kwadratów, która została zaproponowana przez Johna von Neumanna. Choć jest ona łatwa w implementacji, jej wynik jest niskiej jakości. Ma bardzo krótki okres i poważne słabości, takie jak fakt, że sekwencja wyjściowa prawie zawsze zbiega się do zera. Niedawną innowacją jest połączenie metody średnich kwadratów z sekwencją Weyla. Metoda ta zapewnia wysoką jakość wyników w długim okresie.
Większość języków programowania zawiera funkcje lub procedury biblioteczne, które zapewniają generatory liczb losowych. Są one często zaprojektowane tak, aby zapewnić losowy bajt lub słowo lub równomiernie rozłożoną liczbę zmiennoprzecinkową z przedziału od 0 do 1.
Jakość, tj. losowość, takich funkcji bibliotecznych jest bardzo różna, od całkowicie przewidywalnych wyników do kryptograficznie bezpiecznych. Standardowy generator liczb losowych w wielu językach, w tym Python, Ruby, R, IDL i PHP, oparty jest na algorytmie Mersenne Twister i nie jest wystarczający do celów kryptograficznych, co wyraźnie stwierdzono w dokumentacji języka. Takie funkcje biblioteczne często mają słabe właściwości statystyczne, a niektóre powtarzają wzorce już po kilkudziesięciu tysiącach prób. Są one często inicjowane za pomocą zegara czasu rzeczywistego komputera jako materiału siewnego, ponieważ taki zegar jest 64-bitowy i mierzy w nanosekundach, daleko poza precyzją człowieka. Funkcje te mogą zapewnić wystarczającą losowość dla niektórych zadań (np. gier wideo), ale są nieodpowiednie, gdy wymagana jest losowość wysokiej jakości, np. w aplikacjach kryptograficznych lub statystycznych.
Generatory liczb losowych wyższej jakości są dostępne w większości systemów operacyjnych; na przykład /dev/random w różnych pochodnych BSD, Linux, Mac OS X, IRIX i Solaris lub CryptGenRandom dla Microsoft Windows. Większość języków programowania, w tym te wymienione powyżej, zapewnia dostęp do tych źródeł wyższego poziomu.
Generowane przez ludzi
Generowanie liczb losowych może być również wykonywane przez ludzi poprzez zbieranie różnych danych wejściowych od użytkowników końcowych i wykorzystywanie ich jako źródła losowości. Jednak większość badań wykazuje, że ludzie wykazują pewien stopień nielosowości, gdy próbują wygenerować losową sekwencję np. cyfr lub liter. Mogą przełączać się między wyborami zbyt często w porównaniu do dobrego randomizatora; dlatego podejście to nie jest szeroko stosowane. Z tego samego powodu, dla którego ludzie osiągają słabe wyniki w tym zadaniu, generowanie liczb losowych przez ludzi może być wykorzystywane jako narzędzie do uzyskania wglądu w funkcje mózgu, które nie są dostępne za pomocą innych środków.
Przetwarzanie końcowe i kontrole statystyczne
Nawet w przypadku wiarygodnego źródła liczb losowych (być może z generatora sprzętowego opartego na mechanice kwantowej), uzyskanie całkowicie bezstronnych liczb wymaga ostrożności. Zachowanie tych generatorów często zmienia się wraz z temperaturą, napięciem zasilania, wiekiem urządzenia lub innymi wpływami zewnętrznymi.
Wygenerowane liczby losowe są czasami poddawane testom statystycznym przed ich użyciem, aby upewnić się, że podstawowe źródło nadal działa, a następnie są przetwarzane w celu poprawy ich właściwości statystycznych. Przykładem może być sprzętowy generator liczb losowych TRNG9803, który wykorzystuje pomiar entropii jako test sprzętowy, a następnie przetwarza sekwencję losową za pomocą szyfru strumieniowego rejestru przesunięć. Generalnie trudno jest wykorzystać testy statystyczne do walidacji wygenerowanych liczb losowych. Wang i Nicol zaproponowali technikę testowania statystycznego opartą na odległości, która jest wykorzystywana do identyfikacji słabości wielu generatorów liczb losowych. Li i Wang zaproponowali metodę testowania liczb losowych opartą na laserowych chaotycznych źródłach entropii wykorzystujących właściwości ruchu Browna.
Testy statystyczne są również wykorzystywane w celu zapewnienia pewności, że końcowy wynik generatora liczb losowych po przetworzeniu jest naprawdę bezstronny, przy czym opracowano liczne pakiety testów losowości.
Dalsze rozważania
Dostosowywanie dystrybucji
Rozkłady równomierne
Większość generatorów liczb losowych działa natywnie z liczbami całkowitymi lub pojedynczymi bitami, więc wymagany jest dodatkowy krok w celu uzyskania "kanonicznego" równomiernego rozkładu między 0 a 1. Implementacja nie jest tak trywialna jak podzielenie liczby całkowitej przez jej maksymalną możliwą wartość. W szczególności:
- Liczba całkowita użyta w transformacji musi zapewniać wystarczającą liczbę bitów dla zamierzonej precyzji.
- Sama natura arytmetyki zmiennoprzecinkowej oznacza, że precyzja jest tym większa, im liczba jest bliższa zeru. Ta dodatkowa precyzja nie jest zwykle używana ze względu na samą liczbę wymaganych bitów.
- Błędy zaokrąglenia podczas dzielenia mogą zniekształcić wynik. W najgorszym przypadku można narysować rzekomo wykluczony obszar z liczbami rzeczywistymi, wbrew oczekiwaniom matematyki.
Algorytm głównego nurtu używany przez OpenJDK, Rust i NumPy został opisany w propozycji dla STL języka C++. Nie wykorzystuje on dodatkowej precyzji i cierpi jedynie na zniekształcenia w ostatnim bicie z powodu zaokrąglania do najbliższej liczby parzystej. Inne obawy numeryczne są ważne, jeśli ten "kanoniczny" rozkład jednostajny zostanie przesunięty do innego zakresu. Proponowana metoda dla języka programowania Swift twierdzi, że wszędzie wykorzystuje pełną precyzję.
Równomiernie rozłożone liczby całkowite są często używane w algorytmach takich jak tasowanie Fishera-Yatesa. Ponownie, naiwna implementacja może wprowadzić zniekształcenie modulo do wyniku, więc należy użyć bardziej skomplikowanych algorytmów. Metoda, która prawie nigdy nie wykonuje dzielenia, została opisana przez Daniela Lemire'a w 2018 roku, a obecny stan wiedzy to inspirowany kodowaniem arytmetycznym "optymalny algorytm" Stephena Canona z Apple Inc. w 2021 roku.
Większość RNG od 0 do 1 obejmuje 0, ale wyklucza 1, podczas gdy inne obejmują lub wykluczają oba.
Inne dystrybucje
Biorąc pod uwagę źródło równomiernie rozłożonych liczb losowych, istnieje kilka metod tworzenia nowego źródła losowego, które odpowiada funkcji gęstości prawdopodobieństwa. Jedna z metod, zwana metodą inwersji, polega na całkowaniu do zakresu, który jest większy lub równy liczbie losowej (która powinna być generowana między 0 a 1 dla prawidłowych rozkładów). Druga metoda zwana metodą akceptacji-odrzucenia polega na wybraniu wartości x i y i sprawdzeniu, czy funkcja x jest większa niż wartość y. Jeśli tak jest, wartość x jest akceptowana. W przeciwnym razie wartość x-w