seminar pseudoslučajni brojevi

12
Sveučilište Josipa Jurja Strossmayera u Osijeku Stručni studij elektrotehnike INFORMACIJA I INFORMACIJSKI SUSTAVI Generiranje pseudoslučajnih brojeva

description

Sveu ili te Josipa Jurja Strossmayera u Osijeku Stru ni studij elektrotehnikeINFORMACIJA I INFORMACIJSKI SUSTAVI Generiranje pseudoslu ajnih brojevaU Osijeku 27.09.2010.SADR AJ1. UVOD 2. PSEUDOSLU AJNI BROJEVI 3. PRIMJERI PSEUDOSLU AJNIH BROJEVA TEMELJENIH NA ARITMETICI 3.1 Linear congruential generator 3.2 Lagged Fibonacci generator 3.3 Linear shift register generator 4. ZAHTIJEVI I POSEBNOSTI GENERIRANJA PSEUDOSLU AJNIH BROJEVA 5. ZAKLJU AK 6. LITERATURA1. UVO

Transcript of seminar pseudoslučajni brojevi

Sveučilište Josipa Jurja Strossmayera u Osijeku

Stručni studij elektrotehnike

INFORMACIJA I INFORMACIJSKI SUSTAVI

Generiranje pseudoslučajnih brojeva

U Osijeku 27.09.2010.SADRŽAJ

1. UVOD

2. PSEUDOSLUČAJNI BROJEVI

3. PRIMJERI PSEUDOSLUČAJNIH BROJEVA TEMELJENIH NA ARITMETICI

3.1 Linear congruential generator

3.2 Lagged Fibonacci generator

3.3 Linear shift register generator

4. ZAHTIJEVI I POSEBNOSTI GENERIRANJA PSEUDOSLUČAJNIH BROJEVA

5. ZAKLJUČAK

6. LITERATURA

1. UVOD

Slučajni broj. Samo po sebi zvuči kao nešto što u nekakvoj primjeni u svijetu informatike odnosno elektronike može zadavati više problema nego koristi jer postavlja se pitanje kako realni sustav može iskoristiti nešto što je ne predvidivo.A ipak koristimo realne strojeve da bi generirali slučajni broj.Na posljetku tako generiran slučajan broj i nije na istinski način slučajan jer proces njihovog nastanka nije slučajan. Tako nastale brojeve s toga i nazivamo "pseudoslučajnim" brojevima.

Danas psedoslučajni brojevi imaju svoju primjenu u svijetu računala, računalnih igara, raznim simulacijama i kriptografiji, tako da se u svakom trenutku diljem svijeta računaju ogromne količine pseudoslučajnih brojeva. U različitim igrama koriste se da bi promijenili neke parametre igre tako da ne dolazi do ponavljanja određenih scena i uvjeta. Kod ozbiljnih simulacija njihova primjena i uloga je daleko veća i ozbiljnija jer se mora uzimati u obzir što se simulira, po kojim varijablama generiranje mora pratiti neke prethodne situacija tako da se dobije neki logički slijed, odnos vjerojatnosti pojave svakoga broja ovisi o prethodnim brojevima. Ti zahtjevi traže i dobru izvedbu generatora pseudoslučajnih brojeva i njegovo detaljno ispitivanje jer sa lošim generiranjem ni rezultati neće biti točni.

Kod kriptografije dolazi do izražaja kvaliteta generiranja odnosno generatora pseudoslučajnih brojeva jer sva komunikacija između uređaja mora biti kriptirana radi sigurnosti informacije i sprječavanja ne ovlaštenih upada u sustave. Iz tog razloga generatori (pseudo)slučajnih brojeva se u kriptografiji dosta često koriste, kod generiranja slučajnih lozinki, te kod asimetričnih ključeva. Što je generator ne predvidljiviji, to je poželjniji za kriptografsku namjenu, a pritom se predvidljivi generatori zaobilaze u širokom luku. Sa lošim generatorom može doći do pojave lako iskoristive sigurnosne rupe.

Iz gore navedenog vidimo da generiranje pseudoslučajnih brojeva nije nešto nepotrebno i egzotično nego u stvarnom svijetu jako primjenjivo, a u praksi zahtjevi su takvi da samo generiranje mora biti brzo, efikasno i dovoljno složeno da se ne može otkriti način generiranja.

U praksi postoji mnogo metoda generiranja pseudoslučajnih brojeva, a sam odabir metode mora biti prilagođen potrebama sustava odnosno njegovim zahtjevima za brzinu, sigurnost jednostavnost ili nešto drugo, a prvi generator pseudoslučajnih brojeva dizajnirao je John von Neumman 1946. g. pod imenom „metoda srednjeg kvadrata“

2. PSEUDOSLUČAJNI BROJEVI

U svijetu u kojem živimo okruženi smo sa raznim događajima koje su događaju u određenom nizu na prvi pogled ne povezano i slučajno. Ulazeći u detalje događanja, a imajući više informacija o događaju možemo shvatiti njihovu povezanost. Najčešće su slučajni brojevi dobiveni korištenjem računala, odnosno pseudoslučajni brojevi, dobiveni na neki analogan način, pomoću nekog postupka koji mi u mislima ne možemo rekonstruirati, pa ih stoga smatramo slučajnima.

Kao primjer ovakvog načina razmišljanja, navedimo niz brojeva:

24,16,27,4,1,14,19,13,2,23,21,14.

Na prvi pogled bi se oni mogli činiti slučajnima i nepovezanima, a zapravo nisu. Naime, svaki broj označava poziciju slova u hrvatskoj abecedi, a u ovom poretku ovdje zapravo piše "slučajnibroj".Ovo je primjer pseudoslučajnosti i može imati svoju primjenu.

Svi generatori pseudoslučajnih brojeva se baziraju na rekurzivnim aritmetičkim i/ili logičkim formulama. Prilikom izračunavanja sljedećeg elementa niza slučajnih brojeva možemo se koristiti sa samo jednim ili sa više već izračunatih članova niza, a operacije nad njima mogu biti matematičke, ili ako se gledaju bitovni zapisi brojeva, logičke. Svaki takav generator zahtjeva neku početnu vrijednost, te još nekoliko parametara, koji onda služe kao koeficijenti ili kao konstante.

Kvaliteta generatora pseudoslučajnih brojeva se očituje u njegovoj nepredvidljivosti – za dani dosadašnji generirani niz brojeva nemoguće je odrediti sljedeći generirani broj. Svaki generator pseudoslučajnih brojeva, nakon što ga se napravi, valja i dobro ispitati. Ispituju se svojstva perioda ponavljanja niza generiranih brojeva, uniformnost raspodjele brojeva unutar intervala, dok za potrebe simulacija valja znati kako su raspodijeljene n-torke dobivene od n uzastopnih brojeva iz nekog generatora, u n dimenzionalnom prostoru. Također, ako se može pronaći postojeći generator za kojeg se pouzdano zna da ispunjava zahtjeve, te je već korišten i testiran, bolje je primijeniti njega nego ići samostalno programirati novi generator, jer je za takav novi generator potrebno puno testiranja da bi se pokazala njegova primjenjivost.U slučaju da je generator (pseudo)slučajnih brojeva dovoljno kvalitetan, odnosno, ukoliko je funkcija sažetka dovoljno kvalitetna, tada oni dobivaju prefiks "kriptografski (siguran)"

3. PRIMJERI PSEUDOSLUČAJNIH BROJEVA TEMELJENIH NA ARITMETICI

Već smo spomenuli da se pseudoslučajnost može postići korištenjem aritmetičkih i logičkih formula. Upotrebljavati se mogu i jednostavne formule, izvedive u samo jednoj liniji programskog koda, ili se može sastaviti neki algoritam s puno aritmetičkih operacija i parametara, te po mogućnosti i logičkim operacijama. Doduše, ne treba smatrati da složen algoritam automatski znači i bolja svojstva generiranih nizova brojeva. Takvo što se smije tvrditi tek nakon testova. Prednost složenih algoritama se može eventualno iskoristiti tamo gdje se način generiranja želi što bolje sakriti, i otežati eventualno pogađanje formule kojom su brojevi dobiveni iz neke količine tih brojeva. U seminaru su prikazana tri načina generiranja slučajnih brojeva

Unutar ovog seminara zadržat ću se na tri jednostavna načina generiranja slučajnih brojeva artimetičkim formulama ili mogućnostima logičke manipulacije bitovnim zapisima brojeva.

3.1 Linear congruential generator

Linear congruential generator bi se moglo prevesti kao linearni "slijedni" generator pseudoslučajnih brojeva (LCG). Aritmetička formula za dobivanje brojeva na ovaj način izgleda ovako:

Xn+1 = aXn + c (mod m)

Svaki LCG je definiran sa četiri parametra, a to su:

X0 - sjeme (seed) odnosno početni element ovako nastalog niza brojeva

a - koeficijent kojim se množi Xn

c - konstanta koja se nadodaje na umnožak aXn

m - gornja granica brojeva koji nastaju

Formula je prilično jednostavna, programski lako izvediva, i olakšano je eventualno ispitivanje i traženje grešaka u programu koji koristi ovakav način generiranja slučajnih brojeva. S druge strane, jednostavnost ovog načina generiranja pseudoslučajnih brojeva nalaže oprez prilikom korištenja.

Jednostavan način dobivanja realnih slučajnih brojeva od cijelih brojeva jest:

Rn = Xn / m ili Rn = Xn / (m-1)

gdje odabir nazivnika m ili (m-1) ovisi o tome želimo li broj 1 unutar skupa mogućih vrijednosti ili ne.

Bitno je i vidjeti što se događa s periodom dobivenih brojeva. Maksimalni period jest m, ali različitim kombinacijama ostalih parametara može se postići manji period. Za broj m se koriste potencije broja 2, ili prosti brojevi. Na primjer, često korištena vrijednost, koja nudi dobre mogućnosti, je prost broj 231-1. Osim "slučajnosti" brojeva, može se promatrati i pojave u bitovnim zapisima dobivenih brojeva. Katkad se mogu primjetiti ponavljanja najnižih bitova, što treba izbjegavati. Za veličinu X0 najčešće se koristi neka veličina dobivena od sistemskog sata u računalu. Ali problem seed-a općenito je mnogo opširniji, te će o njemu biti više napisano kasnije. Broj a mora biti neparan, a poželjno je da bude unutar nekoliko redova veličine od vrijednosti broja m. Važno je napomenuti da ukoliko se koriste veliki brojevi, treba koristiti veličine bez predznaka, da bi se izbjegla moguća promjena predznaka u zapisu cijelog broja u dvojnom komplementu.

Vrlo bitno svojstvo ovakvih brojeva, a i jedan od najjednostavnijih kriterija kvalitete generatora slučajnih brojeva, jest prosječna vrijednost svih brojeva, koja mora biti što bliža polovici od gornje granice intervala slučajnih brojeva.

3.2 Lagged Fibonacci generator

Ovakvi generatori dobili su svoje ime zbog sličnosti formule s rekurzivnom formulom kojom se dobivaju brojevi Fibonaccijevog niza. U daljnjem tekstu ce ovakvi generatori biti označeni oznakom LFG. Opći oblik formule za dobivanje brojeva na ovakav način glasi:

Xn = Xn-l + Xn-k (mod m)

s time da brojevi l i k moraju biti u odnosu l > k > 0. Ovakvi generatori pseudoslučajnih brojeva postaju sve zanimljiviji, jer su u nekim svojstvima značajno bolji od LCG. Period niza brojeva dobivenih ovako nije ograničen brojem m. Broj m se odabire kao potencija broja 2, jer je ta kombinacija dosta testirana. Problem ponavljanja nižih bitova se može pojaviti kod malih vrijednosti brojeva l i k, ali ovo se može lako izbjeći. Poput LCG-a i ovaj postupak zahtjeva malo računanja, te uzima malo procesorskog vremena, jedino što zahtjeva pamćenje zadnjih l vrijednosti. Bitno je naglasiti da barem jedan od tih l brojeva na samom početku mora biti neparan. LFG imaju i bolja svojstva kad im se vrijednosti koriste u n-torkama.

3.3 Linear shift register generator

Ova skupina generatora ima sličnosti s prethodnim, ali se brojevi ne ostvaruju aritmetičkim operacijama, nego operacijama logičkog posmaka ulijevo i isključivog ili, barem u ovom slučaju. Shema koja prikazuje kako bi ovo trebalo funkcionirati uzeta je iz dokumenta RFC1750 :

+----+ +----+ +----+ +----+| B | <-- | B | <-- | B | <-- . . . . . . <;--| B | <-+| 0 | | 1 | | 2 | | n | |+----+ +----+ +----+ +----+ | | | | | | | V +-----+ | V +----------------> | | V +-----------------------------> | XOR | +---------------------------------------------------> | | +-----+

Najniži bit se postavlja kao parni paritet prethodnog broja, nad kojim je eventualno izvrsena operacija logičke konjukcije sa odabranom "maskom". I ovo predstavlja zanimljivu mogućnost generiranja pseudoslučajnih brojeva, te ju se eventualno može i koristiti u kombinaciji s dvije već predložene klase generatora.

4. ZAHTIJEVI I POSEBNOSTI GENERIRANJA PSEUDOSLUČAJNIH BROJEVA

Ovisno o mjestu korištenja generatora slučajnih brojeva, nad njima se postavljaju zahtjevi. Za generatore pseudoslučajnih brojeva u simulacijama se zahtijevaju dobra statistička svojstva, neprimjetnost ili nepostojanje grupiranja n-torki koje nastaju od elemenata niza pseudoslučajnih brojeva nastalih tim generatorom. Pošto se u tu svrhu treba generirati puno slučajnih brojeva, sama procedura generiranja smije trošiti samo mali dio procesorskog vremena. Pošto se danas takve simulacije često vrte na sustavima s više procesora, zanimljivo je pogledati kako se generatori pseudoslučajnih brojeva implementiraju na takvim sustavima.

S druge strane, generatori pseudoslučajnih brojeva često su korišteni u raznim sigurnosnim sustavima. Takvi sigurnosni sustavi ne smiju imati slabosti, pa tako niti generator pseudoslučajnih brojeva ne smije biti slabost. Prilikom stvaranja ili korištenja generatora pesudoslučajnih brojeva stoga treba imati na umu što sve mogu iskoristiti oni koji žele probiti u sigurnosni sustav, što ima je sve na raspolaganju, i na što sve treba paziti.

Zbog toga što se u višeprocesorskim sustavima u jednom trenutku izvodi više procesa koji u nekom trenutku mogu zahtijevati generiranje slučajnog broja, implementacija generatora je znatno složenija. Treba nam mogućnost raspoređivanja generiranih brojeva, ali uz zadržavanje kvaliteta slučajnosti nizova i njihove reproducibilnosti.

Postoji nekoliko načina rješavanja ovog problema kao što su:

- CENTRALIZIRANI PRISTUP- REPLICIRANJE GENERATORA - DISTRIBUIRANI PRISTUP

CENTRALIZIRANI PRISTUP je implementiran preko jedne zadaće ili procesa od kojeg drugi zahtijevaju slučajne brojeve. Ovime se izbjegava stvaranje više nizova slučajnih brojeva, ali je slabost ovog pristupa pad performansi izvršavanja ukupne simulacije. Javlja se i problem reprodukcije nizova, pošto se brojevi dijele onako kako zahtjevi stignu, što se ne mora svaki put dogoditi na isti način. Zbog ovog razloga i rezultati mogu varirati od simulacije do simulacije.

REPLICIRANJE GENERATORA podrazumijeva stvaranje generatora za svaki zadatak koji se izvršava. Generatori mogu, ali i ne moraju imati isti seed, već se mogu koristiti jedinstveni seed-ovi, recimo identifikacijski broj zadatka. Ovakav pristup ne garantira neovisnost nizova generiranih brojeva, a i mogu nastati problemi s korelacijom. Najvažnija prednost ovog pristupa jest efikasnost, pa stoga je pogodan u nekim primjenama.

DISTRIBUIRANI PRISTUP koji za razliku od prethodna dva koja nisu teško izvediva u praksi ali zato pate od određenih nedostataka koji im smanjuju domenu korištenja.U ovom slučaju se također za svaki zadatak stvara posebni generator pseudoslučajnih brojeva, ali njihovi seed-ovi nastaju od jednog generatora. Zbog toga je analiza olakšana, te je lakše promatrati i statističke osobine nizova.

Primjer ovakvog pristupa jest metoda "slučajnog stabla" (The Random tree method).

Za potrebe implementacije ovakvog pristupa koriste se dva LCG-a :

Lk+1 = aLLk (mod m)

Rk+1 = aRRk (mod m)

Generator R se stvori za svaki zadatak koji ga zatraži, a seed mu je sljedeći element iz niza koji generira generator L, kako je skicirano na slici.

Dobra strana ove metode jest da su nastali nizovi reproducibilni, te da nisu centralizirani, odnosno ponavljani. Ovo je bitno u slučajevima kada se traži dinamičko nastajanje generatora. Loša strana jest ta što nema garancije da se dva niza, pošto se radi o LCG, neće preklopiti. Također će dva niza sa vrlo sličnim seed-ovima biti slični. Ovo se može izbjeći ili barem ublažiti korištenjem velikog perioda generatora, ali to nije garancija

5. ZAKLJUČAK

U ovom seminaru vidjeli smo način kako se generiraju pseudoslučajni brojevi. Vidljivo je da jedno od svojstava generiranja pseudoslučajnih brojeva ponovljivost rezultata odnosno za jednake vrijednosti “seed-a“ dobivaju se identični izlazni nizovi, a to svojstvo nam omogućuje njihovo korištenje za ponavljanje simulacija. Jedno neželjeno svojstvo koje se inače ne može naći kod pravih slučajnih nizova je periodičnost, odnosno sigurno je da će generator u koliko koristi konačnu veličinu memorije, nakon određenog broja iteracija naći u istom početnom stanju, nakon čega se generirani niz ponavlja iz početka. Ta periodičnost je ograničeni problem jer očekivani period se udvostručuje sa svakim dodatnim bitom korištene memorije, pa je tako jednostavno dizajnirati generator pseudoslučajnih vrijednosti s periodom tako velikom da ga ni jedno računalo ne bi moglo cijelog prijeći u beskonačnoj vremenskoj periodi. U primjeni, mnogi često korišteni generatori pseudoslučajnih brojeva u svojim generiranim nizovima sadrže nepoželjne smetnje, koje mogu uzrokovati pad na nekim statističkim testovima slučajnosti.

6. LITERATURA

Verena M. Umar : "Random Number Generators", 1995.Nikola Mareković, FER, ZagrebHardversko generiranje slučajnih brojeva, Krešimir Fijačko

http://spus.zesoi.fer.hr/projekt/2006_2007/fijacko-filipovic-jagatic- oreskovic/spusprojekthardverskogeneriranjeslucajnihbrojeva.pdf

Wikipedija, http://en.wikipedia.org/wiki/Pseudorandom_number_generator