DKIM (DomainKeys Identified Mail)
DKIM ist ein E-Mail-Authentifizierungsverfahren, das mithilfe kryptographischer Signaturen die Integrität und Herkunft von E-Mails verifiziert.
DKIM (DomainKeys Identified Mail) ist ein E-Mail-Authentifizierungsstandard (RFC 6376), der sicherstellt, dass eine E-Mail tatsächlich vom angegebenen Absender stammt und auf dem Transportweg nicht manipuliert wurde. Im Gegensatz zu SPF, das auf IP-Adressen basiert, arbeitet DKIM mit asymmetrischer Kryptographie und schützt damit auch gegen bestimmte Weiterleitungsszenarien.
Wie funktioniert DKIM
DKIM nutzt ein asymmetrisches Schlüsselpaar: Der sendende Mailserver signiert ausgehende E-Mails mit einem privaten Schlüssel. Der empfangende Mailserver prüft die Signatur anhand des öffentlichen Schlüssels, der im DNS der sendenden Domain hinterlegt ist.
DKIM-Ablauf:
1. Schlüsselgenerierung:
Sendende Domain generiert RSA- oder Ed25519-Schlüsselpaar
→ Privater Schlüssel: verbleibt sicher auf dem Mailserver
→ Öffentlicher Schlüssel: wird als DNS TXT-Record veröffentlicht
2. Signierung (ausgehend):
Mailserver berechnet Hash über definierte E-Mail-Header + Body
→ Algorithmen: rsa-sha256 (Standard) oder ed25519-sha256 (moderner)
→ Hash wird mit privatem Schlüssel verschlüsselt → Signatur
→ Signatur wird als DKIM-Signature-Header der E-Mail beigefügt
3. Validierung (eingehend):
Empfangender Mailserver liest DKIM-Signature-Header
→ Extrahiert Selektor (s=) und Domain (d=)
→ DNS-Lookup: [selektor]._domainkey.[domain] → öffentlicher Schlüssel
→ Berechnet Hash über dieselben Header + Body neu
→ Entschlüsselt Signatur mit öffentlichem Schlüssel
→ Vergleich: Hash stimmt überein → DKIM pass | stimmt nicht → DKIM fail
DKIM-Signature-Header im Detail
Wenn eine E-Mail mit DKIM signiert ist, enthält sie einen Header wie diesen:
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=beispiel.de; s=mail2024;
h=from:to:subject:date:message-id:mime-version:content-type;
bh=47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=;
b=mFN3KcZj8Qh4...langer-base64-string...==
Parameter-Erklärung:
v=1 DKIM-Version (immer 1)
a=rsa-sha256 Signaturalgorithmus (RSA mit SHA-256)
c=relaxed/relaxed
Canonicalization: Header/Body-Normalisierung
relaxed: toleriert kleinere Formatänderungen (empfohlen)
simple: strikte Prüfung (sensitiver bei Weiterleitungen)
d=beispiel.de
Signing Domain: muss mit From:-Header übereinstimmen (für DMARC)
s=mail2024 Selektor: Zeiger auf den richtigen DNS-Eintrag
Erlaubt mehrere Schlüssel für eine Domain (Rotation!)
h=from:to:subject:date:...
Signierte Header: mindestens From muss enthalten sein
bh= Body Hash: SHA-256-Hash des E-Mail-Bodys
b= Die eigentliche Signatur (Base64-kodiert)
DNS-Record Aufbau
Der öffentliche Schlüssel wird unter folgendem DNS-Namen veröffentlicht:
[selektor]._domainkey.[domain]
Beispiel:
mail2024._domainkey.beispiel.de IN TXT "v=DKIM1; k=rsa; p=MIGfMA0GCSqG..."
DNS TXT-Record Parameter:
v=DKIM1 Protokollversion (zwingend)
k=rsa Schlüsseltyp: rsa (Standard) oder ed25519
p= Öffentlicher Schlüssel (Base64-kodiert)
Leer lassen (p=) = Schlüssel zurückgezogen → alle Signaturen ungültig
Optionale Parameter:
h=sha256 Hash-Algorithmus-Beschränkung
s=email Service-Typ-Beschränkung (email oder *)
t=y Test-Modus: DKIM-Fehler werden nicht durchgesetzt
t=s Subdomains nicht erlaubt (strikt)
Vollständiges Beispiel mit Ed25519 (moderner, kürzere Keys):
# Ed25519 DKIM-Record (empfohlen für neue Deployments):
selector2024._domainkey.beispiel.de IN TXT "v=DKIM1; k=ed25519; p=11qYAYKxCrfVS/7TyWQHOg7hcvPapiMlrwIaaPcHURo="
Selektoren und Schlüsselrotation
Ein wesentlicher Vorteil von DKIM gegenüber anderen Verfahren ist die Unterstützung mehrerer Schlüssel gleichzeitig durch sogenannte Selektoren:
Selektor-Strategie:
Mehrere Mailsysteme:
smtp._domainkey.beispiel.de → Haupt-Mailserver (Postfix)
crm._domainkey.beispiel.de → CRM-System (Salesforce)
newsletter._domainkey.beispiel.de → E-Mail-Marketing (Mailchimp)
Schlüsselrotation (Best Practice: alle 6-12 Monate):
Schritt 1: Neuen Schlüssel generieren, als "mail-neu" im DNS veröffentlichen
Schritt 2: Mailserver auf neuen privaten Schlüssel umschalten
Schritt 3: Alten DNS-Record noch 72h behalten (TTL-Ausläufer abwarten)
Schritt 4: Alten DNS-Record entfernen oder p= leeren (Revocation)
Warum Rotation?
→ Gestohlener privater Schlüssel kann für Signierung missbraucht werden
→ Rotation begrenzt das Zeitfenster eines kompromittierten Schlüssels
DKIM Alignment
Für DMARC ist DKIM-Alignment entscheidend: Die Domain im d=-Tag der DKIM-Signatur muss mit der Domain im From:-Header übereinstimmen (zumindest auf Organizational-Domain-Ebene bei relaxed Alignment).
DKIM Alignment Beispiele:
Relaxed Alignment (Standard):
From: absender@beispiel.de
DKIM d=mail.beispiel.de → PASS (gleiche Org-Domain: beispiel.de)
DKIM d=anderedomain.de → FAIL
Strict Alignment:
From: absender@beispiel.de
DKIM d=beispiel.de → PASS (exakt gleich)
DKIM d=mail.beispiel.de → FAIL (Subdomain reicht nicht)
Typisches DMARC-Szenario:
E-Mail-Marketing über Drittanbieter:
From: newsletter@beispiel.de
DKIM signiert von: mailchimp.com → DKIM-Alignment FAIL für DMARC!
Lösung: Custom Domain Signing beim Anbieter einrichten
→ DKIM signiert von: k2._domainkey.beispiel.de (via CNAME)
Grenzen von DKIM
DKIM ist kein Allheilmittel und hat bekannte Schwachstellen:
Was DKIM NICHT schützt:
Replay-Angriffe:
→ Eine gültig signierte E-Mail kann erneut versendet werden
→ DKIM prüft nicht, ob die E-Mail bereits zugestellt wurde
→ Gegenmaßnahme: DMARC + sehr kurze Signatur-Gültigkeit (t=)
Kompromittierter Mailserver:
→ Wenn der sendende Server kompromittiert ist, kann der Angreifer
beliebige E-Mails mit dem privaten Schlüssel signieren
→ DKIM beweist nur: "Dieser Server hat signiert" - nicht: "Kein Missbrauch"
Forwarding-Probleme (DKIM bleibt meist intakt):
→ Im Gegensatz zu SPF überlebt DKIM meist Weiterleitungen
→ Ausnahme: Mailing-Listen die Subject oder Body modifizieren
→ DKIM fail wegen verändertem Body-Hash
Header-Injection über unsignierte Header:
→ Angreifer kann zusätzliche From:-Header einfügen (über signierten)
→ Empfang zeigt zweiten From: an → Social Engineering
→ Gegenmaßnahme: alle wichtigen Header in h= aufnehmen
DKIM und DMARC
DKIM allein hat keine Policy-Wirkung: Ein DKIM-Fail führt nicht automatisch zur Ablehnung einer E-Mail. Erst in Kombination mit DMARC erhält DKIM eine durchsetzbare Wirkung.
DKIM im DMARC-Kontext:
DMARC-Prüfung (vereinfacht):
Besteht die E-Mail SPF UND/ODER DKIM mit korrektem Alignment?
→ Ja: DMARC pass (unabhängig von der p=-Policy)
→ Nein: DMARC fail → Policy anwenden (none/quarantine/reject)
Warum DKIM besser als SPF für DMARC:
→ SPF bricht bei Weiterleitungen (Return-Path ändert sich)
→ DKIM-Signatur bleibt beim Weiterleiten erhalten
→ Best Practice: DMARC über DKIM absichern, SPF als zusätzliche Schicht
Vollständiger E-Mail-Authentifizierungsstack:
SPF: "Welche Server dürfen für diese Domain senden?" (IP-basiert)
DKIM: "Ist diese E-Mail unverändert und korrekt signiert?" (Krypto-basiert)
DMARC: "Was passiert bei Authentifizierungsfehlern?" (Policy-basiert)
DKIM ist heute ein unverzichtbarer Bestandteil jeder professionellen E-Mail-Infrastruktur. Große E-Mail-Provider wie Google und Microsoft werten DKIM-Signierung aktiv bei der Spam-Bewertung und Zustellbarkeit ein - fehlende DKIM-Signaturen erhöhen das Risiko, dass legitime E-Mails im Spam-Ordner landen.