HMAC-generator

HMAC is het algoritme achter de meeste ondertekende webhooks, AWS Signature v4-headers en JWT HS256-tokens. Voer een bericht en een geheime sleutel in, kies een hashfamilie, en deze generator genereert de HMAC exact volgens de specificatie van RFC 2104 – handig om te controleren wat uw backend gaat verzenden of om een handtekening te reproduceren die u van een API hebt ontvangen.

Hoe berekent u een HMAC

  1. 1

    Plak het bericht

    De precieze bytes die moeten worden ondertekend: een webhook-payload, een canoniek verzoek of een willekeurige tekenreeks.

  2. 2

    Voer de geheime sleutel in

    Kan tekst of hexadecimaal zijn. De generator vult de sleutel aan of hasht deze tot de blokgrootte volgens de RFC.

  3. 3

    Kies het hash-algoritme

    SHA-256 is de standaardoptie; kies voor SHA-1, SHA-384, SHA-512 of MD5 voor compatibiliteit met oudere systemen.

  4. 4

    Kopieer de handtekening

    De uitvoer is in kleine letters hexadecimal en kan rechtstreeks in een webhookconfiguratie of een autorisatieheader worden geplakt.

De werking van HMAC

HMAC omvat een eenvoudige hashfunctie in een sleutelgebaseerde constructie, zodat de signatuur niet kan worden vervalst zonder de sleutel.

Het RFC 2104-recept

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

waarbij k' de sleutel is die is gepaddeerd naar de grootte van het hashblok, en opad = 0x5c repeated en ipad = 0x36 repeated.

Keuze van het algoritme

Algoritme Blokgrootte Uitvoerlengte Aanbevolen voor
HMAC-SHA-256 64 bytes 32 bytes Moderne standaard, voor het ondertekenen van webhooks
HMAC-SHA-384 128 bytes 48 bytes API-signering met hogere beveiliging
HMAC-SHA-512 128 bytes 64 bytes Langlevende tokens
HMAC-SHA-1 64 bytes 20 bytes Legacy (AWS S3 v2, OAuth 1.0)
HMAC-MD5 64 bytes 16 bytes Enkel beschikbaar voor oudere versies; vermijd bij nieuwe toepassingen

Waar HMAC wordt weergegeven

  • GitHub-, Stripe- en Shopify-webhooks: header X-Hub-Signature-256, Stripe-Signature, etc.
  • AWS Signature v4: een keten van HMAC-SHA256 over het canonieke verzoek.
  • JWT HS256: de token-signatuur is HMAC-SHA-256(header.payload, secret).
  • Token voor wachtwoordherstelling: HMAC gebaseerd op user_id, vervaldatum en een sitegeheim.

Veelvoorkomende fouten

  • Een hex-aangegeven sleutel als tekst overdragen in plaats van deze eerst te decoderen naar bytes.
  • Onjuiste payload-bytes ondertekenen: sommige webhooks ondertekenen het ruwe verzoeklichaam inclusief witruimte, andere ondertekenen een canonieke vorm.
  • Gebruik == in JavaScript of Python om handtekeningen te vergelijken; gebruik altijd een tijdbeveiligde vergelijking om tijdgebaseerde aanvallen te voorkomen.

Veelgestelde vragen

Bijna altijd doordat de berichtbytes verschillen. Het ondertekenen van het uit JSON geparseerde lichaam leidt tot wijzigingen in de witruimte; onderteken daarom het ruwe verzoeklichaam. Controleer ook of de sleutel aan beide kanten op dezelfde manier wordt gedecodeerd (hexadecimaal versus ruwe bytes).

Ja. Als de sleutel korter is dan de grootte van het hashblok, wordt deze met nul aangevuld; als hij langer is, wordt hij eerst gehash. RFC 2104 beveelt sleutels aan die minstens even lang zijn als de uitvoer (32 bytes voor SHA-256).

HMAC blijft bestand tegen bekende MD5-collisionaanvallen, omdat deze aanvallen niet worden toegepast tijdens de constructie van HMAC. Gebruik echter HMAC-SHA-256 voor alle nieuwe code; tools en auditors verwachten dit.

Ja. Het bericht en de geheime sleutel worden via een versleutelde HTTPS-verbinding naar onze server gestuurd zodat het HMAC kan worden berekend. Ze worden alleen voor de berekening gebruikt en worden niet opgeslagen of gelogd.

Gerelateerde tools

Tool beschikbaar in andere talen