Hur man skapar en slumpmässig generator
On februari 10, 2021 by adminHur kunde en slumpgenerator implementeras?
Jag talar inte om anropet av ett språk mathRandom () -metoden, men implementeringen av rutinerna som leder till att generera siffror är helt slumpmässiga.
Kommentarer
- I ’ jag vågar säga att sann slumpmässighet för närvarande inte är möjlig.
- @Dynamic Jag tror att samma tänker, men jag har alltid anropade slumpmässig funktion när det behövs, men jag har inte ’ t idé om hur en slumpmässig metod ska implementeras.
- ” helt slumpmässigt ” är ett mycket djupt kaninhål.
- @Dynamic: Det är faktiskt trivialt att få en sekvens som inte kan urskiljas från riktigt slumpmässiga data, så länge du titta på omvärlden med hårdvarustöd. Atomisk och subatomär fysik, (Atomförfall, fotonhändande sensortypshändelser) är (i f nuvarande vetenskapsteori) verkligen slumpmässigt och lätt att mäta. Termodynamik i stor skala är så kaotisk att vi kan betrakta det som slumpmässigt när vi inspekterar på makrosystemet på mikroskalan etc. Buller från en digitalkamerasensor är ett bra exempel …..
Svar
Nyckeln för ett verkligt slumpmässigt tal är slumpmässig datakälla. Ibland är detta information som förseningar i tangentbordshändelser eller nätverkshändelser. Där slumpmässiga data av hög kvalitet önskas kan det vara radioaktivt förfall . SGI implementerade lavarand som drog sitt utsäde för en slumpgenerator från en digitaliserad bild av en lavalampa. Detta var tillräckligt för att betraktas som en slumptalsgenerator.
Utanför riktigt slumpmässiga data kan man arbeta med ett deterministiskt men kaotiskt system. Till exempel mersenne twister . I dessa situationer fröer man generatorn med ett nummer och kör sedan det framåt för att få pseudoslumpmässiga nummer. Dessa är tillräckliga för spel och liknande där det inte är kritiskt om någon kan bestämma utsäde (och nästa nummer i sekvensen).
Överväg att läsa patent 5.732.138 och http://www.lavarnd.org/ för implementeringsinformation om hur man gör ett nummer.
Kommentarer
- +1 Jag skulle överväga olika datakällor som vädermätningar för ditt utsäde. wiki.cdyne .com /? title = CDYNE_Weather
- @ emeraldcode.com utmaningen med vädermätningar är att de inte är helt slumpmässiga. Det finns ett helt fält om att förutsäga vädret. Temperaturen tenderar att gå upp då ner under loppet av en dag. Vintern är kallare än sommaren. Hotbits-systemet använder slumpmässigheten för att planera två förfallshändelser som är oförutsägbara (mäta tid från händelse 1 till händelse 2 och tiden från händelse 3 till händelse 4 – om 1 : 2 == 3: 4, kasta ut data. Om 1: 2 3: 4 är den slumpmässiga biten 0. Om 1: 2 > 3: 4 är den slumpmässiga biten 1.
- Jag ’ jag pratar om vindhastighet, barometertryck, temperatur, luftfuktighet etc. Du kan ta ett mätprov och ha svårt att argumentera mot slumpmässighet i det avseendet. Dessutom är temperaturen ensam med tillräcklig noggrannhet mycket slumpmässig.
Svar
Vilken typ av slumpmässig pratar du om?
Det finns två huvudegenskaper som definierar slumpmässigt i matematisk mening: den första är oförutsägbarhet och den andra är enhetlig fördelning .
Om du pratar om det första är det i allmänhet nästan omöjligt att generera det helt i programvara (och att göra det ordentligt). Det finns några sätt, såsom att samla entropi från mänskliga gränssnittsenheter, t.ex. /dev/random
i Linux, men vi genererar en relativt låg nivå av entropi för att vara användbar. Andra har redan pekat på några hårdvaruimplementeringar. De har alla rötter djupt inom fysikteorin (som vår tro på att det exakta ögonblicket som en foton kommer att träffa en detektor verkligen är slumpmässig). Det finns några programvarealgoritmer för detta, som Blum-Blum-Shub . Generellt skriv inte en PRNG om du behöver oförutsägbarhet, utan snarare använd en etablerad . Detta gäller särskilt krypto.
Den andra viktiga egenskapen hos slumpmässiga funktioner är faktiskt ganska lätt att tillgodose. Det finns många exempel av detta, som RNG bakom RC4 , Linjära Feedback Shift-register (detta användes faktiskt för krypto också, en gång i tiden, men hittades otillräckligt säker), etc.Även C-standardbiblioteket rand()
kommer antagligen att fungera bra för detta ändamål.
Det viktigaste: Se till att du vet vilken av de två egenskaperna som är grundläggande för ditt behov. Oförutsägbart PRNG är också jämnt fördelade, men tvärtom är inte sant. Dessutom, om du exponerar slumpmässigheten i en ”motor” av något slag (som en spelmotor), se till att människor inte kan spela systemet, för du kan bli förvånad över hur enkelt det faktiskt är. Till exempel använde CSS (DVD-krypteringsalgoritmen) två LSFR för kryptografiska ändamål och bröts ganska enkelt.
Svar
Först , du kan inte generera riktigt slumpmässiga nummer i programvaran. Det finns massor av olika algoritmer som låter dig generera pseudoslumpmässiga nummer. Beroende på varför du behöver pseudoslumpmässiga nummer (dvs. om du använder dem i kryptografi är kraven mycket annorlunda), skulle du vanligtvis använda något som slumptalsgeneratorn i GNU vetenskapliga bibliotek (som du naturligtvis kan implementera på vilket språk du föredrar).
Svar
Hårdvara. Du måste ansluta till hårdvara som kan samla entropi från … var som helst. Läs det statiska från en radio, placera en webbkamera på en lavalamp, eller låt användartypen plocka eller spela med musen. Utan någon kontakt med den verkliga världen är det omöjligt att skapa sann slumpmässighet. Det är ett viktigt område o f studera, och mycket arbete har lagts ner i det. Jag tvivlar på att du kommer att sprida några nya spår, så du borde verkligen stå på jättarnas axlar och börja läsa wikipedia-poster.
”Genereringen av slumpmässiga siffror är för viktig för att överlåtas till chans. ”
-Robert R. Coveyou
EDIT
Så jag har fick reda på att hårdvaran du vill ha är bara ett CMOS-chip . Sorten i billiga kameror. Håll det bara i mörker, sätt upp känsligheten uppåt och uppenbarligen har de små avvikelser som det observerar rötter i kvantmekanik, det är där vi får vår entropi i verkliga livet.
Svar
Förra gången jag tittade, vilket var LOOOOONG sedan, den kanoniska referensen om implementering av pseudorandom nummergeneratorer (PRNG ) är Knuth, Vol. 2, ”Seminumerical Algorithms” .
Tänk inte ens på att försöka implementera din egen PRNG tills du åtminstone har tittat igenom Knuth.
Lämna ett svar