Generator HMAC

HMAC jest algorytmem stanowiącym podstawę większości podpisanych webhooków, nagłówków AWS Signature w wersji 4 oraz tokenów JWT HS256. Wpisz wiadomość i klucz tajny, wybierz rodzinę haszów – ten generator generuje wartość HMAC dokładnie zgodnie z wymogami RFC 2104, co jest przydatne do weryfikacji danych, które ma wysłać serwer backendowy, lub do powtórnego wygenerowania podpisu otrzymanego od interfejsu API.

Jak obliczyć HMAC

  1. 1

    Wklej wiadomość

    Dokładne bajty do podpisania – ładunek (payload) webhooka, żądanie kanoniczne lub dowolny ciąg znaków.

  2. 2

    Wpisz klucz sekretny

    Może być tekstem lub wartością szesnastkową (hex). Generator uzupełnia go lub haszuje do rozmiaru bloku zgodnie z RFC.

  3. 3

    Wybierz algorytm haszowania

    SHA-256 jest ustawieniem domyślnym; w celu zachowania zgodności ze starszymi systemami wybierz SHA-1, SHA-384, SHA-512 lub MD5.

  4. 4

    Skopiuj podpis

    Wynik to małe litery w formacie szesnastkowym (hex), gotowy do wklejenia do konfiguracji webhooka lub nagłówka autoryzacji.

HMAC od podszewki

HMAC opakuje prostą funkcję haszowania w strukturze z kluczem, co uniemożliwia falsyfikację podpisu bez odpowiedniego klucza.

Przepis RFC 2104

HMAC(k, m) = H((k' ⊕ opad) ∥ H((k' ⊕ ipad) ∥ m))

gdzie k' jest kluczem uzupełnionym do rozmiaru bloku haszowania, a opad = 0x5c repeated i ipad = 0x36 repeated to stałe wypełnienia.

Wybór algorytmu

Algorytm Rozmiar bloku Długość wyniku Rekomendowany do
HMAC-SHA-256 64 bajty 32 bajty Nowoczesny standard, podpisywanie webhooków
HMAC-SHA-384 128 bajtów 48 bajtów Podpisywanie API o wyższym poziomie bezpieczeństwa
HMAC-SHA-512 128 bajtów 64 bajty Tokeny o długim okresie trwałości
HMAC-SHA-1 64 bajty 20 bajtów Wersja starsza (AWS S3 v2, OAuth 1.0)
HMAC-MD5 64 bajty 16 bajtów Dostępne wyłącznie w wersjach starszych; unikaj jego stosowania w nowych aplikacjach

Gdzie pojawia się HMAC

  • Webhooki GitHub, Stripe, Shopify: nagłówki X-Hub-Signature-256, Stripe-Signature itd.
  • AWS Signature v4: łańcuch operacji HMAC-SHA256 wykonywany na żądaniu kanonicznym.
  • JWT HS256: podpis tokena to HMAC-SHA-256(header.payload, secret).
  • Tokeny resetowania hasła: HMAC złożony z user_id, terminu ważności oraz sekretu witryny.

Najczęstsze błędy

  • Przesyłanie klucza zakodowanego szesnastkowo jako tekstu zamiast wcześniejszego zdekodowania go do bajtów.
  • Podpisywanie niewłaściwych bajtów ładunku: niektóre webhooki podpisują surowe ciało żądania wraz z białymi znakami, inne zaś podpisują formę kanoniczną.
  • Używanie == w JavaScript lub Python do porównywania podpisów; zawsze stosuj porównanie odporne na ataki czasowe (timing-safe), aby zapobiec atakom czasowym.

Najczęściej zadawane pytania

Prawie zawsze dlatego, że bajty wiadomości się różnią. Podpisywanie ciała danych po sparsowaniu z formatu JSON powoduje zmiany białych znaków; podpisuj więc surowe ciało żądania. Ponadto upewnij się, że klucz jest dekodowany w ten sam sposób (szesnastkowo lub jako surowe bajty) po obu stronach.

Tak. Jeśli klucz jest krótszy niż wielkość bloku haszowanego, jest wypełniany zerami; jeśli dłuższy, najpierw podlega haszowaniu. RFC 2104 zaleca, aby klucze były co najmniej tak długie jak wynik haszowania (32 bajty dla SHA-256).

HMAC wciąż jest odporny na znane ataki kolizyjne typu MD5, ponieważ te ataki nie wpływają na proces generowania wartości HMAC. Niemniej jednak należy stosować HMAC-SHA-256 we wszystkich nowych kodach – takie wymagania są standardowe zarówno dla narzędzi implementacyjnych, jak i dla audytora.

Tak. Wiadomość i klucz tajny są wysyłane do naszego serwera przez szyfrowane połączenie HTTPS, aby można było obliczyć HMAC. Są używane wyłącznie do obliczeń i nie są przechowywane ani rejestrowane.

Powiązane narzędzia

Narzędzie jest dostępne w innych językach