Kuidas arvutid juhuslikke numbreid genereerivad
Arvutid genereerivad suvalise arvu kõike alates krüptograafiast kuni videomängude ja hasartmängudeni. Juhuslikke numbreid on kahte kategooriat - “tõelised” juhuslikud arvud ja pseudojuhuslikud arvud - ning erinevus on krüptimissüsteemide turvalisuse seisukohalt oluline.
Arvutid saavad genereerida tõeliselt juhuslikke numbreid, jälgides mõningaid väliseid andmeid, näiteks hiire liikumist või ventilaatori müra, mida pole võimalik ette näha, ja luues neist andmeid. Seda nimetatakse entroopiaks. Teinekord genereerivad nad algoritmi abil pseudojuhuslikud numbrid, nii et tulemused tunduvad juhuslikud, kuigi pole.
See teema on viimasel ajal vaieldavamaks muutunud ja paljud inimesed kahtlevad, kas Inteli sisseehitatud riistvara juhuslike arvude generaatori kiip on usaldusväärne. Et mõista, miks see ei pruugi olla usaldusväärne, peate mõistma, kuidas juhuslikke numbreid üldse genereeritakse ja milleks neid kasutatakse.
Milleks juhuslikke numbreid kasutatakse
Juhuslikke numbreid on kasutatud juba mitu tuhat aastat. Olgu selleks mündi klappimine või täringu veeretamine, eesmärk on jätta lõpptulemus juhusliku juhuse hooleks. Juhuslike arvude generaatorid arvutis on sarnased - need on katsed saavutada ettearvamatut, juhuslikku tulemust.
SEOTUD:Mis on krüpteerimine ja kuidas see töötab?
Juhuslike arvude generaatorid on kasulikud mitmel erineval eesmärgil. Peale ilmsete rakenduste, nagu juhuslike arvude genereerimine hasartmängude jaoks või arvutimängus ettearvamatute tulemuste loomine, on krüptograafia jaoks oluline juhuslikkus.
Krüptograafia jaoks on vaja numbreid, mida ründajad ei oska arvata. Me ei saa lihtsalt samu numbreid ikka ja jälle kasutada. Tahame need numbrid genereerida väga ettearvamatul viisil, nii et ründajad ei suuda neid ära arvata. Need juhuslikud numbrid on turvalise krüptimise jaoks hädavajalikud, olenemata sellest, kas krüpteerite oma faile või kasutate lihtsalt HTTPS-i veebisaiti Internetis.
Tõelised juhuslikud numbrid
Võib tekkida küsimus, kuidas arvuti saab juhusliku arvu tegelikult genereerida. Kust see “juhuslikkus” tuleb. Kui see on vaid jupp arvutikoodi, kas pole siis võimalik, et arvuti genereeritud numbrid võivad olla prognoositavad?
Üldiselt rühmitame arvutite genereeritud juhuslikud numbrid kahte tüüpi, sõltuvalt nende genereerimisest: “Tõelised” juhuslikud arvud ja pseudo-juhuslikud arvud.
Tõelise juhusliku arvu genereerimiseks mõõdab arvuti teatud tüüpi füüsilisi nähtusi, mis leiavad aset väljaspool arvutit. Näiteks saaks arvuti mõõta aatomi radioaktiivset lagunemist. Kvantteooria kohaselt ei saa kuidagi kindlalt teada, millal radioaktiivne lagunemine toimub, seega on see universumi sisuliselt "puhas juhuslikkus". Ründaja ei oska ennustada, millal toimub radioaktiivne lagunemine, nii et ta ei tea juhuslikku väärtust.
Igapäevase näite saamiseks võib arvuti tugineda atmosfäärimürale või kasutada ettearvamatute andmete või entroopia allikana lihtsalt klaviatuuri klahvidele vajutamise täpset aega. Näiteks võib teie arvuti märgata, et vajutasite klahvi täpselt 0,23423523 sekundil pärast kella 14. Haarake piisavalt palju nende klahvivajutustega seotud konkreetsetest kellaaegadest ja teil on entroopia allikas, mida saate kasutada tõelise juhusliku tulemuse genereerimiseks number. Te ei ole ettearvatav masin, nii et ründaja ei oska täpselt arvata, millal neid klahve vajutate. Linuxis seade / dev / random, mis genereerib juhuslikke numbreid, "blokeerib" ja ei tagasta tulemust enne, kui see kogub piisavalt entroopiat tõeliselt juhusliku arvu tagastamiseks.
Pseudojuhuslikud numbrid
Pseudojuhuslikud numbrid on alternatiiv “tõelistele” juhuslikele arvudele. Arvud võiksid algarvu ja algoritmi abil luua arvud, mis näivad olevat juhuslikud, kuid mis on tegelikult ennustatavad. Arvuti ei kogu keskkonnast juhuslikke andmeid.
See pole tingimata halb asi igas olukorras. Näiteks kui mängite videomängu, pole tegelikult vahet, kas selles mängus toimuvad sündmused on põhjustatud tõelistest juhuslikest arvudest või pseudorandom numbritest. Teisalt, kui kasutate krüpteerimist, ei soovi te kasutada pseudojuhuslikke numbreid, mida ründaja võiks ära arvata.
Oletame näiteks, et ründaja teab algoritmi ja algväärtust, mida pseudorandomarvugeneraator kasutab. Oletame, et krüpteerimisalgoritm saab sellest algoritmist pseudojuhusliku numbri ja kasutab seda krüptovõtme genereerimiseks, lisamata juhuslikkust. Kui ründaja teab piisavalt, saaksid nad töötada tagurpidi ja määrata pseudojuhusliku numbri, mille krüpteerimisalgoritm pidi sel juhul valima, rikkudes krüptimise.
NSA ja Inteli riistvara juhuslike arvude generaator
Arendajate asjade lihtsustamiseks ja turvaliste juhuslike arvude loomiseks aitavad Inteli kiibid riistvarapõhist juhuslike arvude generaatorit, mida nimetatakse RdRandiks. See kiip kasutab protsessoril entroopiaallikat ja annab tarkvarale juhuslikke numbreid, kui tarkvara seda nõuab.
Siin on probleemiks see, et juhuslike arvude generaator on sisuliselt must kast ja me ei tea, mis selle sees toimub. Kui RdRand sisaldaks NSA tagaukse, saaks valitsus murda krüptovõtmed, mis loodi ainult selle juhusliku arvu generaatori edastatud andmetega.
See on tõsine mure. 2013. aasta detsembris eemaldasid FreeBSD arendajad RdRandi kasutamise juhuslikkuse allikana, öeldes, et nad ei saa seda usaldada. [Allikas] RdRandi seadme väljund suunatakse teise algoritmi, mis lisab täiendava entroopia, tagades, et juhuslike arvude generaatori mis tahes tagauksed poleks olulised. Linux töötas juba niimoodi, randomiseerides RdRandilt pärinevaid juhuslikke andmeid veelgi, nii et neid ei oleks võimalik ennustada isegi tagauksega. [Allikas] Inteli tegevjuht Brian Krzanich ei vastanud hiljutises Redditi saidil AMA („Ask Me Anything“) nende probleemide kohta. [Allikas]
Muidugi pole see tõenäoliselt ainult Inteli kiipide probleem. FreeBSD arendajad kutsusid Via kiipe ka nime järgi. See poleemika näitab, miks on juhuslike arvude genereerimine, mis on tõeliselt juhuslikud ja mida ei saa ette ennustada, nii oluline.
Tõeliste juhuslike arvude genereerimiseks koguvad juhuslike arvude generaatorid ümbritseva füüsilise maailma „entroopiat” või näiliselt juhuslikke andmeid. Juhuslike arvude jaoks, mis seda ei tee tõesti peavad olema juhuslikud, võivad nad kasutada lihtsalt algoritmi ja algväärtust.
Pildikrediit: rekre89 Flickris, Lisa Brewster Flickris, Ryan Somma Flickris, huangjiahui Flickris