Algoritmi Generisanja Pseudoslučajnih Brojeva

You might also like

You are on page 1of 15

Algoritmi generisanja pseudosluajnih brojeva

Krsto Prorokovi

Algoritmi generisanja pseudosluajnih brojeva

Sadraj:
1. TA SU PSEUDOSLUAJNI BROJEVI?.............................................3 1.1. SLUAJNI BROJEVI...........................................................................................3 1.2. PSEUDOSLUAJNI BROJEVI..................................................................................3 2. ALGORITMI GENERISANJA PSEUDOSLUAJNIH BROJEVA................4 2.1. METODA SREDINE KVADRATA..............................................................................5 2.2. BLUM-BLUM-UB..........................................................................................7 2.3. LINEARNI KONGRUENTNI GENERATOR......................................................................8 2.3.1. Lemerov algoritam generisanja pseudosluajnih brojeva...............9 2.3.2. M generator.....................................................................................9 2.4. INVERZIVNI KONGRUENTNI GENERATOR..................................................................10 2.5. FIBONAIJEV GENERATOR SA KANJENJEM...............................................................11 3. JO NEKI ALGORITMI GENERISANJA PSEUDOSLUAJNIH BROJEVA. 12 4. PROCJENA KVALITETA...............................................................13 5. INDEKS KLJUNIH RIJEI...........................................................14 6. SPISAK LITERATURE I IZVORA...................................................15

Krsto Prorokovi 2

Algoritmi generisanja pseudosluajnih brojeva

1. ta su pseudosluajni brojevi?
1.1. Sluajni brojevi
Sluajni brojevi (eng. random numbers) su nizovi brojeva koji se ne pokoravaju nikakvom obrascu, tj. ne postoji obrazac po kojem se dobijaju. Sluajni brojevi se javljaju u prirodnim pojavama i situacijama koje je nemogue predvidjeti. S obzirom da je samo pojavljivanje nizova sluajnih brojeva potpuno nepredvidivo, nemogue je odrediti da li je neki niz sluajan ili ne. Dokazano je da svi nizovi brojeva pokazuju neke od karakteristika koje se oekuju od od nizova sluajnih brojeva.

1.2. Pseudosluajni brojevi


Pseudosluajni brojevi (eng. pseudo-random numbers, gr. pseudo laan, neistinit) su brojevi dobijeni po nekom obrascu (ili algoritmu), ali se smatraju sluajnima poto mi taj obrazac u mislima ne moemo rekonstruirati.

Krsto Prorokovi 3

Algoritmi generisanja pseudosluajnih brojeva

2. Algoritmi generisanja pseudosluajnih brojeva


Algoritmi generisanja pseudosluajnih brojeva (ili generatori pseudoslucajnih brojeva) su algoritmi pomou kojih se dobijaju nizovi pseudosluajnih brojeva. Ulazni podatak u svakom algoritmu generisanja pseudosluajnih brojeva je sjeme (eng. seed), tj. sluajni broj koji predstavlja prvi lan niza pseudosluajnih brojeva. Svi algoritmi generisanja pseudosluajnih brojeva zasnovani su na rekurzivnim aritmetikim ili logikim formulama. Za izraunavanje sljedeeg lana niza moemo upotrijebiti samo jedan ili vie ve izraunatih lanova. Iako se radi o velikom broju moguih pseudosluajnih brojeva koji se mogu dobiti izvravanjem ovih algoritama i dalje se radi o konanom broju. Ukoliko je dobijeni pseudosluajni broj jednak nekom od prethodno dobijenih pseudosluajnih brojeva u nizu, dolazi do ciklinog ponavljanja nekog ve generisanog podniza. Najvea duina niza prije nego to on pone da se ponavlja naziva se period i on se mjeri u bitima. Drugim rijeima, period je broj pseudosluajnih brojeva u nizu koji se cikliki ponavlja.

Primjena ovih algoritama moze se podijeliti u dvije grupe: 1. Kriptografija (ifrovanje ili kodiranje) sigurnost poruke direktno zavisi od kvaliteta ifrovanja; ifrovanje se zasniva na kljucevima (eng. keys) koji se generiu pomocu ovih algoritama. 2. Raunarske simulacije opsisivanje realnog dogaaja uz pomo brojeva. Ovi algoritmi su najvie koriteni u izradi maina za kockanje, kao i u izradi video igara i lava lampi. Krsto Prorokovi 4

Algoritmi generisanja pseudosluajnih brojeva U nastavku seminarskog rada bie prikazani sljedei algoritmi generisanja pseudosluajnih brojeva: Metoda sredine kvadrata Blum-Blum-ub Linearni kongruentini generator Inverzivni kongruentni generator Fibonaijev generator sa kanjenjem

2.1. Metoda sredine kvadrata


Svako ko smatra da se korienjem aritmetikih operacija mogu dobiti sluajni brojevi, svakako da je zgrijeio. Don fon Nojman
Metoda sredine kvadrata je algoritam generisanja pseudosluanih brojeva, objavljen 1946.g. od strane Maarsko-Amerikog matematiara Dona fon Nojmana (John von Neumann). Algoritam glasi: 1. Uzeti neki prirodan broj od n cifara (sjeme). 2. Kvadrirati ga. 3. Od dobijenog broja izdvojiti sredjih n cifara; broj sainjen od tih cifara predstavlja pseudosluajni broj. 4. Ukoliko zelite da generiete jo pseudosluajnih brojeva ponovite korake 2 i 3, tako to ete za sjeme uzeti ve dobijeni pseudosluajni broj. Primjer: 1. Sjeme: 2. Kvadrat sjemena: 3. Pseudosluajni broj: 675248 455959861504 959861 4. Period ovog algoritma za generisanje pseudosluajnih brojeva ne moe biti vei od 8n , gdje je n broj cifara sjemena. Grafiki prikaz algoritma bi izgledao ovako:

Krsto Prorokovi 5

Algoritmi generisanja pseudosluajnih brojeva

Krsto Prorokovi 6

Algoritmi generisanja pseudosluajnih brojeva

xppredstavlja sjeme, n broj cifara sjemena, a xp+1dobijeni pseudosluajni broj ( xp, xp+1 i n su prirodni brojevi)
Zadatak 1: Ako se za sjeme uzme 1111, koji e se pseudosluajni brojevi dobiti ako se algoritam izvri 3 puta? Zadatak 2: U nekom od poznatih programskih jezika, napisati program koji generie pseudosluajne brojeve primjenom metode srednjeg kvadrata.

2.2. Blum-Blum-ub
Blum-Blum-ub (eng. Blum-Blum-Shub) je algoritam generisanja pseudosluajnih brojeva koji su 1986.g. objavili Manuel Blum (eng. Manuel Blum), Lenore Blum (eng. Lenore Blum) i Majkl ub (eng. Michael Shub). Obrazac ovog algoritma po kom se dobijaju pseudosluajni izgleda ovako:
2 xn+1 = xn mod M

gdje je M prizvod dva velika, uzajamno prosta broja p i q takva da oba pri dijeljenju sa 4 daju isti ostatak. Za sjeme ( x0 ) uzima se broj koji je razliit od 1 i koji nije uzajamno prost sa M (p i q ne smiju biti faktori x0 ). Ovaj algoritam nije pogodan za upotrebu u raunarskim simulacijama, ve samo samo u kriptografiji, jer se izvravanje algoritma odvija veoma sporo. Primjer: Neka je p=7, q=19 i sjeme x0 =100. Tada je M=p*q=7*19=133.
2 x1 = x0 mod M = 10000 mod133 = 25

x2 = 252 mod133 = 625mod133 = 93 x3 = 932 mod133 = 8649 mod133 = 4 x4 = 4 2 mod133 = 16 mod133 = 16 ...
Dobijamo sljedee pseudosluajne brojeve: 25, 93, 4, 16 itd. Zadatak 1: Ako je p=11, q=19 i sjeme x0 =3, koji e se pseudosluajni brojevi dobiti ako se algoritam izvri 3 puta? Zadatak 2: U nekim od poznatih programskih jezika, napisati program koji generie pseudosluajne brojeve primjenom Blum-Blum-ub-a. Krsto Prorokovi 7

Algoritmi generisanja pseudosluajnih brojeva

2.3. Linearni kongruentni generator


Linearni kongruentni generator je jedan od najstarijih i najpoznatijih algoritama generisanja pseudosluajnih brojeva. U ovom algoritmu, pseudosluajni brojevi u nizu se dobijaju po sljedeem obrascu:

xn+1 = a xn + c (mod m )
gdje su m, a i c konstante takve da: m>0 0<a<m 0c<m m (modulus) predstavlja gornju granicu pseudosluajnih brojeva koji nastaju i za m se najee uzim broj oblika 2 M (M je prirodan broj). Za sjeme ( x0 ) uzima se broj takav da 0 x< m 1 U zavisnosti od c izdvajaju se 2 vrste linear congruential generator-a: 1. c = 0, multiplikativni kongruentni generator najvei period koji moe postii ovaj linearni kongruentni generator je etvrtina m i to je mogue samo ako se odabere konstanta a takva da pri dijeljenju sa 8 daje ostatak 3 ili pri dijeljenju sa 8 daje ostatak 5. 2. c > 0, mjeoviti kongruentni generator ako se odabere konstanta a takva da pri dijeljenju sa svim prostim djeliocima konstante m daje ostatak 1 i pri dijeljenju sa 4 daje ostatak 1 i konstanta m takva da se 4 sadi u m, postie se puni period u vrijednosti od m. Linearni kongruentni generator je veoma brzi algoritam generisanja pseudosluajnih brojeva, to ga ini jako pogodnim za raunarske simulacije. Ovaj algoritam koristi se za generisanje pseudosluajnih brojeva u veini programskih jezika. Zadatak 1: U nekom od poznatih programskih jezika, napisati program koji generie pseudosluajne brojeve primjenom: a) multiplikativnog kongruentnog generatora b) mjeovitog kongruentnog generatora.

Krsto Prorokovi 8

Algoritmi generisanja pseudosluajnih brojeva

2.3.1. Lemerov algoritam generisanja pseudosluajnih brojeva


Lemerov algoritam za generisanje pseudosluajnih brojeva, nazvan po njegovom tvorcu, amerikom matematiaru Deriku Henri Lemeru (eng. Derrick Henry Lehmer) je poseban sluaj multiplikativnog kongruentnog generator-a. Obrazac za dobijanje pseudosluajnih brojeva u nizu u ovom algoritmu je:

xk+1 = g xk mod n
gdje je n= 2 31 1 = 2147483647 (Mersenov prost broj M 31 ) i g= 75 = 16807 . Vrijednosti ovih parametara, predloili su 1988.g. Stiven Park (eng. Stephen Park) i Kit Miller (eng. Keith Miller), zbog kojih se ovaj algoritam generisanja pseudosluajnih brojeva jo naziva i Park-Miller alogiritam generisanja pseudosluajnih brojeva.

2.3.2. M generator
Ukoliko elimo da dobijemo pseudosluajne brojeve bolje sluajnosti moemo upotrijebiti dva linear congruential generator-a, pri emu dobijamo M generator. Ideja je sljedea: koristimo jedan linear congruential generator kako bi dobili niz pseudosluajnih brojeva duine n. Zatim korienjem drugog linear congruential generator-a generiemo pseudosluajan broj k koji se nalazi izmeu 1 i n. U izlazni niz stavljamo k-ti lan prvog niza, zatim ponovo generiemo broj izmeu 1 i n, itd. Algoritam glasi: 1. pomou linear congruential generator-a 1 generisati niz Pi , i = 1, 2, ..., n 2. pomou linear congruential generator-a 2 generisati pseudosluajan broj k izmeu 1in 3. u nizu P pronai k-ti lan 4. Pk uzeti za izlazni pseudosluajni broj 5. generisati novu vrijednost za Pk 6. ponavljati korake 2-5 dok se ne dobije niz eljene duine Postupak se moe prikazati sljedeom emom:

Krsto Prorokovi 9

Algoritmi generisanja pseudosluajnih brojeva

2.4. Inverzivni kongruentni generator


Inverzivni kongruentni generator (eng. inversive congruential generator) je vrsta nelinearnog kongruentnog generatora. Obrazac za dobijanje pseudosluajnih brojeva u nizu glasi:

xi+1 = (a xi1 + c)mod q , za xi 0 xi+1 = c , za xi = 0


gdje je q prost broj, a a i c prirodni brojevi. Niz (xn ), n> 0 mora imati xi = xj poslije konano mnogo koraka. Poto sljedei lan u nizu zavisi samo od prethodnog, tada e xi+1 = xj+1 . Maksimalni period koji moe posti ovaj algoritam generisanja pseudosluajnih brojeva je q. Primjer: Neka je q=5, a=2, c=3 i x0 =1.

x0 = 1
Krsto Prorokovi 10

Algoritmi generisanja pseudosluajnih brojeva

x1 = (2 11 + 3)mod 5 = 0 x2 = 3 1 x3 = (2 3 + 3)mod 5 = 2 x4 = (2 2 1 + 3)mod 5 = 4 x5 = (2 41 + 3)mod 5 = 1 ...


Dobijamo sljedee pseudosluajne brojeve: 0, 3, 2, 4, 1. Vidi se da je x0 = x5 , to znai da e se ovih 5 lanova ponavljati. Dakle, period je q=5. Zadatak 1: U nekom od poznatih programskih jezika, napisati program koji generie pseudosluajne brojeve primjenom inverzivnog kongruentnog generatora.

2.5. Fibonaijev generator sa kanjenjem


Ideja za Fibonaijev generator sa kanjenjem (eng. lagged Fibonacci generator) zasniva se na obrazcu za rekurzivno odreivanje Fibonaijevih brojeva:

Fn = Fn1 + Fn2 , F0 = 0 , F1 = 1
Obrazac za dobijanje pseudosluajnih brojeva u nizu je sledei:

Sn = (Sn j Snk )mod m , 0 < j < k


gdje predstavlja neku binarnu operaciju. m je najsee 2 podignut na neki stepen, obino 2 32 ili 2 64 . Fibonaijev generator sa kanjenjem ima maksimalni period (2 k 1) 2 M1 ako je za operacuju uzeto sabiranje ili oduzimanje, ili (2 k 1) 2 M3 ako je za operaciju uzeto mnoenje. Dakle, period Fibonaijevog generatora sa kanjenjem sa operacijom sabiranja ili oduzimanja bie 4 puta vei od perioda Fibonaijevog generatora sa kanjenjem sa operacijom mnoenja. Zadatak 1: U nekom od poznatih programskih jezika, napisati program koji generie pseudosluajne brojeve primjenom Fibonaijevog generatora sa kanjenjem sa operacijom: a) sabiranja b) oduzimanja c) mnoenja. Krsto Prorokovi 11

Algoritmi generisanja pseudosluajnih brojeva

3. Jo neki algoritmi generisanja pseudosluajnih brojeva


Generator linearno pomjerajueg registra (eng. Linear feedback shift register) U ovom algoritmu generisanja pseudosluajnih brojeva, za dobijanje pseudosluajnih brojeva koriste se logike operacije. Ovaj algoritam je iroko primijenjen u kriptografiji. Xorshift Ovaj algoritam predstavlja podklasu genertora linearno pomjerajueg registra. Osmislio ga je Dord Marsaglia (eng. George Marsaglia). Ovaj algoritam generisanja pseudosluajnih brojeva ima period od 2128 1. Mersenov uvija (eng. Mersenne twister) Razvijen je 1997.g. od strane japanskih matematiara Makata Matsumota i Takudi Miimure. Zasnovan je na matrinoj linearnoj rekurziji nad konanim poljem. Pomou ovo algoritma generisanja pseudosluajnih brojeva brzo se generiu visoko kvalitetni pseudosluajni brojevi. Sam algoritam je napravljen da bi ispravio mane prethodno nastalih algoritama pseudosluajnih brojeva. Njegov naziv potie od injenice da je za duinu perioda uzet Mersenov prost broj. U zavisnosti od vrijednosti Mersenovog prostog broja razlikujemo dvije vrste Mersenovog uvijaa MT19937 i MT19937-64. Novija i ee koriena varijanta, MT19937 ima veoma dug period u vrijednosti od 219937 1. ISAAC (od eng. indirection, shift, accumulate, add, count) Dizajnirao ga je Robert Denkins (eng. Robert Jenkins) za upotrebu u kriptografiji. Fortuna Kriptografski siguran algoritam generisanja pseudosluajnih brojeva, smiljen od strane Brusa najera (eng. Brus Schneier) i Nilsa Fergusona (eng. Niels Ferguson). Dobio je naziv po Fortuni, rimskoj boginji sree.

Krsto Prorokovi 12

Algoritmi generisanja pseudosluajnih brojeva

4. Procjena kvaliteta
Njemaka Federalna Sluba za Informacionu Bezbjednost je uspostavila 4 standarda kvaliteta algoritama za generisanje pseudosluajnih brojeva: K1 Niz pseudosluajnih brojeva sa malom vjerovatnoom sadrnja identinih uzastopnih lanova K2 Niz pseudosluajnih brojeva koji se ne moe razlikovati niza pravih sluajnih brojeva. Ovakav niz se odreuje preko odreenih testova monibit test, poker test, runs test, longruns test i autocorrelation test. K3 Niz u kojem je bi trebalo biti nemogue izraunati ili pogoditi bilo koji prethodni ili sljedei lan niza na osnovu datog podniza. K4 Niz u kojem bi trebalo biti nemogue izraunati ili pogoditi bilo koji prethodni ili sljedei lan niza ili prethodno stanje, na osnovu datog stanja.

Za upotrebu u kriptografiji, jedino algoritmi generisanja pseudosluajnih brojeva koji zadovoljavaju K3 ili K4 standard su prihvatljivi.

Krsto Prorokovi 13

Algoritmi generisanja pseudosluajnih brojeva

5. Indeks kljunih rijei


A
algoritmi generisanja pseudosluajnih brojeva............................................4 Lemerov algoritam za generisanje pseudosluajnih brojeva..................9

M
M generator........................................9 Mersenov uvija................................12 metoda sredine kvadrata....................5 mjeoviti kongruentni generator.........8 multiplikativni kongruentni generator. 8

B
Blum-Blum-ub...................................7

Fibonaijev generator sa kanjenjem 11 Fortuna.............................................12

G I

P S

generator linearno pomjerajueg registra..........................................12 Inverzivni kongruentni generator......10 ISAAC................................................12

period..................................................4 pseudosluajni brojevi.........................3 sjeme..................................................4 sluajni brojevi....................................3 Sluajni brojevi....................................3

X
Xorshift.............................................12

Krsto Prorokovi 14

Algoritmi generisanja pseudosluajnih brojeva

6. Spisak literature i izvora


[1] Donald E. Knuth (1997) The Art of Computer Programming Volume 2: Seminumerical Algorithms (3rd Edition) Addison-Wesley Professional, Chapter 3 Random Numbers [2] http://en.wikipedia.org/wiki/Pseudorandom_number_generator [3] http://en.wikipedia.org/wiki/Middle-square_method [4] http://en.wikipedia.org/wiki/Blum_Blum_Shub [5] http://en.wikipedia.org/wiki/Linear_congruential_generator [6] http://en.wikipedia.org/wiki/ParkMiller_random_number_generator [7] http://en.wikipedia.org/wiki/Inversive_congruential_generator [8] http://en.wikipedia.org/wiki/Lagged_Fibonacci_generator [9] http://en.wikipedia.org/wiki/Linear_feedback_shift_register [10] http://en.wikipedia.org/wiki/Xorshift [11] http://en.wikipedia.org/wiki/Mersenne_twister [12] http://en.wikipedia.org/wiki/ISAAC_(cipher) [13] http://en.wikipedia.org/wiki/Fortuna_(PRNG) [14] http://sr.wikipedia.org/sr-el/_ [15] http://os2.zemris.fer.hr/random/2001_marekovic/index.html [16] http://os2.zemris.fer.hr/random/2001_juric/index.html [17] http://www.scribd.com/doc/63056328/32/Generator-pseudosluajnih-brojeva [18] http://wiki.etf.rs/mediawiki/images/IR4PRS_generisanje_pseudoslucajnih_brojeva.pdf [19] http://fizika.mylivepage.ru/wiki/306_General/394_Generator_sluajnih_brojeva

Krsto Prorokovi 15

You might also like