You are on page 1of 124

SVEUILITE U ZAGREBU FAKULTET ELEKTROTEHNIKE I RAUNARSTVA

DIPLOMSKI RAD br. 874

Ocjena kvalitete algoritama za ifriranje statistikim testiranjem generatora pseudo-sluajnih brojeva


Miroslav tampar

Zagreb, prosinac 2005.

Mentor rada: Doc. dr. sc. Kreimir Fertalj

Voditelj rada: Doc. dr. sc. eljka Mihajlovi

Sadraj Uvod ........................................................................................................................................... 1 1. 2. OPI POJMOVI ................................................................................................................ 2 KRATKA POVIJEST KRIPTOGRAFIJE......................................................................... 5 2.1. 2.2. 2.3. 2.4. 2.5. 3. 3.1. Rani poeci................................................................................................................. 5 Srednji vijek ............................................................................................................... 8 Razdoblje od 1800. g. do poetka II. svjetskog rata .................................................. 9 Drugi svjetski rat ...................................................................................................... 10 Moderno doba .......................................................................................................... 13 Klasini kriptosustavi............................................................................................... 17 Transpozicijski kriptosustavi............................................................................ 17 Supstitucijski kriptosustavi .............................................................................. 20 Znaajniji predstavnici ..................................................................................... 23 Feistelova struktura .......................................................................................... 26 Supstitucijsko-permutacijska mrea................................................................. 28 Blokovski naini rada....................................................................................... 29 Znaajniji predstavnici ..................................................................................... 31 Linearni posmani registar s povratnom vezom .............................................. 36 Znaajniji predstavnici ..................................................................................... 38 Znaajniji predstavnici ..................................................................................... 43 Merkle-Damgrdova struktura ......................................................................... 45 Davies-Meyerova struktura .............................................................................. 46 HMAC.............................................................................................................. 46 Digitalni potpis................................................................................................. 47 Znaajniji predstavnici ..................................................................................... 48 Generator sluajnih brojeva ............................................................................. 50 Generator pseudosluajnih brojeva .................................................................. 51 Kriptografski siguran generator pseudosluajnih brojeva................................ 54 Znaajniji predstavnici ..................................................................................... 54

TEORIJSKE POSTAVKE KRIPTOGRAFIJE................................................................ 17 3.1.1. 3.1.2. 3.1.3. 3.2. 3.2.1. 3.2.2. 3.2.3. 3.2.4. 3.3. 3.3.1. 3.3.2. 3.4. 3.5. 3.4.1. 3.5.1. 3.5.2. 3.5.3. 3.5.4. 3.5.5. 3.6. 3.6.1. 3.6.2. 3.6.3. 3.6.4.

Blokovski kriptosustavi............................................................................................ 25

Nizovni kriptosustavi ............................................................................................... 34

Kriptografija javnog kljua ...................................................................................... 39 Funkcije saetka poruke ........................................................................................... 44

Generatori (pseudo)sluajnih brojeva ...................................................................... 50

4.

PROGRAMSKA PODRKA .......................................................................................... 56 4.1. 4.2. Utility ....................................................................................................................... 56 CryptoLibrary.NET .................................................................................................. 59 Simetrini kriptosustavi.................................................................................... 60 Asimetrini kriptosustavi ................................................................................. 64 Klasini kriptosustavi....................................................................................... 66 Funkcije saetka poruke ................................................................................... 67 Generatori sluajnih brojeva ............................................................................ 68 Generatori pseudosluajnih brojeva ................................................................. 69 Kriptografski sigurni generatori pseudosluajnih brojeva ............................... 71 Statistiki testovi sluajnosti ............................................................................ 73 Programska struktura........................................................................................ 76 ifriranje datoteke ............................................................................................ 79 Deifriranje datoteke ........................................................................................ 84 Raunanje saetaka datoteke............................................................................ 85 Sigurnosno brisanje datoteke ........................................................................... 86 Analiziranje sadraja datoteke ......................................................................... 86 Pregledavanje sadraja datoteke....................................................................... 90 Testiranje brzine............................................................................................... 91 Generiranje sluajnih i pseudosluajnih brojeva.............................................. 92 Statistiko testiranje sluajnosti ....................................................................... 93 Ostalo ............................................................................................................... 94

4.2.1. 4.2.2. 4.2.3. 4.2.4. 4.2.5. 4.2.6. 4.2.7. 4.2.8. 4.3. 4.3.1. 4.3.2. 4.3.3. 4.3.4. 4.3.5. 4.3.6. 4.3.7. 4.3.8. 4.3.9. 4.3.10. 4.3.11. 5. 5.1.

Cipher.NET .............................................................................................................. 75

VREDNOVANJE KRIPTOGRAFSKIH ALGORITAMA ............................................. 95 Statistiki testovi za testiranje sluajnosti................................................................ 97 FIPS.................................................................................................................. 99 NIST ............................................................................................................... 100 5.1.1. 5.1.2. 5.2.

Rezultati empirijskog testiranja.............................................................................. 103

Zakljuak................................................................................................................................ 112 Literatura ................................................................................................................................ 113 Skraenice .............................................................................................................................. 117 Dodatak .................................................................................................................................. 119

Uvod
ifriranje (engl. encryption) je proces u kojem se sadraj izvornog teksta (ili bilo koje druge informacije) sakriva, odnosno prikazuje na nerazumljiv nain svim osobama, osim onima koji poznaju klju za obrnuti postupak deifriranje (engl. decryption). Kriptografija je znanost koja koristi (prvenstveno) matematike metode u svrhu ifriranja i deifriranja podataka. Kriptografija nam omoguuje pohranjivanje i prijenos "osjetljivih informacija" preko nesigurnih komunikacijskih kanala, bilo to u obliku papirnatog pisama, radio-valova, ili u binarnom obliku preko Interneta, na nain da nitko ne moe proitati sadraj tajne informacije, osim osobe kojoj je ona stvarno namijenjena. Osnovni ciljevi kriptografije su: ouvanje tajnosti podataka podacima smije pristupiti samo za to ovlateno osoblje ouvanje integriteta podataka onemoguuje se neprimjetna promjena podataka provjera identiteta provjerava se da li su stranke u komunikaciji zaista one koje tvrde da jesu osiguranje neosporivosti onemoguuje se sudioniku komunikacije osporavanje svoje prethodne poruke

Kriptografija ima dugu i fascinantnu povijest. Postoje ak podaci da su Egipani prije vie od 4000 godina koristili vlastite kriptografske metode za zatitu informacija. Razdoblje do 20. stoljea pamtimo po brojnim i zanimljivim metodama ifriranja uporabom olovke i papira. Tijekom II. svjetskog rata kriptografija se poela ubrzano razvijati. Jedno od poznatijih kriptografskih postignua tog vremena je bio njemaki kriptografski stroj Enigma. To je bio mehaniki stroj za ifriranje koji je pomou rotora i mehanikih sklopki ifrirao poruke te tako omoguavao Nijemcima da tajno razgovaraju sa svojim vojnim postrojbama. Poetkom 60-ih je sa razvojem elektronikih raunala dolo do sve veih zahtjeva za zatitom informacija, a time i za novim metodama ifriranja. Dok je klasina (primitivna) kriptografija bila u javnoj upotrebi ve dulje vrijeme, raunalna je kriptografija bila u potpunosti u vojnoj domeni jo od II. svjetskog rata. Amerika sigurnosna agencija NSA (engl. krat. za National Security Agency) i njezini pandani u bivem Sovjetskom savezu, Engleskoj, Izraelu, Francuskoj i drugdje, potroili su milijarde dolara na razno razne igre osiguranja svojih komunikacija, dok su pritom eljeli onesposobiti tue. Obian ovjek sa manjom kvantitetom znanja i novaca bio je bespomoan u zatiti svoje privatnosti od takvih vlada. Trenutno je situacija bitno drukija. U dananje doba postoji veliki broj kriptografskih sustava, meu njima i besplatnih, koji omoguuju vrlo visoki nivo kriptografske zatite svakome tko to zaeli. Dodue u nekim dravama (poput SAD-a) i danas postoje zakoni o ogranienju koritenja kriptografskih alata, no sve je to poprilino uzaludan ("Sizifov") trud poto se na Internetu danas mogu pronai programske implementacije gotovo svih kriptografskih metoda. U ovom e radu biti izneena kratka povijest kriptografije, opisane znaajke najvanijih grana kriptografije, predstavljena vlastita raunalna kriptografska aplikacija, te e se na kraju iznijeti rezultati empirijskog istraivanja nad pojedinim vrstama kriptografskih algoritama.

1. OPI POJMOVI
Reverzibilan postupak transformacije podataka iz originalne razumljive u nerazumljivu formu, kao mehanizam zatite tajnosti, integriteta i (ponekad) autentinosti informacije, naziva se ifriranje (engl. encryption), dok se reverzni postupak naziva deifriranje (engl. decryption). Naziv za originalnu formu je izvorna poruka (engl. plaintext), dok se nerazumljiva forma naziva ifrirana poruka (engl. ciphertext). Pri ifriranju poruke koristi se funkcija za ifriranje, dok se kod deifriranja koristi funkcija za deifriranje. U raunalnom argonu, naziv za prvu funkciju je algoritam za ifriranje (engl. encryption algorithm), dok je naziv druge algoritam za deifriranje (engl. decryption algorithm). Funkcija za deifriranje mora biti inverzna funkciji za ifriranje, dok obrat ne mora vrijediti. Par algoritam za ifriranje i algoritam za deifriranje naziva se kriptosustav (engl. cipher). Valja napomenuti da se u literaturi esto izjednaavaju pojam algoritam za ifriranje i pojam kriptosustav, to je naime krivo. Kriptosustav je iri pojam od algoritma za ifriranja, utoliko to se u njemu nalazi jo i algoritam za deifriranje. Nema smisla koristiti algoritam za ifriranje ukoliko ne poznajemo inverzni algoritam, odnosno algoritam za deifriranje. Pri (de)ifriranju se moe koristiti jedan, vie ili nijedan klju. Tijekom (de)ifriranja u kriptosustav ulaze dvije veliine: poruka (izvorna ili ifrirana) i klju (engl. key). Klju se unutar kriptosustava koristi po istom principu kao i u stvarnom svijetu. Prilikom ifriranja klju se koristi kako bi se izvorna poruka "zakljuala", dok se tijekom deifriranja klju koristi kako bi se poruka "otkljuala". Ukoliko klju pri postupku deifriranja ne odgovara ifriranoj poruci ("prostorija sa zakljuanim vratima"), tada se deifriranje smatra neuspjenim. No, ukoliko klju odgovara ifriranoj poruci ("klju odgovara bravi"), tada se poruka iz ifriranog oblika pretvara natrag u izvorni ("itljivi") oblik. U veini kriptosustava, klju za deifriranje mora biti identian koritenom kljuu za ifriranje, no postoji i iznimka. Naime, u tzv. asimetrinim (engl. asymmetrical) kriptosustavima koristi se poseban klju za ifriranje i poseban klju za deifriranje. Klju za ifriranje se naziva javni klju (engl. public key), dok se klju za deifriranje naziva privatni klju (engl. private key). Javni klju se moe dati svakome tko eli s vlasnikom kljua sigurno komunicirati, dok se privatni klju uva u tajnosti. Sigurnost te vrste kriptosustava se zasniva na injenici da je praktiki nemogue iz svima dostupnog javnog kljua dobiti tajni klju zasnovano na nekom tekom matematikom problemu. Postoje takoer kriptosustavi koji ne zahtijevaju uporabu kljueva. Naime, u prolosti se sigurnost nekih kriptosustava zasnivala na tajnosti dizajna, odnosno koritenih algoritama. Ukoliko napada nije poznavao koriteni kriptosustav, tajnost poruke je ostajala sauvanom. Zapravo, na apstraktnoj razini, tajni klju je upravo bio koriteni algoritam za ifriranje. Tko god ga nije poznavao nije mogao deifrirati ifriranu poruku. Dananji kriptosustavi se mogu podijeliti ugrubo na simetrine (gr. symmetria = sklad, jednakost) i asimetrine (gr. asymmetria = nesklad, nejednakost). Za razliku od ve spomenutih asimetrinih kriptosustava, simetrini kriptosustavi zahtijevaju jednakost kljueva za ifriranje i za deifriranje. Simetrini kriptosustavi se mogu dalje podijeliti na blokovske i nizovne. Glavna razlika meu njima je veliina osnovnog elementa poruke nad kojim se vri procesiranje (ifriranje/deifriranje). Nizovni kriptosustavi obrauju binarnu poruku bit-pobit, ili ee bajt-po-bajt, dok blokovski kriptosustavi obrauju podatke u veim skupinama 2

slijednih bitova koji se nazivaju blokovi (npr. skupina od 128 susjednih bitova). Nizovni kriptosustavi su zbog svoje male veliine procesiranog podatka pogodniji sklopovskoj implementaciji, dok su blokovski kriptosustavi pogodniji programskoj implementaciji na dananjim (osobnim) raunalima. Ovdje valja napomenuti jednu vrlo bitnu pojedinost. Pojavom modernih kriptosustava namijenjenih radu na raunalima, promijenio se smisao pojma "klju za ifriranje". Naime, premda se u laikom argonu ustalio pojam tajni klju (engl. secret key) za zapameni niz (abecednih) znakova potrebnu pri (de)ifriranju poruke, to je s teoretskog gledita potpuno krivo. Kod modernih kriptosistema, tajna rije/fraza koja se koristi za zatitu ifrirane poruke naziva se lozinka (engl. password ili passphrase), dok se njezin binarni oblik prilagoen koritenom kriptosustavu naziva klju za ifriranje (engl. cipher-key). Primjerice, niz znakova "miro123" predstavlja lozinku, dok (ovisno o kriptosustavu) klju za ifriranje moe biti npr. 10A4C2F96316. Kriptosustav prima (tekstualnu) korisniku lozinku varijabilne veliine, koja u veini sluajeva nije prikladna za proces (de)ifriranja. Stoga se takav niz znakova pomou posebne funkcije saima ili proiruje, ovisno o eljenoj veliini, u oblik binarnog kljua za ifriranje.

Slika 1.1 Hijerarhijska podjela kriptosustava

Svi kriptosustavi nastali prije pojave prvog modernog kriptosustava Lucifer (mnogi pogreno misle da je prvi moderni kriptosustav zapravo DES (1976.), koji je nastao poslije na temelju upravo Lucifera (1971.)) smatraju se klasinima. Prema svojoj praktinoj izvedbi, klasini kriptosustavi se mogu podijeliti na sustave olovka-papir te na kriptografske strojeve (nastale prije pojave elektronikih raunala); no prema nainu ifriranja poruke, klasini kriptosustavi se dijele na transpozicijske i supstitucijske. Kod transpozicijskih se kriptosustava poruka ifrira premjetanjem pojedinih dijelova poruke, odnosno ispremijeanjem (engl. mixing) slova, dok se kod supstitucijskih vri zamjena pojedinih slova (pandan dananjim nizovnim kriptosustavima), koritenjem neke vrste supstitucijske abecede i/ili tablice. Primjerice, ukoliko klasini kriptosustav poruku ab ifrira u ba tada on (za)sigurno spada u transpozicijski, no ukoliko tu poruku ifrira u vp tada on sigurno spada supstitucijske kriptosustave. Uz kriptosustave, za kriptografiju su od bitnog znaaja i funkcije saetka poruke (engl. hash functions) te generatori (pseudo)sluajnih brojeva. Funkcija saetka na temelju poruke neodreene veliine vraa tzv. saetak (engl. digest), odnosno (brojevni) niz predefinirane veliine, koji ju u potpunosti odreuje. Ukoliko doe do promjene u bilo kojem dijelu poruke, tada e se saetak poruke promijeniti. To je osnovni princip ouvanja integriteta poruke. Kvaliteta funkcije saetka se oituje u njezinoj osjetljivosti na promjenu poruke (broj bitova koji se promjeni u saetku ukoliko se promjeni samo jedan bit poruke) i u otpornosti na tzv. kolizijski napad (engl. collision attack), u kojem se trae dvije razliite poruke s jednakim saecima. 3

Generatori (pseudo)sluajnih brojeva se u kriptografiji dosta esto koriste kod generiranja sluajnih lozinki te kod asimetrinih kljueva. to je generator nepredvidljiviji, to je poeljniji za kriptografsku namjenu; pritom se predvidljivi generatori zaobilaze u irokom luku. Na sreu postoje raunalni testovi nepredvidljivosti, koji usporedbom svojstava generiranog niza brojeva s apstraktnim sluajnim nizom daju ocjenu predvidljivosti koritenog generatora (pseudo)sluajnih brojeva. Naziv za takvu vrstu testova je: "statistiki testovi sluajnosti". U ovom e se radu opisati i uporabiti dvije skupine takvih testova FIPS [41] i NIST [55]. Kvaliteta generatora (pseudo)sluajnih brojeva se oituje u njegovoj nepredvidljivosti za dani dosadanji generirani niz brojeva nemogue je odrediti sljedei generirani broj. U sluaju da je generator (pseudo)sluajnih brojeva dovoljno kvalitetan, odnosno, ukoliko je funkcija saetka dovoljno kvalitetna, tada oni dobivaju prefiks "kriptografski (siguran)". Ovdje bih htio napomenuti da se ovako napisan izraz: "generator (pseudo)sluajnih brojeva", koristi u dva sluaja, s razliitim znaenjima ovisno o kontekstu. Ukoliko se generator (pseudo)sluajnih brojeva nalazi u kontekstu programskih generatora, tada se oznaka (pseudo)sluajan koristi s dozom sarkazma. Naime, do sad nije osmiljen takav algoritam (makar bio i kriptografski), iji se generirani niz ne bi mogao raspoznati u usporedbi s pravim sluajnim nizom (poredba rezultata na statistikim testovima sluajnosti); iako je to injenino stanje, nedovoljno upueni kvazi-strunjaci, koji ele progurati svoj "nema bolje" generator, uporno klasificiraju svoje algoritme/generatore kao "sluajne". Drugi sluaj koritenja je kod smanjivanja obima teksta. Ukoliko se generator (pseudo)sluajnih brojeva nalazi u opem kontekstu generatora brojeva, tada on predstavlja saeti oblik za: "generator sluajnih brojeva ili generator pseudosluajnih brojeva". Od ostalih stvari koje bi ovdje trebalo spomenuti tu je svakako kriptoanaliza (engl. cryptanalysis). Kriptoanaliza je znanost o "zaobilaenju" kriptografske zatite, odnosno, znanost o "nadmudrivanju" kriptografije, dok se za kriptoanalitike metode koristi jo i izraz kriptoanalitiki napadi (engl. cryptanalytic attacks). Kriptoanaliza se moe zamisliti kao "zla mlaa sestrica" kriptografije. Prve kriptoanalitike metode se mogu pronai u enciklopediji "Subh al-asha" Al-Kalka-Shandija (1412.), kao metode za pronalaenje skrivenog znaenja ifriranih poruka. Svrha kriptoanalize je pronalaenje bilo kakve slabosti ili nesigurnosti u kriptografskim dizajnima/shemama. Kriptoanaliza se moe sprovesti od strane napadaa, koji namjerava "probiti" odreenu kriptografsku zatitu, no takoer se moe sprovesti od strane samog dizajnera (ili drugih) kako bi se sam uvjerio u sigurnost vlastitog sustava. Kriptoanalitiki napadi variraju po snazi i prijetnji koju predstavljaju pojedinim kriptografskim metodama. Veina rezultata dananjih kriptoanalitikih istraivanja su zapravo teoretski napadi koji nisu korisni u stvarnoj primjeni. U osnovi, praktina vanost svakog napada ovisi o odgovorima na sljedea tri pitanja: koja su saznanja i sposobnosti potrebni kao preduvjet napadu(?), kolika je dobivena korist(?), te koliko je truda potrebno uloiti u sve to(?). Ukoliko je dobivana korist manja od vrijednosti uloenog truda, tada je lako mogue zakljuiti da napad nema previe smisla (izvoditi). Ukoliko se kao preduvjet napadu trai nerazumno velika koliina poznatih ifriranih poruka (engl. ciphertext-only), tada napad takoer nema prevelikog smisla. Uglavnom, neka opeprihvaena formula za ocjenjivanje ozbiljnosti kriptoanalitikog napada je:
Ozbiljnost kriptoanalitikog napada = |Dobivena korist| |Kompleksnost| |Preduvjeti|

pri emu zagrade | | oznaavaju apstraktnu operaciju kvantifikacije. Formula se iitava na sljedei nain: ukoliko je dobivena korist manja od ukupnog uloenog truda (kompleksnost) i potrebne koliine poznatih informacija (preduvjeti), tada se kriptoanalitiki napad smatra neozbiljnim. Gorka je injenica da je veina dananjih kriptoanalitikih napada upravo neozbiljna (tzv. "objavljivanje radi objavljivanja"). 4

2. KRATKA POVIJEST KRIPTOGRAFIJE


Povijest kriptografije datira tisuama godina unatrag. Do prolog stoljea, to je bila povijest klasine kriptografije metode ifriranja olovkom i papirom, nekim jednostavnim pomagalom ili strojem. Poetkom 20. stoljea, izumom sloenih mehanikih i elektromehanikih ureaja, poput rotorskog stroja Enigme, omogueno je sofisticiranije i efikasnije ifriranje. Daljnjim izumom elektronikog raunala dolo je do uporabe jo sloenijih kriptografskih metoda. Razvoj kriptografije, znanosti o sakrivanju znaenja poruka, uvijek je bio paralelan s razvojem kriptoanalize, znanosti o otkrivanju sakrivenog znaenja poruka. Pronalazak i primjena frekvencijske analize, u svrhu probijana ifriranog teksta, promijenila je tijek povijesti u mnogo navrata. Pretpostavlja se da je II. svjetski rat skraen za par godina, poto su Saveznici uspjeno deifrirali mnoge poruke Nacistike Njemake. Do 1970. godine, sigurni kriptosustavi su bili uglavnom privilegija dravnih vladara. Dva dogaaja su od tad kriptografiju uinila dostupnu svima: donoenje javnog standarda za ifriranje DES (1976.), te izum kriptografije javnog kljua (takoer 1976.).

2.1. Rani poeci


ovjek je pokuavao sakriti znaenje poruka otkad je i izumio pismo. Dokaz toj tvrdnji ostao je uklesan u kamenu i zapisan na papirusu, pokazujui nam da su mnoge drevne civilizacije, ukljuujui Egipane, Hebreje i Asirane, razvile svoje kriptografske metode.

Slika 2.1 Poeci kriptografije se mogu pronai u staroegipatskim hijeroglifima

Najstarija poznata upotreba kriptografije moe se pronai u obliku hijeroglifa, uklesanih u staroegipatske spomenike (piramide) stare oko 4500 godina. Premda se hijeroglifi ne smatraju pismom ija je namjena bila tajna komunikacija, pokuaji njihovih tvoraca da u svoje uklesane tekstove unesu dozu mistinosti smatraju se poecima kriptografije. 5

Hebrejski su uenjaci, oko 600. g. pr. Kr., koristili jednostavan monoalfabetski supstitucijski kriptosustav, poznat pod imenom Atbash. Sastojao se od zamjene prvog slova hebrejskog pisma "( alef"), s zadnjim slovom "( tav"), drugog slova "( bet"), s predzadnjim slovom "( shin"), itd. obrtanje slova hebrejske abecede. Spartanci su 400. g. pr. Kr. koristili kriptografsko pomagalo nazvano Scytale, kako bi slali tajne poruke izmeu svojih vojskovoa. Sastojalo se od podebljeg tapa oko kojeg se namatao komad papirusa (ili ivotinjske koe) s napisanom porukom. Jednom kad bi se papirus odmotao sa tapa, poruka bi bila neitljiva, no ukoliko bi se namotao na tap jednakih dimenzija, izvorna poruka bi ponovno postala itljiva.

Slika 2.2 Kriptografsko pomagalo Scytale

Prvi transpozicijski kriptosustav se spominje u djelu Grka Aeneas Tacticusa "O obrani utvrda", koje datira iz razdoblja 4. st. pr. Kr. Jo je jedan Grk, Polybius, (poslije) izumio kriptosustav za ifriranje slova u parovima pomou pomagala poznatog pod imenom "Polybiusova ploa", koje je sadravalo mnoga svojstva kasnijih kriptosustava. Osim kod Grka, postoje slini oblici primitivnih supstitucijskih te transpozicijskih kriptosustava i kod drugih civilizacija tog doba. Polybiusova ploa je sadravala 24 slova grkog alfabeta, rasporeenih u tablinom obliku veliine 5x5. Svako se slovo izvorne poruke pretvaralo u broj s dvije znamenke, pri emu je prva znamenka predstavljala stupac, dok je druga znamenka predstavljala redak u kojem se slovo moglo pronai na ploi. Tako se prvo slovo grkog alfabeta ("alfa") pretvaralo u broj 11, dok se drugo slovo ("beta") pretvaralo u broj 12, i tako redom. Herodot u svojim djelima spominje tajne poruke fiziki sakrivene ispod voska na drvenom stolu, ili u obliku tetovae na glavi roba sakrivene pod kosom. Premda je ovo prije primjer sakrivanja poruke (znanost steganografija), nego sakrivanja njenog sadraja (znanost kriptografija), stari Rimljani su ipak poznavali i odreene metode ifriranja. Cezarov kriptosustav je jedan od najjednostavnijih i najpoznatijih izumljenih kriptosustava ikad. Nazvan je po rimskom vojskovoi Gaju Juliju Cezaru, koji ga je koristio kako bi tajno komunicirao sa svojim generalima. U njemu se svako slovo izvorne poruke zamjenjuje sa pripadnim slovom na fiksno udaljenoj poziciji u abecedi. Tako primjerice, ukoliko je ta udaljenost jednaka 3 (koritena u originalnom Cezarovom kriptosustavu), slovo A se zamjenjuje sa slovom D, B postaje E, itd. U Indiji je kriptografija takoer bila poznata u staro doba (oko 500. godine). Primjerice, ifriranje se spominje djelu "Kama Sutra", kao preporuena tehnika tajne komunikacije meu ljubavnicima. Kriptografija ima dugu tradiciju u djelima vjerskog karaktera, koja su u to doba lako mogla uvrijediti dominantnu kulturu i/ili trenutnu politiku vlast. Po tom pitanju, moda je najpoznatiji pojam "Broj Zvijeri" iz "Knjige Otkrivenja" u Kranskom Novom Zavjetu. Pretpostavlja se da je taj famozni broj 666 vjerojatno predstavljao ifrirani oblik neke opasne 6

poruke za to doba; mnogi uenjaci vjeruju da se iza tog broja krije pokazatelj na Staro Rimsko Carstvo, ili to je jo vjerojatnije, na Rimskog cara Nerona, koji je sustavno progonio Krane u 1. st.

Slika 2.3 Jedno od tumaenja znaenja mistinog biblijskog broja 666

Od poznatijih vjerskih spisa, ovdje takoer spada i idovska sveta knjiga "Tanakh", za koju pripadnici vjerske sekte "Qabbala" (idovski misticisti) smatraju da je sva ispunjena skrivenim znaenjem, ije potpuno "razumijevanje" vodi k sjedinjenju s Bogom.

Slika 2.4 idovska sveta knjiga Tanakh

2.2. Srednji vijek


Arapi su prvi postavili temelje kriptografije kao znanosti, te su meu prvima poeli primjenjivati kriptoanalike metode za pronalaenje sakrivenog znaenja unutar ifrirane poruke. Osmislili su i koristili vlastite supstitucijske i transpozicijske kriptosustave. Al-KalkaShandi je 1412. godine u svojoj enciklopediji Subh al-asha opisao nekoliko kriptosustava, te je takoer dao vrlo jasne upute (s jednostavnim primjerima) kako kriptoanalizirati ifriranu poruku koritenjem frekvencije slova. Vjerski motivirana tekstualna analiza Kurana je vjerojatno dovela do otkria frekvencijske analize, tehnike za probijanje monoalfabetskih supstitucijskih kriptosustava. To je zasigurno bilo najvee otkrie na podruju kriptoanalize sve do II. svjetskog rata. U sutini su svi (klasini) kriptosustavi bili ranjivi na ovu kriptoanalitiku tehniku, do izuma prvog polialfabetskog kriptosustava (1465.) od strane Leone Battista Albertia. Za vrijeme Srednjeg vijeka, u Europi se kriptografija pojavljuje u talijanskim gradovima drav(ic)ama. Najraniji kriptosustavi tog razdoblja su koristili samo zamjenu samoglasnika, dok su suglasnici ostajali nepromjenjeni. Oko 1379. godine, Gabriele de Lavinde od Parme je napisao prvi europski kriptografski prirunik, koji je sluio Papi Clementu VII. Prirunik je sadravao popis svih moguih kljueva, zamjenskih simbola za slova izvorne poruke, te skraenice za neke rijei i imena, koje je mogao koristiti svatko tko je htio sakriti pravo znaenje vlastite poruke. Leon Battista Alberti je 1470. godine opisao svoj vlastiti izum kriptografski disk, u djelu "Trattati in cifra", dok je Blaise de Vigenre 1586. godine u djelu "Traict de chiffres" opisao kriptografsku tablicu autora Giovan Batista Belasa, ije se zasluge za otkrie pripisuju zabunom Vigenreu. Vjerojatno najsofisticiraniji kriptosustav tog doba, predstavio je Giovanni Battista della Porta u svom djelu "De Furtivis Literarum Notis" (lat. za "O sakrivanju znakova pri pisanju"), u kojem se koristi za to doba vrlo napredna vieabecedna zamjena (engl. polyalphabetic substitution),

Slika 2.5 Kriptografski disk Giovanni Battiste della Porte

Kriptografija je postala jo bitnija kao posljedica politikih previranja i vjerskih revolucija. Tako na primjer u Europi tijekom i poslije kulturno-umjetnikog pokreta Renesanse dolazi do ubrzanog napretka kriptografije. No, novi kriptosustavi nisu bili ni upola toliko sigurni kao to su za njih to tvrdili njihovi izumitelji. Ta preoptimistinost je jedna od negativnih ostavtina klasine kriptografije te je i dandanas teko utvrditi/saznati koliko je uistinu (ne)siguran pojedini kriptosustav. Za razliku od Europe i Bliskog Istoka, u ostalim je dijelovima Svijeta kriptografija dosta vremena bila u veoma zakrljaloj fazi. Tako se primjerice u Japanu kriptografija nije upotrebljavala sve do 1510. godine, dok (im) napredne kriptografske tehnike nisu bile poznate sve do "otvaranja" zemlje Zapadu 1860. godine.

2.3. Razdoblje od 1800. g. do poetka II. svjetskog rata


Iako kriptografija ima dugu i bogatu povijest, tek je u 19. stoljeu zapoet razvoj prvih sloenih kriptosustava i napredne kriptoanalize. U to doba su Charles Babbage i Friedrich Kasiski izumili vlastite kriptoanalitike metode koje se i dandanas upotrebljavaju. Poznato je da su se tijekom Amerikog graanskog rata ifrirale mnoge poruke. Dok su snage Konfederacije koristile (za to doba slabi) Vigenreov kriptosustav, snage Unije su koristile supstituciju odabranih rijei (tzv. kodove), za kojom je slijedila stupasta transpozicija. Snage Konfederacije su (za razliku od snaga Unije) bile toliko neefikasne i oajne u probijanju ifriranih neprijateljskih poruka, da su u svim dnevnim novinama molili svoje graane da im pomognu u vlastitim nastojanjima.

Slika 2.6 Kriptografska knjiica s kodovima koritenim tijekom Amerikog graanskog rata

Pisac Edgar Allan Poe je u dananje vrijeme poznat po svojim slavnim (gotikim,"mranim") pjesmama, dok je manje poznat po svojoj neskrivenoj ljubavi prema kriptografiji i kriptoanalizi. Sustavno je razvijao vlastite kriptoanalitike metode s kojima je rjeavao brojne ifrirane zagonetke 1840-tih. ak je i objavio lanak u tjedniku "Alexander's Weekly (Express) Messenger" u kojima je pozvao sve itatelje da mu alju vlastite ifrirane poruke, koje je on potom (s lakoom) rjeavao. Stoga je vrlo brzo postao slavan po svojim kriptoanalitikim sposobnostima. Poslije je napisao djelo u kojem je objasnio svoje metode "probijanja" ifriranih poruka, koje su se poslije pokazale vrlo korisnima kod deifriranja njemakih poruka tijekom I. svjetskog rata. 9

Slika 2.7 Jedna od dvije ifrirane poruke koje E. A. Poe nikad nije uspio rijeiti

Kriptografske metode su se ubrzano razvijale u doba neposredno prije II. svjetskog rata. Meu (naj)znaajnijim predstavnicima tog razdoblja su bili William F. Friedman, sa svojim radom na primjeni statistikih tehnika za potrebe kriptoanalize, te Marian Rejewski, s prvim uspjenim probijanjem njemakog kriptografskog stroja Enigme. Od tad su kriptografija i kriptoanaliza postale matematiki (vrlo) orijentirane.

2.4. Drugi svjetski rat


Do II. svjetskog rata, mehaniki i elektromehaniki kriptografski strojevi su se poeli masovno koristiti u vladine svrhe, premda, gdjegod su bili nepraktini za uporabu, tamo je nastavljena uporaba dotadanjih manualnih sistema. U to doba je dolo do velikog napretka u probijanju kriptosustava, to se dralo u velikoj tajnosti. Podaci iz ovog perioda su se poeli "otkrivati" tek nakon pedesetak godina. Tajne arhive Britanije i SAD-a poele su se polako otvarati, te su na vidjelo doli brojni pisani memoari i lanci na tu temu. Nacisti su u to doba koristili nekoliko varijanti elektromehanikog rotorskog stroja poznatog pod imenom Enigma. Poljski matematiar Marian Rejewski je, radei za poljski Odjel za ifriranje (engl. Cipher Bureau), u prosincu 1932. rekonstruirao Enigmu Njemake vojske, koristei matematike metode i vrlo turu dokumentaciju koju mu je priskrbio Kapetan 10

Gustave Bertrand iz Francuske vojno-obavjetajne slube. Ovo je bilo najvee kriptoanalitiko otkrie u dotadanjoj povijesti kriptografije. Rejewski, te njegove kolege Jerzy Rycki i Henryk Zygalski, uli su su korak s evolucijom stroja i promjenama u postupku ifriranja, sve do poetka rata 1939. Tad su, zbog nacistike invazije na Poljsku, svi rezultati rada na probijanju Enigme predani u ruke britanskim i francuskim obavjetajnim krugovima.

Slika 2.8 Njemaki kriptografski stroj Enigma

Netom nakon izbijanja II. svjetskog rata 1. rujna 1939. godine, svi kljuni ljudi iz poljskog "Odjela za ifriranje" evakuirani su malo jugoistonije. 17. rujna 1939. godine, preko Sovjetskog saveza i Rumunjske, napokon su doli u Pariz (Francuska). U mjestacu PC Bruno, neposredno pored Pariza, nastavili su s radom na probijanju Enigme, no ovaj put u suradnji s britanskim kriptoanalitiarima iz Bletchley Parka, koji su ih naposljetku i prestigli u vlastitim istraivanjima. Tijkom dogaaja, britanski kriptoanalitiari, meu kojima su se posebno isticali Gordon Welchman i Alan Turing (konceptualni zaetnik modernog raunarstva), nadgradili su i poboljali tehnologiju probijanja Enigme. Kriptografi Amerike mornarice (engl. US Navy) su, u suradnji s britanskim i nizozemskim kriptografima, nakon 1940. godine probili nekoliko kriptosustava Japanske mornarice. Posebice, probijanje jednog od njih JN-25 dovelo je do slavne pobjede u bitci kod Midway atola (engl. Battle of Midway) na Pacifiku. Odjel amerike vojske, SIS (engl. krat. za Signals Intelligence Service), uspio je probiti kriptosustav japanske diplomacije, elektromehaniki stroj poznat pod imenom Purple, ak i prije nego to je zapoet II. svjetski rat. Amerikanci su za sve probijene poruke, posebice stroja Purple, koristili kodno ime Magic, dok su Britanci koristili kodno ime Ultra (prethodna verzija Boniface), posebice za stroj Enigma. Jedna od zanimljivosti tog doba jest ta da su Japanci u tom bezkrupuloznom 11

obavjetajnom ratu izvukli najdeblji kraj. Naime, smatra se da su amerike snage sve japanske pokuaje za ouvanjem tajnosti vlastite komunikacije vie-manje osujetili.

Slika 2.9 Japanski kriptografski stroj Purple

Njemaka vojska je takoer napravila nekoliko mehanikih strojeva za praktinu izvedbu teoretski neprobojnog tzv. kriptosustava jednostruko ifrirajueg niza (engl. one-time pad). Britanski kriptoanalitiari iz Bletchley Parka su te pokuaje nazivali Fish kriptosustavima. Max Newman je sa svojim kolegama, u tu svrhu, dizajnirao i konstruirao prvo programabilno elektroniko raunalo na svijetu Colossus, kako bi im pomoglo u kriptoanalizi. Njemako Ministarstvo vanjskih poslova je zapoelo s upotrebom Fish kriptosustava jo 1919. godine; neke od poruka ifrirane ovim kriptosustavom su uspjeno probijene tijekom II. svjetskog ratu, to je uglavnom rezultat prethodne nabave starog koritenog kljua, koji je nepanjom ostavio (neki) njemaki glasnik u Junoj Americi. Saveznici su u II. svjetskom ratu koristili britanski kriptografski stroj TypeX te ameriki stroj SIGABA. Obadva su stroja bila elektromehanika (s rotorima), dizajnirani po uzoru na njemaku Enigmu, no sa znatnim poboljanjima. Do danas nije poznat nijedan sluaj probijanja ijednog od njih tijekom rata. Poljske snage su koristile vlastiti stroj Lacida, no poto su naknadno pronaeni bitni sigurnosni nedostatci, prestali su s njegovom daljnjom uporabom. Terensko osoblje je koristilo strojeve iz porodice M-209 i neto manje sigurne M94. Britanski SOE (engl. krat. za Special Operations Executive) tajni agenti su u poetku koristili tzv. "kriptosustav pjesme" (engl. poem cipher), u kojem se kao tajni klju koristila 12

zapamena pjesma, no kasnije su se tijekom rata prebacili na kriptosustav jednostruko ifrirajueg niza.

Slika 2.10 Ameriki kriptografski stroj SIGABA

2.5. Moderno doba


Doba moderne kriptografije vjerojatno zapoinje s Claude Shannonom, po mnogima, ocem matematike kriptografije. 1949. godine objavio je lanak: "Komunikacijska teorija tajnih sistema" (engl. "Communication Theory of Secrecy Systems"), te nedugo zatim knjigu: "Matematika teorija komunikacije" (engl. "Mathematical Theory of Communication"). Ovim dvjema knjigama je, zajedno s njegovim ostalim radom na podruju teoriji informacije i komunikacije, postavio vrstu teoretsku osnovicu moderne kriptografije i kriptoanalize. Nakon toga je kriptografija mahom nestala u tajnim organizacijama poput amerikog NSA (engl. krat. za National Security Agency). Vrlo se malo toga "serviralo" javnosti sve do sredine 1970-ih, kada se dosta toga promijenilo. Sredinom 1970-ih su se dogodila dva velika dogaaja koja su u potpunosti promijenila daljnji tijek "javnog" koritenja kriptografije. Prvi dogaaj je bio objava prijedloga "Standarda za ifriranje podataka", poznatog pod svojim akronimom DES (engl. krat. za Data Encryption Standard), 17. oujka 1975. godine. Prijedlog standarda je poslan iz ureda IBM-a, na poziv Nacionalnog ureda za standarde (engl. krat. NIST National Institute of Standards and Technology) SAD-a, u svrhu razvoja sigurnosne osnove za komunikacijske potrebe banaka i ostalih velikih financijskih organizacija. Poslije "savjeta" i manjih promjena od strane NSA-a, standard je prihvaen 1977. godine (zanimljivo je da se za njegov "roendan" slubeno uzima 1976. godina sredina izmeu 1975. i 1977. godine). DES je prvi javno dostupan kriptosustav koji je dobio "blagoslov" neke svjetske sigurnosne agencije (konkretno od NSA). Javna objava DES-a rezultirala je nevienom eksplozijom interesa za kriptografijom, unutar javne i akademske zajednice. 13

DES je dizajniran, izmeu ostalog, kako bi bio otporan na odreenu vrstu kriptoanalitikih napada, u to doba poznatate samo NSA-u. Taj tip napada je danas poznat pod imenom diferencijalna kriptoanaliza, te se smatra kao jedan od rijetkih openitih kriptoanalitikih napada usmjerenih protiv (svih) blokovskih kriptosustava. Mnogi su promatrai 1970.-ih kritizirali veliinu kljua od (samo) 56 bita; naime, smatrali su da je premala. Kako je vrijeme prolazilo, tako su i nedostaci postajali sve oitiji, posebice nakon pojave specijaliziranog raunala za probijanje DES-a. Organizacija EFF (engl. krat. za Electronic Frontier Foundation) je 1998. godine svijetu predstavila raunalo "DES Cracker" (engl. za "Probija DES-a"). Izrada je ukupno trajala godinu dana, dok je cijeli projekt kotao oko 220.000$. Raunalo je na demonstraciji uspjelo u 56 sati razbiti poruku ifriranu DESom. Sadravalo je 1536 specijaliziranih tzv. "Deep Crack" ipova, koji su zajedno mogli testirati oko 88 milijardi DES (moguih) kljueva u sekundi. Slinih prijedloga za izradom ove vrste raunala bilo je i ranije, no ljudi u EFF-u su prvi to proveli u djelo. Tek nakon izrade DES Crackera moglo se definitivno ustvrditi da DES nije siguran kriptosustav.

Slika 2.11 Specijalizirani ip namijenjen probijanju DES ifriranih poruka

DES je 2001. godine slubeno zamijenjen "Naprednim standardom za ifriranje", poznatog pod svojim akronimom AES (engl. krat. za Advanced Encryption Standard). Poslije otvorenog natjeaja, organizacija NIST je izabrala kriptosustav Rijndael, djelo dvaju belgijskih kriptografa Joan Daemen i Vincent Rijmena, kao novi standard AES. DES, kao i njegove sigurnije varijante (poput 3DES i TDES-a), su jo uvijek u uporabi; sadrani su u mnogim nacionalnim i organizacijskim standardima. Danas se izvorni DES kriptosustav smatra (bez sumnje) nesigurnim za praktinu uporabu, te su takoer i sve dosad DES ifrirane poruke pod rizikom. Drugi, moda i bitniji dogaaj modernog doba, zbio se 1976. godine, kada su Whitfield Diffie i Martin Hellman objavili lanak "Novi smjerovi u kriptografiji" (engl. "New Directions in Cryptography"). U njemu su detaljno opisali radikalno novu metodu, kojom se pokuao rijeiti fundamentalni problem kriptografije distribucija kljueva; ta metoda je postala kasnije poznata kao Diffie-Hellmanova metoda razmjene (kriptografskih) kljueva. lanak je gotovo trenutno potaknuo razvoj novog razreda kriptosustava tzv. "kriptosustava s asimetrinim kljuem".

14

Do tog vremena, svi praktini kriptosustavi su bili simetrini, odnosno, isti (tajni) klju se koristio i kod ifriranja i kod deifriranja poruke. Svi kriptografski elektromehaniki strojevi koriteni tijekom II. svjetskog rata pripadaju ovoj vrsti kriptosustava, kao i svi klasini kriptosustavi; u osnovi, svi kriptosustavi koriteni do 1976. godine, spadaju u ovaj razred kriptosustava. Klju u svakom takvom kriptosustavu mora biti distribuiran izmeu komunikacijskih strana na neki predefinirani nain, preko tzv. "sigurnog kanala" (engl. secure channel) poput vjernog dostavljaa ili osobnog kontakta (sastanak "u etiri oka"). Praktina provedba ovog zahtjeva nikad nije trivijalna i vrlo brzo postaje (skoro) nemoguom kako se poveava broj komunikacijskih strana, te ukoliko se koriteni klju esto mijenja. Diffie-Hellmanova metoda razmjene kljueva omoguila je laki i sigurniji nain funkcioniranja kriptosustava, nego to je to bilo ikad prije mogue. U suprotnosti, kod asimetrinih kriptosustava postoji par matematiki povezanih kljueva, pri emu se jedan koristi kod ifriranja, dok se drugi koristi kod deifriranja. U veini se sluajeva klju za ifriranje moe dati u javnost svima, dok se klju za deifriranje uva u tajnosti. Klju za ifriranje se (uobiajeno) naziva javni klju (engl. public key), dok se klju za deifriranje naziva privatni klju (engl. private key); stoga su asimetrini kriptosustavi poznati i pod imenom kriptosustavi javnog kljua. Bitno je napomenuti da se sigurnost asimetrinog kriptosustava zasniva na nekom matematikom problemu u kojem je mogue na jednostavan nain iz jedne veliine (u naem sluaju privatnog kljua) izvesti drugu veliinu (u naem sluaju javni klju), no obrat praktiki nije mogu zbog teine obrata problema. Kod asimetrinih kriptosustava, potreban je samo jedan par kljueva po primaocu poruke (bez obzira na broj poiljatelja), poto se posjedovanjem javnog kljua ne kompromitira sigurnost poslanih poruka. To vrijedi sve dok primaoev (tajni) privatni klju nije poznat napadau. Ovim (zauujue) korisnim svojstvom, ujedno se poveala i praktinost i sigurnost (inae praktiki nespojivih pojmova) modernih kriptografskih aplikacija. Kriptografija javnog kljua je razvijana i prije 1976. godine, i to u britanskoj obavjetajnoj agenciji GCHQ (engl. krat. za Government Communications Headquarters). Razni (tada) povjerljivi dokumenti su kasnije doli na vidjelo javnosti te se iz njih jasno moe zakljuiti da se asimetrina kriptografija razvijala iza oiju javnosti (uvijek jedan korak ispred). Zbog toga se danas smatra da su zapravo pravi izumitelji kriptografije javnog kljua zapravo ljudi koji su u to doba radili za GCHQ: James Ellis, Clifford Cocks i Malcolm Williamson. Dok se neki moderni kriptosustavi (poput AES-a) smatraju "neprobojnima" (engl. unbreakable), lo dizajn (glavni krivac zbog kojeg je dolo do znaajnih kriptoanalitikih proboja) je i dalje najvei sigurnosni problem. Pratei primjeri su: kriptosustav WEP (engl. krat. za Wired Equivalent Privacy) koriten u Wi-Fi tehnologiji, kriptosustav CES (engl. krat. za Content Scrambling System) koriten kod zatite DVD filmova od kopiranja, te A5/1 i A5/2 kriptosustavi koriteni u GSM mobilnim ureajima. Nadalje, nijedna matematika ideja na kojoj se baziraju kriptosustavi javnog kljua nije dokazano "neprobojna", te bi se u budunosti neki od njih mogli proglasiti nesigurnima. Najbolji primjer je (izumrli) MerkleHellmanov Knapsack kriptosustav javnog kljua, koji se bazirao na problemu podsuma niza (engl. subset-sum problem). Sve je savreno funkcioniralo dok se nisu umijeali kriptoanalitiari poput: Eier i Laggera, te Desmedt, Vandewalle i Govaertsa. U svojim su radovima iznijeli vrlo bitna zapaanja o (ne)sigurnosti ovog kriptosustava. Posljedino je nakon toga A. Shamir objavio krucijalni lanak: "Algoritam polinomnog vremena namijenjen probijanju osnovnog Merkle-Hellman kriptosustava" (engl. "A Polynomial Time Algorithm for Breaking the Basic Merkle-Hellman Cryptosystem"), u kojem je "zabijen zadnji avao u lijes" Merkle-Hellmanovog kriptosustava. 15

Predloene veliine koritenih kljueva u kriptosustavima se poveavaju proporcionalno s isplativou procesorske snage, te sa matematikim napretkom poput pronalaska novih i brih metoda za faktorizaciju velikih cjelobrojnih vrijednosti. Iz svega ovoga se moe zakljuiti da je natjecanje izmeu dizajnera kriptosustava i kriptoanalitiara jo daleko od svretka.

16

3. TEORIJSKE POSTAVKE KRIPTOGRAFIJE


3.1. Klasini kriptosustavi
U klasine kriptosustave spadaju svi kriptosustavi (iz prolosti) koji se vie ne koriste (bar ne u praktine svrhe). Openito, klasinim se kriptosustavima obrauju tekstualne poruke pisane abecednim slovima. Primjenjuju se uporabom olovke i papira, ili pomou nekog jednostavnog mehanikog stroja. U suprotnosti, moderni kriptosustavi se implementiraju na raunalima i namijenjeni su obradi binarnih poruka. Klasini kriptosustavi su posebice ranjivi na kriptoanalitiki napad poznavanjem samog ifriranog teksta (engl. ciphertext-only attacks), ponekad i bez poznavanja tipa kriptosustava, koritenjem kriptoanalitikih metoda poput frekvencijske analize. Ponekad se u klasine kriptosustave svrstavaju i napredniji mehaniki i/ili elektromehaniki kriptografski strojevi, poput njemake Enigme. Klasini kriptosustavi se uobiajeno dijele na transpozicijske i supstitucijske. Kod supstitucijskih kriptosustava, slova se izvorne poruke (ili grupe slova) sustavno zamjenjuju sa pripadnim zamjenskim slovima, tzv. supstitutima. Kod transpozicijskih kriptosustava, sama slova ostaju nepromijenjena, dok se njihov poredak mijenja na neki predefinirani nain. Napredniji se kriptosustavi mogu dobiti kompozicijom supstitucije i transpozicije, ime se dobiva tzv. produktni kriptosustav (engl. product cipher). Tako primjerice, moderni blokovski kriptosustav DES vri nekoliko uzastopnih ponavljanja supstitucije i transpozicije, to je dokaz da moderni kriptosustavi imaju svoje temelje upravo u klasinim kriptosustavima.

3.1.1.

Transpozicijski kriptosustavi

Transpozicijski kriptosustav kod ifriranja uzima slova izvorne poruke i mijenja njihov raspored kako bi se dobio ifrirani oblik. Kod deifriranja se koristi obrnuti postupak. Matematikim argonom govorei, prilikom ifriranja se koristi bijektivna funkcija, dok se kod deifriranja koristi inverzna funkcija, nad pozicijama pojedinanih slova. Railfence U railfence (engl. za "pruna ograda") kriptosustavu, izvorni tekst se prilikom ifriranja zapisuje u izmjenjujuem (engl. alternating) dijagonalnom obliku. ifrirana poruka se dobiva iitanjem poruke po pojedinim retcima. Primjerice, ukoliko se koriste tri pruge/retka, tada se poruka "NAPAD U ZORU" ifrira na sljedei nain: 1. Uklanjanju se svi znakovi interpunkcije i mogue praznine, te se takva poruka zapisuje u obliku jednog dugakog niza:
NAPADUZORU

2. Poruka se potom zapisuje u izmjenjujuem dijagonalnom obliku:


N A A U O U P Z D R

17

3. Na posljetku se ifrirana poruka dobiva iitanjem slova po retcima iz prethodnog dijagonalnog oblika:
NDRAAUOUPZ

Route U route (engl. za "put") kriptosustavu, izvorni tekst se zapisuje u tablinom obliku predefiniranih dimenzija, te se potom sva slova (iz takve tablice) iitavaju po nekom zadanom redoslijedu/putu. Primjerice, ukoliko je izvorna poruka "NAEMO SE NA TRGU BANA JELAIA U DEVET SATI", te ukoliko je je dogovoreni redoslijed itanja poruke "spiralno u smjeru kazaljke na satu, poevi od gornjeg-desnog slova", tada se ifriranje izvodi na sljedei nain: 1. Uklanjanju se svi znakovi interpunkcije i mogue praznine, te se takva poruka zapisuje u obliku jednog dugakog niza:
NAEMOSENATRGUBANAJELAIAUDEVETSATI

2. Poruka se potop zapisuje po stupcima (u npr. tri retka):


NESAGAJADEA AMETUNEAETT ONRBALIUVSI

3. Na posljetku se ifrirana poruka dobiva iitavanjem po dogovorenom redoslijedu:


ATISVUILABRNOANESAGAJADETEAENUTEM

Stupasta transpozicija Kod stupaste transpozicije (engl. columnar transposition), izvorna se poruka zapisuje u retke fiksne duljine, te se potom iitava (iz dobivenog oblika) stupac po stupac, pri emu se duljina redaka i redoslijed itanja stupaca odreuje po zadanom kljuu. Na primjer, ukoliko je dogovoren tajni klju "DRVO", tada je duljina redaka jednaka 4 (duljina kljua), te je redoslijed itanja stupaca: 1 3 4 2 (abecedni redoslijed slova kljua). Izvorna poruka "OTKRIVENI STE. BJEITE KUDA VAS NOGE NOSE." se ifrira na sljedei nain: 1. Uklanjanju se svi znakovi interpunkcije i mogue praznine, te se takva poruka zapisuje u obliku jednog dugakog niza:
OTKRIVENISTEBJEITEKUDAVASNOGENOSE

Iregularna stupasta transpozicija 2a.Niz dobiven u prethodnom koraku zapisuje se u retke duljine kljua:
OTKR IVEN ISTE BJE ITEK UDAV ASNO GENO SE

18

3a. ifrirana poruka se dobiva iitavanjem gornjeg oblika po retcima, redoslijedom odreenom po kljuu:
OIIBIUAGSTVSJTDSEEKETEEANNRNEKVOO

Regularna stupasta transpozicija 2b.Niz dobiven u prethodnom koraku zapisuje se u retke duljine kljua, s time da se zadnji redak, ukoliko je nepotpun, proizvoljno nadopunjuje:
OTKR IVEN ISTE BJE ITEK UDAV ASNO GENO SEKJ

3b. ifrirana poruka se dobiva iitavanjem gornjeg oblika po retcima, redosljedom odreenom po kljuu:
OIIBIUAGSTVSJTDSEEKETEEANNKRNEKVOOJ

Dvostruka transpozicija Jednostruka stupasta transpozicija se moe kriptoanalitiki napasti pogaanjem mogue duljine koritenog kljua, kombinirajuim zapisivanjem poruke po stupcima, te traenjem moguih anagrama. Kako bi se napadau posao dodatno oteao, obino se koristi(la) dvostruka transpozicija. Dvostruka transpozicija je nita drugo doli dvostruka primjena jednostruke transpozicije. Moe se koristiti isti klju u oba sluaja, premda je sigurnija varijanta s dva razliita kljua. Ovaj kriptosustav se dosta koristio tijekom I. svjetskog rata, i to posebice kod Njemake vojske. No, kako su Francuzi bili u stanju probiti ovaj kriptosustav u roku od par dana, za bilo koji koriteni klju(!), Nijemcima nije trebalo dugo vremena kako bi prestali s njegovom daljnjom uporabom. Tijekom II. svjetskog rata koristio ga je Nizozemski pokret otpora, te (neke) britanske i francuske tajne slube. Do otkria VIC kriptosustava, dvostruka transpozicija je smatrana kao jedna od najoptimalnijih kriptosustava koje je korisnik (tajni agent) mogao primjeniti u tekim terenskim uvjetima. Poremeena transpozicija Kod ove se vrste transpozicije pojedina polja u matrici transpozicije ostavljaju namjerno nepopunjenim tijekom popunjavanja izvornom porukom. Na ovaj se nain donekle razbijaju prepoznatljivi anagrami, to dodatno oteava posao kriptoanalitiarima. Detekcija i kriptoanaliza Poto transpozicija sama po sebi ne mijenja frekvenciju pojavljivanja pojedinih slova, njezina se primjena (u veini sluajeva) moe jednostavno prepoznati prebrojavanjem slova i usporedbom dobivene frekvencije s uobiajenom frekvencijom koritenog prirodnog jezika. Ukoliko je uoeno koritenje transpozicije, tada slijedi kriptoanalitiki napad anagramiranjem, u kojem se komadi teksta premjetaju naokolo sve dok se ne prepoznaju pojedini anagrami (gr. anagramma "premetaljka"), koji se potom rjeavaju. Jednom kad je anagram pronaen i rijeen, tada se kriptosustav praktiki smatra probijenim. 19

Jednostavnije varijante transpozicije takoer imaju tzv. "problem slinih kljueva". Naime, ukoliko se pri kriptoanalitikom napadu isproba deifriranje kljuem slinim pravom kljuu, tada e se moi jasno razaznati jedan dio poruke koji je uspjeno deifriran, dok e ostatak poruke biti popunjen neitljivim tekstom slijedi daljnje isprobavanje "slinih" kljueva. Kombiniranje i razdjeljivanje Transpozicija se esto koristi u kombinaciji s drugim kriptografskim tehnikama. Tako se na primjer koritenjem jednostavne supstitucije u kombinaciji sa stupastom transpozicijom izbjegavaju njihove pojedinane slabosti. Tako se slabost supstitucije na frekvencijsku kriptoanalizu znatno smanjuje stoga to se transpozicijom raspruje struktura izvorne poruke, dok se slabost transpozicije na anagramiranje smanjuje stoga to se supstitucijom sakrivaju uoljivi anagrami. Glavni nedostatak kombiniranja je znatno poveanje posla te poveanje mogunosti ljudske pogreke kod ifriranja poruke. Ova tehnika je posebno djelotvorna ukoliko se koristi zajedno s razdjeljivanjem (engl. fractionation), gdje se svako slovo izvorne poruke proiruje na nekoliko slova. Najpoznatija i najee koritena metoda razdjeljivanja je prevoenje izvorne poruke u Morseovu abecedu. Kada se nad takvom (proirenom) porukom izvri transpozicija, elementi pojedinih slova se raspruju po cijeloj ifriranoj poruci. Na ovaj nain rade kriptosustavi poput Bifid, Trifid, ADFGVX i VIC kriptosustava.

3.1.2.

Supstitucijski kriptosustavi

Kod supstitucijskih se kriptosustava prilikom ifriranja uzima jedno ili vie slova izvorne poruke, te se potom vri zamjena s odreenim zamjenskim (supstitucijskim) parom po nekom zadanom pravilu. U usporedbi s transpozicijskim kriptosustavom, supstitucijski kriptosustav ostavlja strukturu originalne poruke nepromijenjenom, dok transpozicijski kriptosustav tu istu strukturu mijenja. Takoer, kod transpozicijskog se kriptosustava ne mijenjaju pojedini elementi poruke (jedno slovo ili vie njih), dok se kod supstitucijskog mijenjaju vri se zamjena. Postoji vie vrsta supstitucijskog kriptosustava. Ukoliko kriptosustav obrauje poruku slovo po slovo, tada je rije o jednostavnom supstitucijskom kriptosustavu; ukoliko obrauje skupine slova tada je rije o poligrafskom supstitucijskom kriptosustavu. Monoalfabetski kriptosustav koristi jednu i nepromjenjivu supstituciju nad cijelom porukom, dok polialfabetski kriptosustav koristi vie supstitucija. Jednostavna supstitucija Supstitucija nad svakim pojedinim slovom, odnosno jednostavna supstitucija, moe se najbolje demonstrirati usporednim ispisivanjem normalne i zamjenske abecede. Zamjenska (supstitucijska) se abeceda dobiva pomicanjem pozicija slova za odreen broj mjesta u jednu stranu, osnom zamjenom (prvo slovo zamijenjuje mjesto sa zadnjim, drugo s predzadnjim, itd.), ili na neki drugi sloeniji nain u ijem se sluaju dobivena zamjenska abeceda naziva izmijeana (engl. mixed) ili unereena (engl. deranged) abeceda. Tradicionalno, izmijeana abeceda se dobiva prethodnim ispisivanjem tajnog kljua, te potom ostalih slova abecede. Primjerice, ukoliko je koriteni tajni klju "DRVO", tada se dobiva: Normalna abeceda: ABCDEFGHIJKLMNOPQRSTUVWXYZ Zamjenska abeceda: DRVOABCEFGHIJKLMNPQSTUWXYZ 20

U tom se sluaju izvorna poruka:


OTKRIVENI SMO

ifrira u:
LSHPFUAKF QJL

Tradicionalno, ifrirani tekst se pie u blokovima, odnosno grupama fiksne duljine, pri emu se izostavljaju znakovi interpunkcije i praznine ovo se ini kako bi se izbjegle pogreke pri prijenosu te kako bi se sakrile granice pojedinih rijei izvorne poruke. Blokovi su tradicionalno duljine pet slova, to potjee jo iz doba kada su poruke bivale prenoene telegrafom. Ukoliko duljina izvorne poruke nije djeljiva s pet, tada se ona nadopunjava (engl. pad) sa to sluajnijim znakovima, tako da ih primatelj poruke pri deifriranju lako uoi i otkloni. Bitno je napomenuti da zamjenska abeceda ne mora biti sastavljena od istih slova kao i abeceda izvorne poruke, odnosno, dozvoljena je uporaba bilo kojeg skupa simbola, sve dok postoji bijekcija izmeu izvorne i zamjenske abecede. Veliki nedostatak koritenja zamjenske abecede dobivene na (spomenuti) tradicionalan nain jest u tome da zadnja slova abecede imaju tendenciju ostanka na kraju novodobivene abecede. Jasno se moe vidjeti da su zadnja etiri slova u prethodnom primjeru identina u obadvije abecede (WXYZ). Svaki ljudski jezik (i dijalekt) ima svoju jedinstvenu frekvencijsku razdiobu koritenja pojedinih slova abecede. Koritenje frekvencijske analize, u kojoj se frekvencijska razdioba slova ifrirane poruke usporeuje s ve poznatom razdiobom koritenog prirodnog jezika, najbolji je poznati napad protiv ove vrste kriptosustava. Naime, ukoliko se zna da je izvorna poruka pisana na engleskom jeziku, te ukoliko se u ifriranoj poruci najee pojavljuje slovo P, tada se s vrlo velikom vjerojatnou moe pretpostaviti da to slovo upravo predstavlja najee koriteno slovo u engleskom jeziku slovo E. U teoriji, potrebno je 27.6 slova (podatak za engleski jezik) ifriranog teksta kako bi se probio bilo koji jednostavni supstitucijski kriptosustav. U praksi, obino je potrebno oko 50-ak slova, premda se neke ifrirane poruke mogu probiti i s manje slova, ukoliko se uoe (neki) karakteristini uzorci. Homofona supstitucija Rani napori da se povea sigurnost supstitucijskih kriptosustava protiv uinkovitosti frekvencijske analize su rezultirali homofonijom. Kod ove vrste kriptosustava, slovo izvorne poruke se moe preslikavati u vie moguih slova ifrirane poruke. Najee, slovima koja se najee pojavljuju u izvornom tekstu se daje vie moguih zamjena, za razliku od slova koja se pojavljuju rijee. Na ovaj nain se frekvencijska distribucija izravnava, ime se kriptoanaliza oteava. Interesantna varijanta ove vrste kriptosustava je nomenklator (engl. nomenclator). Dobila je ime po zanimanju ljudi koji su najavljivali imena i titule posjetioca. Kod ovog kriptosustava se koristila mala kodna knjiica (engl. codebook) u kojoj su bili sadrane velike homofone supstitucijske tablice. Poto su na poetku bile ograniene samo na imena bitnih ljudi tako su i dobili ime nomenklatori. Koristili su ih diplomati, pijuni i konspiratori, od poetka 15. do kraja 18. stoljea. Iako su vladini kriptoanalitiari sistematski probijali nomenklatore od sredine 16. stoljea, te iako su napredniji kriptosustavi bili na raspolaganju, uobiajen odgovor na taj problem je bilo znatno poveanje tablica.

21

Polialfabetska supstitucija Leone Battista Alberti je po prvi put opisao ovu vrstu kriptosustava (1467. godine) u varijanti s "pominim diskovima". Johannes Trithemius je u svojoj knjizi "Steganographia" opisao tablinu varijantu, koja je kasnije postala standard za praktinu primjenu polialfabetske supstitucije. Kod polialfabetske supstitucije koristi se vie zamjenskih abeceda. Prije samog postupka ifriranja, sve se koritene zamjenske abecede zapisuju u obliku velike tablice tradicionalno zvane tableau. Tablica je obino dimenzija 26x26 i popunjena s 26 razliitih zamjenskih abeceda. Metoda kojom se odreuje koritena abeceda, te nain na koji se popunjavaju pojedina polja tablice, odreuju svaku pojedinu varijantu polialfabetske supstitucije. Jedan od najpopularnijih varijanti je zasigurno ona koju je osmislio Blaise de Vigenre. Objavio ju je 1585. godine, te se do 1863. smatrala neprobojnom. Od tuda joj i potjee jedan od naziva: "le chiffre indchiffrable" (fran. za "neprobojni kriptosustav"). U Vigenreovom kriptosustavu prvi se redak tablice popunjava s nepromijenjenom kopijom koritene (prirodne) abecede izvorne poruke, te se potom svaki naredni redak popunjava s pomaknutom varijantom (za jedno mjesto ulijevo) abecede prethodnog retka. Prilikom ifriranja koristi se tajni klju kako bi se odredilo trenutno koritena zamjenska abeceda, odnosno redak tablice. Ukoliko je prvo slovo kljua npr. B (drugo slovo abecede) tada e se koristiti drugi redak tablice kako bi se odredilo zamjensko slovo za prvo slovo izvorne poruke. Kada se iskoriste sva slova tajnog kljua, tada se ona ponovno uzimaju ispoetka. Friedrich Kasiski je 1863. godine objavio metodu, koju je vjerojatno osmislio Charles Babbage par godina ranije, kojom se mogla izraunati duljina koritenog kljua u Vigenreovom kriptosustavu. Kada se pronae duljina kljua, tada se mogu napasti pojedine koritene zamjenske abecede. Naime, ukoliko znamo da je duljina kljua 3, tada su se zasigurno koristile samo tri jednostavne zamjenske abecede, odnosno retka tablice polialfabetske supstitucije. U tom sluaju svako tree slovo ifrirane poruke dijeli identinu zamjensku tablicu. Moderni nizovni kriptosustavi mogu se (na apstraktnoj razini) promatrati kao polialfabetske supstitucije, u kojima se koriteni tajni klju nastoji produljiti koliko je god to mogue. Poligrafska supstitucija Kod ove vrste kriptosustava, slova izvorne poruke se obrauju u skupinama (tipino parovi slova digrafski kriptosustav). Na ovaj se nain znatno oteava kriptoanaliza; u tom sluaju frekvencijsku analizu vie nema smisla provoditi nad pojedinanim slovima, ve ju je potrebno obaviti nad skupinama slova. U tom sluaju vrijede potpuno druga pravila frekvencijske distribucije, te je potrebno znatno vei broj slova kako bi se uspjeno probila ifrirana poruka. Najraniju varijantu ovog kriptosustava je osmislio Sir Charles Wheatstone 1854. godine, pod imenom Playfair kriptosustav. U njemu je koristio 5x5 tablicu, koja se popunjavala ovisno o tajnom kljuu (obino su slova I i J dijelila isto mjesto). Digrafska supstitucija se izvodila tako to bi se uzeo par slova izvorne poruke, koji bi predstavljali zamiljene vrhove jedne stranice kvadrata u tablici, dok bi se kao ifrirani par uzeli vrhovi nasuprotne stranice.

22

Mehanika supstitucija Od I. svjetskog rata do masovne upotrebe elektronikih raunala, koristile su se mehanike implementacije (strojevi) polialfabetskih supstitucijskih kriptosustava. Najvaniji i najpoznatiji kriptografski stroj tog vremena je zasigurno Enigma Njemake vojske. Saveznici su takoer razvili svoje rotorske kriptografske strojeve: SIGABA (Amerikanci) i TypeX (Britanci). Svi su ti strojevi dijelili isti princip rada. Supstitucijsko slovo se biralo koritenjem velikog broja moguih zamjenskih abeceda, rotiranjem nekoliko slovanih diskova. Poveanjem koritenih diskova, broj zamjenskih abeceda je znao biti i vie nego ogroman (astronomski). Unato tome, skoro je sav ifrirani promet zatien njemakim Enigmama probijen od strane Saveznika tijekom II. svjetskog rata. No, poruke zatiene strojevima SIGABA i TypeX, nisu nikad bile probijene (barem se tako pretpostavlja). Supstitucija u modernim kriptosustavima Klasini supstitucijski kriptosustavi, posebno oni bazirani na upotrebi olovke i papira, vie nisu u upotrebi, barem ne u ozbiljnijoj. Svejedno, koncept supstitucije je i dandanas iv. Moderne kriptosustave (na apstraktnoj razini) moemo sagledati kao supstitucijske kriptosustave nad velikim brojem binarnih abeceda, pogotovo blokovske kriptosustave. U prilog toj tezi ide i injenica da se u dananjim blokovskim kriptosustavima esto koriste tzv. "S-kutije" (engl. S-boxes), ija je svrha nita drugo doli supstitucija.

3.1.3.

Znaajniji predstavnici

Cezarov kriptosustav Poznato je da se Julije Cezar (10144 g. pr. Kr.) pri izmjenjivanju pisama sa svojim generalima Opisunom, Kornelijem, Ciceronom, te nekim svojim roacima, sluio supstitucijskim kriptosustavom koji danas poznajemo pod imenom Cezarov kriptosustav. ifriranje se vrilo zamjenom slova izvorne poruke s pripadnim slovima supstitucijske abecede dobivene pomakom prirodnog redoslijeda abecednih slova za tri mjesta unaprijed. Tako se primjerice slovo A izvorne poruke zamjenjivalo sa slovom D ifrirane poruke, slovo B sa slovom E, itd. Jedan je od najjednostvanijih i najpoznatijih kriptosustava uope. Od onda se pojavila i modificirana verzija ovog kriptosustava, koja umjesto abecednog pomaka za tri mjesta unaprijed koristi bilo koji broj pomaka (npr. najpoznatija je varijanta ROT13 kriptosustav, esto koriten na Usenet grupama, u kojem se vri pomak za 13 mjesta unaprijed). Nije poznato koliko je Cezarov kriptosustav sluio svrsi u to doba, no vrlo je vjerojatno da se smatrao vrlo sigurnim iz vrlo jednostavnog razloga; naime, rijetko je tko od njegovih neprijatelja bio pismen, a i za te rijetke (sretnike) nema pisanog traga da su uspjeli probiti ovaj kriptosustav. Vigenreov kriptosustav Vigenreov kriptosustav je izumio i objavio Giovan Batista Belaso 1553. godine u svojoj knjizi "La cifra del. Sig. Giovan Batista Belaso". Francuski diplomat Blaise de Vigenre (1525-1596) je ovaj kriptosustav opisao francuskom kralju Henriju III. Nakon toga su u 19. stoljeu zasluge za izum ovog kriptosustava pogreno pridjeljene Vigenreu. Iz tog nesporazuma i potjee ime ovog kriptosustava.

23

Vigenreov kriptosustav je nita drugo doli kompozicija nekoliko Cezarovih kriptosustava s razliitim brojem abecednih pomaka. Pri obradi prvog slova izvodi se ifriranje uporabom prvog Cezarovog kriptosustava, nad drugim slovom izvodi se ifriranje drugim Cezarovim kriptosustavom, itd. U trenutku kad se iskoriste svi Cezarovi kriptosustavi, zapoinje njihova ponovna upotreba (ispoetka). Takoer postoji i tablina verzija ovog kriptosustava, u kojem se na temelju trenutnog slova kljua izabire odreena zamjenska abeceda za ifriranje trenutnog slova izvorne poruke. Snage Konfederacije su koristile ovaj kriptosustav tijekom Amerikog graanskog rata. Takoer je zanimljivo spomenuti da je poznati autor i matematiar Charles Ludwidge Dodgson (poznat pod svojim pseudonimom Lewis Carroll - "Alisa u zemlji udesa") proglasio ovaj kriptosustav "neprobojnim" 1868. godine u svom djelu "Abecedni kriptosustav" (engl. "The Alphabet Cipher"). Unato toj reputaciji, ovaj kriptosustav je probijen (nedugo zatim) krajem 19. stoljea. Playfairov kriptosustav Ovaj kriptosustav takoer ne nosi naziv po svom izumitelju, ve po imenu Lorda Lyon Playfaira (1818-1898), koji je taj kriptosustav preporuio oko 1890. britanskom Ministarstvu vanjskih poslova, tako da i dandanas nosi njegovo ime. Pravi izumitelj ovog kriptosustava je istaknuti britanski fiziar Charles Wheatstone (18021875), manje poznat po konstrukciji ovog kriptosustava, a vie po izumljenoj metodi mjerenja elektrinog otpora tzv. "Wheatstoneov most". Zanimljivo je da se ovaj kriptosustav nije koristio za njegova ivota ni u vojsci ni u diplomatskim krugovima Velike Britanije. Posebno dobre karakteristike omoguile su njegovu uporabu znatno kasnije; koristile su ga britanske snage tijekom Burskog rata i I. svjetskog rata, te australske snage tijekom II. svjetskog rata. Pri ifriranju se koristi tablica veliine 5x5 polja, u koju se slijedno unose slova kljua, te potom ostala slova abecede. Pri ifriranju se vri supstitucija parova slova izvorne poruke s pripadnim parovima ifrirane poruke. Par slova izvorne poruke, svojom pozicijom unutar spomenute tablice, ini vrhove stranica zamiljenog kvadrata. ifrirani par su upravo slova na pozicijama nasuprotna dva vrha zamiljenog kvadrata. Ukoliko je par slova izvorne poruke jednak, tada se umjesto drugog slova uzima slovo X [16]. Kriptografski stroj Enigma Poueni iskustvom iz I. svjetskog rata, u kojem su se bitke dobivale ne samo na bojnom polju, ve i probijanjem neprijateljskih ifriranih poruka, svjetske velesile su pristupile radu na stvaranju "neprobojnih" kriptosustava. U tom trenutku na scenu stupaju kriptografski strojevi.; no, prethodno je trebalo stvoriti odgovarajui kriptosustav, a tek zatim postupak (de)ifriranja realizirati odgovarajuim strojem. Time se dobivalo na brzini izvoenja, dok bi koriten kriptosustav osigurao potrebnu tajnost. Prvi ozbiljni poduhvat su ostvarili Nijemci konstrukcijom uvenog kriptografskog stroja Enigma. Vjeruje se da je Enigma prvi put proizvedena 1920. godine. Usavravana je u vie navrata uvoenjem novih tehnikih i kriptografskih elemenata. Osnovna zamisao koritenog kriptosustava se nije bitno mijenjala. Za vrijeme II. svjetskog rata dolo je do masovne uporabe Enigme. Nosila je oznaku specijalnog stroja za ifriranje i deifriranje poruka najveeg stupnja tajnosti. Za saveznike kriptoanalitiare predstavljala je jednu od najveih zagonetki II. svjetskog rata na polju kriptografije (no ipak je uspjeno probijena).

24

Enigma je namijenjena ifriranju i deifriranju poruka elektromehanikim putem. U njoj se vri polialfabetska supstitucija koritenjem tzv. "recipronih neureenih" zamjenskih abeceda. Postupak (de)ifriranja se vri uporabom tipkovnice, uz prethodno postavljenje poetnog stanja odreenog tajnim kljuevima. Rezultat operacije se dobiva na ploi sa sijalicama, paljenjem sijalice na mjestu koje odreuje ifarsku zamjenu, odnosno, slovo izvorne poruke. Stroj se koristi(o) izvorom istosmjernog napona od 4V ili naizmjeninog napona od 220V. Brzina rada je 20-40 slova u minuti, ovisno o obuenosti osobe koja s njime rukuje. Teina stroja je 10 kg, odnosno 11.5 kg, ovisno o varijanti [23].

3.2. Blokovski kriptosustavi


U kriptografiji, blokovski kriptosustavi spadaju u skupinu sustava sa simetrinim kljuem. Bitna je karakteristika da obrauju podatke u skupinama stalne veliine, zvanim blokovima (engl. blocks), koristei jedinstvenu i nepromjenjivu transformaciju. Blokovski kriptosustav se sastoji od dva algoritma, jednog za ifriranje, E, i drugog za deifriranje, E-1. Oba algoritma primaju dva ulaza: ulazni blok veliine n-bita i tajni klju veliine k-bita, te vraaju izlazni blok veliine n-bita. Za bilo koji stalni klju K, deifriranje je (valjana) inverzna funkcija ifriranju, tako da vrijedi:

E K 1 ( E K ( M )) = M
za svaki blok podataka M i klju K. Za svaki klju K, EK predstavlja bijektivno preslikavanje u skupu ulaznih blokova. Svaki od kljueva odreuje jednu od moguih 2n! bijekcija. Kod ifriranja, blokovski kriptosustav uzima blok izvorne poruke predefinirane veliine (nbita), obrauje ga koritenjem algoritma za ifriranje, te vraa odgovarajui izlazni blok ifriranih podataka (takoer veliine n-bita). Sama transformacija ovisi o vrijednosti druge ulazne veliine tajnom kljuu. Deifriranje je inverzni proces od ifriranja: blokovski kriptosustav uzima ulazni blok ifrirane poruke predefinirane veliine (n-bita), koritenjem algoritma za deifriranje obrauje podatke, te vraa odgovarajui izlazni blok deifrirane izvorne poruke (takoer veliine nbita). Kako bi se ifrirala poruka veliine dulje od predefinirane veliine bloka, koristi se odgovarajui blokovski nain rada. Nizovni kriptosustavi obrauju podatke slijedno i pojedinano na razini bita, te se sama transformacija mijenja ovisno o trenutnoj poziciji unutar ulazne poruke. Blokovski kriptosustavi obrauju podatke u (velikim) grupama susjednih bitova, te se sama transformacija ne mijenja ovisno o trenutnoj poziciji unutar ulazne poruke. Razlika izmeu ta dva tipa kriptosustava nije uvijek najjasnija: tako, blokovski kriptosustavi, kada se nalaze u odreenom nainu rada, ponaaju se efektivno kao nizovni. Kae se da je blokovski sustav "n-bitni" ukoliko mu je veliina bloka n bita. Danas je uobiajena veliina bloka 128 bita, dok je do sredine 90-ih godina prolog stoljea, bila 64 bita.

25

Jedan od blokovskih naina rada, zajedno s nainom popunjavanja praznina, koristi se kako bi se mogla ifrirati izvorna poruka proizvoljne duljine. Svaki od blokovskih naina rada ima drukije karakteristike, ovisno o propagaciji pogreaka, mogunosti pristupa sluajno odabranom bloku, te o ranjivosti na odreene vrste kriptoanalitikih napada. U tipine veliine kljueva (k) spadaju 40, 56, 64, 80, 128, 192 i 256 bita. Trenutno (2005.) se 80 bita smatra najmanjom veliinom kljua dovoljnom za efektivno spreavanje pretraivanja cjeloukupnog prostora kljueva (veliine 2k) tzv. kriptoanalitiki napad "grubom silom" (engl. brute force attack) Veina je blokovskih kriptosustava dizajnirana kao struktura s velikim brojem ponavljanja jednostavnije funkcije. Ovako se konstruirani blokovski kriptosustavi nazivaju ponavljajui (engl. iterative), pri emu se svako ponavljanje naziva kolo (engl. round), dok se ponavljajua funkcija naziva funkcija kola (engl. round function). Koriteni klju se u tom sluaju proiruje na veliki broj tzv. podkljueva kola (engl. round subkeys) Ki. Uobiajeni broj kola se kree u rasponu od 4 do 32. Rani blokovski kriptosustav DES (engl. krat. za Data Encryption Standard), razvijen je u IBM-u te proglaen standardom za ifriranje podataka 1977. godine. DES je vrlo bitan za razvoj cjeloukupne kriptografije, to pokazuje i injenica da je njegov nasljednik, AES (engl. krat. za Advanced Encryption Standard), prihvaen tek 2001. kao zamjena.

3.2.1.

Feistelova struktura

U kriptografiji, Feistelovim kriptosustavom nazivamo blokovski kriptosustav sa specifinom strukturom, nazvanoj po IBM-ovom kriptografu Horst Feistelu; takoer se koristi izraz Feistelova mrea. Velika veina blokovskih kriptosustava spadaju u ovu (pod)vrstu, ukljuujui i DES. Prednost koritenja Feistelove strukture u dizajnu blokovskih kriptosustava je u tome da su operacije ifriranja i deifriranja (u tom sluaju) vrlo sline, ak i identine u nekim sluajevima, jedino sa obrnutim redoslijedom koritenja podkljueva u pripadnim kolima. Stoga je veliina potrebnog programskog koda, odnosno elektrinih sklopova, pri implementaciji kriptosustava skoro prepolovljena s obzirom na ostale kriptosustave. Feistelova struktura se prvi put pojavila u komercijalnom IBM-ovom kriptosustavu Lucifer, kojeg su dizajnirali Feistel i Don Coppersmith. Postala je vrlo popularan izbor pri dizajniranju novih blokovskih kriptosustava, stoga to je Vlada SAD-a standardizirala kriptosustav DES, koji je upravo bio baziran na spomenutom kriptosustavu Lucifer. Feistelova struktura u sebi sadri velik broj kola s ponavljajuim operacijama, sadranim u tzv. Feistelovoj funkciji (engl. Feistel function), poput: Premjetanja bitova (permutacijske kutije ili krae P-kutije) Koritenja jednostavnih nelinearnih funkcija (supstitucijske kutije ili krae S-kutije) Linearnog mijeanja bitova koritenjem logike operacije ekskluzivno-ILI

Prema Claude Shannonu, u svojstva dobrog kriptosustava spadaju konfuzija (zbunjenost, zbrka) i difuzija (rasprenost). Upravo u Feistelovoj strukturi operacije premjetanja bitova stvaraju efekt difuzije, dok se koritenjem jednostavnih nelinearnih funkcija unosi konfuzija.

26

Osnovi princip ifriranja u Feistelovoj strukturi je sljedei: Blok izvorne poruke se dijeli na dva dijela jednake veliine (L0, R0) Za svako se kolo i = 1, 2, 3, ..., n, rauna

Li = Ri 1 Ri = Li 1 f ( Ri 1 , K i )
pri emu je f funkcija kola (Feistelova funkcija), dok je Ki podklju kola i. ifrirani blok jednak je (Ln, Rn)

Slika 3.1 ifriranje unutar Feistelove strukture

Osnovi princip deifriranja u Feistelovoj strukturi je sljedei: Blok ifrirane poruke se dijeli na dva dijela jednake veliine (Ln, Rn) Za svako kolo i = n, n-1, n-2, ..., 1, se rauna:

Ri 1 = Li Li 1 = Ri f ( Li , K i )
pri emu je f funkcija kola (Feistelova funkcija), dok je Ki podklju kola i. Deifrirani blok izvorne poruke jednak je (L0, R0)

Slika 3.2 Deifriranje unutar Feistelove strukture

27

Jedna od velikih prednosti ovog modela je ta da funkcija f ne mora biti invertibilna, te stoga moe biti vrlo sloena.

Slika 3.3 Primjer Feistelove funkcije f

3.2.2.

Supstitucijsko-permutacijska mrea

Supstitucijsko-permutacijska mrea (SPN engl. krat. za Substitution-permutation network) je naziv za povezani niz nelineanih supstitucijskih (engl. krat. S-boxes) i permutacijskih (engl. krat. P-boxes) "kutija", odnosno tablica, koje transformiraju ulazni blok u izlazni blok bitova. Supstitucijske kutije vre supstituciju, odnosno zamjenu, sadraja ulaznog bloka bitova. Dobra supstitucijska kutija ima svojstvo da se u sluaju promjene samo jednog ulaznog bita mijenja oko pola (ili vie) izlaznih bitova. Takoer, ima svojstvo da je vrijednost svakog izlaznog bita zavisna o vrijednosti svakog ulaznog bita. Permutacijske kutije vre permutaciju, odnosno premjetanje, sadraja ulaznog bloka bitova. Obino se postavljaju na izlaz supstitucijskih kutija. Dodatno, prilikom svakog kola (engl. round) se klju kombinira s procesiranim blokom koritenjem neke jednostavne binarne operacije, poput ekskluzivno-ILI ().

Slika 3.4 Osnovni princip rada supstitucijsko-permutacijske mree

28

3.2.3.

Blokovski naini rada

Napomena: u pripadnim dijagramima pojedinih blokovskih naina rada ulazni blok rednog broja i oznaen je s mi, izlazni blok rednog broja i oznaen je s ci, algoritam ifriranja bloka podataka (u ovisnosti o kljuu k) oznaen je s Ek, algoritam deifriranja bloka podataka (u ovisnosti o kljuu k) oznaen je s Dk, dok je s c0 oznaen inicijalizacijski vektor (odnosno sa s0 kod OFB naina rada). ECB (engl. krat. za Electronic Code Book) U nainu rada ECB, svaki se ulazni blok izvorne poruke ifrira neovisno jedan o drugome. Koritenje naina rada ECB sigurno je koliko i pripadni blokovski kriptosustav, no, ponavljajua struktura ulazne poruke ostaje nesakrivena. Svaki identini blok izvorne poruke rezultira jednakim ifriranim blokom. Stoga je mogua jednostavna manipulacija ifrirane poruke uklanjanjem, ponavljanjem i/ili premijetanjem pojedinih blokova. Brzina izvoenja ovog naina rada je identina brzini pripadnog blokovskog kriptosustava. Blokovski nain rada ECB omoguuje jednostavnu paralelizaciju u svrhu dobivanja boljih performansi.

Slika 3.5 Osnovni princip blokovskog naina rada ECB

CBC (engl. krat. za Cipher Block Chaining) U nainu rada CBC, nad svakim se blokom izvorne poruke vri operacija ekskluzivno-ILI () s prijanjim ifriranim blokom, te se (tek tada) takav blok ifrira. Inicijalizacijski vektor c0, odnosno neki sluajno generirani blok podataka, koristi se kao poetni ifrirani blok.

Slika 3.6 Osnovni princip blokovskog naina rada CBC

29

Koritenje naina rada CBC je sigurno koliko i pripadni blokovski kriptosustav (protiv standardnih kriptoanalitikih napada). Prednost ovog naina rada je ta da svaka ponavljajua struktura u izvornoj poruci biva sakrivena za razliku od naina rada ECB. Takoer, sa ifriranim blokovima direktna manipulacija nije mogua, osim uklanjanja blokova s poetka i/ili kraja ifrirane poruke. Inicijalizacijski vektor bi trebao biti razliit za svake dvije ifrirane poruke kod kojih se koristi isti klju; po mogunosti bi se trebao svaki put (prije ifriranja) izabrati sluajnim odabirom iz skupa svih moguih vrijednosti blokova veliine n bitova. Obino se nad njim ne vri ifriranje, te se moe slobodno slati u izvornom obliku zajedno s ifriranom porukom. Brzina izvoenja ovog naina rada je identina brzini pripadnog blokovskog kriptosustava, no nije ga mogue paralelizirati. PCBC (engl. krat. za Propagating Cipher Block Chaining Mode) je jedna od modifikacija naina rada CBC, u kojem je proirena propagacija (mogue) pogreke u ifriranoj poruci omoguuje bolju detekciju pogreaka prilikom prijenosa poruke. ifriranje kod ovog naina rada je opisano s izrazom:
ci = E k (ci 1 mi 1 mi )

dok je deifriranje opisano s izrazom:


mi = ci 1 mi 1 Dk (ci )

CFB (engl. krat. za Cipher Feedback) U nainu rada CFB, ifrira se prehodno ifrirani blok te se tako dobiveni blok kombinira s blokom izvorne poruke koritenjem operacije ekskluzivno-ILI (), kako bi se dobio trenutni ifrirani blok. Inicijalizacijski vektor c0, odnosno neki sluajno generirani blok podataka, koristi se kao poetni ifrirani blok.

Slika 3.7 Osnovni princip blokovskog naina rada CFB

Koritenje naina rada CFB je sigurno koliko i pripadni blokovski kriptosustav; s njim se takoer sakrivaju ponavljajue strukture izvorne poruke. S blokovima ifrirane poruke direktna manipulacija nije mogua, osim uklanjanja blokova s poetka i/ili kraja ifrirane poruke. Prilikom biranja inicijalizacijskih vektora c0 vrijede iste preporuke kao i kod naina rada CBC. Brzina izvoenja ovog naina rada je identina brzini pripadnog blokovskog kriptosustava, no nije ga mogue paralelizirati.

30

OFB (engl. krat. za Output Feedback) OFB nain rada je vrlo slian CFB nainu rada, osim to se veliina s kojom se kombiniraju blokovi izvorne poruke dobiva neovisno o izvornoj i o ifriranoj poruci. Inicijalizacijski vektor s0, odnosno neka sluajno generirana vrijednost, koristi se kao poetni blok sekvence blokova si, pri emu je svaki blok si dobiven ifriranjem prijanjeg bloka si-1. ifrirani blok podataka ci dobiva se izvoenjem operacije ekskluzivno-ILI () trenutnog ulaznog bloka mi s pripadnim blokom si.

Slika 3.8 Osnovni princip blokovskog naina rada OFB

Prednost ovog blokovskog naina rada nad nainom CFB jest ta da se (mogue) pogreke prilikom prijenosa podataka vie ne propagiraju prilikom deifriranja poruke. Prilikom biranja inicijalizacijskih vektora vrijede iste preporuke kao i kod CFB naina rada. Problem kod ovog naina rada je taj da je mogue relativno jednostavno manipulirati ovako ifriranom porukom. Napada koji poznaje jedan od blokova izvorne poruke mi moe ga zamijeniti s lanim blokom podataka x izvoenjem operacije ekskluzivno-ILI () pripadnog bloka ci s mix. Kriptoanalitiki napadi ove vrste mogu se vrlo lako sprijeiti koritenjem digitalnog potpisa ili (jednostavnijeg) MAC-a. Brzina ovog naina rada je identina brzini pripadnog blokovskog kriptosustava. Iako proces nije mogue paralelizirati, vrijeme moe biti znaajno uteeno prethodnim generiranjem niza si, i to prije nego to je sama izvorna poruka spremna za ifriranje. Zbog (sigurnosnih) nedostataka naina rada OFB, poznati kriptograf Whitfield Diffie [39] je predloio dodatan blokovski nain rada, nazvan CTR (engl. Counter) nain [43]. Razlikuje se od OFB naina u nainu na koji se generira niz si umjesto ifriranja prethodnog bloka si-1, Diffie je predloio ifriranje veliine (i + IV) mod 264 za dobivanje vrijednosti bloka si, pri emu je s IV oznaen inicijalizacijski vektor.

3.2.4.

Znaajniji predstavnici

AES (engl. krat. za Advanced Encryption Standard) AES, takoer poznat kao Rijndael, je blokovski kriptosustav prihvaen kao kriptografski standard Vlade SAD-a. Standardizirala ga je amerika vladina agencija NIST (engl. krat. za National Institute of Standards and Technology) u studenom 2001. godine, nakon pet godina natjeaja.

31

Kriptosustav su dizajnirali dva belgijska kriptografa Joan Daemen i Vincent Rijmen te su ga poslali na natjeaj pod originalnim imenom Rijndael. Nastao je kao poboljana inaica njihovog ranijeg kriptosustava Square, koji je opet nastao na temelju Shark kriptosustava. Za razliku od svog prethodnika, DES-a, Rijndael je po strukturi supstitucijsko-permuitacijska mrea, a ne Feistelova mrea. Razlika je u tome to se umjesto nelinearne funkcije f u ovom sluaju koristi veliki broj supstitucijskih (engl. S-boxes) i permutacijskih (engl. P-boxes) "kutija", odnosno tablica. AES je brz i u programskoj i u sklopovskoj implementaciji. Relativno je jednostavan za implementaciju te mu je za normalan rad potrebno vrlo malo memorije. AES ima fiksnu veliinu bloka od 128 bita i mogue veliine kljueva od: 128, 192 i 256 bita. Nakon to je postao kriptografski standard, AES je postao predmetom brojnih kriptoanalitikih napada. Posebno mu se zamjera njegova matematika (pre)formalnost. Dosad nije pronaen nijedan efektivni kriptoanalitiki napad koji bi iskoristio to svojstvo, no neki kriptografi strahuju da bi se u budunosti to moglo dogoditi. Od svih dosad objavljenih napada nijedan nije bio posebno znaajan, osim jednog. Naime, sve je zapoelo u travnju 2005. godine kad je D.J. Bernstein predstavio kriptoanalitiki napad na vrijeme procesorskog keiranja podataka (engl. cache timing attack). Za njegov je napad bilo potrebno 200 milijuna odabranih izvornih poruka, to za dananje prilike ne smatra vrlo praktinim. Pola godine kasnije, u listopadu 2005. godine, poznati kriptograf Adi Shamir [39] je s druga dva istraivaa prezentirao znatno poboljanu verziju ovog napada. Naime, u tom su napadu, na temelju mjerenja vremena izvravanja samo 800 procesorskih naredbi pisanja tijekom ifriranja, pronali cjeloviti koriteni AES klju. Zanimljivost je ta da je cijeli taj postupak trajao samo 65 milisekundi (Adi Shamir, Dag Arne Osvik, Eran Tromer: "Cache Attacks and Countermeasures: the Case of AES"). Blowfish Blowfish blokovski kriptosustav je 1993. godine dizajnirao kriptograf Bruce Schneier, autor poznate knjige "Applied Cryptography" [15]. U njemu je kombinirao Feistelovu mreu, supstitucijske S-kutije ovisne o kljuu i ne-invertibilnu funkciju f, kako bi stvorio jedan od trenutno najsigurnijih kriptosustava. Bitna znaajka ovog kriptosustava je da nije patentiran te je stavljen u javnu domenu kako bi bio slobodno koriten od bilo koga. Do danas (2005.) nije pronaen efektivni kriptoanalitiki napad protiv ovog kriptosustava, premda se njegova veliina bloka od 64 bita trenutno smatra premalom ifriranjem vie od 232 podatkovnih blokova moe se prouzroiti odavanje informacija o izvornoj poruci. Unato tome, Blowfish je vrlo siguran kriptosustav. Blowfish je jedan od brih blokovskih kriptosustava, osim kod postavljanja kljua; vrijeme potrebno za postavljanje svakog novog kljua ekvivalentno je sa ifriranjem teksta veliine 4KB, to je vrlo sporo u usporedbi s drugim kriptosustavima. GOST (rus. krat. za Gosudarstvennyi Standard) Ovaj kriptosustav je 1990. godine prihvaen kao sovjetski standard GOST 28147-89. Sovjetski je pandan amerikog kriptosustava DES, dok su i strukturno vrlo slini. GOST obrauje podatke u blokovima veliine 64 bita, dok je veliina kljua 256 bita. Sadraj supstitucijskih S-kutija moe biti tajan, ime se efektivna veliina kljua poveava na 768 bita. U originalnoj specifikaciji nije naveden sadraj S-kutija, no svakako ih se mora nekako popuniti. Ova pojedinost je dovelo do pekulacija o tome da su organizacijama, koje je sovjetska vlada htjela pijunirati, date namjerno "oslabljene" S-kutije. 32

Objavljen je vrlo mali broj radova na temu kriptoanalitikih napada na GOST te se na prvi pogled doima sigurnim. Velik broj kola (32) i "tajne" supstitucijske S-kutije dodatno oteavaju rad kriptoanalitiarima. IDEA (engl. krat. za International Data Encryption Algorithm) Blokovski kriptosustav IDEA dizajnirali su Xuejia Lai i James L. Massey te ga prvi put predstavili 1991. godine. Osmiljen je s namjerom da zamijeni tadanji standard DES. Patentiran je (do 2011.) u mnogim dravama svijeta, no slobodan je za neprofitnu uporabu. IDEA obrauje podatke u 64-bitnim blokovima koristei 128-bitni klju. Koristi 8 kola (engl. rounds) i jednu zavrnu transformaciju (tzv. polukolo). Sami dizajneri su analizirali ovaj kriptosustav i zakljuili da je otporan na diferencijalne kriptoanalitike napade. Nakon toga takoer nije pronaen nijedan uspjean linearni napad. Premda je pronaen razred slabih kljueva (engl. weak keys), njihova vjerojatnost pojave je zanemarivo mala. ak je i poznati kriptograf Bruce Schneier 1996. godine za ovaj kriptosustav izjavio: "Po mojem miljenju, IDEA je najbolji i najsigurniji blokovski kriptosustav danas dostupan javnosti" [15]. RC2 (engl. krat. za Rivest Cipher 2) Dizajner ovo kriptosustava je poznati kriptograf Ron Rivest [39]. Razvoj RC2 kriptosustava sponzorirala je tvrtka Lotus, koja je u to doba traila vlastiti kriptosustav. Jedna od zanimljivosti vezana uz ovaj kriptosustav jest ta da je danas poznata varijanta zapravo okrnjena verzija originalnog kriptosustava. Naime, poto su u Lotusu htjeli implementirati RC2 u svom novom softveru "Lotus Notes" te ga potom distribuirati u zemlji i inozemstvu, za to su trebali dobiti doputenje amerike sigurnosne agencije NSA. Poslije nekoliko malih modifikacija, zajedno sa skraenim 40-bitnim kljuem, RC2 je odobren kao prikladan za koritenje izvan SAD-a. U poetku su detalji kriptosustava drani tajni, pod vlasnitvom tvrtke RSA Security, no 29. sijenja 1996. godine netko je anonimno poslao programski kod na Usenet grupu sci.crypt. Ista se stvar dogodila i s nizovnim kriptosustavom RC4 nekoliko godina poslije. Dandanas nije poznato da li su autori obje poruke zapravo jedna te ista osoba, te da li su imali pristup specifikacijama kao zaposlenici tvrtke RSA Security. Druga mogua verzija dogaaja jest ta da su do programskog koda doli reverznim injenjerstvom (engl. reverse engineering). RC2 je 64-bitni blokovski kriptosustav s varijabilnom veliinom kljua. Po svojoj strukturi je Feistelova mrea. Od kriptoanalitikih napada jedini je znaajniji napad slinih kljueva (engl. related-key attack) koritenjem 232 odabranih izvornih poruka (engl. chosen plaintext). RC5 (engl. krat. za Rivest Cipher 5) Za razliku od mnogih drugih blokovskih kriptosustava, RC5 uz varijabilnu veliinu kljua (0 do 2040 bita) ima i varijabilnu veliinu bloka (32, 64 ili 128 bita), te varijabilni broj kola (0 do 255). Po svojoj internoj strukturi je Feistelova mrea. Izvorni preporueni parametri su: veliina bloka 64 bita, veliina kljua 128 bita te broj kola 12. Jednostavnost algoritma, zajedno s novitetom podatkovno zavisnim rotacijama, uinila je RC5 atraktivnim predmetom prouavanja kriptoanalitiara. RC5 varijanta s izvorno preporuenim brojem kola 12 te 64-bitnom veliinom bloka, ranjiva je na diferencijalni kriptoanalitiki napad koritenjem 244 odabranih izvornih poruka (engl. chosen plaintext attack); stoga se preporuuje poveanje broja kola na 18-20. 33

Tvrtka RSA Security, koja je i patentirala RC5, nudi novane nagrade za probijanje poruka ifriranih ovim kriptosustavom (10000$ po poruci), pri emu su koritene razliite veliine kljueva. Dosad je organizacija Distributed.net uspjela probiti poruke za kljueve veliine 56 i 64 bita: RC5-56 probijena poruka: "It's time to move to a longer key length" RC5-64 probijena poruka: "Some things are better left unread"

RC6 (engl. krat. za Rivest Cipher 6) RC6 blokovski kriptosustav je nastao na temelju svog prethodnika, RC5. Dizajnirala ga je skupina autora 1998. godine: Ron Rivest, Matt Robshaw, Ray Sidney i Yiqun Lisa Yin. Poslali su ga na natjeaj za napredni kriptografski standard (AES engl. krat. za Advanced Encryption Standard) na kojem se naao meu pet finalista, no na kraju ipak nije izabran za pobjednika. Veliina mu je bloka 128 bita te su podrane veliine kljueva: 128, 192 i 256 bita; premda, poput RC5, moe biti parametriziran kako bi podravao razliite veliine blokova, kljueva i broj kola. RC6 je toliko slian svom prethodniku da se ak moe promatrati kao spoj dviju RC5 struktura, iako su neke stvari promijenjene. Dosad nije pronaen nijedan efektivni kriptoanalitiki napad protiv ovog kriptosustava. TEA (engl. krat. za Tiny Encryption Algorithm) Blokovski kriptosustav TEA poznat je po svom jednostavnom dizajnu i lakoi implementacije. Dizajnirali su ga David Wheeler i Roger Needham te po prvi put prezentirali 1994. godine. Trenutno nije pod zatitom nijednog patenta. Koristi veliinu bloka od 64 bita, dok mu je veliina kljua 128 bita. Po strukturi je Feistelova mrea s (preporuenih) 64 kola. TEA ima par slabosti. Meu najbitnijim, tu je tzv. "jednakost kljueva" za svaki klju postoje tri funkcionalna ekvivalenta, to smanjuje efektivnu veliinu kljua na 126 bita. Ova slabost je osnova napada na Xbox igrau konzolu, gdje je ovaj kriptosustav koriten za dobivanje saetka poruke (engl. message digest). TEA je takoer ranjiv na kriptoanalitiki napad slinim kljuevima (engl. similar keys attack) za koji je potrebno 223 odabranih izvornih poruka, s vremenskom sloenou izvoenja od 232 [78]. S obzirom na navedene slabosti, nastale su brojne revizije ovog kriptosustava, meu kojima je najpoznatija XTEA (engl. krat. za Extended Tiny Encryption Algorithm).

3.3. Nizovni kriptosustavi


Nizovni kriptosustav spada u simetrine kriptosustave, odnosno u kriptosustave s jedinstvenim kljuem za ifriranje i deifiranje. U njemu se vri ifriranje slijedno nad svakom jedinkom (jedan bit ili jedan bajt) pojedinano. Alternativno ime mu je kriptosustav stanja (engl. state cipher) stoga to se tranformacija mijenja poslije svake obraene jedinke. Blokovski kriptosustavi, za razliku od nizovnih, obrauju podatke u veim blokovima bitova, bez promjene transformacije, no razlika izmeu njih nije uvijek najjasnija. Tako se primjerice blokovski kriptosustav u nekim nainima rada efektivno ponaa kao nizovni kriptosustav (CFB i OFB). Nizovni kriptosustavi se obino izvode bre od blokovskih te imaju manju kompleksnost sklopovske implementacije. Meutim, nizovni kriptosustavi su izrazito podloni ozbiljnim sigurnosnim problemima ukoliko se ne koriste pravilno. Konkretno, isto 34

poetno stanje nizovnog kriptosustava se nikad ne smije koristiti vie od jednom. Naime, postoji kriptoanalitika metoda kojom napada, ukoliko doe do esto koritenog poetnog stanja nizovnog kriptosustava, moe probiti bilo koju ifriranu poruku. Na temelju zadanog kljua generira se niz pseudosluajnih vrijednosti, koji se moe kombinirati s izvornom porukom na slian nain kao i kod kriptosustava jednostruko ifrirajueg niza (engl. one-time pad), poznatog i pod nazivom Vernamov kriptosustav. Naime, u tom se kriptosustavu jedinstveni niz sluajnih vrijednosti, tzv. niz kljua (engl. keystream), kombinira s izvornom porukom koritenjem neke jednostavne binarne operacije, poput ekskluzivno-ILI (). U sluaju da niz kljua iskoristi samo za jedno ifriranje (i pripadno deifriranje), tada je takav kriptosustav dokazano neprobojan [50]. U sluaju nizovnih kriptosustava, generirani niz kljua je popunjenjen sa pseudosluajnim vrijednostima, odnosno sadraj mu nije u potpunosti sluajan. Iz tog se razloga dokaz sigurnosti Vernamovog kriptosustava ne moe proiriti i nizovne kriptosustave.

Slika 3.9 Primjer nizovnog kriptosustava (A5/1)

Nizovni kriptosustavi se, s obzirom na ovisnost izvorne i/ili ifrirane poruke te generiranog niza kljua, mogu podijeliti na sinkrone i asinkrone. Sinkroni nizovni kriptosustavi su oni u kojima se niz kljua generira neovisno o izvornoj te o ifriranoj poruci. Za njih je karakteristino to da poiljatelj i primatelj poruke moraju biti sinkronizirani pri prijenosu podataka, te nisu podloni propagaciji pogreaka. Ukoliko se sinkronizacija pri komunikaciji izmeu sudionika izgubi (zbog umetanja i/ili brisanja pojedinih ifriranih znakova), tada se koriste odgovarajui mehanizmi za ponovnu uspostavu sinkronizacije. Ti sinkronizirajui mehanizmi su esto predmet aktivnih kriptoanalitikih napada (engl. active attacks), u kojima osoba u sredini (engl. man in the middle) namjernom promjenom ifriranih podataka pokuava dobiti dodatne informacije o internom stanju kriptosustava. Asinkroni nizovni kriptosustavi, poznati i kao "samo-sinkronizirajui" (engl. selfsynchronizing), su oni u kojima se niz kljua generira kao funkcija kljua i fiksnog broja prijanjih ifriranih (ili izvornih) znakova. Svojstva su im samo-sinkronizacija, ograniena propagacija pogreaka te rasprivanje statistike izvorne poruke. Samo-sinkronizacija (engl. self-synchronization) je svojstvo koje osigurava kriptosustavu da se, nakon pojave bilo kakve pogreke u prijenosu, moe sam sinkronizirati nakon primitka odreenog broja ifriranih znakova. Ukoliko se jedan znak ifrirane poruke promijeni, izbrie ili umetne, tada je mogue da e sljedeih t ifriranih znakova rezultirati netonim rezultatom pridjeljenih t deifriranih 35

izvornih znakova; no nakon toga se nastavlja s ispravnim deifriranjem. To svojstvo se naziva ograniena propagacija pogreke (engl. limited error propagation). Poto svaki znak izvorne poruke (indirektno) utjee na ostatak ifrirane poruke, statistika svojstva poruke se raspruju, to predstavlja svojstvo rasprivanja (difuzije) statistike izvorne poruke. Ova vrsta nizovnih kriptosustava je podlonija aktivnim napadima od sinkronih, stoga to je zbog svojstva samo-sinkronizacije puno tee detektirati promjene pojedinih dijelova ifrirane poruke. Ovo iziskuje uporabu dodatnih sigurnosnih mehanizama kako bi se osigurali autentinost i integritet zatiene poruke. Do danas nijedan nizovni kriptosustav nije postao de facto standardom. No, od svih dananjih kriptosustava, najee se koristi RC4. Interesantno je da se blokovski kriptosustavi u nekim nainima rada efektivno ponaaju kao nizovni; kao u npr. CFB i OFB nainima rada. Nizovni kriptosustavi se esto koriste u situacijama kad veliina izvorne poruke nije unaprijed poznata npr. kod beine komunikacije. Ukoliko bi se u tom sluaju koristio blokovski kriptosustav, dolo bi do smanjenja efikasnosti prijenosa podataka ili bi se kriptosustav morao nadograditi, stoga to blokovski kriptosustavi u svojoj osnovi ne mogu procesirati podatke u blokovima manjim od predefinirane veliine. To znai da, ukoliko bi se koristio 128-bitni blokovski kriptosustav za prijenos 32-bitne informacije, tada bi 3/4 preneenih podataka bilo potpuno beskorisno. Naravno, postoje blokovski naini rada koji otklanjaju ovaj problem, poput "krae ifrirane poruke" (engl. ciphertext stealing), no nizovnih kriptosustavi otklanjaju ovaj problem tako to procesiraju podatke u najmanjim jedinkama prijenosa (bit ili bajt). Jo jedno korisno svojstvo nizovnih kriptosustava je njihova pogodnost uporabe u vojne svrhe, gdje se generiranje niza kljua (engl. keystream) moe obavljati u posebno zatienim "crnim kutijama". Dobiveni niz kljua se potom dovodi u drugi ureaj, poput prijenosne radio-stanice, gdje se vri neka jednostavna binarna operacija (npr. ) sa sigurnosno osjetljivim porukama prije samog prijenosa. Kako bi nizovni kriptosustav bio to sigurniji, period izlaznog niza kljua, odnosno potreban broj generiranih jedinki (bitova ili bajtova) prije nego se niz pone ponavljati, mora biti to vei. Ukoliko se niz pone ponavljati, tada se relativno uspjeno moe izvesti kriptoanalitiki napad na kriptosustav. U praksi, ovo moe predstavljati vrlo velik sigurnosni problem, a da toga nismo ni svjesni. Naime, u poetku je kod primjene DES blokovskog kriptosustava bio dozvoljen OFB nain rada, koji mu je davao efektivna svojstva nizovnog kriptosustava. U mnogim sluajevima koritenja period tako generiranog niza kljua je (samo) reda veliine 232 bitova. To znai da e u sluaju da se ifriranje podataka obavlja brzinom od 1MB/s, generirani niz kljua ponavljati svakih otprilike osam i pol minuta.

3.3.1.

Linearni posmani registar s povratnom vezom

Linearni posmani registar s povratnom vezom (LFSR engl. krat. za Linear Feedback Shift Register) je mehanizam za generiranje pseudosluajnog binarnog niza. Sastoji od serijski povezanih binarnih memorijskih elija, koje se u poetku rada postavljaju na neku poetnu vrijednost tzv. inicijalizacijski vektor (engl. initialization vector). Kada se LFSR koristi u kriptografske svrhe, njegov inicijalizacijski vektor je najee tajni klju.

Slika 3.10 Primjer LFSR registra

36

Internim satnim mehanizmom (engl. clock mechanism) upravlja se ponaanje LFSR registra. Okidanje sata je najee uzrokovano nekim vanjskim dogaajem, poput dolaska novog bita izvorne poruke. Pri svakom okidanju, sadraj elija registra se pomie (engl. shift) za jedno mjesto u stranu, pri emu se (krajnja) ulazna elija puni tzv. povratnom vrijednou (engl. feedback) dobivenu izvoenjem operacije ekskluzivno-ILI () nad sadrajem odabranih elija. Obino je rezultat cijelog tog procesa jedan generirani pseudosluajni bit izlaza. LFSR registarski mehanizam je poprilino jednostavan za sklopovsku i programsku implementaciju, premda je u sklopovskoj verziji zamjetno bri. Ovisno o izboru povratnih spojeva (engl. feedback taps), odnosno o bitovima ija se vrijednost koristi pri raunanju povratne vrijednosti, generirani pseudosluajni nizovi bitova mogu imati vrlo dobra statistika svojstva. No, nizovi generirani s jednim LFSR registrom se ne smatraju kriptografski sigurnima za uporabu stoga to je dosad pronaen matematiki postupak, konkretno Berlekamp-Masseyev algoritam za raunanje linearne sloenosti binarnih nizova, u kojem se kao rezultat doslovno dobiva cjeloukupna struktura koritenog LFSR registra [44]. Unato tome, vrlo se esto koristi u sloenijim nizovnim kriptosustavima kao njihova sastavna komponenta. LFSR registri se ve dosta dugo koriste pri generiranju pseudosluajnih brojeva koritenih u nekim nizovnim kriptosustavima (pogotovo u vojnoj kriptografiji). Korisna svojstva su im jednostavnost sklopovske implementacije, dugaki period, te uniformna razdioba izlaznih vrijednosti. No, generirane izlazne vrijednosti su u potpunosti linearne, to ih ini vrlo ranjivim na kriptoanalitike napade. Stoga to mu je struktura linearna, jedna od osnovnih tehnika za uklanjanje (prikrivanje) te linearnosti je paralelno koritenje nekoliko LFSR registara u kombinaciji s proizvoljnom nelinearnom Booleovom funkcijom, odnosno s izlaznim nelinearnim filtrom.

Slika 3.11 Paralelna struktura LFSR registara u kobinaciji s nelinearnom funkcijom f

Jo jedna od tehnika za uklanjanje linearnosti je i satno okidanje LFSR registra s drugim LFSR registrom. "Stani-kreni" (engl. stop-and-go) generator koristi dva LFSR registra, pri emu se izlaz jednog od njih koristi kao satni mehanizam drugog. Ukoliko mu je izlaz na visokoj razini (binarno "1"), tada se vri okidanje drugog registra, dok se u suprotnom stanje 37

drugog LFSR registra ne mijenja. Prvi LFSR registar se regularno okida sistemskim satnim mehanizmom (signal CLK).

Slika 3.12 Osnovni dizajn "stani-kreni" generatora

"Saimajui" generator (engl. shrinking generator) koristi sasvim drukiji pristup. U njemu se koriste dva LFSR registra, gdje se oba regularno okidaju sistemskim satnim mehanizmom. Ukoliko je izlaz prvog registra "1" tada izlaz drugog registra postaje izlaz generatora. U protivnom, izlaz se drugog registra odbacuje te se cijeli postupak ponavlja ispoetka. Veliki nedostatak ovog mehanizma je njegova slabost na kriptoanalitike vremenske napade (engl. timing attacks), stoga to je brzina izlaza varijabilna, odnosno ovisi o trenutnom stanju prvog registra.
CLK

LFSR1 Ki Generirani izlazni bit

LFSR2

Slika 3.13 Osnovni dizajn "saimajueg" generatora

3.3.2.
A5

Znaajniji predstavnici

A5 nizovni kriptosustav koristi se pri ifriranju telekomunikacijskih veza koritenih u GSM mobilnim ureajima. Baziran je na kombinaciji etiriju LFSR registra s nepravilnim okidanjem i nelinearnim izlaznim filterom. Dosad mu je pronaen velik broj sigurnosnih nedostataka i mana. Varijanta A5/1 se koristi u Europi i SAD-u, dok se oslabljena varijanta A5/2 koristi u dravama gdje je lokalna telekomunikacijska infrastruktura nedovoljno razvijena. Obje varijante A5 kriptosustava su razvijene 1989. godine te su u poetku detalji dizajna uvani u tajnosti. Njihov opi dizajn je "procurio" u javnost 1994. godine, dok su koriteni algoritmi u potpunosti otkriveni reverznim injenjerstvom (engl. reverse engineering) 1999. godine od strane Marc Bricena. Samo se u 2000. godini oko 130 milijuna GSM korisnika pouzdavalo u A5/1 kriptosustav zatite privatnosti vlastitih mobilnih razgovora. 38

Pronaen je velik broj razliitih kriptoanalitikih napada na ovaj kriptosustav. Neki od njih zahtijevaju vrlo zahtjevnu prekalkulacijsku fazu, nakon koje se kriptosustav moe napasti i probiti u minutama (ili ak u sekundama). Kriptosustav je mogue napasti pasivnim napadom pretpostavljanjem izvorne poruke (engl. known plaintext assumption), dok je aktivni napad poznavanjem samo ifrirane poruke (engl. ciphertext-only scenario), otkriven 2003. godine, jo opasniji. RC4 (engl. krat. za "Rivest Cipher 4") Ovaj je nizovni kriptosustav 1987. godine dizajnirao Ron Rivest, djelatnik tvrtke RSA Security. RC4 (takoer poznat i pod imenom ARCFOUR) je najee koriteni programski nizovni kriptosustav. Koristi se u brojnim popularnim protokolima, kao u npr. SSL-u (engl. krat. za Secure Sockets Layer) zatita internetskog prometa, te u WEP-u (engl. krat. za Wired Equivalent Privacy) zatita beinih mrea. Ne podlijee visokim sigurnosnim standardima postavljenim od strane kriptografske zajednice, dok se neki primjeri uporabe smatraju vrlo nesigurnim (poput WEP protokola). Ne preporua se njegova uporaba u novijim sustavima. No, bilo kako bilo, neki se sustavi bazirani na RC4 kriptosustavu smatraju dovoljno sigurnim za praktinu uporabu. Pri generiranju niz kljua (engl. keystream), RC4 je blago naklonjen nekim sekvencama bitova. Najbolji napad zasnovan na toj injenici je onaj autora Fluhrer i McGrewa, u kojem se generirani niz kljua moe prepoznati u usporedbi sa sluajnim nizom veliine jednog gigabajta (Scott Fluhrer, David McGrew: "Statistical Analysis of the Alleged RC4 Keystream Generator"). SEAL (engl. krat. za Software Encryption Algorithm) SEAL nizovni kriptosustav dizajnirali su djelatnici IBM-a: Phillip Rogaway i Don Coppersmith. Posebno je optimiziran za programsko izvoenje na dananjim 32-bitnim procesorima. Pogodan je za uporabu u stvarnom vremenu (engl. real-time) kod ifriranja i deifriranja podataka smjetenih na vrstom disku. Memorijski je vrlo zahtjevan stoga to se njegova velika brzina obrade podataka zasniva na poprilino velikim prekalkuliranim tablicama. Do danas su objavljene tri verzije prva (1.0) 1994., a zadnja (3.0) 1997. godine. Trenutno ne postoji nijedan ozbiljniji kriptoanalitiki napad protiv ovog kriptosustava (zadnja verzija 3.0). Zanimljivo je napomenuti da se njegov autor Don Coppersmith smatra trenutno jednim od najboljih svjetskih kriptoanalitiara, to dodatno podie "kvalitetu" ovog kriptosustava [15].

3.4. Kriptografija javnog kljua


Kriptografija javnog kljua je dio kriptografije kojim se korisnicima omoguuje sigurna komunikacija bez potrebe za prethodnom razmjenom dijeljenog tajnog kljua. To je omogueno koritenjem para matematiki povezanih kriptografskih kljueva, poznatih pod imenima javni klju (engl. public key) i privatni klju (engl. private key). Sinonim za kriptografiju javnog kljua je kriptografija asimetrinog kljua, ili krae asimetrina kriptografija. U kriptografiji javnog kljua, privatni klju se obino uva u tajnosti, dok se javni klju dijeli svima koji njegovu vlasniku ele sigurno poslati poruku. Jednostavnim jezikom reeno, javni klju je namijenjen ifriranju poruka, dok je privatni klju namijenjen njihovom deifriranju. 39

Bitno je napomenuti da je jedna od osnovnih sigurnosnih pretpostavki kriptografije javnog kljua ta da je (praktiki) nemogue izvesti tajni privatni klju iz poznatog javnog kljua.

Slika 3.14 Osnovni princip ifriranja javnim kljuem

Postoji mnogo praktinih primjena kriptografije javnog kljua, meu kojima su najbitnije: ifriranje poruka (javnim kljuem) sadraj poruke je tajan za svakoga tko ne posjeduje odgovarajui privatni klju; ostvaruje se povjerljivost (engl. confidentiality) poruke Digitalno potpisivanje (privatnim kljuem) svakome se omoguuje provjera autentinosti poruke koritenjem poiljaoevog javnog kljua; ostvaruje se autentinost (engl. authenticity) poruke Dogovaranje kljua omoguuje se siguran dogovor oko tajnog kljua, koji e se kasnije koristiti u primjerice nekom simetrinom kriptosustavu

Digitalno potpisivanje je metoda koja se koristi u situacijama kada je potrebno dokazati autentinost poslane poruke. U sluaju komunikacije preko nesigurnog komunikacijskog kanala, ranije korisnik nikad nije bio u potpunosti siguran s kim on zapravo komunicira. Taj problem je (donekle) rijeen izumom digitalnog potpisa. Digitalni potpis je naziv za podatak dobiven deifriranjem saetka poruke privatnim kljuem poiljaoca (proces izvodi sam poiljatelj). Ukoliko primaoc prilikom usporedbe saetka primljene poruke i deifriranog digitalnog potpisa javnim kljuem proiljaoca ustvrdi da su te dvije vrijednosti jednake, tada on moe biti u potpunosti siguran da je poruku poslala upravo osoba iji javni klju posjeduje. Ovaj proces funkcionira upravo iz razloga to su algoritmi ifriranja i deifriranja inverzni u oba smjera (E(D(x))=D(E(x)=x, pri emu je s E oznaeno ifriranje, dok je s D oznaeno deifriranje), te stoga to postupak deifriranja moe izvesti samo vlasnik privatnog kljua.

Slika 3.15 Osnovni princip digitalnog potpisivanja

40

Obino su kriptografski algoritmi javnog kljua procesorski dosta zahtjevniji od simetrinih algoritama, no njihova im razumna uporaba omoguuje iroku primjenu. Kroz vei dio povijesti kriptografije, klju za ifriranje je morao biti uvan u tajnosti te se morao prethodno razmjeniti izmeu komunikacijskih stranaka na neki siguran nekriptografski nain (npr.: sastankom "u etiri oka"). Postoji mnogo bitnih praktinih problema koji se mogu pojaviti prilikom distribucije tajnih kljueva. Kriptografija javnog kljua je izumljena upravo kako bi se stalo na kraj tim problemima kod nje korisnici mogu sigurno komunicirati preko nesigurne komunikacijske veze (npr. Interneta), bez potrebe za prethodnim dogovorom oko zajednikog tajnog kljua. Prvi kriptografski algoritam javnog kljua izumio je Clifford Cocks u ranim 1970-ima, kao djelatnik britanske obavjetajne agencije GCHQ (engl. krat. za Government Communications Headquarters). Ova injenica je (naalost) uvana u tajnosti sve do 1997. godine. Whitfield Diffie i Martin Hellman su 1976. godine objavili prvi javnosti poznat asimetrini kriptosustav, nastao pod utjecajem djela Ralph Merklea o javnoj distribuciji kljueva, namijenjen javnom dogovaranju tajnog kljua (engl. public key agreement). Ova metoda, danas poznata kao Diffie-Hellmanova metoda razmjene kljueva, je prva javnosti poznata praktina metoda za dogovaranje zajednikog tajnog kljua preko nezatienog komunikacijskog kanala. Merkleova metoda javnog dogovaranja kljua, poznata pod imenom "Merkleovi problemi" (engl. Merkle's Puzzles), je prvi put objavljena 1978. godine. Spomenuti algoritam Clifford Cocksa je ponovno izumljen 1977. godine, od strane trojca s MIT-a (engl. krat. za Massachusetts Institute of Technology): Rivest, Shamir i Adleman. Autori su ga javnosti predstavili u svom radu iz 1978. godine te je algoritam danas poznat pod imenom RSA. RSA kriptosustav pri ifriranju i deifriranju koristi modularnu eksponencijaciju nad umnokom dvaju (vrlo) velikih primitivnih brojeva. Sigurnost mu se zasniva na pretpostavci da je velike brojeve (praktiki) nemogue faktorizirati. Od razdoblja 1970.-ih, pojavio se velik broj asimetrinih kriptografskih algoritama za ifriranje, digitalno potpisivanje, dogovaranje kljua, te za druge primjene. Neki od njih su teoretski sigurniji od drugih, neki su bri od drugih, dok su neki toliko nepraktini da su korisni samo u glavama autora. Kriptosustav ElGamal se bazira na problemu diskretnog logaritma (velikih brojeva), kao i DSA koji je namijenjen samo digitalnom potpisivanju poruka. Sredinom 1980.-ih, Neal Koblitz je predstavio novu porodicu kriptografskih algoritama javnog kljua; iako su matematiki puno kompleksniji od npr. RSA, kriptosustavi bazirani na eliptinim krivuljama (ECC engl. krat. za Elliptic Curve Cryptography) omoguuju efikasnije iskoritavanje problema diskretnog logaritma, pogotovo s obzirom na veliinu koritenih kljueva. Sa stanovita sigurnosti, asimetrini kriptosustavi nisu nita sigurniji od simetrinih. Postoje popularniji i manje popularniji. Postoje probijeni i oni koji (jo) nisu probijeni. Na nesreu, popularnost nije pouzdan indikator sigurnosti. Neki od njih imaju dokaze sigurnosti razliitih svojstava te (vremenski) promjenjive kvalitete. U mnogim se dokazima tvrdi da je probijanje odreenog asimetrinog algoritma ekvivalentno rjeavanju nekog od "nerjeivih" matematikih problema, poput faktoriziranja ili diskretnog logaritmiranja vrlo velikih brojeva. Neki od tih "neoborivih" dokaza su s lakoom opovrgnuti ubrzo nakon njihove objave; meu njima je najpoznatiji Knapsack kriptosustav baziran na problemu podsuma niza (engl. subsetsum problem), koji je kasnije postao vrlo slavan po lakoi kojom je probijen [85]. Kao i sa svim kriptografskim algoritmima, asimetrini kriptosustavi se takoer moraju odabrati i koristiti s velikom dozom opreza.

41

Openito, niti za jedan od asimetrinih algoritama za ifriranje ne postoji dokaz apsolutne sigurnosti, kao to je to sluaj kod kriptosustava jednostruko ifrirajueg niza (engl. one-time pad) [50]. To znai da se trenutno ne moe sa sigurnou ustvrditi da li je (ne)mogue izvesti tajni privatni klju iz poznatog javnog kljua, ili da li postoje neke slabosti pri koritenju algoritma koje bi omoguile deifriranje poruka bez potrebe za posjedovanjem privatnog kljua. Sigurnost kriptosustava s javnim kljuem zasniva se na procjenama teine rjeavanja odreenog matematikog problema. Takve se procjene svakim danom mijenjaju, paralelno s padom cijena procesorske moi i novim matematikim otkriima. No, asimetrini algoritmi za ifriranje u veini sluajeva pruaju dovoljnu sigurnost. Ukoliko je procijenjeno vrijeme probijanja ifrirane poruke grubom silom (engl. brute force) npr. 1000 godina, tada su ifrirani podaci o detaljima kreditne kartice savreno sigurni. Naime, ukoliko je vrijeme potrebno za probijanje ifrirane poruke dulje od korisnog ivota iste, tada se poruka moe smatrati prilino zatienom (kreditna kartica istie nakon samo par godina). Jedna od potencijalnih slabosti kriptografije javnog kljua je mogunost napada ovjeka u sredini (engl. man-in-the-middle attack), u kojem se podaci presreu i mijenjaju od strane napadaa. Tako na primjer, napada moe presresti poslati javni klju i zamijeniti ga sa svojim. Nakon toga se presree ifrirana poruka, koja se nakon deifriranja napadaevim privatnim kljuem nanovo ifrira, no ovaj put s presretenim javnim kljuem, te se alje dalje vlasniku tog istog kljua. Ovom se problemu pokuava doskoiti uvoenjem u primjenu autoriziranih tijela (engl. certificate authority) za generiranje i razmjenu javnih kljueva, no ni taj sustav nije bez mana. Naime, napada moe takav web posluitelj javnih kljueva izbaciti iz primjene koritenjem napada uskraivanjem usluge (engl. krat. DoS Denial of Service), te se potom lano predstaviti kao isti. Nedavno su objavljeni radovi o novoj vrsti kriptoanalitikih napada na asimetrine kriptosustave, zasnovani na vrlo preciznom mjerenju potroenog procesorskog vremena prilikom ifriranja poruke, koritenjem kljueva razliite sloenosti (Paul C. Kocher: "Timing Attacks on Implementations of Diffie-Hellman, RSA, DSS, and Other Systems"). To je trenutno vrlo aktivno podruje zanimanja kriptoanalitiara te se u budunosti mogu oekivati novi i neoekivani napadi. Veina je kriptografskih algoritama javnog kljua procesorski relativno vrlo zahtjevna u usporedbi s mnogim simetrinim algoritmima, koji omoguuje ekvivalentnu sigurnost ifriranih podataka. Ova injenica je posljedino rezultirala uporabom tzv. hibridnih kriptosustava (engl. hybrid cryptosystems), koji su nita drugo doli kombinacija asimetrinog i simetrinog kriptosustava. U njima se sluajno generiran tajni klju koristi kod ifriranja poruke (brzim) simetrinim algoritmom, dok se on sam ifrira (sporim) asimetrinim algoritmom. Na taj se nain poveava efikasnost uporabe kriptografije javnog kljua, bez dodatnih negativnih sigurnosnih posljedica. Treba oekivati da je javni klju vrlo vjerojatno poznat velikoj i vjerojatno nepoznatoj grupi ljudi. Opozivanje i zamjena javnog kljua, koje zahtijevaju neki sigurnosni dogaaji (poput krae pripadnog tajnog privatnog kljua), mogu trajati jako dugo. Imajui to u vidu, u sistemima koji zahtijevaju reakciju u stvarnom vremenu sigurnosno kritinim sistemima (engl. safety-critical systems), metode kriptografije javnog kljua moraju se koristiti s velikom panjom. Ovdje se nameu etiri bitna pitanja: Tko moe opozvati javni klju? poto je uloga opozivatelja vrlo mona, koriteni kontrolni mehanizam bi trebao ukljuiti to je vei broj sudionika, kako bi se obranili od moguih napada, dok ih u isto vrijeme treba biti to manje, kako bi se osigurao to bri opoziv Kako distribuirati javni klju? poslije opoziva starog kljua, novi se klju mora distribuirati na (neki) predefinirani nain 42

Kako rairiti opoziv? obavijest o opozivu kljua, odnosno o nevaljanosti istog, mora se rairiti to je bre mogue svima koji (moda) posjeduju stari klju Kako se oporaviti od "curenja" privatnih kljueva? ukoliko je dolo do gubitka tajnosti i/ili autentinosti na sistemskoj razini, tada se mora primjeniti predefinirana strategija (tko ima ovlasti za opoziv starih/probijenih kljueva, kako rairiti opoziv, te to postupiti s porukama koje su ifrirane nakon trenutka "curenja")

Veza javnog kljua i vlasnika mora biti bezgrena, inae savreno siguran asimetrini kriptosustav moe funkcionirati besprijekorno i u isto vrijeme biti savreno nesiguran u primjeni. Kao i u svoj kriptografiji, od iznimne je vanosti koritenje protokola kako bi se uspostavila i provjerila takva vrsta veze. Asociranje javnog kljua sa svojim vlasnikom obino se izvodi protokolima tzv. infrastrukture javnog kljua (engl. krat. PKI Public Key Infrastructure). Na ovaj se nain ispravnost asocijacije formalno provjerava od strane pouzdanog posrednika (engl. trusted third party), koji strukturno moe biti: hijerarhijska autorizacijska struktura (engl. hierarchical certificate authority) (poput X.509), lokalni model povjerenja (engl. local trust model) (poput SPKI) ili statistika mrea povjerenja (engl. statistical web of trust) (poput PGP-a ili GPG-a).

3.4.1.

Znaajniji predstavnici

Diffie-Hellman Diffie-Hellmanova metoda razmjene kljueva (engl. key exchange) je kriptografski protokol kojim se omoguuje dvjema strankama da zajedniki uspostave zajedniki tajni klju preko nesigurnog komunikacijskog kanal (poput Interneta). Ovaj se klju potom moe koristiti za ifriranje daljnje komunikacije koritenjem nekog simetrinog (ili nizovnog) kriptosustava. Metodu su prvi put javno objavili Whitfield Diffie i Martin Hellman 1976. godine, premda je kasnije izalo na vidjelo da je nekoliko godina ranije, u britanskoj obavjetajnoj agenciji GCHQ (engl. krat. za Government Communications Headquarters), do istog otkria doao njihov djelatnik Malcolm J. Williamson. Diffie i Hellman su prije svog otkria bili pod snanim utjecajem Ralph Merkleovog djela o javnoj distribuciji kljueva, te je 2002. godine sam Hellman predloio da se ime promjeni u Diffie-Hellman-Merkleova metoda razmjene kljueva (Martin E. Hellman: "An Overview of Public Key Cryptography"). RSA RSA je prvi javnosti poznati asimetrini kriptosustav primjeren za uporabu u ifriranju i digitalnom potpisivanju poruka. Takoer je poznat kao jedan od prvih velikih otkria u kriptografiji javnog kljua. RSA se jo uvijek esto koristi u elektronikim poslovnim protokolima te se vjeruje da je poprilino siguran uz koritenje dovoljno velikog kljua. Algoritam su 1977. godine opisali Ron Rivest, Adi Shamir i Len Adleman s amerikog sveuilita MIT (engl. krat. za Massachusetts Institute of Technology); akronim RSA predstavlja inicijale njihovih prezimena. Clifford Cocks, britanski matematiar i djelatnik GCHQ-a, opisao je ekvivalentni algoritam (jo) 1973. godine, u tada povjerljivim internim dokumentima. S obzirom na procesorski relativno velike zahtjeve algoritma, u to je vrijeme sve ostalo na samo zanimljivoj ideji. No, njegovo otkrie se ipak javno objavilo 1997. godine, i to zbog isteka roka trajanja oznake povjerljivosti tajnog dokumenta (25 godina u Velikoj Britaniji).

43

Algoritam je u SAD-u 1983. patentirao MIT (patentni broj: 4,405,829). Zatita patenta je istekla 21. rujna 2000. godine. Zanimljivo je napomenuti da je prethodnom javnom objavom algoritma u SAD-u onemogueno njegovo patentiranje u ostalim dijelovima svijeta. Da je Cocks javno objavio svoj rad par godina ranije, zadesila bi ga ista sudbina. ElGamal ElGamal asimetrini kriptosustav je zasnovan na Diffie-Hellmanovoj metodi razmjene kljueva. Opisao ga je Taher Elgamal 1984. godine. Implementiran je u brojnim aplikacijama i sustavima, meu kojima su najpoznatije besplatne aplikacije "GNU Privacy Guard" te PGP (engl. krat. za Pretty Good Privacy). DSA (engl. krat. za Digital Signature Algorithm) je varijanta ElGamal metode, koja se koristi za digitalno potpisivanje poruka. ElGamal algoritam je probabilistiki/vjerojatnostni, to znai da se izvorna poruka moe ifrirati u vie razliitih oblika. To svojstvo ima za (negativnu) posljedicu poveanje veliine ifrirane poruke, naspram veliine izvorne poruke, u omjeru 2:1.

3.5. Funkcije saetka poruke


Funkcija saetka poruke (engl. hash function) H je transformacija koja za poruku m vraa niz h (h=H(m)) predefinirane veliine, koji nazivamo saetak poruke (engl. hash, message digest). Funkcije koje imaju samo ovo svojstvo imaju iroku primjenu, no za primjenu u kriptografiji moraju imati i odreenadodatna svojstva. Osnovna svojstva kriptografskih funkcija saetka poruke su: Ulazna poruka moe biti proizvoljne duljine Izlazna vrijednost mora biti fiksne veliine H(x) je jednosmjerna funkcija H(x) je relativno jednostavna za raunanje H(x) je slobodna od kolizije (engl. collision-free)

Za funkciju H se kae da je jednosmjerna ukoliko ju je teko invertirati, pri emu se pod "tekim invertiranjem" smatra da je za dan saetak poruke h (praktiki) nemogue pronai poruku m takvu da vrijedi H(m)=h. Ukoliko je za bilo koju poruku m (praktiki) nemogue pronai njoj razliitu poruku n takvu da vrijedi H(m) = H(n), tada kaemo za funkcija H da je slobodna od kolizije (engl. collision-free). Vrijednost h jedinstveno predstavlja poruku i/ili dokument za koju je ona izraunata.

Slika 3.16 Primjer saetaka razliitih nizova

44

Glavna uloga kriptografskih funkcija za raunanje saetka poruke je provjera integriteta i digitalno potpisivanje poruka. Dodatno, saetak poruke se moe dati javno bez opasnosti o otkrivanju sadraja poruke. Tipian primjer uporabe kriptografske funkcije saimanja bi bio sljedei: Ana postavlja Ivanu teak logiki problem, pri emu tvrdi da ga je ona dotad rijeila. Ivan bi rado htio probati rijeiti problem, no ujedno eli biti siguran da je Ana uistinu nala rjeenje zadanog problema. Stoga, Ana zapisuje svoje rjeenje u obliku poruku, rauna njezin saetak te saetak daje Ivanu, pri emu rjeenje problema ostaje tajno. Na ovaj nain, ukoliko Ivan nakon par dana i sam doe do rjeenja, Ana moe provjeriti njegovo rjeenje, a ujedno i dokazati da je znala rjeenje od ranije. U stvarnosti, Anu i Ivana najee predstavljaju raunalni programi. Navedeni primjer koritenja predstavlja shemu potvrde (engl. commitment scheme). Jo jedna vrlo bitna primjena sigurnosnih saetaka je provjera integriteta poruke. Odreivanje da li je dolo do bilo kakve izmjene originalne poruke moe se utvrditi usporedbom saetka poruke prije i poslije njezinog prijenosa (ili nekog drugog dogaaja). Saetak poruke takoer moe posluiti kod identifikacije datoteka, pri emu sve datoteka s jednakim saetkom imaju identian sadraj. Slian sluaj koritenja je verifikacija lozinki. Obino se lozinke ne spremaju na medij u "itljivom" obliku, zbog sigurnosnih razloga, ve u obliku njihovih kriptografskih saetaka. Kako bi se izvrila autentifikacija korisnika, rauna se kriptografski saetak uneene lozinke te se rezultat usporeuje s ve spremljenim saetkom valjane lozinke. Ukoliko su saetci identini tada je autentifikacija uspjeno obavljena.

3.5.1.

Merkle-Damgrdova struktura

Ralph Merkle i I. B. Damgrd su 1989. definirali funkciju saetka poruke pomou tzv. "funkcije saimanja" (engl. compression function), koja kao ulaznu veliinu prima niz fiksne duljine te vraa izlaznu vrijednost manje fiksne duljine (I. B. Damgaard: "A design principle for hash functions"). Tim su dosta utjecali na daljnji razvoj funkcija saetka poruke. Pomou funkcije saimanja, saetak poruke se moe dobiti uzastopnim raunanjem njezine vrijednosti nad pojedinim blokovima poruke. U ovom postupku, poruka proizvoljne veliine se dijeli na blokove ija je duljina ovisna o funkciji saimanja, te je poruka popunjena tako da je njezina duljina djeljiva s duljinom bloka. Potom se blokovi slijedno procesiraju pomou funkcije saimanja, pri emu se kao ulazne veliine uzimaju dosad izraunat saetak i trenutni blok poruke. Zadnja dobivena (izraunata) vrijednost se uzima kao saetak cijele poruke.

Slika 3.17 Merkle-Damgrdova struktura

Mnoge dananje kriptografske funkcije saetka poruke posjeduju upravo ovu strukturu, meu kojima su najpoznatije MD5 i SHA-1. Popularnost ove konstrukcije lei u injenici, koju su dokazali Merkle i Damgrd, da ukoliko je funkcija saimanja f otporna na koliziju (engl. collision-resistant), tada je to svojstvo tranzitivno na cijelu funkciju raunanja saetka poruke 45

u kojoj se ona koristi. Na nesreu, ova struktura takoer posjeduje i neka manje poeljna svojstva, meu kojima je najbitnija "multikolizija" moe se pronai vie razliitih poruka s identinim saetkom sa samo malo vie truda od onog potrebnog za pronalaenje obine kolizije izmeu dvije poruke.

3.5.2.

Davies-Meyerova struktura

Davies-Meyerova struktura [44] je podvrsta Merkle-Damgrdove strukture, osmiljena s namjerom uporabe blokovskih algoritama za ifriranje u svrhu dobivanja saetka poruke.

Slika 3.18 Davies-Meyerova struktura

Funkcija saimanja f(H,M) uzima kao parametre dosad izraunati saetak H za obraeni dio poruke, te trenutni blok poruke M. Ukoliko s E(K,P) oznaimo ifrirani blok podataka P koritenjem kljua K, tada se Davies-Meyerova struktura moe opisati sljedeim izrazom:
f ( H , M ) = E (M , H ) H

Mogue su i varijacije, pri emu se operacija ekskluzivno-ILI () moe zamijeniti s bilo kojom drugom binarnom operacijom, poput zbrajanja (+) ili oduzimanja (-).

3.5.3.

HMAC

MAC (engl. krat. za Message Authentication Code) je naziv za autentifikacijsku oznaku (engl. authentication tag) dobivenu koritenjem neke od autentifikacijskih shema. Za razliku od digitalnog potpisa, autentifikacijska oznaka poruke se rauna i verificira s istim kljuem, tako da verifikaciju moe obaviti samo osoba za koju je ona namijenjena. Jedan od tipova autentifikacijskih shema je HMAC (engl. krat. za Hash function-based Message Authentication Code). U njemu se pri raunanju koristi tajni klju (ili vie njih) zajedno s kriptografskom funkcijom saetka poruke. Kao i kod svih MAC autentifikacijskih shema, istovremeno se koristi za verifikaciju integriteta podataka te za autentifikaciju poruke. Pri raunanju se moe koristiti bilo koja funkcija saetka poruke, poput MD5 ili SHA-1; rezultirajui MAC algoritam se u ovom sluaju naziva HMAC-MD5, odnosno, HMAC-SHA-1. Kriptografska snaga HMAC algoritma ovisi o koritenoj funkciji saetka poruke te o veliini i kvaliteti kljua. HMAC se definira kao:

HMACK ( M ) = h(( K opad ) || h(( K ipad ) || m))


pri emu h predstavlja funkciju saetka poruke, K tajni klju popunjen nulama do veliine L bitova, te m procesiranu poruku. L predstavlja veliinu bloka koju funkcija saetka poruke koristi pri procesiranju poruke. Simbol || predstavlja binarnu operaciju spajanja (engl. 46

concatenation) binarnih nizova, dok predstavlja binarnu operaciju ekskluzivno-ILI. Konstante opad i ipad, svaka duljine L bitova, definirane su kao ipad = 0x363636...3636 i opad = 0x5c5c5c...5c5c. Ukoliko je L=512, tada su opad i ipad svaki veliine 64 bajta, pri emu je ipad popunjen vrijednou 0x36, dok je opad popunjen s 0x5c.

3.5.4.

Digitalni potpis

Digitalni potpis (engl. digital signature) je naziv za grupu kriptografskih metoda koje se koriste za autentifikaciju digitalnih podataka, analogno obinom (fizikom) potpisu na papiru. U metodi digitalnog potpisa, obino se definiraju dva komplementarna algoritma, pri emu se jedan koristi kod potpisivanja (engl. signing), dok se drugi koristi kod verifikacije (engl. verification) potpisa. Digitalni potpis, u irem smislu, obuhvaa digitalne potpise javnog kljua i MAC (engl. krat. za Message Authentication Code) autentifikacijske oznake. Najvaniji razlozi za upotrebu digitalnih potpisa u raunalnoj komunikaciji su sljedei: Autentinost kriptosustavi javnog kljua omoguuju svakom korisniku sigurno slanje poruka koritenjem javnog kljua, dok se digitalnim potpisom omoguuje provjera identiteta poiljaoca poruke. Vanost provjere autentinosti poiljaoca poruke se najbolje moe primjetiti u financijskom kontekstu. Primjerice, ukoliko sredinja banka poalje svojoj podrunici (digitalni) nalog za uplatom odreene svote novca na neki korisniki raun, tada u tom procesu obje komunikacijske strane moraju biti sigurne da su zatraene transakcije te njihove potvrde autentine. Integritet obje komunikacijske strane ele biti apsolutno sigurne da su poslate poruke ostale nepromijenjene tijekom prijenosa. ifriranjem se napadau oteava itanje sadraja poruke, no to ga ne sprijeava u mijenjaju poruke na neki njemu koristan nain. Digitalnim se potpisom uva integritet originalne poruke. Neosporivnost rije osporavanje se u kriptografiji odnosi na in poricanja povezanosti s poslanom porukom. Primaoc poruke moe od poiljatelja inzistirati na prilaganju digitalnog potpisa poruci, kako bi se sprijeilo eventualno naknadno osporavanje (od stranje poiljatelja). Predoenjem digitalnog potpisa treoj osobi, dokazuje se porijeklo poruke.

Metode digitalnog potpisa se zasnivaju na kriptografiji javnog kljua. U kriptografiji javnog kljua, svaki korisnik ima svoj par kljueva: jedan javni (za ifriranje) i jedan privatni (za deifriranje). Javni klju se slobodno distribuira, dok se privatni klju uva u tajnosti. Bitno je napomenuti da se cijela sigurnost kriptografije javnog kljua zasniva na (praktinoj) nemogunosti izraunavanja tajnog privatnog kjua iz poznatog javnog kljua. Metode digitalnog potpisa obino sadre tri algoritma: algoritam za generiranje kljueva algoritam za potpisivanje verifikacijski algoritam

Primjerice, zamislimo situaciju u kojoj Ivan eli Marku poslati poruku, te eli da Marko bude u mogunosti provjere da li je poruka uistinu stigla od njega. Digitalni potpis poruke se rauna pomou Ivanovog privatnog kljua koritenjem algoritma za potpisivanje. Pri zaprimanju poruke, Marko provjerava da li je poruka uistinu dola od Ivana, tako to izvrava verifikacijski algoritam pomou Ivanovog javnog kljua nad zaprimljenom porukom. Ukoliko 47

se priloeni digitalni potpis slae s rezultatom verifikacijskog algoritma, tada Marko moe biti u potpunosti siguran da je poruka uistinu dola od Ivana. Najee se, zbog efikasnosti, digitalno potpisivanje izvodi nad saetkom poruke. Na ovaj se nain veliina digitalnog potpisa znatno smanjuje, te se znatno tedi na vremenu, poto su funkcije za dobivanje saetka poruke bitno bre od algoritama digitalnog potpisa. Najpoznatije i najee koritene metode digitalnog potpisa su: RSA-PSS, DSA, EDSA i ElGamal.

3.5.5.

Znaajniji predstavnici

CRC (engl. krat. za Cyclic Redundancy Check) CRC je naziv za itavu obitelj funkcija saetka poruke, najee koritenih u svrhu detekcije pogreaka nastalih tijekom prijenosa i/ili skladitenja podataka. Obino poiljatelj izraunati CRC saetak dodaje na poetak poruke, koji se naknadno provjerava od strane primaoca, kako bi se utvrdilo da li je dolo do pogreke pri prijenosu poruke. CRC funkcije saetka poruke izrazito su popularne stoga to su vrlo jednostavne za sklopovsku implementaciju (npr. modemi), jednostavno ih je matematiki analizirati, te su posebno dobre kod detekcije estih pogreaka uzrokovanih "umom" u komunikacijskim kanalima. Iako su korisne kod detekcije pogreaka, CRC funkcije saetka se ne mogu smatrati sigurnima za upotrebu kod verifikacije integriteta podataka, zbog linearne strukture koritenog algoritma. Jednostavnim jezikom govorei, to znai da je mogue namjerno promijeniti poruku, bez da se promijeni njezin CRC saetak. Ova skupina funkcija ne spada u kriptografski sigurne funkcije saetka poruke. MD2 (engl. krat. za Message Digest Algorithm 2) MD2 je kriptografska funkcija saetka koju je Ronald Rivest dizajnirao 1989. godine. Algoritam je optimiziran u svrhu izvoenja na (za to doba popularnim) 8-bitnim raunalima. Iako je od onda osmiljeno dosta novih funkcija (poput MD4, MD5 i SHA), ak se i dandanas MD2 koristi u infrastrukturama javnih kljueva (engl. public-key infrastructures) kao dio certifikata generiranih u kombinaciji s RSA algoritmom za ifriranje. MD2 procesira poruku u blokovima veliine 128 bita te vraa izraunatu vrijednost saetka kao 128-bitnu vrijednost. Vrijednost saetka se obino predstavlja u heksadekadskoj bazi. Tako na primjer za dani znakovni niz dobivamo saetak poruke:
MD2("0123456789") = 46148200A1C137CB918812F2EB08597C

ak i mala promjena originalne poruke e rezultirati totalno razliitim saetkom poruke:


MD2("0123446789") = 2BACFE612C21F3CBB81B80AAAF90F95B

Ovo svojstvo, pri kojem promjena jednog bita ulazne veliine ima velik utjecaj na promjenu izlazne veliine, naziva se efekt lavine (engl. avalanche effect). Nepisano je pravilo da svaka kriptografski sigurna funkcija saetka poruke mora imati ovo svojstvo. MD4 (engl. krat. za Message Digest Algorithm 4) MD4 kriptografsku funkciju saetka poruke (etvrta u nizu) dizajnirao je profesor Ronald Rivesta s MIT-a 1990. godine. Veliina rezultirajueg saetka je 128 bita. Sam algoritam je dosta utjecao na kasnije dizajne, poput MD5, SHA i RIPEMD algoritama.

48

Neke od slabosti u MD4 dizajnu su 1991. godine demonstrirali Den Boer i Bosselaers (B. den Boer, A. Bosselaers: "An attack on the last two rounds of MD4"). Kasnije je 2004. godine skupina kriptoanalitiara objavila da je uspjela pronai koliziju dviju razliitih poruka "runim raunanjem" MD4 saetaka [18]. Za dani znakovni niz dobivamo saetak poruke:
MD4("0123456789") = A695EA9F14A89C4E82CA5CF52A28D45D

MD5 (engl. krat. za Message Digest Algorithm 5) MD5 kriptografsku funkciju saetka poruke (peta u nizu) dizajnirao je profesor Ronald Rivest 1991. godine. Kao Internet standard (RFC 1321), MD5 se koristi u irokom spektru sigurnosnih aplikacija. 1996. godine je pronaen propust u ovoj funkciji naslijeen od prethodne MD4 (Hans Dobbertin: "Cryptanalysis of MD5 compress"); premda nije bilo rijei o fatalnoj mani, strunjaci su poeli preporuivati uporabu ostalih funkcija, poput SHA-1. No, u 2004. su joj pronaene jo ozbiljnije mane, tako da se samim tim dovodi u pitanje njezina daljnja uporaba u kriptografske svrhe (Dan Kaminsky: "MD5 To Be Considered Harmful Some Day"). Za dani znakovni niz dobivamo saetak poruke:
MD5("0123456789") = 781E5E245D69B566979B86E28D23F2C7

HAVAL HAVAL je kriptografska funkcija saetka poruke s varijabilnom veliinom saetka. Dizajnirali su ga Yuliang Zheng, Josef Pieprzyk i Jennifer Seberry 1992. godine. Saetci poruke mogu biti: 128, 160, 224 i 256 bitova. Takoer sadri i varijabilan broj kola: 3, 4 ili 5. Istraivanjima su se pronale slabosti koje dovode njezinu daljnju uporabu u pitanje. U rujnu 2004. godine, skupina istraivaa je objavila pronaene kolizije za HAVAL varijantu s 128 bita i 3 kola [18]. Za dani znakovni niz dobivamo saetak poruke:
HAVAL("0123456789",128,5) = 466FDCD81C3477CAC6A31FFA1C999CA8

SHA (engl. krat. za Secure Hash Algorithm) SHA je naziv za itavu obitelj kriptografskih funkcija saetka poruke. Najee koritena funkcija u obitelji, SHA-1, implementirana je u mnotvu (dananjih) popularnih aplikacija i sigurnosnih protokola, meu koje spadaju TLS, SSL, PGP, SSH, S/MIME, i IPSec. SHA-1 se smatra nasljednikom MD5, ranije esto koritene kriptografske funkcije saetka. Sve SHA funkcije je dizajnirala amerika sigurnosna agencija NSA (engl. krat. za National Security Agency), te su objavljene kao standardi Vlade SAD-a. Najstariji lan ove obitelji, objavljen 1993. godine, slubeno se naziva SHA; no, danas se sve ee koristi naziv SHA-0 kako bi se izbjegli mogui nesporazumi. Dvije godine poslije, objavljen je prvi nasljednik SHA-0 funkcije saetka, SHA-1. Nakon toga su uslijedile jo etiri varijante, veeg saetka i malo izmijenjenog dizajna: SHA-224, SHA-256, SHA-384 i SHA-512 ponekad se sve zajedno nazivaju SHA-2 varijante (dizajn im je u potpunosti jedank, osim to imaju razliite izlazne veliine). Dosad su pronaeni vrlo uspjeni kriptoanalitiki napadi na SHA-0 (Xiaoyun Wang, Hongbo Yu, Yiqun Lisa Yin: "Efficient Collision Search Attacks on SHA-0") te na SHA-1 (Xiaoyun 49

Wang, Yiqun Lisa Yin, Hongbo Yu: "Finding Collisions in the Full SHA-1"). Varijante SHA-2 se trenutno smatraju vrlo sigurnima za uporabu. Primjerice, za dani znakovni niz dobivamo saetak poruke:
SHA-1("0123456789") = 87ACEC17CD9DCD20A716CC2CF67417B71C8A7016

3.6. Generatori (pseudo)sluajnih brojeva


Generiranje (pseudo)sluajnih brojeva se koristi u mnogim kriptografskim aplikacija, kao kod npr. generiranja sluajnih asimetrinih i simetrinih kljueva te kod tzv. izazov-odgovor (engl. challenge-response) protokola. Generator (pseudo)sluajnih brojeva je funkcija koja vraa binarni niz, takav da se u svakom trenutku vrijednost sljedeeg izlaznog bita ne moe predskazati na temelju prijanjih bitova. Prave generatore sluajnih brojeva je gotovo nemogue dizajnirati za rad na raunalu, poto su raunala deterministiki strojevi. Obino se za tu potrebu proizvode posebni ureaji, koji kao ulaznu vrijednost uzimaju uzorkovane vrijednosti neke mjerljive veliine iz stvarnog svijeta poput temperature, jaine svjetlosti ili atmosferskog pritiska.

3.6.1.

Generator sluajnih brojeva

Generator sluajnih brojeva (engl. krat. RNG random number generator) je ureaj ili algoritam koji kao izlaz vraa statistiki potpuno nezavisne i nepredvidljive vrijednosti u obliku brojevnog niza. U svrhu generiranja (pravih) sluajnih brojeva potrebno je promatranje i biljeenje neke nepredvidljive prirodne pojave. Dizajniranje sklopovskog ureaja i/ili raunalnog programa kojim bi se prikupljale uzorkovane vrijednosti mjerljive veliine neke promatrane pojave, slobodnih od korelacija i predvidljivosti, vrlo je teak zadatak. Za koritenje u kriptografske svrhe takoer je potrebno da takav generator bude otporan na mogua promatranja i manipulacije unutarnjeg stanja od strane vanjskog napadaa. Sklopovski generatori sluajnih brojeva koriste nepredvidljivost koja se pojavljuje kod nekih fizikalnih pojava, poput: termiki um poluvodike diode ili elektrikog otpornika vrijeme izmeu dviju estinih emisija tijekom radioaktivnog raspadanja nestabilnost frekvencije (engl. frequency instability) slobodnog oscilatora naboj kondenzatora nakon zadanog perioda punjenja promjene latentnog vremena itanja uzrokovane zranim turbulencijama unutar kuita vrstog diska zvuk iz mikrofona ili slika iz kamere

Procesi na kojima se mogu bazirati programski generatori sluajnih brojeva: oitavanje sistemskog sata vremenski interval izmeu dvaju pritisaka tipki tipkovnice i/ili mia sadraj ulazno-izlaznih spremnika pojedinih raunalnih komponenti (tipkovnica, vrsti disk, ...) sadraj radne memorije 50

sadraj procesorskih registara stanje operacijskog sustava, poput trenutnog optereenja procesora i/ili mree

Dobro dizajniran generator sluajnih brojeva koristi vie izvora sluajnosti. Time se zatiujemo od moguih neoekivanih problema kod pojedinanih izvora, poput prestanka (normalnog) rada, te znatno oteavamo promatranje i manipulaciju vanjskom napadau. Svaki izvor bi se trebao pojedinano uzorkovati, te bi se tako dobiveni nizovi trebali kombinirati koritenjem sloene funkcije mijeanja (engl. mixing function); za tu namjenu se preporuuje koritenje kriptografskih funkcija saetka poruke, poput SHA-1 ili MD5. Ova tehnika se naziva iskrivljavanje (engl. "skewing") generatora sluajnih brojeva. Glavni problemi generatora sluajnih brojeva su njihova sporost i neponovljivost. Brzina im moe bitno varirati, od 10 do 106 bitova u sekundi, no openito se smatra da su kvalitetni generatori sluajnih brojeva dosta spori [87] .

Slika 3.19 Primjer sklopovskog generatora sluajnih brojeva

Elektroniki sklop s gornje sheme koristi um efekta lavine (engl. avalanche noise) kod reverzno polariziranog PN-spoja, kojeg u naem sluaju predstavlja spoj emiter-baza tranzistora s otvorenim kolektorom (OC engl. krat. za Open Collector). Drugi tranzistor pojaava signal-um. Prva dva ALS04 invertora se nalaze u linearnom podruju rada, gdje se ponaaju kao operacijska pojaala, dodatno pojaavajui signal. Trei invertor takoer pojaava signal te ga jo dodatno ograniava na TTL (engl. krat. za Transistor-Transistor Logic) izlazne razine, pri emu izlazni napon od 0 do +0.8V predstavlja logiku razinu 0, dok napon od +2.3 do +5V predstavlja logiku razinu 1.

3.6.2.

Generator pseudosluajnih brojeva

Zbog deterministike prirode raunala, naziv za generiranje sluajnih brojeva na raunalu obino dobiva prefiks "pseudo" (lat. za la). Generator pseudosluajnih brojeva (PRNG engl. krat. za Pseudorandom Number Generator) je deterministiki algoritam koji za datu sluajnu vrijednost veliine k bitova, vraa brojevni niz veliine l >> k , koji se ponaa kao da je sluajan. Ulazna vrijednost se obino naziva "sjeme" (engl. seed), dok se izlazni niz naziva pseudosluajni brojevni niz (engl. pseudorandom number sequence). Jedna od dobrih svojstava ove vrste generatora je ponovljivost rezultata, odnosno, za jednake vrijednosti sjemena dobivaju se identini izlazni nizovi, to nam omoguuje ponavljanje simulacija. Stoga to je generator pseudosluajnih brojeva deterministiki algoritam, te se izvodi na deterministikom raunalu, njegovi generirani nizovi brojeva sadravaju jedno neeljeno svojstvo, koje se ne moe pronai kod pravih sluajnih nizova: periodinost (engl. 51

periodicity). Sigurno je da e se generator, ukoliko koristi konanu veliinu memorije, nakon odreenog broja iteracija nai u (istom) poetnom stanju, poslije ega e se generirani niz ponavljati ispoetka. Periodinost predstavlja ogranien problem; oekivani period se udvostruuje sa svakim dodatnim bitom koritene memorije. Vrlo je jednostavno dizajnirati generator pseudosluajnih vrijednosti s periodom tako velikim da ga nijedno raunalo na svijetu ne bi moglo cijelog prijei u oekivanom ivotu svemira.

Slika 3.20 Periodinost generatora pseudosluajnih vrijednosti

Nerijeeno je pitanje, vrlo bitno u kriptografiji: da li postoji nain da se generirani niz dobiven iz dobro dizajniranog generatora pseudosluajnih brojeva razlui od savreno sluajnog uma, bez poznavanja poetnog stanja (sjemena)? Veina kriptosustava se bazira na pretpostavci da takav nain ne postoji najjednostavniji primjer su nizovni kriptosustavi, gdje se velikoj veini sluajeva vri operacija ekskluzivno-ILI () ulaznog niza izvorne poruke s generiranim nizom pseudosluajnih brojeva. Dizajn takvih generatora pseudosluajnih brojeva je vrlo teak, dok se u veini ostalih sluajeva koriste jednostavniji generatori. U primjeni, mnogi esto koriteni generatori pseudosluajnih brojeva u svojim generiranim nizovima sadre nepoeljne smetnje (engl. artifacts), koje mogu uzrokovati pad na nekim statistikim testovima sluajnosti. Ovdje spadaju, izmeu ostalih: Manji period od oekivanog (za neka poetna stanja) Slaba dimenzionalost Zavisnost susjednih elemenata niza Neki nizovi bitova su manje sluajni od drugih Nedostatak uniformnosti

Nedostatci slabo dizajniranih generatora pseudosluajnih brojeva mogu varirati od onih rezultiranih nepanjom dizajnera do onih gotovo smijenih. RANDU algoritam je jedan od najozloglaenijih generatora ikad koritenih. Sam generator bi ostao neopaen da se nije koristio desetljeima na velikim tzv. mainframe raunalima. Zbog toga to su ga koristili mnogi znanstvenici, znaajan dio istraivakog rada tog doba se smatra manje pouzdanim. Prvi generator pseudosluajnih brojeva osmislio je John von Neumann 1946. godine, poznatog pod imenom "metoda srednjeg kvadrata" (engl. middle-square method). Generator je bio vrlo jednostavnog dizajna: ulazni broj se kvadrira te se kao rezultirajui broj (proizvoljno) uzimaju znamenke iz sredine; generirani broj se koristi kao ulazna vrijednost sljedee iteracije. Tako na primjer, kvadriranjem broja 3432 dobiva se broj 11778624, dok se kao generirani broj moe uzeti 7786. Problem ove metode je taj da se nizovi vrlo brzo ponu 52

ponavljati, dok pojedini brojevi, poput 0, odmah unitavaju proces. Von Neumann je bio svjestan ovih problema te je stoga unutar svog programa, prilikom detekcije neeljenog stanja, koristio brze ("prljave") ispravke. Danas su zasigurno najpoznatiji linearno kongruentni generatori (engl. krat. LCG - Linear Congruence Generators). Osnovna jednadba linearne kongruencije glasi:
xn = (k x n 1 + a ) mod m ( n = 0,1,2,...)

pri emu su svi faktori cjelobrojne vrijednosti; s k je oznaen mnoitelj, s a inkrement (obino se uzima vrijednost 0), s n redni broj iteracije, dok je s m oznaen modul. Poetnu vrijednost (sjeme) predstavlja x0. U n-tom koraku generirana vrijednost xn se dobiva na sljedei nain: prethodna vrijednost xn-1 se mnoi s parametrom k, dobiveni umnoak se zbraja s parametrom a, te se kao vrijednost xn uzima ostatak dijeljenja rezultata iz prethodnog koraka s parametrom m. Generirani brojevi se kreu u rasponu od 0 do m-1. Generator ovog tipa moe generirati najvie m-1 razliitih brojeva prije nego to se niz pone ponavljati. Kako bi se osigurao ispravan rad generatora, parametri k i m nikako ne smiju imati zajednikih djelitelja, odnosno mora vrijediti: GCD ( k , m) = 1 . Stoga se obino kao vrijednost jednoga (ili oba) od njih uzima proizvoljni primitivni broj. Bitno je napomenuti da je vrlo teko nai dobru kombinaciju LCG parametara, te je stoga prije same uporabe generator potrebno temeljito istestirati statistikim testovima na sluajnost. m 231 231-1 231-249 231-1 231-1 232 248 264 k 65539 (RANDU) 16807 40692 48271 62089911 69069 31167285 6364136223846793005

Tablica 1 Primjer parametara popularnih LCG generatora

Generatori s veim periodima i boljim statistikim svojstvima su (naravno) poeljniji. Jedna od moguih alternativa LCG generatorima su vie rekurzivni generatori (engl. krat. MRG Multiple Recursive Generator) koji su bazirani na rekurziji vieg reda:
xn = (a1 xn 1 + + a k xn k ) mod m

Za razliku od LCG generatora s periodom m, MRG generatori mogu imati period duljine mk-1, te u praksi imaju puno bolja svojstva. m 231-1 231-1 231-1 263-25 247-115 247-115 k a1 a2 a3 2 337190270 268152554 0 2 524824023 488461699 0 3 518175991 510332243 71324449 2 2975962250 2909704450 0 2 11138366 11808124 0 3 11209406 0 11721934

Tablica 2 Primjer parametara popularnih MRG generatora

53

3.6.3.

Kriptografski siguran generator pseudosluajnih brojeva

Statistiki testovi ije vrijeme izvoenja polinomno ovisi o duljini testiranog brojevnog niza nazivamo statistikim testovima polinomnog vremena (engl. polynomial-time statistical tests). Za generator pseudosluajnih brojeva se kae da zadovoljava test idueg bita (engl. next-bit test) ukoliko ne postoji takav statistiki test kojim se moe u polinomnom vremenu, na temelju generiranog niza duljine l, predvidjeti sljedei (l+1). bit niza sa sigurnou veom od . Ukoliko generator pseudosluajnih brojeva zadovoljava test idueg bita, tada se naziva kriptografski sigurnim (engl. krat. CSPRNG Cryptographically Secure Pseudorandom Number Generator). Kriptografski siguran generator pseudosluajnih brojeva je generator pseudosluajnih brojeva s dodatnim svojstvima koji ga ine prikladnim za uporabu u kriptografske svrhe. Potrebna "kvaliteta" sluajnosti varira od sluaja do sluaja. to je proces sigurnosno osjetljivi, to je potrebnija vea kvaliteta. Kod generiranja trenutnih vrijednosti, koje se nee opetovano upotrebljavati, potrebna je samo jedinstvenost, dok je kod, primjerice, generiranja administratorskog kljua potrebna znatno vea kvaliteta. Takoer, teoretska neprobojnost Vernamovog kriptosustava zajamena je samo ukoliko je prilikom generiranja niza kljua upotrebljen pravi izvor sluajnosti [50]. U idealnom sluaju, prilikom generiranja sluajnih brojeva koristi se entropija (neureenost) dobivena iz nekog nedeterministikog izvora, poput specijaliziranog sklopovskog generatora sluajnih brojeva ili nekog nepredvidljivog sistemskog procesa. S teoretskog gledita, koliina sluajnosti koja se moe generirati iz jednog izvora je jednaka ukupnoj entropiji koja se u tom trenutku nalazi u promatranom sistemu. No ponekad je u praksi potrebna vea kvantiteta sluajnosti, odnosno generiranih sluajnih brojeva, nego to je entropije u izvoru. U tom se sluaju moe koristiti kriptografski siguran generator pseudosluajnih brojeva, koji moe svu entropiju rastegnuti (engl. stretch) na to vie bitova. Ukoliko je sva entropija dostupna samo prilikom zapoinjanja algoritma, tada zapravo govorimo o nizovnom kriptosustavu; u tom je sluaju entropija predstavljena u obliku kriptografskog kljua. Veina generatora pseudosluajnih brojeva (PRNG) se ne moe koristiti u kriptografske svrhe (CSPRNG). Iako im generirani nizovi prolaze veinu statistikih testova sluajnosti, nisu dizajnirani kako bi izdrali matematike metode obrnutog injenjerstva (engl. mathematical reverse engineering). Kriptografski sigurni generatori pseudosluajnih brojeva se dizajniraju posebno s namjenom da izdre ovaj tip kriptoanalize, te ukoliko nema pogreaka u dizajnu, postaju praktiki neprobojnim. Kriptografski sigurni generator pseudosluajnih brojeva moe koristiti bilo koji (sigurni) kriptosustav. Tako se primjerice za tu namjenu moe iskoristiti neki od modernih blokovskih kriptosustava (AES, IDEA,...), koritenjem odgovarajueg blokovskog naina rada poput CBC ili OFB naina. Takoer, iteriranjem kriptografske funkcije saetka poruke, dobivamo kriptografski siguran generator pseudosluajnih brojeva, s jedinim uvjetom da poetna vrijednost iteracije, odnosno sjeme, mora biti sluajno i tajno.

3.6.4.

Znaajniji predstavnici

Mersenne Twister Mersenne Twister (engl. za Mersenne uvija) generator pseudosluajnih brojeva razvili su 1997. godine Makoto Matsumota i Takuji Nishimure. Omoguuje brzu generaciju vrlo 54

kvalitetnih pseudosluajnih brojeva, dizajniran posebno s namjerom da se isprave brojne greke i mane koje se mogu nai u starijim algoritmima. Postoje (barem) dvije poznate varijante algoritma, razliite samo u veliini koritenih tzv. "Mersenneovih prim-brojeva" (primitivni brojevi oblika 2m-1). Novija i rairenija verzija je MT 19937 (engl. krat. za Mersenne Twister); ima sljedea korisna svojstva [4]: Dokazano vrlo velik period od 219937-1 Vrlo velik red dimenzionalne ekvidistribuicije serijska korelacija (meuzavisnost) susjednih elemenata generiranog niza je gotovo beznaajna Bri je od veine poznatih generatora pseudosluajnih brojeva Statistiki je "sluajan" u svim izlaznim bitovima te prolazi na svim strogim statistikim testovima sluajnosti (poput Diehard [88] i/ili NIST [55] paketa testova)

ANSI X9.17 ANSI X9.17 je naziv za standard u kojem se opisuje (sigurnosno) poeljno upravljanje kriptografskim kljuevima unutar financijskih ustanova (engl. financial institution key management) [4]. U njemu se definiraju protokoli koji bi se trebali koristiti unutar ustanova tog tipa (poput banaka) pri svakodnevnom radu s kriptografskim kljuevima (generiranje, distribucija,...). U jednom dijelu tog dokumenta je opisan kriptografski siguran generator pseudosluajnih brojeva, kasnije poznat pod nazivom "ANSI X9.17 PRNG". U originalnoj se verziji koristi blokovski kriptosustav DES, dok je u novoj varijanti zamijenjen s blokovskim kriptosustavom 3DES. U varijanti implementiranoj u aplikaciji PGP (engl. krat. za Pretty Good Privacy), koristi se blokovski kriptosustav IDEA. Trenutno se smatra vrlo sigurnim i pouzdanim te ga njegova modularnost (prilagodljivost) prema razliitim blokovskim kriptosustavima ini nezamjenjivim. Najee se koristi pri (sigurnosno osjetljivoj) generaciji kljueva u asimetrinim kriptosustavima. Yarrow Yarrow (engl. za hajduka trava, stolisnik) spada u kriptografski sigurne generatore pseudosluajnih brojeva, no jo je interesantniji u svojoj varijanti generatora (pravih) sluajnih brojeva [72]. Ime je dobio po vrsti biljke ije se sasuene stabljike (tapii) koriste pri metodi I Ching proricanja budunosti; bacanjem tapia se dobiva sluajna forma, koja se kasnije interpretira po zadanim pravilima. Dizajnirali su ga Bruce Schneier, John Kelsey i Niels Ferguson 1999. godine, kao djelatnici tvrtke Counterpane Labs. Algoritam je eksplicitno nepatentiran i besplatan u sve svrhe. Implementiran je u MacOS X i FreeBSD (/dev/random ureaj) operacijskim sustavima. Uz to to se moe koristiti kao (obini) generator pseudosluajnih brojeva, koritenjem entropije s analognih raunalnih ulaza (poput mikrofona) pretvara se u moni generator sluajnih brojeva. Poboljani dizajn se moe pronai u obliku generatora Fortuna, predstavljenog u knjizi "Practical Cryptography" (engl. za "Praktina kriptografija"), autora Bruce Schneier i Niels Fergusona.

55

4. PROGRAMSKA PODRKA
Svrha pratee programske podrke je (bila) konstrukcija kriptografske programske potpore te na njoj zasnovana izvedba korisnikog suelja. Projekt je realiziran u programskom jeziku C#, koritenjem programskog alata Microsoft Visual Studio .NET 2003. Tri se paketa mogu nai u programskoj podrci (praktinom projektu):
Utility sadri sve nekriptografske pomone razrede i metode koritene u projektu CryptoLibrary.NET sadri sve kriptografske razrede i metode koritene u projektu Cipher.NET predstavlja korisniko suelje projekta

framework Utility

uses

uses uses

facade Cipher.NET

framework CryptoLibrary .NET

Slika 4.1 UML dijagram praktinog uratka

4.1. Utility
Svrha projekta Utility je skladitenje nekriptografskih razreda i metoda esto koritenih u ostala dva projekta (CryptoLibrary.NET i Cipher.NET), u obliku programske knjinice potpore izvoenja. Na taj se nain uklanja neeljena zalihost te se znatno smanjuje sloenost (mogueg) naknadnog ispravljanja programskog koda. Projekt se sastoji od tri zasebna razreda: BigInteger, SpecialFunction i Utility. Zbog njihove glomaznosti, u donjem su dijagramu (Slika 4.2) izostavljeni njihovi sastavni dijelovi.

Slika 4.2 Statiki UML dijagram programske knjinice Utility

56

Namjena razreda BigInteger (autora Chew Keong Tana) je rad s velikim brojevima. Sadrava sve osnovne matematike metode za normalan rad s velikim brojevima te dodatne metode koritene u kriptografske svrhe, poput testova primarnosti brojeva. Ovaj se razred najee koristi u projektu CryptoLibrary.NET, i to u dijelu s asimetrinim kriptosustavima. U razredu SpecialFunction se nalaze posebne matematike funkcije (erfc, igamc, gamma, ...) koje se ne mogu pronai u imeniku System.Math. Prevedena (engl. ported) je iz programskog jezika Java (autora Leigh Brookshawa) u programski jezik C#, prvenstveno u potrebe raunanja rezultata statistikih testova sadranih u projektu CryptoLibrary.NET. Svi ostali pomoni razredi i metode, koriteni u projektima CryptoLibrary.NET i Cipher.NET, implementirane su u razredu Utility. Meu njezinim najee koritenim metodama su svakako one za konverziju podataka iz jednog formata u drugi. U njima se na jednostavan nain podaci iz poetnog oblika transformiraju u eljeni krajnji oblik. Primjerice, metoda ByteArrayToHexString() pretvara polje bajtova zadano argumentom u izlazni niz znakova, koji predstavljaju (itljivi) heksadekadski prikaz tog polja. Tu su zatim razredi namijenjeni raunanju vremenskih intervala; instancirani objekt razreda NormalTimer pomou sistemskog sata rauna trajanje intervala ogranienog pozivima sadranih metoda Start() i Stop(), dok objekt razreda PrecisionTimer takoer radi to isto, no samo s dosta veom preciznou (koristi vrlo precizni sistemski broja PerformanceCounter). U programskom jeziku C# se tzv. "nazubljena" (engl. jagged) polja ([ ][ ]) ne mogu instancirati u jednom koraku, te su stoga u ovom razredu implementirane za to posebne metode. Opis ostalih razreda i metoda mogu se pronai u sljedeim tablicama. Tip Ime
Base64

Namjena
Pretvorba podataka iz binarnog oblika u Base64 format i obratno Rad s kompleksnim brojevima; koriten u spektralnom NIST testu Saimanje binarnih podataka

Complex

Compression

Razredi

CRC32

Raunanje CRC32 saetka poruke Implementacija SHA1 funkcije saetka poruke; koriten od strane metode MakeRandomIV() Raunanje ("topanje") vremenskih intervala

HashIV NormalTimer PrecisionTimer HardDriveInfo ProcessorInfo BitsOfBytes BitsOfPseudoCat BitsOfUInt32s

Dobivanje informacija o vrstim diskovima i procesoru

Pristup pojedinim bitovima pripadnih polja

Tablica 3 Razredi sadrani u razredu Utility

57

Tip

Ime
GetFileType() GetMachineOS() MakeRandomIV() Strings() Zeroize() ByteExtract() ByteArrayToHexString() ByteArrayToObject() ByteArrayToString() ByteArrayToUInt16() ByteArrayToUInt16Array() ByteArrayToUInt16Array() ByteArrayToUInt32() ByteArrayToUInt32Array() ByteArrayToUInt64() ByteArrayToUInt64Array() HexStringToByteArray() ObjectToByteArray() StringToByteArray() UInt16ArrayToByteArray() UInt16ArrayToUInt32() UInt16ToByteArray() UInt32ArrayToByteArray() UInt32ToByteArray() UInt64ArrayToByteArray() UInt64ToByteArray() UnicodeByteArrayToString() UnicodeStringToByteArray() OnlyAlpha() OnlyAlphaNum() OnlyNum() FileRead() FileSize() FileSweep() FileWrite() CreateByteJaggedArray() CreateCharJaggedArray() CreateIntJaggedArray() CreateJaggedArray() CreateUInt16JaggedArray() CreateUInt32JaggedArray() CreateUInt64JaggedArray() CmpArrays() IncByteArray() XorArray() ROL() ROR()

Namjena
Vraa tip datoteke na temelju njene ekstenzije Vraa ime trenutnog operacijskog sustava Vraa (generirani) sluajni niz zadane veliine Vraa stringove (ASCII i UNICODE) iz polja bajtova Sigurnosno brisanje sadraja memorijskih polja Izvlaenje bajtova iz veih podatkovnih formi

Konverzija podataka iz jednog formata u drugi

Metode

Filtriranje podataka; koriste se mahom kod klasinih kriptosustava

Rad s datotekama

Inicijalizacija tzv. "nazubljenih" (engl. jagged) polja

Izvoenje operacija (==, ++, ) nad poljima Rotiranje podataka (lijevo i/ili desno)

Tablica 4 Metode sadrane u razredu Utility

58

4.2. CryptoLibrary.NET
CryptoLibrary.NET je kriptografska programska knjinica nastala sa svrhom potpore izvoenja (ostalih) kriptografskih aplikacija. Kao ogledni primjer, nastala je vizualna aplikacija Cipher.NET. CryptoLibrary.NET se sastoji od osam velikih cjelina implementiranih u obliku imenika (engl.

namespaces):
Asymmetrical asimetrini kriptosustavi Classical klasini kriptosustavi CSPRNG kriptografski sigurni generatori pseudosluajnih brojeva Hash funkcije saetka poruke PRNG generatori pseudosluajnih brojeva RNG generatori sluajnih brojeva StatisticalTests statistiki testovi sluajnosti Symmetrical simetrini (blokovski i nizovni) kriptosustavi

Slika 4.3 Statiki UML dijagram programske knjinice CryptoLibrary.NET

59

Od ostalih elemenata tu su jo i razred SecureBuffer namijenjen sigurnosnom (memorijskom) smjetaju polja bajtova, razred Analysis namijenjen primitivnom (kripto)analiziranju podataka, te pobrojavanje (engl. enumeration) CipherAlgorithmType, u kojem su popisane sve vrste podranih kriptosustava. Instancirani objekti razreda SecureBuffer za zadau imaju zatitu skladitenog polja bajtova od veine memorijskih napada na kriptosustave; to se prvenstveno odnosi na tehnike tzv. "njukanja" (engl. sniffing) u kojima se nakon zavretka izvoenja aplikacije po memoriji trae zaostale "korisne" informacije (poput lozinki, korisnikih imena, itd.). SecureBuffer objekti koriste teoretski neprobojan Vigenreov kriptosustav [50], u kombinaciji sa sluajno generiranim nizom kljua (engl. keystream), kako bi zatitili sadrano polje od bilo koje vrste napada na otkrivanje zatienog memorijskog sadraja. Pristup (deifriranim) podacima ima samo program koji je instancirao objekt i nitko vie. U sluaju unitenja (engl. destruction) SecureBuffer objekta tijekom izvoenja programa, ili nakon zavretka izvravanja aplikacije, zatieno se polje prepisuje s nulama kao dodatna mjera predostronosti. Ovaj se razred najee koristi kod zatite tekstualnih lozinki implementiranih klasinih kriptosustava. Razred Analysis sadri statike metode namijenjene osnovnoj analizi podataka:
BitFrequencyInsideBytes() raspodjela bitova unutar bajtova testiranog niza NonOverlappingFrequencyTable() frekvencija nepreklapajuih blokova bitova OverlappingFrequencyTable() frekvencija preklapajuih blokova bitova ShannonEntropy() Shannonova entropija binarnih podataka [72]

Pobrojavanje CipherAlgorithmType se koristi prilikom ifriranja i deifriranja datoteka. Naime, u zaglavlje (svake) ifrirane datoteke se zapisuje tip koritenog kriptosustava, kako bi se naknadno omoguilo valjano deifriranje. Tip koritenog kriptosustava je (upravo) predstavljen jednim od elemenata pobrojavanja CipherAlgorithmType.

4.2.1.

Simetrini kriptosustavi

Svi kriptosustavi ija se sigurnost zasniva na poznavanju tajne lozinke (engl. password) spadaju u grupu simetrinih kriptosustava. U imeniku Symmetrical implementirani simetrini kriptosustavi su razvrstani u dvije podgrupe: blokovski (imenik Block) i nizovni (imenik Stream) kriptosustavi, ovisno o nainu procesiranja podataka. Kod blokovskih (3.2) se kriptosustava podaci procesiraju u blokovima, dok se kod nizovnih (3.3) procesiraju slijedno bit-po-bit (ili bajt-po-bajt). Svi implementirani blokovski kriptosustavi naslijeuju apstraktni bazni razred pod imenom BaseBlockCipher, dok nizovni kriptosustavi naslijeuju BaseStreamCipher. Ti bazni razredi predstavljaju "standarde" za implementaciju simetrinih kriptosustava u programskoj knjinici CryptoLibrary.NET. Bazni razredi sadravaju statike, dinamike i apstraktne metode; statike metode su ve implementirane unutar baznih razreda, dinamike metode su one koje su dostupne samo kod instanciranih objekata, dok apstraktne predstavljaju one metode koje moraju biti implementirane unutar izvedbe pripadnog kriptosustava te su i same dostupne samo kod instanciranih objekata. U statike metode spadaju sve one metode koje su openite za cijelu vrstu kriptosustava (poput metode GetThroughputs() ija je namjena mjerenje brzine izvoenja podranih kriptosustava). 60

metaclass BaseBlockCipher -keyQuantities : Hashtable #name : string #keyLength : int #defaultByteOrder : ByteOrder #presentOffset : int #endOffset : int #BLOCK_LENGTH : int #nStreams : int +TEST_MESSAGE_SIZE : int +Names : string[] #BaseBlockCipher() -BaseBlockCipher() +Supported() +GetKeyQuantity() +GetKeyQuantities() +Name() +KeyLength() +PasswordToKey() +AlgorithmID() +AlgorithmIDToName() +DefaultByteOrder() +Reset() +GetThroughputs() +PrintThroughputs() +BlockLength() +QuickTest() +PaddingTest() +GetByName() +PresentOffset() +EndOffset() #BlockPad() #BlockDePad() #PadOneAndZeroes() #PadSecureFill() #PadPKCS() #PadTBC() #DePadOneAndZeroes() #DePadSecureFill() #DePadPKCS() #DePadTBC() #Init() #set_key() +E() +D() +Encrypt() +Decrypt() #EncryptECB() #DecryptECB() #EncryptCBC() #DecryptCBC() #EncryptOFB() #DecryptOFB() #EncryptCFB() #DecryptCFB() #EncryptPCBC() #DecryptPCBC() #EncryptCTR() #DecryptCTR() #EncryptInterleavedCBC() #DecryptInterleavedCBC() #EncryptInterleavedCFB() #DecryptInterleavedCFB() #EncryptInterleavedPCBC() #DecryptInterleavedPCBC() #EncryptInterleavedOFB() #DecryptInterleavedOFB() +FileEncrypt() +FileDecrypt()

enumeration KeyQuantity +Max +Min +Step +Default

Symmetrical

Block

Stream

metaclass BaseStreamCipher #key : SecureBuffer -keyQuantities : Hashtable #name : string #keyLength : int +Names : string[] +TEST_MESSAGE_SIZE : int #BaseStreamCipher() -BaseStreamCipher() +Supported() +GetKeyQuantity() +GetKeyQuantities() #Reset() #Init() +Name() +KeyLength() +PasswordToKey() +AlgorithmID() +AlgorithmIDToName() +GetByName() +GetThroughputs() +PrintThroughputs() +QuickTest() +GenerateKeystream() +Encrypt() +Decrypt() +FileEncrypt() +FileDecrypt()

Slika 4.4 Statiki UML dijagram imenika Symmetrical

61

Metoda
AlgorithmIDToName() BaseBlockCipher() BlockDePad() BlockPad() D() Decrypt() DecryptCBC() DecryptCFB() DecryptCTR() DecryptECB() DecryptInterleavedCBC() DecryptInterleavedCFB() DecryptInterleavedOFB() DecryptInterleavedPCBC() DecryptOFB() DecryptPCBC() DePadOneAndZeroes() DePadPKCS() DePadSecureFill() DePadTBC() E() Encrypt() EncryptCBC() EncryptCFB() EncryptCTR() EncryptECB() EncryptInterleavedCBC() EncryptInterleavedCFB() EncryptInterleavedOFB() EncryptInterleavedPCBC() EncryptOFB() EncryptPCBC() FileDecrypt() FileEncrypt() GetByName() GetKeyQuantities() GetKeyQuantity() GetThroughputs() Init() PaddingTest() PadOneAndZeroes() PadPKCS() PadSecureFill() PadTBC() PasswordToKey() PrintThroughputs() QuickTest() Reset() set_key() Supported()

Tip
statika dinamika statika statika apstraktna dinamika dinamika dinamika dinamika dinamika dinamika dinamika dinamika dinamika dinamika dinamika statika statika statika statika apstraktna dinamika dinamika dinamika dinamika dinamika dinamika dinamika dinamika dinamika dinamika dinamika statika statika statika dinamika dinamika statika apstraktna statika statika statika statika statika statika statika statika dinamika apstraktna statika

Namjena
Pretvaranje ID brojevne oznake u ime kriptosustava Konstruktor Obrat popunjavanja nepotpunih blokova Popunjavanje nepotpunih blokova Deifriranje bloka podataka Deifriranje podataka Deifriranje podataka uporabom CBC naina rada Deifriranje podataka uporabom CFB naina rada Deifriranje podataka uporabom CTR naina rada Deifriranje podataka uporabom ECB naina rada Deifriranje podataka uporabom Int...CBC naina rada Deifriranje podataka uporabom Int...CFB naina rada Deifriranje podataka uporabom Int...OFB naina rada Deifriranje podataka uporabom Int...PCBC naina rada Deifriranje podataka uporabom OFB naina rada Deifriranje podataka uporabom PCBC naina rada Obrat popunjavanja metodom OneAnZeroes Obrat popunjavanja metodom PKCS Obrat popunjavanja metodom SecureFill Obrat popunjavanja metodom TBC ifriranje bloka podataka ifriranje podataka ifriranje podataka uporabom CBC naina rada ifriranje podataka uporabom CFB naina rada ifriranje podataka uporabom CTR naina rada ifriranje podataka uporabom ECB naina rada ifriranje podataka uporabom InterleavedCBC naina rada ifriranje podataka uporabom InterleavedCFB naina rada ifriranje podataka uporabom InterleavedOFB naina rada ifriranje podataka uporabom Int...PCBC naina rada ifriranje podataka uporabom OFB naina rada ifriranje podataka uporabom PCBC naina rada Deifriranje datoteka ifriranje datoteka Instanciranje objekta kriptosustava po njegovu imenu Vraa podrane veliine kljua kriptosustava Vraa odreenu informaciju o veliini kljua kriptosustava Izvoenje brzinskih testova nad kriptosustavima Inicijalizacija blokovskog kriptosustava Verifikacija implementiranih popunjavajuih metoda Popunjavanje bloka metodom OneAndZeroes Popunjavanje bloka metodom PKCS Popunjavanje bloka metodom SecureFill Popunjavanje bloka metodom TBC Pretvaranje lozinke u pripadni kriptosustavski klju Ispis brzine izvoenja blokovskih kriptosustava Verifikacija implementiranih kriptosustava Resetiranje blokovskog kriptosustava Postavljanje kljua blokovskog kriptosustava Odgovara na pitanje da li je odreeni kriptosustav podran

Tablica 5 Metode apstraktnog baznog razreda BaseBlockCipher

62

Metoda
AlgorithmIDToName() BaseStreamCipher() Decrypt() Encrypt() FileDecrypt() FileEncrypt() GenerateKeystream() GetByName() GetKeyQuantities() GetKeyQuantity() GetThroughputs() Init() PasswordToKey() PrintThroughputs() QuickTest() Reset() Supported()

Tip
statika dinamika dinamika dinamika statika statika apstraktna statika dinamika dinamika statika apstraktna statika statika statika apstraktna statika

Namjena
Pretvaranje ID brojevne oznake u ime kriptosustava Konstruktor Deifriranje podataka ifriranje podataka Deifriranje datoteka ifriranje datoteka Generiranje kljua niza Instanciranje objekta kriptosustava po njegovu imenu Vraa podrane veliine kljua kriptosustava Vraa odreenu informaciju o veliini kljua kriptosustava Izvoenje brzinskih testova nad kriptosustavima Inicijalizacija kriptosustava Pretvaranje lozinke u kriptosustavski klju Ispis brzine izvoenja nizovnih kriptosustava Verifikacija implementiranih kriptosustava Resetiranje nizovnog kriptosustava Odgovara na pitanje da li je odreeni kriptosustav podran

Tablica 6 Metode apstraktnog baznog razreda BaseStreamCipher

Od ostalih bitnijih elemenata simetrinih baznih razreda, istiu se statiko polje nizova znakova (stringova) Names i tablica rasprivanja (engl. hash table) keyQuantities. U polju Names su uskladitena imena svih podranih kriptosustava, odnosno algoritama za ifriranje, dok se u tablici keyQuantites nalaze sve potrebne informacije o doputenim veliinama kljua odreenog simetrinog kriptosustava. Doputene veliine kljua su deklarirane kao petorka: ime kriptosustava, minimalna veliina kljua (u bitovima), maksimalna veliina kljua, razmaci izmeu doputenih veliina kljua te uobiajena (engl. default) vrijednost kljua. Pobrojavanje KeyQuantity koristi se prilikom deklaracije i dohvata ovako definiranih veliina kljua. U ovom su programskom projektu implementirani sljedei blokovski kriptosustavi: 3-Way,
Anubis, Blowfish, Camellia, Cast-128, Cast-256, Cobra, Crypton-0.7, DES, DESX, DFC, E2, FEAL-8, FEAL-NX, Frog, GOST, HPC, ICE, IDEA, Khazad, Loki97, Lucifer, MacGuffin, Magenta, MARS, MC1, MC2, MISTY1, MMB, NewDES, Noekeon, Q, Q128, RC2, RC5, RC6, Redoc III, Rijndael-128, Rijndael-192, Rijndael-256, S-1, Safer-K, Safer-SK, Safer+, Seed, Serpent, SHARK-A, SHARK-E, Skipjack, Square, TDEA, TEA, Twofish, XTEA

U ovom su programskom projektu implementirani sljedei nizovni kriptosustavi: Achterbahn, F-FCSR, HC-256, ISAAC, MARK4, Mickey, MIR-1, PC1, Rabbit, RC4, RC4-drop, SapphireII, SCOP, Seal-BE, Seal-LE, SN3, Snow 1.0, Trivium, XOR, Yamb Njihove se specifikacije mogu pronai na priloenom CD-u. Bitno je napomenuti da se ovdje mogu pronai i dva vlastita blokovska kriptosustava: MC1 (engl. krat. za Mirek Cipher 1) i MC2 (engl. krat. za Mirek Cipher 2). Naime, prouavanjem struktura brojnih kriptosustava doao sam na ideju da i sam napravim koji. Oba kriptosustava su zasnovana na Feistelovoj mrei (3.2.1), te koristi visoko nelinearne funkcije kola (engl. round functions) zasnovane na mnoenju u Galoisovim poljima GF(p) [11]. U usporedbi s ostalim blokovskim kriptosustavima, moda su najsliniji Cast-128 blokovskom kriptosustavu. Koriste blokove duljine 16 bajtova, te klju takoer duljine 16 bajtova. Kao to e se naknadno vidjeti (5), u datim empirijskim rezultatima provedenih statistikih testova sluajnosti nad (svim) implementiranim algoritmima za ifriranje, MC1 i MC2 postiu vrlo dobre rezultate u usporedbi s ostalim danas popularnim kriptosustavima. 63

4.2.2.

Asimetrini kriptosustavi

Svi kriptosustavi ija se sigurnost zasniva na paru javni klju privatni klju, spadaju u skupinu asimetrinih kriptosustava (3.4). U ovom su programskom projektu svi takvi kriptosustavi smjeteni u imenik Asymmetrical. Svi implementirani asimetrini kriptosustavi naslijeuju apstraktni bazni razred pod imenom BaseAsymmetricalCipher, koji predstavlja "standard" za implementaciju asimetrinih kriptosustava u programskoj knjinici CryptoLibrary.NET. Do sad je ovdje implementirano samo pet asimetrinih kriptosustava. Najvaniji razlog tome jest taj da je njihova kvantiteta, naspram drugih vrsta kriptosustava, znatno manja. Vjerojatno zbog sloenosti same prirode kriptografije javnog kljua, dosad je u tu svrhu pronaeno i praktino iskoriteno svega par specifinih matematikih problema. Bitno je napomenuti da takoer postoji znatan broj kriptosustava koji su bez pogovora teoretski asimetrini, no njihova praktina svrha je mala ili gotovo nikakva (sloenost, zahtjevi za resursima, ...). Takvi kriptosustavi su pri izradi ovog programskog projekta izbjegavani u irokom luku.

Slika 4.5 Statiki UML dijagram apstraktnog baznog razreda BaseAsymmetricalCipher

Sve implementacije asimetrinih kriptosustava (u ovom projektu) podravaju ifriranje poruka neograniene veliine. Asimetrini kriptosustavi su po svojoj prirodi vrlo slini blokovskim kriptosustavima, odnosno, imaju funkciju kojom se obavlja ifriranje odreenog bloka 64

podataka te njoj inverznu funkciju; u ovom sluaju je veliina bloka odreena veliinom javnog kljua. Kod veine se dananjih implementacija ove vrste kriptosustava izbjegava ifriranje poruke vee od duljine javnog kljua. Poto je ifriranje asimetrinim kriptosustavom puno sporije od ostalih modernih kriptosustava, u praksi se dosta esto koristi tzv. "hibridni kriptosustav" (engl. hybrid cipher). U njemu se proizvoljni asimetrini kriptosustav koristi za ifriranje sluajno generiranog simetrinog kljua, dok se poruka ifrira nekim od simetrinih kriptosustava (generiranim kljuem). Na taj se nain znaajno poboljava brzina (de)ifriranja podataka, dok sigurnost ostaje praktiki nepromijenjena. U ovom su projektu podrana oba naina rada asimetrinih kriptosustava. Metode koje koriste hibridni kriptosustav od ostalih se razlikuju po prefiksu Quick. U njima se od simetrinih kriptosustava koristi AES-256 (odnosno Rijndael-256), trenutni standard za ifriranje Vlade SAD-a. Pri pohranjivanja privatnih i javnih kljueva u datoteke, koristi se poseban tekstualni format. U njihovom se zaglavlju zapisuju osnovne informacije o kljuu (tip kljua, pripadni kriptosustav, veliina,...), dok se u nastavku sam klju zapisuje u obliku brojeva po bazi 36. Format je nastao po uzoru na kriptografsku aplikaciju PGP, u kojoj je glavna ideja bila jednostavno slanje javnog kljua putem (dijela teksta) poruke elektronike pote. Metoda
AlgorithmIDToName() BaseAsymmetricalCipher() D() Decrypt() E() Encrypt() FileDecrypt() FileEncrypt() FilterKey() GenerateKeys() GetByName() GetPrivateKey() GetPublicKey() GetThroughputs() Load() LoadPrivateKey() LoadPublicKey() PrintThroughputs() PrivateKeyHeader() PublicKeyHeader() QuickDecrypt() QuickEncrypt() SetPrivateKey() SetPublicKey() Store() StorePrivateKey() StorePublicKey() Supported()

Tip
statika dinamika apstraktna apstraktna apstraktna apstraktna statika statika statika apstraktna statika apstraktna apstraktna statika statika dinamiki dinamiki statika statika statika dinamika dinamika apstraktna apstraktna statika dinamika dinamika statika

Namjena
Pretvaranje ID brojevne oznake u ime kriptosustava Konstruktor Deifriranje bloka podataka Deifriranje podataka ifriranje bloka podataka ifriranje podataka Deifriranje datoteka ifriranje datoteka Filtriranje niza znakova (privatnog ili javnog) kljua Generiranje para kljueva eljene sloenosti/duljine Instanciranje objekta kriptosustava po njegovu imenu Vraa privatni klju u obliku niza znakova (stringa) Vraa javni klju u obliku niza znakova (stringa) Izvoenje brzinskih testova nad kriptosustavima Uitavanje niza znakova (stringa) iz datoteke Uitavanje privatnog kljua iz tekstualne datoteke Uitavanje javnog kljua iz tekstualne datoteke Ispis brzine izvoenja blokovskih kriptosustava Vraa obvezni sadraj zaglavlja privatnog kljua Vraa obvezni sadraj zaglavlja javnog kljua Deifriranje hibridnim kriptosustavom ifriranje hibridnim kriptosustavom Postavljanje privatnog kljua Postavljanje javnog kljua Zapisivanje niza znakova (stringa) u datoteku Zapisivanje privatnog kljua u tekstualnu datoteku Zapisivanje javnog kljua u tekstualnu datoteku Odgovara na pitanje da li je odreeni kriptosustav podran

Tablica 7 Metode apstraktnog baznog razreda BaseAsymmetricalCipher

U ovom su programskom projektu implementirani sljedei asimetrini kriptosustavi: ElGamal, LUC, Paillier, Rabin, RSA. Njihove se specifikacije mogu pronai na priloenom CD-u. 65

4.2.3.

Klasini kriptosustavi

Svi kriptosustavi nastali prije 1971. godine (kad je nastao prvi moderni kriptosustav Lucifer), spadaju u grupu klasinih kriptosustava (3.1). U ovom su programskom projektu smjeteni u imenik Classical. Svi implementirani klasini kriptosustavi naslijeuju apstraktni bazni razred pod imenom BaseClassicalCipher, koji predstavlja "standard" za implementaciju klasinih kriptosustava u programskoj knjinici CryptoLibrary.NET.

Classical

metaclass BaseClassicalCipher #name : string +Names : string[] +TEST_MESSAGE_SIZE : int #BaseClassicalCipher() +Supported() +Keyable() +Name() +AlgorithmID() +AlgorithmIDToName() +GetByName() +Encrypt() +Decrypt() +QuickTest() +GetThroughputs() +PrintThroughputs() +PasswordToKey() +FileEncrypt() +FileDecrypt()

Slika 4.6 Statiki UML dijagram apstraktnog baznog razreda BaseClassicalCipher

Pri implementaciji klasinih kriptosustava iznikla su dva problema. Prvi je bio problem vrste podataka na kojima e se vriti ifriranje, odnosno deifriranje, dok je drugi bio memorijski smjetaj ("itljive") lozinke. Problem vrste procesiranih podataka je rijeen koritenjem tzv. Base64 metode kodiranja podataka, u kojem se binarni podaci mogu prebaciti u tekstualni oblik (uz odreenu redundanciju), i obrnuto. Time je omogueno da se binarni podaci ifriraju ovom vrstom kriptosustava pretvorbom u tekstualni oblik, te pretvorbom dobivene ifrirane poruke natrag u binarni oblik. Drugi problem je rijeen koritenjem SecureBuffer razreda za sigurnosno memorijsko skladitenje podataka (4.2). Metoda
AlgorithmIDToName() BaseClassicalCipher() Decrypt() Encrypt() FileDecrypt() FileEncrypt() GetByName() GetThroughputs() Keyable() PasswordToKey() PrintThroughputs() QuickTest() Supported()

Tip
statika dinamika apstraktna apstraktna statika statika statika statika statika statika statika statika statika

Namjena
Pretvaranje ID brojevne oznake u ime kriptosustava Konstruktor Deifriranje podataka ifriranje podataka Deifriranje datoteka ifriranje datoteka Instanciranje objekta kriptosustava po njegovu imenu Izvoenje brzinskih testova nad kriptosustavima Odgovara na pitanje da li kriptosustav (uope) treba lozinku Pretvaranje lozinke u kriptosustavski klju Ispis brzine izvoenja kriptosustava Verifikacija implementiranih kriptosustava Odgovara na pitanje da li je odreeni kriptosustav podran

Tablica 8 Metode apstraktnog baznog razreda BaseClassicalCipher

66

U ovom su programskom projektu implementirani sljedei klasini kriptosustavi: ADFGVX,


Atbash, Bacon, Beaufort, Bifid, Caesar, Gronsfeld, Morse, Myszkowski, Playfair, Pollux, Polybius, Porta, Railfence, Straddling checkerboard, Tilden, Trifid, Trithemian, Vigenere, WigWag.

Njihovi se opisi rada mogu pronai na priloenom CD-u.

4.2.4.

Funkcije saetka poruke

U funkcije saetka poruke spadaju sve one funkcije koje za svaku poruku proizvoljne veliine vraaju njoj jedinstveni niz predefinirane veliine. U ovom su programskom projektu takve funkcije smjetene u imeniku Hash. Sve implementirane funkcije saetka poruke naslijeuju apstraktni bazni razred pod imenom BaseHashFunction, koji predstavlja "standard" za implementaciju takvih funkcija u programskoj knjinici CryptoLibrary.NET.

Hash

metaclass BaseHashFunction #name : string #digestLength : int #blockLength : int +Names : string[] +TEST_MESSAGE_SIZE : int #BaseHashFunction() +Supported() +Name() +DigestLength() +BlockLength() +AlgorithmID() +AlgorithmIDToName() +GetByName() +GetThroughputs() +PrintThroughputs() +Calculate() +CalculateForFile()

Slika 4.7 Statiki UML dijagram apstraktnog baznmog razreda BaseHashFunction

Metoda Calculate() jedinstveno predstavlja funkciju saetka poruke, dok joj metoda CalculateForFile() samo proslijeuje proitani sadraj datoteke. Bitno je napomenuti da su uz standardne kriptografske funkcije saetka poruke implementirane i tzv. "funkcije zbrojne sume" (engl. checksum), koje nisu predviene za uporabu u kriptografske svrhe (Adler-32 te sve CRC, GHash i Sum funkcije saetka poruke). Metoda
AlgorithmIDToName() BaseHashFunction() Calculate() CalculateForFile() GetByName() GetThroughputs() PrintThroughputs() Supported()

Tip
statika dinamika apstraktna dinamika statika statika statika statika

Namjena
Pretvaranje ID brojevne oznake u ime pripadne funkcije Konstruktor Raunanje saetka poruke Raunanje saetka datoteke Instanciranje objekta funkcije saetka po njenom imenu Izvoenje brzinskih testova nad funkcijama saetka Ispis brzine izvoenja funkcija saetka poruke Odgovara na pitanje da li je odreena funkcija podrana

Tablica 9 Metode apstraktnog baznog razreda BaseHashFunction

67

U ovom su programskom projektu implementirane sljedee funkcije saetka: Adler-32, CARP, CRC-8, CRC-16, CRC-16 reversed, CRC-16 CCITT, CRC-16 CCITT reversed, CRC-16 FCS, CRC-16 IBM, CRC-16 LHA, CRC-16 XModem, CRC-16 ZModem, CRC-24, CRC-32, CRC-32C, CRC-32 reversed, CRC-32 Bzip2, CRC-32 Jamcrc, CRC-32 POSIX, CRC-64, Elf, FNV-32, FNVa-32, FNV-64, FNVa-64, GHash-32-3, GHash-32-5, HAVAL-128, HAVAL-160, HAVAL-192, HAVAL-224, HAVAL-256, HAS-160, MD2, MD4, MD5, RIPEMD-128, RIPEMD-160, RIPEMD-256, RIPEMD-320, SHA-1, SHA-224, SHA-256, SHA-384, SHA-512, Sum-8, Sum-16, Sum-16 BSD, Sum-24, Sum-32, Tiger, Whirlpool (2001), Whirlpool (2003). Njihove se specifikacije mogu pronai na priloenom CD-u.

4.2.5.

Generatori sluajnih brojeva

U ovom su programskom projektu svi generatori sluajnih brojeva smjeteni u imenik RNG. Svi implementirani generatori sluajnih brojeva naslijeuju apstraktni bazni razred pod imenom BaseRNG, koji predstavlja "standard" za implementaciju generatora sluajnih brojeva u programskoj knjinici CryptoLibrary.NET.

Slika 4.8 Statiki dijagram apstraktnog baznog razreda BaseRNG

Generatori sluajnih brojeva su u ovom projektu bazirani na preciznom mjerenju intervala trajanja raunalnih entropinih procesa. Mjerenje je ostvareno koritenjem posebno preciznog brojaa PerformanceCounter implementiranog u operacijskim sustavima baziranim na Windows NT tehnologiji (Windows NT, Windows 2000, Windows XP, ...). Entropija se manifestira u obliku trajanju izvoenja metode EntropyBasedPause(). U njoj se na temelju odabratog sistemskog procesa vri namjerno pauziranje; upravo se trajanje takvih pauza koristi kao rezultat generiranja sluajnih brojeva (uz male preinake). Trenutno je podrano pet izvora sistemske entropije: izvoenje velikih programskih blokova (CPU), mehanizam keiranja tvrdog diska (Disk Caching), vrijeme traenja (engl. seek time) glave disketnog pogona (FDD), bacanje/hvatanje programskih iznimki (Exceptions), te aktivni procesi operacijskog sustava (OS).

68

Metoda
BaseRNG() EntropyBasedPause() GetByName() NextByte() NextByteArray() NextDouble() NextDoubleArray() NextInt() NextIntArray() NextUInt32() NextUInt32Array() NextUInt64() NextUInt64Array() Supported()

Tip
dinamika apstraktna statika dinamika dinamika dinamika dinamika dinamika dinamika dinamika dinamika dinamika dinamika statika

Namjena
Konstruktor Pauza na ijem se trajanju zasniva generiranje brojeva Instanciranje objekta generatora po pripadnom imenu Vraa generirani bajt Vraa generirani niz bajtova Vraa generirani decimalni broj Vraa generirani niz decimalnih broja Vraa generirani predznani 32-bitni broj Vraa niz generiranih predznanih 32-bitnih brojeva Vraa generirani 32-bitni broj (bez predznaka) Vraa niz generiranih 32-bitnih brojeva (bez predznaka) Vraa generirani 64-bitni broj (bez predznaka) Vraa niz generiranih 64-bitnih brojeva (bez predznaka) Odgovara na pitanje da li je odreeni generator podran

Tablica 10 Metode apstraktnog baznog razreda BaseRNG

4.2.6.

Generatori pseudosluajnih brojeva

Generatori brojeva zasnovani na nekom deterministikom algoritmu nazivaju se generatori pseudosluajnih brojeva. U ovom projektu su svi takvi generatori smjeteni su u imeniku PRNG. Naslijeuju apstraktni bazni razred pod imenom BasePRNG, koji predstavlja "standard" za implementaciju generatora pseudosluajnih brojeva u programskoj knjinici CryptoLibrary.NET. Trenutno postoji velik broj generatora pseudosluajnih brojeva; od svih njih odabrani su najpoznatiji i najee koriteni, te su implementirani u CryptoLibrary.NET. Ovisno o koritenoj vrsti algoritama za generaciju brojeva, implementirani generatori su podijeljeni u sljedee imenike:
CLCG (engl. krat. za Combined LCG) kombinirani linearno kongruentni generatori [2] EICG (engl. krat. za Explicit Inversive Congruential Generators) izriito inverzni

kongruentni generatori [33]


ICG (engl. krat. za Inversive Congruential Generators) inverzni kongruentni

generatori [69]
LCG (engl. krat. za Linear Congruential Generator) linearno kongruentni generatori [2] MEICG (engl. krat. za Modified Explicit Inversive Congruential Generator)

modificirani izriito inverzni kongruentni generatori [33]


MiscPRNG (engl. krat. za Miscellaneous PRNG) razni generatori MRG (engl. krat. za Multiple Recursive Generator) viestruko rekurzivni generatori [2]

Generatori pseudosluajnih brojeva nisu sastavni dio kriptografskih aplikacija, no u ovaj su projekt uvrteni kao referenca za usporedbu s kriptografski sigurnim generatorima pseudosluajnih brojeva. Naime, tek nakon upoznavanja s ponaanjem generatora pseudosluajnih brojeva moglo se razmiljati o bilo kakvoj implementaciji kriptografski sigurnih generatora, koji su u krajnju ruku i predmet istraivanja ovog uratka.

69

BaseLCG +Names : string[] #_a : ulong #_m : ulong #y : ulong #b : ulong #mask : ulong #bigMultiply : bool #version : int +NextDouble() +NextByte() +NextUInt32() +SetSeed() +GetByName() +BaseLCG() +BaseLCG() #a() #m() #Y() #M() +YdivM() #SetB() #SetMask() #Set() #HowManyBits() #BigMultiply() #Generate() #GenerateWithMask()

BaseICG +Names : string[] #y : ulong #a : ulong #b : ulong #p : ulong #mask : ulong #masking : bool +NextDouble() +NextByte() +NextUInt32() +SetSeed() +GetByName() +BaseICG() +BaseICG() #BaseICG() #SetMask() #ClearMask() #Set() #Set() #CongInverse()

BaseEICG #y : ulong #a : ulong #b : ulong #p : ulong #n0 : ulong #n : ulong +Names : string[] +NextDouble() +NextByte() +NextUInt32() +SetSeed() +BaseEICG() #BaseEICG() +GetByName() #Set() #CongInverse()

BaseCLCG +Names : string[] #list : BaseLCG[] +NextDouble() +NextByte() +NextUInt32() +SetSeed() +GetByName() +BaseCLCG()

metaclassBasePRNG #name : string +Names : string[] +Groups : string[] #BasePRNG() -BasePRNG() +Name() +AlgorithmID() +AlgorithmIDToName() +GetByName() +GetByName() +GetNamesFromGroup() +NextDouble() +NextDoubleArray() +NextByte() +NextByteArray() +NextInt() +NextIntArray() +NextUInt32() +NextUInt32Array() +NextUInt64() +NextUInt64Array() +SetSeed() +TimeSeed()

CLCG

EICG

ICG

LCG

PRNG

MEICG

MiscPRNG

MRG

BaseMEICG #y : ulong #a : ulong #b : ulong #p : ulong #n0 : ulong #n : ulong +Names : string[] +NextDouble() +NextByte() +NextUInt32() +SetSeed() +BaseMEICG() +BaseMEICG() #BaseMEICG() +GetByName() #Set() #CongInverse()

metaclassBaseMiscPRNG +Names : string[] #BaseMiscPRNG() #BaseMiscPRNG() +GetByName() #InternPRNG()

BaseMRG +Names : string[] #an : ulong[] #xn : ulong[] #m : ulong +NextDouble() +NextByte() +NextUInt32() +SetSeed() +BaseMRG() +GetByName() #M() #ResetX() #ResetX() #ResetA()

Slika 4.9 Statiki UML dijagram imenika PRNG

70

Metoda
AlgorithmIDToName() BasePRNG() GetByName() GetNamesFromGroup() NextByte() NextByteArray() NextDouble() NextDoubleArray() NextInt() NextIntArray() NextUInt32() NextUInt32Array() NextUInt64() NextUInt64Array() SetSeed() TimeSeed()

Tip
statika dinamika statika statika dinamika dinamika dinamika dinamika dinamika dinamika dinamika dinamika dinamika dinamika apstraktna dinamika

Namjena
Pretvaranje ID brojevne oznake u ime pripadnog generatora Konstruktor Instanciranje objekta generatora po njegovu imenu Vraa imena implementiranih generatora unutar date grupe Vraa generirani bajt Vraa generirani niz bajtova Vraa generirani decimalni broj Vraa generirani niz decimalnih broja Vraa generirani predznani 32-bitni broj Vraa niz generiranih predznanih 32-bitnih brojeva Vraa generirani 32-bitni broj (bez predznaka) Vraa niz generiranih 32-bitnih brojeva (bez predznaka) Vraa generirani 64-bitni broj (bez predznaka) Vraa niz generiranih 64-bitnih brojeva (bez predznaka) Postavljanje sjemena generatora Vremensko postavljanje sjemena generatora

Tablica 11 Metode apstraktnog baznog razreda BasePRNG

4.2.7.

Kriptografski sigurni generatori pseudosluajnih brojeva

Generatori brojeva zasnovani na nekom kriptografskom algoritmu nazivaju se kriptografski sigurni generatori pseudosluajnih brojeva. U ovom projektu su svi takvi generatori smjeteni u imenik CSPRNG. Naslijeuju apstraktni bazni razred pod imenom BaseCSPRNG, koji predstavlja "standard" za implementaciju kriptografski sigurnih generatora pseudosluajnih brojeva u programskoj knjinici CryptoLibrary.NET. Generiranje kriptografski sigurnih pseudosluajnih brojeva se zasniva na (jednostavnom) principu uzastopnog ifriranja neke skupine podataka. Tako se primjerice kod blokovskih kriptosustava generacija brojeva zasniva na uzastopnom ifriranju bloka podataka, kod nizovnih kriptosustava na ifriranju koritenjem generiranog niza kljua (engl. keystream), dok se kod asimetrinih kriptosustava zasniva na uzastopnom ifriranju nekog velikog broja. Trenutno je podrano pet vrsta kriptografski sigurnih generatora pseudosluajnih brojeva. Za svaku vrstu postoji zaseban razred (koji naslijeuju baznu klasu BaseCSPRNG):
ClassicalCSPRNG koristi neki od klasinih kriptosustava pri generaciji HashCSPRNG koristi neku od funkcija saetka poruke pri generaciji AsymmetricalCSPRNG koristi neki od asimetrinih kriptosustava pri generaciji StreamCSPRNG koristi neki od nizovnih kriptosustava pri generaciji BlockCSPRNG koristi neki od blokovskih kriptosustava pri generaciji

Instanciranjem objekta, pomou statike metode GetByName() sadrane u svakom od nabrojanih razreda, kreira se kriptografski siguran generator pseudosluajnih brojeva zasnovan na kriptosustavu ije je ime proslijeeno kao argument. Kriptografski sigurni generatori pseudosluajnih brojeva se prema vani ponaaju identino kao i generatori pseudosluajnih brojeva. Tako su ovdje takoer ponuene opcije korisnikog ili vremenskog postavljanja sjemena, generiranje brojeva razliitih formata, itd. osim to u ovom sluaju postoji jo i opcija postavljanja lozinke, odnosno javnog kljua kod asimetrinih kriptosustava, tijekom instanciranja ove vrste generatora, osim kod onih zasnovanih na funkciji saetka poruke. 71

ClassicalCSPRN -cipher : BaseClassicalCipher -counter : int -previous : byte[] -buffer : byte[] +NextDouble() +NextByte() +NextUInt32() +SetSeed() #Init() #Tick() +ClassicalCSPRNG() +GetByName() HashCSPRN -hash : BaseHashFunction -buffer : byte[] -counter : int +NextDouble() +NextByte() +NextUInt32() +SetSeed() #Init() #Tick() +HashCSPRNG() +GetByName() AsymmetricalCSPRN -cipher : BaseAsymmetricalCipher -x -retVal : byte +NextDouble() +NextByte() +NextUInt32() +SetSeed() #Init() #Tick() +AsymmetricalCSPRNG() +GetByName()

metaclass BaseCSPRNG #name : string +Names : string[] +Groups : string[] #BaseCSPRNG() -BaseCSPRNG() +Name() +AlgorithmID() +AlgorithmIDToName() +GetByName() +GetNamesFromGroup() +NextDouble() +NextDoubleArray() +NextByte() +NextByteArray() +NextInt() +NextIntArray() +NextUInt32() +NextUInt32Array() +NextUInt64() +NextUInt64Array() +SetSeed() +TimeSeed() #Init() #Tick()

CSPRNG

StreamCSPRNG -cipher : BaseStreamCipher -BUFFER_LENGTH : int -buffer : byte[] -counter : int +NextDouble() +NextByte() +NextUInt32() +SetSeed() #Init() #Tick() +StreamCSPRNG() +GetByName()

BlockCSPRNG -counter : int -cipher : BaseBlockCipher -buffer : byte[] +NextDouble() +NextByte() +NextUInt32() +SetSeed() #Init() #Tick() +BlockCSPRNG() +GetByName()

Slika 4.10 Statiki UML dijagram imenika CSPRNG

Metoda
AlgorithmIDToName() BaseCSPRNG() GetByName() GetNamesFromGroup() Init() NextByte() NextByteArray() NextDouble() NextDoubleArray() NextInt() NextIntArray() NextUInt32() NextUInt32Array() NextUInt64() NextUInt64Array() SetSeed() Tick() TimeSeed()

Tip
statika dinamika statika statika apstraktna dinamika dinamika dinamika dinamika dinamika dinamika dinamika dinamika dinamika dinamika apstraktna apstraktna dinamika

Namjena
Pretvaranje ID brojevne oznake u ime pripadnog generatora Konstruktor Instanciranje objekta generatora po njegovu imenu Vraa imena implementiranih generatora unutar date grupe Inicijalizacija generatora Vraa generirani bajt Vraa generirani niz bajtova Vraa generirani decimalni broj Vraa generirani niz decimalnih broja Vraa generirani predznani 32-bitni broj Vraa niz generiranih predznanih 32-bitnih brojeva Vraa generirani 32-bitni broj (bez predznaka) Vraa niz generiranih 32-bitnih brojeva (bez predznaka) Vraa generirani 64-bitni broj (bez predznaka) Vraa niz generiranih 64-bitnih brojeva (bez predznaka) Postavljanje sjemena generatora Takt generatora zasnovan na ifriranju kriptosustava Vremensko postavljanje sjemena generatora

Tablica 12 Metode apstraktnog baznog razreda BaseCSPRNG

72

4.2.8.

Statistiki testovi sluajnosti

Statistiki testovi sluajnosti se koriste u sluaju kad je potrebno ustvrditi da li je dati niz brojeva generiran pomou (nekog) generatora sluajnih brojeva. U ovom su programskom projektu implementirana dva paketa statistikih testova sluajnosti: FIPS [41] i NIST [55]. Prvi je namijenjen verifikaciji, dok je drugi namijenjen validaciji generatora (pseudo)sluajnih brojeva. U prvom se sluaju dobivaju rezultati prolaznosti (proao/nije proao), dok se u drugom sluaju dobivaju ocjene (tzv. p-vrijednosti) kvalitete generatora koje su postignute na pojedinim testovima. FIPS paket se sastoji od 4 testa, na kojima se za svaki generator (pseudo)sluajnih brojeva oekuje prolaz. Ukoliko generator zakae na ijednom od njih, tada generator nije siguran za daljnju uporabu. NIST paket se sastoji od 16 testova, na kojima se dobiva pojedinani prolaz ukoliko je dobivena ocjena testa (tzv. p-vrijednost) vea od neke predefinirane vrijednosti (pmin=0.01). Od svakog se iole ozbiljnijeg generatora (pseudo)sluajnih brojeva oekuje prolazak na velikoj veini ovog skupa testova. No, ukoliko generator nakon nekoliko testiranja uporno pada na jednom te istom testu, tada se generator smatra nesigurnim za daljnju uporabu. Svi statistiki testovi se u ovom programskom projektu nalaze u imeniku StatisticalTests. Unutar njega se pojedine grupe testova mogu pronai u zasebnim razredima (ovisno o imenu paketa statistikih testova): FIPS i NIST. Testovi se u veini sluajeva pokreu pozivom pripadne metode te zadavanjem testiranog binarnog (sluajnog) niza kao argumenta. Kod nekih je takoer potrebno zadati par dodatnih parametara (poput duljine test-blokova, kompleksnost testa, itd.) ([41],[55]).

Slika 4.11 Statiki UML dijagram imenika StatisticalTests

73

Metoda
MonobitTest() PokerTest() RunsTest() LongRunTest()

Tip
statika statika statika statika

Namjena
Test jednostrukog bita Pokerski test Test navala Test dugake navale

Tablica 13 Metode razreda FIPS

Metoda
Frequency() BlockFrequency() Runs() LongestRunOfOnes() Rank() DiscreteFourierTransform() NonOverlappingTemplateMatching() OverlappingTemplateMatching() Universal() LempelZivCompression() LinearComplexity() Serial() ApproximateEntropy() CumulativeSums() RandomExcursions() RandomExcursionsVariant()

Tip
statika statika statika statika statika statika statika statika statika statika statika statika statika statika statika statika

Namjena
Frekvencijski test Frekvencijski test unutar bloka Test navale Test najdulje navale jedinica unutar bloka Test ranga binarne matrice Spektralni test Test pretraivanja nepreklapajuih predloaka Test pretraivanja preklapajuih predloaka Maurerov "univerzalni statistiki" test Lempel-Ziv test saimanja Test linearne sloenosti Serijski test Test pribline entropije Test zbirnih suma Test sluajnih izleta Varijanta testa sluajnih izleta

Tablica 14 Metode razreda NIST

74

4.3. Cipher.NET
Cipher.NET aplikacija je namijenjena praktinoj uporabi kriptosustava, raunanju saetaka datoteka, generiranju pseudosluajnih i sluajnih brojeva, analiziranju datoteka, statistikom testiranju na sluajnost, sigurnosnom brisanju te prikazu sadraja datoteka. U radu se veinom oslanja na podrku programskih knjinica projekata CryptoLibrary.NET i Utility; referencirane su kao DLL (engl. krat. za dynamic link library) knjinice.

Vizualno suelje Cipher.NET-a se moe podijeliti na etiri osnovna dijela: 1. Glavni izbornik 2. Pomoni izbornik 3. Prostor namijenjen ispisu rezultata 4. Prostor za izvjeivanje programskog statusa

Slika 4.12 Osnovni dijelovi vizualnog suelja Cipher.NET aplikacije

Glavni i pomoni izbornik su po funkciji identini, osim to je glavni izbornik u tekstualnom obliku, dok je pomoni izbornik u grafikom (vizualno atraktivnijem) obliku. U njima se mogu pronai sve glavne opcije koje ova aplikacija prua: Encrypt file (engl. za ifriraj datoteku) ifriranje datoteka pomou kriptosustava/algoritama implementiranih u CryptoLibrary.NET programskoj knjinici Decrypt file (engl. za deifriraj datoteku) deifriranje datoteka ifriranih pomou opcije za ifriranje datoteka 75

Hash calculator (engl. za kalkulator saetka poruke) raunanje saet(a)ka datoteke pomou pripadnih funkcija implementiranih u CryptoLibrary.NET programskoj knjinici Secure sweep (engl. za sigurnosno brisanje) sigurnosno brisanje datoteka Analyse file (engl. za analiziraj datoteku) analiziranje sadraja datoteke pomou 15-ak razliitih testova Hex view (engl. za heksadecimalni pogled) heksadekadski prikaz sadraja datoteke Benchmark (engl. za mjerenje performansi) mjerenje performansi izvoenja podranih algoritama/metoda (ifriranje, statistiki testovi, ...) Random data (engl. za sluajni podaci) generiranje (pseudo)sluajnih brojeva u svrhu daljnje upotrebe (simulacije, testovi, ...) Statistical tests (engl. za statistiki testovi) statistiko testiranje sluajnosti sadraja datoteke Help topics (engl. za pomone teme) korisnika dokumentacija System info (engl. za sistemske infomacije) informacije o sistemu na kojem se program izvodi About (engl. za o programu) osnovne informacije o programu

U prostoru namijenjenom za ispis rezultata, tijekom izvoenja se mogu pronai sve relevantne informacije i rezultati koritenih opcija aplikacije. Ovaj prostor je napravljen u obliku HTML (engl. krat. za HyperText Markup Language) stranice, tako da se u njemu ponekad nau i elementi poput tablica i slika. Pritiskom desne tipke mia unutar tog prostora, te odabirom opcije "Save as HTML..." padajueg izbornika, svaki dobiveni ispis rezultata (poput npr. saetaka datoteke) se moe spremiti u eljenu HTML datoteku, zajedno s pripadnim slikama. Svrha prostor za izvjeivanje programskog statusa je opisana u samom imenu. Naime, u tom prostoru se mogu nai sve bitnije poruke vezane uz sam rad aplikacije. U naslovu grafikog suelja se moe pronai podatak o trenutnoj verziji programa. Kako se program razvijao tako su mu i dodavane nove mogunosti. Od trenutne se verzije 1.0.2168, pa nadalje, moe oekivati funkcionalnost svih dijelova programa.

4.3.1.

Programska struktura

Pri projektiranju Cipher.NET-a se strogo pazilo da konana programska struktura oblikuje to smisleniju cjelinu. Programi s vizualnim sueljima imaju dosta veliku tendenciju razasipanja programske logike, to u konanici vodi k neitljivom programskom kodu. U ovom sluaju je taj problem rijeen na vrlo jednostavan nain. Naime, u razred ProgramLogic su smjetane sve metode nune za izvoenje svih opcija programa, dok su primitivne metode za obradu dogaaja ostavljene u svojim matinim razredima (formama). Razred ProgramLogic zajedno s formom MainWindowForm ini okosnicu Cipher.NET-a. Forma MainWindowForm se brine za izgled glavnog programskog suelja te za pozivanje pripadnih metoda klase ProgramLogic, ovisno o korisnikoj odabranoj opciji, dok se metode klase ProgramLogic brinu za prikazivanje pomonih prozora/suelja, "izvlaenju" korisnikih postavki iz njih, izvravanje zadataka, te za prikazivanje konanih rezultata.

76

Donji statiki UML dijagram predstavlja programsku strukturu Cipher.NET-a. Kao to se vidi iz priloenog, Cipher.NET u svom radu koristi pomone pakete Utility i CryptoLibrary.NET, dok je veina implementiranih mogunosti programa zasnovano upravo na paketu CryptoLibrary.NET. Svaki od prikazanih razreda (osim ProgramLogic) predstavlja formu prozora, ija je namijenja dobivanje korisnikih postavki za pripadnu programsku opciju (koja se moe iitati iz imena). Tako primjerice, razred RandomPasswordForm predstavlja formu prozora namijenjenu za generiranje sluajne korisnike lozinke, dok razred AnalyseFileForm predstavlja formu prozora namijenjenog za dobivanje korisnikih postavki vezanih uz analiziranje sadraja datoteke.
MainWindowForm +mainWindow : MainWindowForm uses uses

ProgramLogic -dateFormat : string -timeFormat : string RandomPasswordForm -resultsAsymmetricalED : double[][] -resultsClassicalED : double[][] PasswordWindowForm -resultsBlockED : double[][] -resultsStreamED : double[][] StatisticalTestsForm uses -resultsHash : double[] -tests : ArrayList HashCalculatorForm +SetGreenButton() SecureSweepForm +SetRedButton() +HelpTopics() AnalyseFileForm +ShowAbout() +ResetFocus() +ClearScreen() +LoadHTML() +LoadHTMLFromFile() -InjectGeneratedBy() -FileEncryption() +FileDecryption() +SaveReport() +SaveHTML() +FileAnalysis() +FileSweeping() RandomDataForm +Initialization() +DisplaySystemInfo() BenchmarkForm +StatisticalTesting() EncryptFileForm +ScrollReport() uses +SuccessBox() OpenFileForm +UnSuccessBox() +FileHashing() HexViewForm +FileHMACs() -tBench() AboutForm +Benchmarking() -RandomDataGeneration() +HexView()

framework Utility

uses uses

facade Cipher.NET

framework CryptoLibrary .NET

Slika 4.13 Statiki UML dijagram programske strukture Cipher.NET aplikacije

U razredu MainWindowForm se moe pronai statika javna varijabla mainWindow, koja je upravo tipa MainWindowForm. Kod uobiajenog pokretanja programa, instancira se objekt klase MainWindowForm te mu se predaje kontrola nad daljnjim izvoenjem. Kako bi se moglo direktno pristupiti tom objektu (u ovom sluaju iz klase ProgramLogic) konstruira se istovrsna varijabla u koju se sprema referenca na taj objekt. U ovom sluaju rije je o mainWindow varijabli.

77

Kao to je ve napomenuto, u razredu ProgramLogic se nalaze (statike) metode odgovorne za izvoenje (veine) programske logike. Veina njih se poziva iz klase MainWindowForm, na temelju odabranih korisnikih opcija. Popis implementiranih metoda, zajedno s njihovim opisom, moe se pronai u sljedeoj tablici.

Ime metode
Benchmarking() ClearScreen() DisplaySystemInfo() FileAnalysis() FileDecryption() FileEncryption() FileHashing() FileHMACs() FileSweeping() HelpTopics() HexView() Initialization() InjectGeneratedBy() LoadHTML() LoadHTMLFromFile() RandomDataGeneration() ResetFocus() SaveHTML() SaveReport() ScrollReport() SetGreenButton() SetRedButton() ShowAbout() StatisticalTesting() SuccessBox() tBench() UnSuccessBox()

Namjena
Izvoenje odabranih brzinskih testova te ispis rezultata Brisanje sadraja prostora za ispisivanje rezultata Otvaranje prozora s osnovim informacijama o sistemu Analiziranje sadraja datoteke te ispis rezultata Deifriranje datoteke ifriranje datoteke Raunanje saet(a)ka sadraja odabrane datoteke Raunanje HMAC identifikacijske oznake sadraja odabrane datoteke Sigurnosno brisanje odabrane datoteke Prikaz korisnike dokumentacije Heksadekadski prikaz sadraja odabrane datoteke Osnovna programska inicijalizacija Ubacivanje osnovnih podataka o programu u rezultat izvoenja Uitavanje HTML niza u prostor za prikaz rezultata Uitavanje HTML datoteke u prostor za prikaz rezultata Generiranje (pseudo)sluajnih brojeva/podataka Postavljanje fokusa programa na prostor za prikaz rezultata Snimanje sadraja prostora za prikaz rezultata u obliku HTML datoteke Snimanje sadraja prostora programskog statusa u obliku TXT datoteke Pomicanje prikaza teksta prostora programskog statusa na njegov sam kraj Postavljanje zelenog svjetla (na dnu suelja) u znak spremnosti programa Postavljanje crvenog svjetla (na dnu suelja) u znak zauzetosti programa Prikaz prozora s osnovnim podacima o programu Izvoenje odabranih statistikih testova sluajnosti Prikaz prozora s porukom o uspjenom zavretku izvoenja zadae Dretveno izvoenje brzinskih testova (engl. benchmarking) Prikaz prozora s porukom o neuspjenom zavretku izvoenja zadae

Tablica 15 Metode razreda ProgramLogic

78

4.3.2.

ifriranje datoteke

Odabirom opcije Encrypt file zapoinje proces ifriranja datoteke. Proces se sastoji od odabira postavki te samog ina ifriranja. Podrane su etiri vrste kriptosustava: klasini, blokovski, nizovni i asimetrini. ifrirane datoteke (obino) dobivaju nastavak (engl. extension) CIP. Strukturno su graene tako da se na njihovom samom poetku nalazi pripadno zaglavlje (engl. header), u kojem se nalaze sve potrebne informacije (osim naravno kljua) potrebne za njihovo uspjeno deifriranje, dok se u nastavku nalazi ifrirana poruka. Klasini kriptosustavi Oznaavanjem opcije Classical pod tipom kriptosustava (engl. type of cipher), korisnik odabire ifriranje uporabom nekog od klasinih kriptosustava implementiranih u programskoj knjinici CryptoLibrary.NET. Kao osnovna opcija tu se jedino pojavljuje ime klasinog kriptosustava (algoritma) kojim elimo izvriti ifriranje. U naprednim opcijama korisnik moe odabrati da li eli izvornu datoteku saeti (engl. compress) prije ifriranja, da li eli sigurnosno obrisati izvornu datoteku (engl. sweep original) nakon njezina ifriranja, te da li eli da mu program sam ponudi sluajno generiranu lozinku (engl. random password). Pri dnu se upisuje put do izvorne datoteke te put do izlazne ifrirane datoteke. Pritiskom na tipku OK zapoinje ifriranje odabrane datoteke. Treba napomenuti da su klasini kriptosustavi, za dananje standarde, izuzetno nesigurni. Taj se problem djelomino rjeava uporabom opcije saimanja, koja posljedino sakriva veinu sigurnosnih mana ove vrste kriptosustava (npr. ranjivost na frekvencijsku analizu).

Slika 4.14 Primjer postavki za ifriranje s klasinim kriptosustavom

79

Blokovski kriptosustavi Oznaavanjem opcije Symmetrical block pod tipom kriptosustava (engl. type of cipher), korisnik odabire ifriranje uporabom nekog od simetrinih blokovskih kriptosustava implementiranih u programskoj knjinici CryptoLibrary.NET. Pod osnovnim se opcijama moe podesiti ime koritenog blokovskog kriptosustava te eljena veliina kljua. Ovdje valja napomenuti da veliina kljua (engl. key) u ovom sluaju nije isto to i veliina lozinke (engl. password). Naime, premda su u irem smislu klju i lozinka sinonimi, u modernim kriptosustavima se smatraju razliitim pojmovima. U modernim se kriptosustavima lozinka injektivno preslikava u klju pomou neke od kriptografskih funkcija saetka poruke te se rezultat dodatno suzuje i/ili proiruje ovisno o eljenoj veliini kljua. Tako dobiveni klju se koristi u daljnjem procesu ifriranja.

Slika 4.15 Primjer postavki za ifriranje s blokovskim kriptosustavom

U naprednim opcijama korisnik moe odabrati da li eli izvornu datoteku saeti (engl. compress) prije ifriranja, da li eli sigurnosno obrisati izvornu datoteku (engl. sweep original) nakon njezina ifriranja, te da li eli da mu program sam ponudi sluajno generiranu lozinku (engl. random password). Tu se takoer mogu postaviti postavke karakteristine jedino za blokovske kriptosustave: raspored bajtova (engl. byte order) unutar procesiranih blokova podataka, blokovski nain rada (engl. block mode), te nain popunjavanja nepopunjenih blokova (engl. block pad scheme). Pri dnu se upisuje put do izvorne datoteke te put do izlazne ifrirane datoteke. Pritiskom na tipku OK zapoinje ifriranje odabrane datoteke.

80

Nizovni kriptosustavi Oznaavanjem opcije Symmetrical stream pod tipom kriptosustava (engl. type of cipher), korisnik odabire ifriranje uporabom nekog od nizovnih kriptosustava implementiranih u programskoj knjinici CryptoLibrary.NET. Pod osnovnim se opcijama moe podesiti ime koritenog nizovnog kriptosustava te eljena veliina kljua. Ovdje vrijedi ista opaska o veliini kljua kao i kod ifriranja blokovskim kriptosustavima.

Slika 4.16 Primjer postavki za ifriranje s nizovnim kriptosustavom

U naprednim opcijama korisnik moe odabrati da li eli izvornu datoteku saeti (engl. compress) prije ifriranja, da li eli sigurnosno obrisati izvornu datoteku (engl. sweep original) nakon njezina ifriranja, te da li eli da mu program sam ponudi sluajno generiranu lozinku (engl. random password). Pri dnu se upisuje put do izvorne datoteke te put do izlazne ifrirane datoteke. Pritiskom na tipku OK zapoinje ifriranje odabrane datoteke.

81

Asimetrini kriptosustavi Oznaavanjem opcije Asymmetrical pod tipom kriptosustava (engl. type of cipher), korisnik odabire ifriranje uporabom nekog od asimetrinih kriptosustava (kriptosustavi javnog kljua) implementiranih u programskoj knjinici CryptoLibrary.NET. Kao osnovna opcija tu se jedino pojavljuje ime asimetrinog kriptosustava (algoritma) kojim elimo izvriti ifriranje.

Slika 4.17 Primjer postavki za ifriranje s asimetrinim kriptosustavom

U naprednim opcijama korisnik moe odabrati da li eli izvornu datoteku saeti (engl. compress) prije ifriranja, da li eli sigurnosno obrisati izvornu datoteku (engl. sweep original) nakon njezina ifriranja, da li eli da mu program pomogne pri generiranju asimetrinog para kljueva (engl. generate keys), te da li eli koristiti brzu verziju (engl. quick version) ifriranja koritenjem hibridnog kriptosustava. Pod pojmom hibridni kriptosustav krije se kombinacija (odabranog) asimetrinog kriptosustava s blokovskim kriptosustavom, nastala u svrhu ubrzavanja procesa ifriranja. U tom se sluaju asimetrini kriptosustav koristi kako bi se ifrirao sluajno generirani simetrini klju, dok se taj isti klju koristi za ifriranje poruke nekim od blokovskih kriptosustava. U Cipher.NET-u se koriste hibridni kriptosustavi sa sadranim blokovskim kriptosustavom Rijndael-256 i veliinom kljua od 32 bajta (256 bita). Pri dnu se upisuje put do izvorne datoteke te put do izlazne ifrirane datoteke. Pritiskom na tipku OK zapoinje ifriranje odabrane datoteke.

82

Generiranje sluajnih lozinki Odabirom opcije generiranja sluajnih lozinki u klasinim, blokovskim i nizovnim kriptosustavima, otvara se prozor generatora sluajnih lozinki. Unutar njega se moe podesiti veliina eljene lozinke te tip koritenih znakova (znakovi, brojevi ili oboje). Pritiskom na tipku OK generirana lozinka se proslijeuje u daljnju fazu ifriranja.

Slika 4.18 Generator sluajnih lozinki

Generiranje asimetrinih kljueva Odabirom opcije generiranja sluajnog para kljueva (privatni i javni) u asimetrinim kriptosustavima, otvara se prozor generatora asimetrinih kljueva. Unutar njega se moe podesiti veliina javnog kljua, koja zapravo predstavlja kompleknost koritenog asimetrinog kriptosustava, te izlazni put datoteke privatnog i datoteke javnog kljua. Pritiskom na tipku OK zapoinje (ponekad dugotrajan) postupak generiranja asimetrinih kljueva, koji se naknadno proslijeuju u daljnju fazu ifriranja. Generirani javni klju korisnik alje svima koji mu ele slati ifrirane poruke, dok privatni klju uva u tajnosti na svom raunalu (ili disketi) naime, s njim deifrira sve primljene poruke ifrirane njegovim javnim kljuem.

Slika 4.19 Generator asimetrinih kljueva

83

4.3.3.

Deifriranje datoteke

Svaka ifrirana datoteka u sebi sadri sve osnovne informacije potrebne za deifriranje (konkretno u zaglavlju), tako da je korisniku proces deifriranja (opcija Decrypt file) u potpunosti olakan.

Slika 4.20 Prozor za odabir ifrirane datoteke

U sluaju da je datoteka ifrirana nekim od klasinih, blokovskih ili nizovnih kriptosustava, otvara se prozor za unos pripadne lozinke.

Slika 4.21 Prozor za unos lozinke

U sluaju da je datoteka ifrirana nekim od asimetrinih kriptosustava, otvara se prozor za unos puta do datoteke u kojoj se nalazi pripadni asimetrini privatni klju.

Slika 4.22 Prozor za unos puta do asimetrinog privatnog kljua

84

4.3.4.

Raunanje saetaka datoteke

Odabirom opcije Hash calculator otvara se prozor s postavkama za raunanje saetaka (neke) datoteke. Od postavki tu se nalazi izbornik sa svim funkcijama saetka poruke implementiranim u programskoj knjinici CryptoLibrary.NET, put do ulazne datoteke, te opcija za ukljuivanje HMAC (3.5.3) podrke generiranja autentifikacijskih oznaka zajedno s eljenom lozinkom. Pritiskom na tipku OK zapoinje raunanje saetaka odabrane datoteke.

Slika 4.23 Prozor s postavkama za raunanje saetaka datoteke

Slika 4.24 Primjer ispisa saetaka datoteke

85

4.3.5.

Sigurnosno brisanje datoteke

Odabirom opcije Secure sweep otvara se prozor s postavkama za sigurnosno brisanje (neke) datoteke. Nakon obinog brisanja, ak i nakon uklanjanja iz Recycle Bin spremita, moe se povratiti sadraj svake obrisane datoteke. Ukoliko obrisana datoteka nije prepisana (sluajno) sa sadrajem druge datoteke, tada je povrat te datoteke trivijalan (npr. programi: bitMart Restorer2000, Quetek File Scavenger,...). U suprotnom, vraanje obrisanog sadraja je vrlo sloeno, no ne i nemogue. Naime, postoje sklopovske tehnike kojima se omoguuje vraanje ak i nekoliko puta prepisanih datoteka. Koritenjem sigurnosnog brisanja onemoguuje se koritenje takvih tehnika. Sigurnosno brisanje je metoda u kojoj se datoteka, prije samog ina brisanja, nekoliko puta prepie s bezvrijednim podacima, veliina joj se skrati (engl. truncate) na 0 bajtova, te se preimenuje u neko besmisleno ime.

Slika 4.25 Prozor s postavkama za sigurnosno brisanje datoteke

U prozoru s postavkama sigurnosnog brisanja moe se namjestiti tip podataka kojima e se datoteka prepisati sve nule (engl. zeroes) ili sluajni podaci (engl. random), eljeni broj prepisivanja te put do datoteke. Pritiskom na tipku OK zapoinje sigurnosno brisanje datoteke.

4.3.6.

Analiziranje sadraja datoteke

Odabirom opcije Analyse file otvara se prozor s postavkama za analiziranje sadraja datoteke. Analiziranje je osmiljeno sa svrhom jednostavnog uvida u strukturu datoteke. Tako korisnik primjerice moe analizirati datoteku prije i poslije ifriranja kako bi se uvjerio u sakrivanje originalnog sadraja. Ukoliko je izvorna datoteka bila npr. izvrna tada e se jasno moi uoiti pravilna struktura programa, dok e valjanim ifriranjem nestati svaka prethodna strukturiranost. Datoteke se takoer mogu analizirati sa svrhom pronalaenja sakrivenih podataka unutar njih. Naime, postoji cijela mala znanost, konkretno steganografija, koja se bavi sakrivanjem podataka (ne ifriranjem kao to je to sluaj u kriptografiji). Ovisno o kvaliteti sakrivanja podataka, analiziranjem sadraja datoteke "nosioca" moi e se uoiti pojedine nepravilnosti u strukturi. Te sitne nepravilnosti e se u rezultatima pojedinih analitikih metoda moi jasno uoiti, dok e u ostalim rezultatima ostati nezapaene. Stoga je u Cipher.NET-u implementiran dosta velik broj analitikih metoda, kako bi sadraj datoteke mogao biti to zornije predoen korisniku. Velika je veina implementiranih analitikih metoda jedinstvena, odnosno originalna, te samim tim unose dodatnu dimenziju primjenjivosti ove aplikacije. 86

U prozoru s postavkama za analiziranje sadraja datoteke mogu se odabrati eljene analitike metode te put do datoteke koju korisnik eli analizirati.

Slika 4.26 Prozor s postavkama za analiziranje sadraja datoteke

Trenutno je implementirano 12 analitikih metoda/testova: Bit frequency (engl. za frekvencija bita) broj pojavljivanja bitova 0 i 1 unutar sadraja cijele datoteke; svakodnevno koritene datoteke (tekstualne, izvrne,...) imaju tendenciju da im je omjer broja bitova 0 naspram broja bitova 1 oko 2:1 (Slika 4.31) Bit-set position frequency (engl. za frekvencija postavljenih bitova) broj pojavljivanja bita 1 na jednoj od 8 moguih pozicija unutar bajta za sadraj cijele datoteke; tekstualne datoteke imaju tendenciju da im je MSB (engl. krat. za Most Significant Bit najvaniji bit) najee postavljen na 0 (Slika 4.32) Byte frequency (engl. za frekvencija bajtova) broj pojavljivanja pojedinih (vrijednosti) bajtova unutar datoteke; ovo je nita drugo doli tzv. "frekvencijska analiza", tehnika koritena kod probijanja veine klasinih kriptosustava (Slika 4.33) Most frequent bytes (engl. za najei bajtovi) dvadeset najeih vrijednosti bajtova (dobiveni na temelju rezultata prethodnog testa) Graphical display of contents (8bpp) (engl. za grafiki prikaz sadraja) svaki bajt datoteke se grafiki prikazuje kao jedan piksel s nijansom sive boje (Slika 4.27) Graphical display of contents (24bpp) (engl. za grafiki prikaz sadraja) svaka slijedna tri bajta u datoteci se grafiki prikazuju kao jedan piksel s razliitim nijansama crvene, zelene i plave boje Graphical display of randomness (engl. za grafiki prikaz sluajnosti) svaka slijedni par bajtova u datoteci se grafiki prikazuju kao dvodimenzionalne koordinate (bijelog) piksela (Slika 4.28) Turtle walk (engl. za hod kornjae) grafiki se prikazuje pomicanje zamiljene toke s prethodne na sljedeu poziciju, u osam moguih smjerova, na temelju svaka slijedna tri bita (Slika 4.29) 87

Entropy (engl. za entropija) graf Shannonove entropije datoteke; s obzirom na sloenost pojedinih dijelova datoteke, entropija raste, odnosno pada (Slika 4.35) Compression (engl. za saimanje) graf saimanja datoteke; s obzirom na sloenost pojedinih dijelova datoteke, mogunost saimanja raste, odnosno pada. Valja napomenuti da su graf entropije i graf saimanja priblino komplementarni, odnosno to se datoteka moe manje saeti u nekom svom dijelu, to je vea lokalna entropija (Slika 4.34) Random walk (engl. za sluajna etnja) graf dobiven metodom sluajne etnje; svaki bit vrijednosti 1 rezultira jedininim inkrementiranjem sume sluajne etnje, dok svaki bit vrijednosti 0 rezultira jedininim dekrementiranjem te iste sume. U sluaju ifriranih datoteka primjeuje e se da suma sluajne etnje previe ne odskae od nule, te se jo uz to mogu primjetiti otri zupci na pripadnom grafu. U sluaju normalnih datoteka suma sluajne etnje skoro pa linearno raste (ili opada) (Slika 4.36) Text strings (engl. za tekstualni nizovi) ispis svih tekstualnih (ASCII i Unicode) nizova koji se mogu pronai unutar datoteke; ovdje je ispis ogranien na nizove dulje od 4 znaka zbog izbjegavanja ispisa tzv. "sluajnih stringova" (Slika 4.30)

Slika 4.27

Slika 4.28

Slika 4.29

Slika 4.30

88

Slika 4.31

Slika 4.32

Slika 4.33

Slika 4.34

Slika 4.35

Slika 4.36

89

4.3.7.

Pregledavanje sadraja datoteke

Odabirom opcije Hex view otvara se prozor s postavkama za pregledavanje sadraja datoteke. Ovo je jedna od osnovnih stvari koje svaki ozbiljniji kriptografski alat mora sadravati. Naime, nemogue je slijepo vjerovati u sigurnost ifrirane datoteke, te je jedna od osnovnih (laikih) metoda za uvjeravanje korisnika u tu injenicu predoenje sadraja ifrirane datoteke. Ukoliko je datoteka uistinu ifrirana tada mora u svakom svom dijelu naoko izgledati nerazumljivo. Ova opcija je takoer korisna u kombinaciji s analiziranjem sadraja datoteke. U sluaju da se prilikom analize pronau "sumnjivi" dijelovi datoteke, tada se ti dijelovi mogu iz prve ruke pregledati odabirom ove opcije.

Slika 4.37 Prozor s postavkama za pregledavanje sadraja datoteke

U postavkama se mogu odrediti put do eljene datoteke te poetna i krajnja adresa pregleda. Rezultat se sastoji od osnovnih informacija o datoteci te prikaza sadraja datoteke.

Slika 4.38 Primjer prikaza sadraja datoteke

90

4.3.8.

Testiranje brzine

U ovom su programi podrani brojni algoritmi (razliite vrste kriptosustava, funkcije saetka poruke, statistiki testovi sluajnosti, generatori (pseudo)sluajnih brojeva, ...). Odabirom opcije Benchmark testira se brzina izvoenja veine koritenih algoritama. Primjerice, ukoliko se korisnik tek upoznaje s razliitim vrstama kriptosustava, preporua se izvoenje brzinskih testova kako bi dobio uvid u njihovu brzinu obrade podataka. Generatori pseudosluajnih i sluajnih brojeva su ovdje namjerno stavljeni u drugi plan. Naime, njihova mnogobrojnost oteava praktinu provedbu testiranja njihove brzine izvoenja (duljina trajanja testova, prevelika koliina dobivenih rezultata, ...), pa su u ovom sluaju namjerno izostavljeni; takoer, nisu od neke bitnije kriptografske vanosti.

Slika 4.39 Prozor s postavkama za testiranje brzine algoritama

Rezultati testiranja se dobivaju u tablinom i grafikom obliku. Kod kriptosustava se testira brzina ifriranja i deifriranja, dok se kod funkcija saetaka poruke i statistikim testovima testira brzina obrade podataka.

Slika 4.40 Primjer brzinskog grafa dobivenog za nizovne kriptosustave

91

4.3.9.

Generiranje sluajnih i pseudosluajnih brojeva

Odabirom opcije Random data otvara se prozor s postavkama za generiranje sluajnih i pseudosluajnih brojeva. Mogu je odabir jedne od tri vrste generatora: pseudosluajni generator (opcija Pseudo-random number generator), raunalni izvor sluajnosti (opcija Random data source), te kriptografski sigurni generatori pseudosluajnih brojeva (opcija Cryptographic algorithm). Podrani su svi generatori implementirani u CryptoLibrary.NET programskoj knjinici. Sukladno odabiru jedne od te tri vrste generatora, mijenja se i izgled prozora postavki za generiranje (pseudo)sluajnih generatora (Slika 4.41).

Slika 4.41 Mogui izgled(i) prozora postavki za generiranje (pseudo)sluajnih vrijednosti

Kod sve tri vrste generatora mogue je postaviti put do izlazne datoteke, eljena veliina izlaznog binarnog niza (u bajtovima) te opcija izvravanja statistikih testova sluajnosti nakon postupka generiranja, dok su im ostale opcije (vie-manje) svojstvene. Kod generatora pseudosluajnih brojeva moe se odabrati grupa algoritama, ime algoritma, te je mogue posebno postaviti vrijednost sjemena generatora (engl. generator seed) ili se odabire mogunost vremenskog odabira sjemena (engl. time seed). Kod generatora sluajnih vrijednosti, odnosno generatorima zasnovanim na raunalnim izvorima sluajnosti, odabire se eljeni izvor sluajnosti. Kod generatora kriptografski sigurnih pseudosluajnih brojeva odabire se vrsta kriptosustava, ime kriptosustava, koritena lozinka ili javni klju ovisno o vrsti kriptosustava (uz to postoji i opcija generiranja sluajne lozinke/javnog kljua) te vrijednost sjemena (vrijede iste opaske kao i kod generatora pseudosluajnih brojeva). Bitno je napomenuti sljedee: generatori kriptografski sigurnih pseudosluajnih brojeva zasnovani na klasinim kriptosustavima pate od male boljke. Naime, kod konstrukcije kriptografski sigurnih generatora pseudosluajnih brojeva vodilo se rauna o to manjoj potpori izvoenju, odnosno, kriptosustavi su preputeni sami sebi kod generacije pseudosluajnih brojeva. Ukoliko bi se dizajn takvog generatora znaajnije mijenjao od jednostavnog ifriranja prethodno generirane pseudosluajne vrijednosti, tada bi se poboljala statistika svojstva takvog generatora, no sigurnosne mane koritenog kriptosustava bi se samo maskirale (sakrile); to se u ovom sluaju eljelo izbjei. Jo jedan, moda i bitniji razlog ovom pristupu generaciji kriptografski sigurnih pseudosluajnih brojeva, jest taj da se ti generatori koriste upravo u istraivakom dijelu ovog uratka. Naime, ukoliko bi se poboljala spomenuta statistika svojstva, tada ocjenjivanje kvalitete kriptosustava, temeljeno na statistikom testiranju sluajnosti tako modificiranih generatora, ne bi imalo previe smisla.

92

4.3.10. Statistiko testiranje sluajnosti


U Cipher.NET-u su podrane dvije grupe statistikih testova sluajnosti: FIPS (5.1.1) i NIST (5.1.2). Odabirom opcije Statistical tests otvara se prozor s postavkama za izvoenje tih testova. U njemu se mogu odabrati eljeni FIPS testovi, NIST testovi, te put do datoteke iji se sadraj eli testirati.

Slika 4.42 Prozor s postavkama za statistiko testiranje sluajnosti

Rezultati FIPS i NIST testova se prezentiraju u tablinom obliku, dok se rezultati NIST testova (p-vrijednosti) jo dodatno prezentiraju u grafikom obliku.

Slika 4.43 Primjer grafa rezultata NIST testova

93

4.3.11. Ostalo
Odabirom opcije About otvara se prozor s osnovnim informacijama o aplikaciji Cipher.NET. Tu se moe pronai korisniko ime i platforma (OS) na kojoj se program izvodi, verzija CLR virtualnog stroja (engl. virtual machine), verzija samog programa, te adresa elektronike pote autora. Od ostalih programskih opcija tu su jo Help topics i System info. Odabirom opcije Help topics u radnom se prostoru programa prikazuje (HTML) korisnika dokumentacija. Odabirom opcije System info pokree se sistemski program "msinfo32.exe" u kojem se mogu pronai sve eljene informacije o koritenom raunalu. Ova opcija nije od neke bitnije vanosti, no poto se moe pronai u veini modernih aplikacija, autor ju je odluio uvrstiti i u ovu.

94

5. VREDNOVANJE KRIPTOGRAFSKIH ALGORITAMA


U ovom e se dijelu iznijeti opis, rezultati i komentar provedenog testiranja nad kriptografskim algoritmima implementiranim u programskoj knjinici CryptoLibrary.NET. Ideja ovog testiranja je bila pretvorba kriptografskih algoritama za ifriranje i algoritama funkcija saetka poruke u oblik prikladan za statistiko testiranje, te provedba statistikih testova sluajnosti implementiranih u programskoj knjinici CryptoLibrary.NET. Konkretno, navedeni algoritmi su koriteni pri izgradnji (uvjetno) kriptografski sigurnih generatora pseudosluajnih brojeva, izlazni su nizovi takvih generatora bili podvrgnuti statistikim testovima sluajnosti, izneseni su rezultati prolaznosti testova, te je na kraju dat komentar. Motiv za ovu vrstu testiranja je izjava poznatog statistiara i kriptografa Jason Gaita [71], koja se danas uzima za aksiom: "Dobar kriptosustav mora imati karakteristike dobrog generatora pseudosluajnih brojeva" Do danas nitko nije obavio ovakvu vrstu testiranja nad veom skupinom kriptografskih algoritama. Jedini slian pokuaj se moe pronai u radu: "A Generalised Testbed for Analysing Block and Stream Ciphers" [7], no u njemu se (vrlo turo) obrauju samo tri kriptosustava (DES, FEAL, LOKI), te su izneseni rezultati teoretskog istraivanja (prouavanje unutarnje strukture kriptosustava), dok su u ovom radu izneseni rezultati empirijskog istraivanja (testiranje generiranih binarnih nizova). Testirani kriptosustavi, odnosno pridjeljeni algoritmi za ifriranje, podijeljeni su u etiri skupine: blokovski, nizovni, klasini i asimetrini. U svrhe testiranja, posebno su napravljeni (uvjetno) kriptografski sigurni generatori pseudosluajnih brojeva, koji se zasnivaju na uzastopnom ifriranju jednog te istog podatka. U sluaju blokovskih kriptosustava tu je rije o uzastopnom ifriranju jednog bloka; kod klasinih kriptosustava se uzastopno ifrira niz predefinirane veliine; kod nizovnih kriptosustava se vri generiranje kljua niza (engl. keystream) to je svojevrsni ekvivalent ifriranju niza; kod asimetrinih se kriptosustava vri uzastopno ifriranje jednog velikog broja. Kod svih se kriptosustava kao rezultat generiranja pseudosluajnog niza uzeo dio ifriranog elementa, bio on to blok, niz ili veliki broj. Pri inicijalizaciji pojedinanih kriptosustava vodilo se rauna o veliini koritenog kljua. Naime, ukoliko bi se nekom kriptosustavu namjerno pridjelio vei klju, a drugom manji, tada bi se prvi kriptosustav naao u "povlatenijem" poloaju. U tom sluaju se dobiveni rezultati ne bi mogli objektivno sagledati te se ne bi dolo do valjanog zakljuka. Takoer, svaki kriptosustav ima svoje predefinirane intervale valjane veliine koritenog kljua za ifriranje. Tako se moe dogoditi da je neka veliina kljua za neki kriptosustav najvea, dok je za drugi najmanja mogua. Uz sve to slijedi jo jedan problem problem preporuene, odnosno uobiajene (engl. default), veliine koritenog kljua. Ukoliko je preporuena veliina kljua za neki kriptosustav data prije (npr.) 30-ak godina, tada je svima jasno da je takva preporuka ve odavno zastarjela. Zbog svih navedenih problema, doneseno je solomonsko rjeenje. Nizovni i blokovski kriptosustav e u ovom testiranju koristiti vlastite maksimalne veliine kljua, klasini kriptosustavi e koristiti 64-bitni klju (ukoliko uope zahtijevaju klju za svoj rad), dok e se kod asimetrinih kriptosistema koristiti 132-bitni klju (po sigurnosti ekvivalent upola manjem kljuu simetrinog kriptosustava). Navedena veliina kljua klasinih kriptosustava uzeta je kao priblina veliina lozinke (engl. password) koja se u klasinim kriptosustavima mogla koristiti. to se tie izabrate veliine kljua asimetrinih kriptosustava, vie je razloga za taj izbor. U sluaju da se uzela vea veliina kljua, tada bi se 95

usporilo izvoenje ionako (pre)sporog generiranja (pseudo)sluajnih brojeva asimetrinim kriptosustavima; u sluaju da se uzela manja veliina kljua, implementacija asimetrinog kriptosustava Rabin ne bi uope funkcionirala zbog zahtjeva za minimalnom veliinom kljua od 128-bita. Spomenuti kriptografski algoritmi za ifriranje nisu nita drugo doli dijelovi implementiranih kriptosustava. Njihovi inverzni pandani algoritmi za deifriranje nisu zanimljivi s kriptoanalitikog stajalita, stoga to oni samo po sebi ne pridonose kriptografskoj zatiti, ve ju naprotiv uklanjaju (naravno, uz pomo kljua :); a i kad bi se ili analizirati, ne bi se dobili nikakvi dodatni zakljuci uz one dobivene za algoritme za ifriranje. Zbog navedenih razloga se algoritmi za deifriranje izostavljaju iz testiranja (ovog rada). Algoritmi funkcija saetka poruke (ili skraeno samo funkcije saetka poruke) sastavni su dio ovog testiranja zbog svog velikog kriptografskog znaaja. Da nema ove vrste algoritama, cijela kriptografija ne bi imala previe smisla. Koja je svrha ifriranja ukoliko korisnik nije siguran da je ono to je zatieno uistinu ono to je on i ifrirao. Identian primjer je i kod digitalnog potpisa, iji je sastavni dio upravo saetak poruke ifriran nekim asimetrinim kriptosustavom. U ovo su testiranje namjerno ukljueni i CRC algoritmi (3.5.5), kako bi se ukazalo na njihovu neprimjerenost uporabe u kriptografske svrhe. Generatori sluajnih i pseudosluajnih brojeva nisu uvrteni u ovo testiranje zbog nekoliko razloga. Naime, primitivni generatori pseudosluajnih brojeva, implementirani u imeniku PRNG programske knjinice CryptoLibrary.NET, sami po sebi nisu od prevelike kriptografske vanosti, stoga to se ve zna da je njihov rad mogue lako kriptoanalizirati, odnosno, na temelju prethodno generiranog niza odreene duljine mogue je zakljuiti vrijednost sljedeeg generiranog broja. Jo jedan od razloga zato ta vrsta generatora nije uvrtena u ovo testiranje jest njihova kvantiteta. Naime, s obzirom da se kod pojedinih vrsta generatora pseudosluajnih brojeva (npr. LCG) mijenjanjem parametara dobiva vie desetaka varijanata, konani se broj implementiranih generatora unutar imenika PRNG programske knjinice CryptoLibrary.NET kree oko nekoliko stotina. Ukoliko bi se rezultati statistikog testiranja tolikog broja generatora iznijeli u ovom radu, rad bi nepotrebno dobio jo dodatni (povei) broj stranica. to se tie generatora sluajnih brojeva, implementiranih u imeniku RNG programske knjinice CryptoLibrary.NET, preskoeni su u ovom testiranju iz jednog vrlo jednostavnog razloga nepoznati su (odnosno jedinstveni) i oni i njihove tehnike rada. Naime, trenutno se u javnosti (na Internetu) teko moe pronai ijedan programski generator (pravih) sluajnih brojeva. Iz toga je onda i lako zakljuiti da njihovo testiranje nema previe smisla ukoliko njih uope nema. to se tie vlastitih generatora, zbog svoje jedinstvenosti nemaju neki vei kriptografski znaaj. Ukoliko bi se koristila ijedna ustoliena metoda, neto poput nekog opeprihvaenog algoritma za pretvaranje sistemskog "uma" (entropije) u generirani niz sluajnih brojeva, tada bi njihovo testiranje moda i imalo smisla. Ovako, njih ostavljam za temu moda nekog drugog rada. U dosadanjem se tekstu mogao pronai izraz: "(uvjetno) kriptografski siguran generator pseudosluajnih brojeva", za koji slijedi dodatno pojanjenje. Kriptografski siguran generator pseudosluajnih brojeva je po definiciji generator pseudosluajnih brojeva zasnovan na nekom kriptosustavu; posebno je koristan u kriptografiji stoga to je za predvianje sljedeeg generiranog bajta potrebno poznavati koriteni klju kriptosustava. U ovom e se radu uistinu i testirati ova vrsta generatora, no neki od njih e biti sve, samo ne sigurni primjer su svi klasini kriptosustavi i veina CRC funkcija saetka poruke. Stoga je ovo testiranje nita drugo doli testiranje uvjetno kriptografski sigurnih generatora pseudosluajnih brojeva.

96

U svrhu testiranja napravljen je poseban program TestCSPRNGs (priloen na CD-u), napisan u programskom jeziku C#, sa svrhom automatizacije statistikog testiranja (uvjetno) kriptografski sigurnih generatora pseudosluajnih brojeva (engl. krat. CSPRNG), temeljenih na kriptografskim algoritmima implementiranim u programskoj knjinici CryptoLibrary.NET. Iz referencirane CryptoLibrary.NET DLL datoteke, koriste se imenici CSPRNG i StatisticalTests. U imeniku CSPRNG se nalazi sve potrebno za instanciranje testiranih generatora, dok se u imeniku StatisticalTests nalaze FIPS i NIST paketi statistikih testova. Program prolazi kroz sve vrste generatora te instancira pojedine generatore po njihovu imenu. Svaki se generator testira 100 puta na nain da se svaki put (pomou njega) generira pseudosluajni niz veliine 1Mb (1048576 bitova), te se svaki takav niz podvrgava statistikim testovima sluajnosti. Prolaznost svakog testa se zapisuje u obliku koeficijenta prolaznosti (omjer broja prolaza s brojem testiranja generatora) u tekstualnu datoteku "result.txt", zajedno s imenom pripadnog generatora, tipom, ukupnom sumom koeficijenata prolaznosti, te ukupnim vremenom trajanja testiranja. U konzolnom se prozoru tijekom izvoenja programa moe pronai trenutni status testiranja. Bitno je napomenuti da zbog vremenske sloenosti izvoenja ovaj program podrava prekidanje, te kasniji nastavak rada bez gubitka prethodnih rezultata testiranja. Samo u svrhu predodbe vremenske sloenosti izvoenja, ovaj program je ukupno trebalo izvoditi oko 5 dana (AMD Athlon 1250MHz), kako bi se dobili krajnji rezultati. Vie od polovice vremena je potroeno na testiranje (samo 5) asimetrinih kriptosustava.

5.1. Statistiki testovi za testiranje sluajnosti


Statistiki se testovi na sluajnost koriste kod utvrivanja da li je odreeni niz brojeva generiran pomou generatora (pseudo)sluajnih brojeva. To se izvodi tako to se raunaju statistike vrijednosti za dani niz brojeva koje se usporeuju s srednjim vrijednostima koje bi se dobile u sluaju (pravog) sluajnog niza. Te srednje vrijednosti se dobivaju raunanjem na modelu idealnog generatora sluajnih brojeva. Testiranje sluajnosti je empirijski zadatak. Postoje brojne vrste testova, pri emu je svaki od njih specijaliziran za otkrivanje nekog tipa nesavrenosti u testiranom nizu. Jedan od primjera je frekvencijski test (engl. frequency test). U sluaju binarnih nizova, promatra se relativna frekvencija bitova postavljenih na vrijednost 1 u odnosu na one s vrijednou 0. Autokorelacijski test (engl. autocorrelation test), kod kojeg se promatraju korelacije izmeu susjednih bitova, jo je jedan primjer testa. Vrstan teoretiar na ovom podruju Ueli Maurer je u svom radu demonstrirao da su svi testovi ove vrste zapravo bazirani na prouavanju mogunosti komprimiranja niza podataka. Ukoliko je dani niz mogue komprimirati na bilo koji nain, tada on nije sluajan (Ueli Maurer: "A Universal Statistical Test for Random Bit Generators"). Na zadanom se nizu brojeva mogu primjeniti razni statistiki testovi kako bi se usporedio zadani niz s pravim sluajnim nizom. Sluajnost je vjerojatnosno svojstvo, odnosno, svojstva sluajnog niza se mogu okarakterizirati i opisati pomou teorije vjerojatnosti. Najvjerojatniji rezultat statistikog testa, kada se primjeni na pravom sluajnom nizu, zna se a priori te se moe opisati pomou vjerojatnostnih veliina. Postoji neogranien broj moguih statistikih testova, gdje se u svakom trai prisutnost ili odsutnost odreenog uzorka koji, ukoliko se detektira, ukazuje na to da promatrani niz nije sluajan. Stoga to postoji tako velik broj statistikih testova na sluajnost, ne postoji neki ogranieni skup testova koji bi se mogao smatrati kompletnim. Dodatno, rezultati statistikih testiranja se moraju interpretirati s oprezom kako bi se izbjegli netoni zakljuci o testiranom generatoru sluajnih brojeva. 97

Statistikim testom se provjerava odreena nul-hipoteza (engl. null hypothesis) H0, odnosno jednostavnim jezikom, istinitost odreene tvrdnje. U svrhu testiranja sluajnosti, nul-hipoteza je u naem sluaju ta da je testirani niz sluajan. Usko povezana s nul-hipotezom je alternativna hipoteza (engl. alternative hypothesis) Ha, koja je u sluaju testiranja sluajnosti ta da testirani niz nije sluajan. Za svaki se primjenjeni test donosi odluka (ili zakljuak) o tome da li je nul-hipoteza prihvaena ili odbaena, odnosno, da li testirani generator sluajnih brojeva stvarno proizvodi sluajne vrijednosti. Za svaki se test relevatni statistiki podaci moraju paljivo odabrati i koristiti kako bi se ispravno odluilo o prihvaanju ili odbacivanju nul-hipoteze. Teoretski referentna statistika distribucija oekivanih vrijednosti testiranja se dobiva pomou matematikih metoda. S obzirom na referentnu distribuciju vrijednosti, odreuje se kritina vrijednost (engl. critical value); tipino je to vrijednost na 99% vrijednosti/duljine krajnje toke distribucije. Tijekom testiranja niza dobiva se neka statistika vrijednost. Ta vrijednost se usporeuje s kritinom vrijednosti te ukoliko premai istu, tada se odbacuje nul-hipoteza o sluajnosti niza; u suprotnom se nul-hipoteza prihvaa. U praksi, glavni razlog zbog kojeg statistiko testiranje hipoteze funkcionira jest taj da se referentna distribucija i kritina vrijednost odreuju mnogostrukim iskuavanjem pretpostavke sluajnosti nad poznatim sluajnim i manje sluajnim nizovima. Ukoliko je pretpostavka o sluajnosti niza istinita, tada je vjerojatnost da e izraunata statistika vrijednost premaiti kritinu vrijednost vrlo mala (oko 0.01%). Svaki generator sluajnih brojeva ponekad manifestira pravilnosti u izlaznom nizu, koje najee rezultiraju (malim) problemom. Stoga se i od vrlo pouzdanog generatora moe oekivati povremeni poremeaj pri generiranju sluajnosti. Iako u praksi ne postoji garantirano nepogreiv generator sluajnih brojeva, postoje sigurnosne matematike metode/mjere za otkrivanje onih (garantirano) loih. Tu spadaju teoretski i empirijski (statistiki) testovi. Veina se specijaliziranih algoritama za generiranje (pseudo)sluajnih brojeva moe teoretski analizirati, to nije sluaj s kriptografskim generatorima. Naime, zbog sloenosti algoritama kriptografskih generatora sluajnih brojeva teoretska analiza postaje prekompliciranom, ako ne i nemogua. U tom sluaju je mogua uporaba samo empirijskih testova nad generiranim nizovima to je u krajnju ruku i tema ovog rada. Meu najvanije teoretske testove spadaju test neslaganja (engl. discrepancy) i spektralni test (engl. spectral test), te neto mlai teinski spektralni test (engl. weighted spectral test). Treba jasno naglasiti da nijedan od ovih testova ne garantira djelotvornost promatranog generatora sluajnih brojeva, no dobivena pretpostavka o sluajnosti je izvrsna. Teoretski dokaz o kvaliteti generatora sluajnih brojeva nije dovoljan poto se njime dobiva samo predvianje o tome to e se dogoditi pri koritenju generatora. Empirijski dokaz je prijeko potreban. Svaki empirijski (statistiki) test je zapravo mala simulacija. Ukoliko se paljivo formulira tada e svaki pojedini test obuhvatiti nekoliko moguih problema koji se mogu pojaviti prilikom generiranja sluajnih brojeva. Za razliku od teoretskih testova, empirijski testovi tretiraju generatore (pseudo)sluajnih brojeva kao "crne kutije" to znai da ne analiziraju direktno koriteni algoritam i/ili izvor sluajnosti. Od najpoznatijih skupova/paketa empirijskih testova tu su FIPS, DIEHARD, NIST i ENT. Dobivanje pozitivne ocjene na FIPS testovima se smatra osnovnim uvjetom za svaki generator sluajnih brojeva. Ostalim testovima se dobiva bolji uvid u kvalitetu koritenog generatora. Za potrebe empirijskog testiranja kriptografskih generatora (pseudo)sluajnih brojeva u ovom uratku su koriteni FIPS i NIST testovi. 98

5.1.1.

FIPS

Detaljan se opis FIPS skupina statistikih testova sluajnosti nalazi u dokumentu: "FIPS PUB 140-2" [41]. Tema tog dokumenta su sigurnosne mjere kriptografskih modula. Navodi se da ukoliko je potrebno statistiko testiranje generatora sluajnih brojeva, ovisno o sigurnosnoj razini, tada bi kriptografski modul u kojem je implementiran generator trebao izvesti dane statistike testove. Kao uzorak se, u svrhu testiranja, generira niz duljine 20,000 bitova. Ukoliko generator padne na bilo kojem od danih testova, tada prestaje njegova daljnja uporaba; ovi testovi bi se trebali izvoditi pri svakom dizanju sistema (uslijed npr. paljenja ili resetiranja). Valja napomenuti da je prolazak generatora na ovom skupu testova samo nuan uvjet za njegov daljnji rad (verifikacija), te se njima ne dobivaju ikakvi kvalitativni rezultati. Test jednostrukog bita (engl. Monobit test) U ovom se testu prebrojava broj jedinica (bit vrijednosti 1) koji se nalazi u uzorku duljine 20,000 bitova. Ukoliko tu brojku oznaimo s X, tada promatrani generator prolazi ovaj test ukoliko vrijedi: 9,725 < X < 10,275 Pokerski test (engl. Poker test) Uzorak duljine 20,000 bitova se dijeli na 5,000 uzastopnih 4-bitnih segmenata. Nakon toga se vri prebrojavanje pojavljivanja svake od moguih 16 kombinacija 4-bitnih vrijednosti. Ukoliko s f(i) oznaimo broj pojavljivanja 4-bitne vrijednosti i ( 0 i 15 ), tada promatrani generator prolazi ovaj test ukoliko vrijedi:
2.16 < 16 * 5000

15 i =0

[ f (i)]2 ) 5000 < 46.17

Test navala (engl. Runs test) Navala (engl. run) se definira kao najvei niz uzastopnih identinih bitova (sve 0 ili sve 1). U ovom se testu prebrojavaju sve navale u uzorku duljine 20,000 bitova. Generator sluajnih brojeva prolazi ovaj test ukoliko sve navale od duljine 1 do duljine 6 upadaju u intervale dane u donjoj tablici. Ovo mora vrijediti posebno za navale nula i posebno za navale jedinica. U svrhu testa, sve navale duljine vee od 6 se broje kao da su duljine 6. Duljina navale 1 2 3 4 5 6+ Valjani interval 2,343-2,657 1,135-1,365 542-708 251-373 111-201 111-201

Tablica 16 Valjani intervali duljina navale

Test dugake navale (engl. Long runs test) Dugaka navala se definira kao navala duljine 26 ili vie (nula ili jedinica). Na uzorku od 20,000 bitova, generator prolazi ovaj test ukoliko se ne pronae nijedna dugaka navala. 99

5.1.2.

NIST

Detaljan se opis NIST skupine statistikih testova sluajnosti nalazi u dokumentu: "NIST Special Publication 800-22" [55]. NIST statistiki paket se sastoji od 16 testova koji su razvijeni kako bi se testirala sluajnost binarnih nizova dobivenih pomou programskih ili sklopovskih generatora sluajnih brojeva, ili pomou generatora pseudosluajnih brojeva. Ovi su testovi bazirani na traenju razliitih tipova nesluajnosti koje se mogu pojaviti unutar binarnog niza. Veina testova je parametrizirana te se jo i dodatno mogu podijeliti na dosta manjih podtestova. Frekvencijski test (engl. The Frequency (Monobit) Test) U ovom se testu promatra proporcija broja nula i jedinica u danom binarnom nizu. Svrha ovog testa je utvrivanje da li je taj odnos priblino jednak onom oekivanom kod (pravog) sluajnog niza. Broj jedinica i nula u sluajnom binarnom nizu bi trebao biti podjednak, odnosno njihov odnos bi trebao biti oko 1:1. Frekvencijski test unutar bloka (engl. Frequency Test within a Block) U ovom se testu promatra proporcija jedinica unutar M-bitnih blokova. Svrha ovog testa je utvrivanje da li je frekvencija jedinica u M-bitnom bloku priblino jednak M/2, kako se i oekuje od sluajnog niza. Za duljinu bloka M=1, ovaj test degenerira u frekvencijski test. Test navale (engl. The Runs Test) U ovom se testu promatra cjeloukupan broj navala u nizu, pri emu se pod navalom (engl. run) smatra neprekinuti niz identinih bitova. Navala duljine k se sastoji od tono k identinih bitova te je ograniena na poetku i na kraju s bitovima suprotne vrijednosti. Svrha ovog testa je utvrivanje da li je broj navala (nula i jedinica) razliitih duljina oekivan onom kod sluajnog niza. Ovim se testom takoer utvruje da li su oscilacije izmjenjivanja nula i jedinica unutar niza oekivane; takve oscilacije ne smiju biti ni prebrze niti prespore. Test najdulje navale jedinica unutar bloka (engl. Test for the Longest-Run-of-Ones in
a Block)

U ovom se testu promatra najdulja navala jedinica unutar M-bitnih blokova. Svrha ovog testa je utvrivanje da li je duljina najdulje navale jedinica, unutar ispitivanog niza, konzistentan s oekivanom duljinom unutar (pravog) sluajnog niza. Valja napomenuti da se nepravilnosti u najduljoj navali jedinica unutar bloka takoer manifestiraju i u najduljoj navali nula; stoga se u ovom testu ispituju samo navale jedinica. Test ranga binarne matrice (engl. The Binary Matrix Rank Test) U ovom se testu promatraju rangovi disjunktnih podmatrica unutar ispitivanog niza. Svrha ovog testa je provjera linearne zavisnosti bitova unutar podnizova fiksne duljine. Spektralni test (engl. The Discrete Fourier Transform (Spectral) Test) U ovom se testu promatraju vrne vrijednosti (engl. peak heights) unutar dobivenog diskretnog Fourierovog spektra nad promatranim nizom. Svrha ovog testa je otkrivanje periodinih svojstava niza, poput ponavljajuih uzoraka, koja bi ukazala na devijaciju promatranog niza od sluajnog ponaanja. Namjera je utvrivanje da li je broj vrnih vrijednosti iznad gornjeg praga (engl. threshold), koji je jednak 95% najvee vrijednosti, vei od 5%. 100

Test pretraivanja nepreklapajuih predloaka (engl. The Non-overlapping Template


Matching Test)

U ovom se testu promatra broj pojavljivanja predefiniranih binarnih nizova uzoraka. Svrha ovog testa je detekcija generatora koji previe generiraju odreene aperiodine uzorke. Kod pretraivanja se koristi tzv. klizni prozor (engl. sliding window) duljine jednake traenom uzorku. Ukoliko se traeni uzorak ne pronae unutar prozora tada prozor klie za jedno mjesto unaprijed; inae se prozor klie (pomie) za cijelu svoju duljinu. Test pretraivanja preklapajuih predloaka (engl. The Overlapping Template
Matching Test)

Ovaj test je identian prethodnom testu, osim u jednoj bitnoj sitnici. U ovom se sluaju prozor uvijek pomie za jedno mjesto unaprijed, bez obzira da li je traeni uzorak pronaen ili nije. Maurerov "univerzalni statistiki" test (engl. Maurer's "Universal Statistical" Test) U ovom se testu promatra razmak meu identinim M-bitnim blokovima, mjera koja je usko povezana s duljinom saetog niza. Svrha ovog testa je utvrivanje da li se promatrani niz moe znatno saeti bez gubitka informacija. Mogunost znatnog saimanja niza se smatra svojstvom ureenosti, odnosno nesluajnosti niza. Lempel-Ziv test saimanja (engl. The Lempel-Ziv Compression Test) U ovom se testu promatra broj razliitih kumulativnih uzoraka (rijei) unutar promatranog niza. Svrha ovog testa je utvrivanje kolika je mogunost saimanja niza. Niz se smatra sluajnim ukoliko ga nije mogue znaajno saeti. Svojstveno je za sluajni niz to da e unutar sebe imati znaajan broj razliitih kumulativnih uzoraka. Test linearne sloenosti (engl. The Linear Complexity Test) U ovom se testu promatra duljina pripadnog linearnog posmanog registra s povratnom vezom (LFSR). Svrha ovog testa je utvrivanje da li je niz dovoljno sloen kako bi se smatrao sluajnim. Pomou Berlekamp-Massey metode se utvruje duljina LFSR registra kojim se moe izgenerirati cijeli promatrani niz. Sluajni nizovi su okarakterizirani veom duljinom pripadnog LFSR registra. Serijski test (engl. The Serial Test) U ovom se testu promatra broj pojavljivanja svih moguih preklapajuih m-bitnih uzoraka unutar promatranog niza. Svrha ovog testa je utvrivanje da li je broj pojavljivanja uzoraka priblino jednak onom oekivanom kod sluajnog niza. Sluajni nizovi imaju svojstvo uniformnosti, odnosno, svaki m-bitni uzorak ima jednaku vjerojatnost pojavljivanja. Valja napomenuti da ovaj test za m=1 degenerira u frekvencijski test. Test pribline entropije (engl. The Approximate Entropy Test) Kao i kod serijskog testa, u ovom se testu promatra frekvencija preklapajuih uzoraka unutar promatranog niza. Svrha ovog testa je usporedba frekvencija preklapajuih uzoraka duljina m i m+1 bitova s oekivanim rezultatom kod sluajnog niza.

101

Test zbirnih suma (engl. The Cumulative Sums Test) U ovom se testu promatra odmak (od nule) prilikom sluajne etnje (engl. random walk) definirane nad zbirnim sumama niza. Zbirne sume se dobivaju tako da se pri pojavljivanje svake binarne nule rezultat smanji za jedan, dok se pri pojavljivanju jedinice rezultat povea za jedan. Sluajna etnja je nita drugo doli skup tako dobivenih zbirnih suma niza. Svrha ovog testa je utvrivanje da li su zbirne sume parcijalnih nizova prevelike ili premale u odnosu na oekivano ponaanje sluajnog niza. Za sluajni niz, sve zbirne sume bi se trebale kretati oko nule. U suprotnom, primjeuje se znatan odmak od nule. Test sluajnih izleta (engl. The Random Excursions Test) Ovaj test je vrlo slian prethodnom, no s razlikom da se u ovom sluaju promatraju duljine ciklusa, umjesto odmaka unutar istih. Ciklus je definiran kao skup zbirnih suma koji je na poetku i na kraju ogranien s nulom. Svrha ovog testa je utvrivanje da li broj posjeta odreenom stanju unutar ciklusa odstupa od oekivanog za sluajni niz. Ovaj test je zapravo skup od osam testova, pri emu je za svako od stanja: -4, -3, -2, -1, 1, 2, 3, 4 definiran po jedan test. Ukoliko je promatrani niz stvarno sluajan tada bi morao proi svaki od tih testova. Varijanta testa sluajnih izleta (engl. The Random Excursions Variant Test) U ovom se testu promatra broj posjeta pojedinanim stanjima prilikom sluajne etnje zbirnih suma. Svrha ovog testa je detekcija odmaka posjeenosti stanja od oekivanog za sluajni niz. Ovaj test je zapravo skup od osamnaest testova, pri emu je za svako od stanja: -9, -8, .., -2, -1, 1, 2, ..., 8, 9 definiran po jedan test. Ukoliko je promatrani niz stvarno sluajan, tada bi morao proi svaki od tih testova.

102

5.2. Rezultati empirijskog testiranja


U ovom se dijelu mogu pronai rezultati izvoenja programa TestCSPRNGs. Sadraj izlazne datoteke "results.txt" u kojoj se nalaze rezultati, radi lakeg itanja i prikladnije forme prikazani su u tablinom obliku. Sljedeom su tablicom prikazani rezultati testiranja:
Tip Ime X
Y

FIPS
1 2 3 4 1 2 3 4 5 6 7

NIST
8 9 10 11 12 13 14 15 16

1,00 1,00 1,00 1,00 1,00 0,98 1,00 1,00 0,99 1,00 0,99 0,99 0,99 1,00 0,99 0,97 0,99 0,99 0,54 0,58 19,00

Tablica 17 Primjer tablice s rezultatima

Opis elemenata tablice: U stupcu Tip nalazi se vrsta testiranog algoritma u naem sluaju, vrsta testiranog algoritma je Y U stupcu Ime nalazi se ime testiranog algoritma u naem sluaju, ime testiranog algoritma je X U stupcima oznaenim s FIPS nalaze se koeficijenti prolaznosti testiranog algoritma za svaki pojedini statistiki test sluajnosti iz paketa FIPS [41] (svaki stupac oznaen brojkama 1-4 predstavlja redni broj testa) primjerice, u naem su sluaju sva etiri koeficijenta prolaznosti "1,00", to znai da je prolaznost testiranog algoritma na svim FIPS testovima bila stopostotna (100%) U stupcima oznaenim s NIST nalaze se koeficijenti prolaznosti testiranog algoritma za svaki pojedini statistiki test sluajnosti iz paketa NIST [55] (svaki stupac oznaen brojkama 1-16 predstavlja redni broj testa) primjerice, u naem je sluaju koeficijent prolaznosti za peti test jednak "0,99", to znai da je prolaznost testiranog algoritma na petom NIST testu bila 99% (1 pad u 100 testiranja), dok je npr. koeficijent prolaznosti 15. testa jednak "0,54", to znai da je prolaznost testiranog algoritma na petnaestom NIST testu bila 54% (46 padova u 100 testiranja) U zadnjem stupcu, oznaenom sa simbolom , dana je suma svih koeficijenata prolaznosti za testirani algoritam. Minimalna je vrijednost sume 0, dok je maksimalna vrijednost 20 (poto je ukupno koriteno 20 (= 4 FIPS + 16 NIST) statistikih testova). Ova suma e se smatrati ukupnom ocjenom testiranog kriptografskog algoritma, poto bi ona trebala biti proporcionalna s kvalitetom njegovog dizajna [71].

Napomena: Radi svoje glomaznosti, tablica s blokovskim algoritmima za ifriranje te tablica s funkcijama saetka poruke podijeljene su u dva dijela (I. i II. dio). 103

Tip

Ime 3-Way Anubis Blowfish Camellia Cast-128 Cast-256 Cobra Crypton-0.7 DES DESX DFC E2 FEAL-8 FEAL-NX Frog

FIPS
1 2 3 4 1 2 3 4 5 6 7

NIST
8 9 10 11 12 13 14 15 16

1,00 1,00 1,00 1,00 1,00 1,00 0,99 0,99 0,98 1,00 0,98 0,99 1,00 0,99 0,99 0,99 0,97 0,99 0,62 0,60 19,08 1,00 1,00 1,00 1,00 0,99 0,99 0,99 0,98 1,00 1,00 0,99 0,99 0,98 1,00 0,98 0,97 0,99 0,99 0,55 0,53 18,92 1,00 1,00 1,00 1,00 0,99 0,99 0,98 1,00 0,99 1,00 0,98 0,99 0,99 1,00 0,99 1,00 1,00 0,99 0,61 0,62 19,12 1,00 1,00 1,00 1,00 0,97 0,99 0,98 0,99 1,00 1,00 1,00 0,99 1,00 1,00 1,00 1,00 1,00 0,97 0,57 0,57 19,03 1,00 1,00 1,00 1,00 0,98 0,98 0,97 1,00 0,98 1,00 1,00 1,00 1,00 0,96 0,99 0,99 0,98 0,98 0,53 0,55 18,89 1,00 1,00 1,00 1,00 0,98 1,00 0,99 0,99 0,99 1,00 0,99 0,99 1,00 1,00 0,99 1,00 1,00 0,98 0,55 0,57 19,02 1,00 1,00 1,00 1,00 0,99 0,97 0,98 1,00 0,97 1,00 1,00 0,99 0,98 0,99 0,99 0,98 0,97 0,99 0,53 0,56 18,89 1,00 1,00 1,00 1,00 1,00 1,00 1,00 0,99 1,00 1,00 0,99 0,99 0,99 1,00 0,99 0,97 0,99 0,99 0,51 0,51 18,92 1,00 1,00 1,00 1,00 0,99 0,99 0,99 1,00 0,98 1,00 1,00 0,99 1,00 0,98 0,99 0,98 0,98 0,98 0,64 0,63 19,12 1,00 1,00 1,00 1,00 1,00 0,98 0,99 1,00 1,00 1,00 0,99 0,99 0,98 0,98 1,00 0,99 1,00 1,00 0,63 0,64 19,17 1,00 1,00 1,00 1,00 1,00 0,98 1,00 1,00 0,99 1,00 0,96 1,00 0,98 0,99 1,00 0,97 0,99 1,00 0,53 0,52 18,91 1,00 1,00 1,00 1,00 0,99 1,00 0,98 0,99 0,99 1,00 1,00 0,99 0,97 0,98 0,99 0,99 1,00 0,99 0,50 0,49 18,85 1,00 1,00 1,00 1,00 0,97 1,00 0,97 1,00 1,00 1,00 0,98 1,00 1,00 0,98 0,98 0,99 1,00 0,97 0,53 0,53 18,90 1,00 1,00 0,99 1,00 1,00 0,99 0,98 1,00 0,98 1,00 0,99 0,98 0,99 0,96 0,99 0,97 1,00 1,00 0,57 0,60 18,99 1,00 1,00 1,00 1,00 0,98 0,98 0,98 0,98 0,99 1,00 1,00 0,97 0,99 0,98 0,99 0,99 0,99 1,00 0,57 0,59 18,98 1,00 1,00 1,00 1,00 0,99 0,98 0,99 0,99 0,97 1,00 1,00 1,00 0,97 0,98 0,98 0,98 0,98 0,97 0,58 0,62 18,98 1,00 1,00 1,00 1,00 1,00 1,00 0,99 1,00 0,98 1,00 0,99 0,98 0,98 1,00 0,98 0,99 0,99 1,00 0,60 0,63 19,11 1,00 1,00 1,00 1,00 1,00 1,00 0,99 0,98 0,99 1,00 0,99 0,99 0,99 1,00 0,99 0,99 1,00 0,99 0,63 0,66 19,19 1,00 1,00 1,00 1,00 0,99 0,99 0,99 0,99 1,00 1,00 0,99 1,00 0,98 0,98 1,00 0,99 1,00 0,99 0,71 0,69 19,29 1,00 1,00 1,00 1,00 0,99 1,00 0,98 0,99 0,97 1,00 0,99 0,98 0,99 0,99 0,99 0,99 1,00 0,99 0,52 0,52 18,89 1,00 1,00 1,00 1,00 0,99 1,00 1,00 0,98 1,00 1,00 0,99 0,97 1,00 0,99 1,00 0,98 1,00 0,98 0,47 0,51 18,86 1,00 1,00 1,00 1,00 0,99 0,98 0,98 1,00 0,99 1,00 1,00 0,99 1,00 0,99 0,97 0,99 0,99 0,98 0,65 0,65 19,15 1,00 1,00 1,00 1,00 0,99 1,00 0,97 0,99 1,00 1,00 1,00 0,99 1,00 0,98 1,00 0,96 1,00 0,99 0,58 0,62 19,07 1,00 1,00 1,00 1,00 0,98 0,99 0,99 1,00 0,99 1,00 1,00 0,98 0,98 0,99 0,98 0,98 0,98 0,98 0,55 0,60 18,97 1,00 1,00 1,00 1,00 1,00 0,99 0,98 0,99 0,99 1,00 0,99 1,00 0,97 1,00 1,00 0,98 0,98 1,00 0,64 0,63 19,14 1,00 1,00 1,00 1,00 1,00 1,00 0,99 1,00 0,97 1,00 0,99 0,99 0,98 1,00 1,00 0,98 0,96 1,00 0,57 0,54 18,97 1,00 1,00 1,00 1,00 0,99 1,00 1,00 0,97 1,00 1,00 0,99 0,98 0,99 0,98 1,00 0,99 1,00 0,98 0,57 0,58 19,02 1,00 1,00 1,00 1,00 0,98 0,99 0,98 1,00 0,97 1,00 0,99 0,98 1,00 0,97 1,00 0,96 0,99 0,98 0,43 0,46 18,68 1,00 1,00 1,00 1,00 1,00 0,99 1,00 0,97 1,00 1,00 0,98 0,99 1,00 0,99 0,99 0,97 0,99 0,99 0,62 0,63 19,11 1,00 1,00 1,00 1,00 1,00 0,99 0,96 0,98 1,00 1,00 0,97 1,00 0,99 0,99 1,00 0,97 0,98 1,00 0,54 0,56 18,93 1,00 1,00 1,00 1,00 1,00 1,00 1,00 1,00 0,99 1,00 1,00 0,99 0,97 1,00 1,00 0,99 1,00 1,00 0,50 0,52 18,96 1,00 1,00 1,00 1,00 0,99 0,98 0,98 1,00 0,99 1,00 0,97 0,99 0,97 0,99 1,00 0,98 1,00 1,00 0,55 0,55 18,94 1,00 1,00 1,00 1,00 0,99 0,98 1,00 1,00 0,99 1,00 0,99 0,99 1,00 1,00 1,00 1,00 1,00 0,99 0,70 0,65 19,28 1,00 1,00 1,00 1,00 1,00 0,99 0,99 0,97 0,99 0,99 0,99 0,99 0,99 0,99 0,99 0,98 0,99 1,00 0,58 0,58 19,01 1,00 1,00 1,00 1,00 0,99 0,99 0,97 0,97 0,98 1,00 0,99 0,99 1,00 1,00 0,97 0,99 0,99 0,98 0,69 0,66 19,16 1,00 1,00 1,00 1,00 1,00 0,99 1,00 0,99 1,00 1,00 1,00 0,98 0,98 0,96 0,97 0,99 0,99 1,00 0,65 0,62 19,12 1,00 1,00 1,00 1,00 1,00 0,99 1,00 0,99 0,99 1,00 0,98 1,00 0,98 0,98 1,00 0,99 1,00 0,99 0,55 0,62 19,06 1,00 1,00 1,00 1,00 0,98 1,00 0,98 0,96 0,98 1,00 1,00 1,00 0,99 0,99 0,98 0,96 0,99 0,97 0,58 0,58 18,94 1,00 1,00 1,00 1,00 0,99 0,97 0,97 1,00 1,00 1,00 1,00 0,97 1,00 0,99 0,97 0,99 0,98 1,00 0,62 0,60 19,05 1,00 1,00 1,00 1,00 0,99 0,98 0,99 0,98 0,99 1,00 1,00 1,00 0,98 0,99 1,00 0,98 0,98 0,99 0,61 0,58 19,04

Blokovski algoritmi za ifriranje

GOST HPC ICE IDEA Khazad Loki97 Lucifer MacGuffin Magenta MARS MC1 MC2 MISTY1 MMB NewDES Noekeon Q Q128 RC2 RC5 RC6 Redoc III Rijndael-128 Rijndael-192 Rijndael-256

Tablica 18 Rezultati testiranja blokovskih algoritama za ifriranje (I. dio)

104

Tip

Ime S-1 Safer-K

FIPS
1 2 3 4 1 2 3 4 5 6 7

NIST
8 9 10 11 12 13 14 15 16

1,00 1,00 1,00 1,00 1,00 1,00 0,99 0,99 0,98 1,00 0,98 0,98 0,98 0,99 0,99 0,98 1,00 1,00 0,55 0,52 18,93 1,00 1,00 1,00 1,00 0,98 1,00 0,97 0,99 0,99 1,00 0,97 1,00 1,00 0,99 0,99 0,99 0,98 0,98 0,58 0,60 19,01 1,00 1,00 1,00 1,00 1,00 0,99 1,00 1,00 0,99 1,00 1,00 0,98 0,99 0,98 1,00 0,98 0,98 0,98 0,62 0,60 19,09 1,00 1,00 1,00 1,00 0,99 0,98 0,98 0,99 0,99 1,00 0,99 0,99 0,97 0,95 0,99 0,98 0,98 0,98 0,60 0,60 18,96 1,00 1,00 1,00 1,00 0,99 0,98 1,00 0,99 0,98 1,00 0,98 0,99 0,99 0,99 1,00 1,00 0,98 0,99 0,57 0,57 19,00 1,00 1,00 1,00 1,00 0,99 1,00 1,00 1,00 0,98 1,00 0,99 0,99 0,98 1,00 1,00 0,97 1,00 1,00 0,58 0,58 19,06 1,00 1,00 1,00 1,00 0,98 0,98 0,97 0,98 1,00 1,00 1,00 0,99 1,00 0,98 0,98 0,98 0,98 0,97 0,50 0,50 18,79 1,00 1,00 1,00 1,00 0,98 1,00 0,99 1,00 0,96 1,00 0,99 0,99 0,99 0,99 1,00 0,98 0,98 0,97 0,62 0,59 19,03 1,00 1,00 1,00 1,00 0,98 1,00 1,00 1,00 0,99 1,00 1,00 1,00 0,98 0,97 0,98 1,00 1,00 0,98 0,53 0,53 18,94 1,00 1,00 1,00 1,00 0,99 0,99 0,99 0,99 0,98 1,00 0,99 0,98 0,98 0,99 0,98 1,00 0,99 0,99 0,68 0,71 19,23 1,00 1,00 1,00 1,00 0,99 0,98 0,99 0,99 1,00 0,99 0,98 0,98 0,99 0,99 0,99 0,99 0,98 0,99 0,59 0,58 19,00 1,00 1,00 1,00 1,00 0,99 0,97 1,00 0,99 1,00 1,00 0,99 0,98 1,00 0,99 1,00 0,99 0,99 0,99 0,56 0,58 19,02 1,00 1,00 1,00 1,00 0,99 0,96 0,98 0,99 0,99 1,00 1,00 0,99 1,00 1,00 0,99 1,00 1,00 0,98 0,52 0,55 18,94 1,00 1,00 1,00 1,00 0,99 0,99 0,99 0,98 0,99 1,00 1,00 1,00 0,96 0,99 0,98 1,00 1,00 0,98 0,59 0,56 19,00

Blokovski algoritmi za ifriranje

Safer-SK Safer+ Seed Serpent SHARK-A SHARK-E Skipjack Square TDEA TEA Twofish XTEA

Tablica 19 Rezultati testiranja blokovskih algoritama za ifriranje (II. dio)

Dobivene (silazno sortirane) ocjene blokovskih algoritama za ifriranje:


IDEA(19.29), Q128(19.28), Square(19.23), ICE(19.19), DESX(19.17), RC5(19.16), Lucifer(19.15), MARS(19.14), Blowfish(19.12), DES(19.12), RC6(19.12), HPC(19.11), MMB(19.11), Safer-SK(19.09), 3-Way(19.08), MacGuffin(19.07), Redoc III(19.06), Serpent(19.06), Rijndael-192(19.05), Rijndael-256(19.04), Camellia(19.03), SHARK-E(19.03), Cast-256(19.02), MC2(19.02), TEA(19.02), RC2(19.01), Safer-K(19.01), Seed(19), TDEA(19), XTEA(19), FEAL-NX(18.99), Frog(18.98), GOST(18.98), Magenta(18.97), MC1(18.97), Noekeon(18.96), Safer+(18.96), Q(18.94), Rijndael-128(18.94), Skipjack(18.94), Twofish(18.94), NewDES(18.93), S-1(18.93), Anubis(18.92), Crypton-0.7(18.92), DFC(18.91), FEAL-8(18.9), Cast-128(18.89), Cobra(18.89), Khazad(18.89), Loki97(18.86), E2(18.85), SHARK-A(18.79), MISTY1(18.68)

Na prvi se pogled testirani blokovski algoritmi ponaaju jednoliko (monotono) u svim testovima, osim u zadnja dva. Nema previe odstupanja koeficijenata prolaznosti po stupcima, no zadnja dva stupca nekako "bodu" oi. Naime, rije je o pripadnim NIST testovima: testu sluajnih izleta i varijanti testa sluajnih izleta. Iz nevedenih se rezultata moe vrlo lako zakljuiti da su navedeni testovi prestrogi, emu u prilog ide i injenica da se test sluajnih izleta sastoji od 8 podtestova, dok se varijanta testa sluajnih izleta sastoji od 18 podtestova. Za prolazak oba testa, uz potreban prolazak na svim podtestovima, takoer je potrebno zadovoljiti zadani vrlo strogi uvjet; ukoliko ga niz ne zadovoljava, odmah se u poetku odbacuje kao (savreno) nesluajan za pripadni test. No, u cijeloj ovoj prii ima jedna nepravilnost koja navodi na zakljuak o pogrenom dizajnu ta dva testa. Naime, u dokumentaciji stoji da se niz (u ta dva testa) odbacuje kao (savreno) nesluajan ukoliko nije zadovoljen postavljen uvjet testiranja, dok se u priloenoj programskoj izvedbi (istih autora) u tom sluaju pripadni test prekida s objanjenjem da niz nije prikladan za daljnje testiranje ("WARNING: TEST NOT APPLICABLE. THERE ARE AN INSUFFICIENT NUMBER OF CYCLES"). Ta dva testa imaju jako teoretsko uporite, no, njihova ih rigoroznost ini vrlo neprikladnim naspram ostalih NIST testova. Bez obzira na sve, ta su dva testa koritena kod provedenog testiranja kriptografskih algoritama, te se od boljeg algoritma oekivao bolji prolazak i na ovom paru testova. Takoer se od ispitivanog algoritma oekivao prolazak na NIST testovima u vie od 50% sluajeva; ukoliko algoritam pada na jednom NIST testu u vie od 50% sluajeva, odnosno ukoliko mu je koeficijent prolaznosti manji (ili jednak) od 0.5, 105

tada se taj algoritam smatra nesluajnim (u tom je sluaju bio ee ocijenjen kao nesluajan nego kao sluajan). to se tie FIPS testova, kod njih se od testiranog algoritma oekivala 100% prolaznost. Tome je tako jer su oni sami dizajnirani kako bi prepoznavali generatore nesluajnosti, dok ih imalo sluajni generatori nimalo ne zanimaju. Od svih testiranih blokovskih algoritama za ifriranje, osnovni uvjet prolaznosti nad skupom testova NIST (svi NIST koeficijenti moraju biti vei od 0.5) nisu zadovoljili: E2, Noekeon, MISTY1, LOKI97 i SHARK-A, dok osnovni uvjet prolaznosti nad skupom testova FIPS (svi FIPS koeficijenti moraju biti jednaki 1.0) nije zadovoljio FEAL-NX. Meu ostalim blokovskim algoritmima za ifriranje nema nekih prevelikih odmaka, no postoji jedna zanimljivost. Naime, algoritam IDEA je u ovom testiranju dobio najbolju ocjenu, to se moda moe povezati s izjavom poznatog kriptografa Bruce Schneiera iz 1996. godine: "Po mojem miljenju, IDEA je najbolji i najsigurniji blokovski kriptosustav danas dostupan javnosti" [15]. Ukoliko se jo dodatno uzmu u obzir injenice da su autori algoritma IDEA dva vrsna kriptoanalitiara Xuejia Lai [18] i James L. Massey [44], te da je algoritam patentiran u mnogim zemljama svijeta do 2011. godine (premda je predstavljen javnosti davne 1991. godine), IDEA definitivno zasluuje titulu pobjednika meu blokovskim algoritmima za ifriranje u provedenom testiranju. Ovdje valja uzeti u obzir da se provedenim testiranjem ocjenjuje samo dizajn pojedinih kriptosustava. To znai da neki kriptosustav moe dobiti bolju ocjenu na ovoj vrsti testiranja, no uporabom malog kljua postaje moda i slabiji od nekog kriptosustava sa slabijim dizajnom.
FIPS
1 2 3 4 1 2 3 4 5 6 7

Tip

Ime Achterbahn F-FCSR HC-256 ISAAC MARK4 Mickey MIR-1 PC1 Rabbit RC4 RC4-drop Sapphire-II SCOP Seal-BE Seal-LE SN3 Snow 1.0 Trivium XOR Yamb

NIST
8 9 10 11 12 13 14 15 16

1,00 1,00 1,00 1,00 0,97 0,98 1,00 0,98 0,98 1,00 0,99 1,00 1,00 0,98 0,98 0,98 0,98 0,96 0,61 0,59 18,98 1,00 1,00 1,00 1,00 0,99 0,99 1,00 0,98 0,98 1,00 0,98 0,98 0,98 0,98 0,99 0,98 1,00 0,99 0,50 0,50 18,82 1,00 1,00 1,00 1,00 0,98 0,99 0,99 1,00 0,99 1,00 0,99 1,00 1,00 0,98 1,00 0,99 0,99 0,98 0,56 0,54 18,98 1,00 1,00 1,00 1,00 1,00 0,96 0,96 1,00 1,00 1,00 0,98 0,98 0,99 0,98 0,98 1,00 1,00 1,00 0,52 0,52 18,87 1,00 1,00 1,00 1,00 0,98 0,97 1,00 0,97 1,00 1,00 1,00 0,98 0,99 0,97 0,99 1,00 1,00 0,98 0,56 0,59 18,98 1,00 1,00 1,00 1,00 0,99 1,00 1,00 0,99 1,00 1,00 0,99 1,00 0,97 0,98 1,00 1,00 0,98 0,98 0,60 0,61 19,09 1,00 1,00 1,00 1,00 0,98 1,00 0,99 0,98 0,99 1,00 0,99 0,99 0,99 0,99 1,00 0,98 1,00 0,97 0,51 0,54 18,90 0,99 0,93 0,97 1,00 0,78 0,92 0,80 0,65 0,71 0,76 0,91 0,70 0,86 0,49 0,95 0,52 0,48 0,79 0,48 0,47 15,16 1,00 1,00 1,00 1,00 1,00 0,99 1,00 0,99 0,99 1,00 1,00 0,97 1,00 0,96 0,99 0,99 0,99 1,00 0,53 0,55 18,95 1,00 1,00 1,00 1,00 1,00 0,99 0,97 0,99 1,00 1,00 1,00 0,99 0,99 0,98 0,99 0,98 1,00 1,00 0,49 0,53 18,90 1,00 1,00 1,00 1,00 0,99 1,00 0,98 0,99 0,96 1,00 0,98 1,00 0,99 0,99 0,99 0,99 0,99 0,99 0,60 0,52 18,96 1,00 1,00 1,00 1,00 0,97 1,00 1,00 0,99 0,99 1,00 0,99 0,99 0,98 0,96 0,99 1,00 1,00 0,96 0,54 0,57 18,93 1,00 1,00 1,00 1,00 0,99 1,00 0,99 1,00 1,00 1,00 0,98 1,00 0,98 0,98 0,99 0,98 1,00 0,99 0,58 0,58 19,04 1,00 1,00 1,00 1,00 1,00 1,00 1,00 0,98 0,99 1,00 0,99 0,98 0,98 0,98 0,98 1,00 0,98 0,99 0,54 0,55 18,94 1,00 1,00 1,00 1,00 1,00 1,00 1,00 0,99 1,00 1,00 0,99 0,99 0,97 0,99 0,99 0,99 1,00 1,00 0,59 0,57 19,07 1,00 1,00 1,00 1,00 1,00 0,99 1,00 1,00 0,99 1,00 0,99 0,98 0,99 0,97 0,98 0,98 0,99 0,99 0,59 0,64 19,08 1,00 1,00 1,00 1,00 0,99 0,99 1,00 1,00 0,97 1,00 1,00 0,99 1,00 0,99 1,00 0,98 0,99 0,98 0,53 0,53 18,94 1,00 1,00 1,00 1,00 0,99 0,98 0,97 1,00 1,00 1,00 1,00 0,99 0,98 0,97 0,99 1,00 0,99 0,99 0,57 0,60 19,02 0,11 0,00 0,00 1,00 0,00 0,08 0,00 0,00 0,00 0,00 0,14 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 1,33 1,00 1,00 1,00 1,00 1,00 0,99 1,00 1,00 0,99 1,00 0,99 0,98 0,99 1,00 0,97 0,97 1,00 1,00 0,57 0,62 19,07

Nizovni algoritmi za ifriranje

Tablica 20 Rezultati testiranja nizovnih algoritama za ifriranje

106

Dobivene (silazno sortirane) ocjene nizovnih algoritama za ifriranje:


Mickey(19.09), SN3(19.08), Seal-LE(19.07), Yamb(19.07), SCOP(19.04), Trivium(19.02), Achterbahn(18.98), HC-256(18.98), MARK4(18.98), RC4-drop(18.96), Rabbit(18.95), Seal-BE(18.94), Snow 1.0(18.94), Sapphire-II(18.93), MIR-1(18.9), RC4(18.9), ISAAC(18.87), F-FCSR(18.82), PC1(15.16), XOR(1.33)

Od svih testiranih nizovnih algoritama za ifriranje, osnovni uvjet prolaznosti nad skupom testova NIST (svi NIST koeficijenti moraju biti vei od 0.5) nisu zadovoljili: F-FCSR, PC1, RC4 i XOR, dok osnovni uvjet prolaznosti nad skupom testova FIPS (svi FIPS koeficijenti moraju biti jednaki 1.0) nisu zadovoljili: PC1 i XOR. Prva stvar koja se moe zamijetiti usporedbom rezultata nizovnih i blokovskih algoritama za ifriranje je dominacija blokovskih algoritama (ocjenama). Naime, ocjene testiranih blokovskih algoritama za ifriranje se kreu u rasponu 18.68-19.29, dok se ocjene nizovnih algoritama kreu u rasponu 1.33-19.09. I kad bi se uklonili ekstremi (minimum i maksimum) iz jedne i iz druge skupine, dolo bi se do jednakog zakljuka. Jo jedna poraavajua stvar kod nizovnih algoritama je njihovo vlastito osporavanje temeljne ideje nizovnih kriptosustava. Naime, nizovni kriptosustavi su u teoriji visoko specijalizirani generatori pseudosluajnih brojeva, to se ne zamijeuje u dobivenim rezultatima (posebno u usporedbi s blokovskim kriptosustavima). Zanimljivo je napomenuti da je najbolje ocijenjeni nizovni algoritam za ifriranje Mickey, zapravo algoritam u probnoj fazi uporabe (2005.). Tu su takoer vrlo dobri Trivium (2005.), Achterbahn (2005.) te HC-256 (2004.), koji su svi takoer mlaahni. Moda s njima zapoinje itava nova generacija (napokon ozbiljnih) nizovnih kriptosustava. Valja zamijetiti da je algoritam PC1 (autora Alexander Pukalla) dobio vrlo loe ocjene na ovom testiranju, to se moglo i oekivati od kriptografskog algoritma iz kune radinosti. Algoritam za ifriranje XOR (obina binarna operacija ) je oekivano dobio najslabiju ocjenu. Ovdje se naime radi o oslabljenoj varijanti teoretski neprobojnog Vernamovog kriptosustava [50], koja je danas naalost vrlo rairena. Premda je postavljen sluajni klju veliine 1024 bita, to ga nije spasilo od loe ocjene na ovoj vrsti testiranja. Mnogi kvazistrunjaci prodaju ovaj algoritam za ifriranje naivnim kupcima, tvrdei da ga je nemogue probiti. to je najalosnije, sam algoritam jest neprobojan, no uz potivanje (najvanijeg) uvjeta da se klju za ifriranje nikad ne upotrijebi vie od jedanput (u npr. dva ifriranja).
FIPS
1 2 3 4 1 2 3 4 5 6 7

Tip Asimetrini

Ime ElGamal Paillier Rabin RSA LUC

NIST
8 9 10 11 12 13 14 15 16

1,00 1,00 1,00 1,00 1,00 0,98 1,00 1,00 0,99 1,00 0,99 0,99 0,99 1,00 0,99 0,97 0,99 0,99 0,54 0,58 19,00 1,00 1,00 1,00 1,00 1,00 0,99 1,00 1,00 0,97 1,00 0,99 1,00 1,00 0,97 1,00 1,00 1,00 1,00 0,69 0,62 19,23 1,00 1,00 1,00 1,00 0,99 1,00 0,99 0,99 0,99 1,00 0,97 0,98 0,96 0,99 0,99 0,99 0,99 0,99 0,63 0,63 19,08 1,00 1,00 1,00 1,00 0,98 0,99 1,00 0,98 0,96 1,00 1,00 0,99 1,00 0,99 0,99 0,99 0,98 0,98 0,54 0,55 18,92 1,00 1,00 1,00 1,00 0,98 0,98 1,00 0,99 0,99 1,00 1,00 1,00 1,00 0,97 0,98 0,99 0,99 0,97 0,63 0,62 19,09

Tablica 21 Rezultati testiranja asimetrinih algoritama za ifriranje

Dobivene (silazno sortirane) ocjene klasinih algoritama za ifriranje:


Paillier(19.23), LUC(19.09), Rabin(19.08), ElGamal(19), RSA(18.92)

107

Kod usporedbe dobivenih ocjena asimetrinih algoritama za ifriranje, prva stvar koja se uoava jest inferniornost RSA algoritma nad ostalima. Ukoliko znamo da je RSA trenutno najee koriteni algoritam javnog kljua, to bi nas moda trebalo i zabrinuti. No, jaka reklama i lobi utjecajnih ljudi u kriptografskoj zajednici dre ovaj algoritam na tronu ve dugi niz godina (od 1977. godine). to se tie ostalih algoritama, osobito se istie Paillier; po jednostavnosti je u rangu RSA, no relativno je nepoznat iroj skupini ljudi. U usporedbi s ostalim algoritmima, asimetrini algoritmi za ifriranje se u ovom testiranju ne istiu nita ispred ostalih. Premda su se prije testa mogli oekivati neto bolji rezultati, konani rezultati su u rangu onih kod blokovskih algoritama za ifriranje.
Tip Ime ADFGVX Atbash Bacon Beaufort Bifid Klasini algoritmi za ifriranje Caesar Gronsfeld Morse Myszkowski Playfair Pollux Polybius Porta Railfence
Straddling checkerboard

FIPS
1 2 3 4 1 2 3 4 5 6 7

NIST
8 9 10 11 12 13 14 15 16

0,00 0,00 0,00 0,26 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,34 0,00 0,00 0,00 0,00 0,00 0,60 0,00 0,00 0,00 1,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 1,00 0,00 0,00 0,00 1,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 1,00 0,17 0,00 0,00 1,00 0,02 0,43 0,00 0,00 0,00 0,00 0,00 0,00 0,01 0,00 0,52 0,00 0,00 0,02 0,00 0,00 2,17 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 1,00 0,00 1,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 2,00 0,14 0,00 0,00 1,00 0,02 0,37 0,00 0,00 0,00 0,00 0,01 0,00 0,00 0,00 0,52 0,00 0,00 0,03 0,00 0,00 2,09 0,00 0,00 0,00 1,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 1,00 0,00 0,00 0,00 0,00 0,00 2,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,51 0,00 0,00 0,00 0,00 0,00 0,51 0,05 0,00 0,00 0,92 0,02 0,14 0,00 0,00 0,03 0,06 0,01 0,00 0,00 0,00 0,51 0,00 0,00 0,02 0,00 0,00 1,76 0,00 0,00 0,00 1,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,03 0,00 0,00 0,99 0,00 0,00 0,00 0,00 0,00 2,02 0,00 0,00 0,00 0,60 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,60 0,10 0,00 0,00 1,00 0,01 0,33 0,00 0,00 0,00 0,00 0,01 0,00 0,01 0,00 0,46 0,00 0,00 0,01 0,00 0,00 1,93 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 1,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 1,00 0,00 0,00 0,00 0,97 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,97 0,00 0,00 0,00 1,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 1,00 0,00 0,00 0,00 1,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 1,00 0,17 0,00 0,00 1,00 0,00 0,42 0,00 0,00 0,00 0,00 0,01 0,00 0,01 0,00 0,53 0,00 0,00 0,00 0,00 0,00 2,14 1,00 0,00 0,00 1,00 1,00 1,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 1,00 0,00 0,00 5,00

Tilden Trifid Trithemian Vigenere WigWag

Tablica 22 Rezultati testiranja klasinih algoritama za ifriranje

Dobivene (silazno sortirane) ocjene klasinih algoritama za ifriranje:


WigWag(5), Beaufort(2.17), Vigenere(2.14), Gronsfeld(2.09), Pollux(2.02), Caesar(2), Morse(2), Porta(1.93), Playfair(1.76), Atbash(1), Bacon(1), Straddling checkerboard(1), Trifid(1), Trithemian(1), Tilden(0.97), ADFGVX(0.6), Polybius(0.6), Myszkowski(0.51), Bifid(0), Railfence(0)

Rezultati dobiveni kod testiranja klasinih algoritama za ifriranje su moda i najzanimljiviji u cijelom ovom radu. Naime, uzimajui u obzir da je dobivena ocjena testiranja proporcionalna s dizajnom pripadnog kriptografskog algoritma, tada je lako zakljuiti da su klasini algoritmi za ifriranje vrlo loeg dizajna, i to bar za dananje zahtjeve. Svi padaju na osnovnim uvjetima prolaznosti skupova testova FIPS i NIST. Nijedan se posebno ne istie u pozitivnom smislu, dok u negativnom smislu ima i onih s ocjenom 0 (Bifid i Railfence). 108

Tip

Ime Adler-32 CARP CRC-8 CRC-16 CRC-16 rev. CRC-16 CCITT CRC-16 CCITT rev. CRC-16 FCS CRC-16 IBM CRC-16 LHA CRC-16 XModem CRC-16 ZModem CRC-24 CRC-32 CRC-32C CRC-32 rev.

FIPS
1 2 3 4 1 2 3 4 5 6 7

NIST
8 9 10 11 12 13 14 15 16

0,00 0,00 0,00 1,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 1,00 0,00 0,00 0,00 0,00 0,00 2,00 0,00 0,00 0,00 1,00 0,00 0,00 0,00 0,02 0,00 0,00 0,00 0,00 0,00 0,00 1,00 0,00 0,00 0,00 0,00 0,00 2,02 0,97 0,97 0,00 0,98 0,00 0,97 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 3,89 1,00 0,89 0,00 1,00 1,00 0,52 1,00 0,00 0,00 0,00 0,01 1,00 0,30 0,00 0,00 1,00 1,00 1,00 0,45 0,50 10,67 0,77 0,00 0,30 1,00 0,12 0,61 0,03 0,00 0,00 0,00 0,22 0,00 0,07 0,00 0,00 0,00 0,00 0,12 0,02 0,01 3,27 1,00 1,00 1,00 1,00 1,00 1,00 1,00 1,00 0,00 0,76 1,00 0,99 1,00 1,00 0,99 1,00 1,00 1,00 0,46 0,45 17,65 0,00 0,00 0,00 1,00 0,00 0,01 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 1,01 1,00 0,93 1,00 1,00 0,35 0,75 0,22 0,00 0,00 0,00 0,43 0,01 0,26 0,00 0,35 0,00 0,00 0,35 0,04 0,02 6,71 1,00 0,99 1,00 1,00 0,17 0,80 0,07 0,00 0,00 0,00 0,72 0,05 0,46 0,00 0,98 0,01 0,01 0,17 0,02 0,03 7,48 1,00 1,00 0,00 1,00 1,00 0,47 1,00 0,00 0,00 0,58 0,94 0,00 0,85 0,00 0,47 1,00 1,00 1,00 0,26 0,36 11,93 0,00 0,00 0,00 1,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 1,00 1,00 1,00 1,00 1,00 1,00 1,00 1,00 0,45 0,00 0,00 1,00 0,69 1,00 0,00 0,43 1,00 1,00 1,00 0,42 0,34 14,33 1,00 1,00 1,00 1,00 1,00 1,00 0,99 1,00 1,00 1,00 0,99 0,99 1,00 1,00 1,00 0,98 0,99 1,00 0,44 0,39 18,77 1,00 1,00 1,00 1,00 0,99 0,99 0,99 0,97 0,00 1,00 1,00 1,00 0,99 0,99 0,99 1,00 1,00 0,99 0,64 0,65 18,19 1,00 1,00 1,00 1,00 0,99 1,00 0,98 1,00 0,00 1,00 1,00 1,00 0,98 0,98 1,00 0,98 0,98 0,99 0,53 0,53 17,94 0,00 0,00 0,00 0,98 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,99 0,00 0,00 0,00 0,00 0,00 1,97 1,00 1,00 1,00 1,00 0,99 0,98 0,99 0,98 0,00 1,00 0,99 0,97 0,98 0,99 1,00 0,99 0,98 0,99 0,66 0,65 18,14 1,00 1,00 1,00 1,00 0,99 1,00 0,99 1,00 0,00 0,99 1,00 0,98 0,98 1,00 0,97 0,99 1,00 0,99 0,60 0,59 18,07 1,00 1,00 1,00 1,00 1,00 0,99 1,00 0,97 0,00 1,00 1,00 1,00 1,00 0,98 1,00 1,00 0,99 0,99 0,59 0,62 18,13 1,00 1,00 1,00 1,00 0,99 1,00 1,00 0,98 0,99 1,00 0,99 0,99 0,98 0,98 1,00 0,97 0,99 0,99 0,57 0,62 19,04 0,00 0,00 0,00 0,99 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,99 1,00 1,00 1,00 1,00 0,45 0,99 0,03 0,01 0,35 0,37 0,50 0,04 0,65 0,00 0,99 0,00 0,00 0,45 0,13 0,14 9,10 1,00 1,00 1,00 1,00 0,99 0,98 0,99 0,96 0,99 1,00 0,91 0,94 1,00 0,94 1,00 0,90 0,91 1,00 0,51 0,52 18,54 1,00 1,00 1,00 1,00 0,99 0,99 0,98 1,00 0,99 1,00 1,00 0,97 0,99 0,97 0,99 0,98 0,96 0,98 0,44 0,47 18,70 1,00 1,00 1,00 1,00 0,99 1,00 0,98 1,00 0,99 1,00 0,99 0,98 1,00 0,99 0,99 0,96 0,97 0,97 0,62 0,61 19,04 0,00 0,00 0,00 0,99 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,99 0,00 0,00 0,00 0,99 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,99 1,00 1,00 1,00 1,00 0,99 0,99 0,99 1,00 0,98 1,00 0,99 0,98 0,98 0,99 0,98 1,00 0,99 0,99 0,56 0,57 18,98 1,00 1,00 1,00 1,00 0,99 0,98 0,98 0,97 0,98 1,00 0,99 0,99 0,98 0,99 0,99 1,00 1,00 0,99 0,47 0,50 18,80 1,00 1,00 1,00 1,00 1,00 0,98 0,97 0,98 0,99 1,00 0,99 1,00 0,98 0,98 0,99 0,99 0,99 1,00 0,57 0,58 18,99 1,00 1,00 1,00 1,00 0,99 0,99 0,97 0,99 0,97 1,00 1,00 1,00 0,98 1,00 0,99 0,99 0,99 0,99 0,70 0,66 19,21 1,00 1,00 1,00 1,00 1,00 0,98 1,00 0,99 1,00 1,00 0,99 0,98 0,99 0,97 1,00 0,99 0,99 0,98 0,61 0,58 19,05 1,00 1,00 1,00 1,00 1,00 0,98 0,98 1,00 0,99 1,00 0,97 0,98 0,98 1,00 0,99 0,97 0,98 1,00 0,50 0,52 18,84 1,00 1,00 1,00 1,00 1,00 0,99 0,99 0,99 0,98 1,00 1,00 0,99 0,98 1,00 0,99 0,96 0,98 0,99 0,59 0,56 18,99 1,00 1,00 1,00 1,00 1,00 1,00 0,98 1,00 0,99 0,99 0,97 0,97 0,98 1,00 0,99 0,98 1,00 1,00 0,62 0,62 19,09 1,00 1,00 1,00 1,00 1,00 0,96 1,00 1,00 0,99 1,00 0,96 0,99 1,00 0,97 0,99 0,99 0,99 1,00 0,60 0,59 19,03 1,00 1,00 1,00 1,00 1,00 1,00 0,97 0,99 1,00 1,00 0,99 0,99 0,99 1,00 0,98 0,97 0,99 0,98 0,58 0,56 18,99 1,00 1,00 1,00 1,00 0,99 1,00 0,98 1,00 0,99 1,00 0,98 0,97 0,98 0,98 1,00 0,98 0,99 0,99 0,50 0,53 18,86 1,00 1,00 1,00 1,00 1,00 1,00 0,98 0,98 0,98 1,00 1,00 0,99 0,98 0,96 1,00 0,97 0,98 0,99 0,69 0,73 19,23 1,00 1,00 1,00 1,00 0,96 1,00 0,97 1,00 1,00 1,00 0,97 0,99 0,97 0,97 0,98 0,97 1,00 0,96 0,52 0,54 18,80

Funkcije saetka poruke

CRC-32 Bzip2 CRC-32 Jamcrc CRC-32 POSIX CRC-64 Elf FNV-32 FNVa-32 FNV-64 FNVa-64 GHash-32-3 GHash-32-5 HAVAL-128 HAVAL-160 HAVAL-192 HAVAL-224 HAVAL-256 HAS-160 MD2 MD4 MD5 RIPEMD-128 RIPEMD-160 RIPEMD-256 RIPEMD-320

Tablica 23 Rezultati testiranja funkcija saetka poruke (I. dio)

109

Tip

Ime SHA-1 SHA-224 SHA-256

FIPS
1 2 3 4 1 2 3 4 5 6 7

NIST
8 9 10 11 12 13 14 15 16

1,00 1,00 1,00 1,00 1,00 1,00 0,99 1,00 0,99 1,00 0,99 1,00 1,00 0,98 0,99 0,96 0,99 1,00 0,57 0,58 19,04 1,00 1,00 1,00 1,00 1,00 1,00 0,99 0,99 1,00 1,00 0,99 0,99 1,00 0,97 0,99 1,00 0,99 1,00 0,57 0,55 19,03 1,00 1,00 1,00 1,00 0,98 0,99 1,00 0,99 1,00 1,00 0,99 0,98 1,00 0,99 0,98 0,97 1,00 0,98 0,64 0,61 19,10 0,99 1,00 1,00 1,00 0,99 0,99 0,99 1,00 0,98 1,00 1,00 0,99 0,99 0,99 0,99 0,97 0,96 0,99 0,56 0,56 18,94 1,00 1,00 1,00 1,00 0,97 0,99 0,99 1,00 0,97 1,00 0,99 1,00 0,97 1,00 1,00 0,99 1,00 0,96 0,62 0,61 19,06 0,23 0,00 0,00 1,00 0,23 0,23 0,12 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,23 0,00 0,00 2,04 0,01 0,00 0,00 1,00 0,01 0,01 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,01 0,00 0,00 1,04 0,00 0,00 0,00 1,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 1,00 0,00 0,00 0,00 1,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 1,00 0,00 0,00 0,00 1,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 1,00 1,00 1,00 1,00 1,00 0,98 0,98 0,99 1,00 0,98 1,00 0,99 0,99 1,00 0,98 0,99 0,99 0,99 0,99 0,51 0,52 18,88 1,00 1,00 1,00 1,00 1,00 1,00 0,97 0,97 0,99 1,00 0,99 0,99 0,98 0,99 0,97 0,99 1,00 1,00 0,59 0,60 19,03 1,00 1,00 1,00 1,00 1,00 0,98 0,98 0,98 1,00 1,00 0,99 0,98 0,99 0,97 0,98 0,97 0,98 1,00 0,55 0,53 18,88

Funkcije saetka poruke

SHA-384 SHA-512 Sum-8 Sum-16 Sum-16 BSD Sum-24 Sum-32 Tiger Whirlpool(2001) Whirlpool(2003)

Tablica 24 Rezultati testiranja funkcija saetka poruke (II. dio)

Dobivene (silazno sortirane) ocjene funkcija saetka poruke:


RIPEMD-256(19.23), HAVAL-224(19.21), MD4(19.09), HAVAL-256(19.05), CRC-64(19.04), FNVa-64(19.04), MD5(19.03), HAVAL-192(18.99), MD2(18.99), RIPEMD-128(18.99), HAVAL-128(18.98), RIPEMD-160(18.86), HAS-160(18.84), HAVAL-160(18.8), RIPEMD-320(18.8), CRC-24(18.77), FNV-64(18.7), FNVa-32(18.54), CRC-32(18.19), CRC-32 Bzip2(18.14), CRC-32 POSIX(18.13), CRC-32 Jamcrc(18.07), CRC-32C(17.94), CRC-16 CCITT(17.65), CRC-16 ZModem(14.33), CRC-16 LHA(11.93), CRC-16(10.67), FNV-32(9.1), CRC-16 IBM(7.48), CRC-16 FCS(6.71), CRC-8(3.89), CRC-16 rev.(3.27), CARP(2.02), Adler-32(2), CRC-32 rev.(1.97), CRC-16 CCITT rev.(1.01), CRC-16 XModem(1), Elf(0.99), GHash-32-3(0.99), GHash-32-5(0.99)

Od svih testiranih funkcija saetka poruke, osnovni uvjet prolaznosti nad skupom testova NIST (svi NIST koeficijenti moraju biti vei od 0.5) nisu zadovoljili: Adler-32, CARP,
CRC-8, CRC-16, CRC-16 rev., CRC-16 CCITT rev.,CRC-16 CCITT rev., CRC-16 FCS, CRC-16 IBM, CRC-16 LHA, CRC-16 XModem, CRC-16 ZModem, CRC-24, CRC-32 rev., Elf, FNV-32, FNV-64, GHash-32-3, GHash-32-5, HAVAL-160, RIPEMD-160, Sum-8, Sum-16, Sum-16 BSD, Sum-24, Sum-32.

Od svih testiranih funkcija saetka poruke, osnovni uvjet prolaznosti nad skupom testova FIPS (svi FIPS koeficijenti moraju biti jednaki 1.0) nisu zadovoljili: Adler-32, CARP,
CRC-8, CRC-16, CRC-16 rev., CRC-16 CCITT rev.,CRC-16 CCITT rev., CRC-16 FCS, CRC-16 IBM, CRC-16 LHA, CRC-16 XModem, CRC-32 rev., Elf, GHash-32-3, GHash-32-5, SHA-384, Sum-8, Sum-16, Sum-16 BSD, Sum-24, Sum-32.

Kao to se vidi iz priloenih tablica, rezultati testiranja funkcija saetka poruke su poprilino "areni". Ukoliko se uzme u obzir da su uz kriptografske ovdje testirane i obine funkcije saetka poruke, tada se lako moe zakljuiti otkud ovakva raspodjela rezultata. Naime, pri dizajnu funkcija saetka iz obitelji CRC i/ili Sum vodilo se rauna samo o detekciji mogue promjene (odnosno pogreaka) podataka, bez osvrta na mogunost provjere integriteta poruke. No, poto je provjera integriteta poruke jedna od osnovnih metoda kriptografije, iz teoretskih, a kako se sad moe zakljuiti i iz datih rezultata testiranja, velika veina takvih funkcija saetka u kriptografiji nije poeljna; ovdje takoer spadaju funkcije: Adler-32, Elf, GHash-32-3 te GHash-32-5. 110

Zanimljivo je primjetiti da ocjene testiranih funkcija saetka iz obitelji CRC rastu s koritenom veliinom saetka, dok se njihov mlai potomak CRC-64 moe podiiti da je ocijenjen bolje od polovice kriptografskih funkcija saetka poruke (to znai da ima odlian dizajn, no to ga svejedno ne svrstava u skupinu kriptografskih funkcija saetka poruke). Kriptografske funkcije saetka poruke (HAS-160 te obitelji MD, RIPEMD, SHA, HAVAL) su oekivano visoko ocijenjene, no neke njihove varijante nisu ispunile osnovne uvjete prolaznosti konkretno RIPEMD-160, HAVAL-160 te SHA-384. Kod obitelji FNV funkcija saetka poruke iz dobivenih se rezultata jasno moe razaznati da je varijanta FNV-32 dizajnom osjetno slabija od ostalih varijanti. Tome je vjerojatno kriva neka nesmotrena pogreka u dizajnu. Kod usporedbe dobivenih ocjena funkcija saetka poruke s pojedinim vrstama algoritama za ifriranje, kriptografske se funkcije saetka poruke mogu usporediti s blokovskim algoritmima, dok se ostale funkcije mogu usporediti s kombinacijom rezultata nizovnih i klasinih algoritama za ifriranje.

111

Zakljuak
Povijest kriptografije datira tisuama godina unatrag. Do prolog stoljea to je bila povijest klasine kriptografije metode ifriranja olovkom i papirom, nekim jednostavnim pomagalom ili strojem. Poetkom 20. stoljea, izumom sloenih mehanikih i elektromehanikih ureaja, poput rotorskog stroja Enigme, omogueno je sofisticiranije i efikasnije ifriranje. Daljnjim izumom elektronikog raunala dolo je do uporabe jo sloenijih kriptografskih metoda. Razvoj kriptografije, znanosti o sakrivanju znaenja poruka, uvijek je bio paralelan s razvojem kriptoanalize, znanosti o otkrivanju sakrivenog znaenja poruka. Pronalazak i primjena frekvencijske analize, u svrhu probijana ifriranog teksta, promijenila je tijek povijesti u mnogo navrata. Pretpostavlja se da je II. svjetski rat skraen za par godina, poto su Saveznici uspjeno deifrirali mnoge poruke Nacistike Njemake. Do 1970. godine, sigurni kriptosustavi su bili uglavnom privilegija dravnih vladara. Dva dogaaja su od tad kriptografiju uinila dostupnu svima: donoenje javnog standarda za ifriranje DES (1976.), te izum kriptografije javnog kljua (takoer 1976.). U dananje doba postoji veliki broj kriptografskih sustava, meu njima i besplatnih, koji omoguuju vrlo visoki nivo kriptografske zatite svakome tko to zaeli. U sklopu ovog rada je nastala jedna takva aplikacija s pridruenom programskom knjinicom kriptografskih algoritama. Koritenjem jednostavnog vizualnog suelja, krajnjem se korisniku olakava rad s kriptografskim metodama. Statistikim je testovima mogue provjeriti sluajnost niza podataka. Uz pretpostavku da je dobar kriptosustav ujedno i dobar generator pseudosluajnih brojeva, provedeno je statistiko testiranje nad implementiranim kriptografskim algoritmima. Izneeni su dobiveni empirijski rezultati te su potom prokomentirani. Iz datih se rezultata moe zakljuiti da dananji blokovski algoritmi za ifriranje predstavljaju vrhunac dizajna moderne kriptografije, dok se za klasine algoritme i nekriptografske funkcije saetka poruke moe zakljuiti da su nesigurni za daljnju uporabu.

112

Literatura
[1] [2] [3] [4] [5] [6] [7] [8] [9] PETER THORSTEINSON, G. GNANA ARUN GANESH, .Net Security and Cryptography, Prentice Hall, ISBN 0-131-00851-X, 2003. KARL ENTACHER, A Collection of Classical Pseudorandom Number Generators with Linear Structures, 2000. KARL ENTACHER, A Collection of Selected Pseudorandom Number Generators with Linear Structures, 1997. JOHN J. G. SAVARD, A Cryptographic Compendium, 1998. LAWRIE BROWN, A Current Perspective on Encryption Algorithms, 1998. GEORGE MARSAGLIA, A Current View of Random Number Generators, 1984. LAWRENCE BROWN, JOSEF PIEPRZYK, REIHANEH SAFAVI-NAINI, JENNIFER SEBERRY, A Generalised Testbed for Analysing Block and Stream Ciphers. ROSS N. WILLIAMS, A Painless Guide to CRC Error Detection Algorithms, 1993. BRUCE SCHNEIER, A Self-Study Course in Block Cipher Cryptoanalysis.

[10] NEAL KOBLITZ, A Survey of Public-Key Cryptosystems, 2004. [11] JORG ARNDT, Algorithms for Programmers, 2004. [12] ED SCHAEFER, An Introduction to Cryptography, Santa Clara University. [13] An Introduction to Cryptography, Network Associates, Inc., 1998. [14] GARY C. KESSLER, An Overview of Cryptography, 2005. [15] BRUCE SCHNEIER, Applied Cryptography - Second Edition : Protocols, Algorithms, and Source Code in C, 1996. [16] RANDY NICHOLS, Classical Cryptography Course, Aegean Park Press, 1996. [17] SUSAN LANDAU, STEPHEN KENT, CLINT BROOKS, SCOTT CHARNEY, DOROTHY DENNING, WHITFIELD DIFFIE, ANTHONY LAUCK, DOUG MILLER, PETER NEUMANN, DAVID SOBEL, Codes, Keys and Conflicts, Association for Computing Machinery, Inc., 1994. [18] XIAOYUN WANG, DENGGUO FENG, XUEJIA LAI, HONGBO YU, Collisions for Hash Functions MD4, MD5, HAVAL-128 and RIPEMD, 2004. [19] LAWRIE BROWN, Computer Security & Cryptography, 1999. [20] JOHN KELSEY, BRUCE SCHNEIER, Cryptanalytic Attacks on Pseudorandom Number Generators. [21] TERRY RITTER, Crypto Glossary and Dictionary of Technical Cryptography, 1999. [22] ROSS J. ANDERSON, Crypto in Europe Markets, Law and Policy, Cambridge University Computer Laboratory. [23] JERRY PROC, Crypto Machines, 2004. [24] CLIFFORD BERGMAN, Cryptography, 2004. [25] OLI COOPER, Cryptography, 2001. 113

[26] YEUAN-KUEN LEE, Cryptography. [27] DOUGLAS R. STINSON, Cryptography - Theory and Practice, CRC Press, ISBN 0-84938521-0, 1995. [28] PETER GUTMANN, Cryptography and Data Security, University of Auckland. [29] Cryptography FAQ v1.0, 1994. [30] CHEY COBB, Cryptography for Dummies, John Wiley & Sons, ISBN 0-764-54188-9, 2004. [31] OLIVER PELL, Cryptology. [32] KEN DUNHAM, Cryptology Unit, 1996. [33] OTMAR LENDL, JOSEF LEYDOLD, Documentation for PRNG C library [34] JOE HURD, Elliptic Curve Cryptography, Oxford University, 2005. [35] JUAN SOTO, Empirical Statistical Testing of Cryptographic PRNGs, National Institute Of Standards & Technology. [36] STEFAN WEGENKITTL, Empirical Testing of Pseudorandom Number Generators, Naturwissenschaftlichen Fakultt der Universitt Salzburg, 1996. [37] ERIK OLSON, WOOJIN YU, Encryption for Mobile Computing. [38] PIERRE L'ECUYER, AALDERT COMPAGNER, JEAN-FRANOIS CORDEAU, Entropy Tests for Random Number Generators, ACM TOMACS, 1997. [39] Famous People in The History of Cryptography. [40] Field Manual 34-40-2, United States Army, 1990. [41] FIPS PUB 140-2, National Institute of Standards and Technology, 2002. [42] ODED GOLDREICH, Foundations of Cryptography, Department of Computer Science and Applied Mathematics, Weizmann Institute of Science Rehovot, 1995. [43] Frequently Asked Questions About Today's Cryptography, RSA Laboratories, 2000. [44] ALFRED J. MENEZES, PAUL C. VAN OORSCHOT, SCOTT A. VANSTONE, Handbook of Applied Cryptography, CRC Press, ISBN 0-8493-8523-7, 1996. [45] ANDR SEZNEC, NICOLAS SENDRIER, Hardware Volatile Entropy Gathering and Expansion. [46] PAUL CODDINGTON, Improved Algorithms and Tests for Random Number Generators, Department of Computer Science, University of Adelaide, 1998. [47] ELISABETH OSWALD, Introduction to Elliptic Curve Cryptography, Institute for Applied Information Processing and Communication Graz, 2002. [48] BELLARE, ROGAWAY, Introduction to Modern Cryptography. [49] ANDREW J. CLARK, Key Recovery - Why, How, Who, Sapher Servers Limited, 1997. [50] ANDREJ DUJELLA, Kriptografija, Prirodnoslovno-matematiki fakultet Zagreb. [51] NIKOLA BEGOVI, Kriptografija, Matematiki fakultet Beograd, 2001. [52] SHAFI GOLDWASSER, MIHIR BELLARE, Lecture Notes on Cryptography, 2001. [53] NAT QUEEN, Modern Cryptography. 114

[54] STEFAN WEGENKITTL, Monkeys, Gambling, and Return Times - Assessing Pseudorandomness, Department of Mathematics, University of Salzburg, 1999. [55] ANDREW RUKHIN, JUAN SOTO, JAMES NECHVATAL, MILES SMID, ELAINE BARKER, STEFAN LEIGH, MARK LEVENSON, MARK VANGEL, DAVID BANKS, ALAN HECKERT, JAMES DRAY, SAN VO, NIST Special Publication 800-22, A Statistical Test Suite for Random and Pseudorandom Number Generators for Cryptographic Applications, National Institute of Standards and Technology, 2001. [56] WILLIAM H. PRESS, SAUL A. TEUKOLSKY, WILLIAM T. VETTERLING, BRIAN P. FLANNERY, Numerical Recipes in C, The Art of Scientific Computing, Second Edition, Cambridge University Press, ISBN 0-521-43108-5, 1992. [57] BRUCE SCHNEIER, JOHN KELSEYY, DOUG WHITINGZ, DAVID WAGNERX, CHRIS HALL, NIELS FERGUSON, Performance Comparison of AES Submissions v2.0, Counterpane Systems, 1999. [58] LENKA FIBKOV, JOZEF VYSKO, Practical cryptography - The key size problem, 2001. [59] JANNE FRSEN, Practical Cryptosystems and Their Strength, Department of Computer Science, Helsinki University of Technology, 1995. [60] YONGDAE KIM, PRNG, Block and Stream Cipher, 2001. [61] JOHN WALKER, Probability and Statistics. [62] Procedure for Submitting Cryptographic Techniques, Information-technology Promotion Agency, Japan, 2000. [63] VIVEK BHATNAGAR, CHAITANYA CHERUVU, Pseudo Random and Random Numbers. [64] MOHAN ATREYA, Pseudo Random Number Generators. [65] THIERRY MOREAU, Pseudo-Random Generators, a High-Level Survey-in-Progress, CONNOTECH Experts-conseils Inc., 1997. [66] HELGER LIPMAA, Public-Key Algorithms, Helsinki University of Technology, 2004. [67] CASIMIR C. KLIMASAUSKAS, Random Generators - Why Are They Important, PCAI, Issue 16.3. [68] D. M. CEPERLEY, D.D. JOHNSON, Random Number Generation, 2003. [69] APU KAPADIA, CHARNG-DA LU, Random Number Generators, 2001. [70] TERRY RITTER, Random Numbers in C, 1999. [71] TERRY RITTER, Randomness Tests - A Literature Survey, 2002. [72] ERNESTO GUISADO, Secure Random Numbers, Windows Developer Magazine, 2002. [73] KRIS GAJ, Secure Telecommunication Systems. [74] PETER GUTMANN, Security and Encryption-related Resources and Links. [75] ROSS J. ANDERSON, Security Lecture Notes. [76] MATT CURTIN, Snake Oil Warning Signs: Encryption Software to Avoid, 1998. [77] JOHN DOUGLASS, Some Thoughts on Secure Codes and Other Musings, 1995. [78] DAVID HOPWOOD, Standard Cryptographic Algorithm Naming v1.0.20a, 2002.

115

[79] JUAN SOTO, Statistical Testing of Random Number Generators, National Institute of Standards and Technology. [80] TERRY RITTER, The Efficient Generation of Cryptographic Confusion Sequences, Cryptologia 15(2): 81-139, 1991. [81] DOROTHY E. DENNING, The Future of Cryptography, Georgetown University, 1996. [82] NEAL R. WAGNER, The Laws of Cryptography with Java Code, 2003. [83] JOSEPH YANG, The Myths and Realities of Cryptography, 1998. [84] The PGP attack FAQ v.50, infiNity, 1996. [85] A. M. ODLYZKO, The Rise and Fall of Knapsack Cryptosystems, AT&T Bell Laboratories. [86] THIERRY MOREAU, Thirteen Reasons to Say 'No' to Public Key Cryptography, CONNOTECH Experts-conseils Inc., 1998. [87] ROBERT DAVIES, True random number generators. [88] Whitepaper - Pseudo Random Number Generators, Computer Engineering Laboratory, University of Oulu, Finland, 2004. [89] BRUCE SCHNEIER, Why Cryptography Is Harder Than It Looks, Counterpane Systems, 1997.

116

Skraenice
AES CBC CES CFB CRC CS CTR DES DLL DSA DoS ECB ECC EFF EICG Advanced Encryption Standard Cipher Block Chaining Content Scrambling System Cipher Feedback Cyclic Redundancy Check Cryptographically Secure Counter Data Encryption Standard Dynamic Link Library Digital Signature Algorithm Denial of Service Electronic Code Book Elliptic Curve Cryptography Electronic Frontier Foundation Explicit Inversive Congruential Generators GCHQ Government Communications Headquarters GOST Gosudarstvennyi Standard HMAC Hash-function based Message Authentication Code HTML HyperText Markup Language ICG IDEA LCG LFSR MAC MD Inversive Congruential Generator Linear Congruential Generator Linear Feedback Shift Register Message Authentication Code Message Digest Generator MIT Massachusetts Institute of Technology Napredni standard za ifriranje Vezivanje ifriranih blokova Sustav za ispremjetanje sadraja ifrirana povratna veza Povezani LCG generatori Provjera ciklike zalihosti Kriptografski siguran Broja Standard za ifriranje Knjinica s dinamikom vezom Algoritam digitalnog potpisa Uskraivanje usluge Elektronika kodna knjiica Kriptografija eliptinih krivulja Zaklada elektronike granice Izriito inverzni kongruentni generatori Dravno komunikacijsko sjedite Gospodarstveni standard Autentifikacijska oznaka zasnovana na funkciji saetka poruke Hipertekstualni oznani jezik Inverzni kongruenti generator Lineano kongruentni generator Linearni posmani registar s povr. vezom Autentifikacijski kod poruke Saetak poruke Izriito promjenjeni inverzno kongruentni generatori Institut za tehnologiju, Massachusetts 117

CLCG Combined LCG

International Data Encryption Algorithm Meunarodni algoritam za ifriranje

MEICG Modified Explicit Inversive Congruential

MRG MSB MT NIST NSA OC OFB PGP PKI RNG SIS SHA SOE SSL TEA TTL WEP

Multiple Recursive Generator Most Significant Bit Mersenne Twister National Institute of Standards and Technology National Security Agency Open Collector Output Feedback Pretty Good Privacy Public Key Infrastructure Random Number Generator Signals Intelligence Service Secure Hash Algorithm Special Operations Executive Secure Sockets Layer Tiny Encryption Algorithm Transistor-Transistor Logic Wired Equivalent Privacy

Viestruki rekurzivni generator Najvaniji bit Mersenne uvija Dravni institut za standarde i tehnologiju Dravna sigurnosna agencija Otvoreni kolektor Izlazna povratna veza Posve dobra privatnost Infrastruktura javnog kljua Generator pseudosluajnih brojeva Generator sluajnih brojeva Signalna obavjetajna sluba Siguran algoritam saetka Izvrilac specijalnih operacija Sloj sigurnih spojnica Malen algoritam za ifriranje Tranzistor-tranzistor logika Privatnost jednaka ianoj Proireni malen algoritam za ifriranje

PRNG Pseudorandom Number Generator

XTEA Extended Tiny Encryption Algorithm

118

Dodatak
Sadraj priloenog CD-a po direktorijima:
Aplikacije programska podrka ovog rada (Cipher.NET i TestCSPRNGs) Literatura koritena literatura (u elektronikom obliku) Programski kod programski kod nastao kao rezultat ovog rada Specifikacije algoritama specifikacije implementiranih kriptografskih algoritama

Slika A Sadraj priloenog CD-a

Sav programski kod je pisan u programskom jeziku C#. Za njegovo pravilno prevoenje u izvrni oblik preporuuje se programski paket Microsoft Visual Studio 2003. Prije samog izvoenja aplikacija Cipher.NET i TestCSPRNGs potrebno je instalirati programski paket Microsoft .NET Framework (verziju 1.1 ili noviju) ukoliko to ve dosad nije obavljeno, instalacijski program Microsoft .NET Framework v1.1.exe se moe pronai u direktoriju Aplikacije. Za pokretanje priloenih aplikacija nisu potrebne nikakve dodatne pripreme. U istoimenim se poddirektorijima mogu pronai njihove izvrne verzije: Cipher.NET.exe i TestCSPRNGs.exe. Datoteke (HTML i PDF) s priloenom literaturom imenovane su sukladno s imenima pripadnih radova te su im u zagradama naznaena imena autora. Priloena specifikacija, uz pripadne radove u kojima se moe pronai dizajn (opis) implementiranih kriptografskih algoritama, takoer posjeduje i ogledni programski kod (za veinu algoritama).

119

You might also like