Wat is DKIM en hoe werkt het?

Afbeelding van iemand die een handtekening zet, illustrerend voor de werking van een DKIM-validatie.

DKIM staat voor DomainKeys Identified Mail. Door DKIM te gebruiken kan een e-mailserver controleren of de e-mail inderdaad afkomstig is van de oorspronkelijke afzender. En dat de e-mail niet tussendoor is gewijzigd. Dit is een belangrijk onderdeel om te regelen voor goede deliverability van je e-mails.

Hoe werkt DKIM?

Met DKIM voeg je een soort digitale handtekening toe aan je e-mail. Op basis van die handtekening kan een ontvangende e-mailserver controleren of de ontvangen e-mail inderdaad authentiek is. Hoe dat werkt is als volgt.

Op jouw domeinnaamserver plaats je een DKIM-record. Dat is een soort regel tekst die geraadpleegd kan worden door andere servers. Daarin staat informatie waaronder je publieke sleutel. Op het moment dat je een e-mail verstuurt, gaat in jouw e-mail ook een versleutelde sleutel mee. Die wordt aangemaakt door de verzendende e-mailserver en is gebaseerd op de inhoud van de verstuurde e-mail. De versleutelde sleutel gaat mee in de e-mail headers.

Wanneer de e-mail aankomt, kan de ontvangende server met de publieke en versleutelde sleutels de DKIM-handtekening ontcijferen en op basis van die uitkomst zien of de e-mail authentiek is en niet onderweg bijvoorbeeld aangepast.

Meestvoorkomende vorm van DKIM

De meestvoorkomende vorm van DKIM is de standaardversie. Zo’n record in je e-mailheader ziet er bijvoorbeeld zo uit:

DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=voorbeeld.nl; s=selector; h=from:to:subject:date;

Als we deze gaan ontleden, dan staat hier feitelijk het volgende:

  • v=1: Dit geeft aan welke versie van DKIM er gebruikt wordt. In dit geval is 1 de actuele versie.
  • a=rsa-sha256: Deze waarde geeft aan op welke manier de handtekening versleuteld is (de authenticatie). In dit geval wordt gebruik gemaakt van de versleuteling via het RSA algoritme met de SHA-256 hash functie.
  • c=relaxed/relaxed: De ‘c’ staat voor canonicalization. Dat is een proces waarmee de gegevens zo simpel mogelijk worden gemaakt en universeel bruikbaar. Door een universele schrijfwijze te hanteren zorg je ervoor dat het consistent kan worden verwerkt door verschillende servers. Deze ‘relaxed/relaxed’-instelling geeft de instelling weer voor als eerste de e-mail headers en na de slash voor de inhoud van de e-mail. Met de instelling ‘relaxed’ sta je toe dat er minimale veranderingen (denk aan bijvoorbeeld een spatie) toegestaan worden, zonder dat de DKIM-handtekening meteen wordt afgekeurd.
  • d=voorbeeld.nl: De ‘d’ geeft aan welk domein bij de sleutel hoort. Dit domein neemt dus de verantwoordelijkheid voor de verstuurde e-mail.
  • s=selector: De ‘s’ staat voor de selector. Een selector is een verwijzing naar een subdomein of een stukje aangevulde tekst om aan te geven welke sleutel gebruikt moet worden wanneer er meer dan één sleutel op hetzelfde domein staat.
  • h=from:to:subject:date: De ‘h’ staat hier voor ‘header’. Hierin staat aangegeven welke velden moeten worden meegenomen in de DKIM-handtekening. In dit geval worden de velden ‘from’, ‘to’, ‘subject’ en ‘date’ uit de header ingelezen. Dat betekent dat wanneer de ontvangende server iets anders aantreft in deze velden dat wordt aangegeven in de DKIM-handtekening, deze ongeldig kan worden verklaard.

Verschillende instellingen voor canonicalization

Zoals net al toegelicht staat achter de c twee maal een instelling voor hoe streng moet worden gecontroleerd. De eerste instelling slaat op de headers van de e-mail. De tweede slaat op de inhoud van de e-mail. Beiden kunnen op ‘relaxed’ of ‘simple’ staan.

Met ‘relaxed’ instelling sta je toe dat er minimale veranderingen (denk aan bijvoorbeeld een spatie of hoofdlettergebruik) toegestaan worden in het omzetten naar de standaardisatie, zonder dat de handtekening meteen ongeldig wordt verklaard. De keuring oordeelt dus best wel ‘relaxed’, zeg maar.

Met de ‘simple’ instelling is dat dus niet toegestaan. Als er ook maar een minimale wijziging te bespeuren valt, wordt de handtekening direct ongeldig verklaard. De naam is dus niet als dat er slechts een simpele check wordt gedaan. Maar de regel werkt dus zelf wel heel simpel: Wijziging gezien? Ongeldig.

In de praktijk zijn ‘relaxed/relaxed’ en ‘simple/simple’ de meest voorkomende instellingen. Het juiste type canonicalisatie hangt af van de beveiligingsbehoeften en configuratievoorkeuren van de e-mailverzender

DKIM op je DNS

Nu je een beeld hebt bij de DKIM-handtekening in de headers van je e-mail, is het ook zinvol om een voorbeeld van een sleutel op je domeinnaamserver te bekijken. De publieke sleutel. Die is een stuk eenvoudiger. Die heeft eigenlijk maar 3 onderdelen:

v=1; a=rsa-sha256; p=…<hier een hele lange reeks cijfers, letters en/of speciale tekens>

Als we deze dan ook ontleden, zie je:

  • v=1: Dit geeft aan welke versie van DKIM er gebruikt wordt. In dit geval is 1 de actuele versie.
  • a=rsa-sha256: Deze waarde geeft aan op welke manier de handtekening versleuteld is (de authenticatie). In dit geval wordt gebruik gemaakt van de versleuteling via het RSA algoritme met de SHA-256 hash functie.
  • p=…: In dit veld staat de publieke sleutel. Deze sleutel kan de ontvangende e-mailserver dus opvragen om te vergelijken met de versleutelde DKIM-handtekening.

DKIM in combinatie met subdomeinen

Het is ook mogelijk om DKIM in te stellen op een subdomein. Dat is handig voor als je bijvoorbeeld je e-mailmarketingprogramma op een subdomein hebt staan. Zoals net ook toegelicht kan je dan met de selectors naar de juiste subdomeinen wijzen.

Gebruik van meerdere sleutels

Om misbruik moeilijker te maken is het mogelijk om met meerdere DKIM-sleutels te werken voor hetzelfde domein.

Wisselen van sleutels

Het is relatief eenvoudig om nieuwe DKIM-sleutels aan te maken. Door dit geregeld te doen en ze te wisselen met de bestaande sleutels verbeter je jouw beveiliging.

DKIM keurt niet zelf e-mails af

Belangrijk om te noemen is dat je met DKIM alleen er niet bent. DKIM keurt bijvoorbeeld niet zelf e-mails af. Dat moet je spamfilter doen, al dan niet op basis van informatie uit de handtekening. De handtekening geeft aan of de e-mail authentiek is of niet. Op basis daarvan maakt de spamfilter een keuze. Voor een optimale bescherming moet je naast DKIM ook SPF en DMARC instellen.

Share This