Hvordan lage en tilfeldig generator
On februar 10, 2021 by adminHvordan kunne en tilfeldig generator implementeres?
Jeg snakker ikke om påkallelse av et språk mathRandom () -metoden, men implementeringen av rutinene som fører til å generere tall helt tilfeldig.
Kommentarer
- I ‘ Jeg våger å si at ekte tilfeldighet ikke er mulig for øyeblikket.
- @Dynamic Jeg tror det samme tenker, men jeg har alltid påkalt tilfeldig funksjon når det er nødvendig, men jeg har ikke ‘ t idé om hvordan en tilfeldig metode skal implementeres.
- » helt tilfeldig » er et veldig dypt kaninhull.
- @Dynamic: Det er faktisk trivielt å få en sekvens som ikke kan skilles fra virkelig tilfeldige data, så lenge du se til omverdenen med maskinvarestøtte. Atomisk og subatomær fysikk, (Atomisk forfall, foton som treffer sensortypen hendelser) er (til f gjeldende vitenskapsteori) virkelig tilfeldig og enkel å måle. Termodynamikk i stor skala er så kaotisk at vi kan betrakte det som tilfeldig når vi inspiserer på makrosystemet på mikroskalaen osv. Støy fra en digitalkamerasensor er et godt eksempel …..
Svar
Nøkkelen til et virkelig tilfeldig tall er tilfeldig datakilde. Noen ganger er dette informasjon som forsinkelser i tastaturhendelser eller nettverkshendelser. Hvor tilfeldige data av høy kvalitet er ønsket, kan det være radioaktivt forfall . SGI implementerte lavarand som tegnet sitt frø for en tilfeldig tallgenerator fra et digitalisert bilde av en lavalampe. Dette var tilstrekkelig for å bli betraktet som en tilfeldig tallgenerator.
Utenfor virkelig tilfeldige data kan man jobbe med et deterministisk, men kaotisk system. For eksempel mersenne twister . I disse situasjonene frøer man generatoren med et tall og kjører det fremover for å få pseudo-tilfeldige tall. Disse er tilstrekkelig for spill og lignende der det ikke er kritisk hvis noen kan bestemme frøet (og neste nummer i sekvensen).
Vurder å lese patent 5.732.138 og http://www.lavarnd.org/ for implementeringsdetaljer om hvordan du lager et tall.
Kommentarer
- +1 Jeg vil vurdere forskjellige datakilder som værmålinger for frøet ditt. wiki.cdyne .com /? title = CDYNE_Weather
- @ emeraldcode.com utfordringen med værmålinger er at de ikke er helt tilfeldige. Det er et helt felt om å forutsi været. Temperaturen har en tendens til å gå opp da nedover i løpet av en dag. Vinteren er kaldere enn sommeren. Hotbits-systemet bruker tilfeldigheten til å planlegge to forfallshendelser som er uforutsigbare (måle tid fra hendelse 1 til hendelse 2 og tiden fra hendelse 3 til hendelse 4 – hvis 1 : 2 == 3: 4, kast ut dataene. Hvis 1: 2 3: 4, er den tilfeldige biten 0. Hvis 1: 2 > 3: 4, er den tilfeldige biten 1.
- Jeg ‘ snakker om vindhastighet, barometertrykk, temperatur, fuktighet osv. Du kan ta et utvalg av målinger og har vanskelig for å argumentere mot tilfeldighet i den forbindelse. Også temperaturen tatt med tilstrekkelig nøyaktighet er veldig tilfeldig.
Svar
Hva slags tilfeldig snakker du om?
Det er to hovedegenskaper som definerer tilfeldig i matematisk forstand: den første er uforutsigbarhet og det andre er uniform fordeling .
Hvis du snakker om den første er det generelt nesten umulig å generere det helt innen programvare (og å gjøre det riktig). Det er noen måter, for eksempel å samle entropi fra menneskelige grensesnitt enheter, f.eks. /dev/random
i Linux, men vi genererer et ganske lavt nivå av entropi for å være nyttig. Andre har allerede pekt på noen maskinvareimplementeringer. De har alle røtter dypt innenfor fysikkteorien (som vår tro på at det nøyaktige øyeblikket en foton vil treffe en detektor er virkelig tilfeldig). Det er noen programvarealgoritmer for dette, som Blum-Blum-Shub . Generelt ikke skriv en PRNG hvis du trenger uforutsigbarhet, men heller bruk en etablert . Dette gjelder spesielt krypto.
Den andre viktige egenskapen til tilfeldige funksjoner er faktisk ganske lett å tilfredsstille. Det er mange eksempler av dette, som RNG bak RC4 , Lineære tilbakemeldingsskiftregistre (dette ble faktisk brukt for krypto også en gang, men ble funnet utilstrekkelig sikker), etc.Selv det vanlige C-biblioteket rand()
vil sannsynligvis fungere bra for dette formålet.
Viktigst: Sørg for at du vet hvilken av de to egenskapene som er grunnleggende for ditt behov. Uforutsigbar PRNG er også jevnt fordelt, men omvendt er ikke sant. Også, hvis du avslører tilfeldigheten i en «motor» av noe slag (som en spillmotor), må du sørge for at folk ikke kan spille systemet, fordi du kan bli overrasket over hvor enkelt det faktisk er. For eksempel brukte CSS (DVD-krypteringsalgoritmen) to LSFRer for kryptografiske formål og ble ødelagt ganske enkelt.
Svar
Først , kan du ikke generere virkelig tilfeldige tall i programvaren. Det er massevis av forskjellige algoritmer som lar deg generere pseudo-tilfeldige tall. Avhengig av hvorfor du trenger pseudo-tilfeldige tall (dvs. hvis du bruker dem i kryptografi, er kravene mye annerledes), vil du vanligvis bruke noe som tilfeldig tallgenerator i GNU vitenskapelige bibliotek (som du selvfølgelig kan implementere på hvilket språk du foretrekker).
Svar
Maskinvare. Du må koble til maskinvare som kan samle entropi fra … hvor som helst. Les det statiske fra en radio, sett et webkamera på et lavalamp, eller få brukeren til å snakke eller leke med musen. Uten noe kontakt med den virkelige verden er det umulig å generere ekte tilfeldighet. Det er et viktig område o f studere, og det er lagt ned mye arbeid. Jeg tviler på at du kommer til å brenne nye stier, så du burde virkelig stå på skuldrene til gigantene og begynne å lese wikipediaoppføringer.
«Generasjonen av tilfeldige tall er for viktig til å være overlatt til sjanse. «
-Robert R. Coveyou
EDIT
Så jeg har lærte at maskinvaren du ønsker faktisk er bare en CMOS-brikke . Sorten i billige kameraer. Bare hold den i mørke, sett følsomheten oppover, og tilsynelatende har de små avvikene den observerer røtter i kvantemekanikken, det er her vi får vår entropi i det virkelige liv.
Svar
Sist jeg så på, som var LOOOOONG siden, den kanoniske referansen om implementering av pseudorandom nummergeneratorer (PRNG ) er Knuth, Vol. 2, «Seminumerical Algorithms» .
Tenk ikke engang om å prøve å implementere din egen PRNG til du i det minste har sett gjennom Knuth.
Legg igjen en kommentar