Hvordan genererer man tilfældighed?
Spørg Scientariet
Nu kan du også udfordre dine venner med ekspert-spørgsmål fra Scientariet i Ingeniørens Facebook-quiz "Så ka' du lære det!".
Klik for at deltage i quizzen og test dine venner.
Læs mere om
Dokumentation
Nicolai Slaatto, der er klassisk slagtøjsspiller og som nu studerer ved konservatoriet i Amsterdam, har et spørgsmål til Scientariet om genereringen af tilfældigheder:
"Hvordan genereres tilfældighed? Jeg har tit undret mig over, om det i virkeligheden er muligt at generere tilfældige tal, eller om der blot er tale om, at man laver et tal, som man umiddelbart ikke kan kontrollere og derfor ikke kan forudsige.
Det lyder måske, som om det kan komme ud på ét. Noget man ikke kan kontrollere er jo i dagligdagen "tilfældigt". Men ikke desto mindre kan alt jo tilbageforklares, hvis blot man er dygtig nok. Hvor lykkehjulet standser, afhænger jo bare af den kraft, der satte det i bevægelse.
Så vidt jeg ved, vil alle normale funktioner med samme input give tilsvarende ens output. Men dette er jo ikke tilfældet, når jeg trykker på lommeregnerens tilfældighedsgenerator, "rand". Hvad er det, der gør denne funktion i stand til at finde et nyt svar til mig hver gang? Hvor får den sin ''inspiration'' fra?
Jeg har overvejet om det kan være et indre ur, en clockfrekvens eller måling af batterispænding etc., der bruges som kim til det tilfældige tal. Men selv hvis det er tilfældet, hvordan sikres en jævn spredning i de 'tilfældige' tal?"
Poul-Henning Kamp, FreeBSD kerne-koder og blogger på ing.dk, svarer:
"Det er rigtigt, at der er forskel på tilfældige tal og uforudsigelige tal men i praksis er det stort set et fedt.
Hvis man skal have rigtige tilfældige tal, anvender man et kvantemekanisk fænomen, f.eks. radioaktivt henfald. Men som Henning Isaksson fandt ud af, da han byggede en generator for tilfældige tal til DASK:
http://phk.freebsd.dk/misc/DASK_rng.pdf, skal der en realistisk kraftig strålingskilde til for, at man skal bruge tre henfald for hvert tilfældig bit, der skal produceres.
Til praktisk brug nøjes man med uforudsigelige tal, eller 'pseudotilfældige tal', (Pseudo Random Numbers = PRN), som produceres ved at køre den forhåndværende entropi, (entropi er er et udtryk for den samlede uorden eller tilfældighed i et system jo højere entropi, jo mere tilfældigt er det) igennem kryptografiske whitener-funktioner, som får blander tallene yderligere.
Den entropi, man taler om her, er ikke termodynamisk, men informationsteoretisk. Det er typisk oplysninger om tidspunkter, hvor hændelser sker i computeren, netværkspakker der modtages, diske der svarer, taster der nedtrykkes, mus der flyttes osv.
Ved at samle alle alle tilgængelige kilder til entropi, opnår man en god sikkerhed for, at en angriber ikke kan kende 'hele tilstanden' for den efterfølgende whitening af entropien. For yderligere at sikre sig imod en angriber, der i et øjeblik kan opdage hele entropien, lader man en del af den kryptografiske rutines output blive en del af entropi-samlingen, for at opnå en kaskade-effekt.
Nyere CPU-chips indeholder i visse tilfælde en decideret entropi-generator, typisk baseret på termisk støj i en diodeovergang, men de kan og bør ikke uden videre bruges som tilfældige tal, uden at være kørt igennem en whitener-funktion. Whitener-funktionen er vigtig af flere årsager, for det første skal de forskellige kilders entropi blandes grundigt, men for det andet har ingen af dem de rigtige matematiske egenskaber.
Når vi siger "tilfældig", forventer vi nemlig at se plat komme op i gennemsnit halvdelen af kastene med en mønt og seksere i gennemsnit 1/6, hvis vi bruger en terning. Der er mange flere matematiske tests for om en PRNG (pseudo-random number generator) opfører sig tilfældigt, statistisk set. F.eks kan man kigge på hvor mange gange der kommer et givet antal 1-bits lige efter hinanden osv. NIST har samlet en masse af disse tests, du kan læse mere om dem på:
http://csrc.nist.gov/groups/ST/toolkit/rng/documentation_software.html
De to mest kendte PRNG-implementeringer er Yarrow og Fortuna, begge fra Bruce Schneiers hånd.
Der findes en klasse af matematiske funktioner, f.eks Lineare Kongrurente Rækker, der giver en forudsigelig række af tal, der opfylder de statistiske krav til tilfældighed. Det lyder umiddelbart lidt tåbeligt og ubrugeligt, men er utroligt praktisk i computersammenhæng: hvis programmet fejler på et givent input, kan man køre testen igen og se om fejlen er rettet. Med 'rigtige' tilfældige tal er det ikke sikkert, at fejlen overhovedet provokeres igen.
Sådanne forudsigelige tilfældige tal bør aldrig bruges til noget seriøst formål, såsom kryptografiske formål eller monte-carlo simuleringer, men alene bruges til test af computerprogrammer. Eller som John Von Neumann udtrykte det: Anyone who considers arithmetical methods of producing random digits is, of course, in a state of sin."
Funktionelle polymerer vil ændre medicin og industri
Er mørkt stof en negativ tyngdekraft?





