Jak vytvořit náhodný generátor
On 10 února, 2021 by adminJak lze implementovat náhodný generátor?
Nemluvím o vyvolání jazyka mathRandom () , ale implementace rutin, které vedou ke generování čísel, je zcela náhodná.
Komentáře
- I ‚ Je dovoleno říci, že pravá náhodnost není v současné době možná.
- @Dynamic Myslím, že totéž si myslím, ale vždy jsem v případě potřeby vyvolat náhodnou funkci, ale nemám ‚ t představu, jak by měla být implementována náhodná metoda.
- “ zcela náhodné “ je velmi hluboká králičí nora.
- @Dynamic: Získat sekvenci nerozeznatelnou od skutečně náhodných dat je skutečně triviální, pokud podívejte se do vnějšího světa s hardwarovou podporou. Atomová a subatomová fyzika (atomový rozpad, události typu fotonů zasahujících senzory) je (v rozsahu f aktuální teorie vědy) skutečně náhodné a snadno měřitelné. Termodynamika ve velkém měřítku je tak chaotická, že ji můžeme považovat za náhodnou, když kontrolujeme makrosystém v mikro měřítku atd. Dobrým příkladem je hluk ze snímače digitálního fotoaparátu …..
Odpověď
Klíčem ke skutečně náhodnému číslu je náhodný zdroj dat. Někdy se jedná o informace, jako jsou zpoždění událostí klávesnice nebo událostí sítě. Pokud jsou požadována vysoce kvalitní náhodná data, může se jednat o radioaktivní rozpad . SGI implementovalo lavarand , který čerpal své semeno pro generátor náhodných čísel z digitalizovaného obrazu lávové lampy. To bylo dostatečné pro to, abychom byli považováni za generátor náhodných čísel.
Kromě skutečně náhodných dat lze pracovat s deterministickým, ale chaotickým systémem. Například mersenne twister . V těchto situacích generátor naočkuje číslo a poté jej spustí dopředu, aby získal pseudonáhodná čísla. To je dostačující pro hry apod., Kde není rozhodující, jestli někdo může určit semeno (a další číslo v pořadí).
Zvažte přečtení patentu 5 732 138 a http://www.lavarnd.org/ podrobnosti implementace, jak vytvořit číslo.
Komentáře
- +1 Zvažoval bych různé zdroje dat, například měření počasí pro vaše semeno. wiki.cdyne .com /? title = CDYNE_Weather
- @ emeraldcode.com problém s měřením počasí spočívá v tom, že nejsou zcela náhodné. Existuje celá řada předpovědí počasí. Teplota má tendenci stoupat a poté dolů v průběhu dne. Zima je chladnější než léto. Systém hotbits využívá náhodnost časování dvou událostí rozpadu, které jsou nepředvídatelné (měřte čas od události 1 do události 2 a čas od události 3 do události 4 – pokud 1 : 2 == 3: 4, vyhodit data. Pokud 1: 2 3: 4, náhodný bit je 0. Pokud 1: 2 > 3: 4, náhodný bit je 1.
- Mluvím ‚ o rychlosti větru, barometrickém tlaku, teplotě, vlhkosti atd. Můžete si vzít vzorek měření a v tomto ohledu se jen těžko bráníte náhodnosti. Samotná teplota měřená s dostatečnou přesností je také velmi náhodná.
Odpověď
O jakém náhodném mluvíte asi?
Existují dvě hlavní vlastnosti, které definují náhodné v matematickém smyslu: první je nepředvídatelnost a druhým je jednotná distribuce .
Pokud mluvíte o první je obecně téměř nemožné generovat to úplně v softwaru (a dělat to správně). Existuje několik způsobů, například shromažďování entropie ze zařízení lidského rozhraní, např. /dev/random
v Linuxu, ale generujeme poměrně nízkou úroveň entropie, aby to bylo užitečné. Jiní již poukázali na některé hardwarové implementace. Všechny mají kořeny hluboko v teorii fyziky (stejně jako naše přesvědčení, že přesný okamžik, kdy foton zasáhne detektor, je skutečně náhodný). K tomu existují některé softwarové algoritmy, například Blum-Blum-Shub . Obecně platí, že nepíšete PRNG, pokud potřebujete nepředvídatelnost, ale použijte zavedený . To platí zejména pro krypto.
Další důležitá vlastnost náhodných funkcí je ve skutečnosti docela snadné splnit. Existuje mnoho příkladů z toho, jako RNG za RC4 , lineárními posuvnými registry (toto bylo skutečně použito pro krypto také jednou, ale bylo zjištěno, že není dostatečně zabezpečený) atd.Dokonce i standardní knihovna C rand()
pro tento účel pravděpodobně bude fungovat dobře.
Nejdůležitější: Ujistěte se, že víte, která ze dvou vlastností je pro vaši potřebu zásadní. Nepředvídatelné PRNG jsou také rovnoměrně rozloženy, ale naopak to není pravda. Také, pokud odhalujete náhodnost uvnitř nějakého „enginu“ (například herního enginu), ujistěte se, že lidé nemohou hrát systém, protože vás možná překvapí, jak snadné to ve skutečnosti je. Například CSS (šifrovací algoritmus DVD) používal pro kryptografické účely 2 LSFR a byl poměrně snadno rozbit.
Odpovědět
Nejprve „V softwaru nelze generovat skutečně náhodná čísla. Existuje spousta různých algoritmů, které vám umožňují generovat pseudonáhodná čísla. Podle toho, proč potřebujete pseudonáhodná čísla (tj. pokud je používáte v kryptografii, jsou požadavky mnohem větší different), obvykle byste použili něco jako generátor náhodných čísel ve vědecké knihovně GNU (kterou samozřejmě můžete implementovat v jakémkoli preferovaném jazyce).
Odpověď
Hardware. Musíte se připojit k hardwaru, který dokáže sebrat entropii z … odkudkoli. Přečtěte si statické údaje z rádio, umístěte webovou kameru na lavalampu nebo nechejte uživatele blábolit nebo si hrát s myší. Bez kontaktu se skutečným světem není generování skutečné náhodnosti možné. Je to důležitá oblast Studium a bylo do toho vloženo hodně práce. Pochybuji, že budete ničit jakékoli nové stezky, takže byste se opravdu měli postavit na ramena obrů a začít číst záznamy na wikipedii.
„Generování náhodných čísel je příliš důležité na to, šance. „
– Robert R. Coveyou
EDIT
Takže já zjistili, že hardware, který chcete, je ve skutečnosti pouze čip CMOS . Třídit v levných kamerách. Stačí ji udržovat ve tmě, nastavit citlivost nahoru a zjevné nepatrné odchylky, které pozoruje, mají kořeny v kvantové mechanice, což je místo, kde odvozujeme svoji entropii ve skutečném životě.
Odpověď
Když jsem se naposledy podíval, což bylo před LOOOOONG, kanonický odkaz na implementaci generátorů pseudonáhodných čísel (PRNG ) je Knuth, sv. 2, „Seminumerical Algorithms“ .
NEMYSLÍTE ani o pokusu implementovat vlastní PRNG, dokud si alespoň neprohlédnete Knutha.
Napsat komentář