Datorer genererar slumptal för allt från kryptografi till videospel och spel. Det finns två kategorier av slumptal - ”sanna” slumptal och pseudorandomnummer - och skillnaden är viktig för säkerheten för krypteringssystem.
Datorer kan generera riktigt slumpmässiga siffror genom att observera vissa externa data, som musrörelser eller fläktbrus, vilket inte är förutsägbart, och skapa data från den. Detta kallas entropi. Andra gånger genererar de "pseudorandom" -tal genom att använda en algoritm så att resultaten verkar slumpmässiga, även om de inte är det.
Detta ämne har blivit mer kontroversiellt nyligen, med många som ifrågasätter om Intels inbyggda chip för generatorer av slumptalsnummer är pålitligt. För att förstå varför det kanske inte är pålitligt måste du förstå hur slumpmässiga siffror genereras i första hand och vad de används till.
Vad slumpmässiga nummer används för
Slumpmässiga siffror har använts i många tusen år. Oavsett om det är att vända ett mynt eller rulla en tärning, är målet att lämna slutresultatet till slumpmässig chans. Slumpmässiga talgeneratorer i en dator är lika - de är ett försök att uppnå ett oförutsägbart, slumpmässigt resultat.
RELATERAD: Vad är kryptering och hur fungerar det?
Slumptalsgeneratorer är användbara för många olika ändamål. Bortsett från uppenbara applikationer som att generera slumptal i syfte att spela eller skapa oförutsägbara resultat i ett dataspel, är slumpmässighet viktigt för kryptografi.
Kryptografi kräver siffror som angripare inte kan gissa. Vi kan inte bara använda samma nummer om och om igen. Vi vill generera dessa siffror på ett mycket oförutsägbart sätt så att angripare inte kan gissa dem. Dessa slumpmässiga siffror är viktiga för säker kryptering, oavsett om du krypterar dina egna filer eller bara använder en HTTPS webbplats på Internet.
Äkta slumpmässiga siffror
Du kanske undrar hur en dator faktiskt kan generera ett slumptal. Varifrån kommer denna ”slumpmässighet”. Om det bara är en bit datorkod, är det inte möjligt att siffrorna som datorn genererar kan vara förutsägbara?
Vi grupperar i allmänhet slumpmässiga siffror som datorer genererar i två typer, beroende på hur de genereras: ”Sanna” slumpmässiga nummer och pseudoslumpnummer.
För att generera ett ”sant” slumpmässigt tal mäter datorn någon typ av fysiskt fenomen som äger rum utanför datorn. Till exempel kan datorn mäta en atoms radioaktiva förfall. Enligt kvantteorin finns det inget sätt att veta säkert när radioaktivt sönderfall kommer att inträffa, så detta är i grunden "ren slumpmässighet" från universum. En angripare skulle inte kunna förutsäga när radioaktivt förfall skulle inträffa, så de skulle inte veta det slumpmässiga värdet.
För ett mer dagligt exempel kan datorn förlita sig på atmosfärsljud eller helt enkelt använda den exakta tiden du trycker på tangenterna på tangentbordet som en källa till oförutsägbar data eller entropi. Till exempel kanske din dator märker att du har tryckt på en tangent exakt 0,23423523 sekunder efter 14:00. Ta tillräckligt med de specifika tiderna som är associerade med dessa tangenttryckningar och du kommer att få en entropikälla som du kan använda för att skapa ett “sant” slumpmässigt siffra. Du är inte en förutsägbar maskin, så en angripare kan inte gissa det exakta ögonblicket när du trycker på dessa tangenter. De / dev / slumpmässig enhet på Linux , som genererar slumpmässiga nummer, "blockerar" och inte returnerar ett resultat förrän den samlar tillräckligt med entropi för att returnera ett riktigt slumpmässigt nummer.
Pseudorandom Numbers
Pseudorandom-nummer är ett alternativ till "sanna" slumpmässiga tal. En dator kan använda ett frövärde och en algoritm för att generera nummer som verkar vara slumpmässiga, men som faktiskt är förutsägbara. Datorn samlar inte in slumpmässiga data från miljön.
Detta är inte nödvändigtvis en dålig sak i alla situationer. Om du till exempel spelar ett videospel spelar det ingen roll om händelserna som inträffar i det spelet orsakas av ”sanna” slumpmässiga siffror eller pseudorandom-siffror. Å andra sidan, om du använder kryptering vill du inte använda pseudorandom-nummer som en angripare kan gissa.
Låt oss till exempel säga att en angripare känner till algoritmen och frövärdet som en pseudorandom-talgenerator använder. Och låt oss säga att en krypteringsalgoritm får ett pseudorandom-nummer från denna algoritm och använder den för att generera en krypteringsnyckel utan att lägga till ytterligare slumpmässighet. Om en angripare vet tillräckligt kan de arbeta bakåt och bestämma det pseudorandomnummer som krypteringsalgoritmen måste ha valt i så fall och bryta krypteringen.
NSA och Intels generator för slumpmässiga nummer för hårdvara
För att göra det enklare för utvecklare och hjälpa till att skapa säkra slumpmässiga nummer inkluderar Intel-chips en maskinvarubaserad slumptalsgenerator som kallas RdRand. Detta chip använder en entropikälla på processorn och ger slumpmässiga nummer till programvaran när programvaran begär dem.
Problemet här är att slumptalsgeneratorn i huvudsak är en svart ruta och vi vet inte vad som händer inuti den. Om RdRand innehöll en NSA-bakdörr skulle regeringen kunna bryta krypteringsnycklar som genererades med endast data från den slumptalsgeneratorn.
Detta är ett allvarligt bekymmer. I december 2013 tog FreeBSDs utvecklare bort stöd för att använda RdRand direkt som en källa till slumpmässighet och sa att de inte kunde lita på det. [ Källa ] Utdata från RdRand-enheten matas in i en annan algoritm som lägger till ytterligare entropi, vilket säkerställer att alla bakdörrar i slumptalsgeneratorn inte spelar någon roll. Linux har redan arbetat på detta sätt och ytterligare randomiserat slumpmässiga data som kommer från RdRand så att det inte skulle vara förutsägbart även om det fanns en bakdörr. [ Källa ] I en nyligen genomförd AMA (”Ask Me Anything”) på Reddit svarade inte Intels vd Brian Krzanich på frågor om dessa problem. [ Källa ]
Naturligtvis är detta sannolikt inte bara ett problem med Intel-chips. FreeBSD: s utvecklare ropade också Via's marker med namn. Denna kontrovers visar varför det är så viktigt att generera slumpmässiga nummer som verkligen är slumpmässiga och inte är förutsägbara.
För att generera ”sanna” slumpmässiga tal samlar slumpgeneratorerna ”entropi” eller till synes slumpmässiga data från den fysiska världen omkring dem. För slumptal som inte gör det verkligen måste vara slumpmässiga, de kan bara använda en algoritm och ett frövärde.
Bildkredit: rekre89 på Flickr , Lisa Brewster on Flickr , Ryan Somma på Flickr , Huangjiahuion Flickr