SSL kiirendi, mis kasutab riistvaralist juhuarvugeneraatorit krüptovõtmete loomiseks
**Riistvaraline juhuarvugeneraator** (inglise keeles *hardware RNG*) on seade, mis genereerib juhuslikke arve, lähtudes sellistest füüsikalistest ilmingutest nagu soojusmüra, fotoelektriline efekt, kõvaketta lugemis- ja kirjutuspeade liikumine jms. Sellised protsessid on teoreetiliselt ettearvamatud ja nende abil saadud juhuarve võib lugeda tõeliselt juhuslikeks – vastupidi pseudojuhuarvudele, mis saadakse etteantavale võtmele/numbrijadale arvutuslikke algoritme rakendades. Pseudojuhuarvud on loomupäraselt ettearvatavad ning ainult näiliselt juhuslikud – nende vastu on tehtud mitmeid rünnakuid.

|  |  |  |  |
| --- | --- | --- | --- |
| „ | Igaüks, kes usub juhuslike arvude loomise aritmeetilisi meetodeid, on segaduses. | "|  John von Neumann, 1951  |

Et riistvaralised juhuarvugeneraatorid on tavaliselt üpris aeglased, kasutatakse nende väljundit kiires pseudojuhuarvu algoritmis, mis võimaldab juhuarvude genereerimist kiirendada.

Kasutusalad
-----------

Juhuarvud on olulised krüptograafias, hasartmängudes ja statistikas.

Juhuarvugeneraatoreid on võimalik luua ka lähtudes makroskoopilistest protsessidest nagu täringu- või mündivise, ruletiratas ning loteriimasinad. Ettearvamatust nendes protsessides on võimalik põhjendada kaoseteooriaga ning dünaamiliste süsteemide ebastabiilsusega. Vastavate protsesside tulemused sõltuvad pisidetailidest ja nii-öelda varjatud parameetritest, mis muudavad nende protsesside lõppoleku ennustamise võimatuks. Olgugi et selliste makroskoopiliste protsesside kasutamine on enamjaolt levinud hasartmängunduses, kirjeldas Inglise teadlane Francis Galton 1890. aastal, kuidas täringuga teaduslikel eesmärkidel juhuarve genereerida.

Juhuarve kasutatakse nii sümmeetrilises kui ka asümmeetrilises krüptograafias genereerimaks võtmeid, mille salastatusel ja ettearvamatusel põhineb krüptitud andmete turvalisus ja terviklikkus.

Tööpõhimõtted
-------------

Juhuslikkuse aluseks on peamiselt kaks fundamentaalset allikat: kvantmehaanika aatomi tasemel ja soojusmüra. Kvantmehaanika eeldab, et teatud füüsikalised protsessid, nagu aatomituuma lagunemine, on juhuslikud ja neid ei saa ennustada. Ning kuna me ei ela absoluutse nulltemperatuuri juures, on igale süsteemile omane teatud juhuslikkus. Näiteks õhumolekulid põrkuvad pidevalt üksteise vastu täiesti juhuslikult. 
Et kvantmehaaniliste sündmuste tulemusi ei saa põhimõtteliselt ennustada, on need juhuarvude genereerimise standardiks. Kvantmehaanilised sündmused, mida juhuarvugeneraatorites kasutatakse:

* Footonite – valgusosakeste – saatmine poolläbipaistvale peeglile, millelt footon kas peegeldub või läbib peeglit. Mõlemad juhud on teineteist välistavad ning vastavalt sellele, kas footon läbis/peegeldus, saadakse juhuslik biti väärtus "0" või "1".
* Geigeri loenduri tuvastatud tuumalagunemine

Soojusmüra on kergem tuvastada. Müra muundamisel bitijadaks võimendatakse saadud signaali, filtreeritakse ja muundatakse digitaalseks.

### Kellanäitude nihe

Lisaks eespool mainitud allikaile on juhuarvugeneraatorit võimalik ehitada lähtudes kellanäitude nihkest. Kellanäitude nihe viitab ilmingule, kus kahe võrreldava kella näidud ei muutu täpselt sama kiirusega. Seega mõne aja möödudes tekib nende kellade näitude vahel nihe. Juhuarvugeneraatoris kasutatakse kahte eraldi kristallostsillaatorit, mille võnkesagedused on erinevad. Näiteks üks ostsillaator võngub sekundi jooksul sada korda ja teine miljon korda. Keskmiselt võngub kiirem ostsillaator 10 000 võnget aeglase ostsillaatori ühe võnke kohta. Aga et kristallostsillaatorid ei ole täpsed, siis tegelik võngete arv erineb. Seda variatsiooni saab kasutada juhuslike bittide genereerimiseks. Näiteks kui kiirema ostsillaatorite võngete arv aeglase ostsillaatori ühe võnke kohta on paaritu arv, siis valitakse "0", ja kui võngete arv on paaris, siis valitakse "1". Selline kristallostsillaatorite paar võib seega genereerida sada juhuslikku bitti sekundis. Kuna aga sellised süsteemid on tavaliselt ühele poole kallutatud ja genereerivad näiteks rohkem ühtesid kui nulle, siis dekorreleeritakse väljund ning sajast bitist saadakse mõned tõeliselt juhuslikud.

### Muu

Tarkvaraarendajad, kel pole "õigeid" juhuarvugeneraatoreid käepärast, proovivad juhuslikkust saavutada olemasolevate vahenditega, näiteks mõõtes klahvivajutuste ajavahesid ning siis lugedes vastavast tulemusest vähima biti. Juhuslikkust võivad aitavad tekitada ka Wi-Fi müra  ning kõvaketta lugemis- ja kirjutuspeade liikumine. Sellised meetodid on riskantsed, sest piisavalt kaval pahalane võib tulemust mõjutada.

Dekorrelatsioon
---------------

Erinevate tööpõhimõtetega generaatorite väljastatavad bitijadad on kalduvad sisaldama rohkem, kas "1" või "0". Sellise ühele poole kallutatuse eemaldamiseks on kaks lähenemist. Üheks võimaluseks on riistvaraliselt signaali filtreerida, teiseks genereeritud bitijada vastavate algoritmidega "puhastada".

Üks selliseid algoritme on John von Neumanni loodud lihtne viis, kuidas bitijada kallutatust vähendada. Algoritm võrdleb kahte bitti korraga, rakendades ühte otsust kolmest: kui kaks järjestikust bitti on võrdsed, siis neid ei kasutata; "1" ja "0" järjestikusel esinemisel saadakse "1"; "0" ja "1" järjestikusel esinemisel saadakse "0". See vähendab kallutatust ning seda on lihtne rakendada arvuti programmina või digitaalloogikas.

Probleemid
----------

Töökindlaid juhuarvugeneraatoreid on keeruline konstrueerida. Üldjuhul hakkavad riistvaralised generaatorid teatud aja möödudes väljastama aina väiksema juhuslikkusega arve. Töökindluse tagamiseks on enamikul juhuarvugeneraatoritel ehitatud sisse teatud testmehhanismid või kontrollib juhuslikkust tarkvara. RFC 4086 ja FIPS 140-2 kirjeldavad vastavaid teste.

Juhuarvugeneraatorite võrdlus
-----------------------------

| Tootja | Mudel | Protsess | Liides | OS | Hind | Läbilaskvus |
| --- | --- | --- | --- | --- | --- | --- |
| Simtec Electronics | Entropy Key | müra | USB | Windows/Linux/BSD | 36 £ | 32 kbit/s |
| ID Quantique SA | Quantis-USB | kvantoptika | USB | Windows/Linux | 990 € | 4 Mbit/s |
| ID Quantique SA | Quantis-PCI-4 | kvantoptika | PCI | Windows/Linux | 2230 € | 16 Mbit/s |
| Protego | SG100 | kvantmehaanika | SERIAL | Windows/Linux/Solaris | 249 € | 128 kbit/s |
| Protego | SG100-EVO | kvantmehaanika | USB | Windows/Linux/Solaris | – | 128 kbit/s |
| Comscire | R2000KU | soojusmüra | USB | Windows | 895 $ | 2 Mbit/s |
| LETech | GRANG-PCIC-8CH | soojusmüra | PCI | Linux/Windows | – | 50 Mbit/s |
| LETech | GRANG-Server | soojusmüra | 5 × GB Etherneti pordid | Linux/Windows | – | 150 Mbit/s |
| LETech | GRANG-24CH | soojusmüra | PCI | Linux/Windows | – | 550 Mbit/s  |

Viited
------

1. ↑  Cryptanalytic Attacks on Pseudorandom Number Generators, 27. nov 2011
2. ↑  "IDquantique". 27. nov. 2011
3. ↑  "Nuclear Decay random number generator". 27. nov. 2011
4. ↑  "Random numbers from WiFi background noise". 27.11.2011
5. ↑  "Entropy Key uses John von Neumann algorithm to remove bias". 27.11.2011
6. ↑  "Tollef". Originaali arhiivikoopia seisuga 15. august 2011. Vaadatud 26. novembril 2011. 27.11.2011
7. 1 2  "Product overview". 27.11.2011
8. ↑  "Product overview". Originaali arhiivikoopia seisuga 1. jaanuar 2012. Vaadatud 26. novembril 2011. 27.11.2011
9. ↑  "Product overview". Originaali arhiivikoopia seisuga 17. jaanuar 2012. Vaadatud 26. novembril 2011. 27.11.2011
10. ↑  "Details". Originaali arhiivikoopia seisuga 25. november 2011. Vaadatud 26. novembril 2011. 27.11.2011
11. 1 2 3  "LETech". Originaali arhiivikoopia seisuga 12. november 2011. Vaadatud 26. novembril 2011. 27.11.2011