RFC 6376 — DKIM
DomainKeys Identified Mail (DKIM) Signatures
- Status
- Internet Standard
- Published
- 2011
- Obsoletes
- RFC 4871, RFC 5672
RFC 6376 defines DKIM, the cryptographic signature attached to outgoing messages. It is a full Internet Standard — a higher maturity level than either SPF or DMARC, both of which are Proposed Standard.
What the document governs
- The
DKIM-Signatureheader, including thed=signing domain and thes=selector that names which public key to fetch. - Key publication in DNS, under
<selector>._domainkey.<domain>— including that an emptyp=is the documented way to revoke a key rather than a broken record. RSA keys are specified here; RFC 8463 later added Ed25519, whose keys are short enough to avoid the split-string problem a 2048-bit RSA key creates in DNS. - Canonicalization, the rules for normalising a message before signing, which is why a signature survives some transformations in transit and not others.
What a signature proves, and what it does not
It proves some domain holding the private key took responsibility for the message, and that the signed parts were not modified. That is all.
It does not prove the message came from the domain in the From: header —
the d= domain can be anything with a published key. This is why a dkim=pass
from your email provider’s own domain does nothing for your DMARC result, and
why alignment is the thing to check.
Unlike SPF, DKIM survives most forwarding, which makes aligned DKIM the sturdier of the two ways to satisfy DMARC — though a list that rewrites a message will still break it, which RFC 6377 addresses.
Selectors, and why there can be several
The s= tag names which key to use, which is what lets one domain publish many
keys at once. Your mailbox provider, marketing platform and helpdesk each publish
their own under their own selector, and they do not collide.
For DMARC, only one signature has to verify and align. A message signed by
three services passes on the strength of whichever signature aligns with the
From: domain; the others failing is irrelevant.
This is also how rotation works without downtime — publish a new key under a new selector, switch signing to it, retire the old one once the last message signed with it has been delivered.
Where DKIM breaks
Canonicalization decides how much a message can change in transit before the
signature stops verifying. relaxed tolerates whitespace and header-case
changes; simple tolerates almost nothing. Mailing lists that append a footer or
rewrite a subject line will break a signature under either, which is the single
most common source of DMARC failures on legitimate mail.
Read it: rfc-editor.org/rfc/rfc6376