Skip to main content
CheckTown
Dev Tools

HMAC: hoe hash-gebaseerde berichtauthenticatie werkt

Gepubliceerd 6 min lezen
In dit artikel

Wat is HMAC?

HMAC (Hash-based Message Authentication Code) is een cryptografisch mechanisme dat een geheime sleutel combineert met een hashfunctie om een berichtauthenticatiecode te produceren. In tegenstelling tot een gewone hash bewijst HMAC zowel de integriteit als de authenticiteit van een bericht.

HMAC is gedefinieerd in RFC 2104 en wordt gebruikt in TLS, IPsec, JWT-handtekeningen en API-webhookverificatie. Het algoritme is bestand tegen length-extension-aanvallen die gewone hashfuncties treffen.

Hoe HMAC werkt

HMAC gebruikt een twee-pass hashbenadering met inner en outer padding. De geheime sleutel wordt aangevuld tot de blokgrootte van de hashfunctie en vervolgens gecombineerd met twee verschillende constanten.

  • Inner hash — de sleutel wordt gecombineerd met ipad (0x36), samengevoegd met het bericht en gehasht: H(K XOR ipad || bericht)
  • Outer hash — de sleutel wordt gecombineerd met opad (0x5C), samengevoegd met het inner hash resultaat en opnieuw gehasht: H(K XOR opad || inner_hash)
  • Eindresultaat — het resultaat van de outer hash is de HMAC-waarde, doorgaans weergegeven als hexadecimale string

Deze dubbele hashconstructie voorkomt length-extension-aanvallen. Zelfs als een aanvaller H(bericht) kent, kan hij HMAC(sleutel, bericht || extra) niet berekenen zonder de geheime sleutel.

HMAC-algoritmen

De HMAC-constructie werkt met elke cryptografische hashfunctie. De meest voorkomende keuzes zijn SHA-256, SHA-384 en SHA-512.

  • HMAC-SHA256 — 256-bit output, de meest gebruikte variant voor API-authenticatie, JWT HS256-handtekeningen en webhookverificatie. Aanbevolen sleutelgrootte: 32 bytes
  • HMAC-SHA384 — 384-bit output, gebruikt in TLS 1.3 ciphersuites en hoge-beveiligingstoepassingen. Aanbevolen sleutelgrootte: 48 bytes
  • HMAC-SHA512 — 512-bit output, geprefereerd wanneer maximale beveiligingsmarge nodig is. Aanbevolen sleutelgrootte: 64 bytes

De sleutel moet minstens zo lang zijn als de hash-output. Voor de meeste toepassingen biedt HMAC-SHA256 met een willekeurige 32-byte sleutel uitstekende beveiliging.

Probeer gratis — geen aanmelding vereist

HMAC-handtekeningen genereren →

Veelvoorkomende toepassingen

HMAC vormt de basis van veel beveiligingsprotocollen en API-authenticatieschema's.

  • API-authenticatie — diensten zoals Stripe, GitHub en AWS gebruiken HMAC-handtekeningen om webhook-payloads te verifieren
  • JWT-ondertekening — de HS256, HS384 en HS512 algoritmen gebruiken HMAC om de token-payload te ondertekenen
  • Berichtintegriteit — HMAC verifieert dat netwerkgegevens niet zijn gewijzigd tijdens overdracht
  • OAuth 1.0a — de HMAC-SHA1 handtekeningmethode ondertekent OAuth-verzoekparameters om autorisatie te bewijzen

HMAC vs andere authenticatiemethoden

HMAC is een van de benaderingen voor berichtauthenticatie. Elke methode heeft verschillende afwegingen qua beveiliging, prestaties en sleutelbeheer.

  • HMAC vs digitale handtekeningen — HMAC gebruikt een gedeelde geheime sleutel (symmetrisch), digitale handtekeningen gebruiken sleutelparen (asymmetrisch). HMAC is sneller maar vereist dat beide partijen hetzelfde geheim delen.
  • HMAC vs API-sleutels — API-sleutels zijn eenvoudige bearer tokens. HMAC ondertekent de verzoekinhoud, waardoor het onderscheppen van een eerder verzoek geen nieuwe verzoeken kan vervalsen.
  • HMAC vs gewone hashing — hashing bewijst integriteit maar niet authenticiteit. HMAC vereist de geheime sleutel, dus alleen geautoriseerde partijen kunnen geldige handtekeningen genereren.

Veelgestelde vragen

Wat is de ideale HMAC-sleutellengte?

De sleutel moet minstens zo lang zijn als de hash-output — 32 bytes voor HMAC-SHA256, 48 voor HMAC-SHA384, 64 voor HMAC-SHA512. Kortere sleutels verzwakken de beveiliging.

Is HMAC hetzelfde als encryptie?

Nee. HMAC biedt authenticatie en integriteit, geen vertrouwelijkheid. Het bericht blijft leesbaar. Gebruik encryptie (AES, ChaCha20) naast HMAC voor geheimhouding.

Kan ik HMAC gebruiken in de browser met de Web Crypto API?

Ja. De Web Crypto API ondersteunt HMAC natively via crypto.subtle.importKey() en crypto.subtle.sign(). U kunt HMAC-handtekeningen volledig client-side genereren.

Gerelateerde Tools