Generator HMAC

Generuj podpisy HMAC z SHA-256, SHA-384 lub SHA-512

Algorytm

Wiadomość

Działa lokalnie · Bezpieczne do wklejania sekretów

Klucz tajny

Działa lokalnie · Bezpieczne do wklejania sekretów

Podpis HMAC

Podpis HMAC będzie wyświetlany tutaj…

Czym jest HMAC?

HMAC (Hash-based Message Authentication Code) to konstrukcja kryptograficzna zdefiniowana w RFC 2104, która łączy funkcję skrótu z kluczem tajnym, aby produkować uwierzytelniający znacznik o stałym rozmiarze. W przeciwieństwie do zwykłego skrótu, który może obliczyć każdy, HMAC może być generowany i weryfikowany wyłącznie przez strony posiadające wspólny klucz tajny. HMAC jest standardowym mechanizmem weryfikacji zarówno integralności, jak i autentyczności wiadomości — potwierdza, że dane nie zostały zmienione i że zostały wygenerowane przez zaufanego nadawcę.

Algorytm HMAC działa z dowolną iteracyjną funkcją skrótu: SHA-256, SHA-384, SHA-512, a nawet starszymi funkcjami, jak SHA-1 czy MD5. Wynikowa konstrukcja jest oznaczana przez leżącą u jej podstaw funkcję skrótu — HMAC-SHA256, HMAC-SHA384 lub HMAC-SHA512. Ponieważ bezpieczeństwo HMAC opiera się na odporności funkcji skrótu na kolizje i określonych właściwościach pseudolosowych, algorytmy z rodziny SHA-2 są zalecanym wyborem dla nowych systemów. HMAC-SHA256 jest najszerzej stosowanym wariantem — używanym w AWS Signature V4, webhookach Stripe, tajnych kluczach webhooków GitHub, podpisywaniu żądań Slack i JSON Web Tokens (HS256).

Konstrukcja HMAC zapewnia krytyczną właściwość, której brakuje zwykłemu haszowaniu: odporność na ataki rozszerzenia długości. Przy samym SHA-256 atakujący znający H(wiadomość) może obliczyć H(wiadomość || dane_atakującego) bez znajomości oryginalnej wiadomości. Struktura podwójnego haszowania HMAC (wewnętrzny i zewnętrzny skrót z różnymi dopełnionymi kluczami) całkowicie zapobiega temu atakowi. Właśnie dlatego schematy podpisywania API używają HMAC zamiast dołączania klucza tajnego do wiadomości i haszowania wyniku.

Dlaczego warto używać generatora HMAC online?

Obliczanie podpisów HMAC zazwyczaj wymaga napisania kodu lub użycia narzędzi wiersza poleceń. Ten przeglądarkowy generator HMAC pozwala tworzyć podpisy HMAC-SHA256, HMAC-SHA384 i HMAC-SHA512 natychmiast, bez instalowania oprogramowania ani przełączania się do terminala.

Natychmiastowe obliczanie HMAC
Wpisz wiadomość i klucz tajny, wybierz algorytm skrótu i otrzymaj podpis HMAC natychmiast. Web Crypto API obsługuje obliczenia natywnie w przeglądarce.
🔒
Przetwarzanie z priorytetem prywatności
Twoja wiadomość i klucz tajny nigdy nie opuszczają urządzenia. Wszystkie obliczenia HMAC wykonywane są lokalnie za pośrednictwem Web Crypto API — żadnych żądań do serwera, żadnych logów, żadnego przechowywania danych.
📋
Obsługa wielu algorytmów
Przełączaj między HMAC-SHA256, HMAC-SHA384 i HMAC-SHA512 jednym kliknięciem. Porównuj wyniki między algorytmami, aby sprawdzić, czy Twoja implementacja backendowa daje zgodne rezultaty.
🔍
Bez konta i instalacji
Działa w każdej nowoczesnej przeglądarce — Chrome, Firefox, Safari, Edge. Bez rejestracji, bez rozszerzeń, bez konfiguracji wiersza poleceń. Otwórz stronę i zacznij generować podpisy HMAC.

Zastosowania generatora HMAC

Programista frontend — weryfikacja podpisów webhooków
Stripe, GitHub i Shopify podpisują ładunki webhooków za pomocą HMAC-SHA256. Użyj tego narzędzia, aby obliczyć oczekiwany podpis z ładunku i klucza tajnego, a następnie porównaj go z podpisem w nagłówku HTTP podczas programowania.
Inżynier backend — podpisywanie żądań API
AWS Signature V4 wymaga HMAC-SHA256 na wielu etapach procesu podpisywania. Generuj referencyjne wartości HMAC podczas programowania, aby debugować niezgodności podpisów i weryfikować pośrednie kroki obliczeń.
DevOps — walidacja rotacji kluczy tajnych
Przy rotacji kluczy tajnych webhooków lub kluczy podpisywania API oblicz podpisy HMAC zarówno ze starym, jak i nowym kluczem, aby potwierdzić, że aplikacja poprawnie obsługuje przejście, zanim stary klucz wygaśnie.
Inżynier QA — wektory testowe podpisów
Generuj wektory testowe HMAC ze znanych danych wejściowych i kluczy, aby budować testy regresyjne dla oprogramowania pośredniczącego uwierzytelniania. Sprawdź, czy implementacja poprawnie obsługuje puste wiadomości, wejście Unicode i długie klucze.
Inżynier danych — uwierzytelnianie wiadomości w potoku
Dołączaj podpisy HMAC do wiadomości w potokach sterowanych zdarzeniami (Kafka, SQS), aby weryfikować, że wiadomości nie zostały naruszone podczas tranzytu między usługami.
Student — zajęcia z kryptografii
Eksperymentuj z HMAC, aby zrozumieć, jak zmiana pojedynczego znaku w wiadomości lub kluczu produkuje zupełnie inny podpis. Porównaj wynik HMAC z wynikiem zwykłego SHA-256, aby zaobserwować różnicę, jaką wprowadza klucz tajny.

HMAC kontra zwykły skrót kontra szyfrowanie

HMAC, zwykłe haszowanie i szyfrowanie służą różnym celom. HMAC zapewnia uwierzytelnianie wiadomości — dowód, że wiadomość została utworzona przez osobę posiadającą klucz tajny i nie została zmodyfikowana. Zwykły skrót zapewnia integralność, ale nie uwierzytelnienie. Szyfrowanie zapewnia poufność. Poniższa tabela wyjaśnia różnice.

WłaściwośćHMACPlain HashEncryption
PurposeMessage authentication + integrityData integrity only (no key)Confidentiality + integrity
Requires secret keyYesNoYes
Verifiable byParties who share the secretAnyoneRecipient with key
ReversibleNo — digest onlyNo — digest onlyYes — decryption recovers data
Output sizeDepends on hash (e.g. 256 bits)Depends on hashVariable (ciphertext)
StandardRFC 2104FIPS 180-4NIST SP 800-38A (AES)
Use case exampleWebhook signature verificationFile checksum verificationEncrypting data at rest

Porównanie algorytmów HMAC

HMAC może używać dowolnej funkcji skrótu, ale wybór leżącego u podstaw algorytmu determinuje rozmiar wyniku, poziom bezpieczeństwa i zgodność z przeglądarką. HMAC-SHA256 jest najczęstszym wyborem dla nowych systemów. Poniższa tabela porównuje warianty, z którymi możesz się spotkać.

AlgorytmRozmiar skrótuDługość hexWeb Crypto APINajlepszy do
HMAC-SHA256256 bits64 hex charsYesAPI signing, webhooks, JWT (HS256)
HMAC-SHA384384 bits96 hex charsYesTLS 1.3 PRF, CNSA compliance
HMAC-SHA512512 bits128 hex charsYesHigh-security signatures, HKDF
HMAC-SHA1160 bits40 hex charsYesLegacy OAuth 1.0, TOTP (RFC 6238)
HMAC-MD5128 bits32 hex charsNoLegacy only — not recommended

Jak działa HMAC wewnętrznie

HMAC stosuje leżącą u podstaw funkcję skrótu dwukrotnie, z dwoma różnymi stałymi dopełnienia wyprowadzonymi z klucza. Konstrukcja jest zdefiniowana w RFC 2104 i udowodniono, że jest PRF (pseudolosową funkcją) w oparciu o standardowe założenia kryptograficzne. Klucz jest najpierw dopełniany lub haszowany, aby dopasować rozmiar bloku funkcji skrótu (64 bajty dla SHA-256, 128 bajtów dla SHA-512).

HMAC(K, m) = H((K' ⊕ opad) || H((K' ⊕ ipad) || m))
where K' = key padded to block size, ipad = 0x36, opad = 0x5C

Algorytm XORuje dopełniony klucz ze stałą wewnętrzną (ipad, 0x36 powtórzony), konkatenuje go z wiadomością i haszuje wynik. Następnie XORuje dopełniony klucz ze stałą zewnętrzną (opad, 0x5C powtórzony), konkatenuje go z wynikiem wewnętrznego skrótu i ponownie haszuje. Ta struktura podwójnego haszowania uniemożliwia ataki rozszerzenia długości i zapewnia, że wynik HMAC nie może być obliczony bez znajomości klucza tajnego.

Przykłady kodu HMAC

HMAC jest obsługiwany natywnie w każdym głównym języku i środowisku uruchomieniowym. Web Crypto API udostępnia HMAC-SHA256, HMAC-SHA384 i HMAC-SHA512 w przeglądarkach bez żadnych bibliotek. Poniższe przykłady pokazują wzorce użycia w praktyce, w tym weryfikację webhooków i porównanie w stałym czasie.

JavaScript (Web Crypto API)
async function hmacSHA256(message, secret) {
  const enc = new TextEncoder()
  const key = await crypto.subtle.importKey(
    'raw', enc.encode(secret),
    { name: 'HMAC', hash: 'SHA-256' },
    false, ['sign']
  )
  const sig = await crypto.subtle.sign('HMAC', key, enc.encode(message))
  return Array.from(new Uint8Array(sig))
    .map(b => b.toString(16).padStart(2, '0')).join('')
}

await hmacSHA256('hello world', 'my-secret-key')
// → "90eb182d8396f16d4341d582047f45c0a97d73388c5377d9ced478a2212295ad"

// Node.js (built-in crypto module)
const crypto = require('crypto')
crypto.createHmac('sha256', 'my-secret-key')
  .update('hello world').digest('hex')
// → "90eb182d8396f16d4341d582047f45c0a97d73388c5377d9ced478a2212295ad"
Python
import hmac
import hashlib

# HMAC-SHA256
sig = hmac.new(
    b'my-secret-key',
    b'hello world',
    hashlib.sha256
).hexdigest()
print(sig)
# → "90eb182d8396f16d4341d582047f45c0a97d73388c5377d9ced478a2212295ad"

# Verify a webhook signature (constant-time comparison)
expected = "90eb182d8396f16d4341d582047f45c0a97d73388c5377d9ced478a2212295ad"
received = hmac.new(b'my-secret-key', b'hello world', hashlib.sha256).hexdigest()
if hmac.compare_digest(expected, received):
    print("Signature valid")

# HMAC-SHA512
hmac.new(b'key', b'data', hashlib.sha512).hexdigest()
Go
package main

import (
    "crypto/hmac"
    "crypto/sha256"
    "fmt"
)

func main() {
    mac := hmac.New(sha256.New, []byte("my-secret-key"))
    mac.Write([]byte("hello world"))
    sig := mac.Sum(nil)
    fmt.Printf("%x\n", sig)
    // → 90eb182d8396f16d4341d582047f45c0a97d73388c5377d9ced478a2212295ad

    // Verify: use hmac.Equal for constant-time comparison
    expected := mac.Sum(nil)
    fmt.Println(hmac.Equal(sig, expected)) // true
}
CLI (OpenSSL)
# HMAC-SHA256
echo -n "hello world" | openssl dgst -sha256 -hmac "my-secret-key"
# → SHA2-256(stdin)= 90eb182d8396f16d4341d582047f45c0a97d73388c5377d9ced478a2212295ad

# HMAC-SHA512
echo -n "hello world" | openssl dgst -sha512 -hmac "my-secret-key"

# Verify a file signature
openssl dgst -sha256 -hmac "my-secret-key" release.tar.gz

# HMAC with hex key (e.g. from a webhook secret)
echo -n "payload" | openssl dgst -sha256 -hmac "$(echo -n '736563726574' | xxd -r -p)"

Często zadawane pytania

Jaka jest różnica między HMAC a zwykłym skrótem?
Zwykły skrót (SHA-256, MD5) przyjmuje tylko wiadomość jako wejście i produkuje skrót, który może obliczyć każdy. HMAC przyjmuje zarówno wiadomość, jak i klucz tajny, produkując podpis, który może wygenerować lub zweryfikować tylko osoba posiadająca klucz. Oznacza to, że HMAC zapewnia uwierzytelnianie (dowód tożsamości nadawcy) oprócz sprawdzania integralności. Zwykły skrót dowodzi jedynie, że dane nie zostały zmienione, ale nie wskazuje, kto je wyprodukował.
Czy HMAC-SHA256 jest bezpieczny?
Tak. HMAC-SHA256 jest uważany za bezpieczny w 2026 roku. Jego bezpieczeństwo opiera się na pseudolosowych właściwościach SHA-256 i samej konstrukcji HMAC (RFC 2104). Nie zademonstrowano żadnego praktycznego ataku na HMAC-SHA256. Nawet HMAC-MD5 i HMAC-SHA1 pozostają bezpieczne w praktyce, ponieważ bezpieczeństwo HMAC nie wymaga pełnej odporności na kolizje leżącej u podstaw funkcji skrótu, choć dla nowych systemów zalecane są warianty SHA-2.
Dlaczego webhooki używają HMAC zamiast szyfrowania ładunku?
Ładunki webhooków zazwyczaj zawierają dane, których odbiorca już się spodziewa — szczegóły zamówień, powiadomienia o zdarzeniach, aktualizacje statusu. Celem nie jest ukrycie danych (poufność), lecz udowodnienie, że pochodzą od uprawnionego nadawcy i nie zostały zmodyfikowane w tranzycie (autentyczność i integralność). HMAC osiąga to przy minimalnym narzucie: nadawca oblicza HMAC ładunku z kluczem tajnym i umieszcza go w nagłówku HTTP. Odbiorca ponownie oblicza HMAC i porównuje. Szyfrowanie dodałoby zbędną złożoność i obciążenie zarządzaniem kluczami.
Jak bezpiecznie porównywać podpisy HMAC?
Zawsze używaj funkcji porównywania w stałym czasie. W Pythonie użyj hmac.compare_digest(). W Node.js użyj crypto.timingSafeEqual(). W Go użyj hmac.Equal(). Standardowe operatory porównywania ciągów (== lub ===) mogą ujawniać informacje o czasie: atakujący może mierzyć, jak długo trwa porównanie, aby ustalić, ile bajtów sfałszowanego podpisu zgadza się z prawidłowym, a następnie metodą brute-force odgadywać pozostałe bajty jeden po drugim.
Czy HMAC można odwrócić, aby odzyskać klucz tajny?
Nie. HMAC opiera się na jednokierunkowej funkcji skrótu, więc nie istnieje matematyczny skrót pozwalający wydobyć klucz z wyniku HMAC. Atakujący musiałby przeszukiwać przestrzeń kluczy metodą brute-force, co jest niewykonalne dla kluczy o długości 128 bitów lub dłuższych. Jednak słabe lub krótkie klucze (jak proste hasła) mogą być podatne na ataki słownikowe, dlatego zawsze używaj kryptograficznie losowych kluczy o długości co najmniej 256 bitów dla HMAC-SHA256.
Co się dzieje, gdy klucz HMAC jest dłuższy niż rozmiar bloku funkcji skrótu?
Jeśli klucz tajny jest dłuższy niż rozmiar bloku funkcji skrótu (64 bajty dla SHA-256, 128 bajtów dla SHA-512), algorytm HMAC najpierw haszuje klucz leżącą u podstaw funkcją skrótu, aby skrócić go do długości wyjściowej skrótu, a następnie używa tego skrótu jako efektywnego klucza. Oznacza to, że bardzo długie klucze nie zapewniają dodatkowego bezpieczeństwa ponad rozmiar wyjściowy skrótu. Dla HMAC-SHA256 klucze dłuższe niż 64 bajty są haszowane do 32 bajtów i nie oferują poprawy bezpieczeństwa względem klucza 64-bajtowego; klucze do 64 bajtów są używane w pełnej długości.
Kiedy powinienem używać HMAC-SHA512 zamiast HMAC-SHA256?
Używaj HMAC-SHA512, gdy protokół tego wymaga (niektóre funkcje derywacji kluczy, jak HKDF-SHA512, generowanie kluczy Ed25519), gdy potrzebujesz szerszego podpisu dla głębszej ochrony, lub gdy działasz na sprzęcie 64-bitowym, gdzie SHA-512 jest faktycznie szybszy niż SHA-256. Dla większości aplikacji internetowych, podpisywania API i weryfikacji webhooków HMAC-SHA256 zapewnia wystarczające bezpieczeństwo i jest częstszym wyborem w różnych ekosystemach.