41
SVEUČILIŠTE U ZAGREBU FAKULTET ELEKTROTEHNIKE I RAČUNARSTVA Zavod za elektroničke sustave i obradbu infromacija PROJEKT IZ PREDMETA SLUČAJNI PROCESI U SUSTAVIMA Postupci i algoritmi generiranja slučajnih i pseudoslučajnih brojeva Davor Ćosić Borislav Ðurđinovski Bojan Gašpar Denis Jakuš Gordan Markuš Voditelj: Sven Lončarić, prof. dr. sc. Zagreb, siječanj 2012.

Postupci i Algoritmi Generiranja Slucajnih Brojeva

Embed Size (px)

DESCRIPTION

Postupci generisanja slucajnih brojeva

Citation preview

Page 1: Postupci i Algoritmi Generiranja Slucajnih Brojeva

SVEUČILIŠTE U ZAGREBUFAKULTET ELEKTROTEHNIKE I RAČUNARSTVAZavod za elektroničke sustave i obradbu infromacija

PROJEKT IZ PREDMETA SLUČAJNI PROCESI USUSTAVIMA

Postupci i algoritmi generiranjaslučajnih i pseudoslučajnih brojeva

Davor Ćosić Borislav Ðurđinovski Bojan Gašpar Denis Jakuš Gordan Markuš

Voditelj: Sven Lončarić, prof. dr. sc.

Zagreb, siječanj 2012.

Page 2: Postupci i Algoritmi Generiranja Slucajnih Brojeva

Sadržaj

1. Uvod 1

2. Postupci generiranja (pseudo)slučajnih brojeva 22.1. Fizički postupci . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22.2. Računalne metode . . . . . . . . . . . . . . . . . . . . . . . . . . 3

3. Algoritmi generiranja slučajnih brojeva 43.1. Lehmerov LCG . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43.2. Mersenneov uvijač . . . . . . . . . . . . . . . . . . . . . . . . . . 5

4. Pokazatelji i testovi slučajnosti 74.1. Pokazatelji slučajnosti . . . . . . . . . . . . . . . . . . . . . . . . 7

4.1.1. Očekivanje i varijanca . . . . . . . . . . . . . . . . . . . . 74.1.2. Entropija . . . . . . . . . . . . . . . . . . . . . . . . . . . 84.1.3. Histogram . . . . . . . . . . . . . . . . . . . . . . . . . . . 94.1.4. Autokorelacija . . . . . . . . . . . . . . . . . . . . . . . . . 10

4.2. Hi-kvadrat (χ2) test . . . . . . . . . . . . . . . . . . . . . . . . . . 114.3. Kolmogorov-Smirnov test . . . . . . . . . . . . . . . . . . . . . . . 12

5. Sklopovlje za generiranje pravih slučajnih brojeva 155.1. Područje primjene i namjena sklopovlja . . . . . . . . . . . . . . . 155.2. Opis rada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165.3. Tehnički podaci . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185.4. Uputstvo za uporabu . . . . . . . . . . . . . . . . . . . . . . . . . 185.5. Sastavnica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195.6. Položajni nacrt komponenata . . . . . . . . . . . . . . . . . . . . 205.7. Nacrt tiskanih veza (lemna strana) . . . . . . . . . . . . . . . . . 215.8. Nacrt tiskanih veza (komponentna strana) . . . . . . . . . . . . . 225.9. Plan bušenja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

ii

Page 3: Postupci i Algoritmi Generiranja Slucajnih Brojeva

6. Primjena generatora slučajnih brojeva 24

7. Literatura 25

8. Privitak 268.1. Park-Miller LCG . . . . . . . . . . . . . . . . . . . . . . . . . . . 268.2. MT19937 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

8.2.1. Inicijalizacija generatora . . . . . . . . . . . . . . . . . . . 278.2.2. Generiranje niza za ekstrakciju brojeva . . . . . . . . . . . 288.2.3. Ekstrakcija i skaliranje pseudoslučajnih brojeva . . . . . . 29

8.3. Skripta za izračun očekivanja, varijance i entropije . . . . . . . . . 308.4. Skripta za prikaz histograma . . . . . . . . . . . . . . . . . . . . . 318.5. Funkcija za iscrtavanje autokorelacijskih ploha . . . . . . . . . . . 328.6. χ2 test . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

8.6.1. Funkcija χ2 testa . . . . . . . . . . . . . . . . . . . . . . . 338.6.2. χ2 test za implementirane generatore slučajnih brojeva . . 34

8.7. Kolmogorov-Smirnov test . . . . . . . . . . . . . . . . . . . . . . . 358.7.1. K-S test za Park-Millerov generator . . . . . . . . . . . . . 358.7.2. K-S test za Mersenneov uvijač . . . . . . . . . . . . . . . . 368.7.3. Programski kôd PIC-a . . . . . . . . . . . . . . . . . . . . 37

iii

Page 4: Postupci i Algoritmi Generiranja Slucajnih Brojeva

1. Uvod

Generator (pseudo)slučajnih brojeva (engl. kratica RNG – random number gene-rator) je uređaj ili algoritam koji kao izlaz vraća statistički potpuno nezavisne inepredvidljive vrijednosti u obliku brojevnog niza. Generatore slučajnih brojevaopćenito dijelimo na:

• generatore istinskih slučajnih brojeva

• generatore pseudoslučajnih brojeva

Osnovna razlika među njima je sljedeća: izlaz generatora pseudoslučajnihbrojeva nakon nekog vremena počinje se ponavljati, dok kod generatora istinskihslučajnih brojeva to nije slučaj. Za generatorom pseudoslučajnih brojeva posegnutćemo u slučaju kada je manja kompleksnost sustava kojeg izrađujemo. Pravegeneratore slučajnih brojeva je gotovo nemoguće dizajnirati za rad na računalu,pošto su računala deterministički strojevi.

U ovom radu dan je uvod u postupke generiranja slučajnih brojeva te suopisana dva generatora pseudoslučajnih brojeva izvedena u programskom paketuMATLAB. Nad navedenim generatorima pseudoslučajnih brojeva izvršeni su tes-tovi koji bi potvrdili ili opovrgnuli tezu radi li se o generatorima slučajnih brojeva.Uz to u potpunosti je opisan sklop za generiranje istinskih slučajnih brojeva te-meljen na lavinskom šumu tranzistora.

1

Page 5: Postupci i Algoritmi Generiranja Slucajnih Brojeva

2. Postupci generiranja(pseudo)slučajnih brojeva

2.1. Fizički postupci

U svrhu generiranja (pravih) slučajnih brojeva potrebno je promatranje i bilje-ženje neke nepredvidljive prirodne pojave. Dizajniranje sklopovskog uređaja i/iliračunalnog programa kojim bi se prikupljale uzorkovane vrijednosti mjerljive ve-ličine neke promatrane pojave, slobodnih od korelacija i predvidljivosti, vrlo jetežak zadatak. Za korištenje u kriptografske svrhe također je potrebno da takavgenerator bude otporan na moguća promatranja i manipulacije unutarnjeg stanja.

Sklopovski generatori slučajnih brojeva koriste nepredvidljivost koja se pojav-ljuje kod sljedećih fizikalnih pojava:

• termički šum poluvodičke diode ili električkog otpornika

• vrijeme između dviju čestičnih emisija tijekom radioaktivnog raspadanja

• nestabilnost frekvencije slobodnog oscilatora

• naboj kondenzatora nakon zadanog perioda punjenja

• promjene latentnog vremena čitanja uzrokovane zračnim turbulencijamaunutar kućišta čvrstog diska

• zvuk iz mikrofona ili slika iz kamere

Međutim, fizičke pojave i alati koji se koriste za njihovo mjerenje u praviluimaju i asimetrična i sistematska odstupanja radi kojih im izlazi nisu uniformnoslučajni. Još jedan čest i zanimljiv izvor entropije može biti i ponašanje čovjekakao korisnika nekog sustava. Ljude ne možemo smatrati dobrim generatorimaslučajnosti kad se to od njih zatijeva da budu, ali kada ljudi koriste neki sustav,njihovo nesvijesno ponašanje da se itekako dobro iskoristiti. Najbolji primjer zato je novi trend u programima koji se bave sigurnošću računalna. Oni od svojih

2

Page 6: Postupci i Algoritmi Generiranja Slucajnih Brojeva

korisnika zahtijevaju da izvjesno vrijeme pomiču miš ili pritišću tipke na tipkov-nici kako bi se stvorilo dovoljno entropije za generiranje nekog slučajnog ključaili da se inicijalizira generator pesudoslučajnih brojeva. Također postoje i ostaliprocesi na kojima se mogu bazirati programski generatori slučajnih brojeva:

• očitavanje sistemskog sata

• sadržaj ulazno-izlaznih spremnika pojedinih računalnih komponenti

• sadržaj radne memorije

• sadržaj procesorskih registara

• stanje operacijskog sustava

2.2. Računalne metode

Zbog determinističke prirode računala, naziv za generiranje slučajnih brojevana računalu obično dobiva prefiks pseudo1. Generator pseudoslučajnih brojeva(PRNG – engl. kratica za Pseudorandom Number Generator) je determinističkialgoritam koji za datu slučajnu vrijednost veličine k bitova, vraća brojevni nizveličine l >> k, koji se ponaša kao da je slučajan. Ulazna vrijednost se običnonaziva sjeme (engl. seed), dok se izlazni niz naziva pseudoslučajni brojevni niz(engl. pseudorandom number sequence). Važno je za napomenuti ponovljivost re-zultata PRNG-ova, odnosno, za jednake vrijednosti sjemena dobivaju se identičniizlazni nizovi te se nakon određenog perioda rezultati počinju ponavljati.

Jednu od prvih metoda generiranja slučajnih brojeva razvio je John Von Ne-umann. To je "metoda srednjeg kvadrata" (engl. middle-square method) kojaje toliko jednostavna da se može izračunati bez upotrebe računala, ali je izlazizuzetno loše kvalitete. Valja napomenuti kako gotovo svi programski jezici nudegotove funkcije i biblioteke za generiranje slučjanih brojeva. Najčešće se to svodina generiranje slučajnih bajtova ili riječi. No, valja biti oprezan jer takve funkciječesto imaju loša statistička svojstva, a neke će ponoviti uzorak i nakon samo ne-koliko desetaka tisuća pokušaja. Zato mnogi operacijski sustavi2 nude ugrađenekvalitetnije izvore slučajnih brojeva.

1lat. za laž2Linux, Mac OS X, IRIX, Solaris

3

Page 7: Postupci i Algoritmi Generiranja Slucajnih Brojeva

3. Algoritmi generiranja slučajnihbrojeva

3.1. Lehmerov LCG

Ponekad se naziva i Park-Miller generator slučajnih brojeva jer je njihova inačicanajčešća u upotrebi. Algoritam spada u klasu multiplikativnih linearnih kon-gruentnih algoritama (eng. kratica LCG – linear congruential generator). LCGgeneratore je izrazito lagano za implementirati.

Postoji više vrsta LCG generatora i svaki ima zasebne zahtjeve. Lehmerovalgoritam zahtijeva odabir dva cijela broja:

1. modula m, koji mora biti prost broj

2. množitelja a, koji je cijeli broj iz intervala 2, 3, ...,m− 1

Niz slučajnih brojeva zn dobiva se sljedećom rekurzivnom relacijom:

zn+1 = f(zn) n ∈ N (3.1)

f(z) = az mod m (3.2)

Prvi broj niza je ujedno i sjeme generatora, on se može izabrati iz intervala1, 2, ...,m − 1. Navedeni generator slučajnih brojeva generira niz brojeva zntakođer u navedenom intervalu. Iz tog razloga potrebno je skalirati niz kakobi dobili brojeve raspodjeljne u intervalu [0, 1]. Konačan niz un definiran jeizrazom un = zn/m. Zatim odabirom parametara a i m želimo postići štobolja svojstva generatora. Drugim riječima želimo postići da generator daje niznajduljeg mogućeg perioda koji ne ovisi o izboru početne vrijednosti niza. Uovom radu implementiran je LCG generator1 za kojeg su izabrane karakterističnevrijednosti preporučene od Parka i Millera

1Kôd implementiranog LCG generatora pseudoslučajnih brojeva nalazi se u privitku 8.1.

4

Page 8: Postupci i Algoritmi Generiranja Slucajnih Brojeva

a = 16807 = 75 i m = 231 − 1.

Važno je za spomenuti da zbog izbora prostog m za svaki z iz navedenog intervalavrijedi f(z) 6= 0 što onemogućava kolapsiranje izlaza generatora u nulu. Takođerkonačni niz un neće sadržavati vrijednosti 0 i 1.

3.2. Mersenneov uvijač

Mersenneov uvijač (engl. Mersenne twister) je generator pseudoslučajnih brojevačiji su autori Makoto Matsumoto i Takuji Nishimura. Ime generatora proizlaziiz činjenice da je period navedenog generatora zapravo Mersseneov broj. Temeljise na matrici linearnih ponavljanja nad konačnim binarnim poljem. Algoritamomogućava brzo stvaranje velike količine pseudoslučajnih brojeva visoke kvalitetete je dizajniran s namjerom da ispravi mane svojih prethodnika.

Algoritam Mersenneova uvijača je uvijen generaliziran povratni posmačni re-gistar (engl. kratica TGFSR – twisted generalised feedback shift register) s utjeca-njem i odrazom na stanje bita. Slučajan broj generira se sljedećom rekurzivnomrelacijom:

xk+n := xk+m ⊕ (xku | xk+1

l)A k = 0, 1, . . . (3.3)

Gdje su | bitovni "ili" i ⊕ bitovni "ekskluzivni ili" (XOR). xu, xl su x nad kojim jeupotrijebljena gornja ili donja maska bitova. Algoritam karakteriziraju sljedećevrijednosti:

• w: veličina riječi (broj bitova)

• n: stupanj ponavljanja

• m: srednja riječ ili broj paralelnih odjeljenja 1 6 m 6 n

• r: točka separacije riječi ili broj bitova donje maske bitova 0 6 r 6 w − 1

• a: koeficijent matrice uvijanja

• b, c: TGFSR(R) utjecajne maske bitova

• s, t: TGFSR(R) utjecajni posmaci bitova

• u, l: dodatni posmaci bitova

gdje je jedina restrikcija da je 2nw−r−1 Mersenneov broj. Uvijena transformacijaA definirana u racionalnom normalnom obliku glasi:

A = R = 0 Iw−1

aw−1 (aw−2, . . . , a0)

(3.4)

5

Page 9: Postupci i Algoritmi Generiranja Slucajnih Brojeva

gdje je Iw−1 jedinična matrica dimenzija (w− 1)× (w− 1). Racionalan normalanoblik je pogodan za iskazivanje umnoška na sljedeći način:

xA =

x 1 x0 = 0

(x 1)⊕ a x0 = 1(3.5)

kada je:x := (xk

u | xk+1l) k = 0, 1, . . . (3.6)

Uvijena transformacija poboljšava svojstva klasičnih GFSR-ova na sljedeći način:

1. period doseže teorijsku gornju granicu 2nw−r − 1

2. ekvidistribucija u n dimenzija

Također, kao i kod Lehmerovog generatora, značajan je izbor karakterističnihvrijednosti. O njima ovise svojstva i kvaliteta generatora. U svrhu ovog radaimplementirana je verzija MT199372 koja ima sljedeće koeficijente:

• (w, n,m, r) = (32, 624, 397, 31)

• a = 9908B0DF16

• u = 11

• (s, b) = (7, 9D2C568016)

• (t, c) = (15, EFC6000016)

• l = 18

Navedena inačica Mersenneova uvijača nazvana je na sljedeći način jer je periodgeneratora jednak 219937 − 1.

2Kôd implementiranog Mersenneova uvijača nalazi se u privitku 8.2.

6

Page 10: Postupci i Algoritmi Generiranja Slucajnih Brojeva

4. Pokazatelji i testovi slučajnosti

4.1. Pokazatelji slučajnosti

4.1.1. Očekivanje i varijanca

U teoriji vjerojatnosti očekivana vrijednost ili očekivanje slučajne varijable jetežinska aritmetička sredina svih ishoda slučajne varijable, rigorozna teorijskaformula iskazana je formulom 4.1. Varijanca je mjera raspršenosti brojevnogniza, iskazuje se formulama 4.2 ili 4.3.

E[X] =∫ ∞−∞

xf(x) dx (4.1)

Var(X) =∫ ∞−∞

(x− µ)2 f(x) dx (4.2)

Var(X) = E(X2)− (E(X))2 (4.3)

Alternativne oznake očekivanja i varijance su

µ = E[X] i σ2 = Var(X).

U idealnom slučaju generator pseudoslučajnih brojeva trebao bi simulirati unifor-mnu razdiobu, što bi značilo da su svi ishodi jednako mogući. Funkcija gustoćevjerojatnosti kontinuirane uniformne razdiobe iskazana je jednadžbom 4.4.

f(x) =

1

b−aza a ≤ x ≤ b,

0 za x < a ili x > b

(4.4)

Pošto je interval našeg interesa [0,1], teorijske vrijednosti očekivanja i varijanceidealnog generatora uniformno distribuiranih brojeva na tom intervalu su

µ = 12 i σ2 = 1

12 ≈ 0.0833.

7

Page 11: Postupci i Algoritmi Generiranja Slucajnih Brojeva

Izvršeno je više testova1 na nizovima od 10000 uzoraka za oba generatora te surezultati usrednjeni.

Park-Miller Mersenneov uvijačµ 0.4989 0.5008σ2 0.0838 0.0835

Iz rezultata je vidljivo da su odstupanja očekivanja i varijance implementiranihgeneratora slučajnih brojeva minimalna od idealnih vrijednosti.

4.1.2. Entropija

U teoriji informacija, entropija je mjera nepredvidljivosti slučajne varijable. Naj-češće entropija označava pojam Shannonove entropije. Shannonova entropija iz-ražava očekivanu vrijednost informacije u poruci. Poruka u našem slučaju jerealizacija slučajne varijable, tj. niz pseudoslučajnih brojeva. Entropija se izra-žava formulom 4.5. Gdje je b baza logaritma, uobičajena vrijednost je b = 2, takoda je jedinica entropije bit.

H(X) =n∑

i=1p(xi) I(xi) =

n∑i=1

p(xi) logb

1p(xi)

= −n∑

i=1p(xi) logb p(xi) (4.5)

Ako je izvor kompletno slučajan njegova entropija bi morala biti jednaka dužiniporuke jer je svaki simbol jednako vjerojatan. Entropija idealnog generatoraslučajnih brojeva iznosi H(X) = 8 [bit/byte].

Park-Miller Mersenneov uvijačH(X) [bit/byte] 7.9803 7.9823

Test2 pokazuje da implementirani generatori imaju prilično dobru entropiju.1Kôd za izračun očekivanja i varijance niza od 10000 brojeva dan je u privitku 8.3.2Kôd za izračun entropije niza od 10000 brojeva dan je u privitku 8.3.

8

Page 12: Postupci i Algoritmi Generiranja Slucajnih Brojeva

4.1.3. Histogram

U statistici histogram je grafički prikaz raspodjele podataka. Podaci su svrstaniu razrede te visina pojedinog razreda označava njegovu gustoću frekvencije3. Pri-kazom histograma4 (slike 4.1 i 4.2) ponovno smo potvrdili pseudoslučajna svojstaimplementiranih generatora.

Slika 4.1: Histogram idealnog generatora slučajnih brojeva

Slika 4.2: Histogram Mersenneova uvijača i Park-Millerova LCG-a

3Frekvencija podijeljena sa širinom razreda4Kôd za prikaz histograma implementiranih generatora dan je u privitku 8.4.

9

Page 13: Postupci i Algoritmi Generiranja Slucajnih Brojeva

4.1.4. Autokorelacija

Autokorelacija slučajnog proces opisuje korelaciju slučajnog procesa sa samim so-bom u različitim trenutcima u vremenu. Autokorelacija slučajne varijable opisujese jednadžbom 4.6. Često se umjesto vremena uzima samo vremenski pomakτ = t1 − t2 te u tom slučaju autokorelacijska funkcija se računa jednadžbom 4.7.

RXX(t1, t2) = E[X(t1)X(t2)] =∫ ∞−∞

∫ ∞−∞

x1x2 fX(t1)X(t2) (x1, x2) dx1dx2 (4.6)

RXX(t, τ) = E[X(t)X(t+ τ)] (4.7)

Na slikama 4.3 i 4.4 prikazane su autokorelacijske plohe5. U idealnom slučajuautokorelacijska matrica zapravo bi bila jedinična matrica, ali kako to nije slučajizvan dijagonale se nalaze elementi koji uzrokuju grbavost autokorelacijske plohe.

Slika 4.3: Autokorelacijska ploha Mersseneova uvijača

Slika 4.4: Autokorelacijska ploha Park-Millerova generatora

5Kôd za prikaz autokorelacijskih ploha nalazi se u privitku 8.5.

10

Page 14: Postupci i Algoritmi Generiranja Slucajnih Brojeva

4.2. Hi-kvadrat (χ2) test

Test je predložio Pearson 1900. godine, pa je poznat i pod nazivom Pearsonovtest. χ2 test je neparametarski test. Pomoću χ2 testa testiramo nultu hipotezu dauzorak ima određenu (teorijsku) razdiobu protiv alternativne da nema tu razdi-obu. Već u početku treba naglasiti da se χ2 test računa samo s frekvencijama pau račun nije dopušteno unositi nikakve mjerne jedinice. Osnovni podaci istraži-vanja mogu biti i mjerne vrijednosti, ali u test se unose samo njihove frekvencije.Najčešće upotrebljavamo χ2 test u sljedećim slučajevima:

1. Kad imamo frekvencije jednog uzorka pa želimo ustanoviti odstupaju li tefrekvencije od frekvencija koje očekujemo uz neku hipotezu

2. Kad imamo frekvencije dvaju ili više nezavisnih uzoraka te želimo ustanovitirazlikuju li se uzorci u opaženim svojstvima

3. Kad imamo frekvenciju dvaju zavisnih uzoraka, koji imaju dihotomna svoj-stva, te želimo ustanoviti razlikuju li se uzorci u mjernim svojstvima

Općenito, pretpostavimo da jedan ishod može pasti u jedan od k razreda. Ana-lizira se n ishoda te je ps vjerojatnost da ishod pada u razred s, a Ys stvarnavrijednost ishoda koji su ušli u razred s. Na temelju sljedećih pretpostavki defi-niramo statističku vrijednost V ma sljedeći način:

V =k∑

s=1

(Ys − nps)2

nps

(4.8)

Statistička vrijednost V uspoređuje se s onim danim u tablici u kojoj se nalazevrijednosti χ2 distribucije6. Uz k razreda bitno je navesti da je stupanj slobodeν = k − 1. Tablični rezultat, nazovimo ga x, u redu ν pod stupcem p ozačava:

P(V < x) = p (4.9)

Vrijednosti χ2 distribucije isključivo ovise o stupnju slobode, a ne o broju ishoda injihovoj vjerojatnosti. U stvarnosti, tablične vrijednosti χ2 distribucije približnesu vrijednosti koje vrijede uz uvjet velikog n.

U slučaju testiranja uniformnosti poželjno je da vrijednosti V padaju u ka-tegoriju između p = 25% i p = 75%, ako vrijednosti padaju između vrijednosti

6Tablica se nalazi u knjizi Donald E. Knuth, The Art of Computer Programming Volume 2Seminumerical Algorithms 2nd edition, 1981

11

Page 15: Postupci i Algoritmi Generiranja Slucajnih Brojeva

p = 5− 10% i p = 90− 95% počinjemo sumnjati u njihovu slučajnost. Analiza jeizvršena nad nizom od n = 10000 slučajnih brojeva oba generatora smještenih uk = 31 razred. Granične vrijednosti rezultata V dane su sljedećom tablicom:

p = 1% p = 5% p = 25% p = 50% p = 75% p = 95% p = 99%ν = 30 14.95 18.49 24.48 29.34 34.80 43.77 50.89

χ2 test proveden7 nad implementiranim generatorima izvršili smo za četiri slučaja,za svaki slučaj korištena je drugačija pobuda generatora. χ2 test pokazao jesljedeće rezultate:

Park-Miller Mersenneov uvijač

χ2 33.12 28.43p p = 50− 75% p = 25− 50%

χ2 19.26 34.48p p = 5− 25% p = 50− 75%

χ2 28.05 33.39p p = 25− 50% p = 50− 75%

χ2 28.28 27.70p p = 25− 50% p = 25− 50%

Vidljivo je da su test zadovoljila oba generatora iako su kod Park-Millerova gene-ratora prisutnija veća odstupanja, osobito prilikom drugog testa. Test se ponavljaviše puta uzastopno upravo zbog povremenih odmaka rezultata. Generator slu-čajnih brojeva nije prošao test ako se veći broj puta ponovi navedeni slučaj.

4.3. Kolmogorov-Smirnov test

Kolmogorov-Smirnov8 test je neparametarski test jednakosti jednodimenzionalnihkontinuiranih distribucija koji uspoređuje empirijski dobivenu distribuciju s teorij-skom. Test se temelji na usporedbi funkcija kumulativne raspodjele (eng. kraticaCDF – cumulative distribution function) empirijski dobivene CDF i pretpostav-ljene teorijske CDF. K-S test računa maksimalnu razliku funkcija distribucije9 te

7Kôd Hi-kvadrat testa nalazi se u privtku 8.6.8Skraćeno K-S test9Distorzija

12

Page 16: Postupci i Algoritmi Generiranja Slucajnih Brojeva

na temelju njihove vrijednosti zadržava ili odbacuje hipotezu o poklapanju dis-tribucija. Atraktivna značajka ovog testa je da vrijednosti samog testa ne oviseo vrsti kumulativne funkcije distribucije koju testiramo.

F (x) označava teorijsku CDF, a Fn(x) označava empirijski dobivenu CDF.Empirijski dobivena distribucija dana je jednadžbom 4.10 gdje je IXi≤x indikator.Funkcija indikator je jednaka jedan za Xi ≤ x, a nula inače.

Fn(x) = 1n

n∑i=1

IXi≤x (4.10)

Zatim računamo statističke vrijednosti K+n i K−n . K+

n je najveća devijacija kadaje Fn(x) > F (x), a K−n najveća devijacija kada je Fn(x) < F (x). Devijacije suizražene relacijama 4.11 i 4.12.

K+n =√n max (Fn(x)− F (x)) (4.11)

K−n =√n max (F (x)− Fn(n)) (4.12)

Uzimamo maksimalnu devijaciju D = max (K−n , K+n ). Zatim uspoređujemo dobi-

venu statističku vrijednost10 s onima u tabeli. Usporedbom vrijednosti dobivamonivo značajnosti testa (označava se s α). Ako je nivo značajnosti dovoljno visokmožemo tvrditi da su distribucije indentične uz navedeni nivo značajnosti. Testje izvršen za dvadeset različitih funkcija distribucije Park-Millerova generatora iMersenneova uvijača te su dobivene vrijednosti prikazane tablicom.

Park-Miller Mersenneov uvijačK+

20 0.0486 0.0378K−20 0.0300 0.0365

D 0.0486 0.0378

Na temelju dobivenih vrijednosti zaključujemo da se stvarno radi o generatorimauniformih brojeva uz nivo značajnosti11. Granična vrijednost p = α − 1 = 99%za n = 20 relizacija iznosi D = 0.03807 te zaključujemo:

α = 99% za Mersenneov uvijač

α = 95% za Park-Millerov generator.

10Kôd Kolmogorov-Smirnov testa nalazi se u privtku 8.7.11Vrijednosti su uspoređene s onima iz tablice knjige The Art of Computer Programming

Volume 2 Seminumerical Algorithms 2nd edition, Donald E. Knuth, 1981

13

Page 17: Postupci i Algoritmi Generiranja Slucajnih Brojeva

Vizualni prikaz razlika funkcija distribucije dan je slikama 4.5 i 4.6.

Slika 4.5: Funkcije distribucije

Slika 4.6: Razlika funkcija distribucije oko sredine grafa

14

Page 18: Postupci i Algoritmi Generiranja Slucajnih Brojeva

5. Sklopovlje za generiranjepravih slučajnih brojeva

5.1. Područje primjene i namjena sklopovlja

Generatori istinitih slučajnih brojeva imaju veliku prednost u tome da stvarajuslijedove koje je nemoguće predvidjeti, jer kao izvor svoje slučajnosti koriste slu-čajne fizikalne fenomene. Imaju široku upotrebu za sljedeće svrhe:

Enkripcija je proces u kriptografiji kojim se vrši izmjena podataka tako da seporuka, odnosno informacije, učine nečitljivim za osobe koje ne posjedujuključ enkripcije. Slučajni brojevi se koriste kako u simetričnoj, tako i uasimetričnoj kriptografiji kao način za generiranje ključeva. Budući da semora održati integritet u komunikaciji između dvije strane, potrebno jezadržati tajnost ključa koji se koristi. U tom su kontekstu generatori isti-nitih slučajnih brojeva vrlo bitni, jer oni osiguravaju adekvatnu slučajnostpotrebnu za održavanje sigurnosti poslanih poruka.

Psihokineza se odnosi na pokretanje ili utjecanje na pojedine stvari snagomuma. U granicama opće priznatih mehaničko-fizičkih zakona radi se onemogućim ili barem neobjašnjivim fenomenima. U istraživanjima veza-nim za psihokinezu se koriste generatori istinitih slučajnih brojeva, gdjesudionici, koncentriranim usmjeravanjem svojih misli, nastoje utjecati naizlazne vrijednosti generatora. Uvidom u nekoliko milijuna pokusa, znans-tvenici su ustanovili male, ali statistički značajne znakove koji ukazuju načinjenicu da je možda moguće mislima ostvariti interakciju sa strojevima.Međutim, u nedostatku pravih dokaza, znanstvenici ne tvrde da su upravočovjekove misli uzrok promjene izlaznih podataka generatora.

15

Page 19: Postupci i Algoritmi Generiranja Slucajnih Brojeva

5.2. Opis rada

Princip rada ovog generatora slučajnih brojeva se zasniva na korištenju lavinskogšuma tranzistora (slika 5.1) te upotrebi PIC (engl. kratica PIC – PeripheralInterface Controller) mikrokontrolera za analizu izvora šuma i serijsko slanjeslučajnih podataka.

Slika 5.1: Sklopovlje za generiranje bijelog šuma pomoću dva tranzistora Q1 i Q2

Sklop koristi lavinski šum u reverzno-polariziranom PN spoju emiter-baza pr-vog tranzistora. Drugi tranzistor služi za pojačavanje signala šuma. Prva dvaALS04 invertera su polarizirana u linearno područje rada kako bi djelovala kaooperacijska pojačala koja dalje pojačavaju signal šuma. Konačno pojačanje sig-nala uzrokuje treći inverter. MAX232 je integrirani krug koji ima dva pina prekokojih možemo dobiti 20V. Za analiziranje šuma i slanje slučajnih bitova koristi sePIC mikrokontroler. Ovdje se koristio 16F648A mikrokontroler jer u sebi sadržikomparator. Signal koji ulazi u PIC ima brze promjene razine između 1V i 2V, tešiljke koji idu do 3V. Nama su bitni jedino šiljci, a komparator je taj koji će uk-loniti neželjene promjene signala (1 - 2V) te poslati prekid PIC mikrokontrolerusvaki put kada se pojavi šiljak. Programski kôd pisan za PIC1 radi na sljedećinačin: mikrokontroler bilježi broj detektiranih šiljaka u kratkom vremenskomintervalu. Ukoliko je broj šiljaka neparan, kao izlazni podatak šalje logičku jedi-nicu; te ako je broj šiljaka paran, kao izlazni podatak šalje logičku nulu. Također,tiskana pločica ima dvije ulazne sklopke. One kontroliraju način rada vezan zaizlazne podatke i XOR masku. Sklopka za način rada određuje stvara li generatorslučajne bajtove ili ASCII znakove ’1’ i ’0’. Sklopka za XOR masku obavlja ope-raciju XOR nad izlaznim podacima generatora koristeći alternirajući niz jedinicai nula čime se pospješuje nepristranost.

1Kôd se nalazi u privitku 8.8.

16

Page 20: Postupci i Algoritmi Generiranja Slucajnih Brojeva

Slika 5.2: Električka shema sklopa za generiranje slučajnih brojeva.

17

Page 21: Postupci i Algoritmi Generiranja Slucajnih Brojeva

5.3. Tehnički podaci

Ulaz (X1):X1-1 Masa GNDX1-2 DC napon napajanja 12V

Izlaz (X2): D-SUB konektor za spajanje s računalomTemperaturni raspon: komercijalni (COM) 0 - 70 C

5.4. Uputstvo za uporabu

Za ispravan rad sklopa treba priključiti istosmjerni izvor napajanja na konektorX1. Vrijednost napona treba iznositi +12V, no sklop bi trebao raditi i s napaja-njem od +9V.

Generator istinitih slučajnih brojeva sadrži dvije sklopke. Sklopka S1 služi zauključivanje ili isključivanje XOR maske, dok sklopka S2 kontrolira izlazni načinrada.

18

Page 22: Postupci i Algoritmi Generiranja Slucajnih Brojeva

5.5. SastavnicaOznaka Opis Komentar Kolicina

C1, C2, C3, C4 Kondenzator 1µF 4C5, C6 Kondenzator 0.1µF 2C7, C8 Kondenzator 22 pF 2C9, C10 Kondenzator 10µF 2C11, C12 Kondenzator 100nF 2IC1 MAX232 MAX232ACPE 1IC2 Inverteri DM74ALS04BN 1IC3 Regulator napona L7805T 1IC4 PIC PIC16F648A 1LED1 LED dioda LED0 1R1 Otpornik 15 kΩ 1R2, R3 Otpornik 2.7 kΩ 2R4, R6, R7, R8 Otpornik 10 kΩ 4R5 Otpornik 220 Ω 1S1 Sklopka XOR 1S2 Sklopka MODE 1T1, T2 Tranzistor 2N3904 2X1 Konektor Napajanje 1X2 Konektor 2-788573-1 1Y1 Kristal 20mHz Kristal 1

19

Page 23: Postupci i Algoritmi Generiranja Slucajnih Brojeva

5.6. Položajni nacrt komponenata

Slika 5.3: Položajni nacrt komponenata.

20

Page 24: Postupci i Algoritmi Generiranja Slucajnih Brojeva

5.7. Nacrt tiskanih veza (lemna strana)

Slika 5.4: Nacrt tiskanih veza (lemna strana).

21

Page 25: Postupci i Algoritmi Generiranja Slucajnih Brojeva

5.8. Nacrt tiskanih veza (komponentna strana)

Slika 5.5: Nacrt tiskanih veza (komponentna strana).

22

Page 26: Postupci i Algoritmi Generiranja Slucajnih Brojeva

5.9. Plan bušenja

Slika 5.6: Plan bušenja.

23

Page 27: Postupci i Algoritmi Generiranja Slucajnih Brojeva

6. Primjena generatora slučajnihbrojeva

Generatori slučajnih brojeva imaju primjene u kockanju, statističkom uzorkova-nju, raznim računalnim simulacijama, kriptografiji te u ostalim područjima gdjeje poželjan nepredvidiv rezultat.

Važno je primjetiti da se u slučajevima gdje je slučajnost najvažnija, recimou sigurnosnim sustavima, preferira hardverska implementacija ispred pseudoslu-čajnih algoritama. Generatori slučajnih brojeva su izuzetno korisni u razvojusimulacije Monte Carlo metodom, kao i za ispravljanje pogrešaka (engl. debug-ging) jer pružaju mogućnost pokretanja istog slijeda slučajnih brojeva počevši odistog slučajnog sjemena. Također, vrlo se često koristi u kriptografiji i to takodugo dok je sjeme tajna. Sigurnost informacija je danas izuzetno bitna stavka iu nju se puno ulaže, generatori slučajnih brojeva tu imaju ključnu ulogu, pogo-tovo kod generiranja lozinki i asimetričnih ključeva. Generiranje pseudoslučajnihbrojeva je važan i čest zadatak u računalnom programiranju. Dok npr. kripto-grafija i još neki numerički algoritmi zahtijevaju visok stupanj slučajnosti, većinaalgoritama ipak može ispravno raditi sa značajno manjim stupnjem slučajnosti.S takvim algoritmima smo se već često susretali i često se koriste (algoritmi zapretraživanje i sortiranje).

Bitno je generator optimalno prilagoditi zahtjevima sustava, a prije svegaosigurati da sam postupak generiranja bude brz, efikasan i točan. Zapravo, možese reći da smo napravili kvalitetan generator ako se ne može otkriti način na kojise brojevi generiraju. Ponovno moramo istaknuti kompleksnost samog pojmaslučajno. Jedna od čestih primjena s kojim se susrećemo svakodnevno je nanašem mp3 playeru ili iPodu gdje odabiremo opciju shuffle umjesto direktnogodabira pjesme koje želimo slušati. Iako bi izbor trebao biti potpuno slučajan,svakako nije poželjno da se neka pjesma reproducira dva ili više puta zaredom.

24

Page 28: Postupci i Algoritmi Generiranja Slucajnih Brojeva

7. Literatura

[1] The Art of Computer Programming Volume 2 Seminumerical Algorithms 2ndedition, Donald E. Knuth, 1981.[2] Laboratorijska vježba 1. – Generiranje slučajnih brojeva (LCG), generiranjeslučajnih procesa, uzoračka srednja vrijednost, devijacija te autokorelacijska i kro-skorelacijska funkcija , Tomislav Petković, 2009.[3] Testing Random Number Generators, Dr. John Mellor-Crummey, Departmentof Computer Science Rice University, 2005.[4] Pseudo-Random Number Generators, Vivien Challis, Part of the postgraduatejournal club series, Mathematics, UQ, 2008.[5] robseward.com/itp/adv_tech/random_generator/[6] www.siliconchip.com.au/cms/A_103659/article.html

25

Page 29: Postupci i Algoritmi Generiranja Slucajnih Brojeva

8. Privitak

8.1. Park-Miller LCG

function [random] = lcg(z0)

persistent z;

if nargin > 0

z = z0;

random = z;

return;

end

if isempty(z)

z = 1;

random = z;

return;

end

a = 16807;

m = 2^31 - 1;

z = mod(a*z, m);

random = int32(z);

end

26

Page 30: Postupci i Algoritmi Generiranja Slucajnih Brojeva

8.2. MT19937

8.2.1. Inicijalizacija generatora

function [MT] = init_generator(seed)

MT = zeros(1, 624);

index = 0;

RS = 0;

pomint = 0;

pomdec = 0;

for i = 1 : length(MT)

if i == 1

RS = bitshift(seed,-30);

pomint = uint64( 1812433253 * (bitxor(seed,RS)) + i );

else

RS = bitshift(MT(i-1),-30);

pomint = uint64( 1812433253 * (bitxor(MT(i-1),RS)) + i );

end

pomdec = dec2bin(pomint);

MT(i) = uint32(bitshift(pomint,(-length(pomdec)+32)));

RS = 0;

end

27

Page 31: Postupci i Algoritmi Generiranja Slucajnih Brojeva

8.2.2. Generiranje niza za ekstrakciju brojeva

function [MTO] = generate_numbers(MT)

MTO = zeros(1, 624);

y = 0;

modindex = 0;

pomint = 0;

pomdec = 0;

mask1 = hex2dec(’80000000’);

mask2 = hex2dec(’7FFFFFFF’);

for i = 1 : length(MT)

if mod(i+1,625) == 0

pomdec = dec2bin(MT(1));

y = bitand(MT(624),mask1) + bitshift(MT(1),(-length(pomdec)+32));

else

pomdec = dec2bin(MT(mod(i+1,625)));

y = bitand(MT(i),mask1) +

bitshift(MT(mod(i+1,625)),(-length(pomdec)+32));

end

modindex = mod(i + 397,624) + 1;

MT(i) = bitxor((MT(modindex)),(bitshift(y,-1)));

if mod(y,2) == 0

else

MT(i) = bitxor(MT(i),2567483615);

end

end

MTO = MT

28

Page 32: Postupci i Algoritmi Generiranja Slucajnih Brojeva

8.2.3. Ekstrakcija i skaliranje pseudoslučajnih brojeva

function [izlaz] = extract_number(seed)

MT = init_generator(seed);

NMBR = zeros(1, 624*200);

for i = 1:200

if i == 1

MTO = generate_numbers(MT);

else

MTO = generate_numbers(MTO);

end

for index = 1:624

NMBR(index+(i-1)*624) = MTO(index);

NMBR(index+(i-1)*624) = bitxor(NMBR(index+(i-1)*624),

bitshift(NMBR(index+(i-1)*624),-11));

NMBR(index+(i-1)*624) = bitxor(NMBR(index+(i-1)*624),

bitand(bitshift(NMBR(index+(i-1)*624),7),2636928640));

NMBR(index+(i-1)*624) = bitxor(NMBR(index+(i-1)*624),

bitand(bitshift(NMBR(index+(i-1)*624),15),4022730752));

NMBR(index+(i-1)*624) = bitxor(NMBR(index+(i-1)*624),

bitshift(NMBR(index+(i-1)*624),-18));

end

end

izlaz = NMBR./(2^32-1);

29

Page 33: Postupci i Algoritmi Generiranja Slucajnih Brojeva

8.3. Skripta za izračun očekivanja, varijance ientropije

s = ceil(rand*10000);

niz_MT = MT_1000(s);

niz_LCG = LCG_1000();

E_LCG = mean(niz_MT);

var_LCG = var(niz_MT);

E_MT = mean(niz_LCG);

var_MT = var(niz_LCG);

ent_LCG = entropy(niz_MT);

ent_MT = entropy(niz_LCG);

30

Page 34: Postupci i Algoritmi Generiranja Slucajnih Brojeva

8.4. Skripta za prikaz histograma

figure;

s = ceil(10000*rand);

izlaz = extract_number(s);

izlaz = izlaz(1:100000);

subplot(1,2,1);

hist(izlaz);

title(’Mersenneov uvijač’)

brojevi = zeros(1, 100001);

for i=1:length(brojevi)

brojevi(i) = lcg;

end

brojevi = brojevi./(2^31-1);

subplot(1,2,2);

hist(brojevi);

title(’Park-Miller’)

31

Page 35: Postupci i Algoritmi Generiranja Slucajnih Brojeva

8.5. Funkcija za iscrtavanje autokorelacijskih ploha

function [corr] = autokorelacija()

figure;

x = zeros(20,10000);

for i = 1:20

s = ceil(10000*rand);

x(i,:) = MT_1000(s);

end

corr = corrcoef(x’);

subplot(1,2,1);

mesh(corr);

title(’Autokorelacija Mersenneova uvijača’)

x = zeros(20,10000);

for i = 1:20

x(i,:) = LCG_1000;

end

corr = corrcoef(x’);

subplot(1,2,2);

mesh(corr);

title(’Autokorelacija Park-Millerova generatora’)

title(’Park-Miller’)

32

Page 36: Postupci i Algoritmi Generiranja Slucajnih Brojeva

8.6. χ2 test

8.6.1. Funkcija χ2 testa

function [izlaz] = chikvadrat(niz)

niz = niz(1:10000);

[n,x] = hist(niz,31);

e = length(niz)/31.0;

izlaz = sum(power(n-e,2)/e);

33

Page 37: Postupci i Algoritmi Generiranja Slucajnih Brojeva

8.6.2. χ2 test za implementirane generatore slučajnih bro-jeva

s = ceil(rand*10000);

niz_MT = MT_1000(s);

chikvadrat_LCG = chikvadrat(LCG_1000);

chikvadrat_MT = chikvadrat(niz_MT);

34

Page 38: Postupci i Algoritmi Generiranja Slucajnih Brojeva

8.7. Kolmogorov-Smirnov test

8.7.1. K-S test za Park-Millerov generator

x = zeros(5,10000);

for i = 1:20

x(i,:) = sort(LCG_1000());

end

y = 0:0.0001:1;

y = y(1:10000);

maksimum = zeros(1,20);

minimum = zeros(1,20);

for i = 1:5

maksimum(i) = max(x(i,:) - y);

minimum(i) = max(y - x(i,:));

end

Knmaks_lcg = sqrt(20)*max(maksimum);

Knmin_lcg = sqrt(20)*max(minimum);

35

Page 39: Postupci i Algoritmi Generiranja Slucajnih Brojeva

8.7.2. K-S test za Mersenneov uvijač

x = zeros(20,10000);

for i = 1:20

s = ceil(10000*rand);

x(i,:) = sort(MT_1000(s));

end

y = 0:0.0001:1;

y = y(1:10000);

maksimum = zeros(1,20);

minimum = zeros(1,20);

for i = 1:5

maksimum(i) = max(x(i,:) - y);

minimum(i) = max(y - x(i,:));

end

Knmaks_mt = sqrt(20)*max(maksimum);

Knmin_mt = sqrt(20)*max(minimum);

36

Page 40: Postupci i Algoritmi Generiranja Slucajnih Brojeva

8.7.3. Programski kôd PIC-a

define OSC 20

On Interrupt Goto myint ’ Define interrupt handler (PBP Gimme)

INTCON = %11100000 ’ Enable Peripheral interrupts (Hardware Serial included)

PIE1 = %01000001 ’Enable Comparator and timer1 interrupts

T1CON = %00001001

VRCON = %10001000 ’Voltage Reference module register - 1000

’CMCON = %00000100 ’Comparator register (hardware reference voltage)

CMCON = %00000010 ’Comparator register (software reference voltage)

DEFINE HSER_TXSTA 20h

DEFINE HSER_BAUD 19200

TRISB = %00101000

TRISA = 255 ’input

statusLED var portb.4

modeSwitch var portb.5

xorSwitch var portb.3

prevMode var bit

prevXor var bit

counter var word

shift var byte

outByte var byte

inBit var bit

flip var bit

counter = 0

high statusled

main:

goto main

disable

myint:

if PIR1.6 = 1 then

CMCON.6 = 0

PIR1.6 = 0

counter = counter + 1

37

Page 41: Postupci i Algoritmi Generiranja Slucajnih Brojeva

endif

if PIR1.0 = 1 then

PIR1.0 = 0

TMR1H = $F5

TMR1L = $00

if modeSwitch = 0 then ’random byte mode

inBit = counter // 2 ’output 1’s and 0’s

if xorSwitch = 1 then

inBit = inBit ^ flip

flip = ~flip

endif

outbyte = outByte | (inBit << shift)

shift = shift + 1

if shift = 8 then

shift = 0

hserout [outbyte]

outByte = 0

endif

endif

if modeSwitch = 1 then ’asci out

inBit = counter // 2 ’output 1’s and 0’s

if xorSwitch = 1 then

inBit = inBit ^ flip

flip = ~flip

endif

HSerout [DEC inBit]

endif

counter = 0

endif

resume

enable

38