kauno technologijos universitetas - atsitiktiniai … · web viewaišku, kad sveikųjų skaičių...
TRANSCRIPT
KAUNO TECHNOLOGIJOS UNIVERSITETAS
FUNDAMENTALIŲJŲ MOKSLU FAKULTETAS
TAIKOMOSIOS MATEMATIKOS KATEDRA
P160D003 TAIKOMOSIOS STATISTIKOS METODAI IR PROGRAMINĖS
PRIEMONĖS
ATSITIKTINIŲ SKAIČIŲ SEKŲ GENERATORIŲ SAVYBIŲ ANALIZĖ
Referatas
Atliko: dokt. Aleksejus Michalkovič
Priemė: doc. V. Janilionis
KAUNAS, 2010
Turinys1. Atsitiktiniai skaičių generatoriai..............................................................................................................................3
2. Atsitiktinumo testai.................................................................................................................................................4
2.1. Statistiniai testai..............................................................................................................................................4
2.1.1. Pirsono kriterijus.....................................................................................................................................5
2.1.2. Knuto testai..............................................................................................................................................5
2.1.3. DIEHARD testai....................................................................................................................................11
2.1.4. NIST testai.............................................................................................................................................16
2.2. Statistinių testų rezultatų vertinimas..........................................................................................................29
2.3. Grafiniai testai...............................................................................................................................................30
2.3.1. Elementų pasiskirstymo histograma......................................................................................................30
2.3.2. Pasiskirstymas plokštumoje...................................................................................................................30
2.3.3. Serijų testas............................................................................................................................................31
2.3.4. Monotoniškumo testas...........................................................................................................................31
2.3.5. Autokoreliacinė funkcija........................................................................................................................31
2.3.6. Tiesinio sudėtingumo profilis................................................................................................................32
2.3.7. Grafinis spektrų testas............................................................................................................................32
Išvados..........................................................................................................................................................................34
Priedas. Atsitiktinių skaičių generatorių testų programinė realizacija...........................................................................35
2
1. Atsitiktiniai skaičių generatoriai
Modeliuojant matematinį uždavinį dažnai tenka generuoti atsitiktinius skaičius bei jų sekas naudojant
programines priemones, kurios yra vadinamos atsitiktinių skaičių generatoriais. Jų pagrindinė paskirtis yra
generuoti skaičius ir jų sekas taip, kad sekos nariai būtų nepriklausomi nuo kitų jos narių. Dažniausiai yra
naudojami pseudoatsitiktinių skaičių generatoriai. Esminis šių generatorių skirtumas nuo atsitiktinių skačių
generatorių yra tas, jog sekos nariai yra pasiskirstę pagal tam tikrą skirstinį (tolygųjį, normalųjį ir t.t). Šių
generatorių taikymo įvairovė yra labai plati: nuo informatikos uždavinių iki kosminių ryšių.
Viena iš matematinių sričių, kurioje pseudoatsitiktinių skaičių generatoriai (PASG) yra ypač svarbūs,
yra kriptografija. Šie generatoriai yra viena iš svarbiausių bet kokios informacijos saugos sistemos dalių ir
yra naudojami įvairiems kriptografiniams uždaviniams spręsti bei kriptografiniam saugumui užtikrinti, todėl
jiems yra keliami tokie reikalavimai:
kriptografinis saugumas;
geros statistinės savybės, t.y sugeneruota skaičių seka turi mažai skirtis nuo atsitiktinės sekos;
didelis generuojamos sekos periodas;
efektyvus programinis realizavimas.
Tarkime, kad piktavalis žino fiksuoto ilgio PASG sugeneruotos sekos fragmentą γi γi+1…γ j. Vienas iš
reikalavimų, kad PASG būtų kriptografiškai saugus yra sekančio bito testas (angl. next-bit test). Šio testo
principas yra toks: piktavalis negali suprognozuoti sekančio bito γ j+1 su tikimybe 0,5 per polinominį laiką.
Buvo įrodyta, jog PASG, kuris išlaiko sekančio bito testą, taip pat išlaiko ir kitus per polinominį laiką
realizuojamus statistinius atsitiktinumo testus. Tačiau tenkinantis sekančio bito testą PASG nebūtinai yra
kriptografiškai saugus. Nagrinėkime tokį pavyzdį:
Pavyzdys PASG generuoja skaičiaus π bitus pradedant nuo tam tikro nežinomo bito. Šis generatorius
išlaiko sekančio bito testą, tačiau nėra kriptografiškai saugus, nes turint informaciją koks sekos bitas yra
naudojamas duotuoju laiko momentu, galima surasti visus bitus, kurie buvo sugeneruoti prieš šį bitą.
Taigi matome, kad kriptografiškai saugus PASG turi tenkinti reikalavimą, jog piktavalis negali gauti
sekos narių nuo γ1 iki γ i−1 per polinominį laiką. Taip pat vienas iš reikalavimų kriptografiškai saugiam
algoritmui yra tas, kad šį algoritmą galima būti naudoti generuojant pseudoatsitiktinių skaičių seką. Tai
reiškia, kad šios sekos turi būti testuojamos taikant statistinius atsitiktinumo testus. Dėl šios priežasties
kriptografinį PASG saugumą taip pat galima suformuluoti ir nagrinėjant jo statistines savybes. Tokiu atveju
generatoriaus kriptografinis saugumas yra suprantamas tokiu būdu:
3
jokie statistiniai atsitiktinumo testai negali aptikti dėsningumo tarp sugeneruotų sekos narių;
jeigu pradinės reikšmės yra atsitiktinės, tai PASG generuoja statistiškai nepriklausomas sekas
PASG, tenkinantis šiuos reikalavimus yra vadinamas statistiškai saugiu.
2. Atsitiktinumo testai
Kadangi bet kokios informacijos saugos sistemos kriptografinis saugumas gali stipriai priklausyti nuo
PASG savybių, yra būtina užtikrinti, jog šio generatoriaus sugeneruotos skaičių sekos būtų atsitiktinės. Tai ir
yra pagrindinis statistinių atsitiktinumo testų tikslas. Taikant šiuos testus yra keliama hipotezė H, jog skaičių
seka yra atsitiktinė. Alternatyvioji hipotezė H a – seka yra neatsitiktinė. Apskaičiuojama skaitinė sekos
charakteristika (ši charakteristika yra vadinama statistika) ir tikimybė pvalue, kuri reiškia tikimybę, jog
idealus atsitiktinių skaičių generatorius gali sugeneruoti seką, kuri būtų mažiau atsitiktinė, negu nagrinėjama
atliekamo testo atžvilgiu. Testas yra išlaikytas, jeigu tikimybė pvalue yra didesnė už fiksuotą pirmos rūšies
klaidos tikimybę α. Dažniausiai yra naudojami šie atsitiktinumo testų rinkiniai:
DIEHARD testai
Knuto testai
NIST testai
DIEHARD testai pirmą karta buvo aprašyti 1995 metais ir šiuo metu manoma, kad šis testų rinkinys
yra vienas iš griežčiausių testų rinkinių. Dažniausiai yra naudojami 12 DIEHARD testų.
Visi Donaldo Knuto testai remiasi Pirsono kriterijumi ir pirmą kartą buvo paskelbti jo monografijoje
„Programavimo menas“ (angl. „The Art Of Computer Programming“) 1969 metais. Taip pat Knutas pasiūlė
kelis originalius algoritmus, kurie žymiai sumažina laiką, kuris yra reikalingas testui naudoti. Šiame darbe
yra nagrinėjami 7 Knuto testai.
NIST testai remiasi statistinėmis atsitiktinių sekų savybėmis. Šiuos testus sukūrė JAV Nacionalinio
standartų ir technologijų instituto (angl. The National Institute of Standards and Technology (NIST))
mokslininkai. Iš viso yra 15 NIST testų.
Tačiau yra ir dar viena atsitiktinių testų grupė – grafiniai testai. Šių testų rezultatai yra pateikiami
grafiškai ir vartotojas turi pats interpretuoti šiuos rezultatus. Iš viso yra 7 grafiniai testai. Vienas iš šių testų
trūkumų yra tai, kad skirtingi vartotojai gali skirtingai interpretuoti tuos pačius rezultatus.
4
2.1. Statistiniai testai
PASG sugeneruotos skaičių sekos atsitiktinumui nustatyti gali būti taikomi įvairūs statistiniai testai.
Kadangi atsitiktinumas gali būti aprašytas naudojant tikimybių teoriją bei statistiką, tai egzistuoja begalinis
skaičius pačių įvairiausių statistinių testų, kurie įvertina sugeneruotą seką ir pagal nustatytus šablonus gali
pateikti vienareikšmį atsakymą ar ši seka yra atsitiktinė. Taigi bet koks baigtinis statistinių testų rinkinys
negali būti pavadintas „užbaigtu“. Todėl bet kokio statistinio testo rezultatai turi būti interpretuojami taip,
kad galima būtų išvengti neteisingų išvadų apie nagrinėjamo PASG statistines savybes.
Atliekant bet kokį statistinį testą labai svarbu yra pasirinkti tinkamą statistiką. Kadangi statistika yra
atsitiktinis dydis, tai ji yra pasiskirsčiusi pagal tam tikrą skirstinį. Tai reiškia, jog galima nustatyti griežtą
matematinę taisyklę (kuri vadinama kriterijumi), kuri pateikia vienareikšmį atsakymą ar hipotezė H 0 yra
priimtina.
2.1.1. Pirsono kriterijus
Vienas iš dažniausiai taikomų kriterijų hipotezei apie skirstinio funkciją tikrinti yra chi-kvadrato ( χ2)
kriterijus. Taikant šį kriterijų atsitiktinio dydžio X stebėjimų imtį (X1 , X2 ,…, Xn) skaidome į k intervalų.
Tegu pi – teorinė tikimybė, kad stebėjimas priklauso i-tajam intervalui, o Y i – stebėjimų, kurie priklauso i-
tajam intervalui skaičius. Tada statistikos
χ2 (obs )=∑i=1
k (Y i−np i )2
n pi
reikšmė turi būti mažesnė už chi-kvadrato skirstinio su k-1 laisvės laipsniu α kvantilį χα , k−12 .
Šį kriterijų Donaldas Knutas panaudojo aprašant savo atsitiktinumo testų rinkinį. Taip pat šį kriterijų
naudoja ir kai kurie DIEHARD bei NIST testai.
2.1.2. Knuto testai
Knuto testų rinkinį sudaro testai, kurie yra tradiciškai naudojami PASG statistinių savybių analizei.
Šiame skyrelyje paminėsime dažniausiai naudojamus Knuto testus.
5
2.1.2.1. Nesikertančių serijų testas
Šio testo tikslas yra nustatyti bitų sekos atsitiktinumą analizuojant nesikertančių serijų ilgius. Šis testas
gali būti naudojama kai sugeneruojama sveikųjų skaičių arba bitų seka.
Tarkime turime dvejetainę seką ε=ε1 ε2…ε n. Šią seką suskaidome į nesikertančias serijas, kurių ilgis
yra m (jeigu paskutinės serijos ilgis yra mažesnis už m, tai ji yra išmetama). Nesikertančių serijų dažnius
žymėkime νi1 i2…im. Apskaičiuojame statistiką
χ2 (obs )=∑ν i1i2…im
(νi1 i2…im−[ nm ] ∙ 12m )
2
[ nm ] ∙ 12m
Testas yra išlaikytas, jeigu šios statistikos reikšmė yra mažesnė už χα , 2m−12 prie fiksuoto rekšmingumo
lygmenio α.
Tarkime turime sveikųjų skaičių seką ε=ε1 ε2…ε n. Tokiu atvėju kiekvienai sveikųjų skaičių porai
(q ,r ) (kategorijai), čia 0≤q , r ≤d, o skaičius d pasirenkamas taip, kad galiotų nelygybė n≥5d2,
apskaičiuojame dažnį νqr. Apskaičiuojame statistiką
χ2 (obs )=∑ν i1i2…im
(νqr−[ n2 ] ∙ 1d2 )
2
[ n2 ] ∙ 1d2
Testas yra išlaikytas, jeigu šios statistikos reikšmė yra mažesnė už χα , d2−12 prie fiksuoto reikšmingumo
lygmenio α.
Aišku, kad sveikųjų skaičių atveju dažnius galima skaičiuoti ne tik skaičių poroms, bet ir trejetams ir
t.t. Tačiau, kadangi taikant Pirsono kriterijų skaičius n turi būti pakankamai didelis lyginant su k, tai tokiu
atveju skaičiaus d reikšmę reikėtų mažinti tam, kad kategorijų skaičius nebūtų per didelis. Dėl šios
priežasties, kai serijos dydis yra didesnis už 3 taikomi kiti kriterijai.
Pavyzdys Įvestis: bitų seka ε=11001001000011111101101010100010001000010110100011,
sekos ilgis n=50, serijos ilgis m=3.
Testas: Suskaidome nagrinėjamą seką į serijas:
ε=110010 010 000 111111 011010101 000 100 010 000 101101 00011
6
Matome, kad paskutinės serijos ilgis yra 2. Taigi šios serijos nenagrinėjame. Apskaičiuojame
kiekvienos serijos dažnį:
ν000=4 ν001=0 ν010=4 ν011=1
ν100=1 ν101=3 ν110=1 ν111=2
Statistikos reikšmė χ2 (obs )=8. Kadangi χ0,05 ;72 =14,07, tai testas yra išlaikytas, kai reikšmingumo
lygmuo α=0,05.
2.1.2.2. Intervalų testas
Intervalų testas tikrina ar sugeneruotos sekos simboliai yra pasiskirstę tolygiai. Testo tikslas yra
pasiekiamas atliekant posekių, kurių elementai priklauso fiksuotam intervalui, ilgių analizę. Nemažindami
bendrumo tarkime, kad visi sekos ε=ε1 ε2…ε n nariai yra tarp 0 ir 1.
Atsitiktinai pasirenkame du skaičius α ir β tokius, kad 0≤α<β ≤1. Skaičius p=β−α yra tikimybė, kad
sekos narys ε i∈ ¿. Išskirkime nagrinėjamos sekos posekį ε '=ε j ε j+1…ε j+ r taip, kad paskutinis posekio narys
ε j+ r∈ ¿, o likusieji posekio nariai ε s∉¿. Ši posekį vadinsime intervalu, kurio ilgis yra r. Kiekvienam skaičiui
r nuo 0 iki t=max r apskaičiuojame dažnį νr (kiek nagrinėjama seka turi ilgio r intervalų). Apskaičiuojame
statistiką (η – bendras intervalų skaičius)
χ2 (obs )=∑i=1
t−1 (νi−η p (1−p )i )2
η p (1−p )i+
(ν t−η (1−p )t )2
η (1−p )t
Testas yra išlaikytas, jeigu šios statistikos reikšmė yra mažesnė už χα , t2 prie fiksuoto rekšmingumo
lygmenio α.
Naudojant intervalų testą dažnai pasirenkamos reikšmės α=0 arba β=1. Atsikirais atvėjais
(α ; β )=(0 ;0,5) ir (α ; β )=(0,5 ;1) sakoma, kad testuojamas „nukrypimas nuo vidurkio“.
Šio testo trūkumas yra tai, kad neatsitiktinė seka gali turėti per mažai intervalų ir dėl to testas gali būti
neefektyvus.
Pavyzdys: Įvestis: ε=(0 ;0,625; 0,5;0,125 ;0 ;0,5 ;0,75 ;0,125), α=0, β=0,25.
Testas: Ši seka turi 2 nulinio ilgio intervalus (šie intervalai yra pastorinti) ir 2 intervalus, kurių ilgis yra
r=2. Taigi turime tokius dažnius: ν0=2, ν1=0 ir ν2=2. Iš viso turime 4 intervalus.
7
Statistikos reikšmė χ2 (obs )=3,111. Kadangi χ0,05 ;22 =5,99, tai testas yra išlaikytas, kai reikšmingumo
lygmuo α=0,05.
2.1.2.3. Kombinacijų testas
Šis testas nagrinėja ar sugeneruotos sekos elementai yra tolygiai pasiskirstę, analizuodamas įvairias
elementų kombinacijas posekiuose.
Tarkime turime skaičių seką ε=ε1 ε2…ε n. Kiekvieną sekos narį sudaro m bitų. Šią seką suskaidome į
vienodo ilgio posekius (šį ilgį žymėkime t). Likusių bitų nenagrinėjame. Posekių, kuriuose skirtingų
elementų skaičius yra lygus i, skaičių žymėkime νi (r=max i). Apskaičiuojame statistiką
χ2 (obs )=∑i=1
r (ν i−[nt ] ∙ pi)2
[ nt ] ∙ pi
čia pi=d (d−1 )…(d−i+1)
dk {ki } – tikimybė kad posekį sudaro i skirtingų elementų , d=2m−1, o {ki } –
Stirlingo skaičiai, kurie yra apibrėžiami taip:
{ab}={1 , kaia=b arbab=1 ir a>00 , kai b=0arbaa<b
b {a−1b }+{a−1
b−1}, kitaip
Testas yra išlaikytas, jeigu statistikos reikšmė yra mažesnė už χα , r−12 prie fiksuoto rekšmingumo
lygmenio α. Kai t=5 testo idėja primena pokerio žaidimą, todel kartais šį testą vadina pokerio testu (arba
pokerio kriterijumi)
Kadangi tikimybės pi yra labai mažos kai i=1 arba i=2, tai kartais šiuos dažnius apjungia su kitais į
vieną bendrą rezultatą (pvz ν123 ar pan.).
2.1.2.4. Kuponų testas
Šis testas nagrinėja ar sugeneruotos sekos elementai yra tolygiai pasiskirstę, analizuodamas įvairias
elementų kombinacijas posekiuose.
8
Tarkime turime skaičių seką ε=ε1 ε2…ε n. Kiekvieną sekos narį sudaro m bitų. Formuojami ilgio r,
r=2m ,t (t=max r) posekiai, kuriuos sudaro pilnas skaičių nuo 0 iki 2m−1 rinkinys. Kiekvienam posekiui
apskaičiuojamas dažnis νr. Apskaičiuojame statistika
χ2 (obs )=∑i=1
r (ν i−s ∙ pi )2
s ∙ pi
čia s=∑j=d
t
ν j , pr=d !dr {r−1
d−1}, r=d ,(t−1), pt=1− d!d t−1 {t−1
d }, d=2m−1.
Testas yra išlaikytas, jeigu statistikos reikšmė yra mažesnė už χα , t−2m+12 prie fiksuoto rekšmingumo
lygmenio α.
Kuponų testas yra specifinis, nes jis atlieka ne visos sekos, o t ilgio rinkinių analizę. Šį testą lengvai
gali išlaikyti bet koks PASG, jeigu šio generatoriaus sugeneruotos sekos bet kokiam d ilgio posekiui galioja
savybė, kad kiekvienam skaičiui iš intervalo [0 ;d−1] tikimybė priklausyti posekiui yra artima 1.
2.1.2.5. Kėlinių testas
Testas nagrinėja sekos elementų tolygiškumą, atlikdamas skaičių tarpusavio padėties (t.y ε i<ε j<…<ε k
) posekiuose analizę.
Tarkime turime skaičių seką ε=ε1 ε2…ε n. Kiekvieną sekos narį sudaro m bitų. Šią seką suskaidome į
vienodo ilgio posekius (šį ilgį žymėkime t). Likusių bitų nenagrinėjame. Kievienas posekis turi lygiai t !
skirtingų skaičių tarpusavio padėties variantų. Kiekvienai skaičių tarpusavio padėčiai apskaičiuojamas
dažnis νi , i=1 ,t ! ir apskaičiuojama statistika
χ2 (obs )=∑i=1
t ! (ν i−[ nt ] ∙ 1t ! )
2
[ nt ] ∙ 1t !
Testas yra išlaikytas, jeigu statistikos reikšmė yra mažesnė už χα , t !−12 prie fiksuoto rekšmingumo
lygmenio α.
Pavyzdys Įvestis: ε=35 4 21 46 1 0, sekos ilgis n=9, posekio ilgis t=2.
Testas: Suskaidome seką į posekius. Paskutinio skaičiaus nenagrinėjame. Kiekvienai skaičių
tarpusavio padėčiai apskaičiuojame dažnį. Šiuo atveju turime 2 !=2 variantus:
9
ν1 ( pirmasskai č iusmažesnis už antrąjį )=2
ν2 ( pirmasskai č ius didesnis už antrąjį )=2
Statistikos reikšmė χ2 (obs )=0. Kadangi χ0,05 ;12 =3,84, tai testas yra išlaikytas, kai reikšmingumo
lygmuo α=0,05.
2.1.2.6. Monotoniškumo testas
Monotoniškumo testas tikrina ar nagrinėjamos sekos elementai yra pasiskirstę tolygiai, atlikdamas
nedidėjimo arba nemažėjimo atkarpų analizę.
Tarkime turime skaičių seką ε=ε1 ε2…ε n. Ilgio i monotoninių atkaipų skaičių žymėkime νi (t=max i).
Apskaičiuojame statistiką (bendrą atkarpų skaičių žymėkime η)
χ2 (obs )=∑i=1
t (ν i−η ∙( 1i !
− 1(1+i )! ))
2
η ∙( 1i !
− 1(1+i )! )
Testas yra išlaikytas, jeigu statistikos reikšmė yra mažesnė už χα , t−12 prie fiksuoto rekšmingumo
lygmenio α.
Pavyzdys Įvestis: ε=35 4 21 46 1 0
Testas: nedidėjimo intervalai: ε=|3|5 4 21|4|6 1 0. Taigi turime tokius dažnius:
ν1=2 ν2=0 ν3=1 ν4=1
Bendras atkarpų skaičius η=4.
Statistikos reikšmė χ2 (obs )=4,65. Kadangi χ0,05 ;32 =7,82, tai testas yra išlaikytas, kai reikšmingumo
lygmuo α=0,05.
2.1.2.7. Koreliacijos testas
Šis testas tikrina nagrinėjamos sekos elementų nepriklausomumą.
10
Tarkime turime skaičių seką ε=ε 0 ε1…εn−1. Įveskime žymėjimus shif t j (εi )=ε ( i+ j)mod n s=∑j=0
n−1
ε j,
S=∑j=0
n−1
ε j2. Apskaičiuojame statistiką
C j=n ∙∑
i=0
n−1
[εi ∙ shif t j(εi) ]−s2
nS−s2
Šios statistikos reikšmė bet kokiai j reikšmei turi priklausyti intervalui
[ −1n−1
−2,43σn ;−1
n−1+2,43σn]
čia σ n2= n2
(n−1 )2(n−2) .
Pavyzdys Įvestis: ε=1323 2, sekos ilgis n=2, j=2.
Testas: Statistikos reikšmė C2=1, σ 52=0,52. Kadangi statistikos reikšmė patenka į intervalą
[−2,002 ;1,502 ], tai testas yra išlaikytas.
2.1.2.8. Knuto testų trūkumai
Nors Knuto testai yra pakankamai greiti jų esminiai trūkumai yra šie:
Testai neturi rekomenduojamų parametrų reikšmių, todėl kai kurių testų rezultatai gali
priklausyti nuo nagrinėjamos sekos ilgio.
Testai neturi programinės realizacijos
2.1.3. DIEHARD testai
DIEHARD testų rinkinys buvo pasiūlytas Dž. Marsaljos 1995 metais. Šiuos testus Marsalja naudojo
kongruentinių generatorių statistinėms savybėms tirti.
2.1.3.1. Tarpų tarp gimtadienių testas
11
Šio testo tikslas yra analizuojant intervalų tarp „gimtadienių“ ilgius nustatyti ar nagrinėjamos sekos
elementai yra pasiskirstę tolygiai.
Tarkime turime skaičių seką ε=ε1 ε2…ε n. Kiekvieną sekos elementą sudaro m bitų. Šios sekos
elementus surūšiuokime nemažėjimo tvarka. Taip gauname gimtadienių seką Y= y1 y2… yn. Suformuokime
tarpų tarp gimtadienių seką W= y1− y2 , y3− y2 ,…, yn− yn−1 , y1+2m− yn. Žymėkime ni tarpų, paskartojančių
sekoje i (i=0 , n) kartų, skaičių. Apskaičiuojame statistiką
χ2 (obs )=∑i=0
k (ni−npi )2
n p i
čia pi=λi e− λ
i !, λ= n3
4 ∙2m .
Testas yra išlaikytas, jeigu statistikos reikšmė yra mažesnė už χα , k2 prie fiksuoto rekšmingumo
lygmenio α.
Šio testo esminis trūkumas yra tas, kad jį yra sunku taikyti didelio ilgio sekoms. Taip yra todėl, kad
parametro λ reikšmė turi būti artima 1 (kitaip testo rezultatas bet kuriai sekai pasidaro neigiamas, nes
tikimybės pi tokiu atvėju artėja į 0), o tai reiškia kad pasirinkti parametrų n ir m reikšmes yra pakankamai
sunku, nes parametro n reikšme priklauso tik nuo parametro m reikšmės. Iš žemiau pateiktos lentelės galime
matyti, kad tokia priklausomybė tarp parametrų n ir m žymiai sumažina testuojamos sekos dydį.
1 lentelė. Parametrų n, m ir λ tarpusavio priklausomybė
m 8 16 25 32
n 16 64 512 4096
λ 2 2 1 4
Dėl šių apribojimų programa DIEHARD atlikdama šį testą tikrina tik pirmuosius 500 32 bitų skaičius
(o tiksliau šių skaičių 24 bitų rinkinius: 1-24, 2-25, ..., 9-32). Minimalus testuojamos sekos ilgis yra 16000
baitų.
2.1.3.2. Susikertančių kėlinių testas
Šis testas tikrina sekos elementų tolygiškumą analizuodamas m ilgio rinkinių dažnius sekoje.
12
Tarkime turime skaičių seką ε=ε1 ε2…ε n. Kiekvieną sekos elementą sudaro m bitų. Šią seką
suskaidome į N=[ n−1k−1 ] susikertančių rinkinių. Kiekvieną rinkinį sudaro k skaičių. Likusieji skaičiai
nenagrinėjami. Kiekvienas rinkinys turi lygiai k ! skirtingų skaičių išsidėstymo (<, >) galimybių (būsienų).
Teatas nenagrinėja rinkinių, kurių bet kokie du elementai yra lygūs (daroma prielaida, kad tokio įvykio
tikimybė yra pakankamai maža ir neįtakoja testo rezultato). Apskaičiuojame kiekvienos būsienos dažnį νi ir
statistiką
χ2 (obs )=∑i=1
k ! (ν i−Nk ! )
2
Nk !
Testas yra išlaikytas, jeigu statistikos reikšmė yra mažesnė už χα , k !−12 prie fiksuoto rekšmingumo
lygmenio α.
DIEHARD sistemoje analizuojama seka yra skaidoma į du posekius, kurios sudaro 1 000 000
susikertančių kėlinių po penkis 32 bitų skaičių. Taigi minimalus nagrinėjamos sekos ilgis yra 32 000 008
baitai.
2.1.3.3. Matricų rangų testai
Testų tikslas yra nustatyti, ar nagrinėjamos sekos nariai yra pasiskirstę tolygiai analizuojant skirtingų
rangų matricas.
Tarkime turime skaičių seką ε=ε1 ε2…ε n. Kiekvieną sekos elementą sudaro m bitų. Šią seką
pavazduojame N=[ nQR ] dvejetainių Q×R formato matricų pavidalu. Likusieji nariai nenagrinėjami. Šią
procedūrą pavaizduosime tokiu pavyzdžiu:
Pavyzdys Įvestis: ε=A25Ch24B1h E923h
Šios sekos dvejetainis pavidalas yra:
ε=1010 0010 01011100 00100100 10110001 11101001 0010 0011
Kiekvieną šios sekos skaičių pavaizduokime ketvirtos eilės matricos pavidalu:
13
A25Ch=(1 0 1 00 0 1 00 1 0 11 1 0 0
),
24 B1h=(0 0 1 00 1 0 01 0 1 10 0 0 1
),
E923h=(1 1 1 01 0 0 10 0 1 00 0 1 1
)Apskaičiuojame gautų matricų rangus. Rango i (i=1 ,min(Q ,R)) matricų skaičių žymėkime νi.
Apskaičiuojame statistiką
χ2 (obs )= ∑i=1
min(Q, R) (ν i−N p i )2
N p i
pi=2i (Q+R−i)−QR∏j=0
i−1 (1−2 j−Q ) (1−2 j−R )1−2 j−i
Testas yra išlaikytas, jeigu statistikos reikšmė yra mažesnė už χα , min(Q ,R )−12 prie fiksuoto rekšmingumo
lygmenio α.
DIEHARD sistemoje yra realizuoti 3 šio testo variantai:
32 eilės matricų rangų testas. 32 bitų skaičių seka yra nagrinėjama kaip 40 000 matricų.
Matricos yra formuojamos taip: imami 32 skaičių rinkiniai, kurie vaizduojami dvejetainių
pavidalu. Tada pirmojo skaičiaus dvejetainė išraiška yra pirmoji matricos eilutė, antrojo
skaičiaus – antroji eilutė ir t.t. Analizuojami šie matricos rangai: 32, 31, 30 ir ≤29. Minimalus
sekos ilgis yra 5 120 000 baitų.
31 eilės matricų rangų testas. 32 bitų skaičių seka yra nagrinėjama kaip 40 000 matricų.
Matricos yra formuojamos taip: imami 32 skaičių rinkiniai, kurie vaizduojami dvejetainių
pavidalu. Tada pirmojo skaičiaus pirmieji 31 bitai yra pirmoji matricos eilutė, antrojo skaičiaus
pirmieji 31 bitai – antroji eilutė ir t.t. Analizuojami šie matricos rangai: 31, 30, 29 ir ≤28.
Minimalus sekos ilgis yra 5 120 000 baitų.
6×8 matricų rangų testas. 32 bitų skaičių seka yra nagrinėjama kaip 100 000 matricų.
Matricos yra formuojamos taip: imami 6 skaičių rinkiniai, kurie vaizduojami dvejetainių
pavidalu. Tada pirmojo skaičiaus pirmieji 8 bitai yra pirmoji matricos eilutė, antrojo skaičiaus
pirmieji 8 bitai – antroji eilutė ir t.t. Analizuojami šie matricos rangai: 6, 5 ir ≤4. Minimalus
sekos ilgis yra 2 400 000 baitų.
2.1.3.4. Beždžionės testai
14
Šių testų tikslas yra nustatyti, ar nagrinėjamos sekos nariai yra pasiskirstę tolygiai atsižvelgiant į
nepriklausančius sekai posekius. Testai turi tokį pavadinimą, nes Marsalja pasiūlė žiūrėti į generatorių kaip į
beždžionę, kuri spaudo spausdinimo mašinos klavišus, ir analizuoti praleistų žodžių kiekį gautoje sekoje.
Tarkime turime skaičių seką ε=ε1 ε2…ε n. Kiekvieną sekos elementą sudaro m bitų. Šią seką
pertvarkome į eilutę ε ¿, kurią sudaro N žodžių. Kiekvieną žodį sudaro k raidžių po l bitų (raidės ir žodžiai
pradinėje sekoje nebūtinai eina tokią pačią tvarką). Praleistų žodžių skaičius yra aproksimuojamas
normaliuoju skirstiniu su parametrais
μ=2kl eN2kl
σ=√∑i1=1
2l
∑i2=1
2l
…∑ik=1
2l
cov (ni1, ni2
,…,nik)
ni={ 1 , jei raidė 2i priklauso žodžiui0 , jei raidė2i nepriklauso žodžiui
Kadangi σ skaičiavimas yra pakankamai sudėtingas, praktikoje naudoja eksperimentiškai gautas
parametro reikšmes.
DIEHARD sistemoje yra realizuoti 4 šio testo variantai:
Bitų srauto testas. Seką ε=ε1 ε2…ε n pavaizduokime bitų seka b=b1b2…b32 n. Gautą seką b
pertvarkome į eilutę, kurią sudaro 20 raidžių (viena raidė – vienas bitas) susikertantys žodžiai.
Eilutė turi tokį pavidalą:
b¿=b1b2…b20b2b3…b21…b32 n−19b32n−18b32n
Šią eilutę sudaro 221 susikertantys 20 raidžių žodžiai. Praleistų žodžių skaičius
aproksimuojamas normaliuoju skirstiniu su parametrais μ=141909 ir σ=428. Testas
kartojamas 20 kartų. Minimalus sekos ilgis yra 5 242 800 baitų.
Susikertančių porų testas. Iš kiekvieno pradinės sekos skaičiaus imame po 10 bitų (viena
raidė) ir formuojame 2 raidžių žodžius. Eilutėje, kurią sudaro 221 susikertančių 20 raidžių
žodžių, praleistų žodžių skaičius aproksimuojamas normaliuoju skirstiniu su parametrais
μ=141909 ir σ=209. Testas kartojamas 23 kartus. Minimalus sekos ilgis yra 8 388 612 baitų.
Susikertančių ketvertų testas. Iš kiekvieno pradinės sekos skaičiaus imame po 5 bitus (viena
raidė) ir formuojame 4 raidžių žodžius. Eilutėje, kurią sudaro 221 susikertančių 20 raidžių
žodžių, praleistų žodžių skaičius aproksimuojamas normaliuoju skirstiniu su parametrais
μ=141909 ir σ=339. Testas kartojamas 28 kartus. Minimalus sekos ilgis yra 8 388 620 baitų.
15
Susikertančių dešimtukų testas. Iš kiekvieno pradinės sekos skaičiaus imame po 2 bitus
(viena raidė) ir formuojame 10 raidžių žodžius. Eilutėje, kurią sudaro 221 susikertančių 20
raidžių žodžių, praleistų žodžių skaičius aproksimuojamas normaliuoju skirstiniu su
parametrais μ=141909 ir σ=339. Testas kartojamas 31 kartus. Minimalus sekos ilgis yra
8 388 644 baitai.
2.1.3.5. Vienetų testas
Šių testų tikslas yra nustatyti, ar nagrinėjamos sekos nariai yra pasiskirstę tolygiai remiantis baitų,
turinčių skirtingą vienetų skaičių, analize.
Tarkime turime seką ε=ε1 ε2…ε n, kurios elementai yra m bitų skaičiai. Šią seką pavaizduokime baitų
seka b=b1b2…b4 n. Įveskime tokius žymėjimus:
2 lentelė. Įvykių žymėjimai ir jų tikimybės
Žymėjimas Vienetų skaičius Tikimybė
A 0 – 2 37/256
B 3 56/256
C 4 70/256
D 5 56/256
E 6 – 8 37/256
Seką b pavaizduokime eilute, kurią sudaro k-raidžiai žodžiai. Kiekvienam tipui (pvz. AAA, AAB ir t.t
iki EEE) apskaičiuokime dažnį νik , i=1 ,5k. Apskaičiuojame statistiką
χ2 (obs )=∑i=1
5k (νik−N p ik )2
N p ik −∑
i=1
5k−1 (ν ik−1−N p i
k−1)2
N pik−1
Testas yra išlaikytas, jeigu statistikos reikšmė yra mažesnė už χα , 5k−5k −12 prie fiksuoto rekšmingumo
lygmenio α.
DIEHARD sistemoje naudojami šie parametrai: N=256 000 ir k=5. Minimalus sekos ilgis yra 1 024
001 baitas.
Kartais yra naudojama šio testo modifikacija. Tokiu atveju iš kiekvieno skaičiaus yra pasirenkami 8
bitai, kurie yra naudojami sudarant žodžius. Testas yra kartojamas 25 kartus. Jeigu statistikos reikšmė yra
16
mažesnė už χα , 72 prie fiksuoto rekšmingumo lygmenio α, testas yra išlaikytas. Minimalus sekos ilgis yra
4 096 004 baitai.
2.1.3.6. DIEHARD testų trūkumai
Galima išskirti šiuo DIEHARD sistemos trūkumus:
Testų parametrai yra griežtai fiksuoti, o tai reiškia, kad nepriklausomai nuo failo dydžio yra
nagrinėjamas fiksuotas duomenų kiekis.
Dauguma testų remiasi eksperimentų rezultatais, o ne teoriniais skaičiavimais.
2.1.4. NIST testai
NIST testai remiasi tuo, jog PASG turi tenkinti šios 3 esminius principus:
Tolygiškumas. Kiekvienas sugeneruotos sekos bitas gali įgyti reikšmę 0 arba 1 su tikimybe 0.5
Tikėtinas nulių (arba vienetų) skaičius sekoje turi būti n2 kai sekos ilgis yra n.
Vientisumas. Kadangi bet koks testas gali būti taikomas ne tik visai sekai, bet ir bet kokiam
šios sekos posekiui, tai bet kuris atsitiktinės sekos posekis taip pat turi būti atsitiktinis, t.y
privalo išlaikyti visus atsitiktinumo testus
Pilnumas. Negalima prieiti vienareikšmių išvadų apie PASG statistines savybes atlikus tik
vienos sekos analizę. Taip pat kadangi PASG sugeneruoti duomenys priklauso nuo pradinių
sąlygų, negalima prieiti vienareikšmių išvadų apie PASG statistines savybes atlikus duomenų
analizę tik prie tam tikrų fiksuotų pradinių sąlygų.
2.1.4.1. Dažnių testas
Testas tikrina 0 ir 1 pasiskirstymo sekoje tolygiškumą.
Tarkime turime dvejetainę seką ε=ε1 ε2…ε n. Apskaičiuokime skirtumą Sn tarp vienetų ir nulių
skaičiaus (atitinkamai n1 ir n0) sekoje
Sn=n1−n0
17
Apskaičiuojame statistiką
s (obs )=|Sn|√n
ir tikimybę pvalue
pvalue=erfc ( s (obs )√2 )
erfc ( x )= 2√ π∫x
∞
e−u2
du
Testas yra išlaikytas, jeigu tikimybė pvalue>0,01. Rekomenduojamas sekos ilgis – 100 bitų.
2.1.4.2. Dažnių testas posekiuose
Testas tikrina 0 ir 1 pasiskirstymo sekos posekiuose tolygiškumą.
Tarkime turime dvejetainę seką ε=ε1 ε2…ε n. Šią seką suskaidome į N=[ nM ] nesikertančių M bitų
posekių. Likusieji bitai nenagrinėjami. Apskaičiuokime, kokia dalį kiekviename posekyje sudaro vienetai:
π i=∑j=1
M
εM ( i−1)+ j
M
Apskaičiuojame statistiką
χ2 (obs )=4 M∑i=1
M
(π i−0,5 )2
ir tikimybę pvalue
pvalue=igamc( N2 , χ2 (obs )
2 )igamc (a , x )=1−
Γ x (a)Γ (a)
Γ x ( a )=∫0
x
t p−1e−t dt Γ (a )=∫0
∞
t p−1 e−tdt
18
FunkcijaΓ (a ) yra vadinama pilnąja gama funkciją (arba tiesiog gama funkcija), o funkcija Γ x (a )
vadinama nepilnąja gama funkcija.
Testas yra išlaikytas, jeigu tikimybė pvalue>0,01. Rekomenduojamas sekos ilgis – 100 bitų. Taip pat
turi galioti šie sąryšiai: n>MN , M≥20, M>0,01n, N<100.
Pavyzdys Įvestis:
ε=110010010000111111011010101000 1000100001 0110100011
00001000110100110001 0011000110 01100010100010111000
Sekos ilgis n=100, M=10.
Testas: Suskaidome seką į N=[10010 ]=10 posekių (šie posekiai yra išskirti tarpais). Turime tokias π i
reikšmes:
π1=0,4 π2=0,7 π3=0,4 π4=0,3 π5=0,5
π6=0,3 π7=0,4 π8=0,4 π9=0,4 π10=0,4
Statistikos reikšmė χ2 (obs )=7.2, o tikimybė pvalue=0,706438. Kadangi pvalue>0,01, testas yra
išlaikytas.
2.1.4.3. Skylių testas
Bloku vadiname sekos posekį, sudarytą tik iš vienetų, o skyle – posekį, sudarytą tik iš nulių. Šio testo
tikslas yra nustatyti, ar nuliai ir vienetai yra pasiskirstę tolygiai sekoje remiantis skylių analizę.
Tarkime turime dvejetainę seką ε=ε1 ε2…ε n. Prieš taikydami testą apskaičiuokime, kokią dalį sekos
sudaro vienetai:
π=∑j=1
n
ε j
n
Jei π> 2√n , testas yra neišlaikytas. Priešingu atvėju apskaičiuojame statistiką (blokų ir skylių kiekis)
νn (obs )=∑k=1
n−1
r (k )+1
19
čia r (k )={1 , jei εk=εk+1
0 , jei ε k≠ε k+1.
ir tikimybę pvalue:
pvalue=erfc ¿
Testas yra išlaikytas, jeigu tikimybė pvalue>0,01. Rekomenduojamas sekos ilgis – 100 bitų.
Pavyzdys Įvestis:
ε=110010010000111111011010101000 1000100001 0110100011
00001000110100110001 0011000110 01100010100010111000
Sekos ilgis n=100.
Testas: Statistikos π reikšmė yra π=0,42>0,2. Statistika ν100=52, o tikimybė pvalue=0,50079. Kadangi
pvalue>0,01, testas yra išlaikytas.
2.1.4.4. Blokų testas posekiuose
Testo tikslas yra nustatyti, ar nuliai ir vienetai yra pasiskirstę tolygiai sekoje remiantis blokų
posekiuose analizę.
Tarkime turime dvejetainę seką ε=ε1 ε2…ε n. Šią seką suskaidome į N=[ nM ] nesikertančių M bitų
posekių. Parametro M reikšmė pasirenkama iš 3 lentelės. Likusieji bitai nenagrinėjami.
3 lentelė. Santykis tarp minimalaus sekos ilgio ir parametro M
minn 128 6772 750 000
M 8 128 104
Posekių, kuriuose maksimalus bloko ilgis yra l, skaičių priskirkime vienai iš kategorijų, kurios yra
pavaizduotos 4 lentelėje.
4 lentelė. Posekių pasiskirstymai į kategorijas priklausomai nuo didžiausio bloko ilgio
νi M=8 M=128 M=104
ν0 l ≤1 l ≤4 l ≤10
20
ν1 l=2 l=5 l=11
ν2 l=3 l=6 l=12
ν3 l ≥4 l=7 l=13
ν4 l=8 l=14
ν5 l ≥9 l=15
ν6 l ≥16
Apskaičiuojame statistiką
χ2 (obs )=∑i=1
K (ν i−N π i )2
N π i
ir tikimybę pvalue
pvalue=igamc( K2 , χ2 (obs )
2 )Parametro K reikšme yra pasirenkama iš 5 lentelės, o parametro π – iš 6 lentelės
5 lentelė. Santykis tarp minimalaus sekos ilgio ir parametro M
M 812
8104
K 3 5 6
6 lentelė. Parametro π i priklausomybė nuo parametrų M ir νi
M=8
ν0 ν1 ν2 ν3
0,2148 0,3672 0,2305 0,1875
M=128
ν0 ν1 ν2 ν3 ν4 ν5
0,1174 0,2430 0,2493 0,1752 0,1027 0,1124
M=104
ν0 ν1 ν2 ν3 ν4 ν5 ν6
0,0882 0,2092 0,2483 0,1933 0,1208 0,0675 0,0727
Testas yra išlaikytas, jeigu tikimybė pvalue>0,01. Rekomenduojamas sekos ilgis – 128 bitai21
2.1.4.5. Matricų rangų testai
Testų tikslas yra nustatyti, ar nagrinėjamos sekos nariai yra pasiskirstę tolygiai analizuojant skirtingų
rangų matricas.
Tarkime turime dvejetainę skaičių seką ε=ε1 ε2…ε n. Kiekvieną sekos elementą sudaro m bitų. Šią
seką pavazduojame N=[ nMR ] dvejetainių M×R formato matricų pavidalu. Likusieji nariai nenagrinėjami.
Apskaičiuojame matricų rangus. Sugrupuokime matricas į tris grupes pagal jų rangą: M rango matricas (jų
kiekį žymėkime FM), (M−1) rango matricas (FM−1) ir mažesnio rango matricas (jų kiekis yra
F≤M=N−FM−FM−1). Apskaičiuojame statistiką
χ2 (obs )=(FM−0,2888 N )2
0,2888N +(FM−1−0,5776 N )2
0,5776N +(F≤M−0,1336 N )2
0,1336 N
ir tikimybę pvalue
pvalue=igamc(1, χ2 (obs )
2 )Testas yra išlaikytas, jeigu tikimybė pvalue>0,01. Rekomenduojamas sekos ilgis –38 ∙M ∙R bitų.
2.1.4.6. Spektrų testas
Testo tikslas yra nustatyti ar nuliai ir vienetai nagrinėjamoje sekoje yra pasiskirstę tolygiai remiantis
sekos diskrečiosios Furjė transformacijos amplitudžių analize.
Tarkime turime dvejetainę skaičių seką ε=ε1 ε2…ε n. Naudojant vaizdavimą
f ( x )={ 1 , jei x=1−1 , jei x=0
nagrinėjamą seką pertvarkome į seką x=x1 x2…xn ir atliekame sekos x diskrečiąją Furjė
transformaciją
S=DFT ( x )=∑n=1
∞
xk (cos(2πjL
(k−1))+sin( 2πjL )(k−1))
22
Tegu S ' yra sekos S posekis, kurį sudaro pirmieji n2 sekos S elementai. Kiekvienam posekio S '
elementui suraskime jo modulį M i. Taip gauname DFT amplitudžių seką. Raskime sekos M elementų,
mažesnių už √3n, kiekį N. Apskaičiuojame statistiką
d= N−0,425n√0,95 ∙0,025n
ir tikimybę pvalue
pvalue=erfc (|d|√2 )Testas yra išlaikytas, jeigu tikimybė pvalue>0,01. Rekomenduojamas sekos ilgis – 1000 bitų.
2.1.4.7. Susikertančių šablonų testas
Testo tikslas yra nustatyti, ar nuliai ir vienetai yra pasiskirstę tolygiai sekoje remiantis iš anksto
nustatytų šablonų analizę.
Tarkime turime dvejetainę seką ε=ε1 ε2…ε n. Šią seką suskaidome į N=[ nM ] nesikertančių M bitų
posekių. Likusieji bitai nenagrinėjami.
Posekių, kuriuose šablonas sutinkamas i (i=0 , K ,) kartų, kiekį žymėkime νi. K – laisvės laipsnių
kiekis (šiai kategorijai priskiriame visas sekas, kuriose šablonas sutinkamas K arba daugiau kartų). Šablonų
paieška vykdoma taip: nagrinėjant j-ąjį sekos posekį ( j=1 ,N ) yra tikrinami susikertantys m ilgio rinkiniai,
čia m – šablono ilgis. Apskaičiuojame statistiką
χ2 (obs )=∑i=0
K (ν i−N π i )2
N π i
π i=e
−λ2
2i ∑l=1
i
(i−1l−1)∙
( λ2 )l
l !
čia (nk)= n !k !(n−k )! , λ=
M−m+12m . Apskaičiuojame tikimybę pvalue
pvalue=igamc( K2 , χ2 (obs )
2 )23
Testas yra išlaikytas, jeigu tikimybė pvalue>0,01. Rekomenduojami testo parametrai: n≥ MN ,
N ∙minπ i>5, λ≈2, m≈ log2M , K ≈2 λ.
2.1.4.8. Universalus Maurerio testas
Testo tikslas yra nustatyti, ar nuliai ir vienetai yra pasiskirstę tolygiai sekoje remiantis atstumų tarp
šablonų analizę.
Tarkime turime dvejetainę seką ε=ε1 ε2…ε n. Šią seką suskaidome į 2 segmentus: pradinį ir
testuojamą. Pirmajį segmentą sudaro Q blokų po L bitų (šis segmentas yra pradinis), o antrąjį – K=[ nL ]−Q
blokų po L bitų (šis segmentas yra testuojamas). Likusieji bitai nenagrinėjami. Pradinis segmentas
naudojamas lentelei T gauti. Kiekvienam skaičiui i=0 ,Q T j=i, čia j – i-tojo bloko dvejetainė išraiška.
Toliau tokiu pačiu principu yra tikrinamas testuojamas segmentas bei nustatomas atstumas i−T j.
Apskaičiuojame statistiką
f n=1K ∑
i=Q+1
Q+K
log2(i−T j)
ir tikimybę pvalue
pvalue=erfc ( f n−eval(L)σ √2 )
σ=[0,7−0,8L
+(4+ 32L ) K
−3L
15 ]√ var (L )K
Parametrų eval(L) ir var (L) reikšmės yra fiksuotos ir pasirenkamos pagal parametro L reikšmes.
Testo parametrai L ir Q taip pat yra fiksuotos ir pasirenkamos pagal parametro n reikšmes.
Rekomenduojamos tokios testo parametrų reikšmės: n≥387840, tada L=6, Q=10 ∙2L=640,
eval (L )=5,2177, var (L )=2,954.
Testas yra išlaikytas, jeigu tikimybė pvalue>0,01.
2.1.4.9. Lempelo-Zivos suspaudimo testas
24
Testo tikslas yra nustatyti, ar nuliai ir vienetai yra pasiskirstę tolygiai sekoje remiantis sekos
suspausdimo laipsnio analizę.
Tarkime turime dvejetainę seką ε=ε1 ε2…ε n. Iš šios sekos išskirkime nuoseklius nesikertančius bei
nesikartojančius žodžius, kurie sudaro žodyną W obs. Apskaičiuojame tikimybę pvalue
pvalue=12erfc( μ−W obs
σ √2 )Šiuo metu nėra žinomi teoriniai metodai, leidžiantys apskaičiuoti parametrus µ ir σ. Taikant testą šie
parametrai gaunami naudojant generatorių Blum-Blum-Shub arba generatorių, kuris grįžtamojo ryšio
grandinėje taiko SHA-1 funkciją.
Testas yra išlaikytas, jeigu tikimybė pvalue>0,01. Rekomenduojamas sekos ilgis – virš milijono bitų.
2.1.4.10. Tiesinio sudėtingumo testas
Šio testo tikslas yra ištirti sekos atsitiktinumą analizuojant tiesinį jos posekių sudėtingumą.
Tarkime turime dvejetainę seką ε=ε1 ε2…ε n. Šią seką suskaidome į N=[ nM ] nesikertančių M bitų
posekių. Likusieji bitai nenagrinėjami.
Nustatykime kiekvieno posekio tiesinį sudėtingumą Li ,i=1 , N , t.y minimalų LSFR (Linear shift
feedback register – liet. Postūmio registras su tiesiniu grįžtamuoju ryšiu) reikalingo šiam posekiui generuoti,
ilgį. Šiam tikslui galima panaudoti Berlekampo-Mesės algoritmą.
Raskime vidurkį
μ=M2
+(9+(−1 )M +1 )
36+(M3 + 2
9 )2M
Kiekvienam posekiui apskaičiuojame statistiką
T i=(−1 )M (Li−μ )+ 29
Šios reikšmės yra skirstomos į K+1 kategoriją ν0, ν1 ,…,νk (Testo kūrėjai nenurodė skirstimo
algoritmo) ir apskaičiuojama statistika
25
χ2 (obs )=∑i=0
K (ν i−N π i )2
N π i
bei tikimybę pvalue
pvalue=igamc( K2 , χ2 (obs )
2 )Testas yra išlaikytas, jeigu tikimybė pvalue>0,01. Rekomenduojami parametrai: n≥1000 000,
500≤M ≤5000, N ≥200.
2.1.4.11. Serijų testas
Šio testo tikslas yra ištirti sekos atsitiktinumą analizuojant skirtingų ilgių serijas.
Tarkime turime dvejetainę seką ε=ε1 ε2…ε n, o serijos dydis yra m. Formuokime naują seką
ε '=ε1 ε2…εn ε1 ε2…εm−1. Nagrinėkime susikertančias m ilgio serijas. Tipo i (i=0 ,2m) serijų kiekį žymėkime
¿ i. Apskaičiuokime papildomus dydžius:
C im=¿ i
n
φ (m )=∑i=0
2m−1
Cim lnC i
m
Darome prielaidą, kad 0 ∙ ln 0=0. Analaogiškus veiksmus atliekame su susikertančiomis m+1 ilgio
serijomis. Apskaičiuojame statistiką
χ2 (obs )=2n (ln 2−φ(m )+φ(m+1 ))
ir tikimybę pvalue
pvalue=igamc(2m−1, χ2 ( obs )
2 )Testas yra išlaikytas, jeigu tikimybė pvalue>0,01. Parametro m reikšmė turi būti mažesnė už [ log2n ]−2.
2.1.4.12. Kumuliacinių sumų testas
26
Šio testo tikslas yra ištirti sekos atsitiktinumą analizuojant maksimalų normuotos sekos elementų
sumos nuokrypį nuo nulio.
Tarkime turime dvejetainę skaičių seką ε=ε1 ε2…ε n. Naudojant vaizdavimą
f ( x )={ 1 , jei x=1−1 , jei x=0
nagrinėjamą seką pertvarkome į seką x=x1x2…xn. Apskaičiuokime dydžius
z1=maxk
∑i=1
k
x i
z2=maxk
∑i=n−k +1
n
xi
z3=|mink ∑i=1
k
x i|z4=|mink ∑
i=n−k+1
n
x i|NIST testų kūrėjai dėl neaiškių priežasčių nenaudoja dydžių z3 ir z4, nors pagal savo reikšmingumą šie
dydžiai nesiskiria nuo dydžių z1 ir z2.
Apskaičiuojame tikimybę pvalue kiekviemam dydžiui
pvalue=1− ∑k=
1− nz
4
nz −1
4
(Φ((4 k+1) z√n )−Φ ((4k−1) z
√n ))+ ∑k=
−nz
−3
4
nz −1
4
(Φ ((4 k+3) z√n )−Φ ((4 k+1)z
√n ))
Testas yra išlaikytas, jeigu visos keturios tikimybės pvalue>0,01. Rekomenduojamas sekos ilgis – 100
bitų.
2.1.4.13. Pirmasis atsitiktinių nuokrypių testas
Šio testo tikslas yra ištirti sekos atsitiktinumą analizuojant maksimalų normuotos sekos elementų
sumos nuokrypį nuo nulio.
Tarkime turime dvejetainę skaičių seką ε=ε1 ε2…ε n. Naudojant vaizdavimą
27
f ( x )={ 1 , jei x=1−1 , jei x=0
nagrinėjamą seką pertvarkome į seką x=x1 x2…xn. Suformuokime dvi sekas:
S= {S i } :S i=∑j=1
i
x j
S'=0 , S1 , S2,…,Sn ,0
Seką S ' suskaidome į blokus, kuriu pavidalas yra
{0 , S j , S j+1 ,…,S j+k ,0}
Laikysime, kad bet kurio nenulinio x bloko elemento būsena gali įgyti reikšmes iš intervalo nuo -4 iki
4. Bendrą blokų skaičių žymėkime J.
Blokų, kuriuose reikšmė x sutinkama k (k=0 ,5) kartų, kieki žymėkime νk (x). Jei reikšmė x
sutinkama daugiau negu 5 kartus, tai bloką priskiriame kategorijai ν5( x). Kiekvienam x apskaičiuojame
statistiką
χ2 (obs )=∑k=0
5 (νk (x)−J πk (x ))2
J πk (x )
Reikia pastebėti, jog NIST testų kūrėjai supaprastino x reikšmių aibę, nors dėl šios priežasties
nežymiai sumažėjo testo tikslumas. Statistikos parametro πk (x ) reikšmės imamos iš 7 lentelės.
7 lentelė. πk (x ) reikšmės
x π0 ( x ) π1 ( x ) π2 ( x ) π3 (x ) π4 ( x ) π5(x)
±1 0,5 0,25 0,125 0,0625 0,0312 0,0312
±2 0,75 0,0625 0,0469 0,0352 0,0264 0,0791
±3 0,8333 0,0278 0,0231 0,0193 0,0161 0,0804
±4 0,8750 0,0156 0,0137 0,0120 0,0105 0,0733
Apskaičiuojame tikimybę pvalue
pvalue=igamc( 52, χ
2 (obs )2 )
Testas yra išlaikytas, jeigu tikimybė pvalue>0,01.
28
2.1.4.14. Antrasis atsitiktinių nuokrypių testas
Šio testo tikslas yra ištirti sekos atsitiktinumą analizuojant maksimalų normuotos sekos elementų
sumos nuokrypį nuo nulio.
Tarkime turime dvejetainę skaičių seką ε=ε1 ε2…ε n. Naudojant vaizdavimą
f ( x )={ 1 , jei x=1−1 , jei x=0
nagrinėjamą seką pertvarkome į seką x=x1 x2…xn. Suformuokime dvi sekas:
S= {S i } :S i=∑j=1
i
x j
S'=0 , S1 , S2,…,Sn ,0
Seką S ' suskaidome į blokus, kuriu pavidalas yra
{0 , S j , S j+1 ,…,S j+k ,0}
Laikysime, kad bet kurio nenulinio x bloko elemento būsena gali įgyti reikšmes iš intervalo nuo -9 iki
9. Taigi, kaip ir pirmojo atsitiktinių nuokrypių testo atveju, NIST testų kūrėjai supaprastino x įgyjamas
reikšmes.
Bendrą blokų skaičių žymėkime J, o būsenos x dažnį visuose blokuose žymėkime ξ (x). Kiekvienam x
apskaičiuokime tikimybę pvalue
pvalue=erfc ( |ξ ( x )−J|√2J (4|x|−2))
Testas yra išlaikytas, jeigu tikimybė pvalue>0,01. Abiejų testų atvėju rekomenduojamos sekos ilgis yra
virš milijono bitų.
2.2. Statistinių testų rezultatų vertinimas
PASG statistinių savybių vertinimas vykdomas naudojant 4 etapus:
29
Atsitiktinių sekų generavimas. Generuojama m sekų. Kiekvienos sekos ilgis yra n. Šis
parametras yra parenkamas taip, kad sugeneruotos sekos galėtų išlaikyti bet kurį testą.
Statistinių testų rinkinio taikymas. Kiekviena sugeneruota seka yra testuojama kiekvienu
testu iš pasirinkto rinkinio. Kiekvieno testo rezultatas yra statistikos s(obs) reikšmė. Jei rinkinį
sudaro t testų, tai gaunamos mt statistikų reikšmių.
Statistinių testų išlaikymo analizė. Yra analizuojama gauta statistikos reikšmė. Tai gali būti
daroma 3 būdais:
1. Naudojant kritines reikšmes (statistikos reikšmė turi buti didesnė arba mažesnė už
nustatytą reikšmę).
2. Naudojant fiksuotus intervalus (statistikos reikšmė turi priklausyti fiksuotam intervalui)
3. Naudojant tikimybę pvalue (statistikos reikšmė turi būti didesnė už pasirinktą
reikšmingumo lygmenį α)
Galutinio sprendimo priėmimas
Kadangi analizuojant gautas statistikos reikšmes naudojant kritines reikšmes arba fiksuotus intervalus
yra būtina iš anksto apskaičiuoti šiuos parametrus, žymiai patogiau yra naudoti trečiąjį vertinimo būdą, t.y
apskaičiuoti tikimybę pvalue. Ši tikimybė yra apskaičiuojama kiekvienai statistikai. Gautos tikimybės gali buti
vertinamos naudojant Pirsono kriterijų arba skaičiuojant, kokią dalį sudaro sekos, tenkinančios testą t i. Šie
rezultatai gali būti surašomi į lentelę, analogišką 8 lentelei, ir tokiu būdu priimamas galutinis sprendimas.
8 lentelė. Rinkinio iš t testų rezultatų analizė
Seka Testas 1 Testas 2 ... Testas t
ε (1)išlaikė/ neišlaikė išlaikė/ neišlaikė ... išlaikė/ neišlaikė
ε (2)išlaikė/ neišlaikė išlaikė/ neišlaikė ... išlaikė/ neišlaikė
... ... ... ... ...ε (m )
išlaikė/ neišlaikė išlaikė/ neišlaikė ... išlaikė/ neišlaikė
Jei koks nors testas yra neišlaikomas, tai PASG gali turėti statistinių silpnumų.
2.3. Grafiniai testai
2.3.1. Elementų pasiskirstymo histograma
30
Šis testas tikrina, ar elementai sekoje yra pasiskirstę tolygiai. Šiam tikslui yra braižoma histograma,
kuri vertina kiek kartų kiekvienas elementas yra sutinkamas sekoje. Seka yra atsitiktinė, jeigu elementų
dažnių sekoje išsibarstymas yra artimas 0. Tai reiškia, kad seka turi neturėti elementų, kurie yra sutinkami
labai dažnai. Testas yra naudingas ir tuo atveju, kai reikia įvertinti sekos, kurios elementai yra pasiskirstę
netolygiai (pvz. pagal normalųjį skirstinį), kokybę.
2.3.2. Pasiskirstymas plokštumoje
Testas yra skirtas priklausomybėms tarp elementų nustatyti. Grafinis vaizdas yra gaunamas braižant
taškus (2R−1 )× ( 2R−1 ) plokštumoje, čia R – kiekvieną elementą sudarančių bitų skaičius. Yra nagrinėjami
taškai ( εi , ε i+1 ), čia i=1 ,(n−1). Jei šie taškai plokštumoje yra pasiskirstę chaotiškai, seka laikoma atsitiktine.
Esant dideliam sekos ilgiui geru rezultatu laikomas visiškai juodas laukas.
2.3.3. Serijų testas
Šiame darbe jau buvo nagrinėjami panašūs testai. Grafinis vaizdas gaunamas analizuojant skirtingų
serijų dažnius. Apskaičiuojame nulių ir vienetų kiekius, dvejetų serijų kiekius (00, 01, 10 ir 11), trejetų
serijų kiekius ir t.t. Šiuos duomenis vaizduojame grafiškai atskirai kiekvienam serijos ilgiui. Atsitiktinės
sekos atvėju visi grafikai turi rodyti, jog serijų kiekių išsibarstymas yra artimas 0.
2.3.4. Monotoniškumo testas
Monotoniškumo testas tikrina ar nagrinėjamos sekos elementai yra pasiskirstę tolygiai, atlikdamas
nedidėjimo arba nemažėjimo atkarpų analizę. Grafiškai vaizduojami šių atkarpų ilgiai. Jei seka yra
atsitiktinė, tai kuo didesnė yra monotoniškumo atkarpa tuo mažesnė yra jos pasirodymo tikimybė.
2.3.5. Autokoreliacinė funkcija
Šis testas yra skirtas koreliacijoms tarp pastumtų nagrinėjamos sekos kopijų vertinti. Testas gali aptikti
priklausomybę tarp nagrinėjamos sekos posekių. Yra du šio testo variantai:
31
Bitų autokoreliacinė funkcija. Tarkime turime skaičių seką ε=ε1 ε2…ε n. Ši seka yra pertvarkoma į
dvejetainę seką ir normuojama naudojant vaizdavimą
f ( x )={ 1 , jei x=1−1 , jei x=0
Taip gauname seką x=x1x2…xn. Įveskime tokį žymėjimą:
shif t j (xi )=x (i+ j)mod n.
Apskaičiuojame koreliacijos šuoliuos:
c j=∑j=0
n−1
xi⋅shift j( x i )
∑i=0
n−1
xi2
Šiuos šuolius vaizduojame grafiškai.
Simbolių autokoreliacinė funkcija. Tarkime turime skaičių seką ε=ε1 ε2…ε n. Tegu kiekvieną
sekos narį sudaro m bitų, o i-tojo nario dvejetainė išraiška yra am−1am−2…a0. Naudojame tokį sekos
normavimą:
b i=∑j=0
m−1
(−1 )a j ∙2 j
Taip gauname seką b=b1b2…bn. Apskaičiuojame koreliacijos šuoliuos:
c j=∑j=0
n−1
bi⋅shift j(bi )
∑i=0
n−1
bi2
Šiuos šuolius vaizduojame grafiškai.
Jei koreliacijos šuoliai yra artimi 0 visuose taškuose išskyrus tuos, kurių reikšmės yra kartotinos sekos
ilgiui simboliais, kai naudojama simbolių autokoreliacinė funkcija, ir sekos ilgiui bitais, kai naudojama bitų
autokoreliacinė funkcija, tai seka yra atsitiktinė. Žymesnių šuolių egzistavimas reiškia, kad tarp sekos
elementų yra priklausomybė.
2.3.6. Tiesinio sudėtingumo profilis
Testo tikslas yra nustatyti sekos atsitiktinumą remiantis tiesinio sekos sudėtingumo priklausomybės
nuo sekos ilgio analize.
32
Tarkime turime dvejetainę skaičių seką ε=ε1 ε2…ε n. Nagrinėkime šios sekos posekius, kuriuos sudaro
pirmieji k sekos elementų. Tiesinio sudėtingumo profilis gaunamas braižant grafiką, kuris parodo tiesinio
sudėtingumo L priklausomybę nuo posekio ilgio k. Jei seka yra atsitiktinė, tai grafiko linija turi artėti prie
tiesės L=k2 .
2.3.7. Grafinis spektrų testas
Testo tikslas yra nustatyti ar nuliai ir vienetai nagrinėjamoje sekoje yra pasiskirstę tolygiai remiantis
sekos diskrečiosios Furjė transformacijos amplitudžių analize.
Tarkime turime dvejetainę skaičių seką ε=ε1 ε2…ε n. Naudojant vaizdavimą
f ( x )={ 1 , jei x=1−1 , jei x=0
nagrinėjamą seką pertvarkome į seką x=x1x2…xn ir atliekame sekos x diskrečiąją Furjė
transformaciją
S=DFT ( x )
Grafiškai pavaizduojame pirmąsias n2 harmonikų. Jeigu hamonikų, kurių ilgis žymiai viršija vidutinį
harmonikų ilgį, skaičius artėja į 0, tai seka yra atsitiktinė.
33
Išvados
Atsitiktinių skaičių generatoriai yra svarbūs daugelyje sričių. Tačiau norint sudaryti gerą generatorių,
reikia laikytis kelių svarbių taisyklių:
1. Nagrinėdami statistinius atsitiktinumo testus matėme, kad kai kurie iš jų reikalauja, jog
generuojamos sekos ilgis būtų pakankamai didelis, todėl labai svarbu, kad PASG generuojama
seka turėtų kiek įmanoma didesnį periodą. Didelis periodas – viena iš esminių PASG savybių.
2. Daryti išvadas apie PASG kokybę galima tik remiantis kompleksinio tyrimo rezultatais.
Tyrimas turi būti atliekamas nagrinėjant ne tik pačias sekas, bet ir jų posekius. Testai turi būti
pasirenkami taip, kad galima būtų kuo išsamiau išnagrinėti PASG kokybę.
3. Nors grafiniai testai yra naudingi analizuojant PASG bei kriptoalgoritmų savybes, šie testai turi
būti naudojami kartu su kitais statistiniais testais, dėl jų nevienareikšmingumo.
34
Priedas. Atsitiktinių skaičių generatorių testų programinė realizacija
Naudojant programinį paketą SAS buvo sukurta monotoniškumo testų (grafinio ir statistinio)
programinė realizacija. Sintaksė yra tokia:
%let sequance_size = 1000;%let gen_seed = 0;
data new;array x{&sequance_size};do i = 1 to &sequance_size;
x{i} = ranuni(&gen_seed);end;drop i;
run;
data lengths;set new;array x{&sequance_size};length = 0;k = 0;do i = 2 to &sequance_size;
if (x{i} - x{i - 1}) <= 0then
length = length + 1;else do;
if length ~= 0then do;
k = k + 1;output;
end;length = 0;
end;end;keep k length;
run;
proc freq data = lengths;table length / out = frequancies;
run;
data parameters;set frequancies end = tmp;array sum{1} (0);sum{1} = sum{1} + count;if tmp then do;
suma = sum1;size = _N_;output;
end;keep suma size;
run;
data suma;set parameters;do i = 1 to size;
total = suma;output;
35
end;keep total;
run;
data test;set suma;set frequancies end = tmp;array chisq{1} (0);fact = 1;do i = 1 to length;
fact = fact * i;end;p = 1/fact - 1/(fact * (length + 1));chisq{1} = chisq{1} + ((count - total * p)**2)/(total * p);if tmp then do;
c = cinv(0.99, length - 1);output;
end;keep chisq1 c;
run;
proc gplot data = lengths; plot length*k;
run;
Testo parametrai yra paduodami programai makrokomandų pagalba:
%let sequance_size = 1000;%let gen_seed = 0;
Pirmoji komanda nustato imties dydį, antroji – atsitiktinių skaičių generatoriaus pradinę reikšmę.
Kitos makrokomandos nurodo konkretaus generatoriaus parametrus. Naudojamas PASG nustatomas eilutėjex{i} = <generatorius>(<pradinė reikšmė>, <parametrai>);
Pavyzdžiui eilutė x{i} = ranuni(&gen_seed); rodo, kad šiuo metu yra naudojamas tolygusis
PASG. SAS paketas turi šiuos atsitiktinių skaičių generatorius:
Pavadinimas Generatorius
RANBIN(seed, n, p) Binominis
RANCAU(seed) Koši
RANEXP(seed) Eksponentinis
RANGAM(seed, a) Gama
RANNOR(seed) Normalusis
RANPOI(seed, m) Puasono
RANTRI(seed, h) Trikampinis
RANUNI (seed) Tolygusis
Be to šis paketas turi funkciją RAND, kuri gali būti naudojama kaip bet kuris iš minėtų generatorių.
Šios funkcijos sintaksė yra tokia:
36
x{i} = rand(<generatoriaus tipas>, <pradinė reikšmė>, <parametrai>);
Ši funkcija taip pat realizuoja ir kitų tipų PASG, pvz Erlango, Veibulo, Fišerio ir t.t. Tačiau šių
generatorių atsitiktinumo savybės nėra tobulos, nes sugeneruotos sekos elementai yra visuomet pasiskirstę
pagal tam tikrą skirstinį (priklausomai nuo PASG tipo). Šį faktą patvirtina ir monotoniškumo testo rezultatai.
Patikrinkime ar monotoniškumo testą išlaiko tolygusis, eksponentinis bei normalusis generatoriai.
Pasirinksime penkias pradines reikšmes (0, 1, 2, 3, 4). Generuosime 500 narių sekas. Rezultatus surašykime
į lentelę (išvada – taip, jei testas išlaikytas, ne, jei neišlaikytas):
Pradinė
reikšmė
Tolygusis generatorius Normalusis generatorius Eksponentinis generatorius
Statistikos
reikšmėχ0,01 ;t−1
2 Išvada Statistikos
reikšmėχ0,01 ;t−1
2 Išvada Statistikos
reikšmėχ0,01 ;t−1
2 Išvada
0 15.0193 13.2767 Ne 16.5131 11.3449 Ne 15.6132 11.3449 Ne
1 5.71428 13.2767 Taip 15.0602 11.3449 Ne 9.62732 13.2767 Taip
2 2.03722 11.3449 Taip 7.51612 13.2767 Taip 11.7391 11.3449 Ne
3 14.3667 13.2767 Ne 18.4208 11.3449 Ne 0.73205 13.2767 Taip
4 8.36484 13.2767 Taip 9.44666 11.3449 Taip 31.5143 11.3449 Ne
Matome, kad kiekvieno nagrinėjamo generatoriaus atveju bent dvi iš penkių nagrinėjamų sekų
išlaiko monotoniškumo testą. Vienas iš šių generatorių trūkumų yra tai, kad testo rezultatas priklauso nuo
generuojamos sekos ilgio. Padidinus generuojamos sekos ilgį nuo 500 iki 1000 tiktai eksponentinio
generatoriaus sugeneruota seka, kai pradinė reikšmė yra 3, išlaiko monotoniškumo testą. Šios sekos
rezultatai yra (chisq1 – stebėta statistikos reikšmė, c= χ0,01 ;t−12 ):
Obs chisq1 c
1 6.89630 13.2767
PASG galima sudaryti ir patiems. Tam tikslui pakeiskime data new žingsnį:
data new;array x{&sequance_size};do i = 1 to &sequance_size;
if i = 1then do;
x{i} = mod(&a * &gen_seed + &b, &m); end;
37
else do;x{i} = mod(&a * x{i - 1} + &b, &m); end;
end;drop i;run;
Sakiniai ciklo do viduje aprašo kongruentinį pseudoatsitiktinių skaičių generatorių. Šio generatoriaus
bendroji išraiška yra
x i+1=( A x i+B )mod M
čia operacija mod M reiškia, kad rezultatas bus apskaičiuojamas moduliu M. Pasirinksime tokias
parametrų reikšmes: A=101, B=53, M=256. Šiuos parametrus paduodame programai per
makrokomandas:
%let a = 101;%let b = 53;%let m = 2 ** 8;
Patikrinsime, ar šis generatorius išlaiko monotoniškumo testą, kai generuojamos sekos ilgis yra 500.
Pradinė reikšmė x0=0.
length Frequency Percent CumulativeFrequency
CumulativePercent
1 93 56.71 93 56.71
2 57 34.76 150 91.46
3 12 7.32 162 98.78
4 2 1.22 164 100.00
Obs chisq1 c
1 7.29797 11.3449
Pirmoje lentelėje matome informaciją apie monotoniškumo intervalų ilgius: kiekvieno intervalų ilgio
dažnis ir jo procentinė dalis. Antroji lentelė parodo, kad stebėta statistikos reikšmė yra 7.29797, o
χ0,01 ;32 =11.3449. Taigi testas yra išlaikytas.
Testo rezultatus galima pavaizduoti ir grafiškai. Tada turime tokį vaizdą:
38
Kadangi didelių išskirčių nematome, tai monotoniškumo testas yra išlaikytas.
39