Datori ģenerē izlases numuru par visu, sākot no kriptogrāfijas līdz videospēlēm un azartspēlēm. Ir divas nejaušo skaitļu kategorijas - "patiesi" nejaušie skaitļi un pseidogadījuma skaitļi - un atšķirība ir svarīga šifrēšanas sistēmu drošībai.
Datori var radīt patiesus izlases numurus, novērojot dažus ārējos datus, piemēram, peles kustības vai ventilatora troksni, kas nav paredzams, un no tā izveidojot datus. To sauc par entropiju. Citiem vārdiem, viņi ģenerē "pseido-random" skaitļus, izmantojot algoritmu, lai rezultāti būtu nejauši, kaut arī tie nav.
Nesen šis temats ir kļuvis pretrunīgs, un daudzi apšauba, vai Intel iebūvētais aparatūras nejaušu skaitļu ģeneratora mikroshēma ir uzticama. Lai saprastu, kāpēc tā var nebūt uzticama, jums ir jāsaprot, kā vispirms tiek izmantoti nejaušie skaitļi un kādi tie ir izmantoti.
Gadījuma numuri ir izmantoti daudzus tūkstošus gadu. Neatkarīgi no tā, vai tas ir flipping monētas vai ritošā kauliņiem, mērķis ir atstāt gala rezultātu līdz nejaušības iespējai. Datora nejaušo skaitļu ģeneratori ir līdzīgi - tie ir mēģinājums panākt neparedzamu, nejaušošu rezultātu.
Gadījuma skaitļu ģeneratori ir noderīgi daudziem dažādiem mērķiem. Papildus acīmredzamām lietojumprogrammām, piemēram, radot nejaušus skaitļus azartspēļu nolūkos vai radot neparedzamus rezultātus datorspēlē, kriptogrāfijai ir svarīga nejaušība.
Kriptogrāfijai nepieciešami numuri, kurus uzbrucēji nevar uzminēt. Mēs atkal nevaram izmantot vienādus numurus. Mēs gribam ģenerēt šos skaitļus ļoti neparedzamā veidā, lai uzbrucēji to nevarētu uzminēt. Šie izlases numuri ir būtiski drošai šifrēšanai, vai jūs šifrējat savus failus vai vienkārši izmantojat HTTPS vietni internetā.
Jums var būt jautājums, kā dators faktiski var ģenerēt izlases numuru. Kur šī "nejaušība" nāk no. Ja tas ir tikai datora kods, vai tas nav iespējams, ka datora radītie skaitļi varētu būt paredzami?
Mēs parasti grupējam nejaušos skaitļus, kurus datori ģenerē divos veidos atkarībā no tā, kā tie tiek ģenerēti: "patiesi" nejaušie skaitļi un pseido-nejaušie skaitļi.
Lai izveidotu "patiesu" nejaušo skaitli, dators mēra kādu fizisku parādību, kas notiek ārpus datora. Piemēram, dators var izmērīt atomu radioaktīvo sabrukšanu. Saskaņā ar kvantu teoriju nav iespējams precīzi zināt, kad radīsies radioaktīvā sabrukšana, tādēļ būtībā tā ir "tīra nejaušība" no Visuma. Uzbrucējs nevarēs paredzēt, kad notiks radioaktīvā sabrukšana, tāpēc viņi nezinātu nejaušības vērtību.
Lai iegūtu vairāk ikdienas ikmēneša piemēru, dators varēja paļauties uz atmosfēras troksni vai vienkārši izmantot precīzu laiku, kad tastatūrā nospiežat taustiņus kā neparedzamu datu avotu vai entropiju. Piemēram, jūsu dators var pamanīt, ka jūs nospiežat taustiņu tieši 0,23423523 sekundēs pēc plkst. 14:00 ... Grab pietiekami daudz laika, kas saistīti ar šo taustiņu nospiešanu, un jums būs entropijas avots, ko var izmantot, lai ģenerētu "patiesu" nejaušību numurs. Jūs neesat paredzama mašīna, tāpēc uzbrucējs nevar uzminēt precīzu brīdi, kad nospiežat šos taustiņus. Linux / dev / random ierīce, kas rada nejaušus skaitļus, "bloķē" un neatgriežas rezultātos, līdz tā iegūst pietiekami daudz entropijas, lai atgrieztu patiesu izlases numuru.
Pseudorandom numuri ir alternatīva "patiesajiem" nejaušajiem skaitļiem. Dators var izmantot sēklu vērtību un algoritmu, lai ģenerētu skaitļus, kas izrādās nejauši, bet tie faktiski ir paredzami. Dators nevāc nekādus izlases datus no vides.
Tas katrā ziņā nav slikts. Piemēram, ja jūs spēlējat videospēli, nav īsti svarīgi, vai šajā spēlē notiekošos notikumus ierobežo ar "patiesiem" nejaušajiem skaitļiem vai pseidogadījuma skaitļiem. No otras puses, ja jūs izmantojat šifrēšanu, jūs nevēlaties izmantot pseidogadījuma skaitļus, ko uzbrucējs varētu uzminēt.
Piemēram, pieņemsim, ka uzbrucējs zina algoritmu un sēklu vērtību izmanto pseidogomātisko skaitļu ģenerators. Pieņemsim, ka šifrēšanas algoritms iegūst no šī algoritma pseidogadījuma skaitli un to izmanto, lai ģenerētu šifrēšanas atslēgu, nepievienojot nekādu papildu nejaušību. Ja uzbrucējs pietiekami zina, viņi varētu strādāt atpakaļ un noteikt pseido izlases numuru, kas šai gadījumā ir jāizvēlas, lai šifrētu šifrēšanas algoritmu.
Lai padarītu lietas vieglāk izstrādātājiem un palīdzētu radīt drošus nejaušos skaitļus, Intel mikroshēmās ir hardware-based random number generator, kas pazīstams kā RdRand. Šī mikroshēma procesora procesā izmanto entropijas avotu un programmatūrai, kad to pieprasa programmatūra, nodrošina nejaušus skaitļus.
Problēma ir tāda, ka nejaušo skaitļu ģenerators būtībā ir melna kaste, un mēs nezinām, kas notiek tajā. Ja RdRand satur NSA backdoor, valdība varētu pārtraukt šifrēšanas atslēgas, kas tika ģenerētas tikai ar datiem, ko sniedz šis nejaušu skaitļu ģenerators.
Tā ir nopietna problēma. 2013. gada decembrī FreeBSD izstrādātāji noņēma atbalstu, lai izmantotu RdRand tieši kā nejaušības avotu, sakot, ka viņi nevar uzticēties. [Avots] RdRand ierīces izeja tiks ievadīta citā algoritmā, kas papildina papildu entropiju, nodrošinot to, ka jebkura nejaušo skaitļu ģeneratora aizmugurē nav nozīmes.Linux jau strādāja šādā veidā, tālāk randomizējot izlases datus, kas nāk no RdRand, lai tas nebūtu paredzams pat tad, ja būtu bojājums. [Avots] Nesenajā AMD ("Uzdodiet kaut ko kaut ko") par Reddit, Intel izpilddirektors Brian Krzanich neatbildēja uz jautājumiem par šīm bažām. [Avots]
Protams, tas, visticamāk, nav tikai problēma ar Intel mikroshēmām. FreeBSD izstrādātāji arī izsauc Via mikroshēmas pēc nosaukuma. Šī neskaidrība parāda, kāpēc radīt gadījuma skaitļus, kas ir patiesi izlases veida un nav paredzami, ir tik svarīgi.
Lai izveidotu "patiesus" nejaušos skaitļus, nejaušo skaitļu ģeneratori apkopo "entropiju" vai šķietami izlases datus no viņu apkārtējās fiziskās pasaules. Par nejauši izvēlētiem skaitļiem tiešām tiem jābūt nejaušiem, viņi var vienkārši izmantot algoritmu un sēklu vērtību.
Attēlu kredīts: rekre89 par Flickr, Lisa Brewster par Flickr, Ryan Somma par Flickr, huangjiahui par Flickr