Generator HMAC
Oblicz HMAC-SHA1, SHA-256, SHA-384 lub SHA-512 z kluczem tekstowym, hex lub Base64, uzyskaj wynik hex i Base64 i sprawdź podpis webhooka.
Wiadomość jest podpisywana dokładnie tak, jak ją wpisano, w kodowaniu UTF-8, łącznie ze spacjami i znakami nowego wiersza.
- HMAC (hex)
- HMAC (Base64)
- Nagłówek podpisu webhooka (w stylu GitHub)
Porównanie działa w stałym czasie, tak jak powinien to robić serwer, więc czas jego trwania nie zdradza, ile znaków się zgadza.
Jak obliczyć HMAC
- Wklej Wiadomość. W przypadku webhooka musi to być surowa treść żądania, bajt w bajt.
- Wpisz Klucz tajny i wybierz jego Format klucza: Tekst (UTF-8), Szesnastkowy lub Base64.
- Wybierz Algorytm: HMAC-SHA1, HMAC-SHA256, HMAC-SHA384 lub HMAC-SHA512.
- Wynik aktualizuje się podczas pisania; możesz też kliknąć Generuj HMAC. Otrzymasz HMAC (hex), HMAC (Base64) oraz Nagłówek podpisu webhooka (w stylu GitHub), każdy z przyciskiem Kopiuj.
- Aby sprawdzić otrzymany podpis, wklej go w pole Porównaj z oczekiwanym podpisem (hex, Base64 lub sha256=…). Narzędzie poinformuje, czy się zgadza.
Wiadomość jest kodowana w UTF-8 dokładnie tak, jak ją wpisano, łącznie ze spacjami i znakami nowego wiersza. Obliczenia wykorzystują Web Crypto API twojej przeglądarki; wiadomość i klucz nigdy nie opuszczają twojego urządzenia.
Czym jest HMAC
HMAC (hash-based message authentication code, RFC 2104) to kod uwierzytelniający wiadomość, który łączy klucz tajny z funkcją skrótu:
HMAC(K, m) = H((K′ ⊕ opad) ‖ H((K′ ⊕ ipad) ‖ m))
gdzie K′ to klucz dopełniony do rozmiaru bloku funkcji skrótu (a jeśli jest dłuższy – najpierw zahashowany), a ipad i opad to stałe. Tylko osoba znająca klucz może wygenerować poprawny kod dla wiadomości, a każda zmiana wiadomości całkowicie zmienia kod. Dlatego HMAC służy do podpisywania webhooków, żądań API (np. AWS Signature Version 4) i tokenów JWT typu HS256.
HMAC to nie szyfrowanie: wiadomość nie jest ukrywana. Nie jest to też hash hasła – do przechowywania haseł używaj powolnej funkcji, takiej jak bcrypt lub Argon2.
Długość wyniku zależy od algorytmu: 20 bajtów dla SHA-1, 32 dla SHA-256, 48 dla SHA-384 i 64 dla SHA-512. HMAC-SHA1 wciąż uchodzi za bezpieczny jako MAC, ale w nowych systemach wybieraj SHA-256. Zalecany jest losowy klucz co najmniej tak długi jak wynik (32 bajty dla HMAC-SHA256); klucze w formacie hex lub Base64 pozwalają wpisać takie losowe bajty bezpośrednio.
Sprawdzanie webhooka z GitHuba
GitHub podpisuje każdą dostawę twoim sekretem webhooka i wysyła wynik w nagłówku X-Hub-Signature-256 jako sha256=, po którym następuje szesnastkowy HMAC-SHA256 treści. Przykład z dokumentacji GitHuba używa sekretu It's a Secret to Everybody i treści Hello, World!; wpisz je tutaj z algorytmem HMAC-SHA256, a nagłówek pokaże:
X-Hub-Signature-256: sha256=757107ea0eb2509fc211221cce984b8a37570b6d7586c22c46f4379c8b043e17
Pole porównania przyjmuje cały wiersz nagłówka, wartość sha256=… albo sam podpis w hex lub Base64 (Stripe, Shopify i Slack stosują podobne schematy z własnymi nagłówkami i podpisywanymi ciągami). Dla SHA-384 i SHA-512 narzędzie pokazuje ogólny nagłówek X-Signature, bo nie ma tu powszechnego standardu.
Porównanie w stałym czasie
Serwer, który porównuje podpisy zwykłym porównaniem ciągów, zatrzymuje się na pierwszym różniącym się znaku. Mierząc czasy odpowiedzi, atakujący mógłby odgadywać poprawny podpis znak po znaku. Porównanie w tym narzędziu sprawdza każdy bajt niezależnie od wyniku – tak jak powinien to robić serwer za pomocą crypto.timingSafeEqual w Node.js, hmac.compare_digest w Pythonie lub hash_equals w PHP.
Najczęściej zadawane pytania
Dlaczego mój HMAC różni się od obliczonego przez serwer?
Najczęstsze przyczyny to inna wiadomość (serwer podpisuje surową treść, a ty wkleiłeś przeformatowany JSON albo różnią się znaki nowego wiersza), klucz w niewłaściwym polu Format klucza lub inny algorytm. Nawet jedna dodatkowa spacja zmienia cały wynik.
Wynik ma być w hex czy w Base64?
Oba zapisy kodują te same bajty. GitHub używa hex, a wiele innych API, np. Shopify, używa Base64. Wybierz format, którego oczekuje system odbierający.
Czy mogę użyć pustego klucza?
Narzędzie go przyjmie, ale ostrzeże: przy pustym kluczu każdy może obliczyć ten sam HMAC, więc niczego on nie dowodzi.
Czy HMAC-SHA1 jest złamany tak jak SHA-1?
Ataki kolizyjne na SHA-1 nie łamią HMAC-SHA1, który nadal uważa się za bezpieczny jako MAC. Jest wciąż obsługiwany w starszych systemach, np. w dawnym nagłówku X-Hub-Signature, ale nowe systemy powinny używać HMAC-SHA256 lub silniejszego.
Czy mój klucz tajny jest tu bezpieczny?
Klucz i wiadomość są przetwarzane wyłącznie w twojej przeglądarce i nigdy nigdzie nie są wysyłane. Mimo to obchodź się ostrożnie z kluczami produkcyjnymi i zmień klucz, jeśli podejrzewasz, że wyciekł.
Podobne narzędzia
- Generator hashy Generuj hashe MD5, SHA-1, SHA-256 i SHA-512 z tekstu lub plików dowolnej wielkości i sprawdzaj sumy kontrolne. Wszystko działa w twojej przeglądarce.
- Dekoder JWT Odkoduj nagłówek i ładunek JWT, odczytaj exp, iat i nbf jako daty oraz zweryfikuj podpis HS256, RS256, ES256 lub EdDSA lokalnie w przeglądarce.
- Koder i dekoder Base64 Darmowy koder i dekoder Base64 z pełną obsługą UTF-8 i opcją base64url bezpieczną dla URL. Działa w przeglądarce, nic nie jest wysyłane.
- Generator i weryfikator bcrypt Generuj hash bcrypt z kosztem od 4 do 14, sprawdzaj hasło z istniejącym hashem i zobacz jego wersję, koszt, sól i skrót. Wszystko w przeglądarce.