HMAC

HMAC (z angl. Keyed-hash Message Authentication Code) je typ autentizačního kódu zprávy (Message Authentication Code, MAC) počítané s použitím kryptografické hašovací funkce v kombinaci s tajným šifrovacím klíčem. Tak jako každý MAC, může být i HMAC použit jednak na oveření datové integrity a jednak na autentizaci zprávy. Na výpočet je možné použít libovolnou iterativní kryptografickou hašovací funkci jako např. MD5 či SHA-1 (v takových případech hovoříme o HMAC-MD5, resp. HMAC-SHA-1 kódu). Kryptografická síla kódu HMAC přímo závisí na síle hašovací funkce, velikosti a kvalitě klíče a velikosti výstupu hašovací funkce v bitech.

Iterativní hašovací funkce rozdělí zprávu do bloků pevné délky, na kterých postupně počítá výstup (MD5 i SHA-1 pracují nad 512 bitovými bloky). Velikost výstupu HMAC kódu je stejná jako velikost výstupu hašovací funkce (tedy 128 nebo 160 bitů v případě MD5 nebo SHA-1), i když je možné ho ořezat, pokud je třeba. Takovéto zkrácení však snižuje bezpečnost kódu, která je shora ohraničena tzv. narozeninovým útokem.

HMAC je definovaný jako:

\mathrm{HMAC}_K(m) = h\Bigg((K \oplus \mathrm{opad}) \| h\Big((K \oplus \mathrm{ipad}) \| m\Big)\Bigg),

kde:

h je iterativní hašovací funkce,
K je tajný klíč zarovnaný nulami na velikost základního bloku hašovací funkce,
m je zpráva, nad kterou se kód počítá,
\| označuje zřetězení,
\oplus označuje exkluzivní součet
\mathrm{opad} = \texttt{0x5c5c5c\ldots5c5c} vnější zarovnání (outer padding)
\mathrm{ipad} = \texttt{0x363636\ldots3636} vnitřní zarovnání (inner padding)
opad a ipad jsou dvě dlouhé konstanty o velikosti základního bloku.

Konstrukce a analýza kódů HMAC byla po poprvé publikována v roce 1996 Mihirem Bellarem, Ranem Canettim a Hugem Krawczykem, kteří též napsali příslušné RFC 2104. Varianty HMAC-SHA-1 a HMAC-MD5 se používají v protokolech IPsec a SSL/TLS.