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.