Skip to main content
CheckTown
Dev Tools

HMAC: jak dziala uwierzytelnianie wiadomosci oparte na hashu

Opublikowano 6 min czytania
W tym artykule

Czym jest HMAC?

HMAC (Hash-based Message Authentication Code) to mechanizm kryptograficzny, ktory laczy tajny klucz z funkcja hashujaca w celu wygenerowania kodu uwierzytelniania wiadomosci. W przeciwienstwie do zwyklego hasha, HMAC dowodzi zarowno integralnosci, jak i autentycznosci wiadomosci.

HMAC jest zdefiniowany w RFC 2104 i jest stosowany w TLS, IPsec, podpisach JWT i weryfikacji webhookow API. Algorytm jest odporny na ataki rozszerzenia dlugosci, ktore dotykaja zwyklych funkcji hashujacych.

Jak dziala HMAC

HMAC wykorzystuje dwuprzebiegowe podejscie do hashowania z wewnetrznym i zewnetrznym wypelnieniem. Tajny klucz jest uzupelniany do rozmiaru bloku funkcji hashujacej i laczony z dwiema roznymi stalymi.

  • Hash wewnetrzny — klucz jest laczony z ipad (0x36), konkatenowany z wiadomoscia i hashowany: H(K XOR ipad || wiadomosc)
  • Hash zewnetrzny — klucz jest laczony z opad (0x5C), konkatenowany z wynikiem hasha wewnetrznego: H(K XOR opad || inner_hash)
  • Wynik koncowy — wynik hasha zewnetrznego jest wartoscia HMAC, zazwyczaj reprezentowana jako ciag szesnastkowy

Ta konstrukcja podwojnego hashowania zapobiega atakom rozszerzenia dlugosci. Nawet jesli atakujacy zna H(wiadomosc), nie moze obliczyc HMAC(klucz, wiadomosc || dodatkowe_dane) bez tajnego klucza.

Algorytmy HMAC

Konstrukcja HMAC dziala z dowolna kryptograficzna funkcja hashujaca. Najpopularniejsze wybory to SHA-256, SHA-384 i SHA-512.

  • HMAC-SHA256 — wyjscie 256-bitowe, najszerzej stosowany wariant do uwierzytelniania API, podpisow JWT HS256 i weryfikacji webhookow. Zalecany rozmiar klucza: 32 bajty
  • HMAC-SHA384 — wyjscie 384-bitowe, stosowany w zestawach szyfrowania TLS 1.3 i aplikacjach o wysokim bezpieczenstwie. Zalecany rozmiar klucza: 48 bajtow
  • HMAC-SHA512 — wyjscie 512-bitowe, preferowany gdy potrzebny jest maksymalny margines bezpieczenstwa. Zalecany rozmiar klucza: 64 bajty

Klucz powinien byc co najmniej tak dlugi jak wyjscie hasha. Dla wiekszosci zastosowan HMAC-SHA256 z losowym 32-bajtowym kluczem zapewnia doskonale bezpieczenstwo.

Wypróbuj za darmo — bez rejestracji

Generuj podpisy HMAC →

Typowe zastosowania

HMAC jest fundamentem wielu protokolow bezpieczenstwa i schematow uwierzytelniania API.

  • Uwierzytelnianie API — serwisy takie jak Stripe, GitHub i AWS uzywaja podpisow HMAC do weryfikacji ladunkow webhookow
  • Podpisywanie JWT — algorytmy HS256, HS384 i HS512 uzywaja HMAC do podpisywania ladunku tokena
  • Integralnosc wiadomosci — HMAC weryfikuje, ze dane nie zostaly zmienione podczas transmisji
  • OAuth 1.0a — metoda podpisu HMAC-SHA1 podpisuje parametry zadania OAuth w celu udowodnienia autoryzacji

HMAC vs inne metody uwierzytelniania

HMAC jest jednym z kilku podejsc do uwierzytelniania wiadomosci. Kazde ma rozne kompromisy w zakresie bezpieczenstwa, wydajnosci i zarzadzania kluczami.

  • HMAC vs podpisy cyfrowe — HMAC uzywa wspoldzielonego tajnego klucza (symetryczny), podpisy cyfrowe uzywaja par kluczy (asymetryczny). HMAC jest szybszy, ale wymaga wspoldzielenia sekretu.
  • HMAC vs klucze API — klucze API sa prostymi tokenami nosnika. HMAC podpisuje zawartosc zadania, zapobiegajac falszowaniu nowych zadan.
  • HMAC vs zwykle hashowanie — hashowanie dowodzi integralnosci, ale nie autentycznosci. HMAC wymaga tajnego klucza.

Czesto zadawane pytania

Jaka jest idealna dlugosc klucza HMAC?

Klucz powinien byc co najmniej tak dlugi jak wyjscie hasha — 32 bajty dla HMAC-SHA256, 48 dla HMAC-SHA384, 64 dla HMAC-SHA512. Krotsze klucze oslabiaja bezpieczenstwo.

Czy HMAC to to samo co szyfrowanie?

Nie. HMAC zapewnia uwierzytelnianie i integralnosc, nie poufnosc. Wiadomosc pozostaje czytelna. Uzyj szyfrowania (AES, ChaCha20) oprocz HMAC do ukrycia zawartosci.

Czy moge uzywac HMAC w przegladarce z Web Crypto API?

Tak. Web Crypto API obsluguje HMAC natywnie przez crypto.subtle.importKey() i crypto.subtle.sign(). Mozesz generowac podpisy HMAC w calosci po stronie klienta.

Powiązane narzędzia