20
PANEVROPSKI UNIVERZITET APEIRON FAKULTET POSLOVNE INFORMATIKE Redovne studije Smer „Informatički inžinjering” Predmet ZAŠTITA RAČUNARSKI I POSLOVNIH SISTEMA „HASH FUNKCIJA” (seminarski rad) Predmetni nastavnik Prof. dr Milan Marković Studenti Krpić Boris, student Index br. 073-08/RIT

Hash Funkcije- Boris Krpic

Embed Size (px)

Citation preview

Page 1: Hash Funkcije- Boris Krpic

PANEVROPSKI UNIVERZITET APEIRON FAKULTET POSLOVNE INFORMATIKE

Redovne studijeSmer „Informatički inžinjering”

PredmetZAŠTITA RAČUNARSKI I POSLOVNIH

SISTEMA

„HASH FUNKCIJA”(seminarski rad)

Predmetni nastavnik

Prof. dr Milan Marković

StudentiKrpić Boris, studentIndex br. 073-08/RIT

Banja Luka, januar 2011.

Page 2: Hash Funkcije- Boris Krpic

SADRŽAJ:Uvod.......................................................................................................................................................3

KOLIZIJA HASH SADRŽAJA.....................................................................................................................3

PRIMJENA HASH FUNKCIJA...................................................................................................................4

HASH TABLICE........................................................................................................................................5

IZBJEGAVANJE KOLIZIJE U HASH TABLICAMA.......................................................................................6

ULANČAVANJE.......................................................................................................................................7

OTVORENO ADRESIRANJE.....................................................................................................................7

HASH LISTE I HASH STABLA...................................................................................................................9

KRIPTOGRAFSKE HASH FUNKCIJE..........................................................................................................9

MD5 (MESSAGE-DIGEST ALGORITHM 5).............................................................................................10

MD5 PSEUDOKOD................................................................................................................................11

SHA ALGORITMI...................................................................................................................................12

SHA – 1.................................................................................................................................................12

PRIMJER SHA – 1 SADRŽAJA................................................................................................................13

SHA-1 PSEUDOKOD..............................................................................................................................14

SHA-2...................................................................................................................................................15

SHA – 256 PSEUDOKOD.......................................................................................................................15

2

Page 3: Hash Funkcije- Boris Krpic

Uvod

HASH funkcija ili hash algoritam je funkcija za smanjivanje i identificiranje podataka. Takav sadržaj naziva se hash vrijednost ili jednostavno hash, a proces izračunavanja te vrijednosti naziva se hashiranje (eng. hashing). Hash funkcije koje su injekcija i surjekcija a time i bijekcija nazivaju se randomizirajuće funkcije. Domena hash funkcija u većini slučajeva veća je od kodomene pa nisu bijekcija.

Osnovno svojstvo svih hash funkcija je da ako su dva izlaza dobivena istom funkcijom različita onda su i ulazi bili različiti. To znači da su hash funkcije determinističke tj. za identičan ulaz dobivamo identičan izlaz. Ukoliko hash funkcija nije surjekcija onda dva identična izlaza ne podrazumijevaju identične ulaze.Hash funkcija od ulaza varijabilne veličine vraća znakovni niz fiksne dužine.

Slika: Za tri različita ulaza dobivamo različite izlaze koji su uvijek jednako dugi bez obzira na dužinu ulaza (izvor http://en.wikipedia.org/wiki/Hash_function)

Riječ «hash» u engleskom jeziku znači «sjeckati i miješati» (chop and mix), a hash funkcije rade upravo to – ulaz podijele na više dijelova koje zatim miješaju koristeći različite, pažljivo odabrane matematičke operacije. Izraz je prvi put upotrijebio Peter Luhn iz IBM-a u jednom dopisu s početka 1953. godine. U upotrebu je ušao desetak godina kasnije.

Kolizija hash sadržaja

Kolizija predstavlja situaciju u kojoj za dva različita ulaza hash funkcija izračuna identične izlaze. Ta situacija posljedica je fiksne dužine hash sadržaja, a varijabilne dužine ulaza. Ukoliko je hash sadržaj uvijek iste dužine ima ih ograničen broj dok ulaza ima beskonačno mnogo. Jasno je da će svakom hash sadržaju biti pridruženo beskonačno mnogo ulaza.

3

Page 4: Hash Funkcije- Boris Krpic

Unatoč koliziji hash funkcije i dalje zadovoljavaju definiciju funkcije koja kaže da funkcija svakom elementu domene pridružuje jedan i samo jedan član kodomene. Međutim takva funkcija nije bijekcija (jedan na jedan) jer više različitih članova domene ima pridružen isti član domene. Potpuno izbjegavanje kolizije moguće je samo u ograničenom broju slučajeva kada su nam unaprijed poznati ulazi u funkciju i njihov broj. Hash funkcija kod koje ne može doći do kolizije naziva se savršena hash funkcija.

Upitno je koliko je kolizija uistinu velik sigurnosni problem hash funkcija iz nekoliko razloga. Kod korištenja novijih hash funkcija ni uz pomoć super računala napad nije moguće izvesti u razumnom vremenu. Ukoliko i pronađemo koliziju primatelja kome je upućena poruka „pošaljite tajne podatke o slučaju na [email protected]“ nećemo prevariti porukom „iohasfsdfopscvpb123132#$2“. Te dvije poruke imaju isti sadržaj.

Hash funkcije bile bi ozbiljno ugrožene pronalaskom algoritma kojim bi bili u mogućnosti pronaći smislenu poruku koja ima isti sadržaj kao izvorna poruka. Primjerice primaoca koji je trebao primiti originalnu poruku iz prethodnog primjera možemo prevariti porukom „pošalilac tajne podatke o slučaju na [email protected] lkasd934m,kwet“435345fh%&7u“.

Primjena hash funkcija

Hash funkcije mogu se primijeniti u različitim područjima. Primjerice, jedna od jednostavnijih primjena mogu biti digitalni testovi. Moguće ih je izvesti zahvaljujući tome što su hash funkcije jednosmjerne, tj. nemoguće je iz hash sadržaja izračunati ulaz. Ukoliko osobi koja se testira pošaljemo i pitanja i odgovore postoji mogućnost da ta osoba dođe do odgovora. Međutim mi ispitaniku možemo poslati pitanja i hash sadržaje odgovora. Kada ispitanik odgovori izračuna se hash sadržaj njegovog odgovora i usporedi sa hash sadržaja tačnog odgovora.

Hash funkcije mogu se koristiti i za detekciju grešaka pri prijenosu podataka. Pošilalac izračuna sadržaj podataka koje želi poslati, pošalje ga s podacima. Kada primatelj primi podatke te ponovo izračuna sadržaj i usporedi ga s dobivenim sadržajem. Ukoliko se sadržaj podudaraju podaci su preneseni bez greške. Ovaj način provjere ispravnosti prijenosa podataka naziva se i provjera s redundancijom.

Osim što uz pomoć hash funkcija greške možemo detektirati, možemo ih i ispravljati. U svrhu toga moramo barem približno predvidjeti distribuciju mogućih smetnji. Te smetnje klasificiraju se u malo-vjerojatne i vjerojatne greške.

Hash funkcije mogu se koristiti i za identificiranje datoteka u svrhu njihovog pronalaženja ili uspoređivanja. Na ovaj se način može saznati samo da li su datoteke identične jer samo mala promjena datoteke (primjerice jednog slova u tekstualnoj datoteci) uzrokuje veliku promjenu u hash sadržaju.

4

Page 5: Hash Funkcije- Boris Krpic

Slika: primjer StrongDC klijenta koji radi u direct conect p2p mreži. Zaokruženi su sadržaji datoteka uz pomoć kojih se datoteke pronalaze kod ostalih korisnika u mreži.

Ova tehnika pronalaženja datoteka često se koristi u peer to peer mrežama namijenjenima razmjeni datoteka. Datoteke u ovakvim mrežama nisu određene URL-om (Uniform Resource Locator) koji nam govori na kojem se računaru datoteka nalazi i koja je staza do nje već su određene URN-om (Uniform Resource Name) koji datoteku identificira uz pomoć njenog sadržaja. Tačnije u p2p mrežama koristi se «magnet link» (npr. magnet:?xt=urn:sha1:YNCKHTQCWBTRNJIV4WNAE52SJUQCZO5C).

Hash funkcije mogu se koristiti za implementaciju različitih struktura podataka poput tablica, lista ili stabala.Implementacija struktura podataka pomoću hash funkcija

Hash tablice

Hash tablice ili hash mape su strukture podataka koje povezuju ključeve s vrijednostima. Osnovna namjena hash tablica je učinkovito pretraživanje: za dati ključ (npr. ime osobe) pronađi odgovarajuću vrijednost (npr. telefonski broj).

5

Page 6: Hash Funkcije- Boris Krpic

Slika: Primjer telefonskog imenika izvedenog pomoću hash tablice (izvor http://en.wikipedia.org/wiki/Hash_table)

Hash tablice funkcioniraju tako da transformiraju ključeve u hash sadržaju - broj koji se kasnije koristi za pronalaženje tražene vrijednosti.Funkcije koje hash tablice podržavaju su insert (ključ, vrijednost) te lookup (ključ). Funkcija delete (ključ) uglavnom je podržana. Tablice mogu podržavati i usluge tipa proširivanje tablice, pražnjenje tablice i sl. Neke tablice omogućavaju da se uz jedan ključ veže više vrijednosti.

Ključevi mogu biti bilo šta: broj, znakovni niz, objekt pa čak i reference na pohranjenu vrijednost. Jedini uslov je naravno da postoji hash funkcija za računanje ključa.Većina implementacija hash tablica nisu trajne strukture podataka tj. ne postoji način da ih se promijeni i da se pri tom sačuva prethodno stanje tablice.

Hash tablice koriste se za tablice simbola (struktura podataka koju koriste kompajleri i interpreteri), cache (skup podataka duplikata originalnih vrijednosti snimljeni na nekom drugom mjestu) i set (skup podataka bez određenog redoslijeda).Hash tablice koriste se i za implementaciju tablica premještanja koje su praktične za ubrzanje pretraživanja stabla igre u računarskom šahu.

Izbjegavanje kolizije u hash tablicama

Ukoliko dva ključa imaju isti indeks odgovarajući zapisi ne mogu se spremiti na istu lokaciju. Stoga moramo pronaći drugu lokaciju gdje ćemo spremiti zapis te moramo biti u mogućnosti pronaći tu lokaciju naknadno.Postoji nekoliko tehnika izbjegavanja kolizije, a najčešće tehnike koje se koriste su ulančavanje i otvoreno adresiranje. Još neke tehnike izbjegavanja kolizije su savršeno hashiranje, vjerojatnostno hashiranje te spojeno hashiranje koje je kombinacija otvorenog hashiranja i ulančavanja.

6

Page 7: Hash Funkcije- Boris Krpic

Ulančavanje

Ulančavanje je jedna od najjednostavnijih tehnika izbjegavanja kolizije u hash tablicama. Svaka vrijednost u nizu ključeva ustvari je vezana lista umetnutih zapisa koji imaju isti ključ. Novi zapisi mogu se umetnuti na početak ili na kraj liste.

Slika: Hash tablica realizirana ulančavanjem. Indeksi ne pokazuju direktno na elemente tablice već na vezane liste (izvor http://en.wikipedia.org/wiki/Hash_table)

Jedna od prednosti tehnike ulančavanja je jednostavno brisanje zapisa iz tablice. Pad performansi tablice linearno je proporcionalan povećanju tablice. Primjerice, tablica koja ima dvostruko više zapisa od preporučenog broja u prosjeku je dvostruko sporija od iste tablice s preporučenim brojem zapisa.

Ulančane hash tablice nasljeđuju sve nedostatke vezanih listi. Kod manjeg broja zapisa većina dodanih podataka (pokazivači na prethodni ili sljedeći element u listi i sl.) može biti značajna. Dodatni nedostatak je sporost pomicanja kroz listu budući da, da bi došli do određenog elementa u listi moramo krenuti ili s početka ili s kraja liste.

Osim vezanih listi mogu se koristiti i neke druge strukture podataka. U slučaju da koristimo samobalansirajuće stablo, složenost pretraživana u najgorem slučaju spustit će se s O(n) na O(log n). Te ostale strukture podataka koriste se rijetko budući da su vezane liste uglavnom kratke jer se rijetko događa veliki broj kolizija.

Otvoreno adresiranje

Kod hash tablica realiziranih otvorenim adresiranjem podaci se spremaju direktno u nizove. Kolizija se rješava «ispipavanjem», tj. pretraživanjem kroz alternativne lokacije u nizu dok se ne dođe ili do traženog zapisa ili do praznog mjesta u nizu.

7

Page 8: Hash Funkcije- Boris Krpic

Slika: Hash tablica realizirana otvorenim adresiranjem. Zapisi s istim sadržajem ključeva nalaze se u nizu, a nakon njih nalazi se prazan element. (izvor http://en.wikipedia.org/wiki/Hash_table)

Neki od poznatijih redoslijeda ispipavanja su linearno ispipavanje u kojem je interval između dva traženja ne mijenja te je najčešće 1 te kvadratno ispipavanje u kojem se intervali između dva traženja linearno povećavaju (opisani su kvadratnom funkcijom).

Prednosti ulančavanja pred otvorenim adresiranjem su: jednostavne su za implementirati otvoreno adresiranje zahtjeva bolje hash funkcije kako bi se izbjeglo klasteriranje

podataka pad performansi ne opada naglo vezane liste ne mogu se popuniti kod većih tablica ulančavanje zauzima manje memorijskog mjesta od otvorenog

adresiranja ukoliko hash tablice imaju puno praznih mjesta vezane liste zauzimaju manje memorije

Prednosti otvorenog adresiranja pred ulančavanjem su: mogu biti učinkovitije s obzirom na zauzetu memoriju jer ne zahtijevaju dodatne

pokazivače funkcija umetanja ne troši vrijeme za alokaciju memorije

U ovisnosti o odabranoj tehnici izbjegavanja kolizije, performanse tablice mogu nakon neke tačke početi dramatično opadati s dodavanjem novih elemenata. Ovaj problem se rješava tako da se alocira nova veća tablica u trenutku kad faktor opterećenja predje zadanu granicu. Svi podaci iz početne tablice prebacuju se u novu tablicu. Ovaj postupak može biti jako skup pa je ovaj problem jedan od glavnih nedostataka hash tablica. Neke starije metode ovog postupka kod kojih se tablica povećava za jedno mjesto u nizu pri svakom dodavanju novog elementa mogu toliko smanjiti učinkovitost da hash tablice postanu beskorisne.

Hash liste i hash stabla

8

Page 9: Hash Funkcije- Boris Krpic

U računarskoj znanosti hash lista je ustvari bilo kakva lista hash sadržaja. Takve liste mogu se koristiti za različite svrhe, primjerice brzo pretraživanje hash tablica, u distribuiranim bazama podataka, za očuvanje integriteta podataka, itd.

Hash liste mogu se koristiti za zaštitu bilo kakvih podataka koji se prenose između računara. Trenutno se najčešće koriste u p2p mrežama kako bi se detektirale greške nastale prilikom prijenosa podataka ili kako bi se otkrilo da li neki čvor šalje izmijenjene podatke ili lažne blokove podataka. Upravo u ovome slučaju liste hash sadržaja dijelova datoteke imaju određene prednosti pred hash sadržajem cijele poruke. Ukoliko je došlo do greške, namjerne ili slučajne, prilikom prijenosa bloka podataka greška će se uočiti odmah. Neće biti potrebe za prijenosom cijele datoteke već samo bloka s greškom.

Sličan koncept hash listama su hash stabla. Ona su ustvari nadogradnja na hash liste, ali se dosta rjeđe koriste. Hash stabla koriste se u istim situacijama kao i hash liste.Hash stablo je stablo hash sadržaja kod kojeg su listovi hash sadržaji dijelova datoteke. Čvorovi dalje u stablu su hash sadržaji 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)

Kriptografske hash funkcije

Kriptografske hash funkcije su hash funkcije kojima su dodana određena sigurnosna svojstva kako bi ih se moglo koristiti u različitim sigurnosnim aplikacijama za npr. očuvanje integriteta podataka.

Kriptografske hash funkcije trebale bi se ponašati kao randomizirajuće funkcije, a trebaju ostati determinističke i lako izračunljive. Ukoliko se može doći do poruke iz sažetaka ili ukoliko se može izračunati kolizija dvaju sažetaka, kriptografska hash funkcija smatra se nesigurnom. Jedna od najvažnijih primjena kriptografskih hash funkcija je očuvanje integriteta poruke. Računanjem sadržaja prije i poslije prijenosa poruke preko mreže možemo utvrditi da li je poruka mijenjana. Sadržaj se može koristiti i za pouzdano identificiranje datoteke.

9

Page 10: Hash Funkcije- Boris Krpic

Sadržaj se može koristiti za autorizaciju korisnika, tj. za provjeru zaporke. Iz očitih razloga zaporke se ne čuvaju kao čitak tekst već se čuva njihov sadržaja.

Neke od najčešće korištenih kriptografskih hash funkcija su:

HAVAL, MD2, MD4, MD5, N-Hash, SHA, Snefru, Tiger, Whirlpool.

MD5 (Message-Digest algorithm 5)

MD5 je dizajnirao Ronald Rivest (MIT) 1991. godine kao zamjenu za MD4.MD5 najprije razbije poruku na 512-bitne blokove. Zadnji blok nadopuni se do 512 bitova tako da se najprije doda 1 pa zatim 0 sve do 64 bita prije kraja bloka. Ta 64 bita predstavljaju veličinu ulazne poruke.

MD5 algoritam najprije računa 128 bitni izraz koji se dijeli na četiri 32 bitne riječi označene s A, B, C i D. Te četiri riječi u početku su konstante koje se ne mijenjaju. Algoritam dalje uzima svaki 512 bitni blok te uz pomoć njih mijenja 128 bitni izraz.

Procesiranje poruke sastoji se od četiri slične faze od kojih se svaka sastoji od šesnaest operacija baziranih na linearnoj funkciji F, modularnom zbrajanju te lijevoj rotaciji bitova.

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)

1.mart 2004. godine Jean-Luc Cooke iz CertainKey Cryptosystems-a započeo je projekt pronalaženja kolizije MD5 sadržaja. Projekt se izvodio distribuirano, tj. kolizija sadržaja tražila se na više računara. Projekt je završen u avgust 2004. godine, a kolizija je pronađena.

Za pronalaženje kolizije koristio se Pollardov rho algoritam za detekciju ciklusa. Bilo koja funkcija s konačnim brojem mogućih izlaza ukoliko se stavi u petlju ponašat će se ciklički. Izlazi s određenom strukturom koriste se kao markeri kako bi se lakše detektiralo ukoliko se neki marker već pojavljivao. Ovi markeri nazivaju se istaknute tačke, tj. tačke u kojima dva ulaza daju isti izlaz-kolizija. MD5CRK bilo koji izlaz koji je počinjao s 32 bita nula smatrao je istaknutim tačkama.

10

Page 11: Hash Funkcije- Boris Krpic

Slika: Prikaz Pollardovog rho algoritma za traženje kolizije (izvor http://en.wikipedia.org/wiki/MD5CRK)

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 followingvar int[64] r, kr[ 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}

//Use binary integer part of the sines of integers as constants:for i from 0 to 63 k[i] := floor(abs(sin(i + 1)) × 2^32)

//Initialize variables:var int h0 := 0x67452301var int h1 := 0xEFCDAB89var int h2 := 0x98BADCFEvar int h3 := 0x10325476//Pre-processing:append "1" bit to messageappend "0" bits until message length in bits ≡ 448 (mod 512)append bit length of message as 64-bit little-endian integer to message

//Process the message in successive 512-bit chunks:for each 512-bit chunk of message break chunk into sixteen 32-bit little-endian words w(i), 0 ≤ i ≤ 15

//Initialize hash value for this chunk: var int a := h0 var int b := h1 var int c := h2 var int d := h3

//Main loop: for i from 0 to 63 if 0 ≤ i ≤ 15 then f := (b and c) or ((not b) and d) g := i

11

Page 12: Hash Funkcije- Boris Krpic

else if 16 ≤ i ≤ 31 f := (d and b) or ((not d) and c) g := (5×i + 1) mod 16 else if 32 ≤ i ≤ 47 f := b xor c xor d g := (3×i + 5) mod 16 else if 48 ≤ i ≤ 63 f := c xor (b or (not d)) g := (7×i) mod 16

temp := d d := c c := b b := ((a + f + k(i) + w(g)) leftrotate r(i)) + b a := temp

//Add this chunk's hash to result so far: h0 := h0 + a h1 := h1 + b h2 := h2 + c h3 := h3 + d

var int digest := h0 append h1 append h2 append h3 //(expressed as little-endian)

SHA algoritmi

Protokoli SHA koriste se za generiranje sadržaja (engl. hash) poruke. SHA se koristi kao dio algoritma za osiguravanje neporecivosti poruke. Pomoću SHA algoritma stvara se sadržaj poruke koja se želi poslati nesigurnim komunikacijskim kanalom. Sadržaj poruke mora biti ovisan o sadržaju poruke i mora biti različit za slične poruke. Sadržaj se zatim kriptira proizvoljnim algoritmom i prenosi do primatelja nesigurnim komunikacijskim kanalom zajedno s originalnom porukom. Na primateljevoj strani dekriptira se kriptirani sadržaj poruke i zatim uspoređuje sa sadržajem koji nastaje kada se kriptira primljena poruka. Ako su sadržaji jednaki, tada se drži da je autentičnost poruke potvrđena.

SHA – 1

SHA-1 je hash algoritam koji se koristi za računanje sadržaja poruke. Algoritam za poruku danjine do 264 bita (216 TB) generira 160-bitni sadržaj. Svojstvo sadržaja jest da i najmanja promjena izvorne poruke generira potpuno drugi sadržajem, pa se on koristi za osiguravanje integriteta poruke. Vjerojatnost da hash funkcija za dvije različite poruke generira isti sadržaj je vrlo mala. Složenost SHA-1 algoritma trebala bi dodatno otežati pokušaje podvale.

U prvom koraku se ulazna informacija podijeli na blokove veličine 512 bita. Na zadnji se blok dodaje jedinica pa N nula (gdje N može poprimiti vrijednosti iz skupa {0,511}) te 64-bitni broj koji pokazuje veličinu 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 veći 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).

12

Page 13: Hash Funkcije- Boris Krpic

Algoritam koristi 80 funkcija "f" i konstanti "K" od kojih je funkcija f(t) definirana na sljedeći način:

f(t;B,C,D) = (B AND C) OR ((NOT B) AND D) ( 0 <= t <= 19) (u C-u: f=(B&C)|((~B)&D) )f(t;B,C,D) = B XOR C XOR D (20 <= t <= 39) f(t;B,C,D) = (B AND C) OR (B AND D) OR (C AND D) (40 <= t <= 59) f(t;B,C,D) = B XOR C XOR D (60 <= t <= 79).

te konstanta K(t) prema (brojevi su u heksadecimalnom obliku):

K(t) = 5A827999 ( 0 <= t <= 19) K(t) = 6ED9EBA1 (20 <= t <= 39)K(t) = 8F1BBCDC (40 <= t <= 59)K(t) = CA62C1D6 (60 <= t <= 79).

Slika: Digitalni potpis dobiven korištenjem SHA-1 algoritma u kombinaciji sa DSA algoritmom za kriptiranje

Primjer SHA – 1 sadržaja

SHA1("The quick brown fox jumps over the lazy dog") = "2fd4e1c67a2d28fced849ee1bb76e7391b93eb12"

Čak i mala promjena u tekstu rezultira u potpunom drugačijem izlazu, tj, hashu. Vidimo na primjeru da promjenom jednog slova u rečenici hash vrijednost u potpunosti se promijenila odnosno ne podudara se niti u jednom znaku.

SHA1("The quick brown fox jumps over the lazy cog") = "de9f2c7fd25e1b3afad3e85a0bd17d9b100db4b3"

13

Page 14: Hash Funkcije- Boris Krpic

Hash vrijednost za string duljine 0 bita je:SHA1("") = "da39a3ee5e6b4b0d3255bfef95601890afd80709"

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 calculatingInitialize variables:h0 := 0x67452301h1 := 0xEFCDAB89h2 := 0x98BADCFEh3 := 0x10325476h4 := 0xC3D2E1F0

Pre-processing:append a single "1" bit to messageappend "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

Process the message in successive 512-bit chunks:break message into 512-bit chunksfor each chunk break chunk into sixteen 32-bit big-endian words w(i), 0 ≤ i ≤ 15

Extend the sixteen 32-bit words into eighty 32-bit words: for i from 16 to 79 w(i) := (w(i-3) xor w(i-8) xor w(i-14) xor w(i-16)) leftrotate 1 Initialize hash value for this chunk: a := h0 b := h1 c := h2 d := h3 e := h4 Main loop: for i from 0 to 79 if 0 ≤ i ≤ 19 then f := (b and c) or ((not b) and d) k := 0x5A827999 else if 20 ≤ i ≤ 39 f := b xor c xor d k := 0x6ED9EBA1 else if 40 ≤ i ≤ 59 f := (b and c) or (b and d) or (c and d) k := 0x8F1BBCDC else if 60 ≤ i ≤ 79 f := b xor c xor d k := 0xCA62C1D6

temp := (a leftrotate 5) + f + e + k + w(i) e := d d := c c := b leftrotate 30 b := a a := temp Add this chunk's hash to result so far: h0 := h0 + a h1 := h1 + b h2 := h2 + c h3 := h3 + d

14

Page 15: Hash Funkcije- Boris Krpic

h4 := h4 + e

digest= hash = h0 append h1 append h2 append h3 append h4 (expressed as big-endian)(0 ≤ i ≤ 19): f := d xor (b and (c xor d)) (alternative)(20 ≤ i ≤ 39): f := b xor c xor d (unchanged)(40 ≤ i ≤ 59): f := (b and c) or (d and (b or c)) (alternative 1)(40 ≤ i ≤ 59): f := (b and c)+(d and (b xor c)) (alternative 2)(60 ≤ i ≤ 79): f := b xor c xor d (unchanged)

SHA-2

Sadrži u sebi pod-algoritme SHA-256, SHA-384 and SHA-512 koji daju sadržaj u daljini od 256, 384 i 512 bitova. Svaki od navedenih algoritama polovicu bitova koriste za izbjegavanje kolizije.

SHA-2 algoritmi garantuju nam veću sigurnost od SHA-1 algoritma zbog veće dužine sadržajai više bitova za izbjegavanje kolizijeKarakteristike SHA-256 i SHA-512 algoritama

SHA-256:koristi 32-bitne riječi0glavna petlja se sastoji od 64 korakaviše početnih varijabla od SHA-1

SHA-512:koristi 64-bitne riječi za razliku od SHA-256glavna petlja ima 80 korakarazličite početne vrijednosti i konstante od SHA-256različiti shift i rotate amounts od SHA-256

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..19h1 := 0xbb67ae85h2 := 0x3c6ef372h3 := 0xa54ff53ah4 := 0x510e527fh5 := 0x9b05688ch6 := 0x1f83d9abh7 := 0x5be0cd19

//Initialize table of round constants:k(0..63) := //232 times the cube root of the first 64 primes 2..3110x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,

15

Page 16: Hash Funkcije- Boris Krpic

0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2

//Pre-processing:append a single "1" bit to messageappend "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

//Process the message in successive 512-bit chunks:break message into 512-bit chunksfor each chunk break chunk into sixteen 32-bit big-endian words w(i), 0 ≤ i ≤ 15

//Extend the sixteen 32-bit words into sixty-four 32-bit words: for i from 16 to 63 s0 := (w(i-15) rightrotate 7) xor (w(i-15) rightrotate 18) xor (w(i-15) rightshift 3) s1 := (w(i-2) rightrotate 17) xor (w(i-2) rightrotate 19) xor (w(i-2) rightshift 10) w(i) := w(i-16) + s0 + w(i-7) + s1

//Initialize hash value for this chunk: a := h0 b := h1 c := h2 d := h3 e := h4 f := h5 g := h6 h := h7

//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

//Add this chunk's hash to result so far: h0 := h0 + a h1 := h1 + b h2 := h2 + c h3 := h3 + d h4 := h4 + e h5 := h5 + f h6 := h6 + g h7 := h7 + h

//Output the final hash value (big-endian):digest = hash = h0 append h1 append h2 append h3 append h4 append h5 append h6 append h7

16

Page 17: Hash Funkcije- Boris Krpic

LITERATURA:

http://www.azillionmonkeys.com/qed/hash.htmlhttp://www.rsasecurity.com/rsalabs/node.asp?id=2176http://burtleburtle.net/bob/hash/evahash.htmlhttp://en.wikipedia.org/wiki/Cryptographic_hash_functionhttp://www.cs.rit.edu/~ark/lectures/onewayhash/onewayhash.shtmlhttp://www.unixwiz.net/techtips/iguide-crypto-hashes.html

17