User Tools

Site Tools


hmac

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.

  1. 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+.
  2. K+ xor-amo s ipad i dobivamo blok S1 koji je također veličine b.
  3. Dodajemo S1 s lijeve strane poruke P.
  4. Nad rezultatom koraka 3 primijenimo funkciju sažetka; istovremeno primijenimo i inicijalizacijski vektor da bismo osigurali fiksnu veličinu sažetka n.
  5. K+ xor-amo s nizom bitova opad da bismo dobili blok S2.
  6. S2 dodajemo na kraj sažetka koraka 4.
  7. 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). Mora i znati koji se padding koristi, iako nekad može pretpostaviti da se korisiti zadani (3). U tom slučaju može dodati nove podatke i generirati novi sažetak za njih pa će poruka djelovati legitimno.
Ranjivi algoritmi rade sažetak tako što prvi sažmu jedan blok podataka, zatim na taj sažetak dodaju novi blok podataka pa opet sve skupa sažmu i tako dok se ne dođe do kraja poruke. Dakle, to što napadač dodaje još neke informacije u poruku može djelovati samo kao još jedan korak u legitimnoj poruci.

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

hmac.1701686389.txt.gz · Last modified: 2025/12/01 11:40 (external edit)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki