Használata
- Adja meg a titkos kulcsot, és válassza ki, hogy egyszerű szöveg vagy hex bájtok.
- Illessze be az üzenetet, például a webhook payloadját pontosan úgy, ahogyan érkezett.
- Válassza ki a szolgáltatása által használt algoritmust és kimeneti kódolást; a HMAC gépelés közben frissül.
- Aláírás ellenőrzéséhez illessze be az ellenőrző mezőbe, és keresse az „Egyezés” feliratot.
Hogyan működik
A HMAC (RFC 2104) egy titkos kulcsot egy hashfüggvénnyel kombinál, és olyan aláírást hoz létre, amelyet csak a kulcs birtokosa tud előállítani. Az olyan szolgáltatások, mint a webhookok és az aláírt API-kérések, minden üzenethez HMAC-ot küldenek, hogy a fogadó ellenőrizhesse, hogy az üzenet hiteles és változatlan-e.
Ez az eszköz a böngésző Web Crypto API-ját (crypto.subtle.importKey és sign) használja, és az RFC 4231, valamint az RFC 2202 tesztvektorai alapján van ellenőrizve. A szöveges kulcs és az üzenet UTF-8-ként van kódolva. A hex kulcs nyers bájtokra dekódolódik; a szóközök, a kettőspontok és a bevezető 0x előtag figyelmen kívül marad. A HMAC-SHA-256 a leggyakoribb választás; a HMAC-SHA-1 MAC-ként még biztonságosnak számít, de elsősorban régebbi API-k használják.
Ha az aláírása nem egyezik, ellenőrizze az alábbi, leggyakrabban eltérő részleteket: a pontos üzenetbájtokat (sok webhook-szolgáltató a nyers törzset írja alá, nem az újraformázott JSON-t), a szolgáltató által az aláírt sztringhez adott időbélyeget vagy előtagot, hogy a kulcsot szövegként használja-e, vagy előbb hex, illetve Base64 formátumból kell-e dekódolni, valamint hogy a várt aláírás hex vagy Base64 formátumú-e, és van-e olyan előtagja, mint a „sha256=”, amelyet az összehasonlítás előtt el kell távolítani.
Példák
RFC 4231 teszteset
A „Jefe” kulcs (szöveg), a „what do ya want for nothing?” üzenet és a HMAC-SHA-256 eredménye: 5bdcc146bf60754e6a042426089575c75a003f089d2739839dec58b964ec3843. A betöltéséhez használja a „Példa kipróbálása” lehetőséget.
Webhook-aláírás ellenőrzése
A szolgáltató minden kéréshez X-Signature: sha256=… fejlécet küld. Illessze be a nyers kéréstörzset üzenetként, a webhook titkos kulcsát pedig kulcsként, válassza a HMAC-SHA-256 és a Hex lehetőséget, majd illessze be a „sha256=” utáni értéket az ellenőrző mezőbe.
Hex kódolású kulcs
Egyes rendszerek hex karakterláncként adják ki a kulcsokat, például 0b0b0b…. Válassza a Hex kulcsformátumot, hogy az eszköz a dekódolt bájtokkal írja alá; ugyanazon karakterlánc szövegként kezelése teljesen más eredményt ad.
Gyakori kérdések
Mi a különbség a HMAC és a sima hash között?
Egy egyszerű hash-t (például SHA-256-ot) bárki kiszámíthat egy üzenetből. A HMAC viszont egy titkos kulcstól is függ, ezért csak az tudja előállítani vagy ellenőrizni, aki ismeri a kulcsot. Ez igazolja, hogy az üzenet a kulcs birtokosától származik, és nem módosították.
Miért nem egyezik az én HMAC-om a szerveren lévővel?
A bemeneti bájtok szinte mindig eltérnek: soremelések, üres karakterek, a JSON-kulcsok sorrendje, karakterkódolás, vagy egy kulcs, amelyet hex vagy Base64 formátumból kellene dekódolni. Emellett ugyanabban a kódolásban hasonlítsa össze (hex vagy Base64), és távolítsa el az olyan előtagokat, mint a „sha256=”.
Elküldi bárhová a titkos kulcsomat?
Nem. A kulcsot és az üzenetet kizárólag a Web Crypto API használja ezen a böngészőlapon. Nem töltődnek fel, nem tárolódnak, és nem kerülnek bele az analitikába.
A HMAC-SHA-1 még biztonságos?
A SHA-1 ütközési támadások közvetlenül nem törik fel a HMAC-SHA-1-et, és kompatibilitási okokból továbbra is elfogadott. Új rendszereknél használjon HMAC-SHA-256-ot vagy erősebbet.
Adatvédelem
A kulcs, az üzenet és az eredmény kizárólag ezen a böngészőfülön létezik. Semmit nem töltünk fel, nem tárolunk, és nem küldünk el elemzőrendszereknek; csak egy anonim eseményt rögzítünk arról, hogy az eszközt használták.