Wat is DKIM?
DKIM (DomainKeys Identified Mail) is een methode voor e-mailauthenticatie waarmee de verzendende server uitgaande berichten digitaal kan ondertekenen. De ontvangende server kan die handtekening vervolgens verifiëren met een openbare sleutel die in DNS is gepubliceerd. Zo wordt bevestigd dat de e-mail tijdens het transport niet is gewijzigd en daadwerkelijk afkomstig is van het opgegeven domein.
Hoe DKIM werkt
1. Sleutels genereren: de domeineigenaar genereert een openbaar en een privé-sleutelpaar
2. Publicatie in DNS: de openbare sleutel wordt als TXT-record gepubliceerd
3. Berichten ondertekenen: uitgaande e-mails worden met de privésleutel ondertekend
4. Handtekening verifiëren: de ontvangende server haalt de openbare sleutel op en verifieert de 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-recordindeling
DKIM-records zijn TXT-records op een specifiek subdomein:
selector._domainkey.example.com. IN TXT "v=DKIM1; k=rsa; p=MIGfMA0..."
Onderdelen van het record
| Tag | Beschrijving | Voorbeeld |
|---|---|---|
| v | Versie | v=DKIM1 |
| k | Type sleutel | k=rsa |
| p | Openbare sleutel (base64) | p=MIGfMA0GCSqG... |
| t | Vlaggen (optioneel) | t=y (testing mode) |
| h | Hashalgoritmen | h=sha256 |
Selectoren
Met selectors kunnen meerdere DKIM-sleutels per domein worden gebruikt:
google._domainkey.example.com # Google Workspace
s1._domainkey.example.com # Sendgrid
mailchimp._domainkey.example.com # Mailchimp
Elke e-maildienst levert zijn eigen selector en sleutel.
DKIM-handtekeningheader
Een DKIM-handtekening ziet er als volgt uit:
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...
Belangrijke velden:
- d=: het ondertekenende domein
- s=: de selector, waarmee het DNS-record wordt gevonden
- h=: de headers die in de handtekening zijn opgenomen
- b=: de daadwerkelijke handtekening
- bh=: de hash van de berichttekst
DKIM instellen
Voor Google Workspace
1. Ga naar de Admin Console → Apps → Gmail → E-mail authenticeren
2. Genereer een DKIM-sleutel, bij voorkeur van 2048 bits
3. Voeg het door Google verstrekte TXT-record toe
4. Activeer DKIM-ondertekening
Voor diensten van derden
De meeste e-maildiensten, zoals SendGrid en Mailchimp, leveren:
1. Een CNAME-record dat u voor hun beheerde sleutel moet toevoegen
2. Of een TXT-record met de openbare sleutel
Voorbeeld (SendGrid):
s1._domainkey.example.com CNAME s1.domainkey.sendgrid.net
DKIM verifiëren
Stuur een testmail naar een dienst die headers toont, zoals Gmail, dat authenticatieresultaten weergeeft. Via de opdrachtregel:dig google._domainkey.example.com TXT
Via DomScan:
curl "https://domscan.net/v1/health?domain=example.com"
# Reports DKIM status based on common selectors
Beste praktijken voor DKIM
Gebruik sleutels van 2048 bits
Oudere sleutels van 1024 bits zijn steeds kwetsbaarder. De meeste providers gebruiken tegenwoordig standaard 2048 bits.
Roteer sleutels periodiek
Roteer DKIM-sleutels jaarlijks of na beveiligingsincidenten. Publiceer de nieuwe sleutel met een nieuwe selector voordat u overschakelt.
Onderteken belangrijke headers
Zorg dat From, To, Subject, Date en Message-ID in de handtekeningen zijn opgenomen.
Wijzig ondertekende berichten niet
Mailinglijsten of doorstuurdiensten die de inhoud wijzigen, verbreken DKIM. Gebruik ARC (Authenticated Received Chain) voor doorgestuurde e-mail.
Beperkingen van DKIM
DKIM voorkomt spoofing op zichzelf niet: het bewijst alleen dat een bericht niet is gewijzigd. Een domein kan geldige DKIM hebben terwijl aanvallers onondertekende vervalste e-mails versturen. DMARC bepaalt wat er met zulke niet-geauthenticeerde berichten moet gebeuren.