Академический Документы
Профессиональный Документы
Культура Документы
Juren Jurica
Toma Mlikota
Hash funkcije
SEMINARSKI RAD
Voditelj rada:
dr. sc. Neven Vrek
SADRAJ 2
UVOD 3
Hash tablice 7
Izbjegavanje kolizije u hash tablicama 8
MD5(MESSAGE-DIGEST ALGORITHM 5) 12
MD5 pseudokod 14
SHA ALGORITMI 15
SHA 1 15
Primjer SHA 1 saetaka 16
SHA-1 pseudokod 17
SHA-2 18
SHA 256 pseudokod 19
LITERATURA 21
2
Uvod
HASH funkcija ili hash algoritam je funkcija za saimanje i identificiranje podataka. Takav
saetak naziva se hash vrijednost ili jednostavno hash, a proces izraunavanja te vrijednosti
naziva se hashiranje (eng. hashing). Hash funkcije koje su injekcija i surjekcija a time i
bijekcija nazivaju se randomizirajue funkcije. Domena hash funkcija u veini sluajeva vea
je od kodomene pa nisu bijekcija (citat Wikipedia).
Osnovno svojstvo svih hash funkcija je da ako su dva izlaza dobivena istom funkcijom
razliita onda su i ulazi bili razliiti. To znai da su hash funkcije deterministike tj. za
identian ulaz dobivamo identian izlaz. Ukoliko hash funkcija nije surjekcija onda dva
identina izlaza ne podrazumijevaju identine ulaze.
Hash funkcija od ulaza varijabilne veliine vraa znakovni niz fiksne duine.
Slika: Za tri razliita ulaza dobivamo razliite izlaze koji su uvijek jednako dugi bez obzira
na duinu ulaza (izvor http://en.wikipedia.org/wiki/Hash_function)
Rije hash u engleskom jeziku znai sjeckati i mijeati (chop and mix), a hash funkcije
rade upravo to ulaz podijele na vie dijelova koje zatim mijeaju koristei razliite, paljivo
odabrane matematike operacije. Izraz je prvi put upotrijebio Peter Luhn iz IBM-a u jednom
dopisu s poetka 1953. godine. U upotrebu je uao desetak godina kasnije.
3
Kolizija hash saetaka
Kolizija predstavlja situaciju u kojoj za dva razliita ulaza hash funkcija izrauna identine
izlaze. Ta situacija posljedica je fiksne duine hash saetaka, a varijabilne duine ulaza.
Ukoliko je hash saetak uvijek iste duine ima ih ogranien broj dok ulaza ima beskonano
mnogo. Jasno je da e svakom hash saetku biti pridrueno beskonano mnogo ulaza.
Unato koliziji hash funkcije i dalje zadovoljavaju definiciju funkcije koja kae da funkcija
svakom elementu domene pridruuje jedan i samo jedan lan kodomene. Meutim takva
funkcija nije bijekcija (jedan na jedan) jer vie razliitih lanova domene ima pridruen isti
lan domene.
Potpuno izbjegavanje kolizije mogue je samo u ogranienom broju sluajeva kada su nam
unaprijed poznati ulazi u funkciju i njihov broj. Hash funkcija kod koje ne moe doi do
kolizije naziva se savrena hash funkcija.
Upitno je koliko je kolizija uistinu velik sigurnosni problem hash funkcija iz nekoliko razloga.
Kod koritenja novijih hash funkcija ni uz pomo superraunala napad nije mogue izvesti u
razumnom vremenu. Ukoliko i pronaemo koliziju primatelja kome je upuena poruka
poaljite tajne podatke o sluaju na ja_sam@yahoo.com neemo prevariti porukom
iohasfsdfopscvpb123132#$2. Te dvije poruke imaju isti saetak.
Hash funkcije bile bi ozbiljno ugroene pronalaskom algoritma kojim bi bili u mogunosti
pronai smislenu poruku koja ima isti saetak kao izvorna poruka. Primjerice primatelja koji
je trebao primiti originalnu poruku iz prethodnog primjera moemo prevariti porukom
poaljite tajne podatke o sluaju na netko_drugi@gmail.com
lkasd934m,kwet435345fh%&7u.
4
Primjena hash funkcija
Hash funkcije mogu se primijeniti u razliitim podrujima. Primjerice, jedna od
jednostavnijih primjena mogu biti digitalni testovi. Mogue ih je izvesti zahvaljujui tome to
su hash funkcije jednosmjerne, tj. nemogue je iz hash saetka izraunati ulaz. Ukoliko osobi
koja se testira poaljemo i pitanja i odgovore postoji mogunost da ta osoba doe do
odgovora. Meutim mi ispitaniku moemo poslati pitanja i hash saetke odgovora. Kada
ispitanik odgovori izrauna se hash saetak njegovog odgovora i usporedi sa hash saetkom
tonog odgovora.
Hash funkcije mogu se koristiti i za detekciju greaka pri prijenosu podataka. Poiljatelj
izrauna saetak podataka koje eli poslati, poalje ga s podacima. Kada primatelj primi
podatke te ponovo izrauna saetak i usporedi ga s dobivenim saetkom. Ukoliko se saeci
podudaraju podaci su preneseni bez greke. Ovaj nain provjere ispravnosti prijenosa
podataka naziva se i provjera s redundancijom.
Osim to uz pomo hash funkcija greke moemo detektirati, moemo ih i ispravljati. U svrhu
toga moramo barem priblino predvidjeti distribuciju moguih smetnji. Te smetnje
klasificiraju se u malo-vjerojatne i vjerojatne greke.
Hash funkcije mogu se koristiti i za identificiranje datoteka u svrhu njihovog pronalaenja ili
usporeivanja. Na ovaj se nain moe saznati samo da li su datoteke identine jer samo mala
promjena datoteke (primjerice jednog slova u tekstualnoj datoteci) uzrokuje veliku promjenu
u hash saetku.
5
Slika: primjer StrongDC klijenta koji radi u direct conect p2p mrei. Zaokrueni su saeci
datoteka uz pomo kojih se datoteke pronalaze kod ostalih korisnika u mrei.
Ova tehnika pronalaenja datoteka esto se koristi u peer to peer mreama namijenjenima
razmjeni datoteka. Datoteke u ovakvim mreama nisu odreene URL-om (Uniform Resource
Locator) koji nam govori na kojem se raunalu datoteka nalazi i koja je staza do nje ve su
odreene URN-om (Uniform Resource Name) koji datoteku identificira uz pomo njenog
sadraja. Tonije u p2p mreama koristi se magnet link (npr.
magnet:?xt=urn:sha1:YNCKHTQCWBTRNJIV4WNAE52SJUQCZO5C).
Hash funkcije mogu se koristiti za implementaciju razliitih struktura podataka poput tablica,
lista ili stabala.
6
Implementacija struktura podataka pomou hash
funkcija
Hash tablice
Hash tablice ili hash mape su strukture podataka koje povezuju kljueve s vrijednostima.
Osnovna namjena hash tablica je uinkovito pretraivanje: za dani klju (npr. ime osobe)
pronai odgovarajuu vrijednost (npr. telefonski broj).
Hash tablice funkcioniraju tako da transformiraju kljueve u hash saetak - broj koji se
kasnije koristi za pronalaenje traene vrijednosti.
Funkcije koje hash tablice podravaju su insert(klju, vrijednost) te lookup(klju). Funkcija
delete(klju) uglavnom je podrana. Tablice mogu podravati i usluge tipa proirivanje
tablice, pranjenje tablice i sl. Neke tablice omoguavaju da se uz jedan klju vee vie
vrijednosti.
Kljuevi mogu biti bilo to: broj, znakovni niz, objekt pa ak i reference na pohranjenu
vrijednost. Jedini uvjet je naravno da postoji hash funkcija za raunanje kljua.
Veina implementacija hash tablica nisu trajne strukture podataka tj. ne postoji nain da ih se
promijeni i da se pri tom sauva prethodno stanje tablice.
7
Hash tablice koriste se za tablice simbola (struktura podataka koju koriste kompajleri i
interpreteri), cache (skup podataka duplikata originalnih vrijednosti pohranjenih na nekom
drugom mjestu) i set (skup podataka bez odreenog redoslijeda).
Hash tablice koriste se i za implementaciju tablica premjetanja koje su praktine za ubrzanje
pretraivanja stabla igre u raunalnom ahu.
Ulanavanje
Ulanavanje je jedna od najjednostavnijih tehnika izbjegavanja kolizije u hash tablicama.
Svaka vrijednost u nizu kljueva ustvari je vezana lista umetnutih zapisa koji imaju isti klju.
Novi zapisi mogu se umetnuti na poetak ili na kraj liste.
8
Jedna od prednosti tehnike ulanavanja je jednostavno brisanje zapisa iz tablice. Pad
performansi tablice linearno je proporcionalan poveanju tablice. Primjerice, tablica koja ima
dvostruko vie zapisa od preporuenog broja u prosjeku je dvostruko sporija od iste tablice s
preporuenim brojem zapisa.
Ulanane hash tablice nasljeuju sve nedostatke vezanih listi. Kod manjeg broja zapisa veina
dodanih podataka (pokazivai na prethodni ili sljedei element u listi i sl.) moe biti znaajna.
Dodatni nedostatak je sporost pomicanja kroz listu budui da, da bi doli do odreenog
elementa u listi moramo krenuti ili s poetka ili s kraja liste.
Osim vezanih listi mogu se koristiti i neke druge strukture podataka. U sluaju da koristimo
samobalansirajue stablo, sloenost pretraivana u najgorem sluaju spustit e se s O(n) na
O(log n). Te ostale strukture podataka koriste se rijetko budui da su vezane liste uglavnom
kratke jer se rijetko dogaa veliki broj kolizija.
Otvoreno adresiranje
Kod hash tablica realiziranih otvorenim adresiranjem podaci se spremaju direktno u nizove.
Kolizija se rjeava ispipavanjem, tj. pretraivanjem kroz alternativne lokacije u nizu dok se
ne doe ili do traenog zapisa ili do praznog mjesta u nizu.
Slika: Hash tablica realizirana otvorenim adresiranjem. Zapisi s istim saecima kljueva
nalaze se u nizu, a nakon njih nalazi se prazan element.
(izvor http://en.wikipedia.org/wiki/Hash_table)
9
Neki od poznatijih redoslijeda ispipavanja su linearno ispipavanje u kojem je interval izmeu
dva traenja ne mijenja te je najee 1 te kvadratno ispipavanje u kojem se intervali izmeu
dva traenja linearno poveavaju (opisani su kvadratnom funkcijom).
U ovisnosti o odabranoj tehnici izbjegavanja kolizije, performanse tablice mogu nakon neke
toke poeti dramatino opadati s dodavanjem novih elemenata. Ovaj problem se rjeava tako
da se alocira nova vea tablica u trenutku kad faktor optereenja prijee zadanu granicu. Svi
podaci iz poetne tablice prebacuju se u novu tablicu. Ovaj postupak moe biti jako skup pa je
ovaj problem jedan od glavnih nedostataka hash tablica. Neke starije metode ovog postupka
kod kojih se tablica poveava za jedno mjesto u nizu pri svakom dodavanju novog elementa
mogu toliko smanjiti uinkovitost da hash tablice postanu beskorisne.
10
Hash liste i hash stabla
U raunalnoj znanosti hash lista je ustvari bilo kakva lista hash saetaka. Takve liste mogu se
koristiti za razliite svrhe, primjerice brzo pretraivanje hash tablica, u distribuiranim bazama
podataka, za ouvanje integriteta podataka, itd.
Hash liste mogu se koristiti za zatitu bilo kakvih podataka koji se prenose izmeu raunala.
Trenutno se najee koriste u p2p mreama kako bi se detektirale greke nastale prilikom
prijenosa podataka ili kako bi se otkrilo da li neki vor alje izmijenjene podatke ili lane
blokove podataka. Upravo u ovome sluaju liste hash saetaka dijelova datoteke imaju
odreene prednosti pred hash saetkom cijele poruke. Ukoliko je dolo do greke, namjerne ili
sluajne, prilikom prijenosa bloka podataka greka e se uoiti odmah. Nee biti potrebe za
prijenosom cijele datoteke ve samo bloka s grekom.
Slian koncept hash listama su hash stabla. Ona su ustvari nadogradnja na hash liste, ali se
dosta rjee koriste. Hash stabla koriste se u istim situacijama kao i hash liste.
Hash stablo je stablo hash saetaka kod kojeg su listovi hash saeci dijelova datoteke. vorovi
dalje u stablu su hash saeci njihove djece.
Slika: primjeri hash liste (a) i hash stabla (b) (izvor http://en.wikipedia.org/wiki/Hash_list i
http://en.wikipedia.org/wiki/Hash_tree)
11
Kriptografske hash funkcije
Kriptografske hash funkcije su hash funkcije kojima su dodana odreena sigurnosna svojstva
kako bi ih se moglo koristiti u razliitim sigurnosnim aplikacijama za npr. ouvanje integriteta
podataka.
Kriptografske hash funkcije trebale bi se ponaati kao randomizirajue funkcije, a trebaju
ostati deterministike i lako izraunljive. Ukoliko se moe doi do poruke iz saetaka ili
ukoliko se moe izraunati kolizija dvaju saetaka, kriptografska hash funkcija smatra se
nesigurnom. Jedna od najvanijih primjena kriptografskih hash funkcija je ouvanje
integriteta poruke. Raunanjem saetaka prije i poslije prijenosa poruke preko mree moemo
utvrditi da li je poruka mijenjana. Saetak se moe koristiti i za pouzdano identificiranje
datoteke.
Saetak se moe koristiti za autorizaciju korisnika, tj. za provjeru zaporke. Iz oitih razloga
zaporke se ne uvaju kao itak tekst ve se uva njihov saetak.
Neke od najee koritenih kriptografskih hash funkcija su:
HAVAL, MD2, MD4, MD5, N-Hash, SHA, Snefru, Tiger, Whirlpool.
Slika: linearna funkcija na kojoj se baziraju etiri faze procesiranja poruke. U svakoj fazi
koristi se po jedna od ovih funkcija (izvor: http://en.wikipedia.org/wiki/MD5)
12
1.oujka 2004. godine Jean-Luc Cooke iz CertainKey Cryptosystems-a zapoeo je projekt
pronalaenja kolizije MD5 saetaka. Projekt se izvodio distribuirano, tj. kolizija saetaka
traila se na vie raunala. Projekt je dovren u kolovozu 2004. godine, a kolizija je
pronaena.
Za pronalaenje kolizije koristio se Pollardov rho algoritam za detekciju ciklusa. Bilo koja
funkcija s konanim brojem moguih izlaza ukoliko se stavi u petlju ponaat e se cikliki.
Izlazi s odreenom strukturom koriste se kao markeri kako bi se lake detektiralo ukoliko se
neki marker ve pojavljivao. Ovi markeri nazivaju se istaknute toke, tj. toke u kojima dva
ulaza daju isti izlaz-kolizija. MD5CRK bilo koji izlaz koji je poinjao s 32 bita nula smatrao
je istaknutim tokama.
13
MD5 pseudokod
Pseudokod je preuzet s http://en.wikipedia.org/wiki/MD5. Napravljen je prema RFC
standardu.
//Note: All variables are unsigned 32 bits and wrap modulo 2^32 when calculating
//Define r as the following
var int[64] r, k
r[ 0..15] := {7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22}
r[16..31] := {5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20}
r[32..47] := {4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23}
r[48..63] := {6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21}
//Initialize variables:
var int h0 := 0x67452301
var int h1 := 0xEFCDAB89
var int h2 := 0x98BADCFE
var int h3 := 0x10325476
//Pre-processing:
append "1" bit to message
append "0" bits until message length in bits 448 (mod 512)
append bit length of message as 64-bit little-endian integer to message
//Main loop:
for i from 0 to 63
if 0 i 15 then
f := (b and c) or ((not b) and d)
g := i
else if 16 i 31
f := (d and b) or ((not d) and c)
g := (5i + 1) mod 16
else if 32 i 47
f := b xor c xor d
g := (3i + 5) mod 16
else if 48 i 63
f := c xor (b or (not d))
g := (7i) mod 16
temp := d
d := c
c := b
b := ((a + f + k(i) + w(g)) leftrotate r(i)) + b
a := temp
14
SHA algoritmi
Protokoli SHA koriste se za generiranje saetka (engl. hash) poruke. SHA se koristi kao dio
algoritma za osiguravanje neporecivosti poruke. Pomou SHA algoritma stvara se saetak
poruke koja se eli poslati nesigurnim komunikacijskim kanalom. Saetak poruke mora biti
ovisan o sadraju poruke i mora biti razliit za sline poruke. Saetak se zatim kriptira
proizvoljnim algoritmom i prenosi do primatelja nesigurnim komunikacijskim kanalom
zajedno s originalnom porukom. Na primateljevoj strani dekriptira se kriptirani saetak
poruke i zatim usporeuje sa saetkom koji nastaje kada se kriptira primljena poruka. Ako su
saeci jednaki, tada se dri da je autentinost poruke potvrena.
SHA 1
SHA-1 je hash algoritam koji se koristi za raunanje saetka poruke. Algoritam za poruku
duljine do 264 bita (216 TB) generira 160-bitni saetak. Svojstvo saetka jest da i najmanja
promjena izvorne poruke generira potpuno drugi saetak, pa se on koristi za osiguravanje
integriteta poruke. Vjerojatnost da hash funkcija za dvije razliite poruke generira isti saetak
je vrlo mala. Sloenost SHA-1 algoritma trebala bi dodatno oteati pokuaje podvale.
U prvom koraku se ulazna informacija podijeli na blokove veliine 512 bita. Na zadnji se blok
dodaje jedinica pa N nula (gdje N moe poprimiti vrijednosti iz skupa {0,511}) te 64-bitni
broj koji pokazuje veliinu originalne poruke u bitovima.
Primjerice, ako je zadnji blok 5475-bitne poruke: 1000011010101...10111 (355 bita) onda se
dodaje 1000...000xxx...x, gdje x-eva ima 64 (5475 binarno), a nula 92 (355+1+92+64=512).
Ukoliko je zadnji blok poruke vei od 447 bita, u njega ne bi stali jedinica i 64-bitni broj pa se
dodaje jo jedan 512 bitni blok (na prvi 1000...0, na drugi 0000....00xxx...x).
Algoritam koristi 80 funkcija "f" i konstanti "K" od kojih je funkcija f(t) definirana na sljedei
nain:
15
Slika: Digitalni potpis dobiven koritenjem SHA-1 algoritma u kombinaciji sa DSA
algoritmom za kriptiranje
16
SHA-1 pseudokod
Pseudokod je preuzet sa http://en.wikipedia.org/wiki/SHA-1.
Note: All variables are unsigned 32 bits and wrap modulo 2^32 when calculating
Initialize variables:
h0 := 0x67452301
h1 := 0xEFCDAB89
h2 := 0x98BADCFE
h3 := 0x10325476
h4 := 0xC3D2E1F0
Pre-processing:
append a single "1" bit to message
append "0" bits until message length 448 -64 (mod 512)
append length of message (before pre-processing), in bits as 64-bit big-endian
integer to message
17
SHA-2
Sadri u sebi pod-algoritme SHA-256, SHA-384 and SHA-512 koji daju saetak u duljini od
256, 384 i 512 bitova. Svaki od navedenih algoritama polovicu bitova koriste za izbjegavanje
kolizije.
SHA-2 algoritmi jame nam veu sigurnost od SHA-1 algoritma zbog vee duine saetka i
vie bitova za izbjegavanje kolizije
Karakteristike SHA-256 i SHA-512 algoritama
SHA-256:
koristi 32-bitne rijei0
glavna petlja se sastoji od 64 koraka
vie poetnih varijabla od SHA-1
SHA-512:
koristi 64-bitne rijei za razliku od SHA-256
glavna petlja ima 80 koraka
razliite poetne vrijednosti i konstante od SHA-256
razliiti shift i rotate amounts od SHA-256
18
SHA 256 pseudokod
Pseudokod je preuzet sa http://en.wikipedia.org/wiki/SHA_hash_functions.
//Note: All variables are unsigned 32 bits and wrap modulo 2^32 when calculating
//Initialize variables:
h0 := 0x6a09e667 //232 times the square root of the first 8 primes 2..19
h1 := 0xbb67ae85
h2 := 0x3c6ef372
h3 := 0xa54ff53a
h4 := 0x510e527f
h5 := 0x9b05688c
h6 := 0x1f83d9ab
h7 := 0x5be0cd19
//Pre-processing:
append a single "1" bit to message
append "0" bits until message length 448 -64 (mod 512)
append length of message (before pre-processing), in bits as 64-bit big-endian
integer to message
19
//Main loop:
for i from 0 to 63
s0 := (a rightrotate 2) xor (a rightrotate 13) xor (a rightrotate 22)
maj := (a and b) xor (b and c) xor (c and a)
t0 := s0 + maj
s1 := (e rightrotate 6) xor (e rightrotate 11) xor (e rightrotate 25)
ch := (e and f) xor ((not e) and g)
t1 := h + s1 + ch + k(i) + w(i)
h := g
g := f
f := e
e := d + t1
d := c
c := b
b := a
a := t0 + t1
20
Literatura
1. http://en.wikipedia.org/wiki/Hash_function
2. http://en.wikipedia.org/wiki/Hash_table
3. http://en.wikipedia.org/wiki/Hash_list
4. http://en.wikipedia.org/wiki/Hash_tree
5. http://www.azillionmonkeys.com/qed/hash.html
6. http://www.rsasecurity.com/rsalabs/node.asp?id=2176
7. http://burtleburtle.net/bob/hash/evahash.html
8. http://en.wikipedia.org/wiki/Cryptographic_hash_function
9. http://www.cs.rit.edu/~ark/lectures/onewayhash/onewayhash.shtml
10. http://www.unixwiz.net/techtips/iguide-crypto-hashes.html
11. http://en.wikipedia.org/wiki/MD5
12. http://en.wikipedia.org/wiki/MD5CRK
13. http://en.wikipedia.org/wiki/SHA_hash_functions
14. http://en.wikipedia.org/wiki/SHA-1
15. http://en.wikipedia.org/wiki/SHA-2
21