Datamaskiner genererer tilfeldig tall for alt fra kryptografi til videospill og gambling. Det er to kategorier av tilfeldige tall - “sanne” tilfeldige tall og pseudorandomnumre - og forskjellen er viktig for sikkerheten til krypteringssystemer.
Datamaskiner kan generere helt tilfeldige tall ved å observere noen eksterne data, som musebevegelser eller viftestøy, som ikke er forutsigbar, og lage data fra den. Dette er kjent som entropi. Andre ganger genererer de "pseudorandom" tall ved å bruke en algoritme slik at resultatene virker tilfeldige, selv om de ikke er det.
Dette emnet har blitt mer kontroversielt den siste tiden, med mange som stiller spørsmålstegn ved om Intels innebygde chip for generatorer av tilfeldige tallgeneratorer er pålitelig. For å forstå hvorfor det kanskje ikke er pålitelig, må du forstå hvordan tilfeldige tall genereres i utgangspunktet, og hva de brukes til.
Hva tilfeldige tall brukes til
Tilfeldige tall har blitt brukt i mange tusen år. Enten det er å vende en mynt eller kaste terninger, er målet å la sluttresultatet være tilfeldig. Tilfeldige tallgeneratorer i en datamaskin er like - de er et forsøk på å oppnå et uforutsigbart, tilfeldig resultat.
I SLEKT: Hva er kryptering, og hvordan fungerer det?
Tilfeldige tallgeneratorer er nyttige for mange forskjellige formål. Bortsett fra åpenbare applikasjoner som å generere tilfeldige tall for pengespill eller skape uforutsigbare resultater i et dataspill, er tilfeldighet viktig for kryptografi.
Kryptografi krever tall som angripere ikke kan gjette. Vi kan ikke bare bruke de samme tallene om og om igjen. Vi ønsker å generere disse tallene på en veldig uforutsigbar måte, slik at angripere ikke kan gjette dem. Disse tilfeldige tallene er avgjørende for sikker kryptering, enten du krypterer dine egne filer eller bare bruker en HTTPS nettsted på Internett.
Ekte tilfeldige tall
Du lurer kanskje på hvordan en datamaskin faktisk kan generere et tilfeldig tall. Hvor kommer denne "tilfeldigheten" fra. Hvis det bare er et stykke datakode, er det ikke mulig at tallene datamaskinen genererer kan være forutsigbare?
Vi grupperer vanligvis tilfeldige tall datamaskiner genererer i to typer, avhengig av hvordan de genereres: "Ekte" tilfeldige tall og pseudo-tilfeldige tall.
For å generere et “sant” tilfeldig tall, måler datamaskinen en slags fysisk fenomen som foregår utenfor datamaskinen. For eksempel kan datamaskinen måle det radioaktive forfallet til et atom. I følge kvanteteorien er det ingen måte å vite sikkert når radioaktivt forfall vil forekomme, så dette er egentlig "ren tilfeldighet" fra universet. En angriper kunne ikke forutsi når radioaktivt forfall ville oppstå, så de ville ikke vite den tilfeldige verdien.
For et mer dagligdags eksempel kan datamaskinen stole på atmosfærisk støy eller bare bruke den nøyaktige tiden du trykker på tastene på tastaturet som en kilde til uforutsigbare data eller entropi. For eksempel kan datamaskinen legge merke til at du trykket på en tast nøyaktig 0,23423523 sekunder etter klokka 14. Ta tak i de spesifikke tidene som er knyttet til disse tastetrykkene, og du vil ha en kilde til entropi du kan bruke til å generere en "sann" tilfeldig Nummer. Du er ikke en forutsigbar maskin, så en angriper kan ikke gjette det nøyaktige øyeblikket når du trykker på disse tastene. De / dev / tilfeldig enhet på Linux , som genererer tilfeldige tall, "blokkerer" og ikke returnerer et resultat før den samler nok entropi til å returnere et virkelig tilfeldig tall.
Pseudorandom Numbers
Pseudorandom tall er et alternativ til "sanne" tilfeldige tall. En datamaskin kan bruke en såverdi og en algoritme til å generere tall som ser ut til å være tilfeldige, men som faktisk er forutsigbare. Datamaskinen samler ikke inn noen tilfeldige data fra miljøet.
Dette er ikke nødvendigvis en dårlig ting i alle situasjoner. For eksempel, hvis du spiller et videospill, spiller det ingen rolle om hendelsene som oppstår i spillet er forårsaket av "sanne" tilfeldige tall eller pseudorandom-tall. På den annen side, hvis du bruker kryptering, vil du ikke bruke falske tilfeldigheter som en angriper kan gjette.
La oss for eksempel si at en angriper kjenner algoritmen og frøverdien en pseudorandom tallgenerator bruker. Og la oss si at en krypteringsalgoritme får et pseudorandomnummer fra denne algoritmen og bruker den til å generere en krypteringsnøkkel uten å legge til noen ekstra tilfeldighet. Hvis en angriper vet nok, kan de jobbe bakover og bestemme det pseudorandomnummeret som krypteringsalgoritmen må ha valgt i så fall, og bryte krypteringen.
NSA og Intels Hardware Random Number Generator
For å gjøre ting lettere for utviklere og bidra til å generere sikre tilfeldige tall, inkluderer Intel-brikker en maskinvarebasert tilfeldig tallgenerator kjent som RdRand. Denne brikken bruker en entropikilde på prosessoren og gir tilfeldige tall til programvaren når programvaren ber om det.
Problemet her er at tilfeldig tallgenerator egentlig er en svart boks, og vi vet ikke hva som skjer inne i den. Hvis RdRand inneholdt en NSA-bakdør, ville myndighetene kunne bryte krypteringsnøkler som ble generert med bare data levert av den tilfeldige tallgeneratoren.
Dette er en alvorlig bekymring. I desember 2013 fjernet FreeBSDs utviklere støtte for å bruke RdRand direkte som en kilde til tilfeldighet, og sa at de ikke kunne stole på det. [ Kilde ] Utgangen fra RdRand-enheten blir matet inn i en annen algoritme som legger til ekstra entropi, og sørger for at eventuelle bakdører i tilfeldige tallgenerator ikke har betydning. Linux arbeidet allerede på denne måten, og randomiserte ytterligere tilfeldige data fra RdRand, slik at det ikke ville være forutsigbart selv om det var en bakdør. [ Kilde ] I en nylig AMA (“Ask Me Anything”) på Reddit, svarte ikke Intel-sjef Brian Krzanich på spørsmål om disse bekymringene. [ Kilde ]
Selvfølgelig er dette sannsynligvis ikke bare et problem med Intel-brikker. FreeBSDs utviklere kalte også ut Via-sjetongene ved navn. Denne kontroversen viser hvorfor det er så viktig å generere tilfeldige tall som virkelig er tilfeldige og ikke er forutsigbare.
For å generere "sanne" tilfeldige tall, samler tilfeldige tallgeneratorer "entropi", eller tilsynelatende tilfeldige data fra den fysiske verden rundt dem. For tilfeldige tall som ikke gjør det egentlig må være tilfeldig, kan de bare bruke en algoritme og en frøverdi.
Bildekreditt: rekre89 på Flickr , Lisa Brewster på Flickr , Ryan Somma på Flickr , Huangjiahuion Flickr