Jak używać
- Wprowadź tajny klucz i wybierz, czy jest zapisany jako zwykły tekst, czy bajty hex.
- Wklej wiadomość, na przykład treść webhooka dokładnie w otrzymanej postaci.
- Wybierz algorytm i kodowanie wyniku używane przez Twoją usługę. HMAC jest aktualizowany podczas pisania.
- Aby sprawdzić podpis, wklej go w polu weryfikacji i sprawdź, czy pojawi się komunikat „Zgodność”.
Jak to działa
HMAC (RFC 2104) łączy tajny klucz z funkcją skrótu, tworząc podpis, który może wygenerować tylko osoba posiadająca ten klucz. Usługi takie jak webhooki i podpisane żądania API dołączają HMAC do każdej wiadomości, aby odbiorca mógł sprawdzić, czy wiadomość jest autentyczna i niezmieniona.
To narzędzie korzysta z Web Crypto API przeglądarki (crypto.subtle.importKey i sign) i zostało sprawdzone przy użyciu wektorów testowych RFC 4231 i RFC 2202. Klucz tekstowy i wiadomość są kodowane jako UTF-8. Klucz szesnastkowy jest dekodowany do surowych bajtów; spacje, dwukropki i początkowe 0x są pomijane. HMAC-SHA-256 jest najczęściej wybieranym algorytmem; HMAC-SHA-1 nadal uznaje się za bezpieczny jako MAC, ale jest używany głównie przez starsze API.
Jeśli podpis się nie zgadza, sprawdź najczęstsze przyczyny: dokładne bajty wiadomości (wielu dostawców webhooków podpisuje surową treść, a nie ponownie sformatowany JSON), znacznik czasu lub prefiks dodawany przez dostawcę do podpisywanego ciągu, to, czy klucz jest używany jako tekst, czy należy go najpierw zdekodować z formatu szesnastkowego lub Base64, oraz to, czy oczekiwany podpis jest w formacie szesnastkowym czy Base64 i zawiera prefiks, taki jak „sha256=”, który należy usunąć przed porównaniem.
Przykłady
Przypadek testowy RFC 4231
Klucz „Jefe” (tekst), wiadomość „what do ya want for nothing?” i HMAC-SHA-256 dają wynik 5bdcc146bf60754e6a042426089575c75a003f089d2739839dec58b964ec3843. Użyj opcji „Wypróbuj przykład”, aby wczytać dane.
Weryfikowanie podpisu webhooka
Dostawca wysyła z każdym żądaniem nagłówek X-Signature: sha256=…. Wklej surową treść żądania jako wiadomość, sekret webhooka jako klucz, wybierz HMAC-SHA-256 i format szesnastkowy, a następnie wklej wartość po „sha256=” w polu weryfikacji.
Klucz zapisany w formacie szesnastkowym
Niektóre systemy udostępniają klucze jako ciągi szesnastkowe, np. 0b0b0b…. Wybierz format szesnastkowy klucza, aby narzędzie podpisało dane zdekodowanymi bajtami; potraktowanie tego samego ciągu jako tekstu daje zupełnie inny wynik.
Często zadawane pytania
Czym HMAC różni się od zwykłego hasha?
Każdy może obliczyć zwykły hash, np. SHA-256, wiadomości. HMAC zależy również od tajnego klucza, więc może go wygenerować lub zweryfikować tylko osoba posiadająca ten klucz. Dzięki temu można potwierdzić, że wiadomość pochodzi od osoby znającej klucz i nie została zmieniona.
Dlaczego mój HMAC nie zgadza się z wynikiem serwera?
Najczęściej nie zgadzają się bajty danych wejściowych: zakończenia linii, białe znaki, kolejność kluczy JSON, kodowanie znaków albo klucz, który należy zdekodować z formatu szesnastkowego lub Base64. Sprawdź też, czy porównujesz dane w tym samym formacie (szesnastkowym lub Base64), i usuń prefiksy, takie jak „sha256=”.
Czy mój tajny klucz jest gdzieś wysyłany?
Nie. Klucz i wiadomość są używane wyłącznie przez Web Crypto API w tej karcie przeglądarki. Nie są przesyłane, zapisywane ani uwzględniane w danych analitycznych.
Czy HMAC-SHA-1 jest nadal bezpieczny?
Kolizje SHA-1 nie naruszają bezpośrednio bezpieczeństwa HMAC-SHA-1, który nadal jest akceptowany ze względu na zgodność. W nowych systemach używaj HMAC-SHA-256 lub silniejszego algorytmu.
Prywatność
Klucz, wiadomość i wynik są dostępne tylko na tej karcie przeglądarki. Żadne dane nie są przesyłane, zapisywane ani wysyłane do narzędzi analitycznych; rejestrowane jest tylko anonimowe zdarzenie informujące o użyciu narzędzia.