Tilfældig talgenerering - Random number generation

Terninger er et eksempel på en mekanisk hardware tilfældig talgenerator. Når en kubisk matrice rulles, opnås et tilfældigt tal fra 1 til 6.

Tilfældig talgenerering er en proces, ved hvilken der ofte ved hjælp af en tilfældig talgenerator ( RNG ) genereres en række tal eller symboler, der ikke med rimelighed kan forudsiges bedre end tilfældigt tilfældigt. Det betyder, at den særlige udfaldssekvens vil indeholde nogle mønstre, der kan påvises i eftertid, men er uforudsigelige for fremsyn. Ægte tilfældige talgeneratorer kan være hardware tilfældige talgeneratorer (HRNGS), der genererer tilfældige tal, hvor hver generation er en funktion af den aktuelle værdi af et fysisk miljøs attribut, der konstant ændrer sig på en måde, der praktisk talt er umulig at modellere. Dette ville være i modsætning til såkaldte "tilfældige talgenerationer " udført af pseudos tilfældige talgeneratorer (PRNG'er), der genererer tal, der kun ser tilfældige ud, men faktisk er forudbestemte-disse generationer kan gengives ganske enkelt ved at kende tilstanden til PRNG .

Forskellige anvendelser af tilfældighed har ført til udviklingen af ​​flere forskellige metoder til generering af tilfældige data. Nogle af disse har eksisteret siden oldtiden, blandt hvis rækker er velkendte "klassiske" eksempler, herunder terningkastning , møntvending , blanding af spillekort , brug af røllikestængler (til spådom ) i I Ching , samt utallige andre teknikker. På grund af disse teknikkers mekaniske karakter krævede meget arbejde og tid at generere store mængder tilstrækkeligt tilfældige tal (vigtigt i statistik). Således ville resultaterne undertiden blive indsamlet og distribueret som tabeller med tilfældige tal .

Der findes flere beregningsmetoder til pseudotilfældig talgenerering. Alle kommer ikke i mål med sand tilfældighed, selvom de med varierende succes kan opfylde nogle af de statistiske test for tilfældighed, der er beregnet til at måle, hvor uforudsigelige deres resultater er (det vil sige i hvilken grad deres mønstre kan ses). Dette gør dem generelt ubrugelige til applikationer såsom kryptografi . Der findes imidlertid også omhyggeligt designet kryptografisk sikre pseudotilfældige talgeneratorer (CSPRNGS) med særlige funktioner specielt designet til brug i kryptografi.

Praktiske anvendelser og anvendelser

Tilfældige talgeneratorer har applikationer inden for spil , statistisk prøveudtagning , computersimulering , kryptografi , helt randomiseret design og andre områder, hvor det er ønskeligt at producere et uforudsigeligt resultat. Generelt foretrækkes hardware -generatorer generelt i applikationer, der har uforudsigelighed som den overordnede funktion, f.eks. I sikkerhedsprogrammer, frem for pseudotilfældige algoritmer, hvor det er muligt.

Pseudoslidende talgeneratorer er meget nyttige til udvikling af Monte Carlo- metodesimuleringer, da fejlfinding lettes af evnen til at køre den samme sekvens af tilfældige tal igen ved at starte fra det samme tilfældige frø . De bruges også i kryptografi - så længe frøet er hemmeligt. Afsender og modtager kan generere det samme sæt numre automatisk til brug som nøgler.

Generering af pseudotilfældige numre er en vigtig og almindelig opgave i computerprogrammering. Mens kryptografi og visse numeriske algoritmer kræver en meget høj grad af tilsyneladende tilfældighed, kræver mange andre operationer kun en beskeden mængde uforudsigelighed. Nogle enkle eksempler kan være at præsentere en bruger for et "tilfældigt citat af dagen" eller bestemme, hvilken vej en computerstyret modstander kan bevæge sig i et computerspil. Svagere former for tilfældighed bruges i hash -algoritmer og til at skabe amortiserede søge- og sorteringsalgoritmer .

Nogle applikationer, der ved første øjekast synes at være egnede til randomisering, er faktisk ikke helt så enkle. For eksempel må et system, der "tilfældigt" vælger musiknumre til et baggrundsmusiksystem, kun vises tilfældigt og måske endda have måder at styre valg af musik på: et sandt tilfældigt system ville ikke have nogen begrænsning for det samme element, der vises to eller tre gange i træk.

"Sandt" vs. pseudo-tilfældige tal

Der er to hovedmetoder, der bruges til at generere tilfældige tal. Den første metode måler et eller andet fysisk fænomen, der forventes at være tilfældigt og derefter kompenserer for mulige skævheder i måleprocessen. Eksempelkilder omfatter måling af atmosfærisk støj , termisk støj og andre eksterne elektromagnetiske og kvantefænomener. For eksempel repræsenterer kosmisk baggrundsstråling eller radioaktivt henfald målt over korte tidsskalaer kilder til naturlig entropi .

Hastigheden med hvilken entropi kan høstes fra naturlige kilder afhænger af de underliggende fysiske fænomener, der måles. Således siges kilder til naturligt forekommende "sand" entropi at blokere  -de er satsbegrænsede, indtil der er høstet nok entropi til at imødekomme efterspørgslen. På nogle Unix-lignende systemer, herunder de fleste Linux-distributioner , blokerer pseudo-enhedsfilen /dev /random , indtil tilstrækkelig entropi er høstet fra miljøet. På grund af denne blokeringsadfærd kan store bulk læser fra /dev /random , f.eks. At fylde et harddiskdrev med tilfældige bits, ofte være langsomme på systemer, der bruger denne type entropikilde.

Den anden metode bruger beregningsmæssige algoritmer , der kan producere lange sekvenser af tilsyneladende tilfældige resultater, som faktisk helt bestemt af en kortere initial værdi, kendt som et frø værdi eller nøgle . Som et resultat kan hele den tilsyneladende tilfældige sekvens gengives, hvis frøværdien er kendt. Denne type tilfældig talgenerator kaldes ofte en pseudos tilfældig talgenerator . Denne type generator er typisk ikke afhængig af kilder til naturligt forekommende entropi, selvom den periodisk kan frøes af naturlige kilder. Denne generator type er ikke-blokerende, så de er ikke satsbegrænset af en ekstern hændelse, hvilket gør store bulk læsninger en mulighed.

Nogle systemer har en hybrid tilgang, der giver tilfældighed, der er høstet fra naturlige kilder, når de er tilgængelige, og falder tilbage til periodisk gensåede softwarebaserede kryptografisk sikre pseudosluttende talgeneratorer (CSPRNG'er). Tilbagefaldet sker, når den ønskede aflæsningshastighed tilfældighed overstiger den naturlige høstmetode til at følge med efterspørgslen. Denne tilgang undgår den hastighedsbegrænsede blokeringsadfærd for tilfældige talgeneratorer baseret på langsommere og rent miljømæssige metoder.

Selvom en pseudotilfældig talgenerator udelukkende baseret på deterministisk logik aldrig kan betragtes som en "sand" tilfældig talskilde i ordets reneste forstand, er de i praksis generelt tilstrækkelige selv til krævende sikkerhedskritiske applikationer. Faktisk kan omhyggeligt designet og implementerede pseudotilfældige nummergeneratorer certificeres til sikkerhedskritiske kryptografiske formål, som det er tilfældet med røllike-algoritmen og fortuna . Førstnævnte er grundlaget for /dev /tilfældig kilde til entropi på FreeBSD , AIX , OS X , NetBSD og andre. OpenBSD bruger en pseudotilfældig talalgoritme kendt som arc4random .

Generationsmetoder

Fysiske metoder

De tidligste metoder til generering af tilfældige tal, såsom terninger, møntvending og roulettehjul, bruges stadig i dag, hovedsageligt i spil og spil, da de har en tendens til at være for langsomme til de fleste applikationer inden for statistik og kryptografi.

En fysisk tilfældig talgenerator kan være baseret på et i det væsentlige tilfældigt atomært eller subatomært fysisk fænomen, hvis uforudsigelighed kan spores til kvantemekanikkens love . Kilder til entropi omfatter radioaktivt henfald , termisk støj , skudstøj , lavinestøj i Zener-dioder , urdrift , tidspunktet for de faktiske bevægelser af et harddisk- læse-skrivehoved og radiostøj . Men fysiske fænomener og værktøjer, der bruges til at måle dem, har generelt asymmetrier og systematiske forspændinger, der gør deres resultater ikke ensartet tilfældige. En tilfældighedsekstraktor , såsom en kryptografisk hash-funktion , kan bruges til at nærme sig en ensartet fordeling af bits fra en ikke-ensartet tilfældig kilde, dog med en lavere bithastighed.

Udseendet af bredbånds fotoniske entropikilder, såsom optisk kaos og forstærket spontan emissionsstøj , hjælper i høj grad med udviklingen af ​​den fysiske tilfældige talgenerator. Blandt dem har optisk kaos et stort potentiale til fysisk at producere tilfældige tal med høj hastighed på grund af dets høje båndbredde og store amplitude. En prototype af en højhastigheds, real-time fysisk random bit-generator baseret på en kaotisk laser blev bygget i 2013.

Der er udtænkt forskellige fantasifulde måder at indsamle denne entropiske information på. En teknik er at køre en hash -funktion mod en ramme af en videostream fra en uforudsigelig kilde. Lavarand brugte denne teknik med billeder af en række lavalamper . HotBits måler radioaktivt henfald med Geiger – Muller -rør , mens Random.org bruger variationer i amplituden af ​​atmosfærisk støj, der er optaget med en normal radio.

Demonstration af en simpel tilfældig talgenerator baseret på hvor og hvornår der klikkes på en knap

En anden almindelig entropikilde er adfærden hos menneskelige brugere af systemet. Selvom folk ikke betragtes som gode tilfældighedsgeneratorer efter anmodning, genererer de tilfældig adfærd ganske godt i forbindelse med at spille blandede strategispil . Noget sikkerhedsrelateret computersoftware kræver, at brugeren foretager en lang række musebevægelser eller tastaturindgange for at skabe tilstrækkelig entropi, der er nødvendig for at generere tilfældige nøgler eller for at initialisere pseudotilfældige talgeneratorer.

Beregningsmetoder

De fleste computergenererede tilfældige tal bruger PRNG'er, som er algoritmer, der automatisk kan oprette lange numre med gode tilfældige egenskaber, men til sidst gentages sekvensen (eller hukommelsesforbruget vokser uden grænser). Disse tilfældige tal er fine i mange situationer, men er ikke så tilfældige som tal genereret fra elektromagnetisk atmosfærisk støj, der bruges som en kilde til entropi. Serien af ​​værdier, der genereres af sådanne algoritmer, bestemmes generelt af et fast tal kaldet et frø. En af de mest almindelige PRNG er den lineære kongruentialgenerator , der bruger recidiv

at generere tal, hvor a , b og m er store heltal, og er det næste i X som en række pseudotilfældige tal. Det maksimale antal tal, formlen kan producere, er et mindre end modulet , m -1. Tilbagevendelsesrelationen kan udvides til matricer for at have meget længere perioder og bedre statistiske egenskaber. For at undgå visse ikke-tilfældige egenskaber ved en enkelt lineær kongruentialgenerator kan flere sådanne tilfældige talgeneratorer med lidt forskellige værdier af multiplikatorkoefficienten, a , bruges parallelt med en "master" tilfældig talgenerator, der vælger blandt de flere forskellige generatorer.

En simpel pen-og-papir-metode til generering af tilfældige tal er den såkaldte midterste kvadratmetode foreslået af John von Neumann . Selvom den er enkel at implementere, er dens output af dårlig kvalitet. Den har en meget kort periode og alvorlige svagheder, såsom at output -sekvensen næsten altid konvergerer til nul. En ny innovation er at kombinere den midterste firkant med en Weyl -sekvens . Denne metode producerer output af høj kvalitet gennem en lang periode.

De fleste computerprogrammeringssprog inkluderer funktioner eller biblioteksrutiner, der giver tilfældige talgeneratorer. De er ofte designet til at give en tilfældig byte eller ord, eller et decimaltal antal ensartet fordelt mellem 0 og 1.

Kvaliteten, dvs. tilfældigheden af ​​sådanne biblioteksfunktioner, varierer meget fra fuldstændig forudsigelig output til kryptografisk sikker. Standardgeneratoren for tilfældige tal på mange sprog, herunder Python, Ruby, R, IDL og PHP, er baseret på Mersenne Twister -algoritmen og er ikke tilstrækkelig til kryptografiske formål, som det udtrykkeligt fremgår af sprogdokumentationen. Sådanne biblioteksfunktioner har ofte dårlige statistiske egenskaber, og nogle vil gentage mønstre efter kun titusinder af forsøg. De initialiseres ofte ved hjælp af en computers realtidsur som frøet, da et sådant ur generelt måler i millisekunder, langt ud over personens præcision . Disse funktioner kan give tilstrækkelig tilfældighed til visse opgaver (f.eks. Videospil), men er uegnede, hvor tilfældighed af høj kvalitet er påkrævet, f.eks. I kryptografiprogrammer, statistik eller numerisk analyse.

Tilfældige talkilder af meget højere kvalitet er tilgængelige på de fleste operativsystemer; for eksempel /dev /random på forskellige BSD -varianter, Linux, Mac OS X, IRIX og Solaris eller CryptGenRandom til Microsoft Windows. De fleste programmeringssprog, herunder dem, der er nævnt ovenfor, giver et middel til at få adgang til disse kilder af højere kvalitet.

Af mennesker

Tilfældig talgenerering kan også udføres af mennesker i form af at indsamle forskellige input fra slutbrugere og bruge dem som en randomiseringskilde. De fleste undersøgelser viser imidlertid, at mennesker har en vis grad af ikke-tilfældighed, når de forsøger at producere en tilfældig sekvens af f.eks. Cifre eller bogstaver. De kan skifte for meget mellem valg i forhold til en god tilfældig generator; denne fremgangsmåde er derfor ikke udbredt.

Efterbehandling og statistisk kontrol

Selv givet en kilde til sandsynlige tilfældige tal (måske fra en kvantemekanisk baseret hardware generator), er det vigtigt at opnå tal, der er helt upartiske. Desuden ændres disse generatorers adfærd ofte med temperatur, strømforsyningsspænding, enhedens alder eller anden ekstern interferens. Og en softwarebug i en pseudotilfældig nummerrutine eller en hardwarebug i den hardware, den kører på, kan på samme måde være svær at opdage.

Genererede tilfældige tal udsættes undertiden for statistiske test før brug for at sikre, at den underliggende kilde stadig fungerer, og derefter efterbehandles for at forbedre deres statistiske egenskaber. Et eksempel ville være TRNG9803 hardware tilfældigtalsgeneratoren, der bruger en entropimåling som en hardwaretest og derefter efterbehandler den tilfældige sekvens med en skiftregistrestrømkoder. Det er generelt svært at bruge statistiske tests til at validere de genererede tilfældige tal. Wang og Nicol foreslog en afstandsbaseret statistisk testteknik, der bruges til at identificere svaghederne ved flere tilfældige generatorer. Li og Wang foreslog en metode til test af tilfældige tal baseret på laser kaotiske entropikilder ved hjælp af brune bevægelsesegenskaber.

Andre overvejelser

Omformning af distributionen

Ensartede fordelinger

De fleste tilfældige talgeneratorer arbejder indbygget med heltal eller individuelle bits, så et ekstra trin er påkrævet for at nå frem til den "kanoniske" ensartede fordeling mellem 0 og 1. Implementeringen er ikke så triviel som at dividere heltalet med dets maksimale mulige værdi. Specifikt:

  1. Heltallet, der bruges i transformationen, skal levere nok bits til den påtænkte præcision.
  2. Selve floating-point matematik betyder, at der findes mere præcision, jo tættere tallet er på nul. Denne ekstra præcision bruges normalt ikke på grund af det store antal bits, der kræves.
  3. Afrundingsfejl i division kan påvirke resultatet. I værste fald kan en angiveligt udelukket grænse trækkes i modsætning til forventninger baseret på matematik i reelt tal.

Mainstream -algoritmen, der bruges af OpenJDK, Rust og Numpy, er beskrevet i et forslag til C ++ 's STL. Den bruger ikke den ekstra præcision og lider kun af bias i den sidste bit på grund af rund-til-lige. Andre numeriske bekymringer er berettigede, når denne "kanoniske" ensartede fordeling flyttes til et andet område. En foreslået metode til programmeringssproget Swift hævder at bruge fuld præcision overalt.

Ensartet fordelte heltal bruges almindeligvis i algoritmer såsom Fisher-Yates shuffle . Igen kan en naiv implementering forårsage en modulo bias i resultatet, så der skal bruges mere involverede algoritmer. En metode, der næsten aldrig udfører division, blev beskrevet i 2018 af Daniel Lemire, hvor den nuværende state-of-the-art er den aritmetisk kodningsinspirerede 2021 "optimale algoritme" af Stephen Canon fra Apple Inc.

De fleste 0 til 1 RNG'er inkluderer 0, men ekskluderer 1, mens andre inkluderer eller ekskluderer begge.

Andre distributioner

Givet en kilde til ensartede tilfældige tal, er der et par metoder til at oprette en ny tilfældig kilde, der svarer til en sandsynlighedstæthedsfunktion . En metode, kaldet inversionsmetoden , indebærer at integrere op til et område større end eller lig med det tilfældige tal (som skal genereres mellem 0 og 1 for korrekte fordelinger). En anden metode, kaldet accept-afvisningsmetoden , indebærer at vælge en x- og y-værdi og teste, om funktionen af ​​x er større end y-værdien. Hvis det er, accepteres x -værdien. Ellers afvises x -værdien, og algoritmen forsøger igen.

Som et eksempel på afvisningsprøveudtagning, for at generere et par statistisk uafhængige standardfordelte tilfældige tal ( x , y ), kan man først generere de polære koordinater ( r , θ ), hvor r 2 ~ χ 2 2 og θ ~ UNIFORM ( 0,2π) (se boks – Muller -transformation ).

Blegning

Outputene fra flere uafhængige RNG'er kan kombineres (f.eks. Ved hjælp af en bitvis XOR- operation) for at give en kombineret RNG mindst lige så god som den bedste RNG, der bruges. Dette kaldes software whitening .

Beregnings- og hardware tilfældige talgeneratorer kombineres undertiden for at afspejle fordelene ved begge slags. Computational random number generatorer kan typisk generere pseudotilfældige tal meget hurtigere end fysiske generatorer, mens fysiske generatorer kan generere "sand tilfældighed".

Lav-uoverensstemmelse sekvenser som et alternativ

Nogle beregninger, der gør brug af en tilfældig talgenerator, kan opsummeres som beregning af en samlet eller gennemsnitlig værdi, såsom beregning af integraler ved Monte Carlo -metoden . For sådanne problemer, kan det være muligt at finde en mere nøjagtig løsning ved anvendelse af såkaldte lav-afvigelse sekvenser , også kaldet quasirandom numre. Sådanne sekvenser har et bestemt mønster, der udfylder huller jævnt, kvalitativt set; en virkelig tilfældig sekvens kan og plejer at efterlade større huller.

Aktiviteter og demonstrationer

Følgende websteder stiller stikprøver til rådighed til rådighed:

  • De SOCR ressource sider indeholder en række hands-on interaktive aktiviteter og demonstrationer af tilfældige tal generation ved hjælp af Java applets.
  • Quantum Optics Group på ANU genererer tilfældige tal, der stammer fra kvantevakuum. Prøve på tilfældige tal er tilgængelige på deres forskningsside for quantum random number generator.
  • Random.org stiller tilfældige tal til rådighed, der stammer fra tilfældigheden af ​​atmosfærisk støj.
  • Quantum Random Bit Generator Service ved Ruđer Bošković Institute høster tilfældighed fra kvanteprocessen med fotonisk emission i halvledere. De leverer en række forskellige måder at hente dataene på, herunder biblioteker til flere programmeringssprog.
  • Gruppen på Taiyuan University of Technology genererer tilfældige tal fra en kaotisk laser. Prøver af tilfældige tal er tilgængelige på deres Physical Random Number Generator Service.

Bagdøre

Da meget kryptografi afhænger af en kryptografisk sikker tilfældig talgenerator til nøgle- og kryptografisk nonce -generation, hvis en tilfældig talgenerator kan gøres forudsigelig, kan den bruges som bagdør af en angriber til at bryde krypteringen.

Det oplyses, at NSA har indsat en bagdør i NIST -certificeret kryptografisk sikker pseudotilfældig talgenerator Dual EC DRBG . Hvis der f.eks. Oprettes en SSL -forbindelse ved hjælp af denne tilfældige talgenerator, ville det ifølge Matthew Green give NSA mulighed for at bestemme tilstanden for tilfældig talgeneratoren og derved i sidste ende kunne læse alle data, der sendes over SSL -forbindelsen. Selvom det var tydeligt, at Dual_EC_DRBG var en meget dårlig og muligvis bagdør pseudorandom nummergenerator længe før NSA -bagdøren blev bekræftet i 2013, havde den oplevet betydelig brug i praksis frem til 2013, f.eks. Af det fremtrædende sikkerhedsfirma RSA Security . Der har efterfølgende været beskyldninger om, at RSA Security bevidst indsatte en NSA -bagdør i sine produkter, muligvis som en del af Bullrun -programmet . RSA har nægtet bevidst at indsætte en bagdør i sine produkter.

Det er også blevet teoretiseret, at hardware -RNG'er i hemmelighed kunne modificeres til at have mindre entropi end angivet, hvilket ville gøre kryptering ved hjælp af hardware -RNG -modtagelige for angreb. En sådan metode, der er blevet offentliggjort, virker ved at ændre chipens dopemaske, hvilket ikke ville kunne detekteres ved optisk reverse-engineering. For eksempel for tilfældig talgenerering i Linux ses det som uacceptabelt at bruge Intels RDRAND -hardware RNG uden at blande RDRAND -output med andre entropikilder for at modvirke eventuelle bagdøre i hardware -RNG, især efter afsløringen af ​​NSA Bullrun -programmet .

I 2010 blev en amerikansk lotteri udloddet af informationssikkerhedsdirektøren for Multi-State Lottery Association (MUSL), der under hemmelighed installerede malware på bagdøren på MUSLs sikre RNG-computer under rutinemæssig vedligeholdelse. Under hackerne vandt manden et samlet beløb på $ 16.500.000 ved at forudsige tallene korrekt et par gange om året.

Adresserummelayout randomisering (ASLR), en afbødning mod rowhammer og relaterede angreb på den fysiske hardware i hukommelseschips har vist sig at være utilstrækkelige fra begyndelsen af ​​2017 af VUSec. Tilfældig talalgoritmen, hvis den er baseret på et skiftregister, der er implementeret i hardware, er forudsigelig ved tilstrækkeligt store værdier af p og kan ombygges med tilstrækkelig behandlingskraft ( Brute Force Hack ). Dette betyder også indirekte, at malware, der bruger denne metode, kan køre på både GPU'er og CPU'er, hvis den er kodet til at gøre det, selv ved at bruge GPU til at bryde ASLR på selve CPU'en.

Se også

Referencer

Yderligere læsning

eksterne links