Generátor HMAC (SHA-256, SHA-512)
Vypočítaj HMAC-SHA1, SHA-256, SHA-384 alebo SHA-512 s kľúčom v texte, hex alebo Base64, získaj výstup v hex a Base64 a over podpis webhooku v prehliadači.
Správa sa podpisuje presne tak, ako je napísaná, v kódovaní UTF-8, vrátane medzier a koncov riadkov.
- HMAC (hex)
- HMAC (Base64)
- Hlavička podpisu webhooku (štýl GitHub)
Porovnanie beží v konštantnom čase, ako to má robiť server, takže doba výpočtu neprezradí, koľko znakov sa zhoduje.
Ako vypočítať HMAC
- Vlož Správa. Pri webhooku to musí byť surové telo požiadavky, bajt po bajte.
- Zadaj Tajný kľúč a vyber jeho Formát kľúča: Text (UTF-8), Hexadecimálne alebo Base64.
- Vyber Algoritmus: HMAC-SHA1, HMAC-SHA256, HMAC-SHA384 alebo HMAC-SHA512.
- Výsledok sa aktualizuje počas písania; môžeš tiež kliknúť na Generovať HMAC. Dostaneš HMAC (hex), HMAC (Base64) a Hlavička podpisu webhooku (štýl GitHub), každý s tlačidlom Kopírovať.
- Ak chceš skontrolovať prijatý podpis, vlož ho do Porovnať s očakávaným podpisom (hex, Base64 alebo sha256=…). Nástroj ti povie, či sa zhoduje.
Správa sa kóduje v UTF-8 presne tak, ako je napísaná, vrátane medzier a koncov riadkov. Výpočet používa rozhranie Web Crypto API tvojho prehliadača; správa ani kľúč nikdy neopustia tvoje zariadenie.
Čo je HMAC
HMAC (hash-based message authentication code, RFC 2104) spája tajný kľúč s hašovacou funkciou:
HMAC(K, m) = H((K′ ⊕ opad) ‖ H((K′ ⊕ ipad) ‖ m))
kde K′ je kľúč doplnený na veľkosť bloku hašovacej funkcie (ak je dlhší, najprv sa zahašuje) a ipad/opad sú pevné konštanty. Správny kód pre správu dokáže vytvoriť len ten, kto pozná kľúč, a akákoľvek zmena správy kód úplne zmení. Preto sa HMAC používa na podpisovanie webhookov, požiadaviek API (napríklad AWS Signature Version 4) a tokenov JSON Web Token HS256.
HMAC nie je šifrovanie: správa sa neskrýva. Nie je ani hašovaním hesiel; na ukladanie hesiel použi pomalú funkciu, ako je bcrypt alebo Argon2.
Dĺžka výstupu závisí od algoritmu: 20 bajtov pre SHA-1, 32 pre SHA-256, 48 pre SHA-384 a 64 pre SHA-512. HMAC-SHA1 sa ako MAC stále považuje za bezpečný, no pre nové systémy uprednostni SHA-256. Odporúča sa náhodný kľúč aspoň taký dlhý ako výstup (32 bajtov pre HMAC-SHA256); kľúče v hex alebo Base64 umožňujú zadať takéto náhodné bajty priamo.
Kontrola webhooku z GitHubu
GitHub podpisuje každé doručenie tajomstvom tvojho webhooku a výsledok posiela v hlavičke X-Hub-Signature-256 ako sha256=, za ktorým nasleduje HMAC-SHA256 tela v hex. Príklad z dokumentácie GitHubu používa tajomstvo It's a Secret to Everybody a telo Hello, World!; zadaj ich sem s HMAC-SHA256 a hlavička ukáže:
X-Hub-Signature-256: sha256=757107ea0eb2509fc211221cce984b8a37570b6d7586c22c46f4379c8b043e17
Pole na porovnanie prijíma celý riadok hlavičky, hodnotu sha256=… alebo samotný podpis v hex či Base64 (Stripe, Shopify a Slack používajú podobné schémy s vlastnými hlavičkami a podpisovanými reťazcami). Pri SHA-384 a SHA-512 nástroj zobrazí všeobecnú hlavičku X-Signature, keďže spoločný štandard neexistuje.
Porovnanie v konštantnom čase
Server, ktorý porovnáva podpisy bežným porovnaním reťazcov, sa zastaví pri prvom odlišnom znaku. Meraním času odpovede by mohol útočník hádať platný podpis znak po znaku. Porovnanie v tomto nástroji skúma každý bajt bez ohľadu na výsledok, ako to má server robiť pomocou crypto.timingSafeEqual v Node.js, hmac.compare_digest v Pythone alebo hash_equals v PHP.
Často kladené otázky
Prečo sa môj HMAC líši od toho, čo vypočíta môj server?
Obvyklými príčinami sú iná správa (server podpisuje surové telo, kým ty si vložil preformátovaný JSON, alebo sa líšia konce riadkov), kľúč v nesprávnom Formát kľúča, alebo iný algoritmus. Aj jedna medzera navyše zmení celý výsledok.
Má byť výstup v hex alebo Base64?
Oba zapisujú rovnaké bajty. GitHub používa hex, kým mnohé iné API, napríklad Shopify, používajú Base64. Použi formát, ktorý očakáva prijímajúci systém.
Môžem použiť prázdny kľúč?
Nástroj ho prijme a upozorní ťa: s prázdnym kľúčom dokáže rovnaký HMAC vypočítať ktokoľvek, takže nič nedokazuje.
Je HMAC-SHA1 prelomený ako SHA-1?
Kolízne útoky na SHA-1 HMAC-SHA1 neprelamujú a ako MAC sa stále považuje za bezpečný. Zostáva podporovaný pre staršie systémy, ako je stará hlavička X-Hub-Signature, no nové systémy majú používať HMAC-SHA256 alebo silnejší.
Je môj tajný kľúč tu v bezpečí?
Kľúč aj správa sa spracúvajú iba v tvojom prehliadači a nikdy sa nikam neodosielajú. Napriek tomu so produkčným tajomstvom zaobchádzaj opatrne a ak si myslíš, že unikol, vymeň ho.
Súvisiace nástroje
- Generátor hashov MD5, SHA-1, SHA-256 Vygeneruj hashe MD5, SHA-1, SHA-256 a SHA-512 textu alebo súborov ľubovoľnej veľkosti a over kontrolné súčty. Všetko beží v tvojom prehliadači.
- Dekodér JWT Dekóduj hlavičku a obsah JWT, zobraz exp, iat a nbf ako dátumy a over podpisy HS256, RS256, PS256, ES256 či EdDSA lokálne v prehliadači.
- Base64 kodér a dekodér Bezplatný kodér a dekodér Base64 s plnou podporou UTF-8 a voľbou base64url pre URL. Beží celý v prehliadači, nič sa nenahráva na server.
- Generátor a kontrola bcrypt Vygeneruj hash bcrypt s faktorom náročnosti 4 až 14, over heslo voči existujúcemu hashu a zobraz jeho verziu, náročnosť, soľ a výsledný hash.