IDEA I/O home  | about  | cheat sheets  | github

DKIM

DKIM erläutert an einem konkreten Beispiel.

DomainKeys Identified Mail DKIM ist eine Technologie, die ursprünglich von Yahoo entwickelt wurde. Mit DKIM soll die Reputation einer E-Mail Absenderdomain erhöht werden. DKIM signiert dazu das E-Mail und fügt die Prüfsumme in den Header der E-Mail ein. Der Public Key wird dann als DNS TXT Record in der Absenderdomain hinterlegt. Der Empfänger kann sich diesen Schlüssel einfach über DNS besorgen und die Signatur Überprüfen. Ist die Signatur korrekt, kann der Empfänger davon ausgehen, dass das E-Mail wirklich von dieser Absenderdomain kommt.

Vorteile von DKIM

Im Gegensatz zum Sender Policy Framework (SPF), bei welchen die erlaubten Absender IP-Adressen im DNS hinterlegt werden, kann der private DKIM Schlüssel auf mehreren Geräten installiert werden. DKIM erlaubt es also, die Reputation von E-Mails zu erhöhen, ohne das der Versand der E-Mails auf einzelne IP Adressen eingeschränkt wird.

Funktionsweise

Damit DKIM funktioniert müssen mehrere Elemente vorhanden sein.

Der MTA welcher ein DKIM signiertes E-Mail erhält interpretiert zuerst den E-Mail Header. Er prüft dann den Policy Record der Domäne und besorgt sich unter dem DNS Selector TXT Record den öffentlichen Schlüssel des Absenders.

Damit kann er die Signatur der E-Mail überprüfen und weiss, ob es sich wirklich um eine Nachricht dieses Absenders handelt.

Amazon Beispiel

Am Beispiel von Amazon wird die Funktionsweise der DKIM Signatur genauer erklärt.

E-Mail Header

Das folgende Listning zeigt ein Ausschnitt aus einem mit DKIM signierten E-Mail.

DKIM-Signature: 
v=1; 
a=rsa-sha256; 
c=relaxed/relaxed;
d=amazon.de; 
i=digital-no-reply@amazon.de;
q=dns/txt;
s=amazon201209;
t=1401515577;
x=1433051577;
h=date:from:reply-to:to:message-id:subject:mime-version;
bh=79Y1HKjBx+SfJM6ePcNYyPdW1ZsY+8StC66EffsS9XI=;
b=EOrcD1bA71ngmF7YNKiDqo3IgQwvWpnPR51GTLakL91DcOWp3lxMv8be
OEjtzFfK2G0mWTS1AaxhbtSnn0KWcUAjbiI3OOJP386RiJaeBcdyRM2Nm
XWysEfc7MsWJ4l5cMHaFAxxIDYgFqwKvPrcBk10PU6ZGDYE5lvgSmL7aR
8=;

Der Sender setzt die DKIM Version 1 (v=1) und den Signierungsalgorithmus rsa-sha256 ein. s für Selector bezeichnet den Ort an dem der DKIM Key hinterlegt ist. Im obigen Beispiel bedeutet der Selector s=amazon201209 das der Public Key für diese Nachricht unter amazon201209._domainkey.amazon.com abgerufen werden kann. Der errechnete Body Hash (bh) für die Nachricht ist ebenfalls angegeben.

DNS Selector TXT Record

Der Public Key lautet im Fall von Amazon: p=MIGfMa…..

» dig -t txt amazon201209._domainkey.amazon.com
...
;; QUESTION SECTION:
;amazon201209._domainkey.amazon.com. IN TXT

;; ANSWER SECTION:
amazon201209._domainkey.amazon.com. 658 IN TXT  p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDAjRD+MR0FAGIKMgpN6eK/z7Z+ojWuvb3a79qsLS3IU/hdifXxhoi9+ttd4eUBZKfwtSGVg8uOxGFJpPnp4MvZUgb8L6ZCkB/Big6l9JGPNHXCUo4e3RIQJzgWOuqPpO8pS+8HOJiH+fjxGwTZipiK353MlTudq9b6z8Gn8HCXkQIDAQAB\;

DNS Policy TXT Record

Auch im Policy Record wird mit Key und Value Paaren gearbeitet.

» dig -t txt _domainkey.amazon.com
;; QUESTION SECTION:
;_domainkey.amazon.com.         IN      TXT

;; ANSWER SECTION:
_domainkey.amazon.com.  7200    IN      TXT     t=y\; o=~\; r=abuse@amazon.com

In diesem Beispiel sind die Keys t, o, und r hinterlegt. Weitere Möglichkeiten sind in RFC6376 Kapitel 3.6.1. Textual Representation beschrieben.

DKIM Signatur überprüfen

Um eine DKIM Signatur manuell zu überprüfen, kann das Python Modul PyDKIM installiert werden. Damit wird ein kleines Skript installiert, welches E-Mails als Standard Input entgegenimmt und die Signatur überprüft.

» cat amazon.eml | dkimverify.py
signature ok

Quellen: