Generátor HMAC
Vypočítej HMAC-SHA1, SHA-256, SHA-384 nebo SHA-512 s klíčem v textu, hex nebo Base64, získej výstup v hex a Base64 a zkontroluj podpis webhooku v prohlížeči.
Zpráva se podepisuje přesně tak, jak je napsána, v kódování UTF-8, včetně mezer a konců řádků.
- HMAC (hex)
- HMAC (Base64)
- Hlavička podpisu webhooku (ve stylu GitHubu)
Porovnání probíhá v konstantním čase, jak by to měl dělat server, takže doba trvání neprozradí, kolik znaků se shoduje.
Jak vypočítat HMAC
- Vlož Zprávu. U webhooku to musí být surové tělo požadavku, bajt po bajtu.
- Zadej Tajný klíč a zvol jeho Formát klíče: Text (UTF-8), Šestnáctkově nebo Base64.
- Vyber Algoritmus: HMAC-SHA1, HMAC-SHA256, HMAC-SHA384 nebo HMAC-SHA512.
- Výsledek se aktualizuje při psaní, můžeš také kliknout na Generovat HMAC. Dostaneš HMAC (hex), HMAC (Base64) a Hlavičku podpisu webhooku (ve stylu GitHubu), každý s tlačítkem Kopírovat.
- Chceš-li zkontrolovat přijatý podpis, vlož ho do pole Porovnat s očekávaným podpisem (hex, Base64 nebo sha256=…). Nástroj ti řekne, zda odpovídá.
Zpráva se kóduje jako UTF-8 přesně tak, jak je napsána, včetně mezer a konců řádků. Výpočet využívá rozhraní Web Crypto API ve tvém prohlížeči a zpráva ani klíč nikdy neopustí tvoje zařízení.
Co je HMAC
HMAC (hash-based message authentication code, RFC 2104) spojuje tajný klíč s hashovací funkcí:
HMAC(K, m) = H((K′ ⊕ opad) ‖ H((K′ ⊕ ipad) ‖ m))
kde K′ je klíč doplněný na velikost bloku hashe (nejdřív se zahashuje, pokud je delší) a ipad/opad jsou pevné konstanty. Správný kód pro zprávu dokáže vytvořit jen ten, kdo zná klíč, a jakákoli změna zprávy kód zcela změní. Proto se pomocí HMAC podepisují webhooky, požadavky API (například AWS Signature Version 4) i tokeny JSON Web Token HS256.
HMAC není šifrování: zpráva se neskrývá. Není to ani hash hesla. Na ukládání hesel použij pomalou funkci jako bcrypt nebo Argon2.
Délka výstupu závisí na algoritmu: 20 bajtů u SHA-1, 32 u SHA-256, 48 u SHA-384 a 64 u SHA-512. HMAC-SHA1 se jako MAC stále považuje za bezpečný, ale pro nové systémy dej přednost SHA-256. Doporučuje se náhodný klíč alespoň tak dlouhý jako výstup (32 bajtů u HMAC-SHA256). Klíče v hex nebo Base64 umožňují zadat takové náhodné bajty přímo.
Kontrola webhooku z GitHubu
GitHub podepisuje každé doručení tajným klíčem webhooku a výsledek posílá v hlavičce X-Hub-Signature-256 jako sha256= následované hex hodnotou HMAC-SHA256 těla. Příklad z dokumentace GitHubu používá tajný klíč It's a Secret to Everybody a tělo Hello, World!. Zadej je zde s HMAC-SHA256 a hlavička ukáže:
X-Hub-Signature-256: sha256=757107ea0eb2509fc211221cce984b8a37570b6d7586c22c46f4379c8b043e17
Pole pro porovnání přijímá celý řádek hlavičky, hodnotu sha256=… nebo holý podpis v hex či Base64 (Stripe, Shopify a Slack používají podobná schémata s vlastními hlavičkami a podepisovanými řetězci). U SHA-384 a SHA-512 nástroj zobrazuje obecnou hlavičku X-Signature, protože společný standard neexistuje.
Porovnání v konstantním čase
Server, který podpisy porovnává běžným porovnáním řetězců, se zastaví u prvního odlišného znaku. Měřením doby odezvy by útočník mohl platný podpis uhodnout znak po znaku. Porovnání v tomto nástroji prověřuje každý bajt bez ohledu na výsledek, jak by to měl server dělat pomocí crypto.timingSafeEqual v Node.js, hmac.compare_digest v Pythonu nebo hash_equals v PHP.
Časté dotazy
Proč se můj HMAC liší od toho, který spočítal můj server?
Obvyklými příčinami jsou jiná zpráva (server podepisuje surové tělo, ty ses vložil přeformátovaný JSON, nebo se liší konce řádků), klíč ve špatném Formátu klíče či jiný algoritmus. I jedna mezera navíc změní celý výsledek.
Má být výstup v hex, nebo v Base64?
Obojí kóduje stejné bajty. GitHub používá hex, zatímco mnoho jiných API, například Shopify, používá Base64. Použij formát, který očekává přijímající systém.
Mohu použít prázdný klíč?
Nástroj ho přijme a upozorní tě: s prázdným klíčem může stejný HMAC spočítat kdokoli, takže nic nedokazuje.
Je HMAC-SHA1 prolomený jako SHA-1?
Kolizní útoky na SHA-1 HMAC-SHA1 neprolamují, jako MAC se stále považuje za bezpečný. Pro zastaralé systémy, například starou hlavičku X-Hub-Signature, zůstává podporován, ale nové systémy by měly používat HMAC-SHA256 nebo silnější.
Je můj tajný klíč zde v bezpečí?
Klíč i zpráva se zpracovávají jen ve tvém prohlížeči a nikam se neodesílají. Přesto s produkčním tajemstvím zacházej opatrně a pokud si myslíš, že unikl, vyměň ho.
Související nástroje
- Generátor hashů Vytvoř hash MD5, SHA-1, SHA-256 a SHA-512 z textu nebo souborů libovolné velikosti a ověř kontrolní součty. Vše běží ve tvém prohlížeči.
- JWT dekodér Dekóduj hlavičku a obsah JWT, zobraz exp, iat a nbf jako data a ověř podpis HS256, RS256, PS256, ES256 či EdDSA přímo ve svém prohlížeči.
- Base64 kodér a dekodér Bezplatný Base64 kodér a dekodér s plnou podporou UTF-8 a volbou base64url. Funguje ve tvém prohlížeči, nic se nenahrává na server.
- Generátor a kontrola bcrypt Vytvoř hash bcrypt s faktorem nákladnosti od 4 do 14, zkontroluj heslo proti existujícímu hashi a zobraz jeho verzi, nákladnost, sůl a otisk.