Mi ez az eszköz?
A HMAC a Hash-based Message Authentication Code rövidítése. Egy titkos kulcsot kombinál egy üzenettel és egy szabványos hash-függvénnyel (mint például a SHA-256), hogy fix hosszúságú lenyomatot állítson elő. Bárki, akinek ugyanaz a kulcsa és üzenete van, pontosan ugyanazt a HMAC-ot fogja kiszámítani — de a kulcs nélkül számításilag megvalósíthatatlan érvényes HMAC-ot előállítani egy üzenethez, még akkor is, ha ismert a használt hash-algoritmus.
Ez a legfőbb különbség egy egyszerű hash-hez képest: egy egyszerű hash (MD5, SHA-256 stb.) csak az üzenetet veszi bemenetként, így bárki kiszámíthatja, és semmit nem bizonyít arról, hogy ki hozta létre. A HMAC az üzenetet *és* egy titkos kulcsot vesz bemenetként, így egy érvényes HMAC bizonyítja, hogy a küldő birtokolta a titkot — ez egy hitelesítési mechanizmus, nem csupán integritásellenőrzés.
A HMAC-ot a NIST hivatalosan szabványosította a FIPS 198-1 dokumentumban, és internetes protokollokhoz az IETF RFC 2104 szabványban definiálták. Ez az eszköz a böngésző natív Web Crypto API-ját használja a HMAC-ok kiszámításához (`crypto.subtle.sign` a HMAC algoritmussal), amely helyesen valósítja meg az RFC 2104-et egy kézzel írt JavaScript-verzió helyett.
Miért érdemes használni?
- Írjon alá API-kéréseket, hogy a fogadó szerver ellenőrizhesse, a kérés a megosztott titok birtokosától érkezett, és nem manipulálták.
- Ellenőrizze a webhook-hasznos terheléseket (a Stripe, GitHub, Shopify és hasonló szolgáltatások mind HMAC-SHA256-tal írják alá a webhook-törzseket).
- Hozzon létre hitelesítési tokeneket vagy egyszeri kódokat, amelyek egy megosztott titoktól függenek.
- Hasonlítsa össze saját HMAC-implementációjának kimenetét egy ismerten helyes referenciaértékkel.
- 100%-ban helyi: a titkos kulcsa és üzenete soha nem hagyja el a böngészőt, így biztonságos valódi titkokat tesztelni.
Használati útmutató
- Adja meg titkos kulcsát a "Secret Key" mezőben.
- Adja meg a hitelesíteni kívánt üzenetet a "Message" mezőben.
- A HMAC-SHA1, HMAC-SHA256, HMAC-SHA384 és HMAC-SHA512 eredmények azonnal generálódnak (jelölje be az "Uppercase output" opciót, ha a célrendszer nagybetűket vár).
- Kattintson a "Copy" gombra a szükséges HMAC mellett.
Példa
Bemenet
Secret Key: key
Message: The quick brown fox jumps over the lazy dogKimenet
HMAC-SHA256: f7bc83f430538424b13298e6aa6fb143ef4d59a14946175997479dbc2d1a3cd8
HMAC-SHA1: de7c9b85b8b78aa6bc8a7a36f70a90701c9db4d9Ez egy szabványos, publikált tesztvektor: a "key" kulccsal és ezzel a pontos üzenettel a HMAC-SHA256 és a HMAC-SHA1 minden helyes implementációban mindig ezeket az értékeket adja, így önállóan ellenőrizheti ennek az eszköznek a kimenetét.
HMAC vs. egyszerű hash: mikor van szükség kulcsra
A döntő kérdés: bizonyítania kell-e, ki hozta létre ezt a lenyomatot, vagy csak azt, hogy a tartalom nem változott? Ha egy nyilvános ellenőrző összeg elegendő — annak ellenőrzésére, hogy egy letöltött fájl megegyezik-e a kiadó által megadottal, rekordok deduplikálására —, akkor egy egyszerű hash működik, és bárki ellenőrizheti kulcs nélkül. Ha bizonyítania kell, hogy a lenyomatot csak egy bizonyos titok birtokosa hozhatta létre — egy API-hívó hitelesítéséhez, egy webhook küldőjének megbízhatóságához —, akkor HMAC-ra van szüksége, mert egy egyszerű hash ugyanazt a lehetőséget adja egy titok nélküli támadónak érvényes lenyomat hamisítására, mint a valódi küldőnek.
→ Több algoritmusos hash generátor · JWT dekóder · MD5 generátor
A négy HMAC algoritmus összehasonlítása
Mind a négy ugyanazt az RFC 2104 szerinti HMAC-konstrukciót használja, csak az alapul szolgáló hash-függvényben és ezáltal a kimenet hosszában térnek el egymástól.
| Algoritmus | Kimenet mérete | Tipikus felhasználás |
|---|---|---|
| HMAC-SHA1 | 160 bites (40 hex karakter) | Örökölt API-k, régebbi OAuth 1.0a aláírások |
| HMAC-SHA256 | 256 bites (64 hex karakter) | API-kérések aláírása, JWT HS256, webhook-ellenőrzés |
| HMAC-SHA384 | 384 bites (96 hex karakter) | Magasabb biztonságú aláírások, ahol hosszabb kimenet szükséges |
| HMAC-SHA512 | 512 bites (128 hex karakter) | Maximális hosszúságú lenyomatok magas biztonsági igényű alkalmazásokhoz |
Gyakori felhasználási esetek
- Kimenő API-kérések aláírása egy megosztott titokkal, hogy a szerver ellenőrizhesse a hívó személyazonosságát.
- Bejövő webhook-hasznos terhelések ellenőrzése (a Stripe-Signature, GitHub X-Hub-Signature-256 és hasonló fejlécek mind HMAC-SHA256-ot használnak).
- A HS256/HS384/HS512 algoritmussal aláírt JWT aláírás-részének létrehozása és validálása.
- Annak tesztelése, hogy a szerveroldali vagy kliensoldali HMAC-implementáció megfelel-e az elvárt kimenetnek, bevezetés előtt.
Gyakori kérdések
Mi az a HMAC?
A HMAC (Hash-based Message Authentication Code) egy titkos kulcsot kombinál egy üzenettel egy hash-függvény segítségével, hogy olyan lenyomatot állítson elő, amely bizonyítja mind az üzenet integritását, mind azt, hogy a küldő birtokolja a kulcsot. A NIST FIPS 198-1 és az IETF RFC 2104 szabványban van meghatározva.
Mi a különbség a HMAC és egy egyszerű hash között?
Egy egyszerű hash (SHA-256, MD5 stb.) csak az üzenetet veszi bemenetként — bárki kiszámíthatja, így csak azt bizonyítja, hogy az üzenet nem sérült meg, nem azt, hogy ki küldte. A HMAC egy üzenetet és egy titkos kulcsot vesz bemenetként: ha bizonyítania kell, hogy egy üzenet egy bizonyos titok birtokosától érkezett (API-aláírás, webhook küldője), akkor HMAC-ra van szüksége. Ha csak azt kell ellenőriznie, hogy egy fájl vagy üzenet nem változott, és nem érdekli a szerzőség bizonyítása, egy egyszerű hash elegendő.
Elküldi az eszköz a titkos kulcsomat egy szerverre?
Nem. Ez az eszköz teljesen a böngészőjében számítja ki a HMAC-ot a Web Crypto API segítségével. A kulcsa és üzenete soha nem kerül továbbításra sehova — nyugodtan tesztelheti valódi éles titkait.
Melyik algoritmust használjam — SHA-1, SHA-256, SHA-384 vagy SHA-512?
Használjon HMAC-SHA256-ot, hacsak egy adott rendszer másképp nem követeli meg — ez a de facto szabvány API-aláíráshoz (az AWS, a Stripe, a GitHub webhookjai és a legtöbb modern API is ezt használja), és erős biztonsági tartalékot kínál. A HMAC-SHA1 még mindig gyakori örökölt rendszerekben (mint a régebbi OAuth 1.0a implementációk), de a SHA-1 alapjául szolgáló hash gyengébbnek számít; a HMAC-SHA384/512-t ott használják, ahol kifejezetten hosszabb kimenetre vagy extra biztonsági tartalékra van szükség.
Veszélyes-e a HMAC-SHA1, mivel a sima SHA-1 feltört?
A 2017-es ütközéses támadások a SHA-1-et mint egyszerű hash-függvényt törték fel, de a HMAC-SHA1 továbbra is kriptográfiailag megbízhatónak számít, mivel a HMAC biztonsága nem ugyanúgy függ az ütközésállóságtól. Ennek ellenére új rendszerekhez érdemesebb a HMAC-SHA256-ot vagy magasabbat választani — nincs gyakorlati hátránya, és teljesen elkerüli a kérdést.
Melyek a HMAC gyakori valós felhasználási módjai?
REST API-kérések aláírása, hogy egy szerver ellenőrizhesse, a hívó birtokolja a megosztott API-titkot; webhook-hasznos terhelések ellenőrzése olyan szolgáltatásoktól, mint a Stripe, GitHub és Shopify, hogy tudja, a kérés valóban tőlük érkezett és nem hamisított; időalapú egyszeri jelszavak (TOTP/HOTP) generálása kétfaktoros hitelesítéshez; és JWT tokenek aláírása a HS256/HS384/HS512 algoritmusokkal.