Zum Inhalt springen
ecdsa.com

HMAC

Der schlüsselabhängige, hashbasierte Message Authentication Code aus RFC 2104 und FIPS 198-1, berechnet als H((K ⊕ opad) ‖ H((K ⊕ ipad) ‖ m)), der jedem, der den geheimen Schlüssel kennt, Integrität und Herkunft beweist.
Auch geschrieben alsHMAC-SHA256keyed-hash message authentication codeHMAC-SHA1

HMAC funktioniert mit jedem Hash (HMAC-SHA256 liefert ein 32-Byte-Tag) und bleibt sogar mit Hashes sicher, deren Kollisionsresistenz gebrochen ist; deshalb taucht HMAC-SHA1 noch in TOTP auf. Schlüssel, die länger als die Blockgröße des Hashes sind (64 Byte bei SHA-256), werden zuerst gehasht, kürzere mit Nullen aufgefüllt; ein Schlüssel sollte mindestens so viele Bit Entropie haben wie das angestrebte Sicherheitsniveau. RFC 7518 §3.2 verlangt für HS256 Schlüssel mit mindestens 256 Bit.

Einsatzgebiete: JWT mit HS256/HS384/HS512, Webhook-Signaturen (etwa X-Hub-Signature-256 bei GitHub und Stripe-Signature bei Stripe), das Signieren von Anfragen mit AWS Signature Version 4, das Innenleben von HKDF und PBKDF2, Record-MACs in TLS 1.2 sowie TOTP- und HOTP-Codes. Vergleiche Tags mit einer zeitkonstanten Funktion.

Ein HMAC ist keine Signatur: Jeder Verifizierer besitzt denselben Schlüssel und hätte das Tag selbst erzeugen können, deshalb bietet ein HMAC keine Nichtabstreitbarkeit und taugt nicht, wenn Verifizierer keine Tokens ausstellen können sollen. Der HMAC-Rechner berechnet und prüft Tags lokal.

Standards und Quellen

Alle Begriffe