HMAC-Generator

HMAC-Signaturen mit SHA-256, SHA-384, SHA-512 oder SHA-1 erzeugen und prüfen, mit dem Schlüssel als Text, Hex oder Base64.

Das interaktive Formular ist verfügbar, sobald JavaScript aktiviert ist.

So funktioniert es

Geben Sie die Nachricht ein oder fügen Sie sie ein, tragen Sie den geheimen Schlüssel ein und wählen Sie den Algorithmus; die Signatur erscheint während der Eingabe, hexadezimal und in Base64, jeweils mit eigener Schaltfläche „Kopieren“. Sie wird mit der Web-Crypto-API des Browsers berechnet, und nichts wird gesendet.

HMAC, definiert in RFC 2104, verbindet einen geheimen Schlüssel mit einer Hashfunktion. Den SHA-256 einer Nachricht kann jeder berechnen, ihren HMAC aber nur, wer den Schlüssel hat; eine passende Signatur zeigt also, dass die Nachricht von einem Schlüsselinhaber stammt und unterwegs nicht verändert wurde. Die Signatur ist so lang wie der Hash: 32 Byte bei SHA-256, 48 bei SHA-384, 64 bei SHA-512 und 20 bei SHA-1.

Der Schlüssel kann als Text eingegeben werden, der als UTF-8-Bytes verwendet wird, oder hexadezimal bzw. in Base64, wenn ein Dienst ihn so anzeigt: Dieselben Zeichen, in einem anderen Format gelesen, sind ein anderer Schlüssel. Die Nachricht wird genau so signiert, wie sie eingegeben ist; ein geändertes Leerzeichen, ein Zeilenumbruch oder ein Zeichen ändert die ganze Signatur.

Um einen Webhook zu prüfen, fügen Sie den unveränderten Anfragetext als Nachricht, das Geheimnis des Endpunkts als Schlüssel und die empfangene Signatur unter „Zu prüfende Signatur“ ein. GitHub sendet zum Beispiel einen Header X-Hub-Signature-256 mit sha256= und dem hexadezimalen HMAC-SHA256 des Inhalts; das Präfix wird ignoriert. SHA-1 gibt es nur für ältere Systeme: GitHub sendet einen HMAC-SHA1-Header nur noch aus Kompatibilitätsgründen.

Beispiel

Prüft das von GitHub dokumentierte Webhook-Beispiel: Das Geheimnis „It's a Secret to Everybody“ und der Inhalt „Hello, World!“ ergeben die von GitHub veröffentlichte sha256=-Signatur, also passt sie.

  • Jefe · what do ya want for nothing?HMAC-SHA256 5bdcc146…64ec3843: der Testvektor aus RFC 4231.
  • It's a Secret to Everybody · Hello, World!Das von GitHub dokumentierte Beispiel: sha256=757107ea…8b043e17.
  • 0b0b…0b (hex, 20 bytes) · Hi ThereHMAC-SHA256 b0344c61…2e32cff7: Testfall 1 aus RFC 4231, mit dem Schlüssel in Hex.
  • abcdAls Text 4 Byte, als Hex 2 Byte (ab cd): zwei verschiedene Schlüssel und zwei verschiedene Signaturen.

Häufige Fragen

Ist HMAC dasselbe wie ein Hash?

Nein. Ein Hash wie SHA-256 braucht keinen Schlüssel, jeder kann ihn nach einer Änderung der Nachricht neu berechnen. Ein HMAC braucht den geheimen Schlüssel, also kann nur, wer ihn hat, eine gültige Signatur erzeugen.

Warum passt meine Webhook-Signatur nicht?

Meist ist die Nachricht nicht Byte für Byte das, was signiert wurde: Ein Framework hat das JSON eingelesen und neu geschrieben, Leerzeichen entfernt oder die Kodierung geändert. Signieren Sie den unveränderten Inhalt so, wie er ankam, und prüfen Sie, ob das Geheimnis zu diesem Endpunkt gehört und das Schlüsselformat stimmt.

Sollte ich SHA-1 verwenden?

Nur für ein System, das es noch verlangt. Neue Signaturen verwenden SHA-256 oder längere Hashes, und GitHub zum Beispiel behält seinen SHA-1-Signatur-Header nur aus Kompatibilitätsgründen.

Wird mein Schlüssel irgendwohin gesendet?

Nein. Die Signatur wird in Ihrem Browser mit der Web-Crypto-API berechnet. Trotzdem sollten Sie echte Produktionsgeheimnisse in keine Website einfügen, die Sie nicht kontrollieren: Ein Testgeheimnis genügt, um zu sehen, wie Signaturen funktionieren.

Verwandte Werkzeuge