Hoe DKIM de sleutel vindt
Een DKIM-handtekening in een bericht vermeldt een domein (d=) en een selector (s=). De ontvanger voegt die samen tot selector._domainkey.domain, leest daar het TXT-record en gebruikt de openbare sleutel in de p=-tag om de handtekening te verifiëren. Eén domein kan een onbeperkt aantal selectors publiceren, zodat elke verzendservice een eigen sleutel kan hebben en sleutels zonder downtime kunnen worden vervangen.
De controle heeft de selector nodig omdat DNS geen manier biedt om de selectors van een domein op te vragen. Er valt niets te scannen, de selector komt uit de handtekening van een echt bericht.
Wanneer is een sleutel zwak of defect?
RFC 8301 bepaalt dat RSA-sleutels minimaal 1024 bits moeten zijn en bij voorkeur 2048 bits. Een verifier mag een kortere sleutel negeren, en onze verifier doet dat. Een sleutel van 512 bits telt daarom als helemaal geen handtekening. Ed25519-sleutels (RFC 8463) zijn bewust kort en sterk, maar nog niet elke ontvanger verifieert ze. Daarom worden ze meestal naast een RSA-sleutel gepubliceerd en niet in plaats daarvan.
De controle decodeert de volledige sleutel, omdat geen enkele ontvanger een sleutel kan gebruiken als de record verkeerd over TXT-strings is verdeeld of als de base64 niet kan worden gedecodeerd. Een lege p= betekent dat de sleutel bewust is ingetrokken. t=y markeert een domein dat nog aan het testen is. RFC 6376 §3.6.1 schrijft voor dat verifiers e-mail van dit domein precies hetzelfde behandelen als niet-ondertekende e-mail.
Vragen
Hoe vind ik mijn DKIM-selector en is DKIM überhaupt ingeschakeld?
Stuur jezelf een bericht en open de headers van het ontvangen exemplaar. Een DKIM-Signature-header betekent dat het bericht is ondertekend: de selector is de waarde van s= en het domein is d=. Ontbreekt deze header, dan ondertekent de gebruikte verzendservice niet. Elke verzendservice gebruikt een eigen selector, dus een nieuwsbrief en een bericht uit je mailbox kunnen verschillende selectors hebben.
De sleutel is in orde, maar DKIM mislukt met "body hash did not verify". Waarom?
Meestal is het bericht na ondertekening gewijzigd, bijvoorbeeld doordat een mailinglijst een voettekst heeft toegevoegd of een beveiligingsgateway een link heeft herschreven. De sleutel kan alleen bevestigen wat is ondertekend. De volledige test toont het daadwerkelijke verificatieresultaat voor je bericht.
Volledige handleiding: DKIM fail
DKIM-sleutellengte: 1024 of 2048 bits?
Een sleutel van 1024 bits wordt overal geverifieerd en is toegestaan volgens RFC 8301. Dit is nog steeds het minimum, dus stap bij de volgende sleutelrotatie over op 2048 bits.
Kan een domein meer dan één DKIM-record hebben?
Ja, één per selector. Veel domeinen hebben er meerdere: één voor de mailboxprovider en één voor elke nieuwsbrief- of factureringsservice. Controleer ze één voor één. Als een sleutel uit DNS is verwijderd, mislukt elk bericht dat er nog mee is ondertekend.
Hoe vaak moet ik DKIM-sleutels roteren?
M3AAWG raadt aan om sleutels ten minste elke zes maanden te roteren, en onmiddellijk als een privésleutel mogelijk is gelekt. Publiceer de nieuwe sleutel onder een nieuwe selector, schakel de ondertekening daarnaar over en verwijder het oude record pas als er geen mail meer binnenkomt die met de oude sleutel is ondertekend. Afzenders proberen vier tot vijf dagen opnieuw, dus wacht ongeveer een week.