HMAC und Hashing für API-Signaturen: Schutz von Webhooks
Wenn Ihnen ein Drittanbieterdienst Daten per Webhook sendet oder Sie eine API-Anfrage authentifizieren müssen, müssen Sie nachweisen können, dass die Nachricht nicht manipuliert wurde und tatsächlich von demjenigen stammt, der dies behauptet. Hashing allein löst dieses Problem nicht. Sie benötigen HMAC. Den Unterschied zwischen einem einfachen Hash und einem HMAC zu verstehen und zu wissen, wie Signaturen korrekt überprüft werden, ist der Unterschied zwischen einer sicheren und einer kompromittierten Integration.
Was ist ein Hash?
Ein Hash ist eine Einwegfunktion, die jede Eingabe – Text, eine Datei, eine API-Antwort – in eine Zeichenfolge fester Länge umwandelt. Die gleiche Eingabe erzeugt immer die gleiche Ausgabe. Zu den gängigen Hashing-Algorithmen gehören SHA-256, SHA-1 und MD5. Sie können a verwenden Hash-Generator um dies in Aktion zu sehen: „Hallo“ wird immer zum gleichen SHA-256-Hash. Die Schlüsseleigenschaft besteht darin, dass Hashing deterministisch ist, aber nicht rückgängig gemacht werden kann. Sie können die ursprüngliche Eingabe nicht aus dem Hash wiederherstellen.
Was ist HMAC?
HMAC steht für Hash-based Message Authentication Code. Im Gegensatz zu einem einfachen Hash kombiniert HMAC vor dem Hashing eine Nachricht mit einem geheimen Schlüssel. Der Webhook-Anbieter verfügt über einen geheimen Schlüssel, hasht die Nachricht mit diesem Schlüssel und sendet die Nachricht und den Hash an Sie. Sie wiederholen den Vorgang mit demselben geheimen Schlüssel; Wenn Ihr berechneter Hash mit dem gesendeten übereinstimmt, wissen Sie, dass die Nachricht authentisch und unverändert ist. Der HMAC-Generator Mit dem Tool können Sie dies mit Ihrer eigenen Nachricht und Ihrem Geheimnis testen.
Der entscheidende Unterschied: Hash vs. HMAC
Deshalb ist das wichtig:
- Einfacher Hash: Jeder kann Ihre Nachricht sehen und den Hash neu berechnen, um einen „gültigen“ zu fälschen. Es beweist nichts.
- HMAC: Nur jemand mit dem geheimen Schlüssel kann den richtigen HMAC erstellen. Es beweist kryptografisch, dass die Nachricht vom Schlüsselinhaber stammt und nicht verändert wurde.
Wenn Ihnen ein Dienst einen Webhook nur mit einem Hash sendet, kann ein Angreifer ihn abfangen, die Daten ändern und den Hash neu berechnen, ohne dass Sie es bemerken würden. Mit HMAC und einem gemeinsamen Geheimnis kann der Angreifer ohne den Schlüssel keine gültige Signatur fälschen.
Webhook-Signaturen in Ihrem Code überprüfen
Wenn ein Webhook eintrifft, stellt der Dienst die Nachrichtennutzlast und einen Signaturheader (häufig) bereit X-Signature oder X-Webhook-Signature). Ihr Code sollte:
- Rufen Sie Ihren geheimen Schlüssel aus einer sicheren Konfiguration ab (Umgebungsvariablen, ein geheimer Manager).
- Berechnen Sie mithilfe dieses Schlüssels den HMAC-SHA256 des Rohanforderungstexts.
- Vergleichen Sie Ihren berechneten HMAC Byte für Byte mit dem Signatur-Header (verwenden Sie immer einen Vergleich mit konstanter Zeit, um Timing-Angriffe zu verhindern).
- Wenn sie übereinstimmen, ist der Webhook authentisch. Wenn nicht, lehnen Sie es ab.
Die meisten Webhook-Anbieter dokumentieren ihren HMAC-Algorithmus und das genaue zu signierende Format – manchmal ist es der rohe JSON-Body, manchmal ein mit dem Body verketteter Zeitstempel. Befolgen Sie ihre Spezifikationen genau.
HMAC vs. JWT: Wo passen sie hin?
JWTs (JSON Web Tokens) werden oft mit HMAC-Signaturen verwechselt. Ein JWT ist ein eigenständiges Token mit drei Teilen: einem Header, einer Nutzlast (Ansprüche) und einer Signatur. Die Signatur kann HMAC-basiert oder RSA-basiert sein. JWT-Decoder ermöglicht Ihnen die Inspektion und Verifizierung von Token. Während HMACs eine einzelne Nachricht verifizieren, sind JWTs Token, die Sie speichern und bei jeder Anfrage oder jedem API-Aufruf senden. Für Webhooks und einmalige Nachrichtenauthentifizierung ist HMAC einfacher und ausreichend. Für laufende Sitzungstoken oder API-Anmeldeinformationen ist ein JWT oft flexibler.
Datenschutz: Signieren und überprüfen Sie vollständig in Ihrem Browser
Die HMAC- und Hash-Tools von TextArray laufen vollständig in Ihrem Browser. Es werden keine Nachrichten, Geheimnisse oder Signaturen auf einen Server hochgeladen. Es ist kein Konto erforderlich und die Tools funktionieren offline, nachdem die Seite geladen wurde. Sie können Webhook-Payloads und API-Schlüssel sicher einfügen, um Signaturen zu testen und zu debuggen, ohne Daten einem Drittanbieter oder Protokollierungsdienst preiszugeben. Dies ist besonders wertvoll, wenn Sie während der Entwicklung mit vertraulichen API-Schlüsseln oder Kundendaten arbeiten.
Erste Schritte
Beginnen Sie damit, Hashing zu verstehen: Verwenden Sie das Hash-Generator um zu sehen, wie dieselbe Eingabe immer dieselbe SHA-256-Ausgabe erzeugt. Dann bewegen Sie sich zu HMAC-Generierung um zu sehen, wie ein geheimer Schlüssel die Ausgabe verändert. Versuchen Sie, den Schlüssel oder die Nachricht leicht zu ändern. Im Gegensatz zu einer naiven Prüfsumme wird der HMAC vollständig umgedreht. Sobald Sie die Mechanismen verstanden haben, wenden Sie sie auf Ihre Webhook-Verifizierungslogik an. Für sensible Nutzlasten wie verschlüsselter Text oder entschlüsselte Token, koppeln Sie sie immer mit HMAC-signierten Anfragen, um Integrität und Herkunft zu gewährleisten.