Anleitung
- Geben Sie den geheimen Schlüssel ein und wählen Sie aus, ob er als Klartext oder als Hex-Bytes vorliegt.
- Fügen Sie die Nachricht ein, zum Beispiel den unveränderten Inhalt eines Webhook-Aufrufs.
- Wählen Sie den Algorithmus und die Ausgabe-Kodierung Ihres Dienstes. Der HMAC wird während der Eingabe aktualisiert.
- Um eine Signatur zu prüfen, fügen Sie sie in das Prüffeld ein und achten Sie auf „Stimmt überein“.
So funktioniert es
HMAC (RFC 2104) kombiniert einen geheimen Schlüssel mit einer Hashfunktion, um eine Signatur zu erzeugen, die nur jemand mit diesem Schlüssel erstellen kann. Dienste wie Webhooks und signierte API-Anfragen senden mit jeder Nachricht einen HMAC, damit der Empfänger prüfen kann, ob die Nachricht authentisch und unverändert ist.
Dieses Tool verwendet die Web Crypto API Ihres Browsers (crypto.subtle.importKey und sign) und wurde anhand der Testvektoren aus RFC 4231 und RFC 2202 geprüft. Ein Textschlüssel und die Nachricht werden als UTF-8 kodiert. Ein Hexschlüssel wird in rohe Bytes umgewandelt; Leerzeichen, Doppelpunkte und ein vorangestelltes 0x werden ignoriert. HMAC-SHA-256 ist die gängigste Wahl; HMAC-SHA-1 gilt als MAC weiterhin als sicher, wird aber hauptsächlich von älteren APIs verwendet.
Wenn Ihre Signatur nicht übereinstimmt, prüfen Sie die häufigsten Abweichungen: die exakten Nachrichtenbytes (viele Webhook-Anbieter signieren den rohen Inhalt und nicht neu formatiertes JSON), einen Zeitstempel oder Präfix, den der Anbieter der signierten Zeichenfolge hinzufügt, ob der Schlüssel als Text verwendet oder zuerst aus Hex oder Base64 dekodiert werden muss und ob die erwartete Signatur als Hex oder Base64 vorliegt und ein Präfix wie „sha256=“ enthält, das Sie vor dem Vergleich entfernen sollten.
Beispiele
RFC 4231-Testfall
Mit dem Schlüssel „Jefe“ (Text), der Nachricht „what do ya want for nothing?“ und HMAC-SHA-256 ergibt sich 5bdcc146bf60754e6a042426089575c75a003f089d2739839dec58b964ec3843. Wählen Sie „Beispiel ausprobieren“, um die Werte zu laden.
Webhook-Signatur prüfen
Ein Anbieter sendet mit jeder Anfrage den Header X-Signature: sha256=… . Fügen Sie den rohen Anfrageinhalt als Nachricht und Ihr Webhook-Geheimnis als Schlüssel ein, wählen Sie HMAC-SHA-256 und Hex und fügen Sie dann den Wert nach „sha256=“ in das Prüffeld ein.
Hex-kodierter Schlüssel
Manche Systeme geben Schlüssel als Hex-Zeichenfolgen aus, zum Beispiel 0b0b0b… . Wählen Sie „Hex“ als Schlüsselformat, damit das Tool mit den dekodierten Bytes signiert. Wird dieselbe Zeichenfolge als Text behandelt, ergibt sich ein völlig anderes Ergebnis.
Häufig gestellte Fragen
Was ist der Unterschied zwischen einem HMAC und einem einfachen Hash?
Jeder kann einen einfachen Hash wie SHA-256 einer Nachricht berechnen. Ein HMAC hängt zusätzlich von einem geheimen Schlüssel ab. Daher kann ihn nur jemand mit diesem Schlüssel erstellen oder überprüfen. So wird nachgewiesen, dass die Nachricht von jemandem mit dem Schlüssel stammt und nicht verändert wurde.
Warum stimmt mein HMAC nicht mit dem meines Servers überein?
Die Eingabebytes unterscheiden sich fast immer: Zeilenumbrüche, Leerzeichen, die Reihenfolge der JSON-Schlüssel, die Zeichenkodierung oder ein Schlüssel, der aus Hex oder Base64 dekodiert werden muss. Achten Sie auch auf dasselbe Ausgabeformat (Hex oder Base64) und entfernen Sie Präfixe wie „sha256=“.
Wird mein geheimer Schlüssel irgendwohin gesendet?
Nein. Schlüssel und Nachricht werden nur von der Web Crypto API in diesem Browser-Tab verarbeitet. Sie werden weder hochgeladen noch gespeichert oder in die Analysedaten aufgenommen.
Ist HMAC-SHA-1 noch sicher?
Kollisionen bei SHA-1 brechen HMAC-SHA-1 nicht direkt, und der Algorithmus wird aus Kompatibilitätsgründen weiterhin akzeptiert. Verwenden Sie für neue Systeme HMAC-SHA-256 oder einen stärkeren Algorithmus.
Datenschutz
Schlüssel, Nachricht und Ergebnis bleiben in diesem Browser-Tab. Nichts wird hochgeladen, gespeichert oder an Analytics gesendet; lediglich ein anonymes Ereignis zur Nutzung des Tools wird erfasst.