HMAC (Hash-based Message Authentication Code)
Kryptographischer Mechanismus zur Integritätsprüfung und Authentifizierung von Nachrichten: kombiniert eine Nachricht mit einem geheimen Schlüssel in einer Hash-Funktion, sodass nur Parteien mit dem Schlüssel den Code verifizieren können.
HMAC (Hash-based Message Authentication Code) ist ein Mechanismus für die gleichzeitige Prüfung von Integrität (wurde die Nachricht verändert?) und Authentizität (kommt die Nachricht vom erwarteten Absender?). Er kombiniert eine kryptographische Hash-Funktion mit einem geheimen Schlüssel.
Wie HMAC funktioniert
HMAC(K, M) = H(K XOR opad || H(K XOR ipad || M))
Wobei:
K = geheimer Schlüssel
M = Nachricht
H = Hash-Funktion (z.B. SHA-256)
ipad = innerer Pad (0x36 wiederholt)
opad = äußerer Pad (0x5c wiederholt)
Praktisch: HMAC berechnet aus Schlüssel + Nachricht einen deterministischen “Fingerabdruck”. Nur wer den gleichen Schlüssel kennt, kann:
- Einen gültigen HMAC berechnen
- Einen empfangenen HMAC verifizieren
HMAC vs. einfache Hash-Funktion
Problem mit einfachem Hash: SHA-256(Nachricht) - jeder kann den Hash berechnen und bei einer manipulierten Nachricht einen neuen gültigen Hash erstellen.
HMAC-Lösung: HMAC-SHA256(Schlüssel, Nachricht) - ohne den geheimen Schlüssel kann niemand einen gültigen MAC erstellen oder verifizieren.
Length Extension Attack: Bestimmte Hash-Funktionen (MD5, SHA-1, SHA-256) sind anfällig für Length Extension Attacks. HMAC schützt dagegen durch seine doppelte Hash-Struktur.
Verwendung in der Praxis
API-Signaturen: Fast alle modernen APIs (AWS, Stripe, GitHub Webhooks, Twilio) nutzen HMAC-SHA256 zur Request-Authentifizierung:
Signature = HMAC-SHA256(API_SECRET, timestamp + method + path + body)
JWT (JSON Web Tokens): HMAC-SHA256 (HS256) ist einer der häufigsten JWT-Signing-Algorithmen - obwohl für kritische Anwendungen asymmetrische Signaturen (RS256, ES256) bevorzugt werden sollten.
DKIM: Email-Signierung nutzt HMAC-ähnliche Signaturen mit privaten Schlüsseln.
TLS: HMAC wird im TLS-Record-Layer für die Nachrichtenintegrität verwendet (in TLS 1.2; TLS 1.3 nutzt AEAD-Modi die MAC integriert haben).
Passwort-Hashing-Algorithmen: PBKDF2 (Password-Based Key Derivation Function 2) nutzt HMAC intern für seine Iteration.
Sicherheitsempfehlungen
- HMAC-SHA-256 oder HMAC-SHA-512 verwenden (MD5 und SHA-1 sind veraltet)
- Schlüssel mindestens so lang wie die Hash-Ausgabe (256 Bit für SHA-256)
- Schlüssel regelmäßig rotieren
- Constant-time Vergleich beim Verifizieren (verhindert Timing-Angriffe)
- Nicht HMAC für Passwort-Hashing verwenden - dafür bcrypt/Argon2 nutzen
HMAC vs. Digitale Signatur
| HMAC | Digitale Signatur | |
|---|---|---|
| Schlüsseltyp | Symmetrisch (gleicher Schlüssel) | Asymmetrisch (privat/öffentlich) |
| Geschwindigkeit | Sehr schnell | Langsamer |
| Nicht-Abstreitbarkeit | Nein (beide Parteien kennen den Schlüssel) | Ja (nur Sender hat privaten Schlüssel) |
| Typischer Einsatz | API-Auth, Integrität zwischen zwei vertrauenden Parteien | Digitale Dokumente, Zertifikate, Code Signing |