DomainKeys Identified Mail (DKIM)

Het DomainKeys Identified Mail (DKIM) is een gestandaardiseerde techniek om e-mailberichten te voorzien van een digitale handtekening. Hiermee kan worden gecontroleerd of het e-mailbericht afkomstig is van een echte afzender, en er onderweg niets is veranderd aan de inhoud van het e-mail bericht.

DKIM voorkomt spoofing (impersonatie) en verminderd daarmee spam en phishing praktijken. In dit artikel leggen we uit hoe DKIM werkt, en hoe het kan worden ingesteld.

In dit artikel wordt veel gesproken over digitale handtekeningen, deze werken anders dan klassieke handtekeningen gezet met een pen. We raden aan eerst ons artikel over cryptografie te lezen, daarin wordt uitgelegd wat digitale handtekeningen precies zijn.


E-mail is onveilig

Het e-mail protocol is van oorsprong niet beveiligd, er was in het originele ontwerp in de jaren 70 geen rekening gehouden met de mogelijkheid dat iemand e-mail zouden willen misbruiken. Zo was er in het originele protocol geen voorziening ingebouwd om te bewijzen dat een e-mail afkomstig is van een legitieme afzender.

In een eerder artikel hebben we laten zien hoe met SPF kan worden beperkt welke e-mailservers berichten mogen sturen met het domeinnaam als afzender. SPF heeft echter een tekortkoming: het beperkt welke servers en niet welke personen berichten mogen versturen. Met name op gedeelde e-mailservers is dit een probleem, denk hierbij aan e-mailservers van cloud diensten. Met enkel SPF zou iedereen die gebruik maakt van de cloud e-mailserver nog steeds een domein van andere gebruikers van dezelfde cloud dienst kunnen gebruiken als afzender.

Een ander probleem waar SPF niet bij helpt is de manipulatie van e-mailberichten tijdens het verzenden. Een e-mail bericht passeert bij het versturen verschillende e-mailservers, de meeste hiervan zijn niet onder eigen beheer en kunnen daarom niet worden vertrouwd. Elke e-mailserver in de afleverketen zou een e-mail kunnen manipuleren, waardoor de inhoud kan worden veranderd. Het is zelfs mogelijk om het adres van de verzendende e-mailserver te manipuleren naar een adres welke toegestaan is in de SPF regels, waardoor SPF wordt omzeilt.

Om dit probleem op te lossen is het DomainKeys Identified Mail (DKIM) systeem geïntroduceerd.


Wat is DKIM?

Het DomainKeys Identified Mail systeem, of DKIM in het kort is een open, gestandaardiseerd protocol. Het is een onderdeel van de e-mail standaard waarmee alle e-mailservers op het internet werken. DKIM is dus geen software die moet worden geïnstalleerd, en het is kosteloos om te gebruiken. DKIM moet door de domeineigenaar zelf worden ingesteld, het is standaard niet ingeschakeld.

DKIM wordt ingeschakeld door de e-mailserver in te stellen om een digitale handtekening toe te voegen aan de verstuurde berichten, en de publieke sleutel van deze handtekening te publiceren in de DNS-regels van het domein.

De digitale handtekening is uitsluitend geldig voor het e-mailadres zoals deze wordt verstuurd, zelfs als er maar 1 letter wordt aangepast aan het bericht zal de handtekening niet meer kloppen. De ontvangende e-mailserver of e-mailprogramma controleert of de handtekening in de e-mail klopt voor de inhoud van het bericht in combinatie met de publieke sleutel welke is gepubliceerd in de DNS regels van het domein van de afzender. Als de handtekening niet klopt zal de e-mail niet worden geaccepteerd of worden aangemerkt als spam.

De digitale handtekening in het e-mailbericht wordt geplaatst niet alleen over de inhoud van de e-mail, maar ook alle headers. Headers bevatten informatie welke wordt toegevoegd aan een e-mail om het correct afleveren te waarborgen. De headers worden door e-mailprogramma's verborgen, maar ze zijn er wel. In de headers staat onder andere welke e-mailserver het bericht heeft verstuurd. Deze versturende e-mailserver moet dus in de SPF regels van het domein staan om geaccepteerd te worden. Zonder de DKIM handtekening zou een kwaadaardige e-mailserver deze header kunnen manipuleren en het adres van de verzendende e-mailserver kunnen veranderen naar een adres welke toegestaan is in de SPF regels. De DKIM handtekening staat ook in de headers van het e-mailbericht.


De DKIM DNS-regel

DKIM bewijst dat een e-mailbericht is verstuurd door de rechtmatige afzender aan de hand van de digitale handtekening. Om de handtekening te kunnen toetsen op echtheid is de publieke sleutel nodig. Deze sleutel wordt gepubliceerd in de DNS regels van het domein. Omdat (als het goed is) alleen de eigenaar van het domein toegang heeft tot het instellen van de DNS regels wordt hiermee bewezen dat de handtekening is gezet door de eigenaar van het domein. De DKIM publieke sleutel wordt gepubliceerd als een DNS-regel van het type TXT

Een DKIM DNS-regel is als volgt opgebouwd:

v=DKIM1 k=<sleutel type> p=<publieke sleutel>

v=DKIM1 is een verplicht onderdeel van de DKIM-regel. Dit geeft aan dat deze DNS-regel een DKIM handtekening bevat conform DKIM versie 1 (momenteel de enige versie). Een DKIM DNS-regel moet beginnen met deze tekst, anders zal de DKIM DNS-regel niet worden herkend door e-mailservers die de DKIM handtekening in de headers willen controleren.

Het sleuteltype geeft aan welke techniek er wordt gebruikt voor de sleutel en handtekening. Er zijn verschillende technieken om digitale handtekeningen mee te maken. De meest voorkomende DKIM sleuteltype is rsa.

De publieke sleutel zelf is een vrij lange keten van tekens, deze wordt bepaald aan de hand van de privé (geheime) sleutel, welke ingesteld wordt in de mailserver.

De meeste e-mailservers of e-mail cloud diensten geven de DNS-regel zoals moet worden ingesteld bij het inschakelen van het DKIM systeem.

De selector

In tegenstelling tot bijvoorbeeld SPF wordt de DKIM sleutel niet op het hoofddomein geplaatst, maar op een speciaal subdomein. In de DKIM standaard spreekt men over de selector.

Het adres voor de DKIM DNS-regel is als volgt opgebouwd:

<selector>._domainkey.<domeinnaam>

De selector voor securist.nl is bijvoorbeeld:

google._domainkey.securist.nl

De waarde van de selector kan meestal zelf worden gekozen. Vaak wordt hier een datum of volgnummer gebruikt. Voor securist.nl hebben wij gekozen voor de selector google omdat wij gebruik maken van de Google cloud diensten om onze e-mail te verzorgen.

Als we de DNS-regel op domein google._domainkey.securist.nl opvragen zien we de publieke sleutel welke wordt gebruikt voor de digitale handtekening in alle e-mails verstuurd door Securist:

google._domainkey.securist.nl TXT "v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmEOPQNWwkzA6hPv5beDrkiaJsnYE30LGr/GTkvAkV27MFNE2IZRvFw6AEtYsxOB2PCW0MpeGybrk288InK0LeWWjfIX/NNaEfjMJ0HKNe7aNXLIqv6/9WuBfMHgo1rmnA4SYHceV+sATsvr35T5+1ttXJJoWMOoRmGJqf1sj0HlbiPv+bY3U9wwMkZFQHnGlE" "6A5omAtUiBVtpImzopa5OiVrcD2o2OfnjWJUE5DxbMPugbAw+Z6H6xUU6nnxk5pER4bPi5OIBWj2uOYdluqE/ioHFwRNSr/NGiXR8XK9tIvsWjDJGVRZUbqtanSDoDq9Kt39LTaFNGd1JG5AWGfZQIDAQAB"

De DKIM e-mail header

De DKIM handtekening wordt door de verzendende e-mailserver automatisch toegevoegd aan de headers van het e-mailbericht tijdens het versturen. Omdat de handtekening in de headers is geplaatst, wordt deze niet weergegeven in het e-mailprogramma van de ontvanger. De meeste e-mailprogramma's hebben wel de mogelijkheid om de headers van een ontvangen e-mail te bekijken, vaak wordt dit de 'bron' of 'source' genoemd.

De DKIM handtekening zie je dus niet, maar indien deze is toegevoegd zal de ontvangende e-mailserver en het e-mailprogramma deze automatisch controleren. Indien de handtekening niet klopt kan de e-mail worden geweigerd of wordt deze als spam gemarkeerd.

Door de headers van een e-mail te bekijken kun je de DKIM handtekening zien. Hieronder een voorbeeld e-mail bericht waarbij de DKIM header zichtbaar is:

DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=securist.nl; s=google;
h=from:content-transfer-encoding:mime-version:subject:message-id:date :to;
bh=d0wpsRRB1o4up/WTZa1fstrwi6y642A+16iDwruX9tw=;
b=PiGYGLnW71/q5XtsVAoP7t4T9b7D+IHZNuacnl0CaaJYvAChTZDhbR1Cj6UrcF3A3H
 qMwHMmxa+7JxyoYb8JAg37sxsVjkChKzSFqaVEbhbIBjbGmDdUOv/4x/8MXl0ZWpq8Gk
 2qbvhabos7DmP4dWjjDNk2W7lVCsl0+T88q61jwAyd0y6yCo95j9/YDKj2bBY3JDBhvw
 bO8UYD+Wk5gFbGEzMR8QzV7l4h9xeTWM6e5kbROk+551dqY7iZyCb5O6dc9k3QFlA0iJ
 cQINXz475YQrRzDrL66LpIC8t0ioQhwDYi6jGjyCYrBlZz2ewhVrU/tc0eWo9k0t4C5y
 IQIQ==
From: Leon Melis <leon@securist.nl>
Subject: Test bericht

Dit is een testbericht om DKIM te demonstreren

Je ziet hier de DKIM-signature header met daarin de domein (d=securist.nl) en de selector (s=google). Zo weet de ontvangende e-mailserver dat het de publieke sleutel kan vinden op google._domainkey.securist.nl om de handtekening te toetsen op echtheid.


Veelgestelde vragen

Staat DKIM standaard ingeschakeld?

Nee, DKIM moet zelf door de domeineigenaar worden ingeschakeld. Dit is omdat de publieke sleutel moet worden gepubliceerd in de DNS-regels van het domein. De leverancier van de gebruikte e-mailserver kan dit dus niet automatisch inschakelen.

DKIM instellen voor clouddienst?

Indien er een clouddienst wordt gebruikt voor e-mail, zoals Office365 of Google, is het altijd aan te raden om DKIM in te stellen. Bij de clouddienst wordt in het instellingenmenu gekozen om DKIM te gebruiken, de clouddienst geeft dan de DNS-regel weer zoals deze moet worden ingesteld in de DNS van het domein. Vaak controleert de clouddienst dan of de DNS-regel correct is geplaatst, wanneer dat het geval is wordt DKIM ingeschakeld en worden verstuurde e-mails automatisch voorzien van de juiste DKIM handtekening in de headers.

DKIM inschakelen voor Google GMail/G-Suite
DKIM inschakelen voor Office365 (outlook.com)

Hoe stel ik de DKIM handtekening in op mijn eigen e-mailserver?

Indien u een e-mailserver onder eigen beheer heeft (dus niet een cloud based e-mail dienst gebruikt) dient u de DKIM instelling zelf te configureren. Dit betekend dat u een sleutel genereert en deze instelt in de configuratie van de mailserver en het publieke deel van deze sleutel publiceert in de DNS.

DKIM instelling op Microsoft Exchange
DKIM instelling op Postfix
DKIM instelling voor Exim

Hoe stel ik DKIM in bij een externe marketingdienst

Wanneer e-mail wordt verstuurd vanuit de domeinnaam via een extern marketing platform, zoals bijvoorbeeld MailChimp of Drip, is het aangeraden deze ook te voorzien van een DKIM handtekening. Kies voor deze externe partij een andere selector, omdat e-mail verstuurd door de externe partij niet dezelfde sleutel zal gebruiken als uw eigen e-mail.

DKIM instellen voor MailChip
DKIM instellen voor Drip (voorheen: SendGrid)
DKIM instellen voor HubSpot

Hoe controleer ik of DKIM correct is ingesteld?

Een foutje is snel gemaakt tijdens het instellen van het DKIM DNS record. Gebruik daarom altijd een validator zoals de gratis DKIM validator service van Mailhardener


Conclusie

E-mailberichten kunnen tijdens transport worden gemanipuleerd. Niet alleen de tekst van de e-mail kan worden veranderd, maar ook de headers die onder andere worden gebruikt om de verzendende e-mailserver te bepalen voor de SPF controle, hiermee wordt SPF omzeilt. Met behulp van DKIM wordt een digitale handtekening toegevoegd aan elk e-mailbericht waarmee de integriteit en authenticiteit van het bericht kan worden gecontroleerd.

De Securist e-mail veiligheidsinspectie controleert onder andere op het correcte gebruik van DKIM om zeker te zijn van optimale bescherming.


Verder lezen

Zie ook onze andere relevante artikelen:

Léon Melis

Over de auteur:

Léon Melis is inspecteur bij Securist. Securist inspecteert websites, e-mail en domeinen op veiligheid en privacybescherming. Als onderdeel van de veiligheidsinspectie wordt de DKIM instelling gecontroleerd op correct gebruik.