Miten tietokoneet luovat satunnaisia numeroita
Tietokoneet tuottavat satunnaislukua kaikesta salauksesta videopeleihin ja uhkapeleihin. Satunnaislukuja on kaksi luokkaa: ”tosi” satunnaislukuja ja pseudorandom-numeroita - ja ero on tärkeä salausjärjestelmien turvallisuuden kannalta..
Tietokoneet voivat luoda todella satunnaisia lukuja tarkkailemalla joitakin ulkopuolisia tietoja, kuten hiiren liikkeitä tai puhaltimen kohinaa, joka ei ole ennustettavissa, ja luodaan siitä tietoja. Tätä kutsutaan entropiaksi. Muina aikoina ne tuottavat “pseudorandom” -numeroita käyttämällä algoritmia, joten tulokset näkyvät satunnaisina, vaikka ne eivät ole.
Tämä aihe on tullut entistä kiistanalaisemmaksi viime aikoina, sillä monet ihmiset kyseenalaistavat, onko Intelin sisäänrakennettu laitteisto-satunnaislukugeneraattorisiru luotettava. Jotta voisit ymmärtää, miksi se ei ehkä ole luotettava, sinun on ymmärrettävä, miten satunnaislukuja on ensin käsitelty ja mitä heitä käytetään.
Mitä satunnaisia numeroita käytetään
Satunnaislukuja on käytetty jo tuhansia vuosia. Olipa kyseessä vaippaako kolikko tai rullaa noppaa, tavoitteena on jättää lopputulos satunnaisesti. Tietokoneen satunnaislukugeneraattorit ovat samanlaisia - he yrittävät saavuttaa arvaamattoman satunnaisen tuloksen.
Satunnaislukugeneraattorit ovat hyödyllisiä moniin eri tarkoituksiin. Lukuun ottamatta ilmeisiä sovelluksia, kuten satunnaislukujen luomista pelaamiseen tai arvaamattomien tulosten luomiseen tietokonepelissä, satunnaisuus on tärkeää salauksen kannalta.
Salaus vaatii numeroita, joita hyökkääjät eivät voi arvata. Emme voi vain käyttää samoja numeroita uudestaan ja uudestaan. Haluamme luoda nämä numerot hyvin arvaamattomalla tavalla, jotta hyökkääjät eivät voi arvata niitä. Nämä satunnaisluvut ovat välttämättömiä turvallisen salauksen kannalta, olitpa sitten salaamassa omia tiedostoja tai käyttämällä vain HTTPS-sivustoa Internetissä.
Todelliset satunnaiset numerot
Saatat ihmetellä, miten tietokone voi todella luoda satunnaisluvun. Mistä tämä ”satunnaisuus” tulee. Jos se on vain tietokonekoodi, onko tietokoneella luodut numerot mahdollista ennustaa?
Ryhmittelemme yleensä satunnaisluvut, jotka tuottavat kaksi tyyppiä, riippuen siitä, miten ne luodaan: ”Tosi” satunnaislukuja ja näennäissatunnaisia numeroita.
”Todellisen” satunnaisluvun tuottamiseksi tietokone mittaa jonkinlaista fyysistä ilmiötä, joka tapahtuu tietokoneen ulkopuolella. Tietokone voi esimerkiksi mitata atomin radioaktiivisen hajoamisen. Kvanttiteorian mukaan ei ole mitään varmaa tietää, milloin radioaktiivinen hajoaminen tapahtuu, joten tämä on pohjimmiltaan "puhdasta satunnaisuutta" maailmankaikkeudesta. Hyökkääjä ei pysty ennustamaan, milloin radioaktiivinen hajoaminen tapahtuisi, joten he eivät tienneet satunnaisarvoa.
Päivittäisempää esimerkkiä varten tietokone voi luottaa ilmakehään tai vain käyttää tarkkaa aikaa, jonka painat näppäimistössäsi ennalta arvaamattomien tietojen tai entropian lähteenä. Esimerkiksi tietokoneesi saattaa huomata, että painoit näppäintä täsmälleen 0.23423523 sekuntia 2 pm jälkeen… Tartu tarpeeksi näihin näppäimiin liittyvistä aikoista, ja sinulla on entropian lähde, jonka avulla voit luoda "totta" satunnaisen määrä. Et ole ennustettavissa oleva kone, joten hyökkääjä ei voi arvata tarkkaa hetkeä, kun painat näitä näppäimiä. / Dev / random-laite Linuxissa, joka luo satunnaislukuja, "lohkot" ja ei palauta tulosta ennen kuin se kerää tarpeeksi entropiaa palataksesi todella satunnaislukuun.
Pseudorandom-numerot
Pseudorandom-numerot ovat vaihtoehto ”todellisille” satunnaisluvuille. Tietokone voisi käyttää siemenarvoa ja algoritmia tuottamaan lukuja, jotka näyttävät olevan satunnaisia, mutta jotka ovat itse asiassa ennustettavissa. Tietokone ei kerää satunnaisia tietoja ympäristöstä.
Tämä ei välttämättä ole huono asia kaikissa tilanteissa. Jos esimerkiksi pelaat videopeliä, ei oikeastaan ole väliä, ovatko kyseisessä pelissä tapahtuvat tapahtumat todellisten satunnaislukujen tai näennäissatunnusten takia. Toisaalta, jos käytät salausta, et halua käyttää näennäissatunnuksia, joita hyökkääjä voi arvata.
Esimerkiksi sanotaan, että hyökkääjä tietää algoritmin ja siemenarvon pseudorandom-numeron generaattorissa. Ja sanotaan, että salausalgoritmi saa näiltä algoritmilta pseudorandom-numeron ja käyttää sitä luomaan salausavaimen lisäämättä mitään ylimääräistä satunnaisuutta. Jos hyökkääjä tietää tarpeeksi, he voisivat työskennellä taaksepäin ja määrittää pseudorandom-numeron, jonka salausalgoritmi on valinnut tässä tapauksessa, rikkomalla salaus.
NSA ja Intelin laitteiston satunnaislukugeneraattori
Tekijöiden helpottamiseksi ja turvallisten satunnaislukujen luomiseksi Intel-sirut sisältävät laitteistopohjaisen satunnaislukugeneraattorin, joka tunnetaan nimellä RdRand. Tämä siru käyttää prosessorissa entropian lähdettä ja tarjoaa satunnaislukuja ohjelmistolle, kun ohjelmisto pyytää niitä.
Ongelmana on, että satunnaislukugeneraattori on olennaisesti musta laatikko ja emme tiedä, mitä sen sisällä tapahtuu. Jos RdRand sisälsi NSA-takaoven, hallitus voisi rikkoa salausavaimet, jotka on luotu vain kyseisen satunnaislukugeneraattorin toimittamien tietojen avulla.
Tämä on vakava huolenaihe. Joulukuussa 2013 FreeBSD: n kehittäjät poistivat tuen RdRandin käyttämisestä suoraan satunnaisuuden lähteenä, sanoen he eivät voineet luottaa siihen. [Lähde] RdRand-laitteen ulostulo syötetään toiseen algoritmiin, joka lisää ylimääräistä entropiaa ja varmistaa, että satunnaislukugeneraattorin takaportit eivät ole tärkeitä. Linux on jo työskennellyt tällä tavalla, satunnaistamalla RdRandista tulevat satunnaiset tiedot niin, että se ei olisi ennustettavissa, vaikka takaportti olisikin. [Lähde] Äskettäisessä AMD: ssä ("Ask Me Anything") Redditissä Intelin toimitusjohtaja Brian Krzanich ei vastannut näihin huolenaiheisiin. [Lähde]
Tämä ei tietenkään ole vain Intel-sirujen ongelma. Myös FreeBSD: n kehittäjät kutsuivat Via-sirut nimensä mukaan. Tämä kiista osoittaa, miksi satunnaislukujen luominen, jotka ovat todella satunnaisia ja jotka eivät ole ennustettavissa, ovat niin tärkeitä.
”Todellisten” satunnaislukujen tuottamiseksi satunnaislukugeneraattorit keräävät ”entropiaa” tai näennäisesti satunnaisia tietoja niiden ympärillä olevasta fyysisestä maailmasta. Satunnaislukuja, jotka eivät ole Todella niiden täytyy olla satunnaisia, ne voivat käyttää vain algoritmia ja siemenarvoa.
Kuva luotto: rekre89 Flickrissä, Lisa Brewster Flickrissä, Ryan Somma Flickrissä, huangjiahui Flickrissä