HMAC-Generator

HMAC ist der Algorithmus hinter den meisten signierten Webhooks, AWS Signature v4-Headern und JWT HS256-Token. Geben Sie eine Nachricht und einen geheimen Schlüssel ein, wählen Sie eine Hash-Familie aus, und dieser Generator erzeugt das HMAC genau wie in RFC 2104 spezifiziert, nützlich zur Überprüfung dessen, was Ihr Backend senden wird, oder zur Reproduktion einer Signatur, die Sie von einer API erhalten haben.

So berechnen Sie ein HMAC

  1. 1

    Fügen Sie die Nachricht ein

    Die genauen Bytes, die signiert werden sollen, eine Webhook-Nutzlast, eine kanonische Anfrage oder irgendeine Zeichenfolge.

  2. 2

    Geben Sie den geheimen Schlüssel ein

    Kann Text oder Hex sein. Der Generator füllt ihn auf oder hasht ihn auf die Blockgröße gemäß der RFC.

  3. 3

    Wählen Sie den Hash-Algorithmus

    SHA-256 ist der Standard; wählen Sie SHA-1, SHA-384, SHA-512 oder MD5 für die Abwärtskompatibilität.

  4. 4

    Kopieren Sie die Signatur

    Die Ausgabe ist hexadezimal in Kleinbuchstaben und kann direkt in eine Webhook-Konfiguration oder einen Autorisierungsheader eingefügt werden.

HMAC im Hintergrund

HMAC umschließt eine einfache Hash-Funktion in einer schlüsselbasierten Konstruktion, sodass die Signatur ohne den Schlüssel nicht gefälscht werden kann.

Das RFC 2104 Rezept

HMAC(k, m) = H((k' ⊕ opad) ∥ H((k' ⊕ ipad) ∥ m))

wobei k' der auf die Hash-Blockgröße aufgefüllte Schlüssel ist, opad = 0x5c wiederholt und ipad = 0x36 wiederholt.

Algorithmus-Auswahl

Algorithmus Blockgröße Ausgabelänge Empfohlen für
HMAC-SHA-256 64 Bytes 32 Bytes Moderner Standard, Webhook-Signierung
HMAC-SHA-384 128 Bytes 48 Bytes Höhere Sicherheit bei API-Signierungen
HMAC-SHA-512 128 Bytes 64 Bytes Langfristige Tokens
HMAC-SHA-1 64 Bytes 20 Bytes Legacy (AWS S3 v2, OAuth 1.0)
HMAC-MD5 64 Bytes 16 Bytes Nur Legacy; vermeiden für neue Arbeiten

Wo HMAC auftaucht

  • GitHub, Stripe, Shopify Webhooks: Header X-Hub-Signature-256, Stripe-Signature usw.
  • AWS Signature v4: eine Kette von HMAC-SHA256 über die kanonische Anfrage.
  • JWT HS256: die Token-Signatur ist HMAC-SHA-256(header.payload, secret).
  • Passwort-Zurücksetz-Token: HMAC über user_id + Ablauf + ein Site-Geheimnis.

Häufige Fehler

  • Einen hex-kodierten Schlüssel als Text übergeben, anstatt ihn zuerst in Bytes zu dekodieren.
  • Falsche Nutzlast-Bytes signieren: einige Webhooks signieren den rohen Anfragekörper einschließlich Leerzeichen, andere signieren eine kanonische Form.
  • == in JavaScript oder Python verwenden, um Signaturen zu vergleichen; immer einen zeit-sicheren Vergleich verwenden, um zeitliche Angriffe zu widerstehen.

Häufig gestellte Fragen

Fast immer, weil sich die Nachrichtenbytes unterscheiden. Das Signieren des JSON-parsed Körpers führt zu Leerzeichenänderungen; signieren Sie den rohen Anfragekörper. Überprüfen Sie auch, ob der Schlüssel auf beiden Seiten gleich dekodiert wird (Hex vs. rohe Bytes).

Ja. Wenn der Schlüssel kürzer als die Hash-Blockgröße ist, wird er mit Nullen aufgefüllt; wenn er länger ist, wird er zuerst gehasht. RFC 2104 empfiehlt Schlüssel, die mindestens so lang sind wie die Ausgabe (32 Bytes für SHA-256).

HMAC ist immer noch resistent gegen bekannte MD5-Kollisionsangriffe, da der Angriff nicht auf die HMAC-Konstruktion übergreift. Verwenden Sie jedoch HMAC-SHA-256 für neuen Code, Werkzeuge und Prüfer erwarten dies.

Ja. Die Nachricht und der geheime Schlüssel werden über eine verschlüsselte HTTPS-Verbindung an unseren Server gesendet, damit das HMAC berechnet werden kann. Sie werden nur für die Berechnung verwendet und weder gespeichert noch protokolliert.

Verwandte Tools

Tool in anderen Sprachen verfügbar