HMAC
HMAC ist ein schlüsselbasierter Nachrichtenauthentifizierungscode auf Basis einer kryptografischen Hashfunktion.
Definition
HMAC steht für Hash-based Message Authentication Code. Es kombiniert einen geheimen Schlüssel mit einer kryptografischen Hashfunktion und erzeugt ein Authentifizierungstag fester Größe für eine Nachricht.
Ein Prüfer mit demselben geheimen Schlüssel berechnet das Tag über die exakten Nachrichtenbytes erneut und vergleicht es mit dem empfangenen Tag. Eine Übereinstimmung zeigt, dass die Nachricht nicht verändert wurde und das Tag von jemandem stammt, der den gemeinsamen Schlüssel kennt.
Funktionsweise
HMAC hasht Schlüssel und Nachricht in zwei verschachtelten Schritten mit unterschiedlichen Padding-Konstanten. Diese Konstruktion ist sicherer als ein einfaches hash(key || message), das bei manchen Hashfunktionen angreifbar sein kann.
Die gewählte Hashfunktion bestimmt die Tag-Länge: HMAC-SHA256 erzeugt 32 Bytes, meist als 64 Hexadezimalzeichen geschrieben. HMAC-SHA512 und HMAC-SHA384 erzeugen längere Tags; HMAC-SHA1 bleibt hauptsächlich aus Kompatibilitätsgründen im Einsatz.
Einsatz und Grenzen
HMAC wird für API-Signaturen, Webhooks, Sitzungsdaten, JWT HS256 und Protokollnachrichten genutzt, wenn beide Seiten bereits ein Geheimnis teilen. Es bietet Integrität und Authentifizierung, aber keine Vertraulichkeit: Die Nachricht selbst wird nicht verborgen.
Verwenden Sie einen zufälligen geheimen Schlüssel, bewahren Sie die exakten signierten Bytes und vergleichen Sie Tags im Anwendungscode in konstanter Zeit. Für öffentliche Prüfung ohne gemeinsames Geheimnis braucht man eine digitale Signatur.
Nein. HMAC authentifiziert eine Nachricht, verbirgt sie aber nicht. Wenn die Nachricht vertraulich sein muss, ist zusätzlich Verschlüsselung nötig.
Ein einfacher Hash hat keinen geheimen Schlüssel; jeder kann die Nachricht ändern und einen neuen Hash berechnen. HMAC benötigt das gemeinsame Geheimnis, um ein gültiges Tag zu erzeugen.
Nein. Die Prüfung berechnet das Tag aus der ursprünglichen Nachricht und dem geheimen Schlüssel erneut; aus dem Tag werden diese Werte nicht wiederhergestellt.