Public Keys im DNS

Wie kann der DKIM-Anwender nun den Public Key für seine E-Mail-Signatur veröffentlichen und garantieren, dass er dessen Eigentümer ist? Indem er ihn in das Domain Name System (DNS) einträgt. Das löst auf geschickte Weise gleichzeitig die Probleme der Verfügbarkeit und Verteilung, denn jeder Mail sendende oder empfangende Rechner benötigt sowieso einen Zugriff auf das DNS-System, und jeder Sender hat die alleinige Verfügungsgewalt über die DNS-Einträge seiner Domain.

Außerdem verursacht das Verfahren keine Kosten. Die Einträge lassen sich unentgeltlich benutzen, hinterlegen oder wieder entfernen, was ein weiteres wichtiges Designziel erfüllt. Dadurch ist es sogar möglich, für eine Domain mehrere Schlüssel zu erzeugen, was eine große Flexibilität ohne hohe Komplexität ermöglicht. Schließlich ist auf diese Weise auch das Zurückziehen eines Schlüssels – sonst häufig ein Problem – ganz einfach: Man löscht den Key im DNS, und damit ist er nicht mehr verfügbar, sobald die letzten Einträge aus dem Cache des DNS herausgealtert sind.

Um die öffentlichen Schlüssel zu speichern, verwendet DKIM TXT-Records als wohldefinierten Teil des DNS-Namensraums. Heißt die Domain zum Beispiel example.net, dann finden sich alle Schlüssel unter dem Eintrag »_domainkey.example.net«. Eine einfache Domain hat in der Regel nur einen Schlüssel, der dann etwa »one._domainkey.example.net« heißen könnte. Prinzipiell lässt sich aber eine beliebige Anzahl solcher TXT-Records unterhalb von »_domainkey« anlegen. In diesem Fall unterscheidet sie DKIM jeweils anhand eines so genannten Selektors.

TXT-Records sind generische Container im DNS und damit durchaus ein brauchbarer Weg, um neue Einträge zu integrieren. Trotzdem löste diese Wahl im Verlauf des Standardisierungsprozesses der IETF eine handfeste Kontroverse aus – einige Mitglieder empfahlen nämlich stattdessen einen eigenen neuen Eintrag vom Typ »RR« für die Keys. Das wäre auch theoretisch der richtige Weg – allerdings bräuchte es in der Praxis fünf bis zehn Jahre, bis diese Einträge im Internet überall unterstützt würden, eine zu lange Zeit. Stattdessen erwiesen sich die TXT-Einträge am Ende doch als der pragmatischste Ansatz.

Das Format dieser Einträge beschreibt der DKIM-RFC [1] im Detail, an dieser Stelle soll daher ein einfaches kurzes Beispiel genügen. Der »p«-Tag enthält hier den Public Key im Format Base64.

one._domainkey.example.net IN TXT "p=MIGfMA0GCSqGsi8...

Signatur im E-Mail-Header

Hat der Absender eine Mail signiert, muss er den digitalen Wert der verwendeten Signatur dem Empfänger zugänglich machen, damit dieser sich vergewissern kann, dass die Nachricht tatsächlich vom behaupteten Absender stammt. Der einfachste Weg, um die Signatur dem Empfänger bereitzustellen, ist, sie gleich in die Mail miteinzubetten. Im Unterschied zu S/MIME und PGP verpackt DKIM den Signaturwert in einen eigenen Header-Eintrag nach RFC2822 [5]. Das sieht dann etwa so aus wie im folgenden Beispiel:

DKIM-Signature: v=0.5; a=rsa-sha256; q=dns/txt; d=yahoo.com;
c=relaxed/simple; s=s1024;
h=Content-Type:From:Subject;
b=domNkiCauldyol0JT3dtazMTFKtC0CePXxLw77XxcLkrI99VY+L3xq7ySkyim5kjAzNeiEZY8UJNzzF+Y0vuUA9OMbPTPV7gJxnuuBVIuaPYvSA28TM2eFagnWLUbfkRbRgueeJMbOUQV0dMQBxaeIA1HAe31Jz5NWiIUdlL+74=;

Die Einträge sind weitgehend selbsterklärend. Die Felder mit den Tag-Werten in der ersten Zeile spezifizieren ein paar besondere Aspekte der Signatur und des Schlüssels. Wie das Beispiel zeigt, gibt der »d«-Tag die Domain an, der Selektor (hier »s1024«) unterscheidet verschiedene Schlüssel, und der »q«-Tag definiert, dass der Public Key über die Methode »dns/txt« zu beziehen ist. (Das ist im Moment die einzige unterstützte Methode.) Mit den Informationen kann das überprüfende System auf den Eintrag »s1024._domainkey.yahoo.com« im DNS zugreifen, der einen gültigen öffentlichen RSA-Key (»a=rsa-sha256«) enthält.

Die Berechnung der Signatur auf der Senderseite ist schwieriger, als es auf den ersten Blick scheint. Die Arbeitsgruppe der IETF musste sehr viel Zeit in das Problem der nötigen Aufbereitung der E-Mails vor dem Signieren investieren.

Abbildung 4: Der Empfänger besorgt sich den öffentlichen Schlüssel. Woher diesen bekommt, entnimmt er dem DKIM-Header der Mail.

Ähnliche Artikel

comments powered by Disqus
Einmal pro Woche aktuelle News, kostenlose Artikel und nützliche ADMIN-Tipps.
Ich habe die Datenschutzerklärung gelesen und bin einverstanden.

Konfigurationsmanagement

Ich konfiguriere meine Server

  • von Hand
  • mit eigenen Skripts
  • mit Puppet
  • mit Ansible
  • mit Saltstack
  • mit Chef
  • mit CFengine
  • mit dem Nix-System
  • mit Containern
  • mit anderer Konfigurationsmanagement-Software

Ausgabe /2023