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:

kde:
je iterativní hašovací funkce,
je tajný klíč zarovnaný nulami na velikost základního bloku hašovací funkce,
je zpráva, nad kterou se kód počítá,
označuje zřetězení,
označuje exkluzivní součet
vnější zarovnání (outer padding)
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.
Související články[editovat]
Reference[editovat]
V tomto článku byl použit překlad textu z článku HMAC na slovenské Wikipedii.
Externí odkazy[editovat]
- (anglicky) Znění RFC 2104
- (česky) Bezpečné přihlašování uživatelů (pro PHP), Jakub Vrána
je iterativní hašovací funkce,
je tajný klíč zarovnaný nulami na velikost základního bloku hašovací funkce,
je zpráva, nad kterou se kód počítá,
označuje
označuje
vnější zarovnání (outer padding)
vnitřní zarovnání (inner padding)