0Pricing
Cryptology Academy · Lekcja

Konstrukcja HMAC i dowód bezpieczeństwa

Prześledzić konstrukcję ipad/opad i jej właściwości bezpieczeństwa

Konstrukcja HMAC i dowód bezpieczeństwa to bezpłatna lekcja Cryptology Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Cryptology Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Cryptology Academy zawiera 4 lekcji w sumie.

Wprowadzenie

HMAC to standardowa konstrukcja MAC z kluczem. Jej konstrukcja oparta na podwójnym haszowaniu zapobiega atakom rozszerzenia długości i ma formalny dowód bezpieczeństwa sprowadzający bezpieczeństwo HMAC do bezpieczeństwa bazowej funkcji skrótu.

Konstrukcja HMAC

HMAC(K, M) = H((K' ⊕ opad) || H((K' ⊕ ipad) || M)) Gdzie: - K' = K dopełniony zerami do rozmiaru bloku B (lub H(K), jeśli |K|>B) - ipad = 0x36 powtórzone B razy - opad = 0x5C powtórzone B razy

Dlaczego ipad i opad?

ipad (0x36) i opad (0x5C) to różne stałe, które gwarantują, że K' ⊕ ipad ≠ K' ⊕ opad. W praktyce tworzą one z K dwa różne klucze pseudolosowe używane do haszowania wewnętrznego i zewnętrznego.

HMAC krok po kroku

For K=secret, M=message, H=SHA256: 1. K' = K padded to 64 bytes 2. inner_key = K' XOR ipad 3. inner_hash = SHA256(inner_key || M) 4. outer_key = K' XOR opad 5. result = SHA256(outer_key || inner_hash)

HMAC w Pythonie

import hmac, hashlib key = b'my_secret_key' message = b'Hello, World!' mac = hmac.new(key, message, hashlib.sha256) print(mac.hexdigest()) # 64-char hex string (256 bits)

Dlaczego rozszerzenie długości nie działa w HMAC

Dla HMAC(K,M) = SHA256(outer_key || SHA256(inner_key || M)) Atakujący zna SHA256(inner_key || M) = inner_hash. Nie może jednak rozszerzyć tego wyniku — zewnętrzne haszowanie przyjmuje jako dane wejściowe (outer_key || inner_hash), a nie samo inner_hash. Atakujący nie zna outer_key.

Dowód bezpieczeństwa HMAC (Bellare)

Bellare (1996) dowiódł, że jeśli funkcja skrótu H jest funkcją pseudolosową (PRF), to HMAC również jest funkcją pseudolosową. W praktyce oznacza to, że HMAC-SHA256 jest tak bezpieczny jak SHA-256 w zakresie właściwości bezpieczeństwa, do których został przeznaczony.

Długość klucza HMAC

Klucz HMAC musi mieć: - Co najmniej L bajtów (długość wyniku funkcji skrótu) - Zalecane: dokładnie L bajtów losowych danych - Jeśli klucz > block_size: klucz jest wcześniej haszowany do block_size - Użyj os.urandom(32) dla kluczy HMAC-SHA256

Skracanie HMAC

Wynik HMAC można skrócić do połowy długości bez znaczącej utraty bezpieczeństwa. TOTP/HOTP skracają wynik do 4 bajtów. MAC-y TLS również są skracane. Nigdy nie należy skracać wyniku poniżej 80 bitów (10 bajtów).

HMAC w różnych kontekstach

HMAC-SHA256 jest używany w: - TOTP: kodach uwierzytelniających (skracanych do 6 cyfr) - TLS 1.2: MAC-ach sesji (nie są potrzebne w TLS 1.3 z AEAD) - JWT: podpisywaniu HS256 (symetrycznym) - Podpisywaniu żądań API: webhookach GitHub, AWS SigV4

HKDF: wyprowadzanie kluczy na podstawie HMAC

HKDF(IKM, salt, info, L) używa HMAC dwukrotnie: 1. Ekstrakcja: PRK = HMAC-SHA256(salt, IKM) 2. Rozszerzenie: OKM = HMAC-SHA256(PRK, info || counter) Jest używany w harmonogramie kluczy TLS 1.3, Signal i WireGuard do wyprowadzania kluczy.

Szybki test

Jaki jest cel opad (0x5C powtórzonego) w HMAC?

Podsumowanie

Konstrukcja HMAC i jej dowód bezpieczeństwa są już znane. Następnie zastosujemy HMAC do podpisywania żądań API i zobaczymy, jak zapobiegać atakom typu replay.

Często zadawane pytania

Czy lekcja „Konstrukcja HMAC i dowód bezpieczeństwa” jest bezpłatna?

Tak — pełny tekst „Konstrukcja HMAC i dowód bezpieczeństwa” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Cryptology Academy, przejdź na CoddyKit PRO. Kurs Cryptology Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Konstrukcja HMAC i dowód bezpieczeństwa”?

Prześledzić konstrukcję ipad/opad i jej właściwości bezpieczeństwa Ćwiczysz Cryptology Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Cryptology Academy?

Nie wymagamy żadnego doświadczenia. Cryptology Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.

Ile czasu zajmuje lekcja „Konstrukcja HMAC i dowód bezpieczeństwa”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Cryptology Academy?

Tak. Każda lekcja Cryptology Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Koncepcje MAC i ataki polegające na rozszerzeniu długości
  2. Konstrukcja HMAC i dowód bezpieczeństwa
  3. HMAC w API: podpisywanie żądań
  4. CMAC i Poly1305: MAC oparte na szyfrze blokowym
← Powrót do Cryptology Academy