HMAC Generator

Vygenerujte HMAC podpisy s SHA-256, SHA-384 nebo SHA-512

Algoritmus

Zpráva

Běží lokálně · Bezpečné pro vkládání tajných údajů

Tajný klíč

Běží lokálně · Bezpečné pro vkládání tajných údajů

HMAC podpis

HMAC podpis se zobrazí zde…

Co je HMAC?

HMAC (Hash-based Message Authentication Code) je kryptografická konstrukce definovaná v RFC 2104, která kombinuje hašovací funkci s tajným klíčem a produkuje autentizační příznak pevné délky. Na rozdíl od prostého hashe, který může vypočítat kdokoli, lze HMAC generovat a ověřovat pouze stranami sdílejícími tajný klíč. HMAC je standardní mechanismus pro ověřování integrity i autenticity zprávy — potvrzuje, že data nebyla pozměněna a že je vytvořil důvěryhodný odesílatel.

Algoritmus HMAC pracuje s libovolnou iterativní hašovací funkcí: SHA-256, SHA-384, SHA-512 a dokonce i staršími funkcemi jako SHA-1 nebo MD5. Výsledná konstrukce se označuje podle základního hashe — HMAC-SHA256, HMAC-SHA384 nebo HMAC-SHA512. Protože bezpečnostní důkaz HMAC závisí na odolnosti hašovací funkce vůči kolizím a na určitých pseudonáhodných vlastnostech, jsou algoritmy rodiny SHA-2 doporučenou volbou pro nové systémy. HMAC-SHA256 je nejrozšířenější variantou — používá se v AWS Signature V4, Stripe webhooks, GitHub webhook secrets, Slack request signing a JSON Web Tokens (HS256).

Návrh HMAC poskytuje kritickou vlastnost, kterou prostému hašování chybí: odolnost vůči útokům prodloužením délky. Při použití samotného SHA-256 může útočník, který zná H(zpráva), vypočítat H(zpráva || útočník_data) bez znalosti původní zprávy. Struktura HMAC s dvojitým hašováním (vnitřní hash a vnější hash s různě doplněnými klíči) tomuto útoku zcela zabraňuje. Proto schémata podepisování API používají HMAC místo připojení tajného klíče ke zprávě a hašování výsledku.

Proč používat online generátor HMAC?

Výpočet HMAC podpisů obvykle vyžaduje psaní kódu nebo použití nástrojů příkazové řádky. Tento generátor HMAC běžící v prohlížeči umožňuje vytvářet podpisy HMAC-SHA256, HMAC-SHA384 a HMAC-SHA512 okamžitě bez instalace softwaru nebo přepínání do terminálu.

Okamžitý výpočet HMAC
Zadejte zprávu a tajný klíč, vyberte hašovací algoritmus a okamžitě získejte HMAC podpis. Web Crypto API zajišťuje výpočet nativně ve vašem prohlížeči.
🔒
Zpracování se soukromím na prvním místě
Vaše zpráva a tajný klíč nikdy neopustí vaše zařízení. Veškerý výpočet HMAC probíhá lokálně prostřednictvím Web Crypto API — žádné serverové požadavky, žádné protokolování, žádné uchovávání dat.
📋
Podpora více algoritmů
Přepínejte mezi HMAC-SHA256, HMAC-SHA384 a HMAC-SHA512 jedním kliknutím. Porovnejte výstupy napříč algoritmy a ověřte, zda vaše backendová implementace odpovídá.
🔍
Bez účtu nebo instalace
Funguje v libovolném moderním prohlížeči — Chrome, Firefox, Safari, Edge. Není třeba registrace, rozšíření ani nastavení příkazové řádky. Otevřete stránku a začněte generovat HMAC podpisy.

Případy použití generátoru HMAC

Frontend vývojář — ověřování podpisů webhooků
Stripe, GitHub a Shopify podepisují datové části webhooků pomocí HMAC-SHA256. Pomocí tohoto nástroje vypočítejte očekávaný podpis z datové části a tajného klíče a porovnejte ho s podpisem v HTTP hlavičce při vývoji.
Backend inženýr — podepisování API požadavků
AWS Signature V4 vyžaduje HMAC-SHA256 v několika fázích procesu podepisování. Generujte referenční hodnoty HMAC při vývoji, abyste ladili neshody v podepisování a ověřovali mezilehlé výpočetní kroky.
DevOps — validace rotace tajných klíčů
Při rotaci tajných klíčů webhooků nebo podepisovacích klíčů API vypočítejte HMAC podpisy starým i novým klíčem a potvrďte, že vaše aplikace zvládne přechod správně ještě před vypršením platnosti starého klíče.
QA inženýr — testovací vektory podpisů
Generujte HMAC testovací vektory se známými vstupy a klíči a sestavujte regresní testy pro svůj autentizační middleware. Ověřte, zda vaše implementace správně zpracovává prázdné zprávy, Unicode vstup a dlouhé klíče.
Datový inženýr — autentizace zpráv v pipeline
Připojujte HMAC podpisy ke zprávám v pipeline řízených událostmi (Kafka, SQS) a ověřujte, že zprávy nebyly při přenosu mezi službami pozměněny.
Student — kryptografické kurzy
Experimentujte s HMAC a sledujte, jak změna jediného znaku ve zprávě nebo klíči produkuje zcela odlišný podpis. Porovnejte výstup HMAC s prostým výstupem SHA-256 a pozorujte rozdíl, který přináší tajný klíč.

HMAC vs prostý hash vs šifrování

HMAC, prosté hašování a šifrování slouží různým účelům. HMAC poskytuje autentizaci zprávy — důkaz, že zprávu vytvořil někdo se znalostí tajného klíče a že nebyla pozměněna. Prostý hash poskytuje integritu, ale nikoli autentizaci. Šifrování zajišťuje důvěrnost. Níže uvedená tabulka objasňuje tyto rozdíly.

VlastnostHMACPlain HashEncryption
PurposeMessage authentication + integrityData integrity only (no key)Confidentiality + integrity
Requires secret keyYesNoYes
Verifiable byParties who share the secretAnyoneRecipient with key
ReversibleNo — digest onlyNo — digest onlyYes — decryption recovers data
Output sizeDepends on hash (e.g. 256 bits)Depends on hashVariable (ciphertext)
StandardRFC 2104FIPS 180-4NIST SP 800-38A (AES)
Use case exampleWebhook signature verificationFile checksum verificationEncrypting data at rest

Srovnání algoritmů HMAC

HMAC může používat libovolnou hašovací funkci, ale volba základního algoritmu určuje velikost výstupu, úroveň zabezpečení a kompatibilitu s prohlížečem. HMAC-SHA256 je nejběžnější volbou pro nové systémy. Níže uvedená tabulka porovnává varianty, se kterými se pravděpodobně setkáte.

AlgoritmusVelikost výtahuDélka hexadecimálního řetězceWeb Crypto APINejlepší pro
HMAC-SHA256256 bits64 hex charsYesAPI signing, webhooks, JWT (HS256)
HMAC-SHA384384 bits96 hex charsYesTLS 1.3 PRF, CNSA compliance
HMAC-SHA512512 bits128 hex charsYesHigh-security signatures, HKDF
HMAC-SHA1160 bits40 hex charsYesLegacy OAuth 1.0, TOTP (RFC 6238)
HMAC-MD5128 bits32 hex charsNoLegacy only — not recommended

Jak HMAC funguje interně

HMAC aplikuje základní hašovací funkci dvakrát se dvěma různými doplněními odvozenými z klíče. Tato konstrukce je definována v RFC 2104 a je dokázáno, že jde o PRF (pseudonáhodnou funkci) za standardních kryptografických předpokladů. Klíč je nejprve doplněn nebo hašován na velikost bloku hašovací funkce (64 bajtů pro SHA-256, 128 bajtů pro SHA-512).

HMAC(K, m) = H((K' ⊕ opad) || H((K' ⊕ ipad) || m))
where K' = key padded to block size, ipad = 0x36, opad = 0x5C

Algoritmus provede XOR doplněného klíče s konstantou vnitřního doplnění (ipad, 0x36 opakovaně), spojí ho se zprávou a hašuje výsledek. Poté provede XOR doplněného klíče s konstantou vnějšího doplnění (opad, 0x5C opakovaně), spojí ho s výstupem vnitřního hashe a znovu hašuje. Tato struktura s dvojitým hašováním zabraňuje útokům prodloužením délky a zajišťuje, že výstup HMAC nelze vypočítat bez znalosti tajného klíče.

Ukázky kódu HMAC

HMAC je nativně podporována ve všech hlavních jazycích a prostředích. Web Crypto API poskytuje HMAC-SHA256, HMAC-SHA384 a HMAC-SHA512 v prohlížečích bez jakékoli knihovny. Níže uvedené příklady ukazují vzory reálného použití včetně ověřování webhooků a porovnávání v konstantním čase.

JavaScript (Web Crypto API)
async function hmacSHA256(message, secret) {
  const enc = new TextEncoder()
  const key = await crypto.subtle.importKey(
    'raw', enc.encode(secret),
    { name: 'HMAC', hash: 'SHA-256' },
    false, ['sign']
  )
  const sig = await crypto.subtle.sign('HMAC', key, enc.encode(message))
  return Array.from(new Uint8Array(sig))
    .map(b => b.toString(16).padStart(2, '0')).join('')
}

await hmacSHA256('hello world', 'my-secret-key')
// → "90eb182d8396f16d4341d582047f45c0a97d73388c5377d9ced478a2212295ad"

// Node.js (built-in crypto module)
const crypto = require('crypto')
crypto.createHmac('sha256', 'my-secret-key')
  .update('hello world').digest('hex')
// → "90eb182d8396f16d4341d582047f45c0a97d73388c5377d9ced478a2212295ad"
Python
import hmac
import hashlib

# HMAC-SHA256
sig = hmac.new(
    b'my-secret-key',
    b'hello world',
    hashlib.sha256
).hexdigest()
print(sig)
# → "90eb182d8396f16d4341d582047f45c0a97d73388c5377d9ced478a2212295ad"

# Verify a webhook signature (constant-time comparison)
expected = "90eb182d8396f16d4341d582047f45c0a97d73388c5377d9ced478a2212295ad"
received = hmac.new(b'my-secret-key', b'hello world', hashlib.sha256).hexdigest()
if hmac.compare_digest(expected, received):
    print("Signature valid")

# HMAC-SHA512
hmac.new(b'key', b'data', hashlib.sha512).hexdigest()
Go
package main

import (
    "crypto/hmac"
    "crypto/sha256"
    "fmt"
)

func main() {
    mac := hmac.New(sha256.New, []byte("my-secret-key"))
    mac.Write([]byte("hello world"))
    sig := mac.Sum(nil)
    fmt.Printf("%x\n", sig)
    // → 90eb182d8396f16d4341d582047f45c0a97d73388c5377d9ced478a2212295ad

    // Verify: use hmac.Equal for constant-time comparison
    expected := mac.Sum(nil)
    fmt.Println(hmac.Equal(sig, expected)) // true
}
CLI (OpenSSL)
# HMAC-SHA256
echo -n "hello world" | openssl dgst -sha256 -hmac "my-secret-key"
# → SHA2-256(stdin)= 90eb182d8396f16d4341d582047f45c0a97d73388c5377d9ced478a2212295ad

# HMAC-SHA512
echo -n "hello world" | openssl dgst -sha512 -hmac "my-secret-key"

# Verify a file signature
openssl dgst -sha256 -hmac "my-secret-key" release.tar.gz

# HMAC with hex key (e.g. from a webhook secret)
echo -n "payload" | openssl dgst -sha256 -hmac "$(echo -n '736563726574' | xxd -r -p)"

Často kladené otázky

Jaký je rozdíl mezi HMAC a prostým hashem?
Prostý hash (SHA-256, MD5) přijímá jako vstup pouze zprávu a produkuje výtah, který může vypočítat kdokoli. HMAC přijímá zprávu i tajný klíč a produkuje podpis, který může generovat nebo ověřovat pouze někdo se znalostí klíče. To znamená, že HMAC poskytuje autentizaci (důkaz identity odesílatele) navíc k ověřování integrity. Prostý hash pouze dokazuje, že data nebyla změněna, nikoli kdo je vytvořil.
Je HMAC-SHA256 bezpečný?
Ano. HMAC-SHA256 je k roku 2026 považován za bezpečný. Jeho bezpečnost závisí na pseudonáhodných vlastnostech SHA-256 a samotné konstrukci HMAC (RFC 2104). Nebyl demonstrován žádný praktický útok proti HMAC-SHA256. Dokonce i HMAC-MD5 a HMAC-SHA1 zůstávají v praxi bezpečné, protože bezpečnost HMAC nevyžaduje plnou odolnost vůči kolizím základního hashe — přesto jsou pro nové systémy doporučeny varianty SHA-2.
Proč webhooky používají HMAC místo šifrování datové části?
Datové části webhooků obvykle obsahují data, která příjemce již očekává — podrobnosti objednávky, upozornění na události, aktualizace stavu. Cílem není skrýt data (důvěrnost), ale prokázat, že pocházejí od legitimního odesílatele a nebyla pozměněna při přenosu (autentizace a integrita). HMAC toho dosahuje s minimální režií: odesílatel vypočítá HMAC datové části s sdíleným tajným klíčem a zahrne ho do HTTP hlavičky. Příjemce HMAC přepočítá a porovná. Šifrování by přidalo zbytečnou složitost a zátěž správy klíčů.
Jak mám bezpečně porovnávat HMAC podpisy?
Vždy používejte funkci porovnávání v konstantním čase. V Pythonu použijte hmac.compare_digest(). V Node.js použijte crypto.timingSafeEqual(). V Go použijte hmac.Equal(). Standardní operátory porovnávání řetězců (== nebo ===) mohou prozrazovat informace o časování: útočník může měřit, jak dlouho porovnávání trvá, a zjistit, kolik bajtů jeho podvrženého podpisu odpovídá správnému, a poté postupně uhadovat zbývající bajty.
Lze HMAC obrátit a obnovit tajný klíč?
Ne. HMAC je založen na jednosměrné hašovací funkci, takže neexistuje žádná matematická zkratka pro extrakci klíče z výstupu HMAC. Útočník by musel procházet hrubou silou prostor klíčů, což je pro klíče délky 128 bitů nebo více neproveditelné. Slabé nebo krátké klíče (jako jednoduchá hesla) však mohou být zranitelné vůči slovníkovým útokům — proto vždy používejte kryptograficky náhodné klíče délky alespoň 256 bitů pro HMAC-SHA256.
Co se stane, pokud je klíč HMAC delší než velikost bloku hashe?
Pokud je tajný klíč delší než velikost bloku hašovací funkce (64 bajtů pro SHA-256, 128 bajtů pro SHA-512), algoritmus HMAC nejprve klíč hašuje základní hašovací funkcí a zkrátí ho na délku výstupu hashe, který pak použije jako efektivní klíč. To znamená, že velmi dlouhé klíče neposkytují dodatečné zabezpečení nad rámec velikosti výstupu hashe. Pro HMAC-SHA256 jsou klíče delší než 64 bajtů hašovány na 32 bajtů a nenabízejí žádné bezpečnostní zlepšení oproti klíči délky 64 bajtů; klíče do 64 bajtů jsou použity v plné délce.
Kdy mám použít HMAC-SHA512 místo HMAC-SHA256?
Použijte HMAC-SHA512, když to protokol vyžaduje (některé funkce odvozování klíčů jako HKDF-SHA512, generování klíčů Ed25519), když potřebujete širší podpis pro obranu do hloubky, nebo když běžíte na 64bitovém hardwaru, kde je SHA-512 ve skutečnosti rychlejší než SHA-256. Pro většinu webových aplikací, podepisování API a ověřování webhooků poskytuje HMAC-SHA256 dostatečné zabezpečení a je běžnější volbou v ekosystémech.