Sei sulla pagina 1di 197

UNIVERZITET SINGIDUNUM

FAKULTET ZA INFORMATIKU I RAUNARSTVO

Saa Adamovi

Zatita informacionih sistema


Prvo izdanje

Beograd, 2015.

Zatita informacionih sistema

Autor:
dr Saa Adamovi
Recenzenti:
dr Milan Milosavljevi
dr Mladen Veinovi
dr Aleksandar Jevremovi
Izdava:
UNIVERZITET SINGIDUNUM
Beograd, Danijelova 32
Za izdavaa:
Prof. dr Milovan Stanii
Tehnika obrada:
Saa Adamovi
Dizajn korica:
Aleksandar Mihajlovi
Godina izdanja:
2015.
Tira:
400 primeraka
tampa:
Mobid, Loznica
ISBN: 978-86-7912-589-7



Ne postoji razlika izmeu teorije i prakse u teoriji,


ali u praksi je ima."
Jan L. A. van de Snepscheut

III

SADRAJ
1.

UVOD U JAVA KRIPTOGRAFSKU ARHITEKTURU...................................... 17


1.1 JCA ekstenzija ........................................................................................ 18
1.2 JCE ekstenzija ........................................................................................ 19
1.3 Arhitektura JCE ekstenzije ..................................................................... 20
1.4 Drugi bezbednosni serivsi u Javi............................................................. 25
1.5 Dinamika registracija provajdera ......................................................... 26

2.

KRIPTOLOKI KLJUEVI I IMPLEMENTACIJA SIMETRINIH IFRI ............ 33


2.1 Generisanje sluajnih brojeva ................................................................ 35
2.2 Generisanje kriptografskih pseudo sluajnih brojeva ............................. 36
2.2.1 Generisanje sluajne vrednosti.......................................................... 37
2.3 Generisanje kriptolokog kljua ............................................................. 40
2.3.1 Nezavisno inicijalizovani algoritmi ..................................................... 42
2.3.2 Specifino inicijalizovani algoritmi ..................................................... 43
2.3.3 Generisanje simetrinog kljua preko SecretKey klase ..................... 43
2.4 Transparentnost generisanih kljueva ................................................... 45
2.4.1 Pretvaranje kljua po specifikaciji nain 1 ...................................... 46
2.4.2 Pretvaranje kljua po specifikaciji nain 2 ...................................... 52
2.5 Kategorizacija simetrinih ifri ............................................................... 53
2.5.1 Upravljanje kljuevima ...................................................................... 54

2.6 Simetrine ifre - ifarska klasa .............................................................. 55


2.6.1 Inicijalizovanje simetrine ifre.......................................................... 58
2.6.2 ifrovanje blokovskom ifrom ........................................................... 60
2.6.3 ifrovanje u CFB reimu blokovska ifra ......................................... 64
2.6.4 Deifrovanje u CFB reimu blokovksa ifra ..................................... 67
2.7 ifrovanje na osnovu lozinke - PBE ........................................................ 69
2.7.1 ifrovanje na osnovu lozinke blokovska ifra ................................. 70
2.8 ifrovanje sa sekvencijalnom ifrom RC4 ............................................... 73
2.8.1 Implementacija RC4 ifre ................................................................... 75

3.

ASIMETRINI KLJUEVI I IMPLEMENTACIJA ASIMETRINIH IFRI .......... 77


3.1 Generisanje asimetrinih kljueva ......................................................... 78
3.1.1 Generisanje kljueva nezavisno od algoritma ................................... 80
3.1.2 Kodne eme za kodovanje kljueva ................................................... 82
3.1.3 Zapisivanje i uitavanje asimetrinih kljueva ................................... 84
3.2 Asimetrine ifre ifarska klasa ........................................................... 86
3.2.1 ifrovanje sa javnim kljuem - RSA .................................................... 88
3.2.2 Deifrovanje sa privatnim kljuem -RSA ............................................ 89
3.3 Protokoli za razmenu tajnog kljua ........................................................ 90
3.3.1 Difi-Helman protokol ......................................................................... 91

4.

HE FUNKCIJE, INTEGRITET PORUKE I DIGITALNI POTPIS....................... 97


4.1 Kriptografske he funkcije ..................................................................... 98
4.1.1 MD5 jednosmerna funkcija ............................................................... 99

VI

4.1.2 SHA jednosmerna funkcije ................................................................. 99


4.2 He funkcije implementacija ............................................................. 101
4.3 Integritet poruke MAC ...................................................................... 106
4.3.1 Generisanje HMAC vrednosti .......................................................... 107
4.3 Digitalni potpis .................................................................................... 110
4.3.1 Digitalno potpisivanje ...................................................................... 111
4.3.2 Verifikovanje digitalnog potpisa ...................................................... 113
4.3.3 Slabosti i alternative ........................................................................ 115

5.

UPRAVLJANJE KLJUEVIMA I SERTIFIKATIMA....................................... 116


5.1 Digitalni sertifikati ............................................................................... 116
5.2 Upravljanje sa Java skladitem kljueva ............................................... 119
5.2.1 Generisanje sertifikata..................................................................... 121
5.2.2 Skladita za simetrine kljueve ...................................................... 125
5.2.3 Uitavanje simetrinih kljueva iz skladita ..................................... 127
5.3 Upravljanje sertifikatima po X.509 standardu ...................................... 128
5.3.1 Kreiranje zahteva za izdavanje sertifikata - CSR .............................. 133
5.3.2 Lista povuenih sertifikata CRL ..................................................... 134
5.3.3 ifrovanje sa digitalnim sertifikatima .............................................. 138
5.3.4 Deifrovanje sa privatnim kljuem .................................................. 139
5.3.5 Jedan scenario sa RSA i tajnim kljuem ........................................... 140

6.

NIST STATISTIKA BATERIJA TESTOVA .................................................. 144


6.1 Pregled statistikih testova .................................................................. 144

VII

6.1.1 Ispitivanje uestalosti u nizu ............................................................ 144


6.1.2 Ispitivanje uestalosti u bloku ......................................................... 145
6.1.3 Ispitivanje uzastopnih ponavljanja istih bitova u nizu ..................... 146
6.1.4 Ispitivanje najdueg uzastopnog ponavljanja jedinica u bloku........ 147
6.1.5 Ispitvanje stanja binarne matrice .................................................... 149
6.1.6 Ispitivanje diskretne Furijerove transformacije ............................... 150
6.1.7 Ispitivanje nepreklapajuih uzoraka ................................................ 151
6.1.8 Ispitivanje preklapajuih uzoraka .................................................... 152
6.1.9 Maurerov univerzalni statistiki test ............................................... 153
6.1.10 Ispitivanje linearne kompleksnosti ................................................ 154
6.1.11 Serijski test uestalosti .................................................................. 155
6.1.12 Ispitivanje pribline entropije ........................................................ 157
6.1.13 Ispitivanje sluajnih zbirova ........................................................... 158
6.1.14 Ispitivanje sluajne digresije .......................................................... 159
6.1.15 Ispitivanje sluajne promenljve digresije....................................... 160
6.2 Java aplikacija sa implementiranom baterijom testova ........................ 162

7.

JEDAN PRIMER SINTEZE SOPSTVENOG IZVORA SLUAJNOSTI ............. 165


7.1 Uloga izvora sluajnosti u kriptografiji ................................................. 165
7.2 Generisanje sluajnosti na osnovu avio saobraaja .............................. 166
7.2.1 Arhitektura izvora sluajnosti .......................................................... 167
7.2.2 Prikupljanje i obrada podataka ........................................................ 168
7.2.3 Analiza kvaliteta izvora sluajnosti .................................................. 169
7.2.4 Java program za prikupljanje podataka u realnom vremenu .......... 173

VIII

DODATAK - PROJEKTNI ZADACI I LABORATORIJSKE VEBE ............................ 176


8.1 Teme za projektni zadatak ................................................................... 176
8.2 Laboratorijske vebe ........................................................................... 178

LITERATURA .................................................................................................... 185


RENIK POJMOVA ........................................................................................... 187

IX

PREDGOVOR

atita informacionih sistema je udbenik namenjen studentima Fakulteta za


informatiku i raunarstvo na Univerzitetu Singidunum. Predvien je za
pripremu ispita iz predmeta Praktikum Zatita informacionih sistema.
Takoe, udbenik mogu koristiti svi oni kojima je potrebno praktino znanje
za pravilnu implementaciju kriptografskih mehanizama u programskom jeziku Java, za
uspean razvoj savremenih informaciono bezbednih poslovnih sistema. Udbeniku
Zatita informacionih sistema, prethodili su udbenici Kriptologija 1, Kriptologija
2 i Osnovi teorije informacija i kodovanja . Navedeni udbenici predstavljaju
teorijski i praktini fundament koji je neophodan za razumevanje i praktino
savladavanje velikog broja primera u ovom udbeniku. Tokom pisanja udbenika
vaila je pretpostavka da budui itaoci ve imaju dobro teorijsko znanje iz
kriptologije i teorije informacija. Verujemo da svi oni koji itaju ovaj udbenik poznaju
terminologiju: provera identiteta, javni klju, privatni klju, digitalni sertifikat, tajni
klju, ifrovanje, deifrovanje i terminologiju iz oblasti teorije informacija.

Sa duge strane, ovaj udbenik predstavlja odlinu vebu ili obuku za Java programere,
koji e upoznati novu terminologiju iz Java kriptografske arhitekture, pravila i principe
za pravilnu implementaciju kriptografskih klasa u poslovne Java aplikacije i servise. Iz
tog razloga ovaj udbenik moe da se koristi i kao uputstvo za upotrebu Java
kriptografske arhitekture - JCA. Zbog svoje velike praktine vrednosti, olakae
studentima reavanje problema koji se odnose prvenstveno na pravilnu
implementaciju kriptografskog Java koda, bez obzira da li je re o velikim
poznavaocima Java programskog jezika.
Razvoj savremenih informacionih tehnologija i edukativnih materijala za njih doveo je
do premetanja razliitih vrednosti na Internet mreu i njene servise. Osnovno
pitanje koje se izdie danas, jeste kako te vrednosti zatititi od zlonamernih akcija,
odnosno kako ikolovati kadar sposoban da se uhvati u kotac sa savremenim
bezbednosnim rizicima i izazovima.

XI

Jedan od osnovnih problema pri uenju kriptologije predstavlja njena kompleksnost i


zasnovanost na sloenim matematikim principima i formulama. Najvei broj
bezbednosnih reenja danas ne zahteva detaljno poznavanje pomenutih
matematikih principa ve samo njihovo osnovno razumevanje i povezivanje sa
ulogom u praktinim reenjima. Prebacivanjem fokusa iz domena matematikih
osnova bezbednosnih reenja u domen praktine primene kod savremenih
informacionih i telekomunikacionih tehnologija znaajno se menja i profil studenata
u ovoj oblasti. Iz tog razloga je ovo preusmerenje neophodno podrati odgovarajuim
edukativnim pristupima, materijalima, savremenim metodama i uslovima za uenje.
Na osnovu dosadanjeg iskustva u ovoj oblasti, veina ljudi pojednostavi ulogu i sam
znaaj kriptografije. esto moemo da ujemo komentar mi smo dovoljno bezbedni,
ifrovali smo podatke ili izraunali smo he od lozinke, ali miljenje mojih kolega i
moje miljenje je da to praktino nita ne znai. Da bismo se uverili koliko je procena
snage jednog kriptografskog sistema kompleksna, postaviemo sledea pitanja na
koja je potrebno odgovoriti preko poglavlja sadranih u udbeniku. Koliko je
kriptoloki klju jak? ta predstavlja efikasnu duinu kriptolokog kljua? Koji reim
ifrovanja ste koristili kod simetrinih ifara? Na koji nain upravljate kljuevima?
Kako generiete kljueve? ta je uzeto za izvor sluajnosti? Da li ste testirali
informacionu snagu kljua? ta znai sertifikat od poverenja? Da li pravite dobar
odabir ifre? Da li su podaci ifrovani na memorijskom modulu ili se nalaze u
ifrovanoj formi za vreme transmisije? Na osnovu postavljenih pitanja, ukazujemo na
gradivne komponente jednog kriptografskog sistema preko koga moemo da
postavimo teorijske okvire koje treba uzeti u razmatranje pri proceni snage
kriptografskog sistema. U protivnom, svi drugi komentari poput onih na poetku
pasusa predstavljaju kriptografsku neistinu koja vrlo lako moe dovesti do ozbiljnih
posledica zbog neosnovanog oseaja za stepen implementirane bezbednosti.
Kriptografija kao oblast ukljuuje ifrovanje sa simetrinim i asimetrinim
algoritmima, jednosmerne funkcije i razliite digitalne sertifikate za digitalno
potpisivanje i ifrovanje. Kada je re o ifrovanju, bitno je naglasiti da taj deo
kriptografije posmatramo sa aspekta perfektnih i neperfektnih ifara. Novinu u
kriptografiji predstavljaju novi trendovi razvoja ove oblasti koja se okree ka smeru
perfektnih bezbednosnih sistema na fizikom sloju. Kada je re o autentifikaciji,

XII

autentifikacija je direktno povezana sa kriptografijom i tu vezu potvruje primena


kriptografije sa javnim kljuem u protokolima za reavanje problema jednostrane ili
uzajamne autentifikacija. Upravo, cilj ovog udbenika je da preko sledeih poglavlja
edukuje novu generaciju kriptografa koja e moi da odgovori svim izazovima u
budunosti.
U prvom poglavlju, napravili smo detaljan uvid u Java kriptografsku arhitekturu.
Diskutovali smo o JCA i JCE kriptografskoj ekstenziji i razliitim provajderima
bezbednosti koji obezbeuju iroku paletu kriptografske funkcionalnosti. Takoe,
prikazali smo specifikaciju dostupnih algoritama i odreena ogranienja za Java
SunJCE provajder. Na kraju poglavlja, napravljen je osnovni pregled i drugih
bezbednosnih nekriptografskih servisa u Javi.
U drugom poglavlju bavimo se implementacijom simetrinih ifri. Polazei od
osnovnih Kerkehofih principa (tajnost lei u snazi kljua), prvo je pokazana
implementacija algoritma za generisanje kriptografski sluajnih brojeva. Zatim,
preli smo na upotrebu klasa za kreiranje kriptografske specifikacije kljua na razliite
naine (transparentno ili netransparentno). Posle razumevanja procesa za
generisanje tajnog kljua u Javi, implementirali smo nekoliko simetrinih ifri sa
razliitim parametrima algoritama, pod im podrazumevamo naziv ifre, ifarski reim
i emu dopune otvorenog teksta. Pored implementacije simetrinih ifri (blokovske i
sekvencijalne), razmatrali smo metode za generisanje kriptolokog kljua na osnovu
korisnikih lozinki PBE algoritam.
U treem poglavlju bavimo se implementacijom asimetrinih ifri, kao i generisanjem
para kljueva (javni i privatni). Posebno stavljamo fokus na kodne eme (X.509,
PKCS#8) koje se koriste za javni i privatni klju. Zatim, implementiramo ifre iz
asimetrine kriptografije za operacije ifrovanja ili deifrovanja preko RSA algoritma.
Na kraju ovog poglavlja razmatramo o protokolima za razmenu simetrinih kljueva
koji kao osnovu koriste asimetrinu kriptografiju. Pored teorijske osnove, data je
kompletna implementacija algoritma za generisanje Difi-Helman parametara i
algoritma za razmenu kljua preko Difi-Helman protokola (Alisa i Bob scenario), preko
koga Alisa i Bob razmenjuju ifrovane poruke.

XIII

U etvrtom poglavlju, bavimo se implementacijom jednosmernih funkcija,


jednosmernih HMAC funkcija za proveru integriteta poruke (u prenosu preko kanala)
i digitalnim potpisom. Pored implementacije MD5 i SHA verzija jednosmernih
funkcija, analiziramo performanse istih funkcija. Zatim, diskutujemo o dizajnu HMAC
algoritma i njegovoj pravilnoj implementaciji preko istih Java klasa koje se koriste za
generisanje tajnog kljua za simetrine ifre. Prikazaemo dva naina za generisanje
tajnog kljua. Na kraju poglavlja obavljena je pravilna implementacija generisanja
digitalnog potpisa sa javnim privatnim kljuem, kao i implementacija Java koda za
verifikovanje digitalnog potpisa javnim kljuem.
Peto poglavlje udbenika odnosi se na upravljanje sa tajnim kljuevima i sertifikatima.
Polazei od teorijske osnove digitalnih sertifikata, prelazimo na metode za
generisanje digitalnih sertifikata preko alata KeyTool u Javi. Upoznaemo se sa svim
funkcionalnostima ovog alata (generisanje sertifikata, izvoz sertifikata, uvoz
sertifikata, potpisivanje sertifikata i brisanje). Posle par primera u KeyTool-u, iste
primere emo da realizujemo programski, tj. nezavisno kroz programski kod Java
jezika. Osim, rada sa digitalnim sertifikatima, na slian nain emo generisati tajne
kljueve koje emo takoe, uskladititi preko Java KeyStore-a. Videemo na koji nain
se regulie kontrola pristupa skladita, kako se odreuju tipovi skladita (JKS, JCEKS,
BCKS, i td.) prema nameni, kao i kontrola pristupa entitetima unutar jednog skladita
(postavljanje lozinke za PBE ifrovanje skladita). Na kraju petog poglavlja, bavimo se
mehanizmima za proveru autentinosti potpisanih sertifikata, mehanizmima za
povlaenje sertifikata - CRL liste i demonstriramo jedan primere sa upotrebom
digitalnog sertifikata za ifrovanje i deifrovanje.
U estom poglavlju dat je detaljan pregled NIST statistike baterije testova sa
primerima. Osnovna namena ovih testova je da procene kriptoloki kvalitet sekvenci
dobijenih preko nekog izvora sluajnosti, a na osnovu kojih se kasnije generiu
kriptolokih kljuevi za zadate algoritamske specifikacije. Na kraju poglavlja,
predstavljena je upotreba jedne grafike aplikacija (razvijene na Univerzitetu
Singidunum) u kojoj su implementirani skoro svi testovi za procenu stepena
sluajnosti. Pored testova, aplikacija ima mogunost da generie sluajne vrednosti
preko AES-a i DES-a.

XIV

U sedmom poglavlju, diskutovaemo o jednom alternativnom izvoru sluajnosti, koji


predstavlja nauni doprinos profesora i studenata sa Univerziteta Singidunum. Uloga
ovakvih izvora je da se izgradi pouzdan generator kriptolokih kljueva preko koga e
studenti imati mogunost da u svojim kriptografskim programima uvedu sopstveni
izvor sluajnosti za potrebe kriptografskih algoritama, za zamenu umesto do sada
koriene SecureRandom ili Random klase u Java programskom jeziku. Takoe,
uz pomo sopstvenog izvora sluajnosti, studenti imaju mogunost da u svojim
praktinim radovima dizajniraju sisteme za distribuciju kriptolokih kljueva preko
javnih komunikacionih kanala.
U poslednjem osmom poglavlju, predstavljene su preliminarne teme koje studenti
mogu da izaberu i zadaci za laboratorijske vebe koje su obavezne za proces
savladavanja gradiva iz ovog udbenika. Svaka uspena realizacija projektnog rada
vodi ka izradi kvalitetnog diplomskog rada, to pored steenog praktinog znanja iz
oblasti zatite informacija, predstavlja jo jedan dodatni cilj.
Na kraju, zahvaljujem se recenzentima na korisnim sugestijama koje su unete u
udbenik. Posebnu zahvalnost dugujem profesorima, prof. dr Milanu Milosavljeviu i
prof. dr Mladenu Veinoviu, koji su mi svojim savetima na osnovu dugogodinjeg
iskustva u ovoj naunoj oblasti, neizmerno pomogli i bili inspiracija u pisanju
udbenika. Ovo je prvo izdanje, te su sve kritike i sugestije itaoca dobro dole.

Beograd, 2015. godine


Saa Adamovi

XV

____________________________________________________________________________
Zatita informacionih sistema

1. UVOD U JAVA KRIPTOGRAFSKU ARHITEKTURU


Izvoz kriptografije iz Sjedinjenih Amerikih Drava (engl. U.S. Export Laws),
podrazumevao je transfer kriptografskih ureaja i tehnologije u druge zemlje van
SAD-a. Do 1992. godine postojala su vrlo stroga ogranienja koja su se ticala izvoza u
druge zemlje, ali posle 2000-te godine izvoz je doputen, ali i dalje su ostale neke
restrikcije. Od 2009. godine, izvoz kriptografije iz SAD koja se ne koristi u vojne svrhe
je pod kontrolom Ministarstva za trgovinu, Biroa za industriju i bezbednost.
Restrikcije koje jo postoje, posebno se odnose na neureene zemlje i teroristike
organizacije. Na primer, vojna oprema, ureaji i namenski kriptografski programi, kao
i konsultantske kriptografske usluge i dalje zahtevaju izvoznu dozvolu.
Java programski jezik obezbeuje paletu kriptografskih funkcionalnosti koristei dva
API-ja (engl. APIs), JCA i JCE ekstenziju. Preko ove dve kriptografske biblioteke
obezbeene su sve kriptografske funkcije.

Slika 1.1 Java kriptografski API-ji i provajderi funkcionalnosti


Osnovni dizajnerski principi, uvedeni prilikom razvoja ovih kriptografskih ekstenzija
su:

Algoritamska nezavisnost;
Algoritamska proirivost mogunost za uvoenje novih algoritama;

17

_____________________________________________________________________________
Zatita informacionih sistema

Nezavisna implementacija korienje provajdera za obezbeenje razliitih


kriptografskih servisa;
Interoperabilna implementacija provajderi imaju mogunost da
meusobno sarauju jedan sa drugim;

Sledi lista provajdera dostupna za JCA i JCE funkcionalnosti za Java platformu 7


(JPSE7):
x
x

SunPKCS11

SunRsaSign

SunJCE

SunSASL

SUN

SunJSSE

SunJGSS

XMLDSig

SunMSCAPI

SunPCSC

SunEC
OracleUcrypto

1.1 JCA EKSTENZIJA


Java kriptografska arhitektura JCA (engl. Java Cryptography Architecture)
predstavlja bezbednosno okruenje integrisano sa jezgrom Java aplikacije.
Obezbeuje sledee klase i funkcionalnosti:
x

18

MessageDigest - he vrednosti,

Signature - digitalni potpis,

KeyFactory i KeyStore upravljanje i uvanje kljueva,

KeyPairGenerator - generisanje para kljueva (PKI),

SecureRandom kriptografski izvor sluajnosti,


AlgorithmParameters upravljanje sa svim parametrima algoritma,

____________________________________________________________________________
Zatita informacionih sistema

x
x

AlgorithmParameterGenerator generisanje svih parametara za


traeni algoritam,
CertificateFactory generisanje digitalnih sertifikata,
CertPathBuilder uspostavljanje lanane veze izmeu sertifikata,
CertStore - upravljanje sa digitalnim sertifikatima (izdavanje sertifikata,
povlaenje, verifikacija i td);

Fundamentalne klase i interfejsi JCA proirenja su:


x
x
x
x
x
x

javax.crypto.Cipher kriptografski ifarski objekat koji se koristi za


ifrovanje ili deifrovanje;
javax.crypto.CipherStream klase koje prilagoavaju ifre za rad
sa Java I/O (ulazni/izlazni) tokovima podataka;
javax.crypto.KeyGenerator koristi se za generisanje simetrinog
kriptolokog kljua;
java.security.KeyFactory koristi se za konvertovanje kljua u
zadati format koji je definisan od strane ifre koja e se koristiti, a sve na
osnovu inicijalnog materijala za klju, generisanog na sluajan nain;
java.security.KeyPairGenerator koristi se za generisanje novog
para asimetrinih kljueva;
javax.crypto.Mac koristi se za generisanje MAC vrednosti za neki
tekst predstavljen kao niz bajtova;

Takoe, postoje i mnoge druge klase i interfejsi u paketima, ali ove klase
predstavljaju kljune klase i interfejse. Od navedenih klasa, verovatno najosnovnija je
Cipher klasa, jer svaki kriptografski servis podrazumeva neki vid ifrovanja i
deifrovanja.

1.2 JCE EKSTENZIJA


Java kriptografska ekstenzija JCE (engl. Java Cryptography Extension) obezbeuje
programske biblioteke za primenu kriptografskih funkcija u Java kodu. Tanije, JCE
nasleuje JCA i proiruje ga sa veim brojem klasa i provajdera. Jedan od dodatnih

19

_____________________________________________________________________________
Zatita informacionih sistema

provajdera je SUNJCE, koji ukljuuje jednu ili vie kriptografskih klasa. Ne zaboravimo
da podela koja je nastala razdvajanjem JCA i JCE ekstenzije, ne predstavlja podelu
prema tehnikim ogranienjima, ve prema tadanjim politikim situacijama.
JCE obezbeuje sledee klase i funkcionalnosti:
x

Cipher- izvodi operaciju ifrovanja ili deifrovanja,

SecretKeyFactory- izvrava se iskljuivo nad instancom SecretKey,

KeyGenerator- generie kriptoloke kljueve,

KeyAgreement razmena simetrinih kljueva izmeu vie strana,


Mac autentinost poruke;

Moemo da kaemo da JCA i JCE zajedno predstavljaju kompletnu kriptografsku


platformu. Meutim, postoje razliite zamerke od strane programera. Neke od njih
su lokacije kriptografskih klasa, da li je smetena u java.security ili u
javax.crypto paketu. Klase JCA ekstenzije su smetene u java.security
paketu, dok su klase JCE ekstenzije smetene u javax.crypto paketu. Postoje
dodatne zamerke i na hijerarhiju klasa. JCA se pridrava strogih obrazaca kada je re
o apstraktnim klasama, dok to nije sluaj sa JCE.
U narednom poglavlju razmotriemo u kakvom su odnosu Java JCE ekstenzija i druge
Java bezbednosne ekstenzije.

1.3 ARHITEKTURA JCE EKSTENZIJE


Treba imati na umu da je JCE dizajniran da obezbedi generiki skup servisa koji je
nezavisan od proizvoaa softvera. Tada razliiti proizvoai mogu napisati
implementaciju tih servisa, koji se nazivaju provajderi. Razliiti proizvoai nude
provajdere sa razliitim grupama funkcionalnosti i sa razliitim karakteristikama.

20

____________________________________________________________________________
Zatita informacionih sistema

Slika 1.2 JCE biblioteka i podrka od strane vie provajdera


Programeri prilikom razvoja nekog softvera mogu prikljuiti razliite provajdere (vie
od jednog istovremeno A, B, ....Z) i da tako iskoriste mogunosti i prednosti
pojedinano svakog od njih. Meutim, ovaj pristup u razvoja softvera sa JCE
arhitekturom omoguava programerima da jednostavno zamene jedan provajder sa
drugim.
Statiki deklarisani provajderi nalaze se obino u fajlu na lokaciji: C:/Program
Files/Java/jre7/lib/security/java.secutity. Sledi deo sadraja fajla koji se odnosi na
provajdere:

U nastavku ovog dela, prikazaemo specifikaciju dostupnih algoritama i odreene


restrikcije provajdera SunJCE.
Tabela 1.1 Dostupni algoritmi u provajderu SunJCE
Klase

Naziv algoritma

AlgorithmParameterGenerator

DiffieHellman

21

_____________________________________________________________________________
Zatita informacionih sistema

22

AlgorithmParameters

AES
Blowfish
DES
DESede
DiffieHellman
OAEP
PBEWithMD5AndDES
PBEWithMD5AndTripleDES
PBEWithSHA1AndDESede
PBEWithSHA1AndRC2_40
RC2

Cipher

Sledea tabela

KeyAgreement

DiffieHellman

KeyFactory

DiffieHellman

KeyGenerator

AES
ARCFOUR
Blowfish
DES
DESede
HmacMD5
HmacSHA1
HmacSHA256
HmacSHA384
HmacSHA512
RC2

KeyPairGenerator

DiffieHellman

KeyStore

JCEKS

____________________________________________________________________________
Zatita informacionih sistema

Mac

HmacMD5
HmacSHA1
HmacSHA256
HmacSHA384
HmacSHA512

SecretKeyFactory

DES
DESede
PBEWithMD5AndDES
PBEWithMD5AndTripleDES
PBEWithSHA1AndDESede
PBEWithSHA1AndRC2_40
PBKDF2WithHmacSHA1

Tabela 1.2 Dostupne ifre u provajderu SunJCE


Naziv algoritma

Reimi

Dopune

AES

ECB, CBC, PCBC, CTR,


CTS, CFB, CFB8..CFB128,
OFB, OFB8..OFB128

NOPADDING,
PKCS5PADDING,
ISO10126PADDING

AESWrap

ECB

NOPADDING

ARCFOUR

ECB

NOPADDING

Blowfish, DES, DESede,


RC2

ECB, CBC, PCBC, CTR,


CTS, CFB, CFB8..CFB64,
OFB, OFB8..OFB64

NOPADDING,
PKCS5PADDING,
ISO10126PADDING

DESedeWrap

CBC

NOPADDING

23

_____________________________________________________________________________
Zatita informacionih sistema

PBEWithMD5AndDES,
PBEWithMD5AndTripleD
ES1PBEWithSHA1AndDES
ede,
PBEWithSHA1AndRC2_40

CBC

PKCS5Padding

RSA

ECB

NOPADDING,
PKCS1PADDING,
OAEPWITHMD5ANDMGF1P
ADDING,
OAEPWITHSHA1ANDMGF1P
ADDING, OAEPWITHSHA1ANDMGF1PADDING,
OAEPWITHSHA256ANDMGF1PADDING,
OAEPWITHSHA384ANDMGF1PADDING,
OAEPWITHSHA512ANDMGF1PADDING

Tabela 1.3 Restrikcije veliine kljua - KeyGenerator


Naziv algoritma

Standardna
veliina
kljua

Restrikcije

AES

128

Veliina kljua moe da bude 128, 192 i 256


bitova.

ARCFOUR (RC4)

128

Veliina kljua mora da bude u opsegu


izmeu 40 i 1024 bita.

24

____________________________________________________________________________
Zatita informacionih sistema

Blowfish

128

Veliina kljua mora biti deljiva sa 8, u opsegu


od 32 do 448 bitova.

DES

56

Veliina klju je tano 56.

DESede (Triple DES)

168

Veliina kljua moe da bude 112 ili 168


bitova.

HmacMD5

512

Nema restrikcije.

HmacSHA1

512

Nema restrikcije.

HmacSHA256

256

Nema restrikcije.

HmacSHA384

384

Nema restrikcije.

HmacSHA512

512

Nema restrikcije.

RC2

128

Veliina kljua mora da bude u opsegu


izmeu 40 i 1024 bita.

1.4 DRUGI BEZBEDNOSNI SERIVSI U JAVI


Vei deo rada u Javi uloen je na bezbednost, mislimo prvo na obezbeenje same
Java virtuelne maine JVM (engl. Java Virtual Machine). Ovaj rad prvenstveno je
usmeren na onemoguavanje zlonamernog programa ili loe logiki osmiljenog koda
da ugrozi rad raunara ili aplikacije, kao i podatke korisnika. Sve to ukljuuje stvari
kao to su menaderi bezbednosti, tanije servisi za privilegovane segmente koda,
pravila koja kontroliu ta je Java kodu dozvoljeno da uradi, a ta ne. Ovi servisi se
nalaze u jezgru Java virtuelne maine i upravljaju servisima bezbednosti unutar nje.
Sutinski, stalno analiziraju kod koji se izvrava.
Meutim, kako se Java vremenom razvijala, postala prisutna i u irem poslovnom
okruenju, javila se potreba za servisom autentinosti i servisom za autorizaciju, da bi

25

_____________________________________________________________________________
Zatita informacionih sistema

se ovlastio vei broj korisnika u Java okruenju. Dobar primer su vie korisnika
okruenja. Vie korisnika okruenja zahtevaju proveru identiteta korisnika, posebno
u momentima kada treba da donesu autorizovanu odluku zasnovanu na identitetu. U
cilju zamene nestandardnih reenja od strane vlasnika Java koda, razvijen je Java
servis za autentifikaciju i autorizaciju JASS (engl. Java Authentication and Authorization Service).
Paralelno sa razvojem JASS servisa, razvijen je servis za bezbednu mrenu
komunikaciju JSSE (engl. Java Secure Sockets Extension) i servis za bezbednosni
programski interfejs GSS-API (engl. Generic Security Services Application Programming Interface) koji omoguava programeru da na bezbedan nain promeni
kriptografske mehanizme u aplikaciji ukoliko u budunosti bude potrebe za tim, ali ne
zahtevajui ponovno pisanje koda aplikacije. Ovi servisi primarno su usmereni na
stvaranje bezbedne komunikacije i administrativne kontrole pristupa u Java
programima.
JCE biblioteka dopunjava navedene bezbednosne servise (sa kriptografskog aspekta),
pruajui podrku za obavljanje optih kriptografskih aktivnosti u Javi, dok ostale
tehnologije mogu ili ne, direktno koristiti JCE ekstenziju, jer su i one takoe,
konceptualno izgraene na istim kriptografskim tehnikama sa implementacijom po
standardima koje propisuje NIST (engl. National Institute of Standards and Technology) organizacija. Sada moemo lako da pretpostavimo da je Java JCE ekstenzija u
osnovi nastala kao podrka Java programerima, da na pravilan nain, a to znai
potujui osnovna pravila i principe, implementiraju kriptografske mehanizme u svoje
Java aplikacije.

1.5 DINAMIKA REGISTRACIJA PROVAJDERA


U ovom delu prikazaemo jednu dinamiku registraciju, jednog od poznatijih
provajdera. Re je o kriptografskom provajderu BouncyCastle. BouncyCastle je
kolekcija API-ja koji se koriste u kriptografske svrhe. Api ima podrku za Java i C#
programski jezik.

26

____________________________________________________________________________
Zatita informacionih sistema

BouncyCastle je australijskog porekla i iz tih razloga, kriptografske izvozna


ogranienja SAD-a, ne odnose se na njega. Kompletnu JAR biblioteku mogue je
preuzeti preko sledeeg linka:
http://www.bouncycastle.org/latest_releases.html
Posle preuzimanja biblioteke, potrebno je uraditi sledee korake za uspenu
dinamiku registraciju BounCycastle provajdera.
1. Biblioteku JAR (bcprov-jdk15on-151.jar) sauvati u glavnom projektu u
folderu MojiProvajderi;
2. Preko interfejsa NetBeans razvojnog okruenja, vrlo jednostavno se uvezuje
biblioteka sa kompletnim projektom;

Slika 1.3 Instalacija drugih biblioteka

27

_____________________________________________________________________________
Zatita informacionih sistema

U sledeem Java primeru, izvriemo dinamiku registraciju BouncyCastle provajdera.


Program ispisuje naziv i verziju raspoloivog provajdera.

Primer 1.1 Dinamika registracija provajdera


Programski izlaz:

U primeru (Primer 1.2), pokazaemo na koji nain da izlistamo sve podrane


jednosmerne funkcije (MessageDigest) u BouncyCastle provajderu. Ukoliko elimo da
prikaemo sve podrane algoritme iz ifarske klase, umesto stringa MessageDigest
uneemo Cipher. Cipher je klasa iz Java kriptografske arhitekture. Klasa obezbeuje
metode za upravljanje sa ifarskim algoritmima.

28

____________________________________________________________________________
Zatita informacionih sistema

Primer 1.2 Generisanje listinga za MessageDigest grupu algoritama


Programski izlaz:

29

_____________________________________________________________________________
Zatita informacionih sistema

Neke Java klase koje emo kasnije koristiti u primerima nisu podrane od strane
standardnih provajdera za JCA i JCE, tako da je za potrebe laboratorijskog neophodno
registrovati i druge kriptografske provajdere. U primerima koji kasnije slede,
naveemo svaki put kada uvedemo novi provajder u upotrebu.

30

____________________________________________________________________________
Zatita informacionih sistema

U primeru (Primer 1.3), videemo kako jednostavno moemo da prikaemo listu svih
podranih kriptografskih servisa od unutar BouncyCastle provajdera.

Primer 1.3 Generisanje liste dostupnih kriptografskih servisa


Prikazana su dva izlaza iz program. Prvi izlaz predstavlja listu servisa dobijenih za
standardni provajder, tj. registrovan prilikom prve instalacije JVM. Standardni
provajder je SunJCE i u tom sluaju potrebno je prvu liniju koda oznaiti kao
komentar (//).
Drugi izlaz predstavlja listu servisa dobijenih za naknadno dinamiki registrovani
provajder BouncyCastle.
Komparativnom analizom ove dve liste, moemo da utvrdimo da provajder
BouncyCastle obezbeuje podrku za jo jedan dodatni servis X509Store- servis
za upravljanje digitalnim sertifikatima.

31

_____________________________________________________________________________
Zatita informacionih sistema

Izlaz iz obe verzije programa:

32

____________________________________________________________________________
Zatita informacionih sistema

2. KRIPTOLOKI KLJUEVI I IMPLEMENTACIJA SIMETRINIH IFRI


Nakon to smo razumeli kako JCA i JCE obezbeuju neophodnu infrastrukturu za
primenu kriptografskih operacija u Javi, spremni smo da istraimo sve funkcionalnosti
za pravilno konstruisanje simetrinih ifri, ali pre nego to doemo do prvog primera
u kome emo demonstrirati korienje simetrine ifre, napraviemo jedan teorijski
osvrt na simetrine blokovske ifre.
U klasinoj kriptografiji koriste se takozvani papir olovka algoritmi. Koristio se isti
klju za ifrovanje i deifrovanje (simetrini klju). Otvoreni tekst i ifrat se uglavnom
predstavljao sa slovima. Krajem Drugog svetskog rata, uvedeni su raunari u
kriptoanalizu, to je dalje indukovalo i kod kriptografa upotrebu raunara za
ifrovanje i deifrovanje.
Moderni algoritmi podrazumevaju fazu kodovanja, otvoreni tekst se pre ifrovanja
prvo predstavi preko binarnih nizova ili bitova. Nain kodovanja nije tajna, koristi se
ASCII tabela. ASCII tabela je skraenica od Ameriki standardni kod za razmenu
podataka. Algoritmi za ifrovanje i deifrovanje sada rade na nizovima bita, a tako
smo dobili digitalno ifrovanje.
ifrovanje pomou raunara je u osnovi slino klasinim oblicima ifrovanja. I dalje se
koriste kombinacije transpozicije premetanja i supstitucije zamene. Postoje
brojne prednosti moderne kriptografije u odnosu na klasinu kriptografiju od kojih
izdvajamo dve najbitnije. Prva prednost je u tome da je mogue realizovati daleko
sloenije ifre primenom raunara za razliku od onih koje se realizuju mehanikim
putem. Druga, elektronika je neuporedivo bra od mehanike to utie na brzinske
performanse algoritama za ifrovanje i deifrovanje.
Blokovske ifre se mogu posmatrati kao moderni naslednici klasinih kodnih knjiga
gde klju odreuje kodnu knjigu. Unutranji rad algoritama savremenih blokovskih
ifara je kompleksan. Kod blokovskih ifara, otvoreni tekst se deli na blokove fiksne i
zadate duine (64, 128, 192, 256) u bitovima, zatim se svaki blok nezavisno ifruje.
Interno, blokovske ifre primenjuju i konfuziju i difuziju.

33

_____________________________________________________________________________
Zatita informacionih sistema

Slika 2.1 Princip rada simetrine ifre


Blokovske ifre kombinuju zajedno svojstvo difuzije, svojstvo konfuzije i
kompletnosti. Blok otvorenog teksta odrediemo sa Pi, a blok ifrata Ci. Difuzija
podrazumeva da poznavanje para Pi i Ci ne sme da omogui da se na osnovu Cj
odredi odgovarajue Pj. Kod blokovskih ifara zahtevano je da male promene u bloku
otvorenog teksta (1 bit), izazovu nepredvidive promene u datom bloku ifrata.
Svojstvo konfuzije podrazumeva da e svi kljuevi biti jednako verovatni u sluaju
napada potpunom pretragom kljueva. Na kraju, celovitost podrazumeva da e svaki
bit ifrata postati funkcija svakog bita kljua.
Ciljevi dizajna blokovskih ifri su sigurnost i efikasnost. Nije toliko teko razviti
razumno sigurnu blokovsku ifru ili efikasnu blokovsku ifru, ali dizajnirati neto to je
i sigurno i efikasno, zahteva visok stepen kriptografskog umea. Blokovske ifre se
najee realizuju softverski.
Simetrini ifre i skoro svi drugi ifarski mehanizmi u kriptografiji zahtevaju pouzdan
generator brojeva. Odreena koliina sluajnih brojeva predstavlja materijal za
izgradnju kriptolokog kljua. Pod sluajnim brojevima podrazumevamo samo isto
sluajne brojeve koje je mogue dobiti samo preko nekog prirodnog izvora
informacije. U potreba pseudo sluajnih brojeva u ove svrhe nije dozvoljena, jer na
taj nain protivnik bi mogao uz vrlo mali broj pokuaja da reprodukuje istu sekvencu
brojeva i tako doe do otvorenog teksta. Pre nego to konstruiemo prvu blokovsku

34

____________________________________________________________________________
Zatita informacionih sistema

ifru preko JCE proirenja u Javi, prvo emo se osvrnuti na sluajne brojeve koje je
mogue generisati preko JCA proirenja u Javi.

2.1 GENERISANJE SLUAJNIH BROJEVA


Kao to smo ve rekli u prethodnom poglavlju o znaaju sluajnih brojeva i nainima
da se doe do njih, mi nemamo mogunost da tako jednostavno poveemo na
raunar na kome obavljamo kriptografske operacije na neki prirodni izvor informacije
koji bi iskoristili za generisanje simetrinog kljua. Iz tog razloga i dan danas sva
istraivanja na ovom polju su usmerena na upotrebu raunara i softvera za
generisanje kvalitetnih pseudo sluajnih brojeva.
Danas, skoro na svim softverskim platformama lako je pronai algoritam koji treba da
obezbedi generisanje kriptografskih pseudo sluajnih brojeva ili skraenica CSPRNG
(engl. Cryptographically Secure Pseudo-Random Number Generator). Meutim, ne
smemo da zaboravimo Kerkehove principe, koji kau da se itava tajnost jednog
sistema oslanja na kvalitet kriptolokog kljua, a ne na sam algoritam, ali uglavnom se
pretpostavlja da kriptoanalitiar pokuava da deifruje ifrat na osnovu svih
dobijenih detalja o korienoj ifri.
Polazimo od pretpostavke da je ifrat jak samo u sluaju ako je za ifrovanje korien
tajni klju za ifrovanje poruke. Veliina prostora kljueva predstavlja broj moguih
kombinacija koje je mogue koristiti u izabranom ifarskom algoritmu. Na primer, ako
je veliina kljua 64 bita, tada je prostor kljueva ili broj kombinacija . Treba imati
na umu da poveanjem kljua za jedan bit, ostvarujemo eksponencijalni rast prostora
kljueva i da tako smanjujemo mogunost za razbijanje neke ifre.
Na primer, 2006. je napravljena nova maina COPACABANA od strane tima sa
Univerziteta Bohumu i Kil u Nemakoj. Za razliku od drugih maina ova maina je
komercijalno dostupna. U 2008. godini razvijena je nova verzija, COPACABANA
RIVYERA koja je smanjila vreme potrebno za razbijanje DES-a na manje od jednog
dana. Ona koristi 128 Spartan-3 5000 FPGA ipove. Trenutno SciEngines kompanija u
Nemakoj RIVYERA dri rekord u razbijanju DES-a metodom potpune pretrage
kljueva. Jedan od zanimljivijih aspekata projekta COPACABANA je koliina potrebnog

35

_____________________________________________________________________________
Zatita informacionih sistema

novca za izgradnju takvog hardvera. Jedna maina moe se napraviti za 10.000


dolara.
U nastavku razmotriemo i primenu lozinki u ulozi tajnog kriptolokog kljua. ta je
zapravo stvarana duina lozinke? Ukoliko koristimo velika slova, mala slova i brojeve,
tada emo ostaviti na korienje samo 62 znaka ([A Z], [a z], [0 9]).
Ukoliko pretpostavimo da je naa lozinka StuDent, u tom sluaju ako je
kriptoanalitiaru poznat skup korienih karaktera, broj kombinacija je
62*62*62*62*62*62*62, gde svaki karakter moe da bude na bilo kojoj poziciji, u
tom sluaju imamo 3,521,614,606,208 kombinacija. Snagom dananjih procesora,
ovaj broj ne predstavlja veliki izazov. Meutim, ako se pretpostavi da je lozinka
sadrana u reniku, tada je razbijanje lozinke od 7 karaktera jo manje vremenski
zahtevno.
Upravo smo nagovestili problem koji je prisutan kod lozinki, ljudi nemaju mogunost
da zapamte kompleksne lozinke koje bi bile dovoljnog kvaliteta za ifrovanje
podataka. Iz tog razloga JCA proirenje ukljuuje Java klasu SecureRandom koju je
mogue upotrebiti upravo u tu svrhu.

2.2 GENERISANJE KRIPTOGRAFSKIH PSEUDO SLUAJNIH BROJEVA


Generisanje kriptografskih pseudo sluajnih brojeva predstavlja mogunost od
velikog znaaja (CSPRNG). Za ove potrebe JCA proirenje je stavilo na dohvat ruke
funkcionalnosti za upotrebu algoritama za CSPRNG.
Sledi primer sa instanciranjem objekta CSPRNG preko klase SecureRandom:
SecureRandom csprng = SecureRandom.getlnstance("SHA1PRNG");

Nakon instanciranja objekta, neophodno je zadati inicijalno stanje unutranjem


algoritmu. Pseudo sluajni generatori su algoritmi koji na osnovu poetnih (inicijalnih)
stanja daju izlazni niz pseudo sluajnih brojeva. Poetni uslov je zadovoljen ukoliko je
ulaz u generator istinski sluajan.

36

____________________________________________________________________________
Zatita informacionih sistema

//sluajno otkucani brojevi


csprng.setSeed(31592712351);

Poetni istinski sluajan niz se dobija primenom generatora istinski sluajnih


brojeva TRNG i predstavlja klju k odnosno inicijalno stanje. Generisane pseudo
sluajne sekvence su znatno due od kljua i smatraju se pouzdanim ukoliko
zadovoljavaju odreene statistike testove. Zanimljivo je da se pseudo sluajni
brojevi ponekad pokazuju uspenijim od sluajnih brojeva dobijenih iz fizikih izvora.
Pseudo sluajni generatori PRNG pokazuju dobre karakteristike uz veoma oprezan
odabir poetnih stanja to dovodi do prikrivanja deterministikih osobina koje se
mogu upotrebiti za kriptoanalizu.
Izdvajanjem sluajnih bajtova preko objekta SCPRNG se vri pozivanjem funkcije
nextBytes(), iji je rezultat predstavljen sa nizom bajtova. Nakon jednog poziva
funkcije, vano je promeniti inicijalno stanje algoritma preko funkcije setSeed(),
da bi se izbeglo ponavljanje identinog niza bajtova i tako spreili algoritam da ode u
stanje determinizma koje nikako ne bi bilo korisno u kriptografskim svrhama. U
protivnom kriptoanalitiar bi mogao vrlo lako da pogodi redosled bajtova.
Takoe, vano je napomenuti da java.lang.Math klasa sadri slinu funkciju,
funkciju random(), koja nije pogodna za kriptografske operacije, jer koristi
deterministiki algoritam i time proizvodi deterministike nizove bajtova. U Java
dokumentaciji, navedeno je da su prave sluajne vrednosti uniformno distribuirane
izmeu 0,0 i 1,0. Uniformnost je vrlo vana osobina koju poseduju generisane
sekvence, jer na taj nain jaamo svoju poziciju pred kriptoanalitiarem. O znaaju
uniformnosti pogledati udbenik Kriptologija 1, u kome je detaljnije obrazloena
teorija kvalitetnih sluajni sekvenci sa aspekta teorije informacija i primene
informacionih mera u analizi kvaliteta sluajnih brojeva.

2.2.1 GENERISANJE SLUAJNE VREDNOSTI


Jedna od najlepih karakteristika JCA je SecureRandom klasa, koja zahteva dodatne
metode preko kojih e obezbediti kvalitetne sluajne bajtove podataka.
SecureRandom klasa predstavlja proirenje java.util.random klase. Iako,
37

_____________________________________________________________________________
Zatita informacionih sistema

sama po sebi klasa java.util.Random nije pogodna za kriptografske operacije.


Meutim, ukoliko je korien argument SHA1PRNG, koji upuuje na upotrebu
nedeterministikog algoritma za generisanje sluajnosti, u tom sluaju
SecureRandom klasa postaje prihvatljiva za upotrebu u kriptografskim
algoritmima.
Tabela 2.1 Generisanje pseudo sluajne vrednosti

Naziv algoritma

SHA1PRNG

Opis

Naziv pseudo sluajni generator brojeva PRNG dobijen je od


SUN provajdera. Ovaj algoritam koristi SHA-1 kao osnovu za
PRNG. Izraunava SHA-1 he vrednost nad isto sluajnim
inicijalnim stanjem (engl. seed). Od 160 izlaznih bitova SHA1 vrednosti, koriste se samo 64 bita.

Razumevanje naina za generisanje sluajnih brojeva je od izuzetnog znaaja


bezbednu primenu kriptografskih algoritama. Nakon toga moemo da preemo na
pravila i principe koji su jasno utvreni, a tiu se bezbedne implementacije algoritama
za generisanje kriptolokog kljua za primenu u simetrinim iframa.

38

____________________________________________________________________________
Zatita informacionih sistema

Primer 2.1 Generator sluajnih brojeva


Programski izlaz:

U Java primeru (Primer 2.1) prvo inicijalizujemo objekat CSPRNG, zahtevajui


algoritam (SHA1PRNG). U drugom koraku generiemo inicijalnu vrednost preko
funkcije za raunanje trenutnog vremena u mili sekundama. Dobijena vrednost je tipa
39

_____________________________________________________________________________
Zatita informacionih sistema

LONG ija je veliina 64 bita. Prvo smo generisali logiki tip vrednosti, zatim
celobrojni tip vrednosti i niz bajtova kao sluajno generisane vrednosti. Sve
generisane vrednosti su na kraju ispisane. Ako bismo eleli da i dalje koristimo
inicijalno stanje za generisanje sluajnih vrednosti, bilo bi poeljno da promenimo
inicijalno stanje pozivajui ponovo funkciju setSeed().

2.3 GENERISANJE KRIPTOLOKOG KLJUA


Sve simetrine ifre zahtevaju tajni kriptoloki klju, koji e koristiti za operaciju
ifrovanja ili deifrovanja. Kao to smo prethodno rekli, tajni klju predstavlja kritinu
taku svakog simetrinog kripto sistema. Uvek pretpostavljamo da kriptoanalitiar
ima sve detalje koji se odnose na specifikaciju korienog algoritma za ifrovanje. JCA
arhitektura delegira odgovornost za tajne kljueve simetrinih ifara na
javax.crypto.KeyGenerator klasu. Ova klasa implementira par metoda za
generisanje tajnog kljua.
U tabeli koja sledi, nalaze se algoritmi koji mogu biti zahtevani pri kreiranju instance
KeyGenerator.
Tabela 2.2 Algoritmi za generisanje simetrinog kljua

Naziv algoritma

40

Opis

AES

Generator kljua za AES algoritam..

ARCFOUR

Generator kljua za ARCFOUR (RC4)


algoritam.

Blowfish

Generator kljua za Blowfish


algoritam.

____________________________________________________________________________
Zatita informacionih sistema

DES

Generator kljua za DES algoritam.

DESede

Generator kljua za DESede (3DES)


algoritam.

HmacMD5

Generator kljua za HmacMD5


algoritam.

HmacSHA1 HmacSHA256
HmacSHA384 HmacSHA512

Generator kljua za razliite tipove


HmacSHA algoritama.

RC2

Generator kljua za RC2 algoritam.

Sledea linija koda predstavlja kreiranje instance kljua za AES algoritam:

KeyGenerator kg = KeyGenerator.getlnstance("AES");
Kriptografija kao nauka o dizajniranju ifri bila bi isuvie ograniena ukoliko bi ifarski
algoritam bio inicijalizovan samo sa jednim parametrom. Meutim, razliite ifre
koriste razliite inicijalizacione parametre, da bi implementirali sve funkcionalnosti
izabrane ifre.
Na primer, neke simetrine ifre mogu da zahtevaju veliinu kljua 128 bitova, dok
druge mogu da zahtevaju 192 ili 256 bitova. Upravo, klasa KeyGenerator
enkapsulira ovaj koncept za nas, tako to obezbeuje informaciono kvalitetne
kriptoloke kljueve koji e biti u stanju da zadovolje zahteve bilo koje simetrine
ifre.

KeyGenerator klasa prati originalni dizajn JCA arhitekture, pruajui potpuno


nezavisan algoritam za generisanje tajnih kljueva. Ovakva funkcionalnost je
postignuta preko niza preoptereenih metoda init(). Na samom poetku nismo u

41

_____________________________________________________________________________
Zatita informacionih sistema

obavezi da izaberemo nijedan od ponuenih, ve ta procedura moe biti odloena do


samog kraja. U nastavku razmotriemo svaki scenario.

2.3.1 NEZAVISNO INICIJALIZOVANI ALGORITMI


Odluka da se koristi nezavisno inicijalizovani algoritmi je sluaj koji omoguava
aplikaciji da pretrauje ifarske algoritme koji e se koristiti u trenutku izvravanja.
Bilo koja od ovih metoda prihvata argumente tipa String. Obzirom da svaki provajder
definie sopstvenu listu dostupnih algoritama, korisniku se prua mogunost da
napravi vlastiti izbor ifarskih algoritama u trenutku izvravanja. Ova situacija bi
zahtevala neki algoritam nezavisan od procesa inicijalizovanja tajnog kljua. Sledei
preoptereeni init() metodi podravaju ovaj pristup u radu:
init(int veliinaKljua)
init(SecureRandom izvorSluajnosti)
init(int veliinaKljua, SecureRandom izvorSluajnosti)

Prvi init() metod odreuje veliinu kljua (veliina e biti odreena u bitovima ili
bajtovima u zavisnosti od algoritma koji e se koristiti). Provajder snosi odgovornost
za lociranje izvora sluajnosti. Veina provajdera se jednostavno oslanja na provajder
sa najveim prioritetom koji implementira algoritam SHA1PRNG preko
SecureRandom klase.
Ukoliko programer eli da koristi drugi algoritam za CSPRNG, drugi metod init() to
omoguava jednostavno uzimanjem specifinog izvora sluajnosti prosleivanjem
argumenta u vidu SecureRandom instance. U ovom sluaju duina kljua e biti
podrazumevana. Na ovaj nain smo samostalno odredili ta e se koristiti kao izvor
sluajnosti.
Poslednji init() metod je potpuno nezavisan algoritam, za razliku od prethodna
dva. U njemu definiemo oba argumenta (veliinu kljua i izvor sluajnosti).

42

____________________________________________________________________________
Zatita informacionih sistema

2.3.2 SPECIFINO INICIJALIZOVANI ALGORITMI


Ovaj pristup se koristi u situacijama kada elite definisati posebno algoritam koji e se
koristiti i sve njegove specifine parametre kljune za inicijalizovanje. Ovaj pristup
olakava KeyGenerator klasa, tako to obezbeuje dva dodatna preoptereena
init() metoda koja pruaju neophodnu funkcionalnost u vidu podrke:
init(AlgorithmParameterSpec parametri)
init(AlgorithmParameterSpec
izvorSluajnosti)

Svaki

od

ovih

init()

metoda

parametri,

zahtevaju

upotrebu

SecureRandom

java

klase

AlgorithmParameterSpec, koja se nalazi u paketu javax.crypto.spec. Na


osnovu uvida u Java dokumentaciju, uvideli smo da je klasa
AlgorithmParameterSpec
samo klasa interfejs. Ovaj interfejs definie
formalne javne metode ili statike konstante, identine konceptu koji se uglavnom i
koristi u java.io.Serializable interfejsu. Ova arhitektura praktino
dozvoljava provajderu da definie bilo koju klasu kao zaseban algoritam sa
specifinim parametrima, jednostavno ukljuujui AlgorithmParameterSpec
klasni interfejs.
Prva init() metoda je slina sa init(int veliinaKljua), gde je provajder

odgovoran za korieni izvor sluajnosti, dok drugi init() metod diktira poseban
izvor sluajnosti.

2.3.3 GENERISANJE SIMETRINOG KLJUA PREKO SECRETKEY KLASE


Svaka ifra moe imati razliite zahteve kada je upitanju generisanje tajnog kljua. Iz
tog razloga, kljuevi su skriveni iz niza interfejsa. Najvieg nivoa interfejs je klju
interfejs, a to definie tri sledee metode:

43

_____________________________________________________________________________
Zatita informacionih sistema

Tabela 2.3 Interfejsi za rad sa kljuevima

Naziv metoda

Opis

getAlgorithm()

Vraa String naziv ifarskog algoritma.

getFormat()

Vraa String naziv formata kodovanog materijala za klju.

getEncoded()

Vraa niz byte[] koji predstavlja klju u kodovanom format.

Klasa KeyGenerator uvek vraa kao rezultat SecretKey instancu, na primer:

Primer 2.2 Generisanje tajnog kljua


Programski izlaz:

44

____________________________________________________________________________
Zatita informacionih sistema

Kao to moemo da vidimo u primeru (Primer 2.2), SecretKey instanca nema vie
javnih metoda ili konstanti izvan ovih koje smo koristili, a koristi se iskljuivo za
simetrine tajne kljueve.
Pored navedenih metoda, bitno je zapaziti da postoji metod destroy() koji se
koristi za unitavanje SecretKey instance na potpuno bezbedan nain.

2.4 TRANSPARENTNOST GENERISANIH KLJUEVA


Rezultat metoda generateKey() nad klasom KeyGenerator je provajderski
specifian (Primer 2.2) i predstavlja nain za generisanje netransparentog kljua.
Kada kaemo da klju poseduje osobinu netransparentnosti, mislimo na klju o kome
mi ne znamo mnogo detalja i tada moemo da ga poredimo sa osobinama koje
poseduje crna kutija (poznat ulaz, poznat izlaz, ali ne i unutranjost kutije). Jedino to
mi znamo, jeste da je klju generisan. Ovo je postignuto zahvaljujui posebnom
dizajnu klase SecretKey, jer u njoj ne postoji mehanizam za pronalaenje meta
podataka o generisanom kljuu. U sluaju da nas interesuje kvalitet kljua, ne bismo
umeli da odgovorimo na pitanje da li je klju jak ili slab.
Da bi se obezbedila mogunost da saznamo neto vie detalja o kljuu, pored tri
viene vrste podataka koje obezbeuje SecretKey klasa, JCE je ponudio dva
dodatna mehanizma za konvertovanje SecretKey instance po specifikaciji za
simetrini tajni klju, a koja je nezavisna od provajdera.
1. Prvi nain je kombinacijom SecretKeyFactory klase i jo jedne klase
koja implementira klasu KeySpec interfejs.
2. Drugi nain je preko javax.crypto.cpec.SecretKeySpec klase.
Konvertovanjem tajnog kljua u specifikaciju kljua, nivo transparentnosti je
postignut. Transparentnost kljua nam obezbeuje mogunost da sagledamo sve

45

_____________________________________________________________________________
Zatita informacionih sistema

meta podatke kljua. U primeru koji sledi videemo implementaciju kljua kod DES
ifarskog algoritma, jer ovakva vrsta transparentnosti nam moe garantovati da je
izabran stvarno entropijski kvalitetan klju.

Slika 2.2 Levo netransparentni klju, desno transparentni klju

2.4.1 PRETVARANJE KLJUA PO SPECIFIKACIJI NAIN 1


Provajder ima mogunost direktno da koristi klasni interfejs KeySpec, ali najee je
koriena specifina klasa za implementaciju klasnog interfejsa KeySpec. Mnogi
primeri se nalaze u java.security.spec paketu. Na primer, ovaj paket definie

DESKeySpec klasu, koja opisuje DES klju nezavisno od provajdera.


Ona u sebi sadri nekoliko metoda koji se koriste za pristup meta podacima kljua. Na
primer, tu se nalazi metod koji moe da obezbedi informaciju o kvalitetu kljua, da li
je klju jak, slab ili ga moda treba odbaciti.
Zapravo, izlaganje meta podataka kljua ini specifikaciju kljua. Na ovaj nain
obezbeena je mogunost prikljuivanja sa razliitim provajderima za razliite
kriptografske operacije. Na primer, DES klju generisan preko klase
SecureRandom, preko CSPRNG algoritma, mogao bi da se koristi u DES simetrinoj
ifri drugog provajdera. U nekim situacijama ovo se deava u pozadini i bez
eksplicitnog znanja.
Po definiciji, kada provajder nije eksplicitno naveden, tada se regularne dostupne
metode oslanjaju na deklaracije provajdera u java.security paketu. Stoga, nije
teko zamisliti situaciju u kojoj KeyGenerator dolazi iz jednog provajdera, a Cipher - ifarska klasa iz nekog drugog.

46

____________________________________________________________________________
Zatita informacionih sistema

Zadatak svakog provajdera je da dokumentuje podrane specifikacije kljua. U


primeru koji sledi, generisaemo kljueve za DES simetrinu ifru koristei provajder
sa najviim prioritetom koji implementira DES generator kljua.

Primer 2.3 Konvertovanje kljua nain 1


Programski izlaz:

U nastavku sledi primer u kome emo testirati kvalitet lozinki koje ovek
pretpostavimo moe da smisli na osnovu sluajnosti ljudske prirode. Tako dobijene
String-ove konvertovaemo u niz bajtova preko funkcije getbyte(). U ovom

47

_____________________________________________________________________________
Zatita informacionih sistema

sluaju ne koristimo klasu KeyGenerator klasu. Napraviemo GUI interfejs da bi


omoguili korisniku da preko grafikog interfejsa unese smiljenu lozinku. Osnovna
ideja je da aplikacija proveri kvalitet lozinke koja e se koristiti kao klju u DES
algoritmu.

Slika 2.3 Provera kvaliteta simetrinog kljua


Da podsetimo, upotreba klase koja implementira KeySpec klasni interfejs,
omoguava provajderu i nama transparentan pristup kljuu. Ova transparentnost
daje mogunost za dalje ispitivanje kljua i njegovih meta podataka, da bi se utvrdilo
da li ispunjava odreeni kvalitet za upotrebu u odreenom algoritmu.

48

____________________________________________________________________________
Zatita informacionih sistema

Slika 2.4 Funkcionalni fragment koda GUI aplikacije


Ovakva vrsta provere je vrlo bitna, obzirom da ima zanemarljiv uticaj na performanse
prilikom provere kljua. Ovoj vrsti provere dajemo veliki znaaj zbog postojanja
dvostrukih DES kljueva ili duala. Postoje odreeni kljuevi gde za svaki klju K postoji
klju za bilo koje ifrovanje sa K koje je identino za deifrovanje sa i obrnuto.
Kljuevi sa K sa su pronaeni. Dualni kljuevi proizvode sve nule, sve jedinice ili
nule i jedinice po nekom obrascu. Upravo takvi kljuevi su navedeni u nastavku,
preuzeto iz standarda FIPS-74.
Tabela 2.4 Lista dvostrukih kljueva definisana u FIPS-74

Klju

Duali

E001E00lFl0lFl0l

01E001E00lFl0lFl

FElFFElFFEOEFEOE

1FFElFFEOEFEOEFE

E01FE01FF10EF10E

1FE01FEOOEF10EF1

49

_____________________________________________________________________________
Zatita informacionih sistema

FE01FE01FE01FE01

01FE01FE01FE01FE

011F011F0l0E010E

1F011F0l0E0l0E01

E0FEE0FEFlFEFlFE

FEE0FEE0FEFlFEF1

0101010101010101

0101010101010101

FEFEFEFEFEFEFEFE

FEFEFEFEFEFEFEFE

E0E0E0E0FlFlFlFl

E0E0E0E0FlFlFlFl

lFlFlFlF0E0E0E0E

lFlFlFlF0E0E0E0E

Kod prvih est kljueva dualni kljuevi su razliiti od njih to se vidi u tabeli. Poslednja
etiri kljua su identina sa svojim dualima i nazivaju se dvostruki ili dualni kljuevi.
Upravo su to kljuevi kod kojih je dvostruko ifrovanje jednako ne ifrovanju ili
otvorenom tekstu. Nijedni drugi kljuevi nemaju svoje duale.
Podaci se mogu najpre deifrovati, a zatim ifrovati (umesto ifrovati pa deifrovati)
da bi rezultirali sa otvorenim tekstom. Otvoreni tekst se moe ifrovati nekoliko puta,
a zatim deifrovati isti broj puta da bismo doli do otvorenog teksta. Slino
prethodnom, podaci se mogu ifrovati sukcesivno sa razliitim kljuevima i deifrovati
sukcesivno od strane istih kljueva da bismo dobili odgovarajui otvoreni tekst, pod
uslovom da su operacije izvedene sa pravilnim redosledom. Ako je D1(E1(P)) = P (ako
ifrujemo otvoreni tekst sa K1 i deifrujemo sa K1), tada su sledee tvrdnje istinite:
1. E1(D1(P))= P
2. E1(E1(P))= P za sebi dualne kljueve

50

____________________________________________________________________________
Zatita informacionih sistema

3. D1(D1(E1(E1(P))))= P
4. E1(E1(D1(D1(P))))= P
5. D1(D2(E2(E1(P))))= P
6. D1(D2(...(D1(Ej...(E2(E1(P)...) = P
7. E1(E2(...(E1(D1...(D2(D1(P)...) = P
8. E2(E1(P)) = P za dualne kljueve
9. D2(D1(P)) = P za dualne kljueve
ali sledei iskaz nije taan:
10. D2(D1(E2(E,(P))))=P.

51

_____________________________________________________________________________
Zatita informacionih sistema

2.4.2 PRETVARANJE KLJUA PO SPECIFIKACIJI NAIN 2


Klasa SecretKeySpec moe se koristiti kao preica nezavisna od provajdera do
specifikacije
kljua,
izbegavajui
provajdera
oslonjenog
na
klasu
SecretKeyFactory. Realno, ova opcija je mogua za simetrine ifre koje
zahtevaju jedan niz bajtova za generisanje materijala za tajni klju. Postoje ifre koje
zahtevaju vie od niza bajtova, tada emo biti primorani da koristimo klase i metode
opisane u prvom nainu. U primeru (Primer 2.5), kod koji sledi je znaajno manji u
odnosu na kod iz prethodnog primera.

Slika 2.5 Konvertovanje kljua nain 2.


Uvidom u klasu SecretKeySpec, utvreno je da implementira Key, KeySpec,

SecretKey i Serializable interfejs. To znai da rezultat ove operacije moe da


se prenosi na bilo koji metod jednog od ova tri interfejsa i da rezultat moe da se
serijalizuje za kasniju upotrebu. Osim toga, unos podataka je relativno jednostavan,
tako da ne postoje programski izuzeci iz konstruktora koji se moraju obraditi.
Meutim, zbog jednostavnosti rukovanja, esto emo se odrei mogunosti da
imamo uvid u klju i meta podatke. Bitno je napomenuti da ovaj konstruktor ne
proverava da li su navedeni bajtovi dovoljni da budu materijal za generisanje tajnog
kljua. Na primer, ako koristimo DES algoritam, konstruktor ne proverava da li je klju
52

____________________________________________________________________________
Zatita informacionih sistema

8 bajtova i ne proverava kvalitet klju (slab, polu slab). Da bi sve ove provere bile
obavljene, preporuujemo uvek upotrebu klase, u ovom sluaju da bude koriena
klasa DESKeySpec.

2.5 KATEGORIZACIJA SIMETRINIH IFRI


U ovom poglavlju pravimo osnovnu podelu simetrinih ifri na sekvencijalne i
blokovske ifarske sisteme.
Ponavljajua blokovska ifra deli otvoreni tekst na blokove fiksne veliine i generie
blokove ifrata fiksne veliine. U mnogim sluajevima, ifrat se dobija iz otvorenog
teksta ponavljanjem funkcije F za odreeni broj rundi. Funkcija F, koja zavisi od izlaza
prethodne runde i kljua K, je poznata kao funkcija runde ne zbog svog oblika, nego
zbog toga to je primenjena preko vie rundi. Ulazni parametri za svaku rundu su
klju i izlaz iz prethodne runde.
Uopteno govorei, blok ifre su najefikasnije kada se koriste za ifrovanje jedne
poruke, ija je veliina unapred poznata. Zajednika osobina svih blokovskih ifara je
da su blokovi ifrata za identine blokove otvorenog teksta jednaki uz upotrebu istog
kljua. Ovu ne tako dobru osobinu je mogue jednostavno prevazii uvoenjem
posebnih ifarski reima. Meutim, kada se radi o protoku podataka, bez unapred
poznate koliine podataka, kao to je to sluaj kod TCP/IP, tada su sekvencijalne ifre
efektivnije i efikasnije.
Sekvencijalne ifre su sline One-time pad-u. Zasnivaju se na generatorima sluajnih
ili pseudo sluajnih nizova (radni kljuevi). Generator moe da koristi neki prirodni
informacioni izvor i da tako obezbedi dovoljne koliine radnog kljua za ifrovanje.
Ovakvi generatori su isto sluajni generatori brojeva i nemaju probleme sa
periodom, ili u drugom sluaju da se koriste pseudo sluajni generatori koji koriste
inicijalno stanje (engl. Seed) dobijeno preko prve grupe generatora, a na osnovu ega
e proizvesti dovoljnu koliinu radnog kljua. Ova poslednja vrsta generatora ima
problem sa periodom i zbog toga je potrebno voditi rauna o inicijalnom stanju i
potroenosti radnog kljua.

53

_____________________________________________________________________________
Zatita informacionih sistema

Osobinu periodinosti nekog pseudo generatora moemo najlake razumeti ako


zamislimo da se kreemo krunom putanjom i da se u jednom momentu naemo na
poetku. Isto tako, pseudo generator e doi u mesto sa kog je krenuo i poee da
generie identine vrednosti sa redosledom prema kom je prvobitno generisao. Broj
pseudo vrednosti e zavisiti upravo od duine te krunice.
Neki autori sekvencijalne ifre nazivaju i pseudo One-time pad ifre. Da bi smo bolje
razumeli poeemo od enona (Claude Shannon) koji je definisao dva tipa
bezbednosti. Prva i najvanija je bezuslovna bezbednost, to znai da se za zadati
kriptografski sistem moe rigorozno dokazati nominovana bezbednost u odnosu na
protivnika koji raspolae neogranienim vremenskim i raunarskim resursima. ifra
koja odgovara datom opisu bezuslovne bezbednosti je One-time pad koja koristi
radni klju generisan preko nekog prirodnog izvora informacije i predstavlja enonov
ideal apsolutne bezbednosti.
Druga bezbednost koju je definisao enon je dokaziva raunarska bezbednost, a to
znai da se za zadati kriptografski sistem moe rigorozno dokazati nominovana
bezbednost u odnosu na protivnika koji poseduje specifine vremenske i raunarske
resurse. Upravo ifra koja najvie odgovara definiciji raunarske bezbednosti je
simetrina sekvencijalna ifra i po enonu predstavlja pseudo ideal raunarske
bezbednosti (A5/1 i RC4).
Bez obzira na kategoriju, simetrina ifra ima tri stvari koje treba imati na umu
prilikom sprovoenja ili implementacije u softver. Tri stvari koje treba razmotriti
ukljuuju: upravljanje kljuevima, integritet podataka i neporecivost. U nastavku
govoriemo o upravljanju s kljuevima, dok servis neporecivosti i servis integriteta
podataka teorijski neemo razmatrati, osim u praktinim primerima kasnije. Vie o
ovim servisima moete proitati u udbeniku Kriptologija 1.

2.5.1 UPRAVLJANJE KLJUEVIMA


Najvei problem kod simetrinih ifri je sistem za upravljanje kljuevima. Pod
pojmom upravljanje kljuevima podrazumevamo nekoliko elemenata koji su
podjednako vani. Sutina je, izgradnja kriptografskog sistema preko koga e dve

54

____________________________________________________________________________
Zatita informacionih sistema

strane ifrovano da komuniciraju. Treba imati na umu da su podaci apsolutno


bezbedni sve dok je lozinka ili klju u glavi jedne osobe, ali u momentu kada ta osoba
kae lozinku drugoj osobi ili je zapie negde, tada se otvaraju novi problemi, kao to
je problem, generisanja, skladitenja ili problem distribucije kljua izmeu dve strane,
koji zahteva bezbedan kanal preko koga je mogue organizovati razmenu kljueva.
U narednom poglavlju diskutovaemo o mogunosti da upotrebimo asimetrine ifre
u protokolima za bezbednu distribuciju simetrinog kljua.

2.6 SIMETRINE IFRE - IFARSKA KLASA


Cipher klasa predstavlja zajedniku osnovu svih algoritama dostupnih u JCE
ekstenziji. Radi kreiranja instance Cipher, pozivamo metod getInstance(),
zatim prosleujemo argument koji predstavlja naziv date transformacije. Opciono je
mogue definisati naziv provajdera koji e se koristiti.
Transformacija je string koji predstavlja operaciju (ili paletu transformacija) koje e
biti koriene nad ulaznim podacima (poruka), da bi kao rezultat generisala izlazni
podatak (ifrat).
Sledei kod je primer kreiranja instance iz klase Cipher:

Cipher desSifra = Cipher.getInstance("DES");


Navedeni fragment koda konstruisae naizgled samo instancu DES ifre, ali pitanje je
koji ifarski reim i koja ema dopunjavanja se koristi, obzirom da nije navedeno.
Prema specifikaciji Java JCE ekstenzije, kada nisu eksplicitno navedeni reimi za
ifrovanje i eme dopunjavanja, tada je izbor preputen provajderu. Na osnovu ovoga
moemo da zakljuimo da nam JCE daje mnogo ili malo kontrole, u zavisnosti koliko
mi to elimo. U ovom sluaju mi smo se odluili za manje kontrole, zahtevali smo
instancu DES algoritma, a odustali smo od samostalnog izbora ifarskog reima i eme
dopunjavanja.
Treba imati na umu da svaki krajnji korisnik moe da menja sadraj datoteke ja-

va.security na svom raunaru i iz tog razloga ne treba praviti pretpostavku da e


55

_____________________________________________________________________________
Zatita informacionih sistema

odreeni provajder uvek biti prvi na listi. U nastavku sledi standardna lista definisanih
provajdera na raunaru korisnika:
1. security.provider.1=sun.security.provider.Sun
2. security.provider.2=sun.security.rsa.SunRsaSign
3. security.provider.3=sun.security.ec.SunEC
4. security.provider.4=com.sun.net.ssl.internal.ssl.Provider
5. security.provider.5=com.sun.crypto.provider.SunJCE
6. security.provider.6=sun.security.jgss.SunProvider
7. security.provider.7=com.sun.security.sasl.Provider
8. security.provider.8=org.jcp.xml.dsig.internal.dom.XMLDSigRI
9. security.provider.9=sun.security.smartcardio.SunPCSC
10. security.provider.10=sun.security.mscapi.SunMSCAPI

U prethodnom primeru Java koda nije nam poznato koji je provajder korien, koji je
ifarski reim primenjen i koja je ema dopunjavanja primenjena. SunJCE provajder
eksplicitno dokumentuje da DES, DES-EDE i Blowfish ifra koriste inicijalno ECB reim
za ifrovanje i PKCS#5 emu dopunjavanja.
U nastavku poglavlja diskutovaemo vie o reimima ifrovanja i emama dopune,
ukoliko je potrebno vie teorijske osnove za reime ifrovanja, pronai u udbeniku
Kriptologija 1.
U praksi moe da se dogodi da koristimo neki drugi provajder koji podrava DES ifru i
da je njegov inicijalni reim ifrovanja CBC (situacija u kojoj je modifikovana ja-

va.security datoteka), a da druga strana koristi provajder koji standardno


podrava ECB. U tom sluaj dobiemo ifrovanje sa reimom CBC i deifrovanje sa
reimom ECB, a to znai da neemo dobiti originalnu poruku prilikom deifrovanja.
Meutim, ukoliko se odigrava pun ciklus kriptografskog procesa (ifrovanje i
deifrovanje), treba imati uvek na umu da podeenost JVM (Java virtuelna maina) na
svakom raunaru moe da bude razliita.
Prevazilaenje ovakvog problema je jednostavno, uvoenjem dodatnih argumenata u
momentu kreiranja instance za izabranu ifru. Cipher klasa podrava eksplicitno
navoenje reima za ifrovanje i eme za dopunjavanje.

56

____________________________________________________________________________
Zatita informacionih sistema

Da bismo izbegli situacije o kojima smo diskutovali, predlaemo upotrebu argumenta


sledeeg formata:
DES/CBC/PKCS5Padding
gde DES oznaava ifarski algoritam, CBC reim za ifrovanje i PKCS5Padding emu
dopunjavanja za otvoreni tekst, a svi parametri zajedno obavetavaju Cipher klasu
da samostalno elimo da napravimo izbor parametara.
Svaka implementacija Java platforme je u obavezi da obezbedi podrku za sledee
standardne Cipher transformacije sa veliinom kljua u zagradama:
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.

AES/CBC/NoPadding (128)
AES/CBC/PKCS5Padding (128)
AES/ECB/NoPadding (128)
AES/ECB/PKCS5Padding (128)
DES/CBC/NoPadding (56)
DES/CBC/PKCS5Padding (56)
DES/ECB/NoPadding (56)
DES/ECB/PKCS5Padding (56)
DESede/CBC/NoPadding (168)
DESede/CBC/PKCS5Padding (168)
DESede/ECB/NoPadding (168)
DESede/ECB/PKCS5Padding (168)
RSA/ECB/PKCS1Padding (1024, 2048)
RSA/ECB/OAEPWithSHA-1AndMGF1Padding (1024, 2048)
RSA/ECB/OAEPWithSHA-256AndMGF1Padding (1024, 2048)

Ove transformacije su opisane u Cipher dokumentaciji JCASAND (Java Cryptography Architecture Standard Algorithm Name Documentation).
Sledei kod je primer kreiranja instance iz klase Cipher sa navoenjem vie
parametara u vidu jednog argumenta:
Cipher desSifra = Cipher.getInstance("DES/CBC/PKCS5Padding");

57

_____________________________________________________________________________
Zatita informacionih sistema

U ovom sluaju, ukoliko doe do razlike u konfiguraciji JVM-e, kriptografski ciklus


ifrovanje/deifrovanje e biti uspeno obavljen, jer su jasno navedeni svi parametri.
Prethodni primer ukazuje na jedan znaajan kriptografski koncept, kada se govori o
tajnosti korienog algoritma. Korieni parametri nisu tajni, ali to ne znai da ih
treba javno objavljivati. ak, i ako neki kriptoanalitiar presretne ifrat i dozna
konfiguracione parametre ifre, bezbednost e i dalje ostati na istom nivou. Svakako,
kada govorimo o tim parametrima, ne mislimo na tajni simetrini klju, za koji vai
pretpostavka da je izuzetnog kvaliteta i da ostaje uvek u strogoj tajnosti izmeu dve
strane. Ne zaboravimo da se kriptografske operacije oslanjaju na vrste matematike
principe, koji u ovom sluaju obezbeuju raunarski tip bezbednosti.

2.6.1 INICIJALIZOVANJE SIMETRINE IFRE


Posle kreiranja ifarske instance preko klase Cipher, koji implementira zahtevanu
ifru, ifarski reim i emu dopunjavanja otvorenog testa, potreban je jo jedan korak
koji je obavezan. To je korak koji upravo odreuje opti reim ifre, konkretno
mislimo na reim za ifrovanje ili deifrovanje. ifru nije mogue u istom trenutku
koristiti za operaciju ifrovanja ili deifrovanja. Mogue je koristiti samo onu
operaciju koja je inicijalizovana preko preoptereenog metoda init().
Postoji vie ovakvih preoptereenih metoda, koji raspolau sa dva, tri i etiri argumenta. Jednim argumentom inicijalizujemo operaciju, dok drugim argumentima
prosleujemo parametre kao to su: tajni klju ili specifikaciju kljua ili izvor
sluajnosti ili sertifikati.
Obzirom da imamo mogunost da preko init() metoda promenimo opti reim rada
ifre (ifruj/deifruj), bitno je imati na umu da e novim pozivom init() metoda
ifra biti novo inicijalizovana. Tanije, imaemo potpuno novoizgraeni objekat ifre.
Na primer, ukoliko imate vie podataka koje elite da ifrujete razliitim kljuevima,
tada je bitno svaki put koristiti metod init() za inicijalizovanje novog tajnog kljua.
Postoji sluaj kada init() metoda ne moe da obezbedi sve potrebne parametre za
ifru. Taj problem moe da se javi u reimu deifrovanja, ako je u fazi ifrovanja
58

____________________________________________________________________________
Zatita informacionih sistema

korien inicijalni vektor (IV), a u procesu deifrovanja nije obezbeen identian IV,
tada rezultat deifrovanja nije otvoreni tekst.
Tabela 2.5 Lista preoptereenih metoda init()u klasi Cipher.

Tip rezult Metod i opis metoda

void

init(int operacija, Certificate sertifikat)


Inicijalizuje ifru sa javnim kljuem za dati sertifikat.

void

init(int operacija, Certificate sertifikat,


SecureRandom izvorSluajnosti)
Inicijalizuje ifru sa javnim kljuem i izvorom sluajnosti.

void

init(int operacija, Key klju)


Inicijalizuje ifru sa kljuem.

void

init(int operacija, Key klju, AlgorithmParameters parametri)


Inicijalizuje ifru sa kljuem i setom parametara od korienog
algoritma.

void

init(int operacija, Key klju, AlgorithmParameterSpec parametri)


Inicijalizuje ifru sa kljuem i specifikacijom parametara algoritma.

void

init(int operacija, Key klju,


AlgorithmParameterSpec parametri, SecureRandom izvorSluajnos
ti)
Inicijalizuje ifru sa kljuem, specifikacijom parametara algoritma i
izvorom sluajnosti.

59

_____________________________________________________________________________
Zatita informacionih sistema

void

init(int operacija, Key klju, AlgorithmParameters parametri,


SecureRandom izvorSluajnosti)
Inicijalizuje ifru kljuem, setom algoritamskih parametara i izvorom
sluajnosti.

void

init(int operacija, Key klju, SecureRandom izvorSluajnosti)


Inicijalizuje ifru kljuem i izvorom sluajnosti.

2.6.2 IFROVANJE BLOKOVSKOM IFROM


Obzirom da postoji vie init() preoptereenih metoda (Tabela 2.5), koristiemo u
primeru one ija je upotreba najea ili koje prevladavaju za veinu simetrinih
algoritama. Sledi potpis metoda koji emo da koristimo u ovom primeru:
public void init(int operacija, Key klju);

Argument operacija predstavlja direktivu za operaciju (ifrovanje / deifrovanje)


koja e biti primenjena. Za simetrine ifre koriste se statike konstante Cipher.ENCRYPT_MODE ili Cipher.DECRYPT_MODE, umesto literala celobrojne INT
vrednosti. Argument Key predstavlja tajni klju koji je ranije generisan. ifra e
koristiti ovaj klju da obavi inicijalizovanu operaciju.
U zavisnosti od ifarskog reima i eme dopune otvorenog teksta, klasa Cipher
moe dinamiki da generie inicijalni vektor IV. Za pristup korienom inicijalnom
vektoru, mogue je pristupiti preko javnog metoda interfejsa getIV().
U nastavku, prei emo na primer (Primer 2.4) u kome emo prvo generisati tajni
klju, inicijalizovati AES ifru i obaviti operaciju ifrovanja. Pored osnovnih funkcija,
koristiemo i druge metode za dobavljanje vie detalja o kompletnom kriptografskom
postupku.

60

____________________________________________________________________________
Zatita informacionih sistema

Primer ifrovanja sa AES/CBC/PSCS5Padding specifikacijom algoritma, korien je za


ifrovanje jednog seta podataka. Ovo je vrlo praktino ukoliko se obavlja samo jedno
ifrovanje.
Meutim, u praksi mogu da postoje i drugi zahtevi, a to je situacija u kojoj imamo da
ifrujemo vie setova podataka koji moda dolaze iz razliitih izvora sa istim
parametrima ifre. U tom sluaju, ifarski algoritam mora da ostane u radnom stanju
da bi pravilno obavio kompletan kriptografski proces za operaciju ifrovanja.

61

_____________________________________________________________________________
Zatita informacionih sistema

Primer 2.4 AES ifrovanje - AES/CBC/PSCS5Padding


Programski izlaz:

Metod koji emo iskoristi u sledeem primeru (Primer 2.7) je metod update()iz
klase Cipher. Na kraju kada smo transformisali poruke u ifrat, ifrat emo upisati u
fajl Sifrat.AES koji se nalazi u root-u Java projekta. Metod update()predvien je za
obavljanje viedelnih operacija, situacija u kojoj nemamo kompletan sadraj poruke
za ifrovanje.

62

____________________________________________________________________________
Zatita informacionih sistema

Primer 2.5 AES ifrovanje sa korienjem metoda update()i doFinal()


Obzirom da postoje mnoge kombinacije metoda update() i doFinal(), ipak
veina blokovskih ifara ima tendenciju da koristi samo doFinal() bez metoda update(), jer korienjem oba metoda moramo da budemo spremni da obradimo
izuzetke koji se odnose na emu dopunjavanja otvorenog teksta (engl. Bad Padding
Exception) i veliinu ulaznih blokova otvorenog teksta (engl. Illegal Block Size Exception).
Na sledeoj slici prikazan je sadraj datoteke Sifrat.AES koja u sebi sadri ifrat
dobijen preko prethodnog primera.

63

_____________________________________________________________________________
Zatita informacionih sistema

Slika 2.6 AES ifrat

2.6.3 IFROVANJE U CFB REIMU BLOKOVSKA IFRA


Priali smo ve o konceptualnoj razlici izmeu blokovskog i sekvencijalnog ifrovanja.
Zapravo, moemo da kaemo da je sekvencijalna ifra blokovska ifra koja se izvrava
na jednom bloku. Na primer, u jednom taktu ifruje se jedan bajt. Upravo takva
operacija predstavlja trivijalan zadatak za JCE proirenje, iji je zadatak da pretvori
blok u tok podataka (konvertovanje dvodimenzionalnog u jednodimenzionalni
podatak).
Nakon primene jednostavne funkcije za ovu transformaciju, sve dalje preputamo
ifarskom reimu, tj. da definie algoritam CFB16 i broj bitova koji e ifrovati ili
deifrovati u jednom taktu ili vremenskom trenutku.
Kada smo podesili broj bitova koji ifra treba da ifruje u jednom taktu, tada lako
moemo segmentirati ulazne podatke preko klase JavaInputStream ili
CipherInputStream. Zapravo, argumenti konstruktora za instancu klase
CipherInputStream su instanca JavaInputStream i instanca Cipher. Na ovaj
nain svi podaci koji se nalaze u toku podataka su ifrovani za operaciju ifrovanje ili
deifrovani za operaciju deifrovanje. Ovo predstavlja bezbedan nain za ifrovanje
datoteka.

64

____________________________________________________________________________
Zatita informacionih sistema

U primeru (Primer 2.6), iterativno emo uitati sadraj fajla moji_podaci.txt i upisati
ifrat u novi fajl moji_podaci_sifrat.aes.

Primer 2.6 ifrovanje sekvencijalnim ifarskim reimom - CFB


Programski izlaz:

65

_____________________________________________________________________________
Zatita informacionih sistema

Na sledeoj slici prikazan je sadraj fajla moji_podaci.txt (otvoreni tekst) i sadraj


fajla moji_podaci_sifrat.aes posle obavljenog ifrovanja sa algoritamskom
specifikacijom AES/CFB16/PKCS5Padding.

Slika 2.7 Rezultat - AES/CFB16/PKCS5Padding


Ne zaboravimo da je uz reim povratne sprege CFB zahtevan i inicijalni vektor IV.
Obzirom da nismo eksplicitno generisali ili prosledili inicijalni vektor, ve je inicijalni
vektor dinamiki generisan preko Cipher klase. Iz tog razloga neophodno je preko
metoda getIV() sauvati inicijalni vektor, da bi u budunosti operacija deifrovanje
bila mogua.

66

____________________________________________________________________________
Zatita informacionih sistema

2.6.4 DEIFROVANJE U CFB REIMU BLOKOVKSA IFRA


Pre nego to preemo na primer deifrovanja sekvencijalnom ifrom, slede dva
metoda preko kojih je mogue memorisati klju i inicijalni vektor u fajl. Drugi jo
pouzdaniji nain je serijalizacija objekta, ime bi bila memorisana sva stanja ifarske
instance i specifikacija tajnog kljua.
Pod pojmom serijalizacije praktino podrazumevamo zamrzavanje svih stanja objekta
i memorisanje istog u bajt formatu. Na ovaj nain sigurni smo da nee doi do
promene u svim parametrima u kasnijoj upotrebi. U svakom momentu treba imati na
umu da je kriptografija nauka koja oekuje apsolutnu tanost bez i malo odstupanja.
U protivnom moemo da trajno izgubimo podatke.

Slika 2.8 Metodi za zapisivanje tajnog kljua i inicijalnog vektora u fajl


U primeru (Primer 2.6), potrebno je dodatno pozvati ova dva metoda, da bismo
obezbedili tajni klju i inicijalni vektor IV za upotrebu u primeru (Primer 2.9).

Slika 2.9 Zapisivanje tajnog kljua i inicijalnog vektora IV


Da bismo uspeno obavili operaciju deifrovanja iji primer sledi, neophodno je
uitati iz fajla tajni klju i inicijalni vektor IV, koji smo prethodno memorisali u fajl
kljuc.txt i IV.txt. Sledei metode (Slika 2.10) koristiemo za uitavanje kljua i IV.

67

_____________________________________________________________________________
Zatita informacionih sistema

Slika 2.10 Metode za uitavanje tajnog kljua i inicijalnog vektora IV iz datoteke

Primer 2.7 Deifrovanje sekvencijalnim ifarskim reimom - CFB


68

____________________________________________________________________________
Zatita informacionih sistema

Programski izlaz:

U primeru (Primer 2.7), prvo smo uitali bajtove kljua u RAW formatu, koji
reprezentuju tajni klju veliine 128 bitova i inicijalni vektor. Bajtove kljua u RAW
formatu konvertovali smo u specifikaciju kljua preko klase SecretKeySpec. Ovaj
nain je dobar primer u kome smo direktno koristili SecretKeySpec klasu, jer je
tajni klju ve jednom korien i ne dobijamo nita na dodatnoj vrednosti upotrebom
SecretKeyFactory klase.

2.7 IFROVANJE NA OSNOVU LOZINKE - PBE


Upotreba lozinke u ulozi tajnog kljua za ifrovanje nije preporuljivo. Lozinke su
generisane na osnovu prirode ljudske sluajnosti. esto, takve lozinke su kratke ili se
lako pamte ili su fraze, a samim tim ne daju dovoljnu koliinu informacije za
generisanje jakog tajnog kljua. Umesto lozinki preporuujemo upotrebu kombinacije
klasa KeyGenerator i SecureRandom.
U svakom sluaju, vano je napraviti dobru procenu u zavisnosti od potrebe
aplikacije. Nekad je bolje koristiti PBE sistem (engl. Password Based Encryption), nego
lozinke uvati u instancama klase String. Za to postoji vie razloga, dovoljno je rei
da String instance nije mogue ponititi kada prestanemo koristiti lozinku. Zamena za
String instancu je niz karaktera, koji treba uvek koristiti u radu sa lozinkama. Kada
lozinka nije vie potrebna, jednostavno moemo na poziciju svakog elementa u nizu
postaviti vrednost NULL, ovim inom lozinka je zauvek izbrisana iz memorije.
Lozinke koje generiu ljudi su predvidljive ili najee neke fraze koje je mogu pronai
u reniku. Aplikacije takve lozinke uvaju u bazama podatak. Lozinke su memorisane
u vidu he vrednosti. Servisi za autentifikaciju proveru obavljaju tako to uporeuju
dve he vrednosti, ukoliko se poklapaju, lice koje se autentifikuje zna pravu lozinku.
Meutim, jednostavno je organizovati hibridni napad navale, koji podrazumeva
pretragu svih kljueva uz pomo renika. Vidimo da u ovom sluaju he ne predstavlja
dovoljno dobro reenje.

69

_____________________________________________________________________________
Zatita informacionih sistema

Za reavanje ovakvog problema potrebno je uvesti neke dodatne vrednosti. Salt


(engl. Salt) predstavlja sluajno izabranu vrednost koja se dodaje na lozinku. Na ovaj
nain se znaajno uveava prostor kljueva i spreava napad koji smo malopre
pomenuli, ali i dalje ga ne ini neprobojnim. Bitno je razumeti da dodavanje ove
vrednosti ne poboljava kvalitet lozinki koje su smislili ljudi.
U nastavku sledi primer koda u kome koristimo takve lozinke sa uvoenjem dodatnih
salt vrednosti i he funkcija za primenu u simetrinim iframa.

2.7.1 IFROVANJE NA OSNOVU LOZINKE BLOKOVSKA IFRA


U poglavlju 2, ve smo se susreli sa kodovima za pretvaranje kljua prema specifikaciji
kljua za odreeni algoritam i diskutovali o prednostima. Posebno, u primeru kada
smo koristili klasu DESKeySpec u kombinaciji sa klasom SecretKeyFactroy.
Takoe, ve smo govorili i o problemu nepromenljivosti, koji se odnosi na String instance u sluaju ifrovanja sa lozinkama PBE.
Sada uvodimo u upotrebu jednu novu klasu za rad sa PBE lozinkama. Klasa
PBEKeySpec u paketu javax.crypto.spec, definie sve funkcije za nizove
karaktera i String instance.
ifrovanje na osnovu lozinki vrsto se oslanja na dodatnu salt vrednost i zadati broj
iteracija meanja. Uloga meanja je da dodatno pomuti rei definisane u reniku i da
dodatno zatiti lozinku. Preporueni broj iteracija je 1000. Pristup salt vrednosti i
lozinci moemo kasnije obezbediti preko klase PBEKeySpec, jer se radi o specifikaciji
kljua koja je po definiciji je transparentna.
Nijedna od ove dve informacije ne predstavlja tajnu vrednost i obe mogu da se dele
izmeu strane A i strane B, bez ugroavanje snage tajnog kljua. Sledei fragment
koda predstavlja deklaraciju od 8 bajtova salt vrednosti, broj iteracija, lozinku i
konstrukciju instance klase PBEKeySpec.

70

____________________________________________________________________________
Zatita informacionih sistema

Slika 2.11 PBE specifikacija kljua za - PBEWithMD5AndTripleDES


Specifikacija PBEWithMD5AndTripleDES predstavlja 3DES algoritam koji koristi 112
bitova veliinu kljua i MD5 he vrednost koju mnogi smatraju nebezbednom. Pored
specifikacije prikazane u ovom fragmentu koda dostupne su jo
PBEWithSHA1AndRC2_40 i PBEWithMD5AndDES. Sledi kompletan primer sa
ifrovanjem koji implementira specifikaciju PBEWithMD5AndDES. Takoe, DES ifra
ograniava salt vrednost na veliinu od 8 bajtova.

71

_____________________________________________________________________________
Zatita informacionih sistema

Primer 2.8 ifrovanje po specifikaciji - PBEWithMD5AndDES


Programski izlaz:

U primeru (Primer 2.8), pokazali smo izgradnju tajnog kljua na osnovu lozinke. Na
poetku koda definisali smo niz sluajno izabranih bajtova. Ukupan broj bajtova je 8.

72

____________________________________________________________________________
Zatita informacionih sistema

Zatim, pokazali smo kako da preko klase SecretKeyFactory kreiramo instancu


klase SecretKey. Konano, kada smo generisali tajni klju, izabrali ifarski algoritam
i inicijalizovali isti, tada moemo da primenimo operaciju ifrovanja ili deifrovanja.
Sledi lista dostupnih algoritama - PBE:
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.

PBE
PBES2
PBEWithHmacSHA1AndAES_128
PBEWithHmacSHA224AndAES_128
PBEWithHmacSHA256AndAES_128
PBEWithHmacSHA384AndAES_128
PBEWithHmacSHA512AndAES_128
PBEWithHmacSHA1AndAES_256
PBEWithHmacSHA224AndAES_256
PBEWithHmacSHA256AndAES_256
PBEWithHmacSHA384AndAES_256
PBEWithHmacSHA512AndAES_256
PBEWithMD5AndDES
PBEWithMD5AndTripleDES
PBEWithSHA1AndDESede
PBEWithSHA1AndRC2_40
PBEWithSHA1AndRC2_128
PBEWithSHA1AndRC4_40
PBEWithSHA1AndPC4_128

2.8 IFROVANJE SA SEKVENCIJALNOM IFROM RC4


RC4 je sekvencijalna ifra koja se u svojoj osnovi razlikuje od A5/1. Algoritam RC4 je
napravljen za softversku implementaciju, dok je A5/1 dizajniran za hardver. RC4
generie bajt radnog kljua u jednom taktu, dok A5/1 proizvodi u jednom taktu samo
jedan bit radnog kljua. Sa aspekta vremenskih performansi, generisanje bajta u
jednom taktu je mnogo bolje od generisanja jednog bita.

73

_____________________________________________________________________________
Zatita informacionih sistema

RC4 algoritam je veoma jednostavan zato to je njegova osnova tabela koja sadri
permutaciju svih moguih vrednosti od 0-255 bajtova. Sutina je u sledeem: svaki
put kada se generie bajt radnog kljua, tabela se modifikuje na takav nain da uvek
sadri permutaciju od {0,1,,255}. Zbog ovog stalnog menjanja ili samomodifikovanja, tabela i sama ifra za kriptoanalitiara predstavlja pokretnu metu.
Jedna interesantna odlika RC4 algoritma jeste da klju moe biti bilo koje duine od 1
do 256 bajtova. Najea duina kljua je izmeu 5 i 40 bajta. Klju se koristi samo da
bi se inicijalizovala permutacija S. Moemo da zapazimo da se 256 bajt-ni niz K dobija
prosto ponavljanjem kljua dok se niz ne dovoljno ne napuni.
RC4 algoritam se moe posmatrati kao samo promenljiva tabela. Vrlo je sofisticirano
reen, jednostavan i softverski efikasan. Meutim, postoje napadi koji su izvodljivi, ali
samo pod nekim uslovima. Ukoliko je algoritam implementiran na adekvatan nain,
napad nee biti lako izvodljiv, a to znai da je prvih 256 bajtova radnog kljua
odbaeno.
RC4 se danas koristi u mnogim aplikacijama, ukljuujui zatitne protokole SSL i WEP.
Google danas koristi RC4 algoritam u TLS zatitnom protokolu za obezbeivanje
sigurne komunikacije izmeu klijenta i servera u servisu za elektronsku potu
(gmail.com). U dananje vreme, u pruanju ovakvih usluga je neophodno koristiti
kriptografsku zatitu. Ne zaboravimo da je i RC4 ifra pseudo One-time pad ifra i da
su njene visoke performanse stvorile konkurentsku prednost nad ostalim modernim
iframa. Zbog ogromnog broja Internet korisnika i zahtevane brzine odziva, Google je
izabrao RC4 algoritam zbog svih svojih dobrih karakteristika.

74

____________________________________________________________________________
Zatita informacionih sistema

2.8.1 IMPLEMENTACIJA RC4 IFRE


U ovom delu prikazaemo jednu jednostavnu implementacija RC4 algoritma u Java
programskom jeziku. Standardna veliina tajnog kljua je 128 bitova.

Primer 2.9 Java implementacija RC4 sekvencijalne ifre


Programski izlaz:

Sekvencijalne ifre su nekada bile primarne, ali su sada relativno retke u poreenju sa
blokovskim iframa. Neki su otili toliko daleko da su proglasili i njihovo ieznue i
kao dokaz naveli su da u poslednjih par godina nije bilo napora da se razvije ni jedna
nova sekvencijalna ifra. Ipak, danas se javlja povean broj znaajnih aplikacija za koje
su sekvencijalne ifre mnogo pogodnije nego blokovske. Primer za takve aplikacije su
beini ureaji (beine mree), ureaji sa ogranienom procesorskom snagom i
ureaji sa velikim protokom podataka (zatita videa i govora). Nesumnjivo, prie o
ieznuu blokovskih ifri su bile znaajno preuveliane.

75

_____________________________________________________________________________
Zatita informacionih sistema

Na kraju ovog poglavlja, u vidu manjeg zakljuka naveemo po takama od ega se


sastoji jedna Java implementacija kompletnog kriptografskog ciklusa:
x
x
x
x
x

76

Generisanje tajnog kljua preko CSPRNG ili opciono koristimo lozinku kao niz
karaktera;
Na osnovu tajnog kljua konstruiemo specifikaciju kljua preko klase
SecretKeyFactory ili alternativno preko klase SecretKeySpec;
Konstruiemo instancu algoritma ifre preko klase Cipher;
Inicijalizujemo instancu ifre za odreeni radni reim (ifrovanje ili
deifrovanje);
Memoriemo ili dalje aljemo dobijeni ifrat ili otvorenu poruku;
Iz bezbednosnih razloga briemo na pouzdan nain sve promenljive polazei
od SCPRNG pseudo izvora sluajnosti i korisniki definisanih lozinki PBE;

____________________________________________________________________________
Zatita informacionih sistema

3. ASIMETRINI KLJUEVI I IMPLEMENTACIJA ASIMETRINIH IFRI


Asimetrini ifarski sistemi predstavljaju jedno od najveih dostignua kriptologije
sedamdesetih godina dvadesetog veka. Nastali su na osnovu reavanja kljunih
problema simetrinih ifarskih sistema koji se odnose na distribuciju tajnih
simetrinih kljueva. U literaturi se koriste i termini: kriptografija sa javnim
kljuevima (engl. Public Key Cryprography PKI) ili kriptografija sa dva kljua (engl.
Key pair cryptography).
Asimetrine ifre su nale svoju primenu u distribuiranoj arhitekturi. Kriptografija
javnog kljua je esto korieni termin koji opisuje asimetrine kljueve. Dizajn danas
korienih protokola za razmenu tajnog kljua, zasnovan je na asimetrinim iframa.
Asimetrine ifre koriste par dva kljua za kompletan kriptografski postupak. Naziv
jednog kljua je javni klju, a drugog privatni klju.
Ovi kljuevi se koriste u razliitim kriptografskim operacijama, kao to je digitalni
potpis, operacija ifrovanja/deifrovanja i u protokolima za razmenu tajnih kljueva.
Treba imati na umu da svi algoritmi u asimetrinoj kriptografiji ne podravaju sve
operacije. Par kljueva za DSA algoritam se moe jedino koristiti za digitalni potpis.
Neke asimetrine ifre koriste parove kljueva koji su upotrebljivi u oba smera, tj.
privatni klju ifruje, a javni klju deifruje ili javni klju ifruje, a privatni deifruje.
Kljuevi u asimetrinoj ifri su veoma kritina taka. Napomenuemo, da je javni klju
namenjen za iroku distribuciju, dok je privatni klju tajan i od njega zavisi
bezbednost digitalnog potpisa i ifrovanja podataka. U sluaju digitalnog potpisa,
privatni klju se koristi za generisanje digitalnog potpisa, dok je uloga javnog kljua u
procesu verifikacije autentinosti osobe koja je digitalno potpisala.
PKI sistemi se zasnivaju na matematikim jednosmernim funkcijama sa zamkom
(engl. trap door one-way function). To su funkcije koje se lako raunaju u jednom
smeru, a teko u drugom (raunarski, tj. praktino neizvodljivo). Zamka osigurava da
napada ne moe lako (direktno) da izrauna iz javnog kljua privatni klju.
Faktorizacija je relevantan primer za jednosmernu funkciju. Na osnovu dva prosta
broja i lako je izraunati njihov proizvod , ali je za dovoljno veliki broj ,
teko izraunati faktore i .
77

_____________________________________________________________________________
Zatita informacionih sistema

Osobina asimetrinih kljueva je da ne govore jedan o drugom. Tanije, ako je


napadau poznat javni klju, tada on ne moe da sazna bilo ta o privatnom kljuu,
dok su sa druge strane kljuevi komplementarni i obavljanje kompletnog
kriptografskog ciklusa zavisi od jednog odreenog para asimetrinih kljueva.
Asimetrini ifarski sistemi imaju takve osobine da na jednostavan nain obezbeuju
iri skup funkcija bezbednosti u odnosu na simetrine ifarske sisteme. Oni se
karakteristino koriste za efikasnu autentifikaciju, integritet poruka, neporecivost i sl.,
a retko kada se koriste za funkciju poverljivosti. Najee se kombinuju sa
simetrinim ifarskim sistemima. Na primer, jedna od popularnih primena PKI
sistema je uspostavljanje simetrinog kljua za ifrovanje i deifrovanje u
simetrinom ifarskom sistemu.
Za razumevanje postupka implementacije asimetrinih ifri, neophodno je
razumevanje materije iz prethodnog poglavlja, jer se JCE ekstenzija i dalje oslanja na
klasu Cipher, o kojoj je do sad bilo puno rei.

3.1 GENERISANJE ASIMETRINIH KLJUEVA


U ovom delu diskutovaemo o ispravnom nainu za generisanje para asimetrinih
kljueva. Svi asimetrini algoritmi zahtevaju par kljueva pre izvoenja kriptografske
operacije. Odgovornost za generisanje kriptografski kvalitetnih kljueva, poverena je
Java klasi KeyPairGenerator koja se nalazi u paketu java.security.

Generator kljueva za odreeni algoritam (navedeno u fragmentu koda iznad)


generie jedan javni i jedan privatni klju, koji su prilagoeni za upotrebu sa traenim
ifarskim algoritmom.
Postoje dva naina za generisanje para kljueva, jedina razlika je u inicijalizovanju
objekta. Prvi nain je algoritamski nezavisna inicijalizacija, a drugi inicijalizacija za
tano odreeni algoritam. Ovo je slian princip koji postoji kod inicijalizovanja
generatora simetrinih kljueva, gde se koristi init() metoda.

78

____________________________________________________________________________
Zatita informacionih sistema

Sve implementacije Java platforme zahtevaju podrku za sledee algoritme i veliine


kljueva unutar KeyPaigGenerator klase:
x

Diffie-Hellman (1024) generie par kljueva za DH protokol ;

RSA (1024, 2048) generie par kljueva za digitalni potpis i ifrovanje;

DSA (1024) generie par kljueva za algoritam digitalnog potpisa;


EC generie par kljueva za algoritam eliptine krive;

Pozivanjem metoda getAlgoritam() nad instancom ove klase, dobiemo


standardni naziv jednog od gore navedenih algoritama. Navedeni algoritmi su
opisani u sekciji KeyPairGenerator, u dokumentu Java kriptografska arhitektura
i standardni nazivi algoritama.

79

_____________________________________________________________________________
Zatita informacionih sistema

3.1.1 GENERISANJE KLJUEVA NEZAVISNO OD ALGORITMA


Generisanje para kljueva preko klase KeyPairGenerator zahteva najmanje dve
informacije, bez obzira na tip algoritma (veliina kljua u bitovima) i izvor sluajnosti.
U primeru (Primer 3.1), pokazaemo upotrebu klase za generisanje para asimetrinih
kljueva.

Primer 3.1 Generisanje asimetrinih kljueva


Programski izlaz:

80

____________________________________________________________________________
Zatita informacionih sistema

Slede potpisi preoptereene metode initialize(), koja je dostupne preko instance klase KeyPairGenerator :

1.
2.
3.
4.

initialize(int)
initialize(int, SecureRandomm)
initialize(AlgorithmParameterSpec)
initialize(AlgorithmParameterSpec, SecureRandom)

Prvi metod inicijalizuje veliinu kljua, koristei standardne parametre i


SecureRandom (izvor sluajnosti) implementaciju instaliranog provajdera sa
najveim prioritetom. Drugi metod inicijalizuje veliinu kljua i izvor sluajnosti na
osnovu koga treba da se generiu kljuevi. Trei metod inicijalizuje posebnu
specifikaciju parametara i izvor sluajnosti preko provajdera sa najveim prioritetom.
etvrti metod inicijalizuje posebnu specifikaciju parametara i izvor sluajnosti na
osnovu koga treba da se generiu kljuevi.
Pored ovih metoda tu su jo metod getPrivate() i getPublic(), preko kojih
uzimamo privatni i javni klju. Kada su kljuevi generisani, moemo ih koristiti za
digitalni potpis. U zavisnosti od algoritma (ako podrava operacije), mogli bismo ih
koristiti i za ifrovanje.

81

_____________________________________________________________________________
Zatita informacionih sistema

Posle ovog primera, vidimo da postoji znaajna razlika izmeu simetrinih i


asimetrinih kljueva. Simetrine ifre su projektovane da koriste male veliine
kljueva. DES ifra koristi veliinu kljua 56 bitova ili 7 bajtova. U dananje vreme,
nivo zatite koji prua klju veliine 56 bitova nije prihvatljiv za upotrebu. Savremene
ifre, kao to je AES algoritam, mogu da koristi klju veliine 128, 192 i 256 bitova,
dok asimetrine ifre koriste veliinu kljua 1024 ili 2048 bitova. Bez obzira, ukoliko
zanemarimo veliinu kljueva DES-a ili AES-a, vrlo vana osobina ovih kljueva je da
su generisani potpuno sluajno na osnovu nekog prirodnog izvora informacije.

3.1.2 KODNE EME ZA KODOVANJE KLJUEVA


Do sada smo videli u radu sa simetrinim kljuevima, da je tajni klju predstavljen
nizom bajtova i da odvojeno od njega moe da bude prisutan i inicijalni vektor IV, koji
se koristi ili ne, u zavisnosti od izabranog ifarskog reima. Tajni klju je jednostavno
zapisan u nekoj datoteci na fajl sistemu u RAW formatu, bez bilo kakvog dodatnog
algoritma za kodovanje (engl. Encoding).
Meutim, asimetrini kljuevi nisu jednostavni kao simetrini kljuevi, asimetrini
kljuevi ukljuuju mnogo vie informacija. Da bi zadrali osobinu nezavisnosti od
provajdera, koriste se standardni formati. Javni kljuevi se oslanjaju na upotrebu
X.509 standarda za kodovanje, dok se privatni kljuevi oslanjaju na upotrebu PKCS#8
standarda za kodovanje.
U primeru (Primer 3.2), generisaemo kljueve od nekoliko poznatih algoritama,
ukljuujui AES, ifrovanje na osnovu lozinke PBE i RSA. Prikazaemo dostupne meta podatke preko interfejsa instance kljua. Metoda interfejs getFormat() za
rezultat vraa format kodovanja, a metoda getAlgoritam() naziv algoritma.

82

____________________________________________________________________________
Zatita informacionih sistema

Primer 3.2 Prikaz meta podataka za simetrine i asimetrine kljueve


Programski izlaz:

U ovom praktinom primeru smo videli da AES i PBE algoritam ne koriste algoritam za
kodvanje tajnih kljueva, ve su tajni kljuevi predstavljeni kao sirovi bajtovi.

83

_____________________________________________________________________________
Zatita informacionih sistema

Takoe, videli smo da se za asimetrine kljueve primenjuju razliiti algoritmi za


kodovanje (PKCS#8 i X.509).
Vano je rei da JCA ekstenzija ukljuuje jo dve implementacije, koje se odnose na
specifine formate kodovanja javnog i privatnog kljua:
x
x

java.security.spec.PKCS8EncodedKeySpec
java.security.spec.X509EncodedKeySpec

PKCS8EncodedKeySpec klasa se koristi za uitavanje privatnog kljua


kodovanog sa PKCS#8, dok X509EncodedKeySpec klasa se koristi za javne
kljueve kodovane preko X.509 kodne eme. Pozivom metode getEncoded() nad
instancom kljua, metod za rezultat vraa niz bajtova za odreeni tip kljua.

3.1.3 ZAPISIVANJE I UITAVANJE ASIMETRINIH KLJUEVA


U primeru (Primer 3.3), javni i privatni klju generisani su preko klase
GenarateKeyPair. Zatim, preko metode sacuvajKljuc(), upisaemo
kljueve u odvojene fajlove (JavniKljuc.JK i PrivatniKljuc.PK).

Primer 3.3 Zapisivanje javnog i privatnog kljua u datoteku

84

____________________________________________________________________________
Zatita informacionih sistema

Programski izlaz:

U sledeem primeru, pokazaemo kako moemo na ispravan nain da opravimo


kljueve (ponovo da ih uitamo u instancu kljua). U zavisnosti od kljua, koristiemo
klase PKCS8EncodedKeySpec i X509EncodedKeySpec, zbog razlike u
formatima (X.509 i PKCS#8). Takoe, koristimo klase KeyFactory, PublicKey i
PrivateKey za izgradnju ispravne specifikacije za zahtevani algoritam (RSA).
Nakon, oporavljanja kljueva, kljuevi e moi ponovo da se koriste za razliite
operacije sa asimetrinim algoritmima.

Primer 3.4 Uitavanje javnog i privatnog kljua iz datoteke

85

_____________________________________________________________________________
Zatita informacionih sistema

Programski izlaz:

Sada, kada smo razumeli proces generisanja kljueva asimetrinih kljueva, proces
zapisivanja u datoteku i ponovnog uitavanja iz datoteke u instancu kljua, prelazimo
na klasu Cipher i funkcionalnosti podrane za operacije sa asimetrinim iframa.

3.2 ASIMETRINE IFRE IFARSKA KLASA


Slino kao i kod simetrinih ifri, Cipher klasa se koristi za inicijalizovanje ifarskog
algoritma, pritom oslanjajui se na par generisanih kljueva kod asimetrinih ifri.
Obzirom da sve asimetrine ifre ne podravaju ifrovanje, u ovom delu baziraemo
se na RSA algoritmu. Naveemo osnovne algoritamske specifikacije koje se odnose
na asimetrine ifre sa Cipher klasom:
86

____________________________________________________________________________
Zatita informacionih sistema

x
x
x

RSA/ECB/PKCS1Padding (1024, 2048)


RSA/ECB/OAEPWithSHA-1AndMGF1Padding (1024, 2048)
RSA/ECB/OAEPWithSHA-256AndMGF1Padding (1024, 2048)

Sledi jedna linija koda za inicijalizovanje ifarske instance:

Preko algoritamske specifikacije RSA/ECB/PKCS1Padding, koristimo ECB reim za


ifrovanje i PKCS1Padding standard za dopunjavanje otvorenog teksta. Zatim, preko
metoda init(), slino kao i kod simetrinih ifri inicijalizujemo operaciju ifrovanje
ili deifrovanje. Sledi fragment koda, gde u prvoj liniji inicijalizujemo operaciju
ifrovanja i javni klju, a u drugoj liniji ifrujemo otvoreni tekst:

Na izgled, poziv metoda izgleda identino kao kod simetrinih ifri, meutim kod
asimetrinih ifri moramo da pazimo na klju koji smo prosledili (javni ili privatni).
Takoe, ako elimo programski da dobijemo sve informacije o podranim
algoritmima u standardnom JCE provajderu, to moemo da uradimo izvravanjem
sledeeg fragmenta Java koda:

Primer 3.5 Pribavljanje informacija o provajderu


Programski izlaz:

87

_____________________________________________________________________________
Zatita informacionih sistema

U primeru koji sledi, odluili smo da koristimo operaciju ifrovanje sa RSA ifrom, u
tom sluaju koristiemo javni klju druge strane.

3.2.1 IFROVANJE SA JAVNIM KLJUEM - RSA


Kao to smo ve naveli, ukoliko elimo da poaljemo ifrovanu poruku sa RSA ifrom,
potrebno je da posedujemo kod sebe javni klju druge strane kojoj elimo poslati
ifrovanu poruku. U primeru koji sledi, ifrovaemo datoteku poruka.txt:

Primer 3.6 RSA ifrovanje

88

____________________________________________________________________________
Zatita informacionih sistema

Programski izlaz:

3.2.2 DEIFROVANJE SA PRIVATNIM KLJUEM -RSA


U sledeem primeru, simuliraemo kriptografski proces na drugoj strani
komunikacionog kanala, u kojoj je zadatak deifrovanje sa privatnim kljuem preko
RSA algoritma. Slino kao i u prethodnom primeru, uitaemo privatni klju i
deifrovati ifrat.

89

_____________________________________________________________________________
Zatita informacionih sistema

Programski izlaz:

U nastavku ovog dela pokazaemo preko kojih metoda jednostavno moemo da


uporedimo jednakost kljueva. Provajderi e obino ponuditi dobro osmiljeno
reenje koje pravilno implementira metode equals(), hashcode() i

clone(), kao i implementacija Java Serializable interfejsa (interfejs se koristi


za serijalizaciju stanja objekta).
U sluaju da je potrebno utvrditi jednakost kljueva preko metoda equals()
(metod nije implementiran od strane provajdera), najbolji nain u praksi da se odredi
jednakost kljueva je provera svakog bajta (poreenje bajta sa bajtom). Da ne bismo
koristili petlje, koristiemo u sledeem primeru java.util.Arrays pomonu
klasu.

Postoji sluaj u kome je potrebno uraditi proveru jednakosti izmeu kljueva


razliitog formata. To je sluaj kada je jedan klju instanca RSAPrivateKey, a
drugi RSAPrivateCrtKey klase. U tom sluaju poreenje po jednakosti se vri
preko pojedinanih podataka ili meta-podataka sa metodom equals().

3.3 PROTOKOLI ZA RAZMENU TAJNOG KLJUA


Sledei problem je razmena kljua u simetrinim ifarskim sistemima i pronalaenje
sigurnog naina za razmenu simetrinih kljueva izmeu dve udaljene lokacije. Na
primer, banka treba da obavi zatienu transakciju sa klijentom, ali kako dostaviti
klju? Najbezbednije je da se dostava kljua obavi lino. Kod ovog naina dostavljanja
veliki problem predstavlja potrebno vreme za dostavu kljua. Manje bezbedno je
angaovanje kurirskih slubi u te svrhe. Postavlja se pitanje da li je to nezavisna
organizacija i da li je to slaba karika u sistemu?

90

____________________________________________________________________________
Zatita informacionih sistema

Slian scenario jeste dostava kljua vojnim jedinicama u ratnim uslovima, dostava
kljua nuklearnim podmornicama koje se nalaze na 1000 kilometara od vojne baze.
Meutim, drava raspolae novcem, resursima i moe da se izbori sa ovakvim
problemima, ali za civilni sektor je ovo bio gotovo nereiv problem.
Razmotriemo sada jedan klasian problem. Alisa i Bob ele da imaju sigurnu
komunikaciju. Zna se ili pretpostavlja da Trudi prislukuje njihov komunikacioni kanal.
Alisa i Bob mogu povremeno da se lino sastaju i razmenjuju kljueve za naredni period komuniciranja. Ovo reenje je uglavnom teko izvodljivo u praksi, a moe da
bude i nemogue.
Difi i Helman su prvi predloili primenu asimetrinog ifarskog sistema. Za ifrovanje i
deifrovanje koristio bi se razliit klju.

3.3.1 DIFI-HELMAN PROTOKOL


Difi-Helman protokol predloili su Vitfild Difi (Whitfield Diffie) i Martin Helman (Martin Hellman). Skraenicu DH uglavnom emo koristiti za Difi-Helman algoritam ili
protokol za razmenu kljua. Protokol je razvijen nezavisno na dva mesta. Predstavlja
algoritam za razmenu zajednikih simetrinih kljueva. Nije namenjen za ifrovanje ili
digitalno potpisivanje. Sigurnost DH algoritma zasniva se na raunski sloenom
raunanju (jednosmerne funkcije) diskretnog algoritma za zadate i nai
. Za poznato i , gde je , moe da se odredi :
.

Ako je , se takoe odreuje preko diskretnog logaritma. U nastavku


emo proi kroz matematike osnove DH algoritma. Neka je veliki prost broj i
takvo da se za svako moe nai tako da je:


Vrednosti i su javne. U komunikaciji izmeu Alise i Boba, ove parametre moe da


odredi bilo ko od njih, a zatim se parametri razmenjuju javnim kanalom. Alisa bira

91

_____________________________________________________________________________
Zatita informacionih sistema

svoju tajnu vrednost . Bob bira svoju tajnu vrednost . Ove vrednosti predstavljaju
velike sluajne proste brojeve.
U prvoj rundi, Alisa javno alje vrednost  Bobu. Bob javno alje vrednost

 Alisi. U drugoj rundi, oboje na osnovu primljenih vrednost raunaju

zajedniku tajnu vrednost . Dobijena zajednika tajna vrednost moe da


se koristi kao simetrini klju K. Pretpostavimo da Alisa i Bob koriste vrednost

 kao tajni klju K. Trudi moe da sazna vrednosti  i 


jer su poslate javnim kanalom. Meutim, Trudi ne moe na osnovu ovih vrednosti da
sazna vrednost ili , a ako bi to mogla da uradi, sistem bi bio razbijen, tada bi to
znailo da je reila problem diskretnog logaritma.
Standardom PKSC#3, definisane su i preporuene vrednosti parametara  za
generisanje i razmenu tajnih kljueva. U praksi se za vrednost koristi veliki broj koji
je vei od 1024 bita. Napomenuemo da su sve metode definisane u klasi
KeyAgreement u paketu javax.crypto.
Sledi primer koda za generisanje parametara za DH protocol:

Primer 3.7 Generisanje DH parametara


Kao to vidimo u primeru (Primer 3.7), parametri DH protokola generisani su vrlo
jednostavno preko klase DHParameterSpec.

92

____________________________________________________________________________
Zatita informacionih sistema

Programski izlaz:

Uprkos svom jednostavnom interfejsu, protokol za razmenu simetrinog kljua moe


biti veoma sloen. SunJCE provajder implementira Difi-Helman algoritam za razmenu
kljua (engl. Key Agreement). Ovaj algoritam je zasnovan na sledeem protokolu koji
se sastoji iz osam koraka:
1. Alisa (kao prva u protokolu) generie DH parametre, javni i privatni klju;
2. Alisa alje Bobu javni klju i parametre DH algoritma;
3. Bob na osnovu DH parametara generie svoj javni klju i privatni klju, zatim
alje Alisi svoj javni klju;
4. Alisa sa svojim privatnim kljuem i Bobovim javnim kljuem generie tajni
klju K (SecretKey). Ovde su zahtevane dve faze: jedna u kojoj koristi svoj
privatni klju i druga u kojoj alje Bobu svoj javni klju;
5. Bob obavlja identine operacije sa svojim privatnim kljuem i Alisinim javnim
kljuem. U ovoj fazi protokola obe strane poseduju zajedniki tajni klju;
6. Bob i Alisa konvertuju tajni klju u DES klju;
7. Alisa koristi tajni klju za ifrovanje poruke koju alje Bobu;
8. Bob koristi tajni klju za deifrovanje poruke;
Poslednje dve faze predstavljaju upotrebu simetrine kriptografije, u kojima obe
strane mogu poslati ifrovanu poruku i primiti deifrovanu poruku.
U primeru (Primer 3.8), simuliraemo preko programskih niti scenario za razmenu
kljueva preko DH protokola. Sledi primer:

93

_____________________________________________________________________________
Zatita informacionih sistema

Primer 3.8 Simulacija DH protokola preko programskih niti


Ukoliko posmatramo ovaj protokol sa bezbednosnog aspekta, zakljuiemo da
protokol nije bezbedan, jer bilo ko moe da se predstavi kao Alisa ili kao Bob. Da bi
smo spreili ovu vrstu napada (ovek u sredini), potrebno je da dodatno potpiemo
javne kljueve koji se alju preko javnog kanala. U tom sluaju spreili smo napad
ovek u sredini. Svakako, javni klju je dovoljno samo potpisati, ali ne i ifrovati.
Bezbednost DH protokola nije zasnovana na tajnosti parametara koji se razmenjuju
izmeu dve strane.

94

____________________________________________________________________________
Zatita informacionih sistema

Primer 3.9 Programski kod na Alisinoj strani DH protokola


U primeru (Primer 3.9), Alisa generie sve neophodne parametre za DH protokol sa
Bobom. Nakon uspostave tajnog kljua preko DH protokola, Alisa ifruje poruku
Zdravo Bobe, UNIVERZITET SINGIDUNUM sa DES algoritmom. Zatim, alje ifrat
Bobu. Na Bobovoj strani se odvija inverzan proces.

95

_____________________________________________________________________________
Zatita informacionih sistema

Primer 3.10 Programski kod na Bobovoj strani DH protokola


Programski izlaz:

96

____________________________________________________________________________
Zatita informacionih sistema

4. HE FUNKCIJE, INTEGRITET PORUKE I DIGITALNI POTPIS


He funkcije (engl. Hash) se ne koriste za ifrovanje. Za razliku od simetrine i
asimetrine ifre, operacija heovanja ne zahteva klju. Pogodna svojstva ovih
funkcija koriste se za uspenu realizaciju kriptografskih operacija koje se odnose na
heovanje poruke (engl. Message Digest), integritet prenesenih poruka (engl. Message Authentication Code) i digitalni potpis (engl. Digital Signature).
Njihova jednosmernost, predstavlja prednost u odnosu na druge funkcije, koja
nastaje kao posledica kompresije sa gubicima. Kod operacije ifrovanja, najee
veliina ifrata odgovara veliini otvorene poruke (simetrine blok ifre), dok su
dobijene he vrednosti preko jednosmernih funkcija duinski konstantne, bez obzira
na ulaznu koliinu podataka. Takoe, u kriptografskim funkcijama za ifrovanje,
postoji funkcija za deifrovanje (inverzna funkcija funkciji ifrovanja) ukoliko se
poseduje odgovarajui klju, dok kod he funkcija ne postoji inverzna funkcija. Ovo je
razlog zato ove funkcije oslovljavamo sa jednosmerne funkcije.
Poto je ulaz proizvoljne duine koja znatno nadmauje izlaz (he vrednost),
verovatno je da postoji veliki broj kolizija. Na primer, pretpostavimo da he funkcija
generie izlaz od 128 bitova. Pretpostavimo da je za ulaz u funkciju uzeta poruka
duine 160 bitova, a to je 32 bita due od izlaza. Sledi da postoji jo
moguih ponavljanja. Otpornost na kolizije podrazumeva da je
raunarski veoma kompleksno nai jednu od njih.
Najznaajnija primena he funkcije je kod kriptografskih operacija za digitalni potpis.
Na primer, Alisa potpisuje otvorenu poruku ifrovanjem na bazi privatnog kljua ,
tj.  . Dalje, Alisa alje otvorenu poruku i potpis , a Bob verifikuje
digitalni potpis ifrovanjem dobijenog potpisa Alisinim javnim kljuem, tj.
 . Ukoliko je poruka velike duine javljaju se dva problema. Prvi problem se
odnosi na kompleksnost digitalnog potpisivanja i verifikacije potpisa, tj. dua poruka
se due obrauje, a poznato je da su algoritmi za potpisivanje poprilino spori. Drugi
problem se odnosi na dodatno optereivanje komunikacionog kanala, tj. za odreeni
propusni opseg potrebno je preneti dva puta vie bitova (i poruka i potpis).

97

_____________________________________________________________________________
Zatita informacionih sistema

4.1 KRIPTOGRAFSKE HE FUNKCIJE


He funkcija u najosnovnijem obliku predstavlja sumu poruke. Na primer, to moe biti
suma heksadecimalnih vrednosti. Ako je data poruka {0x270 x280 x29}, tada je njena
suma 84. Problem u ovom sluaju je to se lako moe nai druga kombinacija sadraja
koja daje isti he (na primer, poruka: 0x250 x280 x31). Drugim reima, isti he se
moe dobiti za vie razliitih poruka, to nije dobro.
Kriptografski cilj je da jedan he odgovara samo jednoj poruci, a to znai da je
jedinstven. He funkcije se standardno primenjuju kod provere integriteta primljene
poruke.
Kriptografska he funkcija mora da poseduje sledea svojstva:
x

98

Kompresija Za proizvoljan broj bitova ulazne poruke , duina dobijene he


vrednosti je konana i najee manja od same ulazne poruke (na
primer 128, 160 bitova i sl.).
Efikasnost - he vrednost treba da se jednostavno izrauna za bilo koji
ulaz . Kompleksnost izraunavanja, naravno, zavisi od duine ulazne poruke,
ali ne znaajno.
Jednosmernost - he funkcije su jednosmerne funkcije. To znai da je
jednostavno izraunati he vrednost za datu poruku, ali je veoma teko
rekonstruisati poruku iz date he vrednosti, tj. praktino je nemogue.

Otpornost na kolizije - kod dobre he funkcije teko je nai sudar (koliziju).


Ako je data poruka ija je he vrednost teko je nai drugu poruku
tako da njihove sume budu jednake, tj. da je .
Lavinski efekat - promena samo jednog bita na ulazu treba da rezultuje u
promenu bar polovine bita dobijene he vrednosti.

____________________________________________________________________________
Zatita informacionih sistema

4.1.1 MD5 JEDNOSMERNA FUNKCIJA


MD5 (engl. Message-Digest algorithm 5) he funkcija predstavlja primer prave
kriptografske he funkcije koja se najee koristila. Danas se zna da ova he funkcija
ima slabosti i da je neotporna na kriptografske napade, tako da se ree primenjuje u
kriptografiji. Jo uvek ima svoju namenu u proveri integriteta veih fajlova (pre svega
zbog svoje brzine rada). Duina dobijene he vrednosti (saetka, sume) je 128 bitova.
Tipino se predstavlja sa 32 heksadecimalne cifre.
MD5 algoritam je razvio Ronald Rivest 1991. godine. Baziran je na prethodnom MD4
algoritmu i neto je sporiji od njega. Danas se zna da je podloan na brute force
birthday attack. Jedan takav projekat pod imenom MD5CRK je pokrenut 1. marta
2004. godine sa namerom da dokae slabost MD5 algoritma. Nedugo zatim, 17.
avgusta 2004. godine, objavljeno je da su Ksiaoun Vang, Denguo Feng, Ksuejia Lai i
Ksongbo Ju uspeno razbili algoritam odnosno da su pronali koliziju na algoritmu. Za
razbijanje ovog algoritma bio im je potreban samo jedan sat na IBM p690 klasteru.
2005. godine Arjen Lenstra, Ksiaoun Vang, i Bene de Veger su demonstrirali su
kreiranje dva X.509 sertifikata sa razliitim javnim kljuevima i istom MD5 he
vrednosti. Nekoliko dana potom Vlastimil Klima je kreirao unapreeni algoritam koji
je u stanju da na obinom PC raunaru za nekoliko sati kreira koliziju MD5 algoritma.
Danas je to mogue uraditi za jedan minut. U svakom sluaju, MD5 funkcija je
obeleila prola vremena, kada je re o he vrednostima.

4.1.2 SHA JEDNOSMERNA FUNKCIJE


SHA (engl. Secure Hash Algorithm) je klasa kriptografskih funkcija za saimanje. U
ovoj grupi kriptografskih funkcija najee koriena funkcija je SHA-1 koja je nala
primenu u velikom broju kriptografskih protokola kao to su TLS, SSL, PGP, SSH,
S/MIME i IPSec. SHA-1 se moe smatrati naslednikom MD5 algoritma. SHA algoritmi
su kreirani od strane amerike agencije za bezbednost (NSA) i publikovani kao
zvanini standard vlade SAD. He vrednost je duine 160 bitova.
Prvi lan grupe SHA algoritama, publikovan je 1993. godine, i zvanino nazvan SHA, ali
se on esto u literaturi naziva SHA-0, da bi se spreila zabuna sa njegovim kasnijim

99

_____________________________________________________________________________
Zatita informacionih sistema

naslednicima. Dve godine kasnije nastaje SHA-1, prvi naslednik SHA. Jo etiri
varijante ovog algoritma su publikovane i to SHA-224, SHA-256, SHA-384 i SHA-512 i
oni se jednim imenom nazivaju SHA-2, a razlikuje ih samo duina saetka koji
proizilazi iz njih.
Algoritmi SHA-256, SHA-384 i SHA-512 objavljeni su 2002. godine dok je varijanta
SHA-224 objavljena 2004. godine. Ove due varijante su znatno sigurnije u odnosu na
SHA-0 i SHA-1, prvenstveno zbog duine saetka i odreenih promena u algoritmu.
Nove verzije SHA algoritma koriste druge vrednosti pomeranja kao i dodatne
konstante, ali u sutini nema znaajnih promena u odnosu na prethodnike. I pored
vee sigurnosti oni se i danas manje koriste u odnosu na SHA-1 koji predstavlja
industrijski standard u kriptografiji.
SHA-0 i SHA-1 algoritmi se danas ne mogu smatrati bezbednim zato to postoje
kriptografski napadi koji su sposobni da pronau koliziju za relativno kratko vreme. U
tabeli koja sledi, dat je pregled svih verzija SHA funkcije:
Tabela 4.1 Verzije SHA he funkcije

100

Algoritam

Veliina saetka u
bitovima

Inicijalna veliina u
bitovima

Veliina bloka u
bajtovima

SHA-0

160

SHA-1

160

160

64

SHA-224

224

256

64

SHA-256

256

256

64

____________________________________________________________________________
Zatita informacionih sistema

SHA-384

384

512

128

SHA-512

512

512

128

4.2 HE FUNKCIJE IMPLEMENTACIJA


JCA ekstenzija podrava rad sa kriptografskim jednosmernim funkcijama he
funkcijama, preko klase MessagesDigest. Svaka implementacija Java platforme
zahteva podrku za sledee he funkcije: MD5 i SHA, funkcije koje su ujedno i
najbolje, dok drugi provajderi mogu da ponude i druge algoritme iste namene.
Slede nazivi algoritama jednosmernih funkcija koji su dostupni u JCE:
x

MD2
MD5

SHA-1

SHA-256

SHA-224

SHA-384
SHA-512

Sledi jedan primer poziva MD5 algoritma za raunanje he vrednosti veliine 128
bitova. Generisaemo otisak poruke ili he vrednost za poruku 1 i poruku 2.
Oekivano je da he vrednosti budu identine.

101

_____________________________________________________________________________
Zatita informacionih sistema

Primer 4.1 Implementacija MD5 funkcije


Programski izlaz:

U izlazu iz primera (Primer 4.1) jasno vidimo da su otisci poruka potpuno razliiti.
Razlog tome su naizgled identine poruke. Meutim, poruka 2 sadri jedan dodatni
razmak na kraju. Preko ovog primera smo predstavili zahtevane kriptografske
osobine jednosmernih funkcija koje smo prethodno naveli.
Konceptualno klasa MessageDigest radi potpuno identino kao i klasa Cipher.
Napominjemo da klasa Cipher, obezbeuje metode za jednodelne ili viedelne
operacije. U sluaju viedelnih operacija, pozivaemo metod update() sve dok

102

____________________________________________________________________________
Zatita informacionih sistema

postoje novi delovi podataka, a zatim na kraju obaviemo zavrnu operaciju preko
metoda doFinal(). Rezultat ove metode je niz bajtova koji predstavljaju ifrat ili
otvorenu poruku u zavisnosti od primenjene operacije (ifrovanje ili deifrovanje).
Posle svih izvedenih operacija pozvaemo metod reset(), da bismo pripremili
instancu za izvoenje operacija nad novim podacima.

MessageDigest klasa takoe podrava jednodelne ili viedelne operacije, koje je


mogue pozvati preko metoda update(), a zavrnu operaciju obaviti preko metoda
digest(). Alternativno je mogue direktno pozvati metodu digest() ukoliko su
prisutni svi potrebni podaci (uraeno u primeru iznad). Rezultat ovog metoda je
standardno niz bajtova koji je vrlo jednostavno mogue konvertovati u
heksadecimalni niz preko klase Hex, uvedene preko provajdera bouncycastle.
Takoe, posle svih izvedenih operacija pozvaemo metod reset(), da bismo
pripremili instancu za izvoenje operacija nad novim podacima.

103

_____________________________________________________________________________
Zatita informacionih sistema

U primeru (Primer 4.2), merili smo performanse MD5, SHA-1 i SHA-256 algoritma.
Performanse algoritama su prikazane u jedinici vremena.

Primer 4.2 Performanse jednosmernih funkcija


Korisnici kriptografskih operacija esto razgovaraju o ceni tih operacija. Svakako,
svaka operacija ima svoju cenu koju moemo izraziti u vremenu koje je potrebno za
njeno izvravanje. Ukoliko je potrebno neke operacije vremenski sinhronizovati, tada
moemo trajanje neke operacije jednostavno odrediti pozivom metoda System.currentTimeMillis().
Programski izlaz:

104

____________________________________________________________________________
Zatita informacionih sistema

Sledei primer (Primer 4.3), demonstrira upotrebu razliitih algoritama za raunanje


he vrednosti. Na izlazu iz programa, prikazani su rezultati korienih funkcija i
veliina fajla za koga su he vrednosti generisane.

Primer 4.3 Raunanje hea (MD5, SHA-1, 224, 256, 384, 512) za video datoteku
Programski izlaz:

105

_____________________________________________________________________________
Zatita informacionih sistema

4.3 INTEGRITET PORUKE MAC


Za obezbeivanje funkcije integriteta poruke koja se prenosi primenjuje se kod za
autentifikaciju poruke MAC (engl. Message Authentication Code). U poglavlju o
blokovskim iframa razmatrana je jedna tehnika za generisanje MAC-a gde se blok
ifra koristi u CBC reimu rada. Kako he funkcija predstavlja saetak poruke (engl.
message digest) mogue je da se ova vrednost iskoristi za verifikaciju integriteta
poruke. Ovakav pristup se oznaava sa HMAC (engl. Hashed MAC).
Za obezbeivanje funkcionalnosti integriteta poruke , Alisa izraunava he vrednost
i alje ka Bobu i i . Ukoliko se na prenosnom putu desi promena poruke
iz u Bob e jednostavno konstatovati da se to ne slae sa dobijenom he
vrednosti . Meutim, razmatrani koncept nije dovoljan. Napada Trudi moe da
zameni originalnu poruku sa svojom porukom , a da zatim izrauna i da zameni
sa . Na ovaj nain Bob ne bi mogao da detektuje promenu podataka. Da
bi se ovo izbeglo neophodno je da se he vrednost ifruje. Mogue je da se koristi
simetrian ifarski sistem sa tajnim deljenim kljuem izmeu Alise i Boba,
. Drugi nain je da se koristi asimetrian ifarski sistem, tj. u ovom sluaju
Alisa .
Umesto ifrovanja koje je standardno kompleksan proces za realizaciju, mogue je
koristiti HMAC bez ifrovanja. Kod ovog pristupa tajni deljeni klju K se direktno
dodaje poruci M pre izraunavanja he vrednosti. Mogua su dva pristupa. Klju se
moe dodati na poetak ili na kraj poruke.

Snaga HMAC vrednosti zavisi od veliine tajnog kljua koji je korien za raunanje
vrednost. Najpoznatiji napad je napad sa potpunom pretragom tajnog kljua ili
isprobavanjem svih mogunosti. HMAC je znatno manje izloen napadu sudaranja
106

____________________________________________________________________________
Zatita informacionih sistema

za razliku od osnovnih he funkcija. HMAC-MD5 ne pati od istih nedostataka koji su


pronaeni u MD5.

4.3.1 GENERISANJE HMAC VREDNOSTI


Pre nego to izraunamo he vrednost, potrebno je generisati tajni klju koji e se
koristiti. Standardno, koristiemo SecretKey i KeyGenerator klasu. Kada smo
generisali klju, tada moemo da inicijalizujemo HMAC algoritam preko klase Mac.
Upotreba Mac klase je identina klasi Cipher, podrava reime za jednodelne ili
viedelne operacije. U zavisnosti od izabranog reima, pozivamo metod update()
vie puta, a zatim zavrni metod doFinal() ili odmah ukoliko posedujemo sve
podatke pozivamo doFinal() metod.
HMAC je algoritam razvijen na osnovi jednosmernih he funkcija i iz tog razloga moe
se koristiti sa bilo kom he funkcijom. Kompletna specifikacija HMAC-a nalazi se u RFC
2104 dokumentu. Svaka implementacija podrava sledee MAC algoritme:
x
x
x

HmacMD5
HmacSHA1
HmacSHA256

U primeru (Primer 4.4), pokazaemo jednu implementaciju HMAC algoritma, koji


implementira module za generisanje kljua i raunanje HMAC hea. Koriene su
klase KeyGenerator, SecretKey i klasa Mac za poruku Univerzitet
Singidunum.

107

_____________________________________________________________________________
Zatita informacionih sistema

Primer 4.4 Raunanje HMAC-a SHA-1


Programski izlaz:

Iz ovog primera preko programskog izlaza, vidimo da je veliina he vrednosti 160


bitova. U scenariju razmene ifrovanih poruka izmeu Alise i Boba, Bob kada dobije
ifrat i he vrednost, uz pomo svog tajnog kljua izraunae novi HMAC he i
uporediti dobijeni ifrat. Ukoliko se dogodi napad ovek u sredini, Bob e vrlo lako
detektovati.
Drugi popularan nain za generisanje tajnog kljua je preko CSPRNG, zaobliaenjem
KeyGenerator klase. U tom sluaju, java implementacija je prikazana u sledeem
primeru (Primer 4.5). Koriene su klase Securerandom, SecretKeySpec i klasa
Mac za poruku Univerzitet Singidunum.

108

____________________________________________________________________________
Zatita informacionih sistema

Primer 4.5 Generisanje HMAC kljua preko CSPRNG izvora sluajnosti


Programski izlaz:

Na osnovu ovih primera za HMAC, jasno je da se tajni klju ne koristi za ifrovanje,


kao kod simetrinih ifri (AES, DES). Meutim, bezbedna razmena kljua je
neophodna u oba sluaja. Verovatno je najbolje reenje uspostava protokola za
razmenu simetrinih kljueva (KeyAgreement). U ovo svrhu mogue je koristiti DH
protokol.
Bez obzira to smo pravilno implementirali HMAC algoritma za proveru integriteta
poruke, takoe postoji potreba za uvoenjem vremenskih oznaka u cilju spreavanja
napada ponovnim slanjem poruka. U ovom sluaju, Bob e na osnovu vremenske
oznake zadrati ili odbaciti poruku. ak, iako je lairana vremenska oznaka, preko
HMAC he vrednosti Bob e utvrditi ponovo da je poruka za odbacivanje.

109

_____________________________________________________________________________
Zatita informacionih sistema

4.3 DIGITALNI POTPIS


Digitalni potpis predstavlja jednu od najkorisnijih funkcionalnosti javne kriptografije.
Digitalno potpisivanje elektronskih dokumenata odgovara svojerunom potpisu na
papiru, ali ima i niz drugih prednosti. Digitalni potpis je sastavni deo dokumenta, dok
se potpis na papiru moe dobiti njegovim kopiranjem sa drugog dokumenta.
Verifikaciju potpisa na papiru moe da potvrdi samo obueni strunjak, dok je
verifikacija digitalnog potpisa jednoznana i lako izvodljiva za svakog ko ima pristup
Bobovom javnom kljuu.
U PKI sistemima tradicija je da se otvorena poruka koja se ifruje obeleava sa M.
Kada se koriste likovi iz kriptologije, tada Alisa i Bob treba da imaju svoj par kljueva
(javni i privatni).
Koristiemo sledeu notaciju: javni klju je , a privatni je . Ukoliko poruku
oznaimo sa M, digitalni potpis sa S, onda je:

M d (mod N )

Kod RSA algoritma, deifrovanje i potpisivanje su iste operacije. Za raunanje


digitalnog potpisa S neophodno je poznavanje privatnog kljua d. Potvrda ispravnosti
ili verifikacija digitalnog potpisa na poruci M moe da se uradi na sledei nain:

S e (mod N ) ( M d )e (mod N ) M
Moemo primetiti da je operacija ista kao i kod ifrovanja. Svako ko zna moe
da potvrdi ispravnost digitalnog potpisa.
Na primer, Alisa eli da poalje digitalno potpisanu poruku M Bobu. U ovom
momentu Alisi i Bobu nije bitna poverljivost. To znai da Trudi moe da proita
poruku M, ali ne moe da je promeni zbog postojanja digitalnog potpisa S poruke M.
Trudi je samo pasivan napada (moe da prislukuje). Vlasnik digitalnog potpisa u
ovom scenariju je Alisa. Na drugoj strani, Bob prima poruku M i digitalni potpis S, a
zatim koristi javni klju da bi uspeno verifikovao digitalni potpis i bio siguran
da je primljena poruka M poslata od Alise.
110

____________________________________________________________________________
Zatita informacionih sistema

Kompletan proces generisanja digitalnog potpisa


(implementacija koja sledi) objasniemo kroz pet koraka:

verifikovanje

potpisa

1. Pretpostavimo da je Alisa kreirala porudbenicu za Boba. Alisa prvo generie


he vrednost porudbenice preko jednosmerne funkcije SHA-1;
2. Alisa sa svojim privatnim kljuem ifruje SHA-1 he vrednost. Narudbenica
ostaje u otvorenoj tekstualnoj formi, dok je he vrednost poslata ifrovano;
3. Bob prima kompletnu poruku koja sadri narudbenicu, potpis i specifikaciju
korienih algoritama;
4. Bob po specifikaciji generie he vrednost preko funkcije SHA-1 i dobija otisak
od 160 bitova;
5. Bob deifruje potpis Alisinim javnim kljuem i na kraju proverava jednakost
he vrednosti. Ukoliko se he vrednosti poklapaju, Bob je siguran da je
narudbenicu Alisa sastavila, u drugo sluaju otkrie napad;
JCA ekstenzija ukljuuje implementaciju DSA algoritma za digitalno potpisivanje, koji
obezbeuje sve mehanizme neophodne za uspeni kompletiranje svih faza digitalnog
potpisa. Treba imati na umu da se DSA algoritam prema standardima NIST-a moe
samo koristiti za operaciju digitalnog potpisivanja, ali ne operaciju ifrovanja. Za
operaciju ifrovanja predviena je upotreba RSA algoritma. Ako bismo poredili brzinu
ova dva algoritma, dobili bi rezultat gde je generisanje potpisa preko RSA algoritma
sporo, a preko DSA brzo, dok je u procesu verifikovanja RSA bri od DSA algoritma.
Meutim, ukoliko u praksi ne moramo da vodimo previe rauna o utroku
raunarske snage, logian izbor algoritma za digitalni potpis pada na RSA. Iz tog
razloga primeri koji slede zasnovani su na RSA algoritmu.

4.3.1 DIGITALNO POTPISIVANJE


Svaka implementacija Java platforme zahteva podrku sledeih algoritama za
generisanje digitalnog potpisa:
x
x

SHA1withDSA
SHA1withRSA
SHA256withRSA

111

_____________________________________________________________________________
Zatita informacionih sistema

Sledi primer (Primer 4.6) u kome emo pokazati korienje Java API-ja za generisanje
kljueva i digitalnog potpisa. Digitalno emo potpisati poruku, zapisati u fajl javni
klju, digitalni potpis i potpisane podatke.

Primer 4.6 Digitalni potpis RSA i SHA-1 algoritam

112

____________________________________________________________________________
Zatita informacionih sistema

Programski izlaz:

U primeru za generisanje digitalnog potpisa, Alisa je prvo generisala par kljueva


(javni i privatni). Zatim, inicijalizuje algoritam SHA1 (za he vrednost) sa RSA (za
ifrovanje) za generisanje digitalnog potpisa. Uitava datoteku iterativno u bafer
veliine 1024 bajta, gde u svakoj iteraciji poziva metod update() (reim za
viedelne operacije) nad instancom za operaciju digitalnog potpisivanja. Na kraju,
kada je uitana kompletna datoteka, generie digitalni potpis preko metoda
sign().
Posle uspeno generisanog digitalnog potpisa, alje Bobu potpis, svoj javni klju i
poruku. U programskoj simulaciji, navedeni podaci sauvani su u datotekama, u
folderu glavnog projekta. Generisani digitalni potpis prikazan je u heksadecimalnom
formatu kao programski izlaz.
Kao to smo ve rekli, algoritmi za generisanje digitalnog potpisa mogu da budu
razliiti. NIST standard predvia upotrebu DSA algoritma sa jednosmernom funkcijom
SHA-1. DSA algoritam koristi SHA-1 algoritam za generisanje otiska poruke i deklarie
se kao SHA1withDSA. U sluaju RSA, postoji vei izbor jednosmernih funkcija, takoe
one mogu biti deklarisane kao MD2withRSA, MD5withRSA ili SHA1withRSA. Dakle,
naziv algoritma mora biti deklarisan. U primeru za generisanje digitalnog potpisa
koristili smo klasu Signature, preko ije instance smo imali mogunost da generiemo
i verifikujemo potpis.

4.3.2 VERIFIKOVANJE DIGITALNOG POTPISA


U primeru (Primer 4.7) demonstriraemo upotrebu Java API-ja za uitavanje javnog
kljua, digitalnog potpisa i potpisanu poruku. Digitalno emo potpisati dokument, i
zapisati u fajl javni klju, digitalni potpis i potpisane podatke.

113

_____________________________________________________________________________
Zatita informacionih sistema

Primer 4.7 Verifikovanje digitalnog potpisa


Programski izlaz:

114

____________________________________________________________________________
Zatita informacionih sistema

U primeru za verifikovanje digitalnog potpisa, Bob je uitao Alisin javni klju i digitalni
potpis po specifikaciji za kodovanje javnog kljua (X.509). Zatim, inicijalizuje
algoritam SHA1 (za he vrednost) sa RSA (za ifrovanje) prema specifikaciji koju je
dobio od Alise. Uitava datoteku (poruku) iterativno u bafer veliine 1024 bajta, gde
u svakoj iteraciji poziva metod update() (reim za viedelne operacije) nad
instancom za verifikovanje digitalnog potpis. Na kraju, kada je uitana kompletna
datoteka, verifikuje (uporeuje otiske poruke) digitalni potpis preko metoda veri-

fy(). Metod verify() vratie rezultat tano ukoliko je poruka verifikovana ili netano
u ako nije verifikovana.
Posle verifikovanja digitalnog potpisa Bob moe da izvede sledee zakljuke:
x
x

Da je sadraj Alisine poruke izmenjen;


Da sadraj Alisine poruke nije izmenjen;

Generisani digitalni potpis prikazan je u heksadecimalnom formatu kao programski


izlaz.

4.3.3 SLABOSTI I ALTERNATIVE


Primeri koje smo pokazali za generisanje i verifikovanje digitalnog potpisa, ilustruju
upotrebu Java mehanizma za proveru autentinosti poruke. U realnim situacijama
kljuevi koji se koriste verovatno e biti ve generisani i sauvani u datoteci.
Potencijalni glavni nedostatak u ovim primerima je da nita ne garantuje autentinost
javnih kljueva. Primeri koje smo pokazali ispravno verifikuju potpis, ali samo pod
uslovom da je isporuen autentian klju, a to znai da je javni klju koji je Bob
primio, takoe, potpisan od strane nekog vrhovnog CA tela iz PKI infrastrukture.

115

_____________________________________________________________________________
Zatita informacionih sistema

5. UPRAVLJANJE KLJUEVIMA I SERTIFIKATIMA


U ovom poglavlju, diskutovaemo o mehanizmima za upravljanje sertifikatima i
simetrinim kljuevima. Pod upravljanjem kljuevima, podrazumevamo Java
implementaciju skladita kljueva za razliite tipove kljueva (simetrini i asimetrini)
i sertifikata, sa obezbeenom kontrolom pristupa radi zatite uskladitenih kljueva.
Pokazaemo na koji nain se moe iskoristiti KeyTool alat za generisanje DSA
sertifikata pogodnih za digitalno potpisivanje i RSA sertifikata za ifrovanje ili
digitalno potpisivanje.
Upravljanje tajnim kljuevima, parom kljueva i sertifikatima, moe biti smatrano
velikim poduhvatom u nekim situacijama od izuzetne vanosti. Iz tog razloga uvodimo
Java KeyStore ili interfejs za upravljanje velikim kolekcijama kljueva. Proi emo
kroz nekoliko primera koda, koji demonstriraju uitavanje i uvanje sertfikata,
kodovanih sa BER (engl. Basic encoding rules), DER (engl. Distinguished encoding
rules) i Base64 algoritmom. Takoe, prikazaemo primer u kome koristimo javni klju
iz sertifikata, za inicijalizovanje RSA instance (Cipher) za operaciju ifrovanja.
Problem upravljanja kljuevima nije jednostavan za reavanje i oigledno da nije
problem koji matematiari reavaju. Ovaj proces ukljuuje ljude, a injenica je da ljudi
nisu savrena bia, a nisu ni maine. Prirodno je da ljudi mogu da izgube kljueve. ta
e se desiti ako neko izgubi tajni klju? Da li e podaci biti trajno izgubljeni? Da li
postoji neki pouzdan mehanizam ili sistem za upravljanje kljuevima koji e kljueve
drati na bezbednom mestu? Sve su ovo pitanja na koja treba dati odgovore i
smatramo da to nee biti jednostavno. Zapravo, u ovom poglavlju se neemo baviti
veliinom kriptolokog kljua ili korienim izvorom sluajnosti. Ovo su potpuno nove
slabosti koje su prisutne kod svakog kriptosistema i koje je potrebno prevazii.

5.1 DIGITALNI SERTIFIKATI


Sertifikati predstavljaju digitalne pasoe izdate od sertifikacionih tela CA (engl. Certificate Authority, CA u daljem tekstu) raznim uesnicima u komunikaciji, pri tome
garantujui njihov identitet i potvrdu istog ostalim uesnicima na Internetu. Korisnici
u komunikaciji utvruju autentinost sertifikata proverom da li je sertifikat izdat od
116

____________________________________________________________________________
Zatita informacionih sistema

pouzdanog CA i ukoliko jeste komunikacija se ostvaruje izmeu odgovarajuih


korisnika. Ukoliko sertifikat nije validan komunikacija moe biti odbijena.
Upotreba digitalnih sertifikata reava neke od kljunih problema bezbednosti
informacija. Ukoliko nam poruka stie od korisnika iji identitet utvrujemo potpisom
tree strane kojoj se veruje, nema razloga da sumnjamo da je takva poruka
kompromitovana, odnosno da je stigla od osobe koje je neovlateno presrela
komunikaciju.
Proverom potpisa na sertifikatu istovremeno se utvruje i identitet vlasnika
odgovarajueg javnog ili privatnog kljua. Meutim, na ovaj nain ne moe se utvrditi
identitet izdavaa sertifikata. Sertifikati su javni. Zajedniki format svih sertifikata,
definisan je sa standardom X.509.
Validnost sertifikata moe biti opozvana iz brojnih razloga, a osnovna uloga poverenja
u CA kompromitovana. Dosadanja praksa je pokazala da su najee
kompromitovani sertifikati CA izdatih za bankarsko odnosno finansijsko poslovanje,
vladine organizacije i pojedine dravne bezbednosne agencije. Jednom
kompromitovani CA veoma teko vraa poverenje korisnika. Znaaj kompromitovanih
podataka, vrsta klijenata i vreme oporavka ukoliko je mogue, direktno utie na ugled
i poslovno okruenje izdavaoca sertifikata, a teta moe biti trajna. Jedan od primera
je dat u analizi kompromitacije sertifikata firme DigiNotar Certificate Authority.
Najvei problem za korisnike predstavlja nebezbednost u periodu od nastanka
kompromitacije CA do vremena kada su preduzetim akcijama otklonjeni uzroci.
Vreme otkrivanja i reavanja problema moe biti kratko npr. 1 sat, a ponekad i toliko
dugo da se meri u nedeljama. Zapaeno je da ovo vreme direktno utie na posledice
primene lanih sertifikata.
Format X.509 odreuje format zapisa i definie polja sertifikata. Ovaj standard takoe
predvia naine povlaenje sertifikata kao i algoritme za ifrovanje. Prvi PKI projekat
je podrazumevao upotrebu upravo X.509 standarda. Mnoge kompanije u svetu svoje
poslovanje temelje na ovom standardu. VISA i MasterCard kao u svojim elektronskim
transakcijama primenjuju X.509 standard. U nastavku poglavlja dajemo osnovne
strukture X.509 sertifikata verzije 3.

117

_____________________________________________________________________________
Zatita informacionih sistema

Tabela 5.1 Atributi X.509 sertifikata

X.509 ver3: Standardni sertifikat, odobren od strane ITU

Verzija

Verzija standarda X.509

Serijski broj

CA utvruje jedinstvenost sertifikata

Algoritam potpisivanja

Koji je algoritam

Davalac sertifikata

Ime CA po X.500

Period vaenja

Poetak i kraj

Ime korisnika sertifikata

Korisnik za iji klju se garantuje

Javni klju

Identifikator davaoca sertifikata

Neobavezno

Identifikator davaoca sertifikata

Neobavezno

Proirenja

Potpis

118

Uraen sa privatnim kljuem CA

____________________________________________________________________________
Zatita informacionih sistema

Osnovni zadatak sertifikata je da povee javni klju sa podacima kao to su pojedinac,


preduzee, univerzitet i td. Sertifikati nisu tajni. Alisa i Bob u komunikaciji mogu da
naprave hiper vezu na matinim Veb stranama ka svojim sertifikatima.
U dananjim poslovnim okruenjima postoje kompanije koje izdaju sertifikate, kojima
se moe verovati i koji su podrani od strane Internet pretraivaa. Neke od
najpoznatijih kompanija iz ove oblasti su: VeriSign, Entrust Authority i Comodo inc.
PKI infrastruktura predvia postojanje samo jednog vrhovnog CA. U stvarnom svetu
ne postoji niko ko bi mogao da ispuni kriterijume za tako poverljivu ulogu. Iz tog
razloga dolo je i do propasti pojma PKI, jer ne postoji takav kandidat. Mnoge velike
organizacije (NSA, Microsoft, i td) su se samostalno pokuale nametnuti kao vrhovne,
ali ni jednoj to nije polo za rukom.

5.2 UPRAVLJANJE SA JAVA SKLADITEM KLJUEVA


JCA definie KeyStore klasu za skladitenje i upravljanje simetrinim i asimetrinim
kljuevima i digitalnim sertifikatima. Klasa je smetena u paketu java.security.
Ova klasa implementira tri osnovna tipa interfejsa za KeyStore.entry:
x
x
x

KeyStore.PrivateKeyEntry ovaj tip interfejsa obezbeuje zatitu


uskladitenog privatnog kljua od neovlaenog pristupa. Takoe, povezan je
sa lancem sertifikata, sa odgovarajuim javnim kljuem;
KeyStore.SecretKeyEntry ovaj tip interfejsa obezbeuje zatitu
uskladitenog tajnog kljua od neovlaenog pristupa;
KeyStore.TrustedCertificateEntry ovaj tip interfejsa dri
uskladiteno sertifikat sa javnim kljuem od druge strane, strane kojoj se
veruje da je sertifikat zaista njen. Ovaj tip interfejsa moe biti korien za
autentifikovanje druge strane;

Svaki unos u KeyStore ima svoje alias ili ime preko koga ga je mogue
identifikovati odreeni entitet. U sluaju privatnih kljueva i njihovih povezanih
lanaca sertifikata, autentifikaciju entiteta je mogue obezbediti na vie razliitih

119

_____________________________________________________________________________
Zatita informacionih sistema

naina. Na primer, entitet moe biti autentifikovan preko CA ili preko razliitih
algoritama sa javnim kljuem.
Preko sledee linije Java koda deklariemo i inicijalizujemo instancu KeyStore
skladita:

Posle kreiranja instance KeyStore moemo da uitamo kljueve koristei ulazni tok
podataka (FileInputStream) i lozinku koja titi kljueve od neovlaenog
pristupa. Sledi fragment nepotpunog koda, koji ilustruje proces pristupa i uitavanja
privatnog kljua iz skladita:

Sada, moemo vrlo jednostavno da proitamo sve ono to se nalazi u skladitu


kljueva, da smestimo nove kljueve u skladite ili da izbriemo neke kljueve.
Takoe, moemo da koristimo istu lozinku da bi zatitili skladite, ali pored jedne
lozinke mogue je koristiti i razliite lozinke ili druge parametre zatite. Sve
implementacije Java platforme zahtevaju podrku za KeyStore preko standarda
PKCS12. Java provajder SunJCE obezbeuje jaku zatitu kljueva u skladitu, tako to
implementira TDES algoritam sa PBE za ifrovanje.
U sledeem primeru (Primer 5.1) pokazaemo jedan nain za kreiranje novog
skladita kljueva u koga emo smestiti lozinku Singidunum.

120

____________________________________________________________________________
Zatita informacionih sistema

Primer 5.1 Kreiranje praznog JKS skladita


Programski izlaz:

Kao to vidimo, u primeru iznad kreirano je novo skladite kljueva - JKS, postavljena
je lozinka za budui pristup skladitu i odreena lokacija skladita (datoteka).

5.2.1 GENERISANJE SERTIFIKATA


Java platforma u sebi sadri jednostavan alat KeyTool. Alat se koristi za upravljanje
sa skladitem kljueva i daje mogunost za generisanje novih razliitih tipova
sertifikata. U praksi se esto podrazumeva da sertifikati budu generisani nezavisno od
aplikacije, a to znai da sertifikati nee biti generisani dinamiki od strane aplikacije.
Kod dinamiki generisanih sertifikata glavni problem bi bilo poverenje korisnika, a
time bi sertifikati izgubili na znaaju. Poslovna okruenja zahtevaju da sertifikati budu
potpisani od nekog vrhovnog CA, ali za svrhu razvoja i eksperimentisanja ovi
sertifikati su vie nego dovoljni.

121

_____________________________________________________________________________
Zatita informacionih sistema

KeyTool se jednostavno pokree. Potrebno je pokrenuti konzolni prozor na


operativnom sistemu (ponekad je potrebno podesiti sistemsku putanju da bi
komanda bila prepoznata) i otkucati komandu KeyTool. Posle ega e se pojaviti
prozor prikazan na sledeoj slici.

Slika 5.1 KeyTool konzolni interfejs


Na slici (Slika 5.1), su prikazane funkcije dostupne preko KeyTool-a. Ove funkcije
obezbeuju sve neophodne funkcionalnosti za upravljanje skladitima kljueva i
digitalnim sertifikatima.
Naveemo neke najbitnije grupe komande za rukovanje KeyTool alatom:
x

Generisanje Java skladita, kljueva i sertifikata,

Izvoz sertifikata,

Brisanje sertifikata,

Uvoz sertifikata,

Prikazivanje sertifikata,
Promena lozinki;

Pre nego to demonstriramo kroz vie primera upotrebu ovog alata, kreiraemo
jedan sertifikat. To emo uraditi jednostavno pozivajui komandu genkey. Inicijalno
komanda bez specifikacije algoritma e generisati DSA sertifikat koristan za digitalni

122

____________________________________________________________________________
Zatita informacionih sistema

potpis, ali ne i za ifrovanje. Kasnije, preko naziva alijasa emo preuzeti sertifikat iz
Java skladita. Preuzimanje moemo obaviti preko Keytool-a ili programski.
-v prikaz povratnih informacija nakon izvrenih komandi
keytool -genkey -alias DSAsertifikat -v -keystore /skladiste.keystore

Primer 5.2 Generisanje DSA sertifikata


Sada emo napraviti jedan dodatni sertifikat za RSA algoritamsku specifikaciju. RSA
algoritam pored operacije potpisivanja, podrava i ifrovanje. Konzolna komanda e
biti slina prethodnoj. Dodaemo jo jednu komandu za definisanje algoritma i
promeniemo naziv alijasa.
keytool -genkey -alias RSAsertifikat -v -keyalg RSA -keystore /skladiste.keystore
Novi RSA sertifikat e biti generisan u postojeem skladitu kljueva i sertifikata,
samo pod nazivom alijas-a RSAsertifikat. Veliina RSA kljueva koja je generisana je
2048 bitova, samopotpisani sertifikat (SHA256withRSA) na 90 dana.

123

_____________________________________________________________________________
Zatita informacionih sistema

Primer 5.3 Generisanje RSA sertifikata


U ovom momentu u naem skladitu kljueva skladiste.keystore imamo dva
sertifikata. DSA sertifikat veliine 1024 bita i RSA sertifikat veliine 2048 bitova.
Implementacija skladita kljueva podrava skladite dva tipa objekata (kljuevi i
sertifikati) i sertifikate od poverenja potpisane od strane CA.
Takoe, treba imati na umu da pored bezbednog skladitenja kljueva i sertifikata,
uloga skladita kljueva (KeyStore) nije da verifikuje autentinost sertifikata. Unutar
njega ne postoji algoritam koji e obezbediti takvu vrstu funkcionalnosti.
U nastavku, sledi primer (Primer 5.4) Java koda u kome emo prikazati listu svih
entiteta i njihove alijas-e u skladitu skladiste.keystore. Da bismo pristupili skladitu
kljueva, moramo da koristimo lozinku koju smo postavili u trenutku kreiranja
skladita. Naa lozinka je Singidunum. Postoji mogunost da nezavisno od lozinke
skladita kreiramo razliite lozinke za entitete unutar skladita. U naem sluaju, mi
smo koristili istu lozinku za sve entitete i skladite. Kada smo generisali entitete (DSA i
RSA sertifikat) u konzolnom interfejsu, na kraju pored zahteva da unesemo lozinku
entiteta dobijamo i drugu mogunost u vidu poruke <RETURN if same as keystore
password>, tada je dovoljno samo pritisnuti taster enter za korienje iste lozinke za
sve.

124

____________________________________________________________________________
Zatita informacionih sistema

Primer 5.4 Programski pregled skladita kljueva i sertifikata


Programski izlaz:

Na osnovu programskog izlaza, vidimo da se u skladitu skladiste.keystore, nalaze


dva sertifikata.

5.2.2 SKLADITA ZA SIMETRINE KLJUEVE


U ovom delu videemo kakve mogunosti postoje za skladitenje tajnih kljueva.
Moemo izabrati dva tipa KeyStore skladita. Prvi tip skladita je JCEKS i taj tip
emo koristiti u prvom prime koji sled. Drugi tip skladita je BKS. Ovaj tip skladita se
odnosi na drugi provajder, konkretno radi se o provajderu BouncyCaste, provajder o
kome je bilo vie rei u prethodnim poglavljima.
U primeru koji sledi, kreirali smo novo skladite tipa JCEKS. Ovaj tip obezbeuje
podrku za skladitenje tajnih kljueva. Generisan je AES klju i pod alijasom
AEStajniKljuc skladiten. Radi provere uspenosti skladitenja tajnog kljua,
prikazaemo i pregled skladita skladste.JCEKSkeystore.

125

_____________________________________________________________________________
Zatita informacionih sistema

Primer 5.5 Skladitenje tajnih kljueva (AES klju)


Programski izlaz:

U primeru (Primer 5.5), prva linija programskog izlaza daje informaciju o uspenosti
skladitenja tajnog kljua, dok drugi programski izlaz nastaje preko primera (Primer
5.4) i daje uvid u listu entiteta novog skladita. U skladitu se nalazi jedan entitet
aestajnikljuc.
Zahtevana je mala modifikacija u Java kodu za pregled entiteta. Naime, potrebno je
definisati tip skladita (JCEKS) umesto "keystore.type", da bismo mogli da uitamo
sadraj novog tipa skladita.

126

____________________________________________________________________________
Zatita informacionih sistema

5.2.3 UITAVANJE SIMETRINIH KLJUEVA IZ SKLADITA


U primeru (Primer 5.6), pokazaemo na koji nain moemo da pristupimo skladitu
kljueva preko korisniki definisane lozinke - PBE. U skladitu kljueva nalazi se jedan
entitet simetrini klju, koji je potrebno preuzeti iz skladita i pripremiti ga za dalju
upotrebu u AES algoritmu.
Pozivom metoda getKey() nad instancom skladiste, kao rezultat dobijamo
novu instancu klase Key iz koje preko metoda getEncoded() dobijamo niz
bajtova, koji reprezentuju na AES klju uskladiten u prethodnom primeru.

Primer 5.6 Uzimanje simetrinog kljua iz skladita


Programski izlaz:

127

_____________________________________________________________________________
Zatita informacionih sistema

Programski izlaz prikazuje bajtove kljua i veliinu u bitovima. Kao to vidimo duina
kljua je 128 bitova.

5.3 UPRAVLJANJE SERTIFIKATIMA PO X.509 STANDARDU


Postoje dva osnovna formata za izradu digitalnih sertifikata. To je mobilni format i
format za transport. Prvi format podrazumeva kodovanje preko niza istaknutih
pravila prema DER formata (binarna forma), a drugi format podrazumeva kodovanje
sertifikata koji su ve u DER formatu sa Base64 algoritmom. Postoje i drugi pristupi za
itanje, kao to je pristup preko CertificateFactory klase u Javi.
U praksi, retko kad sami generiemo sertifikat preko KeyTool-a, najee dobijemo
sertifikat preko e-mejla, diska ili nekog drugog prenosnog medija. Pre nego to
pokaemo primere koda koji demonstriraju itanje oba tipa sertifikata, treba nam
skladite sertifikata sa dva entiteta koje smo ve kreirali (DSAsertifikat i
RSAsertifikat). Zatim, uz pomo KeyTool-a izveemo sertifikate na fajl sistem.
U primeru (Primer 5.7), izveemo sertifikat za alias RSAsertifikat koristei DER
kodovanje i sertifikat za alias DSAsertifikat, koristei Base64 kodovanje. Posle
izvoza oba sertifikata, videemo programski, kroz primere koji slede kako moemo da
itamo svaki od ovih formata kodovanja.
keytool -export
/RSAsertifikat.der

-alias

RSAsertifikat

-keystore

/skladiste.keystore

Primer 5.7 Izvoz RSA sertifikata u DER formatu


Programski izlaz:

128

-file

____________________________________________________________________________
Zatita informacionih sistema

keytool -export -alias DSAsertifikat -keystore /skladiste.keystore -rfc -file


/DSAsertifikat.b64

Primer 5.8 Izvoz DSA sertifikata u Base64 formatu


Programski izlaz:

Oba izvezena sertifikata nalaze se u root-u diska, kao i skladite skladiste.keystore.


Da ne zaboravimo, koristimo lozinku Singidunum za pristup entitetima unutar
skladita.
U prvom primeru (Primer 5.9) koji sledi, demonstriraemo itanje sertifikata
kodovanog u DER formatu.

Primer 5.9 Programsko itanje sertifikata RSA sertifikat u DER formatu


Programski izlaz je kompletan sertifikat sa svim svojim atributima.
Programski izlaz:

129

_____________________________________________________________________________
Zatita informacionih sistema

Nakon to je sertifikat izvezen u DER formatu, itanje u Java programu i dalji rad sa
njim je vrlo jednostavan. Izvezeni RSA i DSA sertifikat su reprezentovani kao X.509

130

____________________________________________________________________________
Zatita informacionih sistema

sertifikati preko CertificateFactory klase. U drugom primeru (Primer 5.10),


demonstriraemo itanje sertifikata kodovanog u Base64 formatu.

Primer 5.10 Programsko itanje sertifikata DSA sertifikat u Base64 formatu


Programski izlaz:

131

_____________________________________________________________________________
Zatita informacionih sistema

132

____________________________________________________________________________
Zatita informacionih sistema

5.3.1 KREIRANJE ZAHTEVA ZA IZDAVANJE SERTIFIKATA - CSR


Zahtev za izdavanje sertifikata CSR (engl. Certificate Signature Request), predstavlja
standardnu formu (po PKCS#10 standardu) koja se koristi za slanje zahteva za
izdavanje potpisanog sertifikata od strane CA generisanje sertifikata od poverenja.
Pre nego to dobijemo digitalno potpisan sertifikat od strane CA, potrebno je da
saznamo koje algoritme na CA podrava. Veina e podrati RSA za digitalno
potpisivanje, dok su drugi namenjeni DSA algoritmu
Koristei KeyTool, preko komande genkey, generisaemo privatni i javni par kljueva
pod alijasom sertifikatParKljuceva. Potrebno je popuniti sva traena polja, kao to
je prikazano na konzolnom interfejsu ispod.
keytool -genkey keyalg RSA -keysize 2048 -alias sertifikatParKljuceva

Primer 5.11 Generisanje privatnog i javnog para kljueva


Kada imamo generisan par kljueva, moemo ponovo preko KeyTool-a da pozovemo
komandu certreq za generisanje CSR forme zahteva:

133

_____________________________________________________________________________
Zatita informacionih sistema

Primer 5.12 Kreiranje zahteva za digitalni potpis


Programski izlaz:

Kao to vidimo, programski izlaz je novi fajl sa ekstenzijom .CSR. Ne zaboravite, da


digitalni sertifikati sadre javni klju i meta podatke o vlasniku. Ni u jednom trenutku
ne treba distribuirati privatni klju, ak ni CA ne treba da zna privatni klju. Generisani
par kljueva treba uvati, ukoliko izgubimo privatni klju, sertifikat postaje bezvredan
i vie nije mogue generisati digitalne potpise ili obavljati operaciju ifrovanja sa
javnim kljuem. Operacija digitalnog potpisivanja zahteva privatni klju, a ne javni
sertifikat. Svakako, postoji mnogo razloga za rad sa sertifikatima od poverenja. Na
primer, moete slati bilo koja dokumenta digitalno potpisana vaim prijateljima ili
poslovnim saradnicima.
Nakon kreiranog CSR fajla, sledei korak je slanje CSR forme nekom CA kojem je
potrebno neko vreme da verifikuje sve navedene meta podatke. Ukoliko su svi meta
podaci verifikovani (geolokacija, adresa, ime i prezime, Veb adresa i td.), CA izdaje
digitalni potpis za traeni sertifikat. Pored potpisa, sertifikat je formatiran po
standardu PKCS#7, to znai da u sebi sadri kompletan sertifikacioni lanac koji je
potpisao. Na kraju, u zavisnosti kako CA funkcionie, vratie sertifikat kodovan u DER
formatu ili Base64.
Kada od CA dobijemo nazad sertifikat od poverenja, tada moemo javni sertifikat
distribuirati mrei neograniene brojnosti poslovnih partnera.

5.3.2 LISTA POVUENIH SERTIFIKATA CRL


Lista povuenih sertifikata CRL (engl. Certificate Revocation List) je lista izdata i
elektronski potpisana od strane CA koja ukljuuje serijske brojeve povuenih
sertifikata i tano vreme kada su povueni iz upotrebe. Dobijena lista se mora koristiti

134

____________________________________________________________________________
Zatita informacionih sistema

od strane treih strana uvek kada treba proveriti validnost sertifikata i/ili verifikaciju
digitalnog potpisa.
Povlaenje ili suspenzija sertifikata se radi u sledeim sluajevima:
x
x

na zahtev vlasnika sertifikata,


o neautorizovano objavljivanje,
o kompromitovanje privatnog kljua;
na zahtev druge institucije ukoliko smatra da u sertifikatu neki podaci nisu
tani;
o korisnik ne ispunjava navedene materijalne i nematerijalne obaveze,
o promena meta podataka u sertifikatu,
o kompromitovanje CA;

Takoe, vreme povlaenja sertifikata, period operativnog rada datog sertifikata se


istovremeno smatra zavrenim. Sertifikat koji je dospeo na CRL listu, moe biti trajno
povueni iz upotrebe ili privremeno suspendovan (reavanje manjeg problema zbog
kojeg je sertifikat povuen iz upotrebe).
Veliki nedostatak klasa iz domena bezbednosnih klasa u Javi nema implementiranu
mogunost automatskog preuzimanja CRL listi (na osnovu PKCS#7 formata). Takoe,
mnoge implementacije CRL listi mogu biti ponekad nepouzdane. Problem moe da
usledi zbog loe komunikacije koja moe usporiti rad itavog sistema prilikom
preuzimanja listi od CA.
U Javi je mogue analizirati CRL listu sa povuenim sertifikatima preko klase
X509CRLEntry. Da bismo demonstrirali funkcionalnosti ove klase, od organizacije
Verisign (CA), sa adrese crl.verisign.com/Class3SoftwarePublishers.crl, preuzet je fajl
Class3SoftwarePublishers.crl sa povuenim sertifikatima.

135

_____________________________________________________________________________
Zatita informacionih sistema

Slika 5.2 Informacije o CRL listi


Svaka CRL lista mora da poseduje informacije o izdavau liste, datume, algoritmu koji
je korien za digitalni potpis i digitalni potpis preko koga je mogue verifikovati
validnost liste. Prikazane detaljne informacije sa slike (Slika 5.2), odnose se na CRL
listu Class3SoftwarePublishers.crl koju je izdala organizacija Verisign.
U primeru (Primer 5.13), demonstriraemo upotrebu Java klase za parsiranje CRL
liste.

Primer 5.13 CRL lista sa opozvanim sertifikatima

136

____________________________________________________________________________
Zatita informacionih sistema

Programski izlaz:

U praksi, kada je CRL lista uitana u memoriju, proverava se validnost sertifikata


preko metoda isRevoked(), koji vraa rezultat true ako je sertifikat na listi ili
false ukoliko sertifikat nije pronaen. Pretraga se radi po rednom broju sertifikata.
Pored ovog metoda provere, mogue je koristiti OCSP (engl. Online Certificate Status
Protocol) protokol za dobijanje statusa preko Interneta o ponitenju X.509 sertifikata.
Ovaj protokol je opisan u dokumentu - RFC 6960. Ovaj protokol je nastao kao
alternativa CRL listi, zbog odreenih problema u korienju CRL listi na infrastrukturi
javni kljueva PKI. Poruke koje se razmenjuju preko OCSP-a su kodovane u ASN.1
formatu i obino se razmenjuju preko HTTP-a.
Java provajder BouncyCastle podrava OCSP protokol, dok mnogi drugi provajderi
Java kriptografske arhitekture ne podravaju.

137

_____________________________________________________________________________
Zatita informacionih sistema

5.3.3 IFROVANJE SA DIGITALNIM SERTIFIKATIMA


Nakon razumevanja procesa za generisanje sertifikata, procesa za kreiranje sertifikata
od poverenja (CSR), sledi jedan primer (Primer 5.14) u kom emo demonstrirati
upotrebu digitalnog sertifikata za operaciju ifrovanja. Jo jednom napominjemo da
sertifikat samo obuhvata javni klju i u ovom sluaju Cipher instancu inicijalizovanu
preko preoptereenog metoda init() za argument sertifikat.

Primer 5.14 ifrovanje sa digitalni sertifikatom


Programski izlaz:

Za ifrovanje koristili smo RSA sertifikat kodovan u DER formatu. ifarska instanca je
inicijalizovana preko preko dva argumenta. Prvi argument predstavlja reim
138

____________________________________________________________________________
Zatita informacionih sistema

ifrovanja (Cipher.ENCRYPT_MODE), a drugi sertifikat koji u sebi sadri javni klju.


Dobijeni ifrat je zapisan u fajl sifrat.X509.

5.3.4 DEIFROVANJE SA PRIVATNIM KLJUEM


U primeru koji sledi, zadatak je deifrovanje poruke koja je ifrovana sa javnim
kljuem u prethodnom primeru. Obzirom da se privatni klju ne nalazi u sertifikatu, a
postoji negde sigurno, jer digitalni sertifikat nije bilo mogue generisati bez privatnog
kljua, potrebno je pristupiti skladitu kljueva i preko adekvatnog alijasa uitati
privatni klju. Skladite kljueva ima reenu kontrolu pristupa, gde je bilo potrebno
uneti lozinku "Singidunum" za pristup entitetima. Svi entiteti za pristup koriste
lozinku koja je ista kao lozinka za pristup skladitu kljueva.

Primer 5.15 Deifrovanje sa privatnim kljuem od odgovarajueg sertifikata

139

_____________________________________________________________________________
Zatita informacionih sistema

Programski izlaz:

Za deifrovanje smo koristili privatni klju koji je bio smeten u skladite kljueva sa
obezbeenom kontrolom pristupa. ifarska instanca je inicijalizovana preko preko
dva argumenta. Prvi argument predstavlja reim ifrovanja (Cipher.DECRYPT_MODE),
a drugi privatni klju.
Pored navedenih standardnih procedura, napominjemo da je od izuzetne vanosti
brisanje podataka iz memorijske lokacije u kojoj je bila smetena lozinka. Ova rutina
nas titi od potencijalnih napada na memoriju raunara.

5.3.5 JEDAN SCENARIO SA RSA I TAJNIM KLJUEM


Kombinacija RSA sa tajnim kljuem je jedan realan scenario tajne komunikacije
izmeu Alise i Boba. Ukratko, Alisa sa Bobovim javnim sertifikatom ifruje AES tajni
klju koji je prethodno generisala. Alisa je sa istim AES tajnim kljuem ifrovala
bankarski dokument. Zatim, Alisa alje ifrat tajnog kljua i ifrat bankarskog
dokumenta Bobu. Bobov zadatak je da obavi kompletan postupak inverzno i da sazna
informacije iz bankarskog dokumenta.
Scenario po fazama na Alisinoj strani:
1.
2.
3.
4.
5.
6.
7.
8.
9.

140

Alisa uitava u memoriju Bobov sertifikat;


Alisa generie tajni klju za AES algoritam;
Alisa inicijalizuje AES ifru za ifrovanje sa digitalnim sertifikatom (javni klju);
Alisa ifruje generisani tajni klju;
Alisa zapisuje ifrat AES kljua u fajl;
Alisa inicijalizuje AES algoritam za ifrovanje;
Alisa uitava dokument-izvod sa bankarskim transakcijama;
Alisa ifruje AES-om dokument i ifrat zapisuje u fajl;
Alisa alje Bobu ifrat tajnog kljua i ifrat bankarskog izvoda;

____________________________________________________________________________
Zatita informacionih sistema

Scenario po fazama na Bobovoj strani:


1.
2.
3.
4.
5.
6.
7.

Bob uitava privatni klju iz svog skladita kljueva;


Bob uitava u memoriju ifrat tajnog kljua koji je dobio od Alise;
Bob inicijalizuje algoritam za deifrovanje sa privatnim kljuem;
Bob nakon deifrovanja dobija tajni klju;
Bob uitava ifrat izvoda bankarskih transakcija;
Bob inicijalizuje AES algoritam za deifrovanje;
Bob deifruje ifrat i dobija sve tajne informacije;

Bob moe opciono da obavesti Alisu o uspeno zavrenom kriptografskom ciklusu.


Slede dva primera, prvo primer (Primer 5.16) na Alisinoj, a zatim primer (Primer
5.17) na Bobovoj strani.

141

_____________________________________________________________________________
Zatita informacionih sistema

Primer 5.16 Scenario na Alisinoj strani RSA i tajni klju

142

____________________________________________________________________________
Zatita informacionih sistema

Primer 5.17 Scenario na Bobovoj strani RSA i tajni klju

143

_____________________________________________________________________________
Zatita informacionih sistema

6. NIST STATISTIKA BATERIJA TESTOVA


NIST-ov paket testova predstavlja statistiki paket koji se sastoji od 15 testova koji su
razvijeni za testiranje sluajnosti binarne sekvence koje proizvode hardver ili softver
na bazi kriptografski sluajnih ili pseudo sluajnih brojeva. Ovi testovi se fokusiraju na
razliite vrste determinizma koje bi mogle da postoje u nizu. Neki testovi su podeljeni
u vie podtestova.

6.1 PREGLED STATISTIKIH TESTOVA


U narednim poglavljima ukratko emo da diskutujemo posebno o svakom od testova.
Slede testovi iz NIST baterije testova:

o
o
o
o
o
o
o
o
o
o
o
o
o
o
o

Ispitivanje uestalosti u nizu


Ispitivanje uestalosti u bloku
Ispitivanje uzastopnih ponavljanja istih bitova u nizu
Ispitivanje najdueg uzastopnog ponavljanja jedinica u bloku
Ispitivanje stanja binarne matrice
Ispitivanje diskretne Furijerove transformacije
Ispitivanje nepreklapajuih uzoraka
Ispitivanje preklapajuih uzoraka
Maurerov univerzalni statistiki test
Ispitivanje linearne kompleksnosti
Serijski test
Ispitivanje pribline entropije
Ispitivanje sluajnih zbirova
Ispitivanje sluajne digresije
Ispitivanje sluajne promenljive digresije

6.1.1 ISPITIVANJE UESTALOSTI U NIZU


U fokusu ovog testu je ispitivanje odnosa jedinica i nula u nizu bitova. Cilj je
uoavanje jednakosti pojavljivanja ove dve vrednosti. Potreban je priblian broj

144

____________________________________________________________________________
Zatita informacionih sistema

jedinica i nula u sekvenci. Svi podtestovi koji proizilaze iz ovog testa direktno zavise
od njegove uspenosti.
Test se poziva preko metode Frequency(n) gde je n duina bitnog uzorka. Metoda
koristi i dodatni parametar koji predstavlja niz bitova generisanog preko RNG ili
PRNG koji se testira.
Primer:
Ulazni parametri:
=11001001000011111101101010100010001000010110100011
00001000110100110001001100011001100010100010111000
n = 100
Obrada:
S100 = -16
sobs = 1.6
Izlazni parametar:
P = 0.109599
Zakljuak:
Obzirom da je P 0.01, smatra se da je sekvenca sluajna.

6.1.2 ISPITIVANJE UESTALOSTI U BLOKU


Test posmatra odnos jedinica i nula u n-bitnim blokovima. Cilj predstavlja uoavanje
jednakosti broja jedinica i nula u svakom n-bitnom bloku. Poziv testa se vri preko
metode BlockFrequency(M, n) gde su:
M duina svakog bloka
n duina bitnog uzorka
145

_____________________________________________________________________________
Zatita informacionih sistema

Kao i kod testa za ispitivanje uestalosti u nizu, koristi se i dodati parametar .


Primer:
Ulazni parametri:
= 11001001000011111101101010100010001000010110100011
00001000110100110001001100011001100010100010111000
n = 100
M = 10
Obrada:
N = 10
= 7.2

Izlazni parametar:
P = 0.706438
Zakljuak:
Obzirom da je P 0.01, smatra se da je sekvenca sluajna.

6.1.3 ISPITIVANJE UZASTOPNIH PONAVLJANJA ISTIH BITOVA U NIZU


Posmatrana karakteristika u ovom testu je ukupan broj uzastopnih ponavljanja
jednog broja u nizu. Svrha ovog testa je da se odredi da li broj uzastopnih ponavljanja
nula i jedinica odgovara oekivanog sluajnoj sekvenci.
Poziv testa se vri preko metode Runs(n) gde je n duina bitnog uzorka. Takoe
postoji i dodatni parametar .
Primer:

146

____________________________________________________________________________
Zatita informacionih sistema

Ulazni parametri:

=
11001001000011111101101010100010001000010110100011
00001000110100110001001100011001100010100010111000
n = 100
= 0.02
Obrada:
= 0.42
Vn(abs) = 52
Izlazni parametar:
P = 0.500798
Zakljuak:
Obzirom da je P 0.01, smatra se da je sekvenca sluajna.

6.1.4 ISPITIVANJE NAJDUEG UZASTOPNOG PONAVLJANJA JEDINICA


U BLOKU
U ovom testu se posmatra najdue uzastopno ponavljanje jedinica u n-bitnim
blokovima. Svrha je odreivanje da li se duina najdueg uzastopnog ponavljanja
poklapa sa duinom koja bi se oekivala u nizu sluajnih brojeva.
Poziv testa vri se preko metode LongestRunOfOnes(n) gde je n duina bitnog uzorka.
Takoe postoji i dodatni parametar .
M duina svakog bloka. Test je podeen tako da za M koristi tri vrednosti: M = 8, M
= 128 i M = 104 u skladu sa duinom parametra n:

147

_____________________________________________________________________________
Zatita informacionih sistema

Minimum n

128

6272

128

750,000

104

Primer:
U sluaju kada je K = 3 i M = 8:
Ulazni parametri:
= 11001100000101010110110001001100111000000000001001
00110101010001000100111101011010000000110101111100
1100111001101101100010110010
n = 128
Obrada:
Maksimalno ponavljanje
podbloka

148

Maksimalno ponavljanje
podbloka

11001100 (2)

00010101 (1)

01101100 (2)

01001100 (2)

11100000 (3)

00000010 (1)

____________________________________________________________________________
Zatita informacionih sistema

01001101 (2)

01010001 (1)

00010011 (2)

11010110 (2)

10000000 (1)

11010111 (3)

11001100 (2)

11100110 (3)

11011000 (2)

10110010 (2)

0 = 4; 1 = 9; 2 = 3; 4 = 0; x2 = 4.882457

Izlazni parametar:
P = 0.180609
Zakljuak:
Obzirom da je P 0.01, smatra se da je sekvenca sluajna.

6.1.5 ISPITVANJE STANJA BINARNE MATRICE


Svrha ovog testa je provera linearne zavisnosti izmeu podnizova fiksne duine iz
originalnog niza.
Poziv testa vri se preko metode Rank(n) gde je n duina bitnog uzorka. Koristi se i
dodati parametar .
Primer:

149

_____________________________________________________________________________
Zatita informacionih sistema

Ulazni parametri:
= 11001001000011111101101010100010001000010110100011
00001000110100110001001100011001100010100010111000
n = 100
Obrada:
N1 = 46
N0 = 47.5
d = -1.376494
Izlazni parametar:
P = 0.168669
Zakljuak:
Obzirom da je P 0.01, smatra se da je sekvenca sluajna.

6.1.6 ISPITIVANJE DISKRETNE FURIJEROVE TRANSFORMACIJE


Fokus ovog testa predstavlja najvie vrednosti diskretne Furijerove transformacije
niza. Svrha ovog testa je da otkrije periodine funkcije u testiranom nizu koja bi
ukazivala na odstupanje od pretpostavke o sluajnosti. Namera je da se otkrije da li je
broj najviih vrednosti koje prelaze 95% znaajno razliit od preostalih 5%.
Poziv testa vri se preko metode DiscreteFourierTransform(n) gde je n duina bitnog
uzorka. Koriste se i dodatni parametri:
M broj redova u matrici
Q broj kolona u matrici

150

____________________________________________________________________________
Zatita informacionih sistema

Primer:
Ulazni parametri:
= prvih 1000000 binarnih vrednosti proirenje
n = 100000
M = Q = 32
Obrada:
N = 97
FM = 23, FM-1 = 60, N FM FM-1= 14
2 = 1.2619656
Izlazni parametar:
P = 0.532069
Zakljuak:
Obzirom da je P 0.01, smatra se da je sekvenca sluajna.

6.1.7 ISPITIVANJE NEPREKLAPAJUIH UZORAKA


Karakteristika koja se posmatra u ovom testu je uestalost pojave svih moguih nbitnih uzoraka gde ne dolazi do preklapanja u celom ispitivanom nizu. Test bi trebalo
da otkrije da li je broj pojava uzoraka koji se ne preklapaju priblino jednak broju koji
se oekuje za niz sluajnih brojeva.
Poziv testa vri se preko metode NonOverlappingTemplateMatching(m, n) gde su:
m duina bita u ablonu
n duina bitnog uzorka

151

_____________________________________________________________________________
Zatita informacionih sistema

Primer:
Ulazni parametri:
= 220 bitova dobijenih preko G-SHA-1 generatora
n = 220
B = 000000001
Obrada:
= 255.984375
2 = 247.499999
W1 = 259; W2 = 229; W3 = 271; W4 = 245; W5 = 272; W6 = 262;
W7 = 259; i W8 = 246
2(abs) = 5.999377
Izlazni parametar:
P = 0.110434
Zakljuak:
Obzirom da je P 0.01, smatra se da je sekvenca sluajna.

6.1.8 ISPITIVANJE PREKLAPAJUIH UZORAKA


Karakteristika koja se posmatra u ovom testu je uestalost pojave svih moguih nbitnih uzoraka gde dolazi do preklapanja u celom ispitivanom nizu. Test bi trebalo da
otkrije da li je broj pojava uzoraka koji se preklapaju priblino jednak broju koji se
oekuje za niz sluajnih brojeva.
Poziv testa vri se preko metode OverlappingTemplateMatching(m, n) gde su

152

____________________________________________________________________________
Zatita informacionih sistema

m duina bita u ablonu


n duina bitnog uzorka
Primer:
Ulazni parametric:
= binarno proirenje do 1000000 bita
n = 1000000
B = 111111111
Obrada:
0 = 329; 1 = 164; 2 = 150; 3 = 111; 4 = 78; i 5 = 136
2 (abs) = 8.965859
Izlazni parametar:
P = 0.110434
Zakljuak:
Obzirom da je P 0.01, smatra se da je sekvenca sluajna.

6.1.9 MAUREROV UNIVERZALNI STATISTIKI TEST


Ovim testom se ispituje mogunosti kompresije niza bez gubitka informacije. Za niz
koji se moe znaajno kompresovati smatra se da nije niz sluajnih bitova zbog
injenice da je kompresija niza efikasnija ukoliko niz pokazuje periodina svojstva.
Poziv testa vri se preko metode Universal(L, Q, n) gde su
L duina svakog bloka

153

_____________________________________________________________________________
Zatita informacionih sistema

Q broj blokova u inicijalnoj sekvenci


n duina bitnog uzorka
Takoe postoji i dodatni parametar .
Primer:
Ulazni parametri:
= binarno proirenje do 1000000 bita
n = 1000000
B = 111111111
Obrada:
0 = 329; 1 = 164; 2 = 150; 3 = 111; 4 = 78; i 5 = 136
2 (abs) = 8.965859
Izlazni parametar:
P = 0.110434
Zakljuak:
Obzirom da je P 0.01, smatra se da je sekvenca sluajna.

6.1.10 ISPITIVANJE LINEARNE KOMPLEKSNOSTI


Ovaj test se koristi za dobijanje duine linearnog pomerakog registra (engl. Linear
feedback shift register - LFSR). Svrha ovog testa je utvrivanje da li je sekvenca
dovoljno kompleksa da se moe smatrati sluajnom.
Poziv testa vri se preko metode LinearComplexity(M, n) gde su:

154

____________________________________________________________________________
Zatita informacionih sistema

M duina svakog bloka


n duina bitnog uzorka
Koristi se i dodati parametar kao i K broj stepeni slobode.
Primer:
Ulazni parametri:
= prvih 1000000 binarnih vrednosti proirenje
n = 1000000 = 106
M = 1000
Obrada:
v0 = 11; v1 = 31; v2 = 116; v3 = 501; v4 = 258; v5 = 57; v6 = 26
2(abs) = 2.700348
Izlazni parametar:
P = 0.845406
Zakljuak:
Obzirom da je P 0.01, smatra se da je sekvenca sluajna.

6.1.11 SERIJSKI TEST UESTALOSTI


Test se koristi za utvrivanje uestalosti svih moguih preklapanja n-bitnog niza u
itavoj sekvenci.
Poziv testa vri se preko metode Serial(m, n) gde su:
m duina svakog bloka
155

_____________________________________________________________________________
Zatita informacionih sistema

n duina bitnog uzorka


Koristi se i dodati parametar .
Primer:
Ulazni parametri:
= 1000000 bita binarnog proirenje
m=2
n = 1000000 = 106
Obrada:
#0s = 499971
#1s = 500029
#00s = 250116
#01s = #10s = 249855
#11s = 250174
22 = 0.343128; 21 = 0.003364; 20 = 0.000000
Izlazni parametar:
22 = 0.339764

222 = 0.336400
P1 = 0.843764
P2 = 0.561915
Zakljuak:

156

____________________________________________________________________________
Zatita informacionih sistema

Obzirom da su P1 i P2 0.01, smatra se da je sekvenca sluajna.

6.1.12 ISPITIVANJE PRIBLINE ENTROPIJE


U ovom testu posmatra se takoe uestalost pojave svih moguih preklapajui nbitnih uzoraka u nizu. Cilj je poreenje uestalosti preklapajuih blokova sa
oekivanim rezultatima.
Poziv testa vri se preko metode ApproximateEntropy(m, n) gde su:
m duina svakog bloka
n duina bitnog uzorka
Koristi se i dodati parametar .
Primer:
Ulazni parametri:
= 11001001000011111101101010100010001000010110100011
00001000110100110001001100011001100010100010111000
m = 2 i n = 100
Obrada:
ApEn(m) = 0.665393
2(obs) = 5.550792
Izlazni parametar:
P = 0.235301
Zakljuak:
Obzirom da jesu P 0.01, smatra se da je sekvenca sluajna.

157

_____________________________________________________________________________
Zatita informacionih sistema

6.1.13 ISPITIVANJE SLUAJNIH ZBIROVA


Svrha ovog testa je potreba da se utvrdi da li je kumulativni zbir parcijalnih sekvenci
koje se javljaju u nizu koji se testira suvie veliki ili suvie mali u odnosu na oekivano
ponaanje tog kumulativnog zbira sluajnih sekvenci.
Poziv testa vri se preko metode CumulativeSums(mod, n) gde je:
mod = 0 ili mod = 1
n duina bitnog uzorka
Koristi se i dodati parametar .
Primer:
Ulazni parametri:
= 11001001000011111101101010100010001000010110100011
00001000110100110001001100011001100010100010111000
n = 100
mod = 0 || mod = 1
Obrada:
z = 1.6 || z = 1.9
Izlazni parametar:
P = 0.219194 || P = 0.114866
Zakljuak:
Obzirom da jesu P 0.01, smatra se da je sekvenca sluajna.

158

____________________________________________________________________________
Zatita informacionih sistema

6.1.14 ISPITIVANJE SLUAJNE DIGRESIJE


Svrha ovog testa je da se utvrdi da li je broj odreenih stanja u okviru ciklusa odstupa
od onoga to bi se oekivalo od sluajne sekvence. Ovaj test je zapravo niz od osam
testova (i zakljuaka), jedan test i zakljuak za svako od stanja: -4, -3, -2, -1 i +1, +2,
+3, +4.
Poziv testa vri se preko metode RandomExcursions(n) gde je n duina bitnog
uzorka. Koristi se i dodati parametar .
Primer:
Ulazni parametri:
= 1000000 bita binarnog proirenje
n = 1000000 = 106
Obrada:
J = 1490

Stanje = x

x2

Zakljuak

-4

3.835698

0.573306

sluajan

-3

7.318707

0.197996

sluajan

-2

7.861927

0.164011

sluajan

-1

15.692617

0.007779

nije sluajan

159

_____________________________________________________________________________
Zatita informacionih sistema

+1

2.485906

0.778616

sluajan

+2

5.429381

0.365752

sluajan

+3

2.404171

0.790853

sluajan

+4

2.393928

0.792378

sluajan

Zakljuak:
Za x, u sedam stanja vai da je P 0.01, to dovodi do zakljuka da je sekvenca
sluajna.

6.1.15 ISPITIVANJE SLUAJNE PROMENLJVE DIGRESIJE


Svrha testa je da se utvrdi da li je ukupan broj stanja u kojima se niz nalazi, izmeu [9, -1] i [1, 9] premauje oekivane vrednosti isto sluajne sekvence. Ovaj test
zapravo predstavlja grupu od 18 testova (i zakljuaka), svaki test i zakljuak za svako
stanje: -9, -8,..., -1i +1, +2,...,+9.
Poziv testa vri se preko metode RandomExcursionsVariant(n) gde je n duina
bitnog uzorka. Koristi se i dodati parametar .
Primer:
Ulazni parametri:
= 1000000 bita binarnog proirenje
n = 1000000 = 106
Obrada:
160

____________________________________________________________________________
Zatita informacionih sistema

J = 1490

Stanje = x

x2

Zakljuak

-4

3.835698

0.573306

sluajan

-3

7.318707

0.197996

sluajan

-2

7.861927

0.164011

sluajan

-1

15.692617

0.007779

nije sluajan

+1

2.485906

0.778616

sluajan

+2

5.429381

0.365752

sluajan

+3

2.404171

0.790853

sluajan

+4

2.393928

0.792378

sluajan

Zakljuak:
Obzirom da je P 0.01 za svako od 18 stanja za x, smatra se da je sekvenca sluajna.

161

_____________________________________________________________________________
Zatita informacionih sistema

6.2 JAVA APLIKACIJA SA IMPLEMENTIRANOM BATERIJOM TESTOVA


Za potrebe predmeta - Zatita u informacionim sistemima razvijena je Java
aplikacija sa grafikim interfejsom, koja implementira NIST i Cryptool statistike
testove, koji predstavljaju elementarne testove kriptografske baterije testova.

Slika 6.1 Aplikacija sa baterijom statistikih testova


Na slici je prikazan izgled aplikacije. Po tabovima aplikacije su smeteni sledei
statistiki testovi sa implementacijom po NIST i Cryptool standardu:
x

162

Frekventni test;

____________________________________________________________________________
Zatita informacionih sistema

x
x

Serijski test;

Runs test;

Poker test;

Maurerov test;
Entropijski test;

Prikazana aplikacija nam omoguava da uitamo podatke iz fajla u zahtevanom


formatu, posle ega moemo da primenimo sve dostupne testove ili da radi
demonstracije testova generiemo sluajne podatke preko pseudo sluajnog
algoritma u Javi. Koristiemo SecureRandom klasu, iz razloga to Java upravo ovu
klasu koristi za generisanje kljueva. Kod nekih testova postoji ogranienje u vidu
minimalnog uzorka koji je potreban da bi se podaci izloili odreenom testu. Za
potrebe entropijskog testa generisali smo 1.000.000 bitova.
Na sledeem primeru (Primer 6.1) pokazan je rezultat entropijskog testa. Testirani
podaci su proli monobitnu, bigramsku, trigramsku i matrinu (4x4) entropijsku
analizu sa preklapanjem.

Primer 6.1 Rezultati entropijskog testa sa preklapanjem


Na rezultatima vidimo da su postignute maksimalne entropijske vrednosti po jednom
bitu. Koliina informacije u 1 bitu je priblino 1. Aplikacija prua mogunost izvoza
testiranog binarnog niza. Pored generisanja sluajnih bitova, data je mogunost
generisanja sluajnih vrednosti preko DES simetrinog algoritma. Osnovna ideja je da
se ifrat DES algoritma koristi kao izvor sluajnih podataka. Zbog visokog stepena
nelinearnosti koje proizvode S-kutije u DES algoritmu, ovakva upotreba DES algoritma

163

_____________________________________________________________________________
Zatita informacionih sistema

je mogua. Na sledeoj slici prikazan je prozor aplikacije za podeavanje DES


algoritma za generisanje sluajnih sekvenci. Uneli smo prvo neku sluajno smiljenu
poruku i klju u binarnom formatu koji koristimo za ifrovanje.

Slika 6.2 Generisanje sluajnih nizova preko DES ifrat


U primeru (Primer 6.2), prikazani su rezultati entropijskog testa za DES ifrat:

Primer 6.2 Entropijski test DES ifrat


Rezultati ovog entropijskog testa, zanemarljivo su loiji od testa binarnih nizova
generisanih preko SecureRandom klase.

164

____________________________________________________________________________
Zatita informacionih sistema

7. JEDAN PRIMER SINTEZE SOPSTVENOG IZVORA SLUAJNOSTI


U ovom delu udbenika diskutovaemo o jednom potencijalnom izvoru informacija.
Uloga ovakvih izvora je da se izgradi pouzdan generator kriptolokih kljueva. Pored
teorijske osnove o kojoj e bit vie rei, demonstriraemo jedan primer Java koda koji
u realnom vremenu prikuplja podatke od civilnog avio saobraaja. Na osnovu ovog
izvora mogua je sinteza generatora sluajnih vrednosti.
Ovako dobijene podatke potrebno je dalje analizirati i obraditi nekom od tehnika iz
oblasti digitalne obrade signala, u cilju dobijanja isto sluajnih binarnih sekvenci.
Njihova svrha prvenstveno treba da bude zamena za deterministike generatore koji
se koriste u Java JCA arhitekturi (pseudo sluajne generatore).
Zapravo, ovaj izvor daje studentima mogunost da u svojim kriptografskim
programima koriste sopstvene izvore sluajnosti za potrebe inicijalizovanja
kriptografskih algoritama za generisanje simetrinih ili asimetrinih kljueva
(SecureRandom i SecretKey).
Pored razvoja sopstvenog izvora sluajnosti, studenti imaju mogunost da u svojim
praktinim radovima dizajniraju sisteme za distribuciju kriptolokih kljueva preko
javnih komunikacionih kanala. Na ovaj nain ukazujemo na potrebu i atraktivnosti
tema koje se odnose na potpuno novo polje u kriptografiji, a to je bezbednost na
fizikom sloju.

7.1 ULOGA IZVORA SLUAJNOSTI U KRIPTOGRAFIJI


Na poetku udbenika rekli smo da je jedini teorijski dokaziv ifarski sistem upravo
One-Time pad. Da bi ovaj ifarski sistem obezbedio perfektnu tajnost neophodno je u
potpunosti ispuniti sledee uslove: kljuevi treba da budu generisani na potpuno
sluajan nain (ovakve izvore je mogue pronai u prirodi), duina kljua mora da
bude jednaka duini poruke koja se ifruje i klju nikada ne sme da se koristi dva
puta.

165

_____________________________________________________________________________
Zatita informacionih sistema

Na prvi zadatak je generisanje sluajnih nizova. Sluajne nizove je mogue generisati


pomou TRNG-a i PRNG-a. TRNG predstavlja generator isto sluajnih nizova koji je
mogue konstruisati u prirodnim okruenjima, dok PRNG generie pseudo sluajne
nizove na osnovu unutranjih stanja generatora koja poseduju osobine isto sluajnih
nizova. Obe vrste generatora je mogue upotrebiti za projektovanje ifarskih sistema,
ali u oba sluaja je neophodno generisati isto sluajne nizove, ija je jedina uloga u
domenu generisanja kriptolokih kljueva.
Uloga ovakvih izvora sluajnosti je u obezbeivanju kriptolokih kljueva visokog
kvaliteta, dovoljnih duina i stvaranju uslova za sintezu sistema za distribuciju
kriptolokih kljueva.

7.2 GENERISANJE SLUAJNOSTI NA OSNOVU AVIO SAOBRAAJA


U svakom trenutku iznad nas nalazi se nekoliko hiljada putnikih i teretnih aviona.
Ako pogledamo samo Evropu, broj letova u manje frekventnom delu dana je priblino
1000, dok u nekim delovima dana taj broj se moe znaajno uveati.

Slika 7.1 FlightRadar24 mapa Evropa


166

____________________________________________________________________________
Zatita informacionih sistema

U dananje vreme, skoro svi letovi se prate preko GPS sistema za navigaciju. Obzirom
na to da su podaci civilnog vazduhoplovstva javno dostupni, bilo gde da se nalazimo
na planeti zemlji, moemo sa velikom preciznou da znamo geografsku irinu,
geografsku duinu, brzinu i nadmorski visinu letilice. Zbog velike brzine letelica i
preciznosti GPS sistema, koordinate se veoma brzo menjaju u jedinici vremena, a
mogunost da se letelica u istom vremenskom trenutku nae na istoj
geoinformacionoj lokaciji ni teorijski ni praktino ne postoji.
Meutim, ukoliko posedujemo informacije o vie letova u istom vremenskom
trenutku, odbacujemo i mogunost da vrednosti geoinformacione lokacije svih tih
letova budu u jedinici vremena predvidljive. Na osnovu ove pretpostavke, analizirali
smo podatke letova na razliitim geoinformacionim lokacijama u jednom
vremenskom trenutku.
Prednost ovog sistema je to omoguava pristup istim podacima, na dva raunara
koja su fiziki udaljena. Ova injenica potencijalno obezbeuje realizaciju sistema za
distribuciju (razmenu) kriptolokih kljueva izmeu vie korisnika, pored mogunosti
za razvoj izvora sluajnosti za generisanje kriptolokih kljueva.

7.2.1 ARHITEKTURA IZVORA SLUAJNOSTI

Slika 7.2 ADS-B

167

_____________________________________________________________________________
Zatita informacionih sistema

Kao sto je prikazano na slici (Slika 7.2), GPS sateliti komuniciraju sa ureajima u
avionu i na taj nain obezbeuju podatke potrebne za upravljanje avionom. U
sledeem koraku avioni preuzimaju ulogu satelita i sada oni emituju novi radio signal
u okviru koga alju podatke relevantne za taj let. Ti podaci se prikupljaju u centrima
za kontrolu letenja na zemlji, ali te podatke prema zakonima civilnog
vazduhoplovstva mogu prikupljati svi zainteresovani pomou ADS-B tehnologije.
Obzirom na to da se podaci na ovaj nain ne mogu prikupiti samo na jednoj lokaciji za
celu Evropu, iz tog razloga podaci se prikupljaju na vie lokacija i smetaju u baze
podataka na Internetu, kako bi bili korieni za servise praenja aviona u realnom
vremenu. Jedan takav servis koji emo iskoristiti, prikazan je na slici (Slika 7.3).

Slika 7.3 Komunikacija izmeu korisnika i baze podataka

7.2.2 PRIKUPLJANJE I OBRADA PODATAKA


Posle prikupljenih podataka, sledi faza filtriranja. Faza filtriranja podrazumeva
odbacivanje podataka o letilicama koje su jo u fazi sletanja ili poletanja. Druga faza
podrazumeva jo i selekciju podataka. Obzirom na to da se u bazi osim podataka o
geografskoj irini i duini, nadmorskoj visini i brzini aviona nalaze i podaci o broju
leta, polaznom i dolaznom aerodromu kao i podaci o avio kompaniji, izdvajamo samo
podatke ije se vrednosti menjaju u jedinici vremena.

168

____________________________________________________________________________
Zatita informacionih sistema

Izvrenom prostom analizom utvrdili smo da su nama od znaaja samo promenljive


koje se odnose na podatke o geografskoj irini i duini, dok brzina i visina imaju
kontinuitet. Dolazimo i do poslednjeg procesa u fazi filtriranja. Podaci o geografskoj
irini i duini predstavljeni su sa realnim dvocifrenim brojem sa etiri decimale. Usled
velike preciznosti u decimalnom zapisu, brojevi ispred decimalne take nemaju
trenutnu promenu, iz tog razloga se odbacuju, a zadravaju se samo decimalne
vrednosti posle decimalnog zareza. Na primer, geografska duina je 50.4568, a
geografska irina 14.2563, tada zadravamo vrednosti posle decimalne take,
vrednost 4568 i 2563.
Analizom iji je rezultat prikazan na slici levo (Slika 7.4), jasno se vidi da usled
zaokurivanja decimalne vrednosti u intervalima od 0000 do 0500 i od 9500 do 9999
su dosta uestalije u odnosu na vrednosti iz drugih intervala, iz tog razloga smo
odstranili ova dva opsega slika desno (Slika 7.4). Ovu anomaliju moemo drugaije da
interpretiramo, kao greku vidljivu u naem sistemu usled zaokurivanja realnih
brojeva na etiri decimale.

Slika 7.4 Frekvencije po intervalima


Nakon faze kodovanja sledi provera kvaliteta generisanih binarnih sekvenci.

7.2.3 ANALIZA KVALITETA IZVORA SLUAJNOSTI


Kako bi potvrdili polaznu pretpostavku da nizovi bitova generisani na ovaj nain imaju
visok stepen sluajnost, koristili smo propisane statistike testove Nacionalnog

169

_____________________________________________________________________________
Zatita informacionih sistema

instituta za standarde i tehnologije SAD-a (NIST) i to objavljene i definisane u radu


800-22 iz Aprila 2010 pod nazivom "A Statistical Test Suite for the Validation of Random Number Generators and Pseudo Random Number Generators for Cryptographic
Applications".
Ovi testovi su razvijeni za testiranje sluajnosti binarne sekvence na taj nain to se
fokusiraju na razliite vrste nesluajnosti koje bi mogle da postoje u nizu. Paket
testova se sastoji od 15 razliitih statistikih testova gde neki od testova su podeljeni
u podtestove.
Za nae testiranje izabrali smo najee koriene testove iji rezultati se mogu
smatrati visoko pouzdanim. Kako bi dobili uporedni test sa nekim ve proverenim
TRN generatorom koristili smo podatke sa sajta random.org[LINK] koji vae za
potpuno sluajne podatke.
Test 1: Ispitivanje uestanosti u nizu
Cilj ovog testa je ispitivanje odnosa jedinica i nula u nizu bitova. Potreban je priblian
broj jedinica i nula u sekvenci.
Tabela 7.1 Rezultati testa uestanosti

random.org

P-vrednost

Avio izvor

0.808976294576234 0.8146073609727413

Broj bita na kojima je izvren kako ovaj, tako i naredni testovi je 9856. Nakon
izvrenog testa moemo zakljuiti da su oba niza zadovoljila uslov postavljen od
strane NIST-a

P t 0,01
i da se mogu smatrati sluajnim. Ako poredimo rezultate moemo zakljuiti da je
odnos nula i jedinica u oba niza bio priblino jednak.

170

____________________________________________________________________________
Zatita informacionih sistema

Test 2: Serijski test


Test se koristi za utvrivanje uestanosti svih moguih preklapanja n-bitnog niza u
itavoj sekvenci.
Tabela 7.2 Rezultati serijskog testa

random.org

Avio izvor

000

1215

1208

001

1250

1209

010

1280

1157

011

1195

1225

100

1251

1209

101

1225

1173

110

1195

1125

111

1245

1215

P-val 1

0.3174364812591314 0.6440496128821558

Trigrami

171

_____________________________________________________________________________
Zatita informacionih sistema

P-vrednost

0.1088774362443912 0.4608606318159197

Rezultati dobijeni u ovom testu su ispunili NIST-ov zahtev definisan u formuli (1) te i
nakon ovog testa moemo tvrditi da su nizovi sluajni, uz napomenu da je test nad
naim nizom pokaza da je odnos u preklapanju ujednaeniji.
Test 3: Ispitivanje uzastopnih ponavljanja
Posmatrana karakteristika u ovom testu je ukupan broj uzastopnih ponavljanja
jedinice ili nule u nizu.
Tabela 7.3 Rezultati testa uzastopnih ponavljanja

random.org

P-vrednost

Avio izvor

0.6426910024891495 0.353825079052692

Nakon sprovedenog testa rezultati su zadovoljili definisane zahteve i na osnovu toga


generisane nizove smatramo sluajnim. U poreenju ova dva niza nakon testa
moemo zakljuiti da niz sa sajta random.org ima vie promena iz 0 u 1 ili obrnuto.
Test 4: Entropijski test
U ovom testu posmatra se uestalost pojave svih moguih preklapajuih n-bitovskih
uzoraka u nizu.
Tabela 7.4 Rezultati entropijskog testa

Random.org

Monobit

172

Avio izvor

0.9999957227359038 0.9999958775044104

____________________________________________________________________________
Zatita informacionih sistema

Bigram

0.9999878164470851 0.9999625655234716

Trigram

0.9998791930081991 0.9999120107423237

4x4 Matrice

0.9998558732137256 0.9997868840346474

Vrednosti i ovog testa zadovoljavaju zahteve NIST-a. Moemo tvrditi da je na niz


sluajan i da je u poreenju sa nizom sa sajta random.org i nakon ovog testa pokazao
bolje rezultate te shodno tome moemo tvrditi da poseduje osobine sluajnosti i da
moe biti korien kao materijal za generisanje kvalitetnih kriptolokih kljueva.
Zbog brzine Interneta mi nismo u mogunosti da pratimo kretanje odreene letilice
za svakih 15ms, tako da nam to i dodatno pomae da se vrednosti koordinata
drastino promene. Na ovaj nain u vremenskom intervalu od nekoliko sekundi
moemo dobiti veliki broj binarnih nizova. Meutim broj bitova u sekundi koji
proizvede neki TRNG je daleko vei.

7.2.4 JAVA PROGRAM ZA PRIKUPLJANJE PODATAKA U REALNOM


VREMENU
U primeru Java koda koji sledi, prikupljamo podatke pojedinano o svakom letu.
Adresa preko koje pristupamo odnosi se na pristup podacima generisanim nad
Evropom. Promenom adrese mogue je pribavljati i podatke sa drugih kontinenata.
Program ispisuje dva tipa rezultata. U sluaju A, ispisujemo samo koordinate, a u
sluaju B koordinate i dodatne podatke

173

_____________________________________________________________________________
Zatita informacionih sistema

Primer 7.1 Prikupljanje podataka o trenutnim letovima


Izlaz iz programa (sluaj A):

174

____________________________________________________________________________
Zatita informacionih sistema

Izlaz iz programa (sluaj B):

175

_____________________________________________________________________________
Zatita informacionih sistema

DODATAK - PROJEKTNI ZADACI I LABORATORIJSKE VEBE


Na osnovni cilj u ovom udbeniku je da student izborom predmeta Praktikum
zatita informacionih sistema u potpunosti praktino ovlada izabranom oblau.
Studenti prolaze kroz nekoliko faza u toku trajanja ovog predmeta:
1. Izbor teme iz oblasti zatite u informacionim sistemima;
2. Istraivanje aktuelnog stanja iz izabrane oblasti i usvajanje teorijskih znanja;
3. Izrada praktinog reenja za demonstraciju bezbednosnih problema i reenja
za aktuelne probleme;
4. Predstavljanje rezultata istraivanja - pregled aktuelnog stanja u izabranoj
oblasti;
5. Predstavljanje praktinih rezultata - demonstracija praktinog reenja;
6. Izrada projektnog/diplomskog rada na zadatu temu;

8.1 TEME ZA PROJEKTNI ZADATAK


Sledee teme su potencijalni projektni zadaci. Takoe, studenti mogu predloiti temu
koja moe uz odobrenje da postane tema za projektni / diplomski rad:
1. Jedan primer pravilne implementacija kriptografskih mehanizama u Java
programskom jeziku;
2. Razvoj kriptografskog protokola u Java programskom jeziku;
3. Implementacija kriptografskih algoritama u poslovne aplikacije (kriptografska
zatita fajlova i baza podataka);
4. Algoritmi za sekvencijalne ili blokovske ifre i njihove modifikacije (rad na
performansama algoritma);
5. Standard za autentifikaciju i digitalni identitet korisnika na Internetu, koji
omoguava korisnicima da se jednim isti nalogom autentifikuju na razliitim
Veb sajtovima (OPEN-ID);
6. Zatita izvornog koda PHP aplikacija;
7. Kriptografske funkcije u Veb okruenju;
8. Upravljanje bezbednou Veb aplikacija sa otvorenim izvornim kodom;
9. Dizajniranje novih reima za ifrovanje kod blokovskih ifara (CBC, ECB, CFB);
176

____________________________________________________________________________
Zatita informacionih sistema

10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.

Razvoj i implementacija CAPTCHA sistema;


SQL injection napadi na Veb aplikacije;
Cross-Site Scripting (XSS) i Cross-site request forgery (CSRF);
Zatita Veb aplikacija i baza u deljenom produkcionom okruenju;
Sistemi za elektronsku trgovinu bezbednosni i funkcionalni aspekt;
Biometrijski sistemi za autentifikaciju i informaciona analiza biometrije;
Implementacija biometrijske autentifikacije;
Generisanje kriptolokih kljueva na osnovu biometrije;
Distribucija kriptolokih kljueva preko javnih komunikacionih kanala
(bezbednost na fizikom sloju);
Razvoj servisa za digitalno potpisivanje dokumenata sa sopstvenim
sertifikacionim telom;
Primena informacionih mera u kriptoanalizi;
Primena informacionih mera u procesu estimacije isto sluajnih nizova;
Razvoj sopstvene PKI infrastrukture u LAN-u;
Konstruisanje pseudo sluajnog generatora (PRNG) na osnovu sluajnih
poetnih stanja dobijenih preko nekog fizikog izvora informacija (TRNG);
Analiza steganografskih tehnika i primena u oblasti digitalnih vodenih peata
u cilju zatite autorskih prava;
Razvoj i primena pesudo perfektnih ifara u dananjem okruenju sa
priblinim bezbednosnim performansama One-time pad ifre;
Razvoj sopstvenih kriptografskih protokola za primenu u integrisanim
sistemima;
Uloga distribuiranog raunarstva u razvoju kriptoanalize;
Razvoj i primena savremenih kriptoanalitikih metoda;
Standardi za implementaciju i testiranje kriptografskih algoritama;
Razvoj ergonomskih aplikacija za kriptografsku zatitu fajlova na operativnom
sistemu;
Merenje performansi simetrinih ifri i optimizacija za primenu na odreenoj
platformi;
Modul za generisanje kriptolokih kljueva na osnovu sopstvenih izvora
sluajnosti;
Kriptografska zatita u bazama podataka;
Protokoli za razmenu simetrinih kljueva;

177

_____________________________________________________________________________
Zatita informacionih sistema

35. Aplikacija za digitalno potpisivanje dokumenata sa modulom za generisanje i


skladitenje sertifikata;
36. Analiza performansi provajdera kriptografskih funkcija na Java bezbednosnoj
arhitekturi;

8.2 LABORATORIJSKE VEBE


Upotrebom kriptografskih algoritama u Javi, lokalno ili preko mree, simulirati
sledee kriptografske protokole. Za uspenu realizaciju laboratorijskog rada,
predlaemo upotrebu sledeih Java klasa (upotreba svih navedenih klasa je
demonstrirana u udbeniku):


178

KeyGenerator

SecretKeySpec

FileInputStream

FileOutputStream

CertificateFactory

Certificate

AlgorithmParameterGenerator

KeyAgreement

KeyPair

PrivateKey

SecretKey

Cipher

CipherInputStream

IvParameterSpec

ByteArrayInputStream

DHParameterSpec

AlgorithmParameters

KeyPairGenerator

SecureRandom

PublicKey
Signature

____________________________________________________________________________
Zatita informacionih sistema




Path

KeyStore

Mac

SecretKeyFactory

PBEKeySpec

X509CRL

KeyFactory

Provider

Files

RSAPrivateKey

MessageDigest

DESKeySpec

Iterator

PKCS8EncodedKeySpec

X509EncodedKeySpec
Key

Zadatak 1:
Protokol zahteva tri poruke izmeu Alise i Boba. Alisa ima ulogu klijentskog raunara,
dok Bob ima ulogu serverskog raunara. U prvoj poruci Alisa se predstavlja pred
Bobom Ja sam Alisa, u drugoj poruci Bob trai od Alise da dokae da je ona zaista
Alisa. Alisa zna svoju lozinku Singidunum i alje je Bobu. Kod Boba se nalazi baza
podataka koja sadri lozinke svih svojih korisnika. Bob pretrauje Alisinu lozinku i
nakon toga potvruje Alisin identitet. Simulirati protokol sa slike (Slika 0.1).

Slika 0.1 Primer jednostavne autentifikacije

179

_____________________________________________________________________________
Zatita informacionih sistema

Zadatak 2:
Komunikacija izmeu Alise i Boba izgleda identino kao u prethodnom zadatku, osim
u poslednjoj poruci kada Alisa alje Bobu poruku tako to rauna otisak poruke he
od lozinke preko neke jednosmerne funkcije, kao to su MD5, SHA1 i td. Na ovaj
nain Alisa krije lozinku od Boba i napadaa. Da objasnimo, Bob sada u svojoj bazi
podataka uva samo Alisinu he vrednost od lozinke, na osnovu koje na identian
nain prihvata ili odbacuje Alisin identitet. Simulirati protokol sa slike (Slika 0.2).

Slika 0.2 Poboljani protokol za autentifikaciju


Zadatak 3:
Ovde emo istai da algoritmi koji se koriste za raunanje he vrednosti (MD5), ne
spadaju u grupu kriptografskih tehnika, iz tog razloga kaemo da je uvoenjem
kriptografskih tehnika mogue doi do jo boljih reenja koja e u velikoj meri
doprineti podizanju nivoa bezbednosti kod protokola. Simulirati protokol sa slike
(Slika 0.3), koji predstavlja modifikaciju prethodnog protokola.

Slika 0.3 Protokol za autentifikaciju, izazov odgovor

180

____________________________________________________________________________
Zatita informacionih sistema

Zadatak 4:
Simulirati protokol za autentifikaciju simetrinim kljuem. Sledi specifikacija
protokola:
1. Alisa se predstavlja Bobu Ja sam Alisa.
2. Bob generie sluajnu vrednost izazov, zatim alje Alisi.
3. Alisa ifruje sa simetrinim algoritmom sluajnu vrednost R, dobijeni ifrat
alje Bobu.
4. Bob deifruje ifrat koji mu je Alisa poslala i verifikuje Alisu na osnovu izazova
R koji je poslao u drugom koraku.

Slika 0.4 Jednostrana autentifikacija simetrinim kljuem


Zadatak 5:
Simulirati protokol za uzajamnu autentifikaciju simetrinim kljuem. Sledi
specifikacija protokola:
1. Alisa se predstavlja Bobu Ja sam Alisa i generie sluajnu vrednost RA
izazov, zatim alje Bobu.
2. Bob ifruje sa simetrinim algoritmom i kljuem KAB,, identitet parametar
(Bob) i sluajnu vrednost RA i generie sluajnu vrednost RB za Alisu. Zatim
dobijeni ifrat i vrednost RB alje Alisi.
3. Alisa preko primljenog ifrata verifikuje Bobov identitet. Alisa ifruje vrednost
RB i identitet parametar (Alisa) kljuem KAB, zatim generisani ifrat alje
Bobu na osnovu koga Bob verifikuje Alisin identitet.

181

_____________________________________________________________________________
Zatita informacionih sistema

Slika 0.5 Uzajamna autentifikacija sa simetrinim kljuem


Zadatak 6:
Simulirati protokol sa slike (Slika 0.6). Protokol omoguava Bobu da autentifikuje
Alisu preko javnog kljua, jer samo ona moe da uradi operaciju ifrovanja sa svojim
privatnim kljuem i da prosledi korektan odgovor vrednost (deifrovano R) u treem
koraku.

Slika 0.6 Autentifikacija sa javnim kljuem ifrovanje


Sledi specifikacija protokola:
1. Alisa se predstavlja Bobu Ja sam Alisa.
2. Bob generie sluajnu vrednost R (izazov) i alje je Alisi.
3. Alisa u ovoj fazi koristi svoj privatni klju za potpisivanje poruke (vrednost R izazov) koju je dobila od Boba, zatim alje potpisanu poruku R Bobu, na
osnovu koga Bob verifikuje Alisu.

182

____________________________________________________________________________
Zatita informacionih sistema

Zadatak 7:
Simulirati protokol sa slike (Slika 0.7). Protokol treba da omoguava uzajamnu
autentifikaciju i razmenu sesijskog kljua upotrebom asimetrine kriptografije.

Slika 0.7 Protokol za uzajamnu autentifikaciju i uspostavu sesijskog kljua


potpisivanje i ifrovanje javnim kljuem
Dizajn protokola treba da bude takav da obe strane prvo potpisuju vrednost R i klju
K sa privatnim kljuem, a zatim ifruju sa javnim kljuem druge strane.
Zadatak 8:
Simulirati protokol za razmenu sesijskog kljua preko PFS-a i simetrinih ifri. Dizajn
protokola je prikazan na slici(Slika 0.8).

g a mod p
g b mod p

Slika 0.8 Implementacija PFS metoda sa simetrinim iframa


Ovaj dizajn protokola je interesantan pristup za implementaciju PFS metode koja
ispunjava sve postavljene zahteve. U ovoj realizaciji PFS-a, klju sesije KS se vie ne
prenosi preko mree. Moemo da primetimo da se KS sada izraunava na Alisinoj i

183

_____________________________________________________________________________
Zatita informacionih sistema

Bobovoj strani, a nakon izraunavanja Alisa i Bob permanentno zaboravljaju


(unitavaju na siguran nain) tajne parametre a i b koji su iskorieni samo za
odreeni klju sesije. Za svaki novi klju sesije, parametri e nanovo biti generisani na
neki sluajan nain. Ovim smo dobili efemerni DH protokol u kojem ak ni Alisa ni Bob
ne mogu kasnije da rekonstruiu KS.
Zadatak 9:
Simulirati protokol za razmenu sesijskog kljua preko PFS-a i asimetrinih ifri.
Protokol sadri sve elemente protokola sa kojim smo se do sada susretali. U ovom
protokolu Alisa i Bob e biti autentifikovani. Komunikacija u vidu sesija bie
bezbedna. Takoe, obezbeen je PFS.

g b mod p
g a mod p

Slika 0.9 Protokol za uzajamnu autentifikaciju, razmeni sesijskog kljua sa PFS


metodom
Zadatak 10:
Simulirati protokol sa vremenskim peatom na slici (Slika 0.10). Traeni dizajn
protokola sa vremenskim peatom je u sutini verzija protokola potpii pa ifruj.

Slika 0.10 Autentifikacija sa vremenskim peatom


184

____________________________________________________________________________
Zatita informacionih sistema

LITERATURA
A. Rukhin, J. Soto, J. Nechvatal, M. Smid, E. Barker, S. Leigh, M. Levenson, M.
Vangel, D. Banks, A. Heckert, J. Dray / S. Vo A Statistical Test Suite for Random and
Pseudorandom Number Generators for Cryptographic Applications [asopis]. Gaithersburg : NIST, 2010.
Chapter 13: Encryption - Symmetric Key Agreement [Na mrei] //
http://docstore.mik.ua/orelly/java-ent/security/ch13_07.htm. - O'Reilly & Associates,
2015.
Flanagan David Java in a Nutshell, Fourth Edition [Knjiga]. - [s.l.] : OReilly &
Associates. - 0-596-00283-1.
FlightRadar24 http://www.flightradar24.com/ [Na mrei]. - 2015.
Gilstrap Brian R. An Introduction to Cryptography and the Java Cryptography
Extension.
Guidelines for Implementing and Using the NBS Data [Na mrei] // http
://www.itl.nist.gov/fipspubs/fip 74.htm. - FIPS 74.
Huseby Sverre H. Innocent Code - A Security Wake-Up Call for Web Programmers
[Knjiga]. - [s.l.] : John Wiley & Sons Inc.
M. Milosavljevi, S. Adamovi Kriptologija 2 [Knjiga]. - Beograd : Univerzitet
Singidunum, 2014. - 978-86-7912-537-8.
M. Milosavljevi, S. Adamovi Osnove teorije informacija i kodovanja [Knjiga]. Beograd : Univerzitet Singidunum, 2014. - 978-867912-506-4.
M. Tatovi, S. Adamovi, A. Jevremovi, M. Milosavljevi One method for
generating uniform random numbers via civil air traffic [Radovi] // SINTEZA Singidunum University International Conference. - Beograd : [s.n.], 2014. - T. 1. - str.
606-609.

185

_____________________________________________________________________________
Zatita informacionih sistema

M. Veinovi, S. Adamovi Kriptologija 1 [Knjiga]. - Beograd : Univerzitet Singidunum,


2013.
ORACLE Java Cryptography Architecture Oracle Providers Documentation for Java
Platform Standard Edition 7 [Na mrei] // http://docs.oracle.com/. - 2014. http://docs.oracle.com/javase/7/docs/technotes/guides/security/SunProviders.html.
Random [Na mrei] // http://www.random.org. - 2014.
Schneier Niels Ferguson & Bruce Practical Cryptography [Knjiga]. - ISBN 0471223573.
Weiss Jason Java cryptography extensions - practiical guide for programmers
[Knjiga]. - San Francisco : [s.n.]. - T. 1.

186

____________________________________________________________________________
Zatita informacionih sistema

RENIK POJMOVA

A
AES - Advanced Encryption Standard. Blokovska ifra sa simetrinim kljuem,
standardizovana od strane NIST-a. Pripada grupi modernih ifara. Duina kljua
je 128, 192, i 256 bitova.
ASCII - ameriki kodni standard za razmenu informacija. Ove kodove koristi
veliki broj raunarskih sistema za prevoenje karaktera u binarne brojeve.
Algoritam - opis za reavanje nekog problema.
Asimetrini ifarski sistemi sistemi sa javnim i privatnim kljuem. Primer
ovog tipa algoritama je RSA koji se koristi za ifrovanje i digitalno potpisivanje.

B
Biometrija - tehnika za autentifikaciju koja koristi jedinstvene fizike
karakteristike nekog pojedinca. Postoje razliiti tipovi biometrije.
Biometrijski obrazac - digitalizovana fizika karakteristika nekog pojedinca za
odreeni biometrijski izvor koji se koristi za autentifikaciju date osobe.
Binarna sekvenca - niz karaktera (jedinica i nula) ili binarni niz.
Blok kod - skupovi rei iste duine koji predstavljaju strukturu red.

V
VOIP - protokol koji se koristi za digitalizaciju govora, pakovanje i slanje preko
TCP/IP veze.

187

_____________________________________________________________________________
Zatita informacionih sistema

Vizuelna kriptografija - specijalna tehnika ifrovanja koja omoguava skrivanje


informacija na slici, na takav nain da se moe deifrovati ljudskim okom bez
upotrebe raunara.
Venona - predstavlja One-time pad u realnosti. Koristila ga je sovjetska
pijunska mrea koja je formirana na teritoriji SAD 1940-tih.

G
GSM - globalni sistem za telekomunikacije. Internacionalni standard za
satelitske telefone.

D
DES - Data Encryption Standard. Blokovska ifra sa simetrinim kljuem
usvojena od strane NIST-a. Pripada grupi modernih ifara. Duina kljua je 56
bitova, prevazien je od strane AES-a.
Digitalni potpis - protokol koji koristi primalac poruke da bi verifikovao
poiljaoca poruke. Za verifikaciju se koristi javni klju poiljaoca. Obezbeuje
servis neporecivosti.
Deifrovanje - proces transformacije ifrata u otvoreni tekst.
Digitalni vodeni peat - tehnika za zatitu autorskih prava digitalnih sadraja.
Difi-Helman - protokol namenjen za razmenu simetrinih kljueva preko javnih
komunikacionih kanala.
DSA - asimetrini algoritam za digitalno potpisivanje.

188

____________________________________________________________________________
Zatita informacionih sistema

E
Entropija - mera za koliinu neodreenosti ili prosena koliina informacije
koju sadre generisane poruke nekog informacionog izvora.
ECB - reim za ifrovanje kod blokovskih ifara u kom je svaki blok ifrata
potpuno nezavisan. Ovaj reim moe da bude nebezbedan.

I
Iris - ara irisa ili obojeni deo oka koji je prilino haotian (neodreen) ili
sluajan. Predstavlja biometrijski izvor sa visokim performansama.
Integritet - prevencija od neautorizovane izmene sadraja (poruke).
Informacioni izvor - generator sekvence simbola koji predstavljaju poruke.

J
Javni klju - element sistema sa javnim kljuem ili javni klju nekog korisnika
koji je dostupan svim korisnicima u mrei. Koristi se u fazi ifrovanja.

f (x) , tada je x z f ( y) . He funkcije su vrsta jednosmernih funkcija.

Jednosmerna funkcija - sam naziv kae da je funkcija neinvertibilna, ako je

K
Kapacitet kanala - maksimalna prosena koliina informacija na izlazu
kanala koja je jednaka koliini informacije na ulazu.
Kodna re - binarna sekvenca kojom je predstavljen simbol izvorne poruke.
Kriptoanaliza - umetnost i nauka o razbijanju ifrovanih poruka.

189

_____________________________________________________________________________
Zatita informacionih sistema

Komunikacioni kanal - formalizacija ta se deava u prenetoj poruci izmeu


predajne i prijemne strane.
Kompletan kod - prefiksni kod ije kodno stablo ne sadri nekoriene listove.
Kodovanje - transformacija simbola poruke u kodne rei.
Kriptoloki klju - binarna sekvenca vee duine, poseduje osobine sluajnih
nizova. Koristi se kao poetno stanje algoritma u fazi ifrovanja i deifrovanja.
Kriptograf - lice koje dizajnira ifre.
Kriptoanalitiar - lice koje dizajnira metode za razbijanje ifara.
Kriptografija - nauka o pravljenju algoritama za ifrovanje.
Kriptoanaliza - nauka o razbijanju algoritama za ifrovanje.

L
LAN - lokalna mrea.
LFSR - linearni pomeraki registar sa povratnom spregom. Njegova uloga se
sastoji u generisanju pseudo sluajnih sekvenci. Ima periodu (ponavlja se
nakon izvesnog vremena).
LSB - steganografska tehnika za ugraivanje tajnih poruka u podatak nosilac po
principu zamene bitova sa najmanjim znaajem.
Lozinka - tajni akreditiv (string od proseno 8 karaktera) koji se koristi za
autenitfikaciju kod tradicionalnih sistema za autentifikaciju. Korisnik je u stanju
da zapamti vise lozinki, dok kriptoloke kljueve nije mogue zapamtiti.

M
MAC - kod za proveru autentinosti poruke.
190

____________________________________________________________________________
Zatita informacionih sistema

N
NIST - amerika federalna agencija za standarde i tehnologiju.
NSA - nacionalna agencija za bezbednost. Amerika agencija koja je odgovorna
za bezbednost i kriptoanalizu elektronskih komunikacija.

O
One-time pad - perfektna ifra koja pripada grupi ifara sa simetrinim
kljuem. Klju je generisan na sluajan nain i ima jednaku duinu kao i poruka.
Klju ne sme nikad da se ponavlja.
Otvoreni tekst - poruka u fazi ifrovanja ili rezultat funkcije za deifrovanje.

P
PGP - program za bezbednu elektronsku potu koji objedinjuje servise za
kriptografsku zatitu podataka i digitalno potpisivanje. Razvijen od strane Fila
Cimermana.
PKI - infrastruktura sa javnim kljuevima. Sadri bazu javnih kljueva preko
kojih obezbeuje autentifikaciju u srednjim i velikim mreama.
Privatni klju - element sistema sa javnim kljuem ili tajna koju uva svaki
korisnik. Koristi se u fazi deifrovanja.
Protokol - protokol je skup pravila koje razumeju i potuju strane u
komunikaciji.
Poruka - podatak koji se razmenjuje preko komunikasionog kanala izmeu
predajne i prijemne strane. Moe da bude kodovana i u ifrovanoj formi.

191

_____________________________________________________________________________
Zatita informacionih sistema

Perfektna tajnost teorijski dokazan kriptografski mehanizam koji ne zavisi od


raunarske snage.
PRNG - generator za generisanje pseudo sluajnih brojeva na osnovu
inicijalnog stanja koje je odreeno na sluajan nain.
PBE - generisanje kriptolokog kljua na osnovu lozinke.

R
RSA - kriptografski sistem sa javnim kljuem, patentiran od strane Rivesta,
amira i Adlemana 1976. Sigurnost RSA zasniva se na sloenosti faktorizacije
velikih brojeva. Ima iroku primenu, implementiran je u PGP i SSL-u.
RC4 - sekvencijalna ifra sa simetrinim kljuem. Pripada grupi modernih ifara.
Duina kljua jednaka je poruci. Neki je nazivaju pseudo perfektna ifra. Za
generisanje kljua koristi se generator za pseudo sluajne brojeve. Pravila
implementacije su skoro ista kao i kod perfektnih ifara.

S
Sertifikat - elektronski fajl, obino sadri javni klju koji je digitalno potpisan od
Sertifikacionog tela. Sertifikati se koriste za autentifikaciju na Internetu.
Sertifikaciono telo - trea strana od poverenja koja potpisuje i distribuira
sertifikate.
SSL - iroko primenjeni zatitni protokol za autentivikaciju na Internetu (Internet transakcije)
Simetrini klju - kriptoloki klju koji je identian na predajnoj i prijemnoj
strani.
Steganografija - nauka o skrivanju informacija u drugim bezazlenim podacima.
est primer je skrivanje tekstualnog sadraja u neku sliku.

192

____________________________________________________________________________
Zatita informacionih sistema

Stacionarni izvor informacioni izvor ija statistika ne zavisi od vremena.


Sesijski klju simetrini klju za jednokratnu upotrebu.

T
TCP/IP - protokol koji se koristi za prenos informacija u raunarskim mreama.
TCP/IP je postao standard za sve mree povezane sa Internetom.
TDES - blokovska ifra sa simetrinim kljuem, usvojena od strane NIST-a.
Bazirana na sukcesivnoj aplikaciji tri DES algoritma sa razliitim kljuevima.
Predstavlja ojaanje klasinog DES-a.
TRNG - generator sluajnih brojeva; ovakve generatore je mogue konstruisati
u prirodnim informacionim izvorima.

F
Faktorizacija - rastavljanje velikih prostih brojeva na inioce iz skupa prostih
brojeva.
Fejstel ifra - nazvana po nemakom kriptografu Horstu Fejstelu (Horst Feistel)
koji je pionir u razvoju dizajna blokovskih ifara, radio je u IBM-u. Ovo su bila
inicijalna istraivanja koja su kulminirala razvoju DES (Data Encryption Standard) algoritma 1970. godine. Fejstel ifra predstavlja dizajn blokovske ifre, a
ne posebnu ifru.

H
Haker originalno se termin koristi za kreativnog programera koji razvija
programe za ilegalan pristup raunarskim mreama u cilju krae ili unitenja
informacija. Dobar haker treba da poseduje dobre kriptoanalitike vetine.

193

_____________________________________________________________________________
Zatita informacionih sistema

Hamingovo rastojanje - koristi se za odreivanje razlike izmeu dva niza


jednake duine.
He funkcije - funkcija koja generie skraenu verziju poruke. U kriptografskim
aplikacijama he funkcije moraju da budu jednosmerne sa malom
verovatnoom da dve razliite poruke mogu da daju isti rezultat.

C
CRC - Cyclic Redudancy Check. Kod iroke primene, koristi se za detektovanje
greaka. Obino pre deifrovanja, CRC se proverava.
CBC - reim za ifrovanje kod blokovskih ifara. Radi na principu ulanavanja
blokova ifrata.
CFB - transformacija simetrine ifre iz blokovski u sekvencijalni reim
ifrovanja.

ifra - algoritam za ifrovanje. Mogu da postoje razliiti tipovi ifara. Osnovne


podele su na klasine i moderne, simetrine i asimetrine, apsolutno i
praktino tajne.
ifrat - rezultat funkcije za ifrovanje ili transformacija otvorene poruke koja je
inverzna uz posedovanje pravog kljua.
ifrovanje - proces transformacije otvorenog teksta u ifrat.

194





 





 




  

            


Potrebbero piacerti anche