This is an old revision of the document!
HMAC
HMAC (Hash-based Message Authentication Code) je posebni tip MAC-a. On dodaje još jedan korak prije slanja poruke s MAC-om, a to je da poruku i MAC zajedno ubaci u funkciju sažetka. Također ne kriptira poruku, već se služi kao provjera da poruka nije mijenjana i da je pošiljatelj legitiman.
TODO: dodati opis kako se to izračunava HMAC malo detaljnije
Klijent i poslužitelj dobiju svoj jedinstveni tajni ključ za komunikaciju. Kad šalje zahtjev, klijent prvo izračuna MAC poruke 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 procesiranje, 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 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.
TODO: dodati kako je za razliku od MAC-a otporan na length-extension napade, čak ako se koriste hash funkcije koje koriste Merkel-Damgard konstrukciju
Length extension napad … Ako napadač zna duljinu tajnog ključa, poruku koja se prenosi i algoritam za sažimanje poruke, može provesti napad. Algoritam mora ujedno i biti ranjiv na ovu vrstu napada. Također, nije nužno da zna unaprijed duljinu tajnog ključa jer ju potencijalno može pogoditi grubom silom (brute force).
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
