Wat is DKIM?
DKIM (DomainKeys Identified Mail) is een e-mail authenticatie methode waarmee de verzendende server naar uitgaande berichten digitaal ondertekenen. De ontvangende server kan dan deze handtekening verifiëren met behulp van een publieke sleutel gepubliceerd in DNS, bevestiging van de e-mail is niet gewijzigd in transit en eigenlijk afkomstig van het geclaimde domein.
Hoe werkt DKIM?
1. Key Generation: Domeineigenaar genereert een publiek/privé sleutelpaar
2. DNS Publicatie: Publieke sleutel wordt gepubliceerd als een TXT record
3. Berichten Ondertekenen: Uitgaande e-mails worden ondertekend met de private sleutel
4. Handtekeningscontrole: Ontvangstserver haalt publieke sleutel op en controleert handtekening
Het ondertekeningsproces
Wanneer een e-mail wordt verzonden:
1. Mail server calculates a hash of message headers and body
2. Hash is encrypted with the private key (creating the signature)
3. Signature is added as a DKIM-Signature header
4. Email is transmitted
Het verificatieproces
Wanneer een e-mail wordt ontvangen:
1. Server extracts the DKIM-Signature header
2. Finds selector and domain (s=selector; d=domain.com)
3. Queries DNS for selector._domainkey.domain.com TXT record
4. Uses public key to decrypt the signature
5. Calculates its own hash of the message
6. Compares: match = pass, mismatch = fail
DKIM recordformaat
DKIM records zijn TXT records op een specifiek subdomein:
selector._domainkey.example.com. IN TXT "v=DKIM1; k=rsa; p=MIGfMA0..."
Recordcomponenten
| Tag | Omschrijving | Voorbeeld |
|---|---|---|
| v | Versie | v=DKIM1 |
| k | Sleuteltype | k=rsa |
| p | Openbare sleutel (base64) | p=MIGfMA0GCSqG... |
| t | Vlaggen (facultatief) | t=y (testmodus) |
| h | Hash-algoritmen | h=sha256 |
Selectie
Selectors laten meerdere DKIM sleutels per domein toe:
google._domainkey.example.com # Google Workspace
s1._domainkey.example.com # Sendgrid
mailchimp._domainkey.example.com # Mailchimp
Elke e-mail service biedt zijn eigen selector en sleutel.
DKIM ondertekening kop
Een DKIM handtekening ziet eruit als:
DKIM-Signature: v=1; a=rsa-sha256; d=example.com; s=google;
c=relaxed/relaxed; q=dns/txt;
h=from:to:subject:date:message-id;
bh=2jUSOH9NhtVGCQWNr9BrIAPreKQjO6Sn7XIkfJVOzv8=;
b=AuUoFEfDxTDkHlLXSZEpZj79...
Kernvelden:
- d=: Ondertekend domein
- s=: Selector (gebruikt om DNS record te vinden)
- h=: In ondertekening opgenomen berichtkoppen
- b=: De eigenlijke handtekening
- bh=: Body hash
DKIM instellen
Voor Google Workspace
1. Ga naar Admin Console → Apps → Gmail → E-mail authenticeren
2. Genereer DKIM sleutel (2048-bit aanbevolen)
3. Voeg TXT-record van Google toe
4. Activeer DKIM ondertekening
Voor Third-Party Services
De meeste e-maildiensten (SendGrid, Mailchimp, enz.) bieden:
1. Een CNAME record toe te voegen (voor hun beheerde sleutel)
2. Of een TXT record met de publieke sleutel
Voorbeeld (SendGrid):
s1._domainkey.example.com CNAME s1.domainkey.sendgrid.net
Controle van DKIM
Stuur een testmail naar een service die headers toont (Gmail toont authenticatieresultaten). Opdrachtregel gebruiken:dig google._domainkey.example.com TXT
DomScan gebruiken:
curl "https://domscan.net/v1/health?domain=example.com"
# Reports DKIM status based on common selectors
DKIM Beste praktijken
Gebruik 2048-bit sleutels
Oudere 1024-bit sleutels worden steeds kwetsbaarder. De meeste providers zijn nu standaard 2048-bit.
Sleutels periodiek draaien
De DKIM-sleutels jaarlijks of na beveiligingsincidenten draaien. Publiceer nieuwe sleutel met nieuwe selector voordat u overschakelt.
Belangrijke berichtkoppen ondertekenen
Zorg ervoor dat Van, Tot, Onderwerp, Datum en Bericht-ID zijn opgenomen in handtekeningen.
Getekende berichten niet wijzigen
Mailinglijsten of forwarding services die inhoud wijzigen zullen DKIM breken. Gebruik ARC (Authenticated Received Chain) voor doorgestuurde e-mail.
DKIM Beperkingen
DKIM alleen voorkomt niet dat spoofing... het bewijst alleen dat een bericht niet is gewijzigd. Een domein kan geldig DKIM hebben terwijl aanvallers ongetekende e-mail sturen. DMARC behandelt dit door te specificeren wat te doen met niet-gesigneerde berichten.