Hur Datorer genererar slumptal
Datorer genererar slumptal för allt från kryptering till videospel och spel. Det finns två kategorier av slumpartstal - "sanna" slumptal och pseudorandomtal - och skillnaden är viktig för säkerheten för krypteringssystem.
Datorer kan generera verkliga slumpmässiga nummer genom att observera vissa externa data, som musrörelser eller fläktbuller, vilket inte är förutsägbart och skapar data från den. Detta kallas entropi. Andra gånger genererar de "pseudorandom" -numren genom att använda en algoritm så resultaten blir slumpmässiga, även om de inte är.
Detta ämne har blivit mer kontroversiellt förrän, med många människor ifrågasatte om Intels inbyggda hårdvara slumpmässigt antal generator chip är pålitlig. För att förstå varför det inte är trovärdigt måste du förstå hur slumpmässiga nummer genereras i första hand och vad de används för.
Vilka slumpmässiga nummer används för
Slumpmässiga siffror har använts i tusentals år. Oavsett om det vänder ett mynt eller rullar en tärning, är målet att lämna slutresultatet upp till slumpmässig chans. Slumpmässiga talgeneratorer i en dator är likartade - de är ett försök att uppnå ett oförutsägbart, slumpmässigt resultat.
Slumpmässiga talgeneratorer ä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ässigt 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 slumpartier är viktiga för säker kryptering, oavsett om du krypterar dina egna filer eller bara använder en HTTPS-webbplats på Internet.
Sann slumpmässiga nummer
Du kanske undrar hur en dator faktiskt kan generera ett slumptal. Var kommer denna "slumpmässighet" från. Om det bara är en datorkod, är det inte möjligt att de siffror datorn genererar kan vara förutsägbar?
Vi brukar gruppera slumpmässiga tal som datorer genererar i två typer, beroende på hur de genereras: "Sann" slumpmässiga tal och pseudoslumpmässiga tal.
För att skapa ett "sant" slumptal, mäter datorn någon typ av fysiskt fenomen som äger rum utanför datorn. Till exempel kan datorn mäta radioaktivt förfall av en atom. Enligt kvantteori finns det ingen väg att veta säkert när radioaktivt förfall kommer att inträffa, så detta är i grunden "ren slumpmässighet" från universum. En angripare skulle inte kunna förutse när radioaktivt förfall skulle inträffa, så att de inte skulle få veta slumpmässigt värde.
För ett mer dagligt exempel kan datorn lita på atmosfärstörningar eller helt enkelt använda exakt tiden du trycker på tangenterna på tangentbordet som en källa till oförutsägbar data eller entropi. Till exempel kan datorn märka att du tryckte på en knapp vid exakt 0.23423523 sekunder efter 2 pm ... Ta tillräckligt med de specifika tiderna i samband med dessa nyckeltryck och du kommer att få en entropi som du kan använda för att skapa en "sann" slumpmässig 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. Den / dev / slumpmässiga enheten på Linux, som genererar slumptal, "block" och returnerar inte ett resultat förrän det samlar tillräckligt entropi för att returnera ett verkligt slumpmässigt nummer.
Pseudorandom Numbers
Pseudorandom tal är ett alternativ till "sanna" slumptal. En dator kan använda ett frövärde och en algoritm för att generera nummer som verkar vara slumpmässiga, men det är faktiskt förutsägbart. Datorn samlar inte några slumpmässiga data från miljön.
Detta är inte nödvändigtvis en dålig sak i varje situation. Om du till exempel spelar ett videospel spelar det ingen roll om händelserna som inträffar i det spelet är förkroppsliga av "sanna" slumpmässiga tal eller pseudorandomnummer. Å 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 vet att algoritmen och frövärdet använder en pseudorandom-nummergenerator. Och låt oss säga att en krypteringsalgoritm får ett pseudorandomtal 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 pseudorandomtal som krypteringsalgoritmen måste ha valt i det fallet, bryta krypteringen.
NSA och Intels maskinvaru Random Number Generator
För att göra det enklare för utvecklare och hjälpa till att skapa säkra slumptal, innehåller Intel-chips en hårdvarubaserad slumptalsgenerator som kallas RdRand. Detta chip använder en entropikälla på processorn och tillhandahåller slumptal till programvara när programvaran begär dem.
Problemet här är att slumptalgenerern är väsentligen en svart låda och vi vet inte vad som händer inom den. Om RdRand innehöll en NSA bakdörr skulle regeringen kunna bryta krypteringsnycklar som genererades med endast data som levererades av den slumptalgenerator.
Detta är ett allvarligt problem. I december 2013 avlägsnade FreeBSDs utvecklare stöd för att använda RdRand direkt som en slumpmässig källa och sa att de inte kunde lita på det. [Source] Utgången från RdRand-enheten skulle matas in i en annan algoritm som lägger till ytterligare entropi, vilket säkerställer att eventuella bakdörrar i slumptalsgeneratorn inte spelar någon roll. Linux har redan arbetat på det här sättet, ytterligare randomisering av de slumpmässiga data som kommer från RdRand så att det inte skulle vara förutsägbart även om det fanns en bakdörr. [Source] I en nyligen AMA ("Ask Me Anything") på Reddit svarade inte Intel vd Brian Krzanich frågor om dessa problem. [Källa]
Självklart är det troligtvis inte bara ett problem med Intel-chips. FreeBSDs utvecklare ropade Via's chips med namn också. Denna kontrovers visar varför att generera slumpmässiga siffror som är verkligt slumpmässiga och inte förutsägbara är så viktigt.
För att generera "sanna" slumptal samlar slumptalsgeneratorer "entropi" eller till synes slumpmässiga data från den fysiska världen runt dem. För slumptal som inte gör det verkligen måste vara slumpmässiga, de får bara använda en algoritm och ett frövärde.
Bildkredit: rekre89 på Flickr, Lisa Brewster på Flickr, Ryan Somma på Flickr, Huangjiahui på Flickr