W tym artykule
Czym jest HMAC?
HMAC (Hash-based Message Authentication Code) to mechanizm kryptograficzny, ktory łączy tajny klucz z funkcja hashujaca w celu wygenerowania kodu uwierzytelniania wiadomości. W przeciwieństwie do zwykłego hasha, HMAC dowodzi zarowno integralności, jak i autentyczności wiadomości.
HMAC jest zdefiniowany w RFC 2104 i jest stosowany w TLS, IPsec, podpisach JWT i weryfikacji webhookow API. Algorytm jest odporny na ataki rozszerzenia długości, ktore dotykaja zwykłych funkcji hashujacych.
Jak działa HMAC
HMAC wykorzystuje dwuprzebiegowe podejście do hashowania z wewnętrznym i zewnetrznym wypelnieniem. Tajny klucz jest uzupelniany do rozmiaru bloku funkcji hashujacej i łączony z dwiema różnymi stałymi.
- Hash wewnętrzny — klucz jest łączony z ipad (0x36), konkatenowany z wiadomoscia i hashowany: H(K XOR ipad || wiadomość)
- Hash zewnętrzny — klucz jest łączony z opad (0x5C), konkatenowany z wynikiem hasha wewnętrznego: H(K XOR opad || inner_hash)
- Wynik końcowy — wynik hasha zewnętrznego jest wartością HMAC, zazwyczaj reprezentowana jako ciag szesnastkowy
Ta konstrukcja podwojnego hashowania zapobiega atakom rozszerzenia długości. Nawet jeśli atakujący zna H(wiadomość), nie moze obliczyc HMAC(klucz, wiadomość || dodatkowe_dane) bez tajnego klucza.
Algorytmy HMAC
Konstrukcja HMAC działa z dowolna kryptograficzna funkcja hashujaca. Najpopularniejsze wybory to SHA-256, SHA-384 i SHA-512.
- HMAC-SHA256 — wyjście 256-bitowe, najszerzej stosowany wariant do uwierzytelniania API, podpisow JWT HS256 i weryfikacji webhookow. Zalecany rozmiar klucza: 32 bajty
- HMAC-SHA384 — wyjście 384-bitowe, stosowany w zestawach szyfrowania TLS 1.3 i aplikacjach o wysokim bezpieczeństwie. Zalecany rozmiar klucza: 48 bajtow
- HMAC-SHA512 — wyjście 512-bitowe, preferowany gdy potrzebny jest maksymalny margines bezpieczeństwa. Zalecany rozmiar klucza: 64 bajty
Klucz powinien byc co najmniej tak długi jak wyjście hasha. Dla większości zastosowan HMAC-SHA256 z losowym 32-bajtowym kluczem zapewnia doskonale bezpieczeństwo.
Wypróbuj za darmo — bez rejestracji
Generuj podpisy HMAC →Typowe zastosowania
HMAC jest fundamentem wielu protokołów bezpieczeństwa i schematow uwierzytelniania API.
- Uwierzytelnianie API — serwisy takie jak Stripe, GitHub i AWS używają podpisow HMAC do weryfikacji ladunkow webhookow
- Podpisywanie JWT — algorytmy HS256, HS384 i HS512 używają HMAC do podpisywania ładunku tokena
- Integralność wiadomości — HMAC weryfikuje, ze dane nie zostały zmienione podczas transmisji
- OAuth 1.0a — metoda podpisu HMAC-SHA1 podpisuje parametry żądania OAuth w celu udowodnienia autoryzacji
HMAC vs inne metody uwierzytelniania
HMAC jest jednym z kilku podejść do uwierzytelniania wiadomości. Każde ma różne kompromisy w zakresie bezpieczeństwa, wydajności i zarządzania kluczami.
- HMAC vs podpisy cyfrowe — HMAC używa współdzielonego tajnego klucza (symetryczny), podpisy cyfrowe używają par kluczy (asymetryczny). HMAC jest szybszy, ale wymaga wspoldzielenia sekretu.
- HMAC vs klucze API — klucze API sa prostymi tokenami nosnika. HMAC podpisuje zawartość żądania, zapobiegając falszowaniu nowych zadan.
- HMAC vs zwykłe hashowanie — hashowanie dowodzi integralności, ale nie autentyczności. HMAC wymaga tajnego klucza.
Często zadawane pytania
Jaka jest idealna długość klucza HMAC?
Klucz powinien byc co najmniej tak długi jak wyjście hasha — 32 bajty dla HMAC-SHA256, 48 dla HMAC-SHA384, 64 dla HMAC-SHA512. Krotsze klucze oslabiaja bezpieczeństwo.
Czy HMAC to to samo co szyfrowanie?
Nie. HMAC zapewnia uwierzytelnianie i integralność, nie poufnosc. Wiadomość pozostaje czytelna. Użyj szyfrowania (AES, ChaCha20) oprocz HMAC do ukrycia zawartości.
Czy moge używać HMAC w przeglądarce z Web Crypto API?
Tak. Web Crypto API obsługuje HMAC natywnie przez crypto.subtle.importKey() i crypto.subtle.sign(). Możesz generowac podpisy HMAC w całości po stronie klienta.