Pseudojuhuslik arv: saamise meetodid, eelised ja puudused

Sisukord:

Pseudojuhuslik arv: saamise meetodid, eelised ja puudused
Pseudojuhuslik arv: saamise meetodid, eelised ja puudused
Anonim

Pseudojuhuslik arv on eriarv, mille genereerib spetsiaalne generaator. Deterministlik juhusliku biti generaator (PRNG), tuntud ka kui deterministlik juhusliku biti generaator (DRBG), on algoritm numbrijada genereerimiseks, mille omadused on ligikaudsed juhuslike arvujadade omadustele. Loodud PRNG-jada ei ole tõeliselt juhuslik, kuna see on täielikult määratud algväärtusega, mida nimetatakse PRNG seemneks, mis võib sisaldada tõeliselt juhuslikke väärtusi. Kuigi juhuslikule lähedasemaid jadasid saab genereerida riistvaraliste juhuslike arvude generaatorite abil, on pseudojuhuslike arvude generaatorid praktikas olulised numbrite genereerimise kiiruse ja nende reprodutseeritavuse seisukoh alt.

Numbrite randomiseerimine
Numbrite randomiseerimine

Rakendus

PRNG-d on kesksel kohal sellistes rakendustes nagu simulatsioon (nt Monte Carlo jaoks), elektroonilised mängud (nt protseduuride genereerimiseks) ja krüptograafia. Krüptograafilised rakendused nõuavad väljunditandmed ei olnud varasema teabe põhjal ennustatavad. Vaja on keerukamaid algoritme, mis ei päri lihtsate PRNG-de lineaarsust.

Nõuded ja tingimused

Head statistilised omadused on PRNG saamise keskne nõue. Üldiselt on vaja hoolikat matemaatilist analüüsi, et olla kindel, et RNG genereerib numbreid, mis on piisav alt lähedased juhuslikkusele, et sobida ettenähtud kasutusega.

John von Neumann hoiatas PRNG kui tõeliselt juhusliku generaatori valesti tõlgendamise eest ja naljatas, et "Igaüks, kes arvestab juhuslike arvude genereerimiseks aritmeetilisi meetodeid, on kindlasti patus."

Kasuta

PRNG saab käivitada suvalisest algolekust. Selle olekuga lähtestamisel genereerib see alati sama jada. PRNG periood on defineeritud järgmiselt: maksimaalne mittekorduva jada eesliite pikkuse kõigis algolekutes. Periood on piiratud olekute arvuga, mida tavaliselt mõõdetakse bittides. Kuna perioodi pikkus võib iga "oleku" biti lisamisega kahekordistuda, on lihtne luua PRNG-sid, mille perioodid on paljude praktiliste rakenduste jaoks piisav alt suured.

Suured randomiseerimisgraafikud
Suured randomiseerimisgraafikud

Kui PRNG sisemine olek sisaldab n bitti, ei saa selle periood olla suurem kui 2n tulemust, see on palju lühem. Mõne PRNG puhul saab kestuse arvutada kogu perioodist mööda minemata. Lineaarse tagasiside nihkeregistrid (LFSR) on tavaliselton valitud nii, et nende perioodid on võrdsed 2n − 1.

Lineaarsetel kongruentsiaalsetel generaatoritel on perioode, mida saab arvutada faktooringu abil. Kuigi PPP kordab oma tulemusi pärast perioodi lõppu, ei tähenda korduv tulemus perioodi lõppu, kuna selle sisemine olek võib olla suurem kui väljund; see on eriti ilmne ühebitise väljundiga PRNG-de puhul.

Võimalikud vead

Defektsete PRNG-de leitud vead ulatuvad peentest (ja tundmatutest) ilmseteni. Näiteks võib tuua RANDU juhuslike arvude algoritmi, mida on suurarvutitel kasutatud aastakümneid. See oli tõsine puudus, kuid selle ebapiisavus jäi pikka aega märkamatuks.

Numbrigeneraatori töö
Numbrigeneraatori töö

Paljudes valdkondades on uuringud, milles on kasutatud juhuslikku valikut, Monte Carlo simulatsioone või muid RNG-l põhinevaid meetodeid, palju vähem usaldusväärsed, kui võiks olla halva kvaliteediga GNPG tulemus. Isegi tänapäeval on mõnikord vajalik ettevaatus, nagu näitab hoiatus ajakirjas International Encyclopedia of Statistical Science (2010).

Edukas juhtumiuuring

Näiteks vaadake lai alt kasutatavat Java programmeerimiskeelt. 2017. aasta seisuga tugineb Java PRNG jaoks endiselt lineaarsele kongruentsigeneraatorile (LCG).

Ajalugu

Esimene PRNG, mis väldib tõsiseid probleeme ja töötab siiski üsna kiiresti,oli Mersenne Twister (seda käsitletakse allpool), mis ilmus 1998. aastal. Sellest ajast alates on välja töötatud teisi kvaliteetseid PRNG-sid.

Põlvkonna kirjeldus
Põlvkonna kirjeldus

Aga pseudojuhuslike numbrite ajalugu sellega ei lõpe. 20. sajandi teisel poolel kuulusid PRNG-de jaoks kasutatavate algoritmide standardklassi lineaarsed kongruentsed generaatorid. LCG kvaliteet oli teadaolev alt ebapiisav, kuid paremaid meetodeid polnud saadaval. Press jt (2007) kirjeldasid tulemust järgmiselt: "Kui raamatukogu riiulitelt kaoksid kõik teadusartiklid, mille tulemused on [LCG-de ja nendega seotud] tõttu kahtluse all, tekiks igal riiulil rusikasuurune tühimik."

Peamine saavutus pseudojuhuslike generaatorite loomisel oli kaheelemendilises väljas lineaarsel korduval põhinevate meetodite kasutuselevõtt; sellised ostsillaatorid on ühendatud lineaarse tagasiside nihkeregistritega. Need olid pseudojuhuslike arvuandurite leiutamise aluseks.

Eelkõige vältis Mersen Twisteri 1997. aasta leiutis paljusid varasemate generaatoritega seotud probleeme. Mersenne Twisteri periood on 219937–1 iteratsiooni (≈4,3 × 106001). On tõestatud, et see on ühtlaselt jaotunud (kuni) 623 dimensioonis (32-bitiste väärtuste puhul) ja oli kasutuselevõtu ajal kiirem kui teised statistiliselt usaldusväärsed generaatorid, mis toodavad pseudojuhuslikke arvujadasid.

2003. aastal tutvustas George Marsaglia xorshift generaatorite perekonda, mis põhinevad samuti lineaarsel kordusel. Need generaatorid on äärmiselton kiired ja – kombineerituna mittelineaarse operatsiooniga – läbivad ranged statistilised testid.

2006. aastal töötati välja WELLi generaatorite perekond. WELL-generaatorid parandavad teatud mõttes Twister Mersenne'i kvaliteeti, millel on liiga suur olekuruum ja nendest taastumine on väga aeglane, genereerides pseudojuhuslikke nulle sisaldavaid nulle.

Juhuslike arvude iseloomustus
Juhuslike arvude iseloomustus

Krüptograafia

Krüptograafiliste rakenduste jaoks sobivat PRNG-d nimetatakse krüptograafiliselt turvaliseks PRNG-ks (CSPRNG). CSPRNG nõue on, et ründajal, kes ei tunne seemet, on generaatori väljundjada juhuslikust jadast eristamisel vaid marginaalne eelis. Teisisõnu, kuigi PRNG on nõutav ainult teatud statistiliste testide läbimiseks, peab CSPRNG läbima kõik statistilised testid, mis on piiratud polünoomilise ajaga seemne suuruses.

Kuigi selle omaduse tõestus ületab arvutusliku keerukuse teooria praeguse taseme, saab kindlaid tõendeid saada, kui taandada CSPRNG probleemiks, mida peetakse raskeks, nagu täisarvude faktoriseerimine. Üldiselt võib algoritmi CSPRNG-na sertifitseerimiseks vaja minna aastaid ülevaatamist.

On näidatud, et tõenäoliselt sisestas NSA asümmeetrilise tagaukse NIST-sertifikaadiga Dual_EC_DRBG pseudojuhuslike numbrite generaatorisse.

BBS generaator
BBS generaator

Pseudojuhuslikud algoritmidnumbrid

Enamik PRNG-algoritme loob jadasid, mis on jaotatud ühtlaselt mitme testiga. See on lahtine küsimus. See on krüptograafia teoorias ja praktikas üks keskseid: kas on võimalik eristada kvaliteetse PRNG väljundit tõeliselt juhuslikust jadast? Selle sätte puhul teab lahendaja, et kasutati tuntud PRNG-algoritmi (kuid mitte olekut, millega see initsialiseeriti) või kasutati tõeliselt juhuslikku algoritmi. Ta peab neil vahet tegema.

Enamike PRNG-sid kasutavate krüptoalgoritmide ja protokollide turvalisus põhineb eeldusel, et sobiva PRNG kasutamise ja tõeliselt juhusliku järjestuse kasutamise vahel on võimatu vahet teha. Selle sõltuvuse lihtsaimad näited on voošifrid, mis enamasti töötavad lihttekstisõnumi väljajätmise või PRNG-väljundiga saatmisega, tekitades šifriteksti. Krüptograafiliselt piisavate PRNG-de kujundamine on äärmiselt keeruline, kuna need peavad vastama täiendavatele kriteeriumidele. Selle perioodi suurus on PRNG krüptograafilise sobivuse oluline tegur, kuid mitte ainus.

Pseudojuhuslikud numbrid
Pseudojuhuslikud numbrid

John von Neumanni poolt 1946. aastal välja pakutud varajane arvuti PRNG on tuntud kui keskmiste ruutude meetod. Algoritm on järgmine: võtke suvaline arv, asetage see ruutu, eemaldage saadud arvu keskmised numbrid "juhusliku arvuna", seejärel kasutage seda arvu järgmise iteratsiooni algusnumbrina. Näiteks numbri 1111 ruudustamiseks annab1234321, mille saab kirjutada kui 01234321, on 8-kohaline arv 4-kohalise arvu ruut. See annab 2343 "juhusliku" arvuna. Selle protseduuri kordamise tulemus on 4896 jne. Von Neumann kasutas 10-kohalisi numbreid, kuid protsess oli sama.

„Keskväljaku” puudused

Keskmise ruudu meetodi probleem seisneb selles, et kõik jadad korduvad lõpuks, mõned väga kiiresti, näiteks: 0000. Von Neumann teadis sellest, kuid leidis oma eesmärkide jaoks piisava lähenemisviisi ja oli mures, et matemaatika "parandused" lihts alt peidavad vead nende eemaldamise asemel.

Generaatori olemus
Generaatori olemus

Von Neumann leidis, et riistvaralised juhuslike ja pseudojuhuslike arvude generaatorid ei sobi: kui need genereeritud väljundit ei salvesta, ei saa neid hiljem vigade suhtes kontrollida. Kui nad peaksid oma tulemused kirja panema, ammendaksid nad arvuti piiratud vaba mälu ja seega ka arvuti võime numbreid lugeda ja kirjutada. Kui kaartidele kirjutataks numbreid, võtaks nende kirjutamine ja lugemine palju kauem aega. ENIAC-arvutis kasutas ta "keskmise ruudu" meetodit ja viis pseudojuhuslike arvude hankimise protsessi läbi mitusada korda kiiremini kui perfokaartidelt arvude lugemine.

Keskmine ruut on sellest ajast peale asendatud keerukamate generaatoritega.

Uuenduslik meetod

Hiljutine uuendus on ühendada keskmine ruut Weili jadaga. See meetod tagab toodete kõrge kvaliteedipikk periood. See aitab saada parimaid pseudojuhuslike arvude valemeid.

Soovitan: