MD5
<s></s>

<s>MD5 () je kriptografski algoritam koji spada u grupu haš algoritama ili algoritama za sažimanje (ovi algoritmi se još nazivaju i digest, ireverizibilni ili algoritmi bez ključa ) i bio je veoma je primenjen u mnogim oblastima zaštite podataka, mada se danas smatra podložnim kriptografskim napadima tako da se ređe primenjuje u kriptografiji, ali je našao veoma čestu primenu u proveri integriteta većih fajlova zbog svoje brzine.</s><s>Dužina digesta (digest se može prevesti kao sažetak) je 128 bita.</s>

<s>Nastanak algoritma 
MD5 algoritam je razvio 1991. godine Ronald Rivest.</s><s>Baziran je na MD4 algoritmu, i iako je nešto sporiji od MD4 algoritma, MD5 je mnogo sigurniji.</s><s>Veličina digesta, kao i broj dodatnih bitova dodatih izvornoj poruci su ostali isti.</s><s>Zbog razloga što je MD4 algoritam razvijen s namerom da bude najbrži algoritam, algoritam se nalazio „na samom rubu“ u pogledu rizika uspešnih kriptoanalitičkih napada.</s><s>Pri razvoju MD5 algoritma, programeri su se odrekli određenog koeficijenta brzine izvođenja kako bi ostvarili veću sigurnost.</s>

<s>Razbijanje MD5 algoritma 
Dužina digesta ovog algoritma je 128 bita, čemu mnogi kriptoanalitičari zameraju ovom algoritmu tako da se smatra da je podložan brute force birthday attack.</s><s>Jedan takav projekat pod imenom MD5CRK je pokrenut 1. marta 2004. godine sa namerom da dokažu da ovaj algoritam nije siguran.</s><s>Ne dugo zatim 17. avgusta 2004. objavljeno je da su Ksiaoun Vang, Denguo Feng, Ksuejia Lai i Ksongbo Ju (Xiaoyun Wang, Dengguo Feng, Xuejia Lai, Hongbo Yu) uspešno razbili algoritam odnosno da su pronašli koliziju na algoritmu.</s><s>Za razbijanje ovog algoritma bilo im je potreban samo jedan sat na IBM p690 klasteru.</s>

<s>1. marta 2005.</s><s>Arjen Lenstra, Ksiaoun Vang, i Bene de Veger demonstrirali su kreiranje dva X.509 sertifikata sa različitim javnim ključevima ali istim MD5 digestom.</s><s>Nekoliko dana potom Vlastimil Klima je kreirao unapređeni algoritam koji je u stanju da na običnom lap topu za nekoliko sati kreira koliziju MD5 algoritma.</s>

<s>Primena 
Zbog pronađenih nedostataka ovog algoritma, danas se sve ređe koristi u kriptografiji za potpisivanje digitalnih sertifikata i skladištenje šifri i umesto njega se najčešće koriste neki drugi algoritmi, kao na primer SHA-1, WHIRLPOOL, RIPEMD-160.</s><s>Danas se ovaj algoritam najčešće primenjuje za proveru integriteta fajlova (, kontrolni zbir).</s>

<s>Opis algoritma</s>

<s>MD5 algoritam kao ulaz koristi b-bitnu poruku gde je b proizvoljni nenegativni celi broj.</s><s>Poruku možemo zamisliti kao niz bitova:</s>

<s></s>

<s>Poruka se mora nadopuniti bitovima kako bi njena dužina (u bitovima) odgovarala broju 448 moduo 512.</s><s>Drugim rečima, poruka se mora proširiti tako da joj nedostaju 64 bita da njena ukupna dužina u bitovima bude deljiva sa 512.</s>

<s>Najčešći način proširivanja poruke je da se prvo poruci doda jedan „1“ bit, a zatim slijede bitovi „0“.</s><s>Tako će se poruci u najmanju ruku dodati samo jedan bit, a u najgorem slučaju 512 bita.</s>

<s>Nakon proširenja poruke, poruci je potrebno dodati 64-bitnu reprezentaciju broja b (b je dužina izvorne poruke pre njenog proširenja).</s><s>U slučaju da se dužina poruke ne može prikazati pomoću 64 bita, poruci se dodaju samo nižih 64 bita.</s><s>Bitovi reprezentacije broja b se dodaju poruci kao dve 32-bitne reči, pri čemu je reč manje težine prva pridodata.</s>

<s>Nakon proširenja poruke i dodavanja bitova reprezentacije dužina poruke mora biti deljiva sa 512.</s><s>Odnosno, poruka mora imati dužinu deljivu sa 16 (32-bitnih) reči.</s><s>Sada poruku možemo prikazati kao:</s>

<s>gde je N deljivo sa 16.</s>

<s>Nakon što je poruka pripremljena za MD5 algoritam, potrebno je inicijalizirati 128-bitni MD bafer.</s><s>MD bafer se sastoji od četiri 32-bitnih reči A, B, C i D. Kao inicijalne vrednosti reči u heksadecimalnom sistemu se koriste: A=67452301, B=EFCDAB89, C=98BADCFE i D=10325467.</s>

<s>Posle inicijalizacije pokreće se MD5 algoritam koji se ponovo izvodi za svakih sledećih 512 bita poruke.</s><s>Samo jezgro algoritma predstavlja kompresijska funkcija koja se sastoji od četiri ciklusa.</s><s>Svaki od četiri ciklusa ima sličnu strukturu, ali svaki koristi drugačiju primitivnu logičku funkciju F, G, H ili I. Konačan rezultat predstavljaju vrednosti u registrima A, B, C i D koje se zbrajaju sa njihovim inicijalnim vrednostima.</s><s>Svaki od tih četiri registara predstavlja jednu četvrtinu digesta ulazne poruke.</s>

<s>Primer 
Primer primene MD5 algoritma.</s><s>Rečenicu u ASCII formatu „The quick brown fox jumps over the lazy dog“ pustićemo kroz MD5 algoritam i dobićemo 128-bitni izlaz u heksadecimalnom obliku</s>

<s>MD5("The quick brown fox jumps over the lazy dog") = 9e107d9d372bb6826bd81d3542a419d6</s>

<s>Čak i najmanja promena tip jednog slova u rečenici imaće kao rezultat promenu heksadecimalnog izlaza.</s><s>Na primer promenićemo d u c:</s>

<s>MD5("The quick brown fox jumps over the lazy cog") = 1055d3e698d289f2af8663725127bd4b</s>

<s>Izlaz MD5 funkcije u slučaju praznog stringa biće:</s>

<s>MD5("") = d41d8cd98f00b204e9800998ecf8427e</s>

<s>Upoređenje MD5, SHA-1 i RIPEMD-160 algoritma 
32 bita duži digest SHA-1 i RIPEMD-160 algoritama su glavne prednosti tih algoritama u odnosu na MD5.</s><s>Težina dobijanja identičnog digesta za dve različite poruke tim algoritmima sa 280 kombinacija što izgleda superiorno prema težini MD5 algoritma koja iznosi 264.</s>

<s>Upoređenja SHA-1 algoritma sa MD5 algoritmom pokazuju da je SHA-1 algoritam sigurniji od MD5 algoritma.</s>

<s>3</s>

<s>Izvori</s>

<s>Kriptografija
Kontrolni algoritmi</s>

