Kako računalniki ustvarjajo naključne številke
Računalniki ustvarjajo naključno število za vse, od kriptografije do video iger in iger na srečo. Obstajata dve kategoriji naključnih števil - "resnične" naključne številke in psevdonosne številke - razlika je pomembna za varnost sistemov šifriranja.
Računalniki lahko ustvarijo resnične naključne številke z opazovanjem nekaterih zunanjih podatkov, kot so gibi miške ali hrup ventilatorja, ki ni predvidljiv, in ustvarjajo podatke iz njega. To je znano kot entropija. V drugih primerih ustvarjajo »psevdarantne« številke z uporabo algoritma, tako da so rezultati naključni, čeprav niso.
Ta tema je v zadnjem času postala bolj sporno, saj se veliko ljudi sprašuje, ali je Intelov vgrajeni generator čipov za naključne številke strojne opreme vreden zaupanja. Da bi razumeli, zakaj to morda ni vredno zaupanja, morate razumeti, kako so naključno ustvarjene naključne številke in za kaj se uporabljajo.
Za kaj se uporabljajo naključne številke
Naključna števila so bila uporabljena že več tisoč let. Naj gre za obračanje kovanca ali zavijanje kocke, je cilj, da končni rezultat zapustite naključno. Generatorji naključnih števil v računalniku so podobni - so poskusi doseči nepredvidljiv, naključen rezultat.
Generatorji naključnih števil so uporabni za različne namene. Poleg očitnih aplikacij, kot je ustvarjanje naključnih številk za namene iger na srečo ali ustvarjanje nepredvidljivih rezultatov v računalniški igri, je naključnost pomembna za kriptografijo.
Kriptografija zahteva številke, ki jih napadalci ne morejo uganiti. Ne smemo več uporabljati enakih številk znova in znova. Te številke želimo ustvariti na zelo nepredvidljiv način, da jih napadalci ne morejo uganiti. Te naključne številke so bistvene za varno šifriranje, ne glede na to, ali šifrirate svoje datoteke ali uporabljate spletno mesto HTTPS na internetu..
Resnične naključne številke
Morda se sprašujete, kako lahko računalnik ustvari naključno število. Od kod prihaja ta »naključnost«. Če je to le del računalniške kode, ni mogoče predvideti številk, ki jih generira računalnik?
Računalnike naključnih števil, ki jih generiramo, običajno združimo v dve vrsti, odvisno od tega, kako so generirani: »True« naključne številke in psevdodobna števila.
Za ustvarjanje »pravega« naključnega števila računalnik meri nek fizični pojav, ki se pojavi zunaj računalnika. Računalnik bi na primer lahko izmeril radioaktivni razpad atoma. V skladu s kvantno teorijo ni mogoče z gotovostjo vedeti, kdaj bo prišlo do radioaktivnega razpada, zato je to v bistvu »čista naključje« iz vesolja. Napadalec ne bi mogel napovedati, kdaj bi prišlo do radioaktivnega razpada, da ne bi vedeli naključne vrednosti.
Za bolj vsakodnevni primer se lahko računalnik zanaša na atmosferski hrup ali pa preprosto uporabi točen čas, ko pritisnete tipke na tipkovnici kot vir nepredvidljivih podatkov ali entropije. Na primer, računalnik bo morda opazil, da ste pritisnili tipko natanko 0,23423523 sekund po 2. uri ... Zgrabite dovolj določenih časov, povezanih s temi pritiski na tipke, in boste imeli vir entropije, ki ga lahko uporabite za ustvarjanje »pravega« naključnega številko. Niste predvidljiv stroj, zato napadalec ne more natančno določiti trenutka, ko pritisnete te tipke. / Dev / random naprava na Linuxu, ki generira naključna števila, »blokira« in ne vrne rezultata, dokler ne zbere dovolj entropije, da bi vrnila resnično naključno število.
Psevdoramske številke
Psevdarantne številke so alternativa »resničnim« naključnim številkam. Računalnik lahko uporabi semensko vrednost in algoritem za ustvarjanje številk, ki se zdijo naključne, vendar so dejansko predvidljive. Računalnik ne zbira nobenih naključnih podatkov iz okolja.
To ni nujno slaba stvar v vsaki situaciji. Na primer, če igrate video igro, ni vseeno, ali so dogodki, ki se pojavljajo v tej igri, ovrednoteni z »resničnimi« naključnimi številkami ali psevdarantnimi številkami. Po drugi strani pa, če uporabljate šifriranje, ne želite uporabljati psevdarantnih števil, ki bi jih napadalec lahko uganil..
Na primer, recimo, da napadalec pozna algoritem in semensko vrednost, ki jo uporablja generator psevdarantnih števil. In recimo, da šifrirni algoritem dobi iz tega algoritma psevdorno število in ga uporablja za ustvarjanje šifrirnega ključa brez dodajanja dodatnih naključnosti. Če napadalec ve dovolj, lahko delajo nazaj in določijo psevdarandomsko številko, ki jo je algoritem za šifriranje moral izbrati v tem primeru, in prekiniti šifriranje.
NSA in Intelov strojni generator slučajnih števil
Da bi razvijalcem olajšali delo in pomagali ustvarjati varne naključne številke, Intelovi čipi vključujejo generator naključnih števil na osnovi strojne opreme, znan kot RdRand. Ta čip uporablja izvor entropije na procesorju in programski opremi naključne številke, ko jih programska oprema zahteva.
Problem je v tem, da je generator naključnih števil v bistvu črna škatla in ne vemo, kaj se dogaja v njem. Če je RdRand vseboval backdoor NSA, bi vlada lahko prekinila šifrirne ključe, ki so bili ustvarjeni samo s podatki, ki jih je dal ta generator naključnih števil..
To je resna skrb. Decembra 2013 so razvijalci FreeBSD-ja odstranili podporo za uporabo RdRand neposredno kot vir naključnosti, saj jim niso mogli zaupati. [Vir] Izhod naprave RdRand bi bil vnesen v drug algoritem, ki dodaja dodatno entropijo, s čimer bi zagotovili, da nobena backdoorja v generatorju naključnih števil ne bi bila pomembna. Linux je že delal na ta način, še naprej naključno izbira naključne podatke, ki prihajajo iz RdRand, tako da ne bi bilo predvidljivo, tudi če bi imeli backdoor. [Source] V nedavnem AMA ("Vprašaj me karkoli") na Redditu, direktor podjetja Intel Brian Krzanich ni odgovoril na vprašanja o teh pomislekih. [Vir]
Seveda to verjetno ni le problem z Intelovimi čipi. Razvijalci FreeBSD-ja so poimenovali tudi Via-jeve čipe. Ta spor kaže, zakaj je generiranje naključnih številk, ki so resnično naključne in niso predvidljive, tako pomembno.
Da bi generirali »resnične« naključne številke, generatorji naključnih števil zbirajo »entropijo« ali navidezno naključne podatke iz fizičnega sveta okoli njih. Za naključne številke, ki jih ne resnično morajo biti naključni, lahko uporabijo samo algoritem in semensko vrednost.
Kredit za slike: rekre89 na Flickr, Lisa Brewster na Flickru, Ryan Somma na Flickr, huangjiahui na Flickr