====HMAC==== **HMAC (Hash-based Message Authentication Code)** je posebni tip [[[mac|MAC-a]]. On dodaje još jedan korak prije slanja poruke s MAC-om, a to je da poruku i MAC zajedno ubaci u [[hash|funkciju sažetka]]. Također ne kriptira poruku, već se služi kao provjera da poruka nije mijenjana i da je pošiljatelj legitiman. Klijent i poslužitelj dobiju svoj jedinstveni tajni ključ za komunikaciju. Kad šalje zahtjev, klijent prvo izračuna MAC poruke s pomoću tajnog ključa i nakon toga svoju poruku i MAC zajedno ubacuje u funkciju sažetka. Taj rezultat šalje unutar zahtjeva. Poslužitelj primi njegov zahtjev te ubacuje podatke iz zahtjeva i tajni ključ u istu funkciju sažetka da bi generirao svoj HMAC. Zatim usporedi svoj HMAC i onaj iz zahtjeva te, ako su isti, nastavlja dalje s procesiranjem zahtjeva. Ako nisu isti, zna da je zahtjev neispravan i odbacuje ga. Prije ubacivanja u hash funkciju, treba izračunati MAC koji je uvijek fiksne veličine (//S// bitova). Veličinu bloka teksta poruke označavat ćemo s //b//. Također, postoje dva predefinirana niza bitova koji se koriste u daljnjem objašnjenju, //ipad// i //opad//, koji su definirani tajnim ključem. Poruku ćemo označavati s //P//, a //i//-ti blok poruke s //Pi//. - S //lijeve// strane tajnog ključa //K// dodajemo nule dok mu veličina ne naraste do //b//. Taj nadopunjeni ključ označavat ćemo s //K+//. - //K+// xor-amo s //ipad// i dobivamo blok //S1// koji je također veličine //b//. - Dodajemo //S1// s lijeve strane poruke //P//. - Nad rezultatom koraka **3** primijenimo funkciju sažetka; istovremeno primijenimo i inicijalizacijski vektor da bismo osigurali fiksnu veličinu sažetka //n//. - //K+// xor-amo s nizom bitova //opad// da bismo dobili blok //S2//. - //S2// dodajemo na kraj sažetka koraka **4**. - Sve to zajedno ubacimo još jednom u funkciju sažetka. Cijeli postupak prikazan je na sljedećoj slici: {{ :hmac-postupak.png?400 |}} HMAC danas koriste mnogi komunikacijski protokoli kao što su HTTPS, SFTP i FTPS. Koristi se i na poveznicama za resetiranje lozinke, verifikaciji email adresa pri stvaranju korisničkog računa i slično. Njegova je prednost što se koristi hash funkcijama koje se brzo računaju. Dakle, može se vrlo brzo s popriličnom sigurnošću provjeriti legitimitet korisničkog zahtjeva. Zato je idealan za internetsku komunikaciju jer ju ne usporava i time ne narušava korisničko iskustvo. Druga prednost je što, isto kao i MAC, funkcija vraća rezultat fiksne duljine. Korisnik može poslati iznimno dugačak zahtjev, ali HMAC ostaje iste veličine pa neće zauzimati puno resursa, što opet doprinosi brzini odgovora. Dodatna prednost HMAC-a je otpornost na [[length-extension-attack|length extension]] napade. Neki algoritam hashiranja ranjiv je na njih uglavnom zato što funkcija sažetka koristi Merkle-Damgård konstrukciju. Naime, pri korištenju te konstrukcije podatak se dijeli u blokove i tako hashira. Zato je moguće iz hasha rekonstruirati interno stanje hash funkcije. Ako se nakon toga doda neki novi sadržaj, on se interpretira kao sljedeći blok poruke i neće se primijetiti da je poruka kompromitirana. \\ Ipak, HMAC neće biti ranjiv čak ni ako njegova funkcija sažetka koristi Merkle-Damgård konstrukciju. Razlog tomu je što on pri generiranju MAC-a ubacuje poruku i tajni ključ u hash funkciju, za razliku od MAC-a koji ubacuje samo poruku. Napadač u ovom slučaju ne može izolirati tajni ključ od poruke, odnosno ne može odrediti gdje je poruka, a gdje ključ. Dakle, ne može generirati MAC koji će primatelj interpretirati kao ispravan. Ako pokuša dodati neki novi sadržaj i pošalje zahtjev, primatelj će izračunati drugačiji sažetak poruke od onog koji je primio i shvatiti da poruka nije valjana. ===Izvori=== [1] Christof Paar, Jan Pelzl, Understanding Cryptography, Springer-Verlag Berlin Heidelberg, 2009.\\ [2] Henk C. A. Tilborg, Encyclopedia of Cryptography and Security, Springer-Verlag US, 2005. \\ [3] https://www.geeksforgeeks.org/what-is-hmachash-based-message-authentication-code/\\ [4] https://book.hacktricks.xyz/crypto-and-stego/hash-length-extension-attack\\ [5] https://deeprnd.medium.com/length-extension-attack-bff5b1ad2f70\\