HMAC och hashing för API-signaturer: skyddar webhooks
När en tredjepartstjänst skickar data till dig via webhook eller du behöver autentisera en API-förfrågan, behöver du ett sätt att bevisa att meddelandet inte har manipulerats och verkligen kom från vem som säger att det gjorde det. Enbart hash löser inte detta; du behöver HMAC. Att förstå skillnaden mellan en vanlig hash och en HMAC, och hur man verifierar signaturer korrekt, är skillnaden mellan en säker integration och en komprometterad.
Vad är en hash
En hash är en enkelriktad funktion som förvandlar vilken inmatning som helst – text, en fil, ett API-svar – till en sträng med fast längd. Samma ingång ger alltid samma utdata. Vanliga hashalgoritmer inkluderar SHA-256, SHA-1 och MD5. Du kan använda en hashgenerator för att se detta i aktion: "hej" blir alltid samma SHA-256-hash. Nyckelegenskapen är att hash är deterministiskt men omöjligt att vända; du kan inte återställa den ursprungliga indata från hashen.
Vad är HMAC
HMAC står för Hash-baserad meddelandeautentiseringskod. Till skillnad från en vanlig hash, kombinerar HMAC ett meddelande med en hemlig nyckel innan hash. Webhook-leverantören har en hemlig nyckel, hashar meddelandet med den nyckeln och skickar meddelandet och hashen till dig. Du upprepar processen med samma hemliga nyckel; om din beräknade hash matchar den som skickades vet du att meddelandet är autentiskt och oförändrat. De HMAC generator verktyget låter dig testa detta med ditt eget meddelande och hemlighet.
Den kritiska skillnaden: hash vs HMAC
Här är varför detta är viktigt:
- Vanlig hash: Vem som helst kan se ditt meddelande och räkna om hashen för att skapa ett "giltigt". Det bevisar ingenting.
- HMAC: Endast någon med den hemliga nyckeln kan producera rätt HMAC. Det bevisar kryptografiskt att meddelandet kom från nyckelinnehavaren och inte har ändrats.
Om en tjänst skickar dig en webhook med bara en hash, kan en angripare fånga upp den, ändra data, räkna om hash, och du skulle inte märka det. Med HMAC och en delad hemlighet kan angriparen inte förfalska en giltig signatur utan nyckeln.
Verifierar webhook-signaturer i din kod
När en webhook anländer tillhandahåller tjänsten meddelandenyttolasten och en signaturrubrik (ofta X-Signature eller X-Webhook-Signature). Din kod ska:
- Hämta din hemliga nyckel från säker konfiguration (miljövariabler, en hemlig hanterare).
- Beräkna HMAC-SHA256 för råbegäran med hjälp av den nyckeln.
- Jämför din beräknade HMAC byte-för-byte med signaturhuvudet (använd alltid konstanttidsjämförelse för att förhindra timingattacker).
- Om de matchar är webhooken autentisk. Om inte, avvisa det.
De flesta webhook-leverantörer dokumenterar sin HMAC-algoritm och det exakta formatet som ska signeras – ibland är det den råa JSON-kroppen, ibland en tidsstämpel sammanlänkad med kroppen. Följ deras spec exakt.
HMAC vs JWT: var passar de
JWTs (JSON Web Tokens) förväxlas ofta med HMAC-signaturer. En JWT är en fristående token med tre delar: en rubrik, en nyttolast (anspråk) och en signatur. Signaturen kan vara HMAC-baserad eller RSA-baserad. JWT-avkodare låter dig inspektera och verifiera tokens. Medan HMAC:er verifierar ett enda meddelande, är JWT:er tokens som du lagrar och skickar med varje begäran eller API-anrop. För webhooks och engångsmeddelandeautentisering är HMAC enklare och tillräckligt. För pågående sessionstokens eller API-referenser är en JWT ofta mer flexibel.
Sekretess: signera och verifiera helt i din webbläsare
TextArray:s HMAC- och hashverktyg körs helt i din webbläsare. Inget meddelande, hemlighet eller signatur laddas upp till en server. Inget konto krävs, och verktygen fungerar offline efter att sidan har laddats. Du kan säkert klistra in webhook-nyttolaster och API-nycklar för att testa och felsöka signaturer utan att exponera data för en tredje part eller loggningstjänst. Detta är särskilt värdefullt när du arbetar med känsliga API-nycklar eller kunddata under utveckling.
Komma igång
Börja med att förstå hashing: använd hashgenerator för att se hur samma ingång alltid producerar samma SHA-256-utgång. Flytta sedan till HMAC generation för att se hur en hemlig nyckel ändrar utdata. Försök att ändra nyckeln eller meddelandet något; HMAC vänder helt, till skillnad från en naiv kontrollsumma. När du förstår mekaniken, tillämpa den på din webhook-verifieringslogik. För känsliga nyttolaster som krypterad text eller avkodade tokens, para dem alltid med HMAC-signerade förfrågningar för att garantera integritet och ursprung.