DKIM-handtekening
Een DKIM-handtekening is een cryptografische handtekening toegevoegd aan de headers van een e-mail (de DKIM-Signature-header) waarmee ontvangers kunnen verifiëren dat het bericht door het verzendende domein is geautoriseerd en onderweg niet is gewijzigd. Belangrijke tags zijn d (domein), s (selector), b (handtekening) en bh (body-hash).
Deze gids maakt deel uit van onze volledige gids over DKIM. Gerelateerd: het DKIM-record en waarom DKIM faalt.
Een DKIM-handtekening is een cryptografische handtekening die aan de headers van een e-mail wordt toegevoegd — meegedragen in de DKIM-Signature-header — waarmee een ontvangende server kan verifiëren dat het bericht door het verzendende domein is geautoriseerd en onderweg niet is gewijzigd. De handtekening wordt gegenereerd met een privésleutel die de afzender bezit en gecontroleerd aan de hand van een bijbehorende publieke sleutel die in DNS is gepubliceerd.
Hoe de DKIM-Signature-header eruitziet
De handtekening reist als een enkel headerveld dat aan het bericht wordt voorgevoegd. Het verpakt alles wat een ontvanger nodig heeft — het ondertekenende domein, de selector, welke headers zijn ondertekend, een hash van de body en de handtekening zelf — in een reeks tag=value-paren gescheiden door puntkomma’s.
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=example.com; s=selector1; t=1700000000;
h=from:to:subject:date;
bh=2jUSOH9NhtVGCQWNr9BrIAPreKQjO6Sn7XIkfJVOzv8=;
b=Cg5Xje8kY0m5xT1pW2qL4vN8rH6dF3aZ9cU7bE0iQoR2sT4uV6wX8yZ1
aB3cD5eF7gH9jK2lM4nP6qR8sT0uV2wX4yZ6aB8cD0eF2gH4jK6l=
De header wordt door de mailserver van de afzender ingevoegd voordat het bericht het domein verlaat. Regeleindes en inspringing zijn er alleen voor het vouwen — de waarde is logisch gezien één doorlopende string.
De tags in een DKIM-handtekening
Elke tag draagt één stuk van de verificatiepuzzel. De ondertekenaar kiest deze waarden; de verifier leest ze terug om de handtekening te reconstrueren en te controleren.
| Tag | Naam | Doel |
|---|---|---|
v | Versie | DKIM-versie. Altijd 1. |
a | Algoritme | Hash- en ondertekeningsalgoritme, bijv. rsa-sha256 of ed25519-sha256. |
d | Domein | Het ondertekenende domein — de identiteit die DKIM authenticeert. |
s | Selector | Benoemt welke publieke sleutel uit de DNS van het domein moet worden opgehaald. |
h | Ondertekende headers | Door dubbelepunt gescheiden lijst van headervelden die door de handtekening worden gedekt. |
bh | Body-hash | Hash van de (gecanonicaliseerde) berichtbody. |
b | Handtekening | De daadwerkelijke cryptografische handtekening, base64-gecodeerd. |
c | Canonicalisatie | Hoe headers/body worden genormaliseerd vóór het hashen, bijv. relaxed/relaxed. |
t / x | Tijdstempels | t is wanneer het bericht is ondertekend; x is wanneer de handtekening verloopt. |
Hoe ondertekenen werkt (bij verzending)
Wanneer een bericht de verzendende server verlaat, doet DKIM twee dingen. Eerst canonicaliseert en hasht het de body en slaat het resultaat op in bh. Vervolgens canonicaliseert het de headers die in h worden genoemd — samen met de DKIM-Signature-header zelf (met een lege b) — hasht dat blok en ondertekent de hash met de privésleutel van het domein. De resulterende handtekening wordt de b-waarde. Omdat de privésleutel de afzender nooit verlaat, kan alleen de echte domeineigenaar een handtekening produceren die zal valideren.
Hoe verificatie werkt (bij ontvangst)
De ontvangende server leest de DKIM-Signature-header om het domein (d) en de selector te achterhalen. Het vraagt DNS op op <selector>._domainkey.<domain> om de publieke sleutel uit het DKIM-record op te halen. Vervolgens herhaalt het het werk van de afzender: het canonicaliseert en hasht de body, vergelijkt dat met bh, canonicaliseert en hasht de ondertekende headers, en gebruikt de publieke sleutel om b tegen die header-hash te controleren. Als zowel de body-hash overeenkomt als de handtekening verifieert, slaagt DKIM. De bh-controle is wat elke manipulatie van de berichtbody opvangt — zelfs een enkel gewijzigd teken produceert een andere hash en laat de controle mislukken.
Wanneer handtekeningen falen
Een DKIM-handtekening faalt wanneer het bericht dat de ontvanger ziet niet langer overeenkomt met wat de afzender heeft ondertekend. De meest voorkomende oorzaken zijn:
- Wijziging onderweg — mailinglijsten, forwarders en sommige gateways herschrijven onderwerpen, voegen footers toe of hercoderen de body, wat de body-hash breekt.
- Body-hash-mismatch — elke wijziging aan het ondertekende deel van de body verandert
bh, dus de verificatie faalt zelfs als de sleutel correct is. - Verkeerde of ontbrekende sleutel — de selector verwijst naar een DNS-record dat afwezig, verlopen of met de verkeerde publieke sleutel is.
Voor een uitgebreidere uiteenzetting van de oorzaken en oplossingen, zie waarom DKIM faalt, en gebruik de gratis DKIM-lookuptool om te bevestigen dat de publieke sleutel van een selector is gepubliceerd en goed opgemaakt is.
Veelgestelde vragen
Wat is een DKIM-handtekening?
Een DKIM-handtekening is een cryptografische handtekening die aan de headers van een e-mail wordt toegevoegd in het DKIM-Signature-veld. De afzender genereert deze met een privésleutel over geselecteerde headers en een hash van de body. Ontvangers verifiëren deze aan de hand van een publieke sleutel in DNS, wat bewijst dat het bericht van het domein kwam en niet is gewijzigd.
Wat betekent de b=-tag in een DKIM-handtekening?
De b=-tag bevat de daadwerkelijke handtekening: een base64-gecodeerde waarde geproduceerd door een hash van de gecanonicaliseerde ondertekende headers te ondertekenen met de privésleutel van het verzendende domein. De ontvanger decodeert deze en verifieert het aan de hand van de publieke sleutel die uit DNS is opgehaald. Als de ondertekende headers onderweg zijn gewijzigd, faalt de b=-controle.
Waarom faalt een DKIM-handtekening na doorsturen?
Forwarders en mailinglijsten wijzigen het bericht vaak — footers toevoegen, het onderwerp herschrijven of de body hercoderen. Omdat DKIM de exacte body en geselecteerde headers ondertekent, verandert elke dergelijke wijziging de berekende hash zodat deze niet langer overeenkomt met de ondertekende bh of header-hash. De handtekening faalt dan bij verificatie, ook al was de oorspronkelijke geldig.
Wat is de body-hash (bh) in DKIM?
De bh=-tag is een hash van de berichtbody na canonicalisatie, berekend met het algoritme dat in a wordt genoemd. Bij ontvangst herberekent de verifier de body-hash en vergelijkt deze met bh. Een mismatch betekent dat de body onderweg is gewijzigd, dus de handtekening wordt afgewezen voordat de cryptografische handtekening in b= überhaupt wordt gecontroleerd.