CodeKitHub
Kódoló eszközök

HMAC generátor

Utolsó frissítés:

Ez az eszköz egy HMAC-ot (Hash-based Message Authentication Code) számít ki titkos kulcsból és üzenetből, alapul véve a SHA-1, SHA-256, SHA-384 vagy SHA-512 hash-függvényt. Egy egyszerű hash-sel ellentétben a HMAC egy megosztott titkos kulcsot igényel, így bizonyítja, hogy az üzenet olyan valakitől érkezett, aki birtokolja a kulcsot, és hogy az üzenetet nem módosították továbbítás közben — pontosan ezért használnak az API-k HMAC-ot kérések aláírására, a webhookok pedig a küldő ellenőrzésére. Minden a böngésző beépített Web Crypto API-ján keresztül, helyben fut; a titkos kulcsát és üzenetét soha nem küldjük el semmilyen szerverre.

HMAC-SHA1
HMAC-SHA256
HMAC-SHA384
HMAC-SHA512

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ó

  1. Adja meg titkos kulcsát a "Secret Key" mezőben.
  2. Adja meg a hitelesíteni kívánt üzenetet a "Message" mezőben.
  3. 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).
  4. 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 dog

Kimenet

HMAC-SHA256: f7bc83f430538424b13298e6aa6fb143ef4d59a14946175997479dbc2d1a3cd8
HMAC-SHA1: de7c9b85b8b78aa6bc8a7a36f70a90701c9db4d9

Ez 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.

AlgoritmusKimenet méreteTipikus felhasználás
HMAC-SHA1160 bites (40 hex karakter)Örökölt API-k, régebbi OAuth 1.0a aláírások
HMAC-SHA256256 bites (64 hex karakter)API-kérések aláírása, JWT HS256, webhook-ellenőrzés
HMAC-SHA384384 bites (96 hex karakter)Magasabb biztonságú aláírások, ahol hosszabb kimenet szükséges
HMAC-SHA512512 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.

Kapcsolódó eszközök