Erstellen Sie HMAC-SHA256-Signaturen lokal mit dem HMAC-Generator. Geheimnis und Nachricht verlassen nie Ihren Browser.
Was HMAC tatsächlich ist
HMAC (Hash-based Message Authentication Code) ist ein Schlüssel-Hash. Er kombiniert ein Geheimnis und eine Nachricht zu einer Signatur fester Länge, die von beiden abhängt.
Da das Geheimnis in die Berechnung einfließt, kann nur jemand, der es kennt, die Signatur erzeugen oder prüfen. Das macht HMAC zum Standard für API-Authentifizierung, Webhook-Prüfung und signierte Payloads.
HMAC ist keine Verschlüsselung: Die Signatur verbirgt nichts, und wer eine signierte Anfrage abfängt, kann die Nachricht vollständig lesen. HMAC liefert Authentifizierung und Integrität – den Nachweis, dass die Nachricht von jemandem mit dem Geheimnis stammt und nicht verändert wurde.
Wann Sie HMAC-Signaturen brauchen
Die häufigsten Fälle sind Webhooks und API-Anfragen. Wenn ein Anbieter ein Ereignis an Ihren Endpunkt sendet, bestätigt die Signatur, dass der Payload echt ist, bevor Sie darauf reagieren. Wenn ein Client Ihre API aufruft, beweist eine signierte Anfrage, dass der Aufrufer das Geheimnis kennt, ohne es zu senden.
- Webhooks: Der Empfänger prüft die Signatur, um den Absender zu verifizieren
- API-Authentifizierung: Clients signieren Anfragen mit einem gemeinsamen Geheimnis statt eines Passworts
- Integritätsprüfungen: Manipulation von Nachrichten zwischen Diensten erkennen
- Replay-Schutz: Nachrichten mit Zeitstempel oder Nonce signieren
Eine HMAC-SHA256-Signatur erstellen
An der Kanonisierung scheitern Integrationen am häufigsten. Als ich die erste Webhook-Prüfung eingerichtet habe, schlug jede Signatur fehl, weil der Absender einen Zeilenumbruch mehr sendete, als meine Seite erwartete. Die Lösung war eine Einigung auf die exakten Bytes: gleiche JSON-Schlüsselreihenfolge, gleiche Maskierung, gleiche Zeilenumbrüche.
// Beispiel: kanonische Zeichenkette und HMAC-SHA256 in Node.jsconst canonical = [method, path, timestamp, body].join('\n');const signature = crypto.createHmac('sha256', secret).update(canonical).digest('hex');- Öffnen Sie den HMAC-Generator in Ihrem Browser.
- Wählen Sie SHA-256 als Algorithmus.
- Fügen Sie Ihren geheimen Schlüssel ein. Bei Bedarf mit dem Passwort-Generator erzeugen.
- Fügen Sie die exakte Nachricht oder den Payload ein, den Sie signieren möchten – Byte für Byte.
- Kopieren Sie die Signatur und hängen Sie sie an die Anfrage an, z. B. als Authorization- oder X-Signature-Header.
Warnung: Die Signatur ändert sich, wenn sich auch nur ein Byte der Nachricht ändert. Der exakt signierte String muss dem der Gegenseite entsprechen; Zeilenumbrüche und Leerzeichen zählen.
Signaturen auf der Empfängerseite sicher prüfen
Verifikation ist eine zweite HMAC-Berechnung mit demselben Geheimnis und derselben Nachricht, verglichen mit der empfangenen Signatur.
Der Vergleich muss in konstanter Zeit erfolgen. Ein normaler String-Vergleich kann Zeitinformationen leaken, die Angreifern das Fälschen erleichtern.
Ein normaler Vergleich stoppt beim ersten abweichenden Zeichen; die Antwortzeit verrät, wie nah der Angreifer schon dran ist. Mit genügend Messungen lässt sich die Signatur Zeichen für Zeichen rekonstruieren, während ein Vergleich in konstanter Zeit immer dieselben Operationen ausführt.
// Node.js: Konstant-Zeit-Vergleichconst crypto = require('crypto');const expected = Buffer.from(signature, 'hex');const received = Buffer.from(given, 'hex');const valid = expected.length === received.length && crypto.timingSafeEqual(expected, received);Typische HMAC-Fehler
- Das Geheimnis in clientseitigem Code hartkodieren, wo jeder es lesen kann
- Nur den Body signieren, nicht Methode, Pfad und Zeitstempel – Replay-Angriffe werden möglich
- Signaturvergleich mit == oder String-Vergleich statt Konstant-Zeit-Funktion
- Dasselbe Geheimnis in mehreren Umgebungen nutzen oder nie rotieren
- Signatur in ein Tool einfügen, das das Geheimnis mitprotokolliert
- Die kanonische Zeichenkette anders aufbauen als der Empfänger, etwa mit anderer JSON-Schlüsselreihenfolge oder abschließenden Leerzeichen
- Signatur-Bytes in verschiedenen Kodierungen vergleichen, etwa Hex auf der einen und Base64 auf der anderen Seite
FAQ
Q.Sollte das HMAC-Geheimnis im Client-Code liegen?
A.Nein. Alles, was im Browser ausgeliefert wird, ist lesbar: Mit den Entwicklerwerkzeugen ist das Geheimnis sofort sichtbar. Bewahren Sie Geheimnisse in serverseitigen Umgebungsvariablen oder einem Secret Manager auf und signieren Sie Anfragen serverseitig. Clientseitige Signierung hält nur Gelegenheitsmanipulation ab; ein Browser-Tool eignet sich zum Erzeugen und Testen von Signaturen während der Entwicklung, nicht zum Schützen eines Produktiv-Endpunkts.
Q.Ist HMAC eine Verschlüsselung?
A.Nein. HMAC ist ein Schlüssel-Hash für Authentifizierung und Integrität: Er belegt, wer die Nachricht gesendet hat und dass sie unverändert ist, aber die Nachricht selbst bleibt lesbar. Jeder, der die signierte Anfrage sieht, kann ihren vollständigen Inhalt lesen. Wenn auch Vertraulichkeit zählt, verschlüsseln Sie den Payload mit AES-GCM oder verlassen Sie sich für die Übertragung auf TLS.
Q.Kann eine HMAC-Signatur umgekehrt werden?
A.Es gibt keinen praktikablen Weg. HMAC ist eine Einwegfunktion, und das Geheimnis taucht nie in der Signatur auf; viele gesammelte Paare aus Nachricht und Signatur verraten es nicht. Der Aufwand verlagert sich auf das Erraten des Geheimnisses – deshalb zählt die Schlüssellänge: Ein zufälliges 256-Bit-Geheimnis ist für Brute-Force-Angriffe praktisch unerreichbar. Schützen Sie das Geheimnis selbst und rotieren Sie es regelmäßig.
Referenzen
- RFC 2104 – HMAC: Keyed-Hashing for Message Authentication: https://www.rfc-editor.org/rfc/rfc2104
- NIST FIPS 198-1 – The Keyed-Hash Message Authentication Code (HMAC): https://csrc.nist.gov/pubs/fips/198-1/final
- RFC 7515 – JSON Web Signature (JWS): https://www.rfc-editor.org/rfc/rfc7515
- OWASP Secrets Management Cheat Sheet: https://cheatsheetseries.owasp.org/cheatsheets/Secrets_Management_Cheat_Sheet.html
Signatur erstellen
HMAC-SHA256, SHA-1 oder MD5 im Browser; Ihr Schlüssel verlässt nie das Gerät.
Signieren, was Sie senden – in konstanter Zeit prüfen
Signieren Sie exakt die Bytes, die beide Seiten erwarten, hängen Sie die Signatur als Header an und lehnen Sie Anfragen mit alten Zeitstempeln ab.
Vergleichen Sie Signaturen mit einer Konstant-Zeit-Funktion, halten Sie das Geheimnis serverseitig und erzeugen Sie Signaturen lokal mit dem HMAC-Generator.
Beginnen Sie klein: Signieren Sie einen Endpunkt, prüfen Sie die Signatur auf der Empfängerseite und rotieren Sie den Schlüssel, sobald der Ablauf steht. Die Mechanik ist einfach, sobald die kanonische Zeichenkette geklärt ist.