Riistvaraline juhuarvugeneraator

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.

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.