Hvordan oprettes en tilfældig generator
On februar 10, 2021 by adminHvordan kunne en tilfældig generator implementeres?
Jeg taler ikke om påkaldelse af et sprog mathRandom () -metoden, men implementeringen af de rutiner, der fører til at generere tal, er helt tilfældige.
Kommentarer
- I ‘ Jeg vover at sige, at sand tilfældighed i øjeblikket ikke er mulig.
- @Dynamic Jeg tror det samme tænker, men jeg har altid påkaldte tilfældig funktion, når det er nødvendigt, men jeg har ikke ‘ ikke idé om, hvordan en tilfældig metode skal implementeres.
- ” helt tilfældigt ” er et meget dybt kaninhul.
- @Dynamic: Det er faktisk trivielt at få en sekvens, der ikke kan skelnes fra virkelig tilfældige data, så længe du se på omverdenen med hardware support. Atomisk og subatomær fysik (Atomisk henfald, foton rammer sensortypen begivenheder) er (i vid udstrækning f nuværende videnskabsteori) virkelig tilfældig og nem at måle. Termodynamik i stor skala er så kaotisk, at vi kan betragte det som tilfældigt, når vi inspicerer på makrosystemet på mikroskalaen osv. Støj fra en digital kamerasensor er et godt eksempel …..
Svar
Nøglen til et virkelig tilfældigt tal er tilfældig datakilde. Nogle gange er dette information såsom forsinkelser i tastaturbegivenheder eller netværksbegivenheder. Hvor tilfældige data af høj kvalitet ønskes, kan det være radioaktivt henfald . SGI implementerede lavarand , som trak sit frø til en tilfældig talgenerator fra et digitaliseret billede af en lavalampe. Dette var tilstrækkeligt til at blive betragtet som en tilfældig talgenerator.
Uden for virkelig tilfældige data kan man arbejde med et deterministisk, men kaotisk system. For eksempel mersenne twister . I disse situationer frøer man generatoren med et tal og kører det derefter fremad for at få pseudo-tilfældige tal. Disse er tilstrækkelige til spil og lignende, hvor det ikke er kritisk, hvis nogen kan bestemme frøet (og det næste nummer i sekvensen).
Overvej at læse patent 5.732.138 og http://www.lavarnd.org/ for implementeringsoplysninger om, hvordan man laver et nummer.
Kommentarer
- +1 Jeg vil overveje forskellige datakilder som vejrmålinger for dit frø. wiki.cdyne .com /? title = CDYNE_Weather
- @ emeraldcode.com udfordringen med vejrmålinger er, at de ikke er helt tilfældige. Der er et helt felt om at forudsige vejret. Temperatur har tendens til at gå op derefter ned i løbet af en dag. Vinteren er koldere end sommeren. Hotbitsystemet bruger tilfældigheden af timing af to henfaldshændelser, som er uforudsigelige (måle tid fra begivenhed 1 til begivenhed 2 og tiden fra begivenhed 3 til begivenhed 4 – hvis 1 : 2 == 3: 4, kast dataene ud. Hvis 1: 2 3: 4, er den tilfældige bit 0. Hvis 1: 2 > 3: 4, er den tilfældige bit 1.
- Jeg ‘ taler om vindhastighed, barometertryk, temperatur, fugtighed osv. Du kan tage en prøve af målinger og har svært ved at argumentere mod tilfældighed i den henseende. Også temperatur alene taget med tilstrækkelig nøjagtighed er meget tilfældig.
Svar
Hvilken slags tilfældig taler du også om?
Der er to hovedegenskaber, som definerer tilfældige i matematisk forstand: den første er uforudsigelighed og det andet er ensartet fordeling .
Hvis du taler om den første er det generelt næsten umuligt at generere det helt inden for software (og at gøre det ordentligt). Der er nogle måder, såsom at samle entropi fra menneskelige interface-enheder, f.eks. /dev/random
i Linux, men vi genererer et ret lavt niveau af entropi for at være nyttigt. Andre har allerede peget på nogle hardwareimplementeringer. De har alle rødder dybt inde i fysiksteorien (som vores tro på, at det præcise øjeblik, en foton vil ramme en detektor, er virkelig tilfældig). Der er nogle softwarealgoritmer til dette, f.eks. Blum-Blum-Shub . Generelt skal ikke skrive en PRNG, hvis du har brug for uforudsigelighed, men snarere brug en etableret . Dette gælder især krypto.
Den anden vigtige egenskab ved tilfældige funktioner er faktisk ret let at tilfredsstille. Der er mange eksempler af dette, ligesom RNG bag RC4 , Lineære Feedback Shift-registre (dette blev faktisk brugt for krypto også engang, men blev fundet utilstrækkelig sikker) osv.Selv standard C-biblioteket rand()
fungerer sandsynligvis fint til dette formål.
Vigtigst: Sørg for, at du ved, hvilken af de to egenskaber, der er grundlæggende for dit behov. Uforudsigelig PRNGer er også ensartet fordelt, men omvendt er det ikke sandt. Også, hvis du udsætter tilfældigheden i en “motor” af en slags (som en spilmotor), skal du sørge for, at folk ikke kan spille systemet, fordi du måske bliver overrasket over, hvor let det faktisk er. F.eks. Brugte CSS (DVD-krypteringsalgoritmen) 2 LSFRer til kryptografiformål og blev brudt ret let.
Svar
Først , kan du ikke generere ægte tilfældige tal i software. Der er masser af forskellige algoritmer, der lader dig generere pseudo-tilfældige tal. Afhængigt af hvorfor du har brug for pseudotilfældige tal (dvs. hvis du bruger dem i kryptografi, er kravene meget anderledes), ville du generelt bruge noget som tilfældig talgenerator i GNU videnskabelige bibliotek (som du selvfølgelig kan implementere på hvilket sprog du foretrækker).
Svar
Hardware. Du skal oprette forbindelse til hardware, der kan samle entropi fra … hvor som helst. Læs det statiske fra en radio, sæt et webkamera på et lavalamp, eller få brugertypen til at pludre eller lege med musen. Uden noget kontakt med den virkelige verden er det umuligt at skabe sand tilfældighed. Det er et vigtigt område o f studere, og der er lagt meget arbejde i det. Jeg tvivler på, at du vil flamme nye stier, så du burde virkelig stå på giganternes skuldre og begynde at læse wikipedia-poster.
“Generationen af tilfældige tal er for vigtig til at blive overladt til chance. “
-Robert R. Coveyou
REDIGER
Så jeg har lærte, at den hardware, du ønsker, faktisk er bare en CMOS-chip . Sorten i billige kameraer. Bare hold det i mørke, indstil følsomheden langt op, og tilsyneladende har de små afvigelser, den observerer, rødder i kvantemekanik, det er her, vi får vores entropi i det virkelige liv.
Svar
Sidste gang jeg kiggede, hvilket var LOOOOONG tid siden, den kanoniske reference om implementering af pseudorandom nummergeneratorer (PRNG ) er Knuth, bind. 2, “Seminumerical Algorithms” .
Tænk ikke engang på at prøve at implementere din egen PRNG, indtil du i det mindste har set igennem Knuth.
Skriv et svar