Co je tento nástroj?
HMAC znamená Hash-based Message Authentication Code. Kombinuje tajný klíč se zprávou a standardní hašovací funkcí (jako SHA-256) a vytváří digest s pevnou délkou. Kdokoli se stejným klíčem a zprávou spočítá naprosto stejný HMAC — bez klíče je však výpočetně nemožné vytvořit platný HMAC pro danou zprávu, i když znáte použitý hašovací algoritmus.
To je klíčový rozdíl oproti obyčejnému hashi: obyčejný hash (MD5, SHA-256 atd.) přijímá jako vstup pouze zprávu, takže ho může spočítat kdokoli a nedokazuje nic o tom, kdo ho vytvořil. HMAC přijímá zprávu *a* tajný klíč, takže platný HMAC dokazuje, že odesílatel vlastnil tajemství — jde o autentizační mechanismus, nikoli jen kontrolu integrity.
HMAC je formálně standardizován NIST v FIPS 198-1 a definován pro internetové protokoly v IETF RFC 2104. Tento nástroj počítá HMAC pomocí nativního Web Crypto API vašeho prohlížeče (`crypto.subtle.sign` s algoritmem HMAC), které správně implementuje RFC 2104 namísto ručně psané JavaScriptové verze.
Proč ho používat?
- Podepisování API požadavků, aby přijímající server mohl ověřit, že požadavek pochází od držitele sdíleného tajemství a nebyl pozměněn.
- Ověřování webhook payloadů (Stripe, GitHub, Shopify a podobné služby podepisují těla webhooků pomocí HMAC-SHA256).
- Generování autentizačních tokenů nebo jednorázových kódů závislých na sdíleném tajemství.
- Porovnání výstupu vlastní implementace HMAC se známou správnou referenční hodnotou.
- 100% lokální: váš tajný klíč a zpráva nikdy neopustí prohlížeč, takže je bezpečné testovat skutečná tajemství.
Jak se používá
- Zadejte svůj tajný klíč do pole „Tajný klíč“.
- Zadejte zprávu, kterou chcete autentizovat, do pole „Zpráva“.
- Výsledky HMAC-SHA1, HMAC-SHA256, HMAC-SHA384 a HMAC-SHA512 se vygenerují okamžitě (zaškrtněte „Výstup velkými písmeny“, pokud cílový systém očekává velká písmena).
- Klikněte na „Kopírovat“ vedle požadovaného HMAC.
Příklad
Vstup
Tajný klíč: key
Zpráva: The quick brown fox jumps over the lazy dogVýstup
HMAC-SHA256: f7bc83f430538424b13298e6aa6fb143ef4d59a14946175997479dbc2d1a3cd8
HMAC-SHA1: de7c9b85b8b78aa6bc8a7a36f70a90701c9db4d9Toto je standardní publikovaný testovací vektor: s klíčem „key“ a přesně touto zprávou vytvoří HMAC-SHA256 a HMAC-SHA1 vždy tyto hodnoty v jakékoli správné implementaci, takže výstup tohoto nástroje můžete nezávisle ověřit.
HMAC vs. obyčejný hash: kdy potřebujete klíč
Rozhodující otázka zní: potřebujete dokázat, kdo tento digest vytvořil, nebo jen že se obsah nezměnil? Pokud stačí veřejný kontrolní součet — ověření, že stažený soubor odpovídá tomu, co uvedl vydavatel, deduplikace záznamů — funguje obyčejný hash a kdokoli si ho může zkontrolovat bez klíče. Pokud potřebujete dokázat, že digest mohl vytvořit pouze někdo vlastnící konkrétní tajemství — autentizace volajícího API, důvěra v odesílatele webhooku — potřebujete HMAC, protože obyčejný hash dává útočníkovi bez tajemství stejnou schopnost padělat platný digest jako skutečnému odesílateli.
→ Multi-algoritmický generátor hashů · Dekodér JWT · Generátor MD5
Srovnání čtyř algoritmů HMAC
Všechny čtyři používají stejnou konstrukci HMAC z RFC 2104, liší se pouze podkladovou hašovací funkcí a tedy délkou výstupu.
| Algoritmus | Velikost výstupu | Typické použití |
|---|---|---|
| HMAC-SHA1 | 160 bitů (40 hex znaků) | Starší API, starší podpisy OAuth 1.0a |
| HMAC-SHA256 | 256 bitů (64 hex znaků) | Podepisování API požadavků, JWT HS256, ověřování webhooků |
| HMAC-SHA384 | 384 bitů (96 hex znaků) | Vysoce spolehlivé podpisy vyžadující delší výstup |
| HMAC-SHA512 | 512 bitů (128 hex znaků) | Digesty maximální délky pro vysoce bezpečné aplikace |
Běžné případy použití
- Podepisování odchozích API požadavků sdíleným tajemstvím, aby server mohl ověřit identitu volajícího.
- Ověřování příchozích webhook payloadů (hlavičky Stripe-Signature, GitHub X-Hub-Signature-256 a podobné všechny používají HMAC-SHA256).
- Generování a ověřování podpisové části JWT podepsaného pomocí HS256/HS384/HS512.
- Testování, že vaše implementace HMAC na serveru nebo klientovi odpovídá očekávanému výstupu před nasazením.
Časté dotazy
Co je HMAC?
HMAC (Hash-based Message Authentication Code) kombinuje tajný klíč se zprávou pomocí hašovací funkce a vytváří digest, který dokazuje jak integritu zprávy, tak vlastnictví klíče odesílatelem. Je definován v NIST FIPS 198-1 a IETF RFC 2104.
Jaký je rozdíl mezi HMAC a obyčejným hashem?
Obyčejný hash (SHA-256, MD5 atd.) přijímá jako vstup pouze zprávu — může ho spočítat kdokoli, takže dokazuje jen to, že zpráva nebyla poškozena, nikoli kdo ji poslal. HMAC přijímá zprávu plus tajný klíč: pokud potřebujete dokázat, že zpráva pochází od někoho, kdo vlastní konkrétní tajemství (API podpis, odesílatel webhooku), potřebujete HMAC. Pokud jen potřebujete zkontrolovat, že se soubor nebo zpráva nezměnily, a autorství vás nezajímá, obyčejný hash stačí.
Je můj tajný klíč odesílán na server?
Ne. Tento nástroj počítá HMAC zcela ve vašem prohlížeči pomocí Web Crypto API. Váš klíč a zpráva se nikam nepřenášejí — můžete bezpečně testovat skutečná produkční tajemství.
Který algoritmus mám použít — SHA-1, SHA-256, SHA-384 nebo SHA-512?
Používejte HMAC-SHA256, pokud konkrétní systém nevyžaduje jinak — je to de facto standard pro podepisování API (používaný AWS, Stripe, GitHub webhooky a většinou moderních API) a nabízí silnou bezpečnostní rezervu. HMAC-SHA1 je stále běžný ve starších systémech (jako starší implementace OAuth 1.0a), ale podkladový hash SHA-1 je považován za slabší; HMAC-SHA384/512 se používají tam, kde je konkrétně vyžadován delší výstup nebo extra bezpečnostní rezerva.
Je HMAC-SHA1 nebezpečný, když je obyčejný SHA-1 prolomen?
Kolizní útoky z roku 2017 prolomily SHA-1 jako obyčejnou hašovací funkci, ale HMAC-SHA1 je stále považován za kryptograficky bezpečný, protože bezpečnost HMAC nezávisí na odolnosti proti kolizím stejným způsobem. Přesto pro nové systémy upřednostněte HMAC-SHA256 nebo vyšší — nemá to žádnou praktickou nevýhodu a zcela se tím vyhnete otázce.
Jaká jsou běžná reálná použití HMAC?
Podepisování REST API požadavků, aby server mohl ověřit, že volající vlastní sdílené API tajemství; ověřování webhook payloadů od služeb jako Stripe, GitHub a Shopify, abyste věděli, že požadavek skutečně pochází od nich a nebyl padělán; generování časově založených jednorázových hesel (TOTP/HOTP) pro dvoufaktorovou autentizaci; a podepisování JWT tokenů algoritmy HS256/HS384/HS512.