13Jul

Kuidas arvutid genereerivad juhuslikud numbrid

täringud-juhuslikud numbrid

Computers loovad krüptograafiale, videomängudele ja hasartmängudesse kõikvõimalikud juhtnupud. On kaks kategooriat juhuslike numbritega - "tõelised" juhuslikud numbrid ja pseudorandomarvud - ja erinevus on oluline krüpteerimissüsteemide turvalisuse jaoks.

Arvutid võivad genereerida tõelisi juhuslikke arvnäitajaid, jälgides mõningaid väliseid andmeid, nagu hiire liigutused või ventilaatorimüra, mis pole prognoositavad, ja luua andmeid sellest. Seda nimetatakse entroopiaks. Muudel juhtudel genereerivad nad algoritmi kasutades pseudorandom-numbreid, nii et tulemused näivad juhuslikult, kuigi need ei ole.

See teema on viimasel ajal muutunud vaieldavamaks, sest paljud küsitlevad, kas Inteli sisseehitatud riistvaralise juhusliku arvu generaatori kiip on usaldusväärne. Selleks, et mõista, miks see ei pruugi olla usaldusväärne, peate mõistma, kuidas kõigepealt genereeritakse juhuslikud numbrid ja mida neid kasutatakse.

Milliseid juhuslikke numbreid kasutatakse

jaoks Juhuslikke numbreid on kasutatud juba tuhandeid aastaid. Münt vibreerides või täringut joondades on eesmärgiks jätta lõpptulemus välja juhuslikult. Arvuti juhusliku arvu generaatorid on sarnased - nad püüavad saavutada ettearvamatut, juhuslikku tulemust.

Juhusliku arvu generaatorid on kasulikud paljude erinevatel eesmärkidel. Lisaks ilmsetest rakendustest, nagu hasartmängude jaoks juhuslike numbrite genereerimine või arvutimängus ettenägematute tulemuste loomine, on krüptograafia jaoks oluline juhuslikkus.

krüptograafia nõuab numbreid, mida ründajad ei suuda arvata. Me ei saa lihtsalt kasutada samu numbreid ikka ja jälle. Me tahame neid numbreid luua väga ettearvamatul viisil, nii et ründajad ei suuda neid arvata. Need juhuslikud numbrid on turvalise krüpteerimise jaoks hädavajalikud, kas olete oma failid krüpteerides või lihtsalt kasutate HTTPS veebisaiti Internetis.

video-pokkeri-hasartmängude juhuslikkus

tõelised juhuslikud numbrid

Võib küsida, kuidas arvuti tegelikult võib luua juhusliku numbri. Kust see juhuslikkus tekib? Kui see on lihtsalt tükk arvutikood, kas pole võimalik, et arvuteid genereerivad numbrid oleksid ennustatavad?

Üldjuhul rühmitame juhuslikud numbrid arvutid genereerides kahte tüüpi sõltuvalt sellest, kuidas need genereeritakse: "True" juhuslikud numbrid ja pseudojuhuslikud numbrid.

Tõelise juhusliku arvu genereerimiseks arvutab arvuti mõnda tüüpi füüsilist nähtust, mis toimub väljaspool arvutit. Näiteks võib arvuti mõõta aatomi radioaktiivset lagunemist. Vastavalt kvantteooriale ei ole mingit võimalust kindlalt teada, kui radioaktiivne lagunemine toimub, seega on see universum sisuliselt "puhas juhuslikkus".Ründaja ei suuda ennustada, kui toimub radioaktiivne lagunemine, nii et nad ei tea juhuslikku väärtust.

Täiendava igapäevase näite puhul võib arvuti tugineda atmosfäärihäirele või lihtsalt kasutada täpset kellaaja, kui vajutate oma klaviatuuril klahve kui ettearvamatute andmete või entroopia allikaid. Näiteks võib arvutis märkida, et vajutasite klahvi täpselt 0,23423523 sekundi pärast pärast kella 14.00-ni. Võta piisavalt neid klahvivajutusi, mis on seotud nendega, ja teil on entroopia allikas, mida saate kasutada tõelise juhuslikunumberSa ei ole ennustatav masin, nii et ründaja ei suuda täpne hetk, kui vajutate neid võtmeid. Linuxi /dev/ juhuslik seade, mis genereerib juhuslikke numbreid, blokeerib ja ei tagasta tulemust, kuni see kogub tõeliselt juhusliku numbri tagastamiseks piisavalt entroopiat.

linux-generate-random-data

Pseudorandomarvud

Pseudorandomarvud on alternatiiv "tõelistele" juhuslikele numbritele. Arvuti võiks kasutada seemnete väärtust ja algoritmi numbrite loomiseks, mis näivad olevat juhuslikud, kuid mis on tegelikult ennustatavad. Arvuti ei koguta juhuslikke andmeid keskkonnast.

See ei pruugi igas olukorras tingimata olla halb. Näiteks kui mängite videomängu, ei ole tegelikult oluline, kas selles mängus esinevad sündmused kattuvad "tõeliste" juhuslike arvude või pseudorandomsete numbritega. Teisest küljest, kui kasutate krüptimist, ei soovi te kasutada pseudoregulaarseid numbreid, mida ründaja võiks arvata.

Näiteks räägib ründaja algoritmi ja kasutab pseudorandom-arvu generaatorite väärtust. Ja oletame, et krüpteerimisalgoritm saab sellest algoritmist pseudorandom-numbri ja kasutab seda krüpteerimisvõtme loomiseks, lisamata täiendavat juhuslikkust. Kui ründaja teab piisavalt, võivad nad töötada tagurpidi ja määrata pseudorandom-number, mille krüpteerimisalgoritm peab sellisel juhul valima, krüpteeringut rikkudes.

pseudo-juhuslikud numbrid

NSA ja Intel'i riistvaraliste juhuslike arvude generaator

Arendajatele lihtsamaks ja turvaliste juhuslike numbrite loomiseks on Inteli kiipide hulka kuulub riistvarapõhine juhuslike numbrite genereerija, mida nimetatakse RdRandiks. See kiip kasutab protsessoris entroopiaallikat ja pakub tarkvarale juhuslikke numbreid, kui tarkvara seda nõuab.

Probleem on siin selles, et juhuslike arvude generaator on sisuliselt musta kasti ja me ei tea, mis seal toimub. Kui RdRand sisaldas NSA varjualust, oleks valitsus võimeline purustama krüpteerimisvõtmeid, mis on loodud ainult selle juhusliku arvu generaatori poolt edastatud andmetega.

See on tõsine probleem. FreeBSD arendajad eemaldasid 2013. aasta detsembris RdRandi otsese kasutamise juhuslikkuse allikana, kuna nad ei saanud seda usaldada.[Allikas] RdRandi seadme väljund lisatakse teisele algoritmile, mis lisab täiendavat entroopiat, tagades, et juhusliku arvu generaatori tagauksed ei oleks tähtsad. Linux töötas sel viisil edasi, rühmitades RdRandi tulevad juhuslikud andmed, nii et see poleks ennustatav isegi siis, kui oleks olemas tagauks.[Allikas] Hiljutises AMD-s( "Küsi minult midagi") Reddit'is ei vastanud Inteli tegevjuht Brian Krzanich küsimustele nende murede kohta.[Allikas]

Muidugi, see tõenäoliselt ei ole ainult Intel'i kiipide probleem. FreeBSD arendajad kutsusid nimega ka Via-i kiibid. See vastuolu näitab, miks juhuslike arvude tekitamine, mis on tõeliselt juhuslikud ja ei ole ennustatav, on nii tähtis.

intel

Tõeliste juhuslike numbrite genereerimiseks genereerivad juhuslikud arvud "entroopia" või näiliselt juhuslikud andmed nende ümbritsevast füüsikast maailmast. Juhuslike arvude puhul, mis ei ole , peavad olema juhuslikud, võivad nad lihtsalt kasutada algoritmi ja seemnete väärtust.

Image Credit: rekre89 Flickril, Lisa Brewster Flickril, Ryan Somma Flickril, huangjiahui Flickril