Sie sind auf Seite 1von 35

Sveučilište J. J.

Strossmayera u Osijeku
Odjel za matematiku

Slobodan Cvijović-Gorša

Hash-funkcije u kriptografiji
Diplomski rad

Osijek, 2013.
Sveučilište J. J. Strossmayera u Osijeku
Odjel za matematiku

Slobodan Cvijović-Gorša

Hash-funkcije u kriptografiji
Diplomski rad

Mentor: doc. dr. sc. Ivan Matić

Osijek, 2013.
Sadržaj
1 Uvod 3

2 Hash-funkcije 4
2.1. Definicija i osnovna svojstva . . . . . . . . . . . . . . . . . . . . . . . . 4
2.1.1. Veza između svojstava . . . . . . . . . . . . . . . . . . . . . . . 5

3 Klasifikacija hash-funkcija 6
3.1. Pojednostavljena klasifikacija hash-funkcija . . . . . . . . . . . . . . . . 6
3.2. Ciljevi napada i vrste krivotvorina . . . . . . . . . . . . . . . . . . . . . 8
3.2.1. Napadač protiv MDC . . . . . . . . . . . . . . . . . . . . . . . . 8
3.2.2. Napadač protiv MAC . . . . . . . . . . . . . . . . . . . . . . . . 8
3.2.3. Vrste krivotvorina . . . . . . . . . . . . . . . . . . . . . . . . . . 8
3.3. Ostala svojstva hash-funkcija i primjene . . . . . . . . . . . . . . . . . 9
3.3.1. Dodatna svojstva jednosmjernih hash funkcija . . . . . . . . . . 10

4 Osnovna konstrukcija hash-funkcija 11


4.1. Proširenje funkcija kompresije do hash-funkcija . . . . . . . . . . . . . . 12

5 Hash-funkcije bez ključa (MDC) 14


5.1. Blok-šifre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
5.2. Hash-funkcije bazirane na blok-šiframa . . . . . . . . . . . . . . . . . . 15
5.2.1. Matyas-Meyer-Oseas hash-funkcija . . . . . . . . . . . . . . . . 16
5.2.2. Davies-Meyer hash-funkcija . . . . . . . . . . . . . . . . . . . . 17
5.2.3. Miyaguchi-Preneel hash-funkcija . . . . . . . . . . . . . . . . . . 18
5.3. Prilagođene hash-funkcije bazirane na MD4 . . . . . . . . . . . . . . . 19
5.3.1. MD4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
5.3.2. MD5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
5.3.3. SHA-1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
5.3.4. Primjeri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

6 Hash-funkcije s ključem (MAC) 25


6.1. CBC-MAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
6.2. Konstrukcija MAC-ova od MDC-ova . . . . . . . . . . . . . . . . . . . 26
6.3. Prilagođeni MAC algoritmi . . . . . . . . . . . . . . . . . . . . . . . . . 26
6.3.1. Algoritam ovjere poruka (MAA) . . . . . . . . . . . . . . . . . . 26
6.3.2. MD5-MAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

Literatura 30

Sažetak 31
Title and summary 32

Životopis 33
1 Uvod
U današnje vrijeme je nezamisliva razmjena podataka bez uporabe računala i interneta.
Kako je pristup podacima putem interneta omogućen velikom broju ljudi, povjerljivi
podaci trebaju što veću sigurnost, a tu veliku ulogu igra kriptografija. Njen cilj je
učiniti podatke nerazumljivim i teškim za dešifriranje ljudima koji nemaju ovlašten
pristup. U ovome radu ćemo se upoznati sa hash-funkcijama koje igraju jednu od
temeljnih uloga u današnjoj kriptografiji. Hash-funkcije su funkcije koje za ulaznu po-
ruku daju ”šifriranu” poruku uglavnom fiksne duljine poznatu pod nazivom hash. U
nastavku ćemo dati definiciju hash-funkcija te ćemo govoriti o njihovim svojstvima i
primjeni.

U drugom poglavlju ćemo dati definiciju hash-funkcije i navest ćemo sva potrebna
svojstva koja bi hash-funkcija trebala imati te veze između određenih svojstava.

Treće poglavlje govori o klasifikaciji hash-funkcija. Reći ćemo nešto o ciljevima na-
pada na određene hash-funkcije i vrstama krivotvorina. Na kraju poglavlja navest
ćemo ostala svojstva hash-funkcija potrebna za različite primjene.

Poglavlje 4 nam ilustrira osnovnu konstrukciju hash-funkcija i daje nam opći model
iterativne hash-funkcije te njen detaljan prikaz. U ovom poglavlju je još ukratko opi-
sano proširenje funkcija kompresije do hash-funkcija.

Peto poglavlje je posvećeno hash-funkcijama bez ključa. Na početku poglavlja ćemo


reći nešto o blok šiframa, a zatim o hash-funkcijama koje se na njima baziraju. Zatim
ćemo navesti nekoliko algoritama hash-funkcija baziranih na MD4 hash-funkciji, a za
kraj poglavlja ćemo dati primjere tih algoritama.

U zadnjem poglavlju ćemo opisati hash-funkcije s ključem. Ukratko ćemo reći o kons-
trukciji MAC-ova iz MDC-ova, a na samom kraju poglavlja ćemo opisati princip rada
nekoliko prilagođenih MAC algoritama.

3
2 Hash-funkcije
Kao što smo spomenuli u uvodu, u ovom radu ćemo govoriti o hash-funkcijama u krip-
tografiji. Na početku ćemo dati definiciju hash-funkcije i navesti neka njena osnovna
svojstva. Hash-funkcije za ulaz uzimaju poruku koja je uglavnom fiksne duljine i za
izlaz daju ”šifriranu” poruku poznatiju kao hash-code, hash-rezultat, hash-vrijednost ili
jednostavno hash. Preciznije rečeno, hash-funkcija h pridružuje nizovima znakova pro-
izvoljne konačne duljine nizove znakova fiksne duljine, od npr. n bita. Za domenu D i
kodomenu R definiramo preslikavanje h : D → R, gdje je |D| > |R|. Kako je |D| > |R|
znači da će dolaziti do kolizija jer sa manjim brojem znakova trebamo reprezentirati
veći broj znakova. Osnovna ideja hash-funkcija je da hash služi kao kompaktna re-
prezentativna slika (digitalni otisak) ulazne vrijednosti i da se ne može dobiti pomoću
neke druge ulazne vrijednosti.

2.1. Definicija i osnovna svojstva


Na najvišoj razini, hash-funkcije možemo podijeliti u dvije velike klase: hash funkcije
bez ključa koje za ulazni parametar imaju samo poruku i hash funkcije s ključem koje
za ulaz imaju poruku i tajni ključ. O svakoj od ovih klasa ćemo više govoriti nešto
kasnije, a za početak ćemo dati definiciju hash-funkcije i navesti osnovna svojstva.

Definicija 2.1 Hash-funkcija (u najširem smislu) je funkcija h, koja zadovoljava iduća


dva svojstva:
1. kompresija - h ulazu x proizvoljne konačne duljine pridružuje izlaz h(x) fiksne
duljine n.
2. jednostavnost izračuna - zadani su h i ulaz x, h(x) je lako izračunati.

Kao što vidimo iz definicije, pod hash-funkcijom podrazumijevamo hash-funkcije bez


ključa, ako nije drugačije navedeno. Osnovno svojstvo svih efikasnih hash-funkcija je
zahtjev da za bilo koja dva izračunata različita hasha i ulazi iz kojih su oni izračunati
moraju biti različiti. Drugo svojstvo efikasnih hash-funkcija bi bilo to da za dva izra-
čunata ista hasha ulazi iz kojih su izračunati ne moraju biti isti. Ako izračunamo hash
vrijednost za jedan ulaz, a nakon toga ulazu promijenimo samo jedan bit, tada bi novi
izračunati hash trebao biti potpuno različit od prethodnog.

Hash-funkcije služe kako bi se što više podigla razina sigurnosti podataka. Kripto-
grafske hash-funkcije se smatraju nesigurnima ako je moguće nalaženje prethodno ne-
poznatog podatka za koji algoritam daje traženi hash ili ako je moguće nalaženje dva
različita podatka koji će nakon hashiranja dati isti hash. Ako bi napadač mogao na-
praviti bilo što od prethodno navedenog, mogla bi se ugroziti sigurnost podataka.

4
Kako bi olakšali daljnje definiranje, navest ćemo neka dodatna svojstva za hash funkcije
bez ključa koje imaju ulaze x, x0 i izlaze y, y 0 .

1. jednosmjernost - za unaprijed određene izlaze računski je neizvedivo pronaći neki


ulaz koji je hashiran u taj izlaz, tj. pronaći original x0 takav da je h(x0 ) = y za
neki y za koji odgovarajući ulaz nije poznat.

2. jednoznačnost ili slaba otpornost na koliziju - računski je neizvedivo pronaći bilo


koji drugi ulaz koji ima isti izlaz kao određeni ulaz, odnosno, za dani x pronaći
drugi original x 6= x0 takav da je h(x) = h(x0 ).

3. općenita jednoznačnost ili jaka otpornost na koliziju - računski je neizvedivo


pronaći bilo koja dva različita ulaza x i x0 koji hashirani daju isti izlaz, tj. takvi
da je h(x) = h(x0 ) (primijetimo da je izbor ulaza slobodan).

Kada kažemo ”računski neizvedivo”, mislimo na to da se zahtijeva napor daleko iznad


raspoloživih resursa.

2.1.1. Veza između svojstava

Jaka otpornost na koliziju povlači slabu otpornost na koliziju

Pretpostavimo da je h jako otporna na koliziju. Neka xj predstavlja fiksni ulaz. Ako h


nije slabo otporna na koliziju, to znači da možemo pronaći dva različita ulaza xi takvih
da je h(xi ) = h(xj ). U tom slučaju je par (xi , xj ) par različitih ulaza za koje hashiranje
daje isti izlaz, a to je u suprotnosti sa svojstvom jake otpornosti na koliziju.

Jaka otpornost na koliziju ne garantira jednosmjernost

Neka je hash funkcija g jako otporna na koliziju i neka ulazima proizvoljne dužine
pridružuje n-bitne izlaze. Definirat ćemo funkciju h na sljedeći način (znak || nam
predstavlja ulančavanje):

1 || x, ako je x duljine bita n
h(x) =
0 || g(x), inače.

Ovako definirana funkcija h je (n + 1)-bitna hash funkcija koja je jako otporna na koli-
ziju, ali nije jednosmjerna. Kao jednostavniji primjer, identiteta na ulaze fiksne duljine
je i jako i slabo otporna na koliziju (originali su jedinstveni), ali nije jednosmjerna.

5
3 Klasifikacija hash-funkcija
3.1. Pojednostavljena klasifikacija hash-funkcija
Kao što smo spomenuli ranije, hash-funkcije dijelimo na hash funkcije s ključem i hash
funkcije bez ključa. Međutim, za stvarnu uporabu, trebamo detaljniju podjelu hash-
funkcija, temeljenu na daljnjim svojstvima koja posjeduju te na odrazu zahtjeva spe-
cifičnih aplikacija. Među brojnim kategorijama u funkcionalnoj klasifikaciji, razmotrit
ćemo dva tipa hash-funkcija:

1. modificirano otkrivanje kodova (MDC)


MDC je podklasa hash-funkcija bez ključa što znači da za ulaz koriste samo jedan
parametar - ulaznu poruku. Svrha modificirane detekcije kodova je izračunavanje
hash-vrijednosti kojom se osigurava integritet podataka koji zahtijeva određena
aplikacija. Kako je MDC podklasa hash-funkcija bez ključa, samim tim se može
dodatno klasificirati. Specifične klase MDC-a koje ćemo navesti su:

i) jednosmjerna hash funkcija (OWHF) - za njih je karakteristično to da je


teško pronaći ulaz koji će hashiran dati unaprijed određenu hash-vrijednost
ii) hash-funkcije s jakom otpornosti na koliziju (CRHF) - za njih je karakte-
ristično to da je teško pronaći bilo koja dva ulaza koji imaju iste hash-
vrijednosti.

2. Kodovi autentičnosti poruke (MAC)


MAC je podklasa hash-funkcija s ključem što znači da će za ulaz koristiti dva
parametra - ulaznu poruku i tajni ključ. Svrha kodova autentičnosti poruke je
olakšanje sigurnosti, bez korištenja nekih dodatnih mehanizama, imajući u vidu
i izvornu poruku i njen integritet.

Smatra se da je algoritamska specifikacija hash funkcije javno poznata. U slučaju MDC-


a, za danu ulaznu poruku, bilo tko može izračunati hash-vrijednost, a u slučaju MAC-a,
za danu ulaznu poruku svatko tko zna tajni ključ može izračunati hash-vrijednost.
MDC bi trebao imati svojstvo jednoznačnosti, inače bi napadač B mogao promatrati
digitalni potpis neke stranke A na h(x), a zatim pronaći x0 takav da je h(x) = h(x0 ) i
potvrditi da je A potpisao x0 . Ako je napadač B u mogućnosti odabrati poruku koju
stranka A potpisuje, tada B treba samo pronaći kolizijski par (x, x0 ), što je lakše nego
pronaći drugi original od x, pa je općenita jednoznačnost također potrebna. Kako smo
naveli potrebna svojstva MDC hash-funkcija, sada možemo dati i njihove definicije.

Definicija 3.1 Jednosmjerna hash funkcija (OWHF) je hash-funkcija h kao u Defini-


ciji 2.1 sa sljedećim dodatnim svojstvima, koja smo definirali ranije: jednosmjernost i
jednoznačnost.

6
Slika 3.1: Pojednostavljena klasifikacija hash-funkcija

Definicija 3.2 Hash-funkcija s jakom otpornosti na koliziju (CRHF) je hash-funkcija


h kao u Definiciji 2.1 sa sljedećim dodatnim svojstvima, koja smo definirali ranije:
jednoznačnost i općenita jednoznačnost.

Iako se ne navodi u definiciji, u praksi CRHF gotovo uvijek ima svojstvo jednosmjer-
nosti.

Definicija 3.3 MAC algoritam je familija funkcija hk parametrizirana tajnim ključem


k sa sljedećim svojstvima:
1. jednostavnost izračuna - za poznatu funkciju hk kojoj je dana vrijednost k i ulaz
x, hk je lagano izračunati. Taj rezultat se naziva MAC-vrijednost ili jednostavno
MAC.
2. kompresija - hk pridružuje ulazu x proizvoljne konačne duljine izlaz kk (x) fiksne
duljine n.
3. računska otpornost - daje 0 ili više tekst-MAC parova (xi , hk (xi )), računski je
neizvedivo izračunati bilo koji tekst-MAC par (x, hk (x)) za bilo koji novi ulaz
x 6= xi (uključujući i vjerojatnost da je hk (x) = hk (xi ) za neki i).

7
Računska otpornost se treba zadržati, inače MAC algoritam može postati predmet
MAC krivotvorine. Računska otpornost implicira svojstvo neotkrivanja ključa (mora
biti računski neizvedivo otkriti k), ali neotkrivanje ključa nam ne implicira računsku
otpornost zbog toga što ne trebamo uvijek otkriti ključ za krivotvorinu novog MAC-a.

3.2. Ciljevi napada i vrste krivotvorina


U ovisnosti o tome koju hash-funkciju napadač napada, imat će i različite ciljeve na-
pada. U nastavku ćemo navesti što si za cilj postavlja napadač koji napada MDC, a
koje ciljeve napadač koji napada MAC te kakve sve vrste krivotvorina postoje.

3.2.1. Napadač protiv MDC

Napadač koji želi napasti MDC za cilj ima sljedeće:


i) napasti OWHF - ako za hash-vrijednost y želi pronaći original x takav da je
y = h(x) ili ako za jedan par (x, h(x)) želi pronaći drugi original x0 takav da je
h(x0 ) = h(x).
ii) napasti CRHF - želi pronaći bilo koja dva ulaza x, x0 takva da je h(x0 ) = h(x).

3.2.2. Napadač protiv MAC

Napadač koji želi napasti MAC algoritam za cilj ima sljedeće:


napasti MAC - bez ikakvog znanja o ključu k želi izračunati novi tekst-MAC para
(x, hk (x)) za neki tekst x 6= xi na način da otkrije jedan ili više parova (xi , kk (xi )).

3.2.3. Vrste krivotvorina

Ako je MAC krivotvorina moguća, treba razmotriti ozbiljnost praktičnih posljedica.


Posljedice se mogu razlikovati ovisno o stupnju kontrole protivnika preko vrijednosti x
za koje MAC može biti krivotvoren. Taj stupanj se razlikuje po sljedećoj klasifikaciji
krivotvorina:
1. selektivna krivotvorina - napadi u kojima je protivnik u stanju proizvesti novi
tekst-MAC par za tekst po vlastitom izboru ili za tekst koji je dijelom pod nje-
govom kontrolom.
2. egzistencijalna krivotvorina - napadi u kojima je protivnik u stanju proizvesti
novi tekst-MAC par, ali bez kontrole nad vrijednostima tog teksta.

Jedan od najštetnijih napada bilo bi otkrivanje ključa od samog MAC ključa te taj
napad omogućuje selektivnu krivotvorinu. MAC krivotvorina dopušta protivniku da
krivotvoreni tekst prihvati kao vjerodostojan, a posljedice mogu biti teške čak i u egzis-
tencijalnom slučaju. U pokušaju da se spriječe smisleni napadi, poruka čiji se integritet
ili autentičnost provjerava je često ograničena na unaprijed određene strukture ili vi-
soke stupnjeve podudararanja.

8
Analogno napadima na MAC, napadi na MDC sheme, prvenstveno jednoznačnost i
kolizijski napad, se mogu razvrstati kao selektivni napad - ako se poruka može dijelom
kontrolirati, ili kao egzistencijalni napad.

3.3. Ostala svojstva hash-funkcija i primjene


Većina hash-funkcija bez ključa u praksi je obično originalno dizajnirana u svrhu pru-
žanja integriteta podataka, uključujući i potvrdu identiteta pomoću digitalnog potpisa.
Većina tih funkcija su ustvari MDC-ovi dizajnirana da ima svojstvo jednosmjernosti,
slabe otpornosti na koliziju ili jake otpornosti na koliziju. Zbog toga što su jedno-
smjerne funkcije fundamentalno kriptografski primitivne, mnogi od tih MDC-ova su
preporučene za korištenje u različitim primjenama kao što su potvrda znanja određe-
nih podataka, izvođenje ključa i generiranje pseudoslučajnih brojeva.
Hash-funkcije koje se koriste za potvrđivanje znanja određenih podataka olakšavaju
predaju vrijednosti podataka ili demonstriraju posjedovanje podataka bez otkrivanja
takvih podataka o samom sebi, a ovjera je moguća od strane koja posjeduje podatke.
Ovo nalikuje korištenju MAC-ova, gdje se u suštini pokazuje poznavanje tajne. Svoj-
stvo koje hash-funkcija zahtijeva je jednosmjernost. Specifični primjeri su korišteni u
provjerama lozinkom koristeći nesigurne datoteke, digitalni potpisi simetričnim klju-
čem i potvrda ključem u uspostavi protokola ovjerenim ključem.
Općenito, korištenje hash-funkcija u druge svrhe, osim za one za koje su originalno di-
zajnirane, zahtijeva oprez, jer takve primjene mogu zahtijevati dodatna svojstva koja
ove funkcije nisu dizajnirane za pružiti. Hash-funkcije bez ključa imaju širok spektar
primjene, uključujući one koje smo naveli ranije:

- izvođenje ključeva - za izračun niza novih ključeva iz prijašnjih ključeva.

- generiranje pseudoslučajnih brojeva - za generiranje nizova brojeva koji imaju


razna svojstva slučajnosti

Mnoga korištenja MDC-a u praksi mogu udovoljiti dodatna svojstva osim onoga za
čega su bila originalno namijenjena. Ipak, korištenje proizvoljnih hash-funkcija nije
preporučljivo za bilo kakve primjene bez oprezne analize.

Hash funkcije se često koriste u primjenama gde se zahtijeva svojstvo jednosmjernosti,


ali ne i kompresije. Na osnovu toga je moguće razlikovati tri klase funkcija:

1. (općenite) hash-funkcije - funkcije kao u Definiciji 2.1, obično s dodanim svoj-


stvom jednosmjernosti, koje sažima ulaz proizvoljne duljine u n-bitni izlaz.

2. funkcije kompresije (hash-funkcije fiksne veličine) - funkcije kao u Definiciji 2.1,


obično s dodanim svojstvom jednosmjernosti, ali je domena ograničena na ulaze
fiksne veličine, tj. sažimanje m-bitnog ulaza u n-bitni izlaz, gdje je m > n.

9
3. nekompresijske jednosmjerne funkcije - to su hash-funkcije fiksne veličine, osim
što je kod njih m = n.

3.3.1. Dodatna svojstva jednosmjernih hash funkcija

Od jednosmjernih hash-funkcija se zahtijeva da imaju svojstva jednosmjernosti i slabe


otpornosti na koliziju. Hash funkcije otporne na koliziju (CRHF) moraju zadovoljavati
svojstvo jake i slabe otpornosti na koliziju. Hash-funkcije otporne na koliziju obično
imaju i svojstvo jednosmjernosti, ali ono nije zahtijevano. U literaturi se često OWHF
nazivaju slabim jednosmjernim hash-funkcijama, a CRHF se nazivaju jakim jednos-
mjernim hash-funkcijama.
Dodatna svojstva jednosmjernih hash-funkcija potrebna za različite primjene su:
1. međusobna nepovezanost - ulazni i izlazni podaci ne bi trebali biti u korelaciji.
2. otpornost na blisku koliziju - mora biti teško pronaći bilo koja dva ulaza x i x0
takva da se h(x) i h(x0 ) razlikuju u malom broju bitova.
3. djelomična jednosmjernost (lokalna jednosmjernost) - mora biti teško pronaći bilo
koji podniz za otkrivanje cijelog ulaza. Štoviše, čak i ako je poznat dio ulaza,
trebalo bi biti teško pronaći ostatak.

Hash-funkcije ne bi trebale biti slabije u odnosu na neke dijelove svog ulaza ili izlaza
od drugih funkcija, a svi nizovi bi trebali biti jednako teški. Neka od ovih svojstava se
mogu nazvati certifikacijska svojstva - svojstva koja se intuitivno poželjno jave, premda
se ne može pokazati izravna neophodnost.

10
4 Osnovna konstrukcija hash-funkcija
Većina hash-funkcija bez ključa h su dizajnirane kao iterativni procesi koji hashiraju
ulaze proizvoljne duljine obrađujući uzastopne ulazne blokove fiksne veličine.

Slika 4.1: Opći model iterativne hash-funkcije

Hash ulaz x proizvoljne konačne duljine je podijeljen na r-bitne blokove xi fiksne du-
ljine. Ova predobrada se obično uključuje dodavanjem koliko god je potrebno dodatnih
blokova za postizanje cjelokupne duljine bita, a što je više od duljine blokova r i često
uključuje blok ili djelomični blok koji ukazuje na duljinu bita od nedopunjena ulaza.
Svaki blok xi tada služi kao ulaz unutarnjoj hash-funkciji f fiksne veličine, funkciji
kompresije od h, koja izračunava novi međurezultat duljine bita n, za neki fiksni n,
kao funkcija od prethodnog n-bitnog međurezultata i sljedećeg ulaznog bloka xi . Neka
Hi označava djelomičan rezultat poslije faze i, opći proces za iterativnu hash-funkciju
s ulazom x = x1 x2 . . . xt može biti modeliran na sljedeći način:

H0 = IV ; Hi = f (Hi−1 , xi ), 1 ≤ i ≤ t; h(x) = g(Ht ).

Hi−1 predstavlja n-bitno ulančavanje između faze i − 1 i faze i, a H0 je ranije definirana


početna vrijednost ili inicijalna vrijednost (IV). Opcionalan izlaz tranformacije g, Slika
4.2, koristi se u konačnom koraku za pridruživanje n-bitnih ulančanih varijabli m-
bitnom rezultatu g(Ht ). g je često identiteta, g(Ht ) = Ht .
Specifične hash funkcije su karakteristične po naravi predobrade, funkciji kompresije i
transformaciji izlaza.

11
Slika 4.2: Detaljan prikaz općeg modela iterativne hash-funkcije

4.1. Proširenje funkcija kompresije do hash-funkcija


Svaka funkcija kompresije f koja ima svojstvo jake otpornosti na koliziju može se
proširiti do hash-funkcije h jako otporne na koliziju (uzimajući ulaz proizvoljne duljine).
To nam daje važan odnos između funkcija kompresije sa svojstvom jake otpornosti na
koliziju i hash-funkcija sa svojstvom jake otpornosti na koliziju. To proširenje se može
učinkovito učiniti koristeći Merkleov meta-način prikazan u Algoritmu 4.1.

Algoritam 4.1 Merkleov meta-način hashiranja

ULAZ: funkcija kompresije f koja ima svojstvo jake otpornosti na koliziju


IZLAZ: hash-funkcija h bez ključa koja ima svojstvo jake otpornosti na koliziju
1. Pretpostavimo da f pridružuje (n + r)-bitne ulaze n-bitnim izlazima (konkretno,
razmatramo n = 128 i r = 512). Konstrukcija hash-funkcije h od f , daje n-bitne
hash-vrijednosti kako slijedi.

2. Razdvojiti ulaz x duljine niza b u blokove x1 x2 . . . xt , svaki duljine r, dopuniti


posljednji blok xt s bitovima jednakim 0, ako je potrebno.

12
3. Definirati dodatni završni blok xt+1 , duljinski blok, kako bi zadržali poravnati(dopunjeni)
binarni prikaz od b (pretpostavljamo da je 2b < 2r ).

4. Ako uzmemo da 0j predstavlja niz koji se sastoji od j bitova jednakih 0, definiramo


n-bitnu hash-vrijednost od x da vrijedi h(x) = Ht+1 = f (Ht ||xt+1 ) izračunatu iz

H0 = 0n ; Hi = f (Hi−1 ||xi ), 1 ≤ i ≤ t + 1.

Dokaz da je rezultirana funkcija h jako otporna na koliziju, slijedi iz jednostavnih


argumenata da kolizija za h može implicirati koliziju za f za iste faze i. Uključivanje
duljinskog bloka, koji efektivno šifrira sve poruke tako da nijedan šifrirani ulaz nije kraj
nijednog drugog šifriranog ulaza, je neophodno za ovo razmatranje. Dodavanje takvog
duljinskog bloka se naziva MD-jačanje.

Algoritam 4.2 MD-jačanje

Prije hashiranja poruke x = x1 , x2 . . . xt (gdje je xi blok duljine bita r prikladan za


odgovarajuću funkciju kompresije) duljine bita b, dodavajući završni duljinski blok,
xt+1 , sadrži dopunjeni (s bitovima jednakim 0) binarni prikaz od b. (To podrazumijeva
b < 2r .)

13
5 Hash-funkcije bez ključa (MDC)
Sada kada smo naveli opća svojstva i konstrukcije hash-funkcija, možemo promatrati
podklasu hash-funkcija bez ključa poznatu kao modificirano otkrivanje kodova (MDC).
Sa strukturalne točke gledišta ove funkcije se mogu kategorizirati prema prirodi ope-
racija koje obuhvaćaju njihove unutarnje funkcije kompresije. S ove točke gledišta
postoje tri najšire kategorije iterativnih hash-funkcija koje su do danas proučavane, a
to su hash-funkcije bazirane na blok šiframa, prilagođene hash-funkcije i hash-funkcije
bazirane na modularnoj aritmetici. Prilagođene hash-funkcije su dizajnirane specijalno
za hashiranje, uzimajući u obzir brzinu i neovisnost o drugim komponentama, dok su
blok-šifre i modularno množenje potkomponente koje mogu biti korištene i u druge
svrhe koje ne obuhvaćaju hashiranje.

5.1. Blok-šifre
Blok-šifra je funkcija koja tekstu podijeljenom u n-bitne blokove pridružuje n-bitne
blokove šifriranog teksta, n se naziva duljinski blok. Kod ovakvog šifriranja ulaz može
biti npr. 128-bitni tekstualni blok, a izlaz je odgovarajući 128-bitni šifrirani tekstu-
alni blok. Transformacija se obavlja pomoću tajnog ključa koji predstavlja drugi ulaz.
Dešifriranje je slično, algoritam će 128-bitnom šifriranom tekstualnom bloku, uz tajni
ključ, na izlazu dati originalni 128-bitni tekstualni blok.

Slika 5.1: Shema blok-šifriranja Slika 5.2: Shema blok-dešifriranja

Blok-šifra je bazirana na dva algoritma, jedan je za šifriranje - E i drugi za dešifriranje


- E −1 . Princip rada algoritama je sličan, za ulaz uzimaju blok podatke od n-bita i ključ
od k-bita, a na izlazu daju blok od n-bita. Ako algoritmi koriste isti ključ, dešifriranje
će biti inverzna funkcija šifriranja te će za svaki ulazni blok X i ključ K vrijediti:

Ek−1 (Ek (X)) = X

14
Za svaki ključ, funkcija Ek je permutacija (bijektivno preslikavanje). Svaki ključ služi
za izbor jedne od mogućih 2n permutacija gdje n predstavlja broj bitova ulaznog bloka.
Početkom korištenja ove vrste šifriranja veličina ulaznog bloka n obično je iznosila 64
bita, a kasnije se zbog potrebe za povećanjem sigurnosti veličina ulaznog bloka povećala
na 128-bitne i veće blokove.
Jedna od najstarijih i najpoznatijih blok-šifri je DES (Data Encryption Standard )
koju je razvio IBM. Danas se ta blok-šifra smatra nesigurnom za većinu primjena
zbog premale duljine ključa koja je iznosila 56 bita, a poznati su slučajevi kada je
ključ otkriven od strane napadača u manje od 24 sata. Kasnije su se razvile razne
nadogradnje ove blok-šifre koji su davali veću sigurnost, ali se DES blok-šifra početkom
21. stoljeća prestala koristiti jer je dobila svog nasljednika AES (Advanced Encryption
standard ) blok-šifru.

5.2. Hash-funkcije bazirane na blok-šiframa


Konstrukcija hash-funkcija baziranih na blok-šiframa temelji se na tome da, ukoliko
je učinkovita implementacija blok šifre već dostupna u sustavu (bilo u softveru ili u
hardveru), tada će njeno korištenje kao centralne komponente hash-funkcije donijeti
funkcionalnost uz malo dodatnih troškova. Blok-šifra može biti dobar ”materijal” za
izgradnju hash-funkcije koja može biti korištena u različitim primjenama. Konstrukcije
hash-funkcija koje su dane su dokazivo sigurne (teško je i računski neizvedivo pronaći
ulaz, drugi ulaz ili kolizije iako je napadaču na raspolaganju ogromna računarska moć i
vrijeme), ali uz pretpostavku da korištene blok šifre imaju idealna svojstva. Međutim,
blok-šifre nemaju ta svojstva (npr. one su inverzne), a u praksi pokazuju dodatne
slabosti. Iako je mnoštvo neophodnih uvjeta poznato, još nije potpuno jasno koje sve
zahtijeve mora ispunjavati blok-šifra kako bi bilo moguće konstruirati sigurnu hash-
funkciju, a svojstva koja inače odgovaraju blok-šiframa možda neće garantirati dobru
hash-funkciju.
Za konstrukciju koju ćemo kasnije navesti, koristiti ćemo Definiciju 5.1.

Definicija 5.1 (n, r) blok-šifra je blok-šifra definirana kao inverzna funkcija od n-


bitnog izvornog teksta do n-bitnog šifriranog teksta korištenjem r-bitnog ključa. Ako
je E takva šifra, onda Ek (x) predstavlja šifriranje od x pod ključem k.

Hash-funkcije izgrađene od n-bitnih blok-šifri možemo podijeliti na one s n-bitnim i


2n-bitnim hash-vrijednostima, tj. hash-vrijednostima jednostruke i dvostruke duljine,
gdje se n i 2n odnose na veličnu izlaza blok-šifri. Ako pretpostavimo da su računanja
od 264 operacija neisplativa, cilj jednostruke duljine jeste omogućiti OWHF za šifre čija
je duljina bloka blizu n = 64, ili osigurati CRHF za šifre duljine bloka n = 128. Mnogo
n-bitnih blok-šifri postoji u veličini od otprilike n = 64, a jednostruki hash-kodovi ove
veličine nemaju svojstvo jake otpornosti na koliziju. Za takve šifre cilj je dobiti hash-
kodove duljine bita 2n koji su CRHF-ovi.

15
U najjednostavnijem slučaju, veličina ključa korištenog u takvim hash-funkcijama je
približno jednaka duljini bloka šifre (npr. n-bitova). U drugim slučajevima hash-
funkcije koriste dulje ključeve. Jedna karakteristika takvih hash-funkcija koju treba
naglasiti je broj operacija u blok-šiframa potrebnih za proizvodnju hash izlaza duljine
bloka jednakom onom u šifri iz čega proizlazi i sljedeća definicija.

Definicija 5.2 Neka je h iterativna hash-funkcija izgrađena od blok-šifri, s funkcijom


kompresije f koja za dobivanje svakog sljedećeg n-bitnog bloka poruke obavlja s procesa
blok šifriranja. Tada kažemo da je stopa od h jednaka 1/s.

Hash-funkcije bazirane na blok-šiframa prikazane su u sljedećoj tablici:


Hash-funkcije (n, k, m) Stopa
Matyas-Meyer-Oseas (n, k, n) 1
Davies-Meyer (n, k, n) k/n
Miyaguchi-Preneel (n, k, n) 1
MDC-2(s DES) (64, 56, 128) 1/2
MDC-4(s DES) (64, 56, 128) 1/4

Tablica 5.1: k predstavlja veličinu ključa (približno), funkcija daje m-bitne hash-
vrijednosti

U nastavku ćemo nešto više reći o prve tri hash-funkcije prikazane u Tablici 5.1.

5.2.1. Matyas-Meyer-Oseas hash-funkcija

U ovoj hash-funkciji baziranoj na blok-šiframa, svaki blok ulaznog podatka xi se šifrira


blok metodom, a kao ključ se koristi rezultat prethodne funkcije kompresije Hi−1 . Izlaz
blok-šifre se obrađuje XOR funkcijom, a izlaz te funkcije ujedno predstavlja i krajnji
rezultat funkcije kompresije Hi .

Ukoliko blok-šifra zahtijeva različite dužine ulaznog bloka podatka i ključa za šifriranje,
njen rezultat će biti nepogodne dužine za sljedeći stupanj gdje se treba koristiti kao
ključ za šifriranje. Zbog toga se često uključuje i dodatna funkcija g koja će konvertirati
izlaz funkcije kompresije u format pogodan za sljedeći stupanj.

Algoritam 5.1 Matyas-Meyer-Oseas hashiranje

ULAZ: niz x.
IZLAZ: n-bitni hash-kod od x.

1. Ulaz x podijeliti na n-bitne blokove i dopuniti posljednji blok ukoliko je potrebno.


Obilježiti popunjenu poruku koja se sastoji od t n-bitnih blokova x1 x2 . . . xt .
Konstantna n-bitna početna vrijednost IV se mora ranije postaviti.

2. Izlaz Ht je definiran s: H0 = IV ; Hi = Eg(Hi−1 ) (xi ) ⊕ xi , 1 ≤ i ≤ t.

16
Slika 5.3: Shema Matyas-Meyer-Oseas hash-funkcije

5.2.2. Davies-Meyer hash-funkcija

Ova hash-funkcija uzima svaki blok ulaznog podatka xi kao ključ za šifriranje blok-
šifrom. Kao ulaz blok-šifre koristi se rezultat prethodne funkcije kompresije Hi−1 .
Zbog toga se ova hash-funkcija može smatrati suprotnom od Matyas-Meyer-Oseas hash-
funkcije. Izlaz blok-šifre se obrađuje XOR funkcijom, a rezultat toga predstavlja re-
zultat funkcije kompresije Hi . Veličina ulaznog podatka je određena duljinom ključa,
npr. ako šifriranje zahtijeva 128-bitni ključ, onda će ulazni podatak biti podijeljen na
128-bitne segmente, a izlaz funkcije kompresije će također biti 128 bita.

Slika 5.4: Shema Davies-Meyer hash-funkcije

17
Algoritam 5.2 Davies-Meyer hashiranje

ULAZ: niz x.
IZLAZ: n-bitni hash-kod od x.

1. Ulaz x podijeliti u k-bitne blokove, gdje je k veličina ključa. Dopuniti posljednji


blok ako je potrebno. Obilježiti dopunjenu poruku koja se sastoji od k-bitnih
blokova x1 x2 . . . xt . Konstantna n-bitna početna vrijednost IV se mora ranije
postaviti.

2. Izlaz Ht je definiran s: H0 = IV ; Hi = Exi (Hi−1 ) ⊕ Hi−1 , 1 ≤ i ≤ t.

5.2.3. Miyaguchi-Preneel hash-funkcija

Ova hash-funkcija je nadogradnja Matyas-Meyer-Oseas funkcije, a razlikuje se u tome


što se kao ulaz u XOR funkciju, a na izlazu iz funkcije kompresije, koristi nešifrirani
blok ulaznog podatka xi , izlaz blok-šifre i rezultat prethodne funkcije kompresije Hi−1 .

Slika 5.5: Shema Miyaguchi-Preneel hash-funkcije

Algoritam 5.3 Miyaguchi-Preneel hashiranje

Ovaj algoritam je identičan algoritmu Matyas-Meyer-Oseas, osim što je izlaz Hi−1


prethodne funkcije kompresije također obrađen XOR funkcijom. Preciznije, Hi je
definiran s: H0 = IV, Hi = Eg(Hi−1 ) (xi ) ⊕ xi ⊕ Hi−1 , 1 ≤ i ≤ t.

18
5.3. Prilagođene hash-funkcije bazirane na MD4
Prilagođene hash-funkcije su funkcije koje su dizajnirane specijalno, od samog početka,
za posebne namjene hashiranja, s optimiziranom izvedbom i bez ograničenja na kori-
štenje postojećih komponenti sustava kao što su blok šifre ili modularna aritmetika.
One koje se u praksi najčešće koriste su bazirane na MD4 hash-funkciji.
Broj 4 u seriji hash-funkcija ("Message Digest algorithms"), MD4 je posebno dizajniran
za softversku implementaciju na 32-bitnim strojevima. Briga za sigurnost motivirala je
dizajniranje MD5 hash funkcije nedugo nakon dizajniranja MD4 funkcije, kao konzer-
vativnu verziju MD4. Od ostalih bitnih varijacija ove hash-funkcije još ćemo spomenuti
Sigurni Hash Algoritam (SHA-1).

5.3.1. MD4

MD4 je 128-bitna hash-funkcija. Ciljevi originalnog MD4 dizajna su bili ti da je njegovo


"slamanje" zahtijevalo brute-force trud - pronalaženje poruka sa istom hash-vrijednosti
zahtijeva oko 264 operacija, a pronalazak poruke koja daje unaprijed određenu hash-
vrijednost zahtijeva 2128 operacija. Danas je poznato da MD4 ne ispunjava te ciljeve
zbog toga što su pronađene kolizije u 220 računanja funkcije kompresije. Iz tog razloga
MD4 nije preporučljiv za korištenje kao hash-funkcija s jakom otpornošću na koliziju.
Bez obzira na to, dati ćemo opis MD4 algoritma zbog njegove povijesne i kriptoana-
litičke važnosti. Također, on služi i za opisivanje i usporedbu drugih hash-funkcija u
ovoj familiji.
U sljedećoj tablici prikazana je notacija koja se koristi za MD4 familiju algoritama.

Notacija Značenje
u, v, w varijable reprezentirane 32-bitnim vrijednostima
0x67452301 hexadecimalni 32-bitni cijeli broj (najmanje značajan byte: 01)
+ zbrajanje modulo 232
u bitovni komplement
u ←- s rezultat rotacije u lijevo za s pozicija
uv bitovno AND
u∨v bitovno OR
u⊕v bitovno XOR
f (u, v, w) uv ∨ uw
g(u, v, w) uv ∨ uw ∨ vw
h(u, v, w) u⊕v⊕w

Tablica 5.2: Notacija za MD4 familiju algoritama

Algoritam 5.4 M D4 Hash-funkcija

ULAZ: niz x proizvoljne duljine b ≥ 0.


IZLAZ: 128-bitni hash-kod od x.

19
1. Definiranje konstanti - definirati četiri 32-bitne početne ulančane vrijednosti
(IV ): h1 =0x67452301, h2 =0xefcdab89, h3 =0x98badcfe, h4 =0x10325476.
Definirati 32-bitne konstante:
y[j] = 0, 0 ≤ j ≤ 15;
y[j] =0x5a827999,16 ≤ j ≤ 31; (konstanta=kvadratni korijen iz 2)
y[j] =0x6ed9eba1, 32 ≤ j ≤ 47; (konstanta=kvadratni korijen iz 3)
Definirati red pristupanja izvornim riječima (svaka lista sadrži cijele brojeve od
0 do 15):
z[0 . . . 15] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15],
z[16 . . . 31] = [0, 4, 8, 12, 1, 5, 9, 13, 2, 6, 10, 14, 3, 7, 11, 15],
z[32 . . . 47] = [0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 11, 7, 15].
Na kraju definirati broj pozicija bitova za lijevi pomak (rotaciju):
s[0 . . . 15] = [3, 7, 11, 19, 3, 7, 11, 19, 3, 7, 11, 19, 3, 7, 11, 19],
s[16 . . . 31] = [3, 5, 9, 13, 3, 5, 9, 13, 3, 5, 9, 13, 3, 5, 9, 13],
s[32 . . . 47] = [3, 9, 11, 15, 3, 9, 11, 15, 3, 9, 11, 15, 3, 9, 11, 15].

2. Predobrada - dopuniti x tako da je njegova duljina višekratnik od 512. Dodati


jedan 1-bit, zatim dodati r − 1 (≥ 0) 0−bita za najmanji r takav da rezultirajuća
duljina bude za 64 manja od višekratnika od 512 . Na kraju dodati 64-bitni
reprezentant od b mod 264 , kao dvije 32-bitne riječi s najmanjom značajnosti
prve riječi. Neka je m broj 512-bitnih blokova u rezultirajućem stringu (b +
r + 64 = 512m = 32 · 16m). Formatirani ulaz se sastoji od 16m 32-bitne riječi
x0 x1 . . . x16m−1 . Inicijalizirati: (H1 , H2 , H3 , H4 ) ← (h1 , h2 , h3 , h4 ).

3. Obrada - za svaki i od 0 do m − 1 kopirati i-ti blok od 16 32-bitnih riječi u


privremeni spremnik: X[j] ← x16i+j , 0 ≤ j ≤ 15, zatih ih obraditi kao tri runde
od po 16 koraka prije dodavanja novih ulančanih varijabli:
(Runda 1 ) Za svaki j od 0 do 15 radi sljedeće:
t ← (A + f (B, C, D) + X[z[j]] + y[j]), (A, B, C, D) ← (D, t ←- s[j], B, C)
(Runda 2 ) Za svaki j od 16 do 31 radi sljedeće:
t ← (A + g(B, C, D) + X[z[j]] + y[j]), (A, B, C, D) ← (D, t ←- s[j], B, C)
(Runda 3 ) Za svaki j od 32 do 47 radi sljedeće:
t ← (A + h(B, C, D) + X[z[j]] + y[j]), (A, B, C, D) ← (D, t ←- s[j], B, C)
(nadogradnja ulančanih vrijednosti)(H1 , H2 , H3 , H4 ) ← (H1 + A, H2 + B, H3 +
c, H4 + D).

4. Završetak - konačna hash-vrijednost je spajanje (konkatenacija): H1 ||H2 ||H3 ||H4


(s prvim i zadnjim byte-om kao byte-ovima niskog i visokog reda od H1 i H4 ,
redom).

20
5.3.2. MD5

MD5 je dizajniran kao pojačana verzija MD4 i to prije nego što su pronađene kolizije u
MD4. MD5 je vrlo popularan kriptografski algoritam i ima široku primjenu. Poznato
je da MD5 ima slabosti. Iako nisu pronađene kolizije za MD5, pronađene su kolizije za
MD5 funkcije kompresije.
Promjene koje su napravljene kako bi od MD4 dobili MD5 su:
1. dodavanje četvrte runde od 16 koraka i funkcije u Rundi 4

2. zamjena funkcije u Rundi 2 novom funkcijom

3. modifikacija reda pristupa za riječi u Rundama 2 i 3

4. modifikacija iznosa pomaka (kao da se pomak razlikuje u različitim rundama)

5. korištenje jedinstvenih dodanih konstanti u svakom od 4 · 16 koraka baziranih na


cijelobrojnom dijelu od 232 · sin(j) u koraku j

6. dodavanje izlaza iz prethodnog koraka u svaki od 64 koraka.

Algoritam 5.5 M D5 hash-funkcija

ULAZ: niz x proizvoljne duljine b ≥ 0.


IZLAZ: 128-bitni hash-kod od x.
def
1. Obilježavanje - zamijeniti funkciju Runde 2 sljedećim: g(u, v, w) = uw ∨ uw
def
Definirati funkciju Runde 4: k(u, v, w) = v ⊕ (u ∨ w).

2. Definiranje konstanti - redefiniraj jedinstvene konstante:


y[j]= prva 32 bita binarne vrijednosti abs(sin(j + 1)), 0 ≤ j ≤ 63, gdje je j u
radijanima, a "abs" predstavlja apsolutnu vrijednost. Redefiniraj red pristupa
riječima u Rundi 2 i 3 te definiraj za Rundu 4:
z[16 . . . 31] = [1, 6, 11, 0, 5, 10, 15, 4, 9, 14, 3, 8, 13, 2, 7, 12],
z[32 . . . 47] = [5, 8, 11, 14, 1, 4, 7, 10, 13, 0, 3, 6, 9, 12, 15, 2],
z[48 . . . 63] = [0, 7, 14, 5, 13, 3, 10, 1, 8, 15, 6, 13, 4, 11, 2, 9].
Redefiniraj broj pozicija bitova za lijevi pomak (rotaciju):
s[0 . . . 15] = [7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22],
s[16 . . . 31] = [5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20],
s[32 . . . 47] = [4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23],
s[48 . . . 63] = [6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21].

3. Predobrada - ista kao u M D4.

4. Obrada - u svakoj od Rundi 1,2 i 3, zamjeni B ← (t ←- s[j]) s B ← B+(t ←- s[j]).


Također, odmah nakon Runde 3 dodaj:
t ← (A + k(B, C, D) + X[z[j]] + y[j]), (A, B, C, D) ← (D, B + (t ←- s[j]), B, C).

21
5. Završetak - isti kao u M D4.

MD5 se često koristi za provjeru integriteta datoteka pomoću hash-vrijednosti dato-


teke. Kada se primi datoteka, izračunava se njena MD5 hash-vrijednost i uspoređuje
se s hash-vrijednosti koja je dobivena uz datoteku. Ako su identični, datoteka je ne-
promijenjena.
MD5 se često primjenjuje i za šifriranje kod pohrane zaporki, ali postoji velik broj
MD5 baza podataka kojima se tako zaštićene zaporke mogu dešifrirati. Kao zaštita
od tih napada, prije šifriranja zaporke se u tekst zaporke može dodati poznati slučajni
niz bitova što će znatno otežati napad. U takvim šifriranjima MD5 hash-funkcijom
preporučljivo je šifriranje provesti u više iteracija kako bi se povećala razina sigurnosti.

5.3.3. SHA-1

SHA-1 je drugi iz niza SHA algoritama, a također je baziran na MD4. Razvijen je za


određene svrhe američke vlade. Glavne razlike između SHA-1 i MD4 su sljedeće:

1. Hash-vrijednost je 160 bita, a koristi se pet (za razliku od četiri) 32-bitnih ulan-
čanih varijabli.

2. Funkcija kompresije ima četiri runde umjesto tri, a koristi MD4 funkcije f, g i h
i to: f u prvoj, g u trećoj, a h u drugoj i četvrtoj rundi. Svaka runda ima 20
koraka umjesto 16.

3. Unutar funkcije kompresije, svaka 16-bitna blok poruka je proširena na 80-bitni


blok, procesom u kojem svaka od zadnjih 64 riječi od 80 riječi je XOR od 4 riječi
iz ranije pozicije u proširenim blokovima. Tih 80 riječi su tada ulaz jedna-riječ-
jedan-korak u 80 koraka.

4. Ključni korak je modificiran na sljedeći način: jedina korištena rotacija je kons-


tantna 5-bitna rotacija. Peta radna varijabla je dodana u svaki korak rezultata;
poruci iz proširene blok poruke se pristupa sekvencijalno; a C je nadogradnja od
B rotirana lijevo 30 bita, radije nego samo B.

5. SHA-1 koristi četiri dodane konstante različite od 0, dok je MD4 koristio tri, od
kojih su samo dvije bile različite od 0.

Algoritam 5.6 SHA-1

ULAZ:niz x duljine b ≥ 0.
IZLAZ: 160-bitni hash-kod od x.

1. Obilježavanje - isto kao u MD4.

22
2. Definiranje konstanti - definirati peti IV koji se podudara s onima u MD4:
h5 =0xc3d2e1f0.
Definirati cjelobrojne dodane konstante:
y1 =0x5a827999, y2 =0x6ed9eba1, y3 =0x8f1bbcdc, y4 =0xca62c1d6.

3. Globalna predobrada - dopuna kao u MD4, izuzev dvije finalne 32-bitne riječi spe-
cificirane duljine b je dodana s najznačajnijom riječi prethodeći manje značajnoj.
Kao u MD4, formatirani ulaz je 16m bitna riječ x0 x1 . . . x16m−1 . Inicijalizacija
ulančanih varijabli: (H1 , H2 , H3 , H4 , H5 ) ← (h1 , h2 , h3 , h4 , h5 ).

4. Obrada - za svaki i od 0 do m kopiraj i-ti blok od šesnaest 32-bitnih riječi u


privremeni spremnik X[j] ← x16i+j , 0 ≤ j ≤ 15 i obraditi ih u četiri runde od 20
koraka prije ažuriranja ulančanih varijabli:
(proširivanje 16-bitnih blokova u 80-bitne blokove, neka Xj označava X[j])
za svaki j od 16 do 79, Xj ← ((Xj−3 ⊕ Xj−8 ⊕ Xj−14 ⊕ Xj−16 ) ←- 1).
(inicijalizacija radnih varijabli)(A, B, C, D, E) ← (H1 , H2 , H3 , H4 , H5 ).
(Runda 1) Za j od 0 do 19 radi sljedeće:
t ← ((A ←- 5) + f (B, C, D) + E + Xj + y1 ),
(A, B, C, D, E) ← (t, A, B ←- 30, C, D).
(Runda 2) Za j od 20 do 39 radi sljedeće:
t ← ((A ←- 5) + h(B, C, D) + E + Xj + y2 ),
(A, B, C, D, E) ← (t, A, B ←- 30, C, D).
(Runda 3) Za j od 40 do 59 radi sljedeće:
t ← ((A ←- 5) + g(B, C, D) + E + Xj + y3 ),
(A, B, C, D, E) ← (t, A, B ←- 30, C, D).
(Runda 4) Za j od 60 do 79 radi sljedeće:
t ← ((A ←- 5) + h(B, C, D) + E + Xj + y4 ),
(A, B, C, D, E) ← (t, A, B ←- 30, C, D).
(nadogradnja ulančanih varijabli) (H1 , H2 , H3 , H4 , H5 ) ← (H1 + A, H2 + B, H3 +
C, H4 + D, H5 + E).

5. Završetak - Hash-vrijednost je :H1 ||H2 ||H3 ||H4 ||H5 .


(s prvim i zadnjim byte-om kao byte-ovima visokog i niskog reda od H1 i H5 ,
redom).

Ako uporedimo 128-bitne hash-funkcije, 160-bitne hash-vrijednosti SHA-1 algoritma


daju veću sigurnost protiv brute-force napada. Iako je SHA-1 algoritam također do-
kazano probijen, za ostvarenje njegovog proboja su korištene kompleksne analitičke
funkcije te nije za vjerovati da su takve funkcije dostupne internet korisnicima. Unatoč
toj sigurnosti, upitna je upotreba SHA-1 algoritma u budućim primjenama. Postoji
nekoliko varijanti poboljšanog SHA-1 algoritma, koji nisu u široj upotrebi, ali prema
dosadašnjim ispitivanjima ne postoje dokazani proboji tih algoritama.

23
5.3.4. Primjeri

U sljedećoj tablici dani su primjeri hash-vrijednosti za navedene hash-funkcije bez


ključa:

Hash-funkcija Niz znakova Hash-vrijednost


"a" bde52cb31de33e46245e05fbdbd6fb24
"Moj primjer A" 4acecefa86bd158a11d9b98ca1ca8b5e
MD4
"Moj primjer B" 032e607fef5327939da9cdd0bf74d6df
"" 31d6cfe0d16ae931b73c59d7e0c089c0
"a" 0cc175b9c0f1b6a831c399e269772661
"Moj primjer A" a9b02d6047b3aab84da65e613640d26e
MD5
"Moj primjer B" 630c40bbbbc895cf4b74b1278fe30b6b
"" d41d8cd98f00b204e9800998ecf8427e
"a" 86f7e437faa5a7fce15d1ddcb9eaeaea377667b8
"Moj primjer A" f112d38f65e8dcf865e9118737e836ba8400279e
SHA-1
"Moj primjer B" 7628e9d91b2f888ca08de4fa463e2c07c7c8bb04
"" da39a3ee5e6b4b0d3255bfef95601890afd80709

Tablica 5.3: Primjeri hash-vrijednosti za različite hash-funkcije

Na primjerima iz Tablice 5.3 vidimo da se prilikom promjene samo jednog slova hash-
vrijednosti potpuno razlikuju. U praksi je gotovo nemoguće predvidjeti hash-vrijednost
za određene nizove znakova, a sve to zahvaljujući "efektu lavine" zbog kojeg male
promjene na ulazu imaju značajne i nepredvidive promjene na izlazu.

24
6 Hash-funkcije s ključem (MAC)
Hash-funkcije s ključem, čija je glavna svrha autentikacija i provjera integriteta poruka,
nazivaju se kodovi autentičnosti poruke (MAC). Prilikom slanja poruke, uz poruku se
šalje i dodatni podatak, koji se naziva MAC oznaka, a dobiva se upotrebom MAC
algoritma i tajnog ključa. Ukoliko primatelj posjeduje identični tajni ključ može upo-
trebom istog algoritma provjeriti da li MAC oznaka odgovara primljenoj poruci i tako
provjeriti integritet i autentičnost poruke. MAC algoritam mora biti siguran od krivo-
tvorenja. Napadač ne smije biti u mogućnosti generirati novu važeću MAC oznaku za
neku poruku korištenjem ključa, inače se algoritam smatra nesigurnim. Mnogi MAC
algoritmi su bazirani na blok-šiframa. MAC algoritmi sa relativno malim duljinama ili
kratkim ključevima još uvijek mogu ponuditi adekvatnu sigurnost u ovisnosti o raču-
nalnim resursima dostupnim za protivnike i konkretnom okruženju primjene.
Iterativni MAC se može opisati kao iterativna hash-funkcija - MAC ključ je obično
dio izlazne transformacije g; može biti i ulaz za funkciju kompresije u prvoj iteraciji ili
može biti uključen u funkciju kompresije f u bilo kojoj fazi.

6.1. CBC-MAC
Najčešći MAC algoritam baziran na blok-šifri koristi blok-šifriranje zasnovano na ulan-
čavanju i naziva se CBC-MAC. Kada se DES koristi kao blok-šifra E, tada je n = 64,
a MAC ključ je 56−bitni DES ključ.

Algoritam 6.1 CBC-MAC

ULAZ: poruka x, specifikacija blok-šifre E i tajni MAC ključ k za E.


IZLAZ: n-bitni MAC za x.

1. Dopunjavanje i podjela na blokove - dopuni x ako je potrebno, a zatim podijeli x


u n-bitne blokove označene s x1 , . . . , xt .

2. CBC obrada - Neka Ek označava šifriranje koristeći blok-šifru E s ključem k.


Izračunaj blok Ht prema sljedećem: H1 ← Ek (x1 ); Hi ← Ek (Hi−1 ⊕xi ), 2 ≤ i ≤ t.
(Ovo predstavlja standardno blok-šifriranje zasnovano na ulančavanju.)

3. Opcionalna obrada za povećanje snage MAC-a - koristeći drugi tajni ključ k 0 6= k,


opcionalno izračunaj: Ht0 ← Ek−1 0
0 (Ht ), Ht ← Ek (Ht ).

4. Završetak - MAC je n-bitni blok Ht .

25
Slika 6.1: Shema CBC-MAC algoritma

6.2. Konstrukcija MAC-ova od MDC-ova


Često se MAC algoritmi konstruiraju od MDC algoritama i to tako da se tajni ključ k
dodaje kao dio MDC ulaza. Problem oko ovog pristupa su još uvijek nepotvrđene pret-
postavke oko svojstava koja imaju MDC-ovi. Dok je većina MDC-ova dizajnirana da
osigura jednosmjernost ili jaku otpornost na koliziju, zahtjevi MAC algoritama se raz-
likuju (vidjeti Definiciju 3.3). Čak i da jednosmjerna hash-funkcija spriječi otkrivanje
tajnog ključa kao dijela ulazne poruke, to neće značiti nemogućnost stvaranja MAC-
ova za nove ulaze. Zbog toga izgradnja MAC-ova iz hash-funkcija zahtijeva pažljivu
analizu.

6.3. Prilagođeni MAC algoritmi


U ovom poglavlju ćemo reći nešto o dva algoritma koja su dizajnirana u svrhu ovjere
poruka, a to su MAA i MD5-MAC algoritmi.

6.3.1. Algoritam ovjere poruka (MAA)

MAA je prilagođeni MAC algoritam za 32-bitne strojeve, uključujući i 32-bitne opera-


cije. Glavna petlja algoritma sadrži dva paralelna međusobno ovisna slijeda računanja.
Poruke koje se obrađuju u blokovima od 4-bytea koriste ulančane varijable od 8-byte-a.
Vrijeme izvršenja algoritma je proporcionalno duljini same poruke, a pokazalo se da je
MAA dvostruko sporiji od MD4 algoritma.

26
Algoritam 6.2 Algoritam ovjere poruka (MAA)

ULAZ: podatak x duljine 32j, 1 ≤ j ≤ 106 ; 64−bitni tajni MAC ključ Z = Z[1] . . . Z[8].
IZLAZ: 32-bitni MAC za x.

1. Proširenje ključa neovisno o poruci - proširiti ključ Z do šest 32−bitnih vrijed-


nosti X, Y, V, W, S, T . X i Y su početne vrijednosti; V i W su varijable glavne
petlje; S i T su dodani poruci.

(a) Prvo zamijeniti bilo koji bajt 0x00 ili 0xff u Z na sljedeći način:
P ← 0; za i od 1 do 8 (P ← 2P ; ako je Z[i]=0x00 ili 0xff tada (P ←
P + 1;Z[i] ← Z[i] OR P )).
(b) Neka su J i K prva četiri, odnosno zadnja četiri byte-a od Z i izračunaj:
X ← J 4 (mod 232 − 1)⊕J 4 (mod 232 − 2)
Y ← [K 5 (mod 232 − 1)⊕K 5 (mod 232 − 2)](1 + P )2 (mod 232 − 2)
V ← J 6 (mod 232 − 1)⊕J 6 (mod 232 − 2)
W ← K 7 (mod 232 − 1)⊕K 7 (mod 232 − 2)
S ← J 8 (mod 232 − 1)⊕J 8 (mod 232 − 2)
T ← K 9 (mod 232 − 1)⊕K 9 (mod 232 − 2)

(c) Obraditi tri dobivena para (X, Y ), (V, W ), (S, T ) kako bi se uklonili svi byte-
ovi 0x00 i 0xff (isto kao za Z). Definiraj AND-OR konstante: A=0x02040801,
B=0x00804021, C=0xbfef7fdf, D=0x7dfefbff.

2. Inicijalizacija i predobrada - inicijalizirati vektor rotacije v ← V i ulančane va-


rijable: H1 ← X, H2 ← Y . Dodaj blokove izvedenih ključeva S i T u x, a neka
x1 . . . xt označavaju dobivene proširene segmente 32-bitnih blokova. (Zadnja dva
bloka uključuju tajne izvedene ključeve.)

3. Obrada blokova - obraditi svaki 32-bitni blok xi za i od 1 do t prema sljedećem:


v ← (v ←- 1), U ← (v ⊕ W )
t1 ← (H1 ⊕ xi ) ×1 (((H2 ⊕ xi ) + U ) OR A) AND C)
t2 ← (H2 ⊕ xi ) ×2 (((H1 ⊕ xi ) + U ) OR B) AND D)
H1 ← t1 ,H2 ← t2
(×i označava množenje mod 232 − i za i = 1 ili i = 2; + je zbrajanje mod 232 ;
←- 1 predstavlja rotaciju ulijevo za jedan bit).

4. Završetak - dobiveni MAC je: H = H1 ⊕ H2 .

Dio vezan uz proširenja ključa neovisno o poruci je relativno složen pa je za fiksni


ključ dovoljno jedno izračunavanje. Jačanje algoritma protiv različitih kriptoanalitičkih
napada je omogućeno miješanjem različitih operacija (mod 232 − i, za i = 1 ili i = 2 te
AND-OR izračunavanja).

27
6.3.2. MD5-MAC

U svrhu dodatne zaštite cilj je bio izgraditi MAC od MDC-a tako da MAC funkcija
kompresije i sama ovisi o ključu k, što dovodi do toga da je ključ uključen u sve ite-
racije. Sljedeći algoritam se bazira na tome, a konstruiran je koristeći MD5 algoritam.
Performanse su mu blizu performansi MD5 algoritma (5 − 20% je sporiji u softveru).

Algoritam 6.3 MD5-MAC

ULAZ: niz x proizvoljne duljine b ≥ 0; ključ k duljine ≤ 128.


IZLAZ: 64-bitna MAC-vrijednost od x. MD5-MAC algoritam se dobiva iz MD5 algo-
ritma sljedećim promjenama:

1. Konstante - konstante Ui i Ti su definirane s:


Ui = Ti ||Ti+1 ||Ti+2 ||Ti ||Ti+1 ||Ti+2 ;
T0 : 97 ef 45 ac 29 0f 43 cd 45 7e 1b 55 1c 80 11 34;
T1 : b1 77 ce 96 2e 72 8e 7c 5f 5a ab 0a 36 43 be 18;
T2 : 9d 21 b4 21 bc 87 b9 4d a2 9d 27 bd c7 5b d7 c3.

2. Proširenje ključa

(a) Ako je k kraći od 128 bita, spojiti k na samog sebe potreban broj puta i
redefinirati k kao 128 polaznih bitova s lijeva.
(b) Neka M D5 označava MD5 s dopunjenom i dodanom izostavljenom duljinom.
Proširiti k u tri podključa K0 , K1 iK2 od po 16-byte-a prema sljedećem:
Ki ← M D5(k||Ui ||k), za i od 0 do 2.
(c) Podijeli svaki K0 i K1 u četiri 32-bitna podniza Kj [i], 0 ≤ i ≤ 3.

3. K0 zamjenjuje četiri 32-bitna IV od M D5 algoritma (npr. hi = K0 [i]).

4. K1 [i] se dodaje mod 232 svakoj konstanti y[j] korištenoj u Rundi i MD5 algoritma.

5. K2 se koristi pri izgradnji 512-bitnog bloka koji je dodan postavljenom ulazu x


koje slijedi regularnom nadopunjavanju i duljini bloka kako je definirano u MD5:
K2 ||K2 ⊕ T0 ||K2 ⊕ T1 ||K2 ⊕ T2 .

6. MAC-vrijednost je najdalje lijevo 64 bita od 128-bitnog izlaza iz hashirana do-


punjenog i produljenog ulaznog niza koristeći MD5 s gornjim modifikacijama.

Primjer MD5-MAC algoritma

Neka su konstante Ui i Ti definirane kao u Algoritmu 6.3. U Tablici 6.1 je navedeno ne-
koliko primjera MD5-MAC algoritma za ključ k=00112233445566778899aabbccddeeff.

28
niz znakova MD5-MAC vrijednost
"" 1f1ef2375cc0e0844f98e7e811a34da8
"abc" e8013c11f7209d1328c0caa04fd012a6
"abcdefghijklmnopqrstuvwxyz" 9172867eb60017884c6fa8cc88ebe7c9

Tablica 6.1: Primjeri MD5-MAC algoritma

29
Literatura
[1] A. Dujella, M. Maretić, Kriptografija, Element, Zagreb, 2007.

[2] A. J. Menezes, P. C. van Oorschot, S. A. Vanstone, Handbook of Applied


Cryptography, CRC Press, Boca Racon, 1997.

[3] D. R. Stinson, Cryptography Theory and Practice, CRC Press, Boca Racon, 2005.

[4] Algoritmi za izračunavanje sažetaka, CARNet, dostupno na:


http://www.cert.hr/sites/default/files/CCERT-PUBDOC-2006-08-166.pdf

30
Sažetak
U radu smo opisali posebnu vrstu funkcija koje imaju veliku ulogu u kriptografiji, a
to su hash-funkcije. Upoznali smo se s njihovim svojstvima te smo naveli veze između
određenih svojstava. Potom smo dali pojednostavljenu klasifikaciju hash-funkcija, a
zatim dodatna svojstva koja moraju imati određene hash-funkcije. Opisali smo ciljeve
napada na hash-funkcije, te naveli što si za cilj uzima napadač koji napada MDC,
odnosno njegove specifične klase OWHF i CRHF, a potom cilj napadača koji napada
MAC. Potom smo prikazali osnovnu konstrukciju hash-funkcija, a zatim smo pojasnili
na koji način možemo funkcije kompresije proširiti do hash-funkcija. Zatim smo se
upoznali s hash-funkcijama bez ključa, objasnili što su to blok-šifre i kakva je njihova
uloga u izgradnji hash-funkcija. Detaljnije smo opisali nekoliko algoritama koji se
baziraju na blok-šiframa te na MD4 hash-funkciji, a zatim primjerima ilustrirali kako
izgledaju hash-vrijednosti različitih hash-funkcija za isti niz znakova. Nakon toga smo
rekli nešto o hash-funkcijama s ključem. Na samom kraju rada smo rekli nešto više o
prilagođenim MAC algoritmima.

31
Title and summary
In this paper we described special type of functions which play significant role in
cryptography, and those are hash functions. We explained their properties and relations
between properties. We gave simplified classification of hash functions and what extra
properties have some of them. In work is described which are targets of attack on hash
functions, and we explained what is target of adversary on MDC, especially his specific
classes OWHF and CRHF, and then we explained target of attacking on MAC. After
that we show basic construction of hash-functions and way of extending compression
functions to hash functions. Then we talked about unkeyed hash function, we said
something about block ciphers and their usage in construction hash function. Also
we gave detailed descriptions of few algorithms which are based on block ciphers and
MD4 hash-function, and we illustrated on example with same string which hash-values
we get if we use some of those hash functions. At the end we said something about
customized MACs algorithms.

32
Životopis
Rođen sam 4. kolovoza 1989. godine u Vukovaru. Živim u Borovu. Osnovnu školu
"Borovo" u Borovu sam završio 2004. godine, a potom sam upisao Prirodoslovno-
matematički smjer u Gimnaziji "Vukovar" u Vukovaru. Za vrijeme osnovnoškolskog i
srednjoškolskog obrazovanja sam sudjelovam na općinskim i županijskim natjecanjima
iz matematike. 2008. godine sam upisao Sveučilišni nastavnički studij matematike i
informatike na Odjelu za matematiku u Osijeku.

33

Das könnte Ihnen auch gefallen