HMAC generátor
Számolj HMAC-SHA1, SHA-256, SHA-384 vagy SHA-512 értéket szöveges, hex vagy Base64 kulccsal, és ellenőrizz webhook-aláírást a böngésződben.
Az üzenetet pontosan úgy írjuk alá, ahogy beírtad, UTF-8-ként kódolva, a szóközökkel és sortörésekkel együtt.
- HMAC (hex)
- HMAC (Base64)
- Webhook-aláírás fejléc (GitHub-stílus)
Az összehasonlítás állandó idő alatt fut le, ahogy egy szervernek is tennie kell, így az eltelt idő nem árulja el, hány karakter egyezik.
Hogyan számolj HMAC-ot
- Illeszd be az Üzenet mezőbe az üzenetet. Webhooknál ennek a kérés nyers törzsének kell lennie, bájtról bájtra.
- Add meg a Titkos kulcs értékét, és válaszd ki a Kulcs formátuma beállítást: Szöveg (UTF-8), Hexadecimális vagy Base64.
- Válaszd ki az Algoritmus típusát: HMAC-SHA1, HMAC-SHA256, HMAC-SHA384 vagy HMAC-SHA512.
- Az eredmény gépelés közben frissül; a HMAC generálása gombra is kattinthatsz. Megkapod a HMAC (hex), a HMAC (Base64) és a Webhook-aláírás fejléc (GitHub-stílus) értékét, mindegyiket egy Másolás gombbal.
- Egy kapott aláírás ellenőrzéséhez illeszd be az Összehasonlítás egy várt aláírással (hex, Base64 vagy sha256=…) mezőbe. Az eszköz megmondja, hogy egyezik-e.
Az üzenetet az eszköz pontosan úgy kódolja UTF-8-ként, ahogy beírtad, a szóközökkel és sortörésekkel együtt. A számítás a böngésződ Web Crypto API-ját használja; az üzenet és a kulcs soha nem hagyja el az eszközödet.
Mi az a HMAC?
A HMAC (hash-alapú üzenethitelesítő kód, RFC 2104) egy titkos kulcsot kombinál egy hash-függvénnyel:
HMAC(K, m) = H((K′ ⊕ opad) ‖ H((K′ ⊕ ipad) ‖ m))
ahol a K′ a hash blokkméretére kiegészített kulcs (ha hosszabb, előbb hasheljük), az ipad/opad pedig rögzített állandók. Csak az tudja előállítani egy üzenethez a helyes kódot, aki ismeri a kulcsot, és az üzenet bármilyen módosítása teljesen megváltoztatja a kódot. Ezért írnak alá HMAC-okkal webhookokat, API-kéréseket (például az AWS Signature Version 4-et) és HS256 JSON Web Tokeneket.
A HMAC nem titkosítás: az üzenet nem rejtett. Nem is jelszó-hash; jelszavak tárolásához használj lassú függvényt, például bcryptet vagy Argon2-t.
A kimenet hossza az algoritmustól függ: SHA-1-nél 20 bájt, SHA-256-nál 32, SHA-384-nél 48, SHA-512-nél 64. A HMAC-SHA1 MAC-ként még biztonságosnak számít, de új rendszerekhez inkább az SHA-256-ot válaszd. Javasolt a kimenet hosszával legalább megegyező hosszú véletlen kulcs (HMAC-SHA256-nál 32 bájt); a hex vagy Base64 kulcsokkal közvetlenül megadhatsz ilyen véletlen bájtokat.
GitHub webhook ellenőrzése
A GitHub minden kézbesítést a webhook titkos kulcsával ír alá, és az eredményt az X-Hub-Signature-256 fejlécben küldi el sha256= előtaggal, amelyet a törzs hex HMAC-SHA256 értéke követ. A GitHub saját dokumentációjának példája az It's a Secret to Everybody titkos kulcsot és a Hello, World! törzset használja; add meg őket itt HMAC-SHA256 algoritmussal, és a fejléc ezt mutatja:
X-Hub-Signature-256: sha256=757107ea0eb2509fc211221cce984b8a37570b6d7586c22c46f4379c8b043e17
Az összehasonlító mező elfogadja a teljes fejlécsort, az sha256=… értéket, vagy egy puszta hex vagy Base64 aláírást (a Stripe, a Shopify és a Slack hasonló sémákat használ saját fejlécekkel és aláírt karakterláncokkal). SHA-384-nél és SHA-512-nél az eszköz általános X-Signature fejlécet mutat, mert nincs közös szabvány.
Állandó idejű összehasonlítás
Az a szerver, amely az aláírásokat egyszerű karakterlánc-összehasonlítással vet össze, az első eltérő karakternél megáll. A válaszidők mérésével egy támadó karakterenként kitalálhatna egy érvényes aláírást. Az eszköz összehasonlítása az eredménytől függetlenül minden bájtot megvizsgál, ahogy egy szervernek is tennie kell a Node.js crypto.timingSafeEqual, a Python hmac.compare_digest vagy a PHP hash_equals függvényével.
Gyakori kérdések
Miért különbözik a HMAC-om a szerverem által számolttól?
A szokásos okok: eltérő üzenet (a szerver a nyers törzset írja alá, te viszont újraformázott JSON-t illesztettél be, vagy a sortörések mások), rossz Kulcs formátuma beállítású kulcs, vagy más algoritmus. Már egyetlen felesleges szóköz is megváltoztatja a teljes eredményt.
Hex vagy Base64 legyen a kimenet?
Mindkettő ugyanazokat a bájtokat kódolja. A GitHub hexet használ, sok más API, például a Shopify, Base64-et. Azt használd, amelyet a fogadó rendszer elvár.
Használhatok üres kulcsot?
Az eszköz elfogadja, és figyelmeztet: üres kulccsal bárki ki tudja számolni ugyanazt a HMAC-ot, így az semmit nem bizonyít.
Feltört a HMAC-SHA1, mint az SHA-1?
Az SHA-1 ütközéses támadásai nem törik fel a HMAC-SHA1-et, amely MAC-ként még biztonságosnak számít. Régi rendszerek, például a régi X-Hub-Signature fejléc miatt támogatott marad, de új rendszerekhez HMAC-SHA256-ot vagy erősebbet használj.
Biztonságban van itt a titkos kulcsom?
A kulcsot és az üzenetet kizárólag a böngésződben dolgozzuk fel, és sehová nem küldjük el. Az éles titkokat azért kezeld óvatosan, és cseréld le, ha úgy gondolod, hogy kiszivárogtak.
Kapcsolódó eszközök
- Hash generátor Generálj MD5, SHA-1, SHA-256 és SHA-512 hasheket szövegből vagy bármekkora fájlból, és ellenőrizd az ellenőrző összegeket. Minden a böngésződben fut.
- JWT dekódoló Dekódold a JWT fejlécét és payloadját, olvasd ki az exp, iat és nbf értékeket dátumként, és ellenőrizd az aláírást (HS256, RS256, ES256, EdDSA) a böngésződben.
- Base64 kódoló és dekódoló Ingyenes Base64 kódoló és dekódoló teljes UTF-8 támogatással és URL-barát base64url opcióval. A böngésződben fut, semmit nem töltünk fel.
- Bcrypt generátor és ellenőrző Generálj bcrypt hasht 4 és 14 közötti költségtényezővel, ellenőrizz jelszót meglévő hash alapján, és nézd meg a verziót, a költséget, a sót és a hasht.