13Jul

Hoe computers willekeurige getallen genereren

dice-random-getallen

Computers genereren een willekeurig nummer voor alles, van cryptografie tot videogames en gokken. Er zijn twee categorieën van willekeurige getallen - "echte" willekeurige getallen en pseudowillekeurige getallen - en het verschil is belangrijk voor de beveiliging van versleutelingssystemen.

Computers kunnen echt willekeurige getallen genereren door sommige externe gegevens te observeren, zoals muisbewegingen of ventilatorruis, die niet voorspelbaar is, en er gegevens van te maken. Dit staat bekend als entropie. Op andere momenten genereren ze "pseudorandom" -nummers door een algoritme te gebruiken, zodat de resultaten willekeurig lijken, ook al zijn ze dat niet.

Dit onderwerp is recent controversiëler geworden, waarbij veel mensen zich afvroegen of Intel's ingebouwde hardware-generator voor willekeurige getallen betrouwbaar is. Om te begrijpen waarom het misschien niet betrouwbaar is, moet je begrijpen hoe willekeurige getallen in de eerste plaats worden genereeerd en waarvoor ze worden gebruikt.

Welke willekeurige nummers worden gebruikt voor

Willekeurige getallen worden al vele duizenden jaren gebruikt. Of het nu gaat om een ​​munt slaan of een dobbelsteen gooien, het doel is om het eindresultaat willekeurig te laten. Willekeurige nummergeneratoren op een computer zijn vergelijkbaar - ze zijn een poging om een ​​onvoorspelbaar, willekeurig resultaat te bereiken.

Willekeurige nummergeneratoren zijn nuttig voor veel verschillende doeleinden. Afgezien van voor de hand liggende toepassingen zoals het genereren van willekeurige getallen met het oog op gokken of het creëren van onvoorspelbare resultaten in een computerspel, is willekeur belangrijk voor cryptografie.

Cryptografie vereist nummers die aanvallers niet kunnen raden. We kunnen niet dezelfde nummers steeds opnieuw gebruiken. We willen deze nummers op een zeer onvoorspelbare manier genereren, dus aanvallers kunnen ze niet raden. Deze willekeurige getallen zijn essentieel voor veilige codering, of u nu uw eigen bestanden codeert of alleen een HTTPS -website op internet gebruikt.

video-poker-gokken-randomness

True Random Numbers

U vraagt ​​zich misschien af ​​hoe een computer daadwerkelijk een willekeurig nummer kan genereren. Waar komt deze "willekeur" vandaan? Als het gewoon een stukje computercode is, is het dan niet mogelijk dat de cijfers die de computer genereert, voorspelbaar zijn?

We groeperen de computers met willekeurige getallen in het algemeen in twee typen, afhankelijk van hoe ze worden gegenereerd: "Ware" willekeurige getallen en pseudo-willekeurige getallen.

Om een ​​"echt" willekeurig getal te genereren, meet de computer een soort fysiek fenomeen dat buiten de computer plaatsvindt. De computer kan bijvoorbeeld het radioactieve verval van een atoom meten. Volgens de kwantumtheorie is er geen manier om zeker te weten wanneer radioactief verval zal plaatsvinden, dus dit is in wezen "pure willekeur" van het universum. Een aanvaller zou niet kunnen voorspellen wanneer radioactief verval zou optreden, dus zij zouden de willekeurige waarde niet weten.

Voor een meer alledaags voorbeeld kan de computer vertrouwen op atmosferische ruis of gewoon de exacte tijd gebruiken dat u toetsen op uw toetsenbord indrukt als een bron van onvoorspelbare gegevens of entropie. Uw computer kan bijvoorbeeld merken dat u na 2 uur op een toets drukt op exact 0,23423523 seconden. Neem genoeg van de specifieke tijden in beslag die zijn verbonden aan deze toetsaanslagen en u hebt een entropiebron die u kunt gebruiken om een ​​"echte" willekeurige te genererenaantal. Je bent geen voorspelbare machine, dus een aanvaller kan niet precies raden wanneer je op deze toetsen drukt. Het willekeurige /dev/-apparaat op Linux, dat willekeurige getallen genereert, "blokkeert" en retourneert geen resultaat totdat er voldoende entropie is verzameld om een ​​echt willekeurig getal te retourneren.

linux-generate-random-data

Pseudorandom Numbers

Pseudorandomnummers zijn een alternatief voor "echte" willekeurige getallen. Een computer kan een seed-waarde en een algoritme gebruiken om getallen te genereren die willekeurig lijken, maar die in feite voorspelbaar zijn. De computer verzamelt geen willekeurige gegevens uit de omgeving.

Dit is niet per se een slechte zaak in elke situatie. Als u bijvoorbeeld een videogame speelt, maakt het niet echt uit of de gebeurtenissen in dat spel worden gevat door 'echte' willekeurige getallen of pseudo-willekeurige nummers. Als u daarentegen codering gebruikt, wilt u geen pseudowillekeurige nummers gebruiken die een aanvaller zou kunnen raden.

Laten we bijvoorbeeld zeggen dat een aanvaller het algoritme en de seed-waarde kent die een pseudo-willekeurige nummergenerator gebruikt. En laten we zeggen dat een coderingsalgoritme een pseudorandomnummer krijgt van dit algoritme en het gebruikt om een ​​coderingssleutel te genereren zonder extra willekeur toe te voegen. Als een aanvaller voldoende weet, kunnen ze achterwaarts werken en het pseudo-willekeurige nummer bepalen dat het coderingsalgoritme in dat geval moet hebben gekozen, waardoor de codering wordt verbroken.

pseudo-nummers

De NSA en de hardware-generator voor willekeurige getallen van Intel

Om Intel gemakkelijk te maken voor ontwikkelaars en om veilige willekeurige nummers te genereren, bevatten Intel-chips een hardware-gebaseerde willekeurige nummergenerator die bekend staat als RdRand. Deze chip maakt gebruik van een entropiebron op de processor en geeft willekeurige nummers aan software wanneer de software daarom vraagt.

Het probleem hier is dat de generator van willekeurige getallen in essentie een zwarte doos is en we weten niet wat erin gebeurt. Als RdRand een achterdeur van NSA bevatte, zou de overheid encryptiesleutels kunnen verbreken die werden gegenereerd met alleen gegevens die door die willekeurige nummergenerator werden verstrekt.

Dit is een ernstige zorg. In december 2013 hebben de ontwikkelaars van FreeBSD de ondersteuning voor het gebruik van RdRand direct verwijderd als een bron van willekeur, waarbij ze zeiden dat ze het niet konden vertrouwen.[Bron] De uitvoer van het RdRand-apparaat zou worden ingevoerd in een ander algoritme dat extra entropie toevoegt, zodat elke achterdeur in de generator voor willekeurige getallen er niet toe doet. Linux werkte al op deze manier, verder randomiseren van de willekeurige gegevens afkomstig van RdRand zodat het niet voorspelbaar zou zijn, zelfs als er een achterdeur was.[Bron] In een recente AMA( "Ask Me Anything") op Reddit heeft Intel CEO Brian Krzanich geen vragen over deze zorgen beantwoord.[Bron]

Natuurlijk is dit waarschijnlijk niet alleen een probleem met Intel-chips. De ontwikkelaars van FreeBSD hebben ook de namen van Via's chips bij naam genoemd. Deze controverse laat zien waarom het genereren van willekeurige getallen die echt willekeurig zijn en niet voorspelbaar zijn, zo belangrijk is.

intel

Om "echte" willekeurige getallen te genereren, verzamelen willekeurige nummergeneratoren "entropie" of schijnbaar willekeurige gegevens uit de fysieke wereld om hen heen. Voor willekeurige getallen die niet echt willekeurig moeten zijn, kunnen ze alleen een algoritme en een seed-waarde gebruiken.

Image Credit: rekre89 op Flickr, Lisa Brewster op Flickr, Ryan Somma op Flickr, huangjiahui op Flickr