Kellon toistuvaan lukuun perustuva satunnaislukugeneraattori -ohjelma
Kuivaniemi, Jari (2016)
Lataukset:
Kuivaniemi, Jari
Haaga-Helia ammattikorkeakoulu
2016
All rights reserved
Julkaisun pysyvä osoite on
https://urn.fi/URN:NBN:fi:amk-2016101115050
https://urn.fi/URN:NBN:fi:amk-2016101115050
Tiivistelmä
Opinnäyte esittelee kellon vaihteluihin perustuvan satunnaislukugeneraattorin, Ressun. Siinä kerrotaan mitä nämä vaihtelut ovat. Lisäksi käydään läpi ressun toiminnot, jaetaan se palasiin ja esitellään niiden toimintaa. Lopuksi tutkitaan hiukan ongelmia, ja esitellään tilastollisia testejä satunnaisuudelle.
Ressu koostuu kahdesta toistorakenteesta, joista ensimmäisessä (~kellon luku ja bittien järjestely) puskuriin luetaan täyteen kellon merkkejä, ja vaihdetaan puskurin ylin bitti alas ja siirretään alimpia bittejä 1 bitti ylöspäin. Toisessa toistorakenteessa (~puskurin merkkien sekoitus) vaihdetaan jokainen puskurin merkki toisen puskurin merkin kanssa. Näitä kahta toistorakennetta toistetaan b kertaa. Ensimmäinen toistorakenne takaa että kellon alin bitti koskee kaikkia puskurin bittejä ja toinen kierros takaa että vierekkäin luetut bitit ovat eri paikoissa puskurissa ja että jokainen kellobitti vaikuttaa ~jokaiseen puskurin bittiin.
Työn aikana listasin mahdollisia ongelmia: kello ainoa satunnaisuudenlähde, muuteltu kellofunktio, käsitelty kellojono muodostaa hyökkääjän haluaman puskurin, hyökkääjä arvaa kellojonon, hyökkääjä arvaa puskurin, laitteistoerot, laitteiston kuormitus, kello ei ole riittävän tarkka, kello on liian säännöllinen, kellon sarjat ovat liian pitkiä, bittigeneraattori on tunnistettavissa, bittigeneraattori ei tuota uniikkia tietoa.
Ongelmat, joissa kellosarjaa on muuteltu ei katsota olennaiseksi, koska jos hyökkääjä voi muokata kellosarjaa, hän voi tehdä mitä tahansa muutakin, esimerkiksi lähettää generaattorin tuottaman puskurin itselleen.
Satunnaislukugeneraattorin arvaamiseen generaattori ei anna mitään vihjeitä (jos b on riittävän suuri), joten en pidä sitäkään olennaisena.
Ongelma jossa bittigeneraattori ei tuota uniikkia tietoa, ei johdu generaattorin rakenteesta, vaan ajatuksesta että jos generaattori tuottaa samanlaisia puskureita, kellosta luettavat bitit eivät riitä koko puskurin sisällöksi. Puskuriin saadaan lisää bittejä kasvattamalla kutsun b muuttujan arvoa.
Työ esittelee tilastollisia testejä, joilla voidaan testata lukujonon satunnaisuutta, testeistä mukana ovat monobit, poker 2, poker 4, runs ja runs8.
Raportin liitteenä on työn aikana tehdyt ohjelmat kellon vaihtelujen havainnollistamiseen, tilastojen laskemiseen,varsinainen satunnaislukugeneraattori, ja kutsuvat rutiinit, jos haluat sen heti käyttöön (tässä b on toivoakseni ylimitoitettu niin ettei pitäisi tulla ongelmia). Raportissa suositellaan kuitenkin että tätä ei käytetä ainoana generaattorina.
Ressu koostuu kahdesta toistorakenteesta, joista ensimmäisessä (~kellon luku ja bittien järjestely) puskuriin luetaan täyteen kellon merkkejä, ja vaihdetaan puskurin ylin bitti alas ja siirretään alimpia bittejä 1 bitti ylöspäin. Toisessa toistorakenteessa (~puskurin merkkien sekoitus) vaihdetaan jokainen puskurin merkki toisen puskurin merkin kanssa. Näitä kahta toistorakennetta toistetaan b kertaa. Ensimmäinen toistorakenne takaa että kellon alin bitti koskee kaikkia puskurin bittejä ja toinen kierros takaa että vierekkäin luetut bitit ovat eri paikoissa puskurissa ja että jokainen kellobitti vaikuttaa ~jokaiseen puskurin bittiin.
Työn aikana listasin mahdollisia ongelmia: kello ainoa satunnaisuudenlähde, muuteltu kellofunktio, käsitelty kellojono muodostaa hyökkääjän haluaman puskurin, hyökkääjä arvaa kellojonon, hyökkääjä arvaa puskurin, laitteistoerot, laitteiston kuormitus, kello ei ole riittävän tarkka, kello on liian säännöllinen, kellon sarjat ovat liian pitkiä, bittigeneraattori on tunnistettavissa, bittigeneraattori ei tuota uniikkia tietoa.
Ongelmat, joissa kellosarjaa on muuteltu ei katsota olennaiseksi, koska jos hyökkääjä voi muokata kellosarjaa, hän voi tehdä mitä tahansa muutakin, esimerkiksi lähettää generaattorin tuottaman puskurin itselleen.
Satunnaislukugeneraattorin arvaamiseen generaattori ei anna mitään vihjeitä (jos b on riittävän suuri), joten en pidä sitäkään olennaisena.
Ongelma jossa bittigeneraattori ei tuota uniikkia tietoa, ei johdu generaattorin rakenteesta, vaan ajatuksesta että jos generaattori tuottaa samanlaisia puskureita, kellosta luettavat bitit eivät riitä koko puskurin sisällöksi. Puskuriin saadaan lisää bittejä kasvattamalla kutsun b muuttujan arvoa.
Työ esittelee tilastollisia testejä, joilla voidaan testata lukujonon satunnaisuutta, testeistä mukana ovat monobit, poker 2, poker 4, runs ja runs8.
Raportin liitteenä on työn aikana tehdyt ohjelmat kellon vaihtelujen havainnollistamiseen, tilastojen laskemiseen,varsinainen satunnaislukugeneraattori, ja kutsuvat rutiinit, jos haluat sen heti käyttöön (tässä b on toivoakseni ylimitoitettu niin ettei pitäisi tulla ongelmia). Raportissa suositellaan kuitenkin että tätä ei käytetä ainoana generaattorina.