Inne nazwy: Keyed-Hash Message Authentication Code.
HMAC jest nowoczesną wersją MAC (Message Authentication Code. Jego zadaniem jest weryfikacja integralności oraz autentyczności wiadomości.
HMAC wykorzystuje klucz tajny znajdujący się w rękach nadawcy i odbiorcy, przy czym ten drugi zakłada że wiadomość jest autentyczna, to jest pochodzi od nadawcy, bo tylko oni dwaj znają klucz użyty do wygenerowania HMAC.
Istotną różnicą w stosunku do oryginalnej funkcji MAC (która wykorzystywała DES), jest wykorzystanie jednokierunkowych funkcji skrótu przez HMAC. Podstawą HMAC może być dowolna funkcja skrótu, na przykład MD5 lub SHA1, do której w odpowiedni sposób “domieszany” zostaje tajny klucz. Standardowo odbywa się to w następujący sposób:</p>
- na końcu bloku jawnego dołączamy tajny klucz i obliczamy skrót z całości
- do wynikowego skrótu znów dołączamy klucz i obliczamy skrót z całości
- wynik jest kodem HMAC dla danego bloku
W powyższym opisie dla uproszczenia zostały pominięte dodatkowe dwie operacje - w pierwszym kroku każdy bajt klucza jest xorowany z bajtem 0x36 (tzw. inner pad), w drugim kroku klucz jest xorowany z bajtem 0x5c (tzw. outer pad).
Jedną z zalet HMAC w stosunku do MAC jest brak ograniczenia długości bloku tekstu poddawanego ochronie - większość stosowanych obecnie funkcji skrótu może w praktycznych implementacjach sumować tekst jawny o dowolnej długości.
Bibliografia
- NIST FIPS 198, ,,HMAC - Keyed-Hash Message Authentication Code'', http://csrc.nist.gov/publications/fips/fips198/fips-198a.pdf
- RFC 2104, ,,HMAC: Keyed-Hashing for Message Authentication'', rfc2104.txt