Das DNS-System ist aus den 80ern und es gab lange Zeit keine Möglichkeit zu prüfen, ob die Antwort, die einem ein DNS-Server liefert, auch wirklich vertrauenswürdig ist.
Vertrauenswürdig heißt, dass die Antwort vom für diese Domain zuständigen DNS-Server kommt.

Es entstand DNSSEC. Die Technik hängt jeder DNS-Antwort eine Signatur an, anhand welcher die Echtheit der Antwort geprüfen werden kann:

Anfrage nach einem A-Eintrag (Name zu IP) ohne aktiviertes DNSSEC auf dem DNS-Server (Antworten gekürzt):

stefan@wrk1:~$ dig +dnssec www.heise.de A
;; ANSWER SECTION:
www.heise.de. 2545 IN A 193.99.144.85

Anfrage nach einem A-Eintrag mit aktiviertem DNSSEC:

stefan@wrk1:~$ dig +dnssec dnssec.iis.se A
;; ANSWER SECTION:
dnssec.iis.se. 59 IN A 91.226.36.46
dnssec.iis.se. 59 IN RRSIG A 5 3 60 20140519050501 20140509050501 50399 iis.se. N4p+QXT/ejOYQUEdbcZjFdDqTWTWvd4mXUy+OqeaHVX9Bf5HGibCkd45 lYegbz+RJ/oZgTL91U0fpxWjZ9y954kI0HbRPNI+Rd/jdWharSaUP0r8 mnYFdDa6hQL4IoYTakudcyDMWIzah+AI7PmccOLHkZhCpE9i55zvnfeG mGE=

Die erste Anfrage liefert uns also nur die IP zum Namen.
Die zweite Antwort liefert die passende Signatur für den A-Eintrag.

Wie verifiziert man jetzt, ob die Signatur zum dafür zuständigen DNS-Server gehört/gültig ist?
DNS bzw. die Namensvergabe basiert auf einer Baumstruktur – also:

heise.de. (Heise zuständig)
.de. (DENIC zuständig)
. (ICANN zuständig)

stefan@wrk1:~$ dig . DNSKEY | grep -Ev ‚^($|;)‘ > root.keys
(wir beziehen die Schlüssel von der Root-Zone)
Ähnlich wie bei SSL mit Root-CAs reicht es, wenn wir der obersten Verwaltung vertrauen.

Im letzten Schritt überlassen wir dig die Arbeit der Validierung:

stefan@wrk1:~$ dig +sigchase +trusted-key=./root.keys dnssec.iis.se. A | cat -n

Die letzte Zeile spricht von erfolgreich oder nicht:

;; Ok this DNSKEY is a Trusted Key, DNSSEC validation is ok: SUCCESS

Quelle:
http://de.wikipedia.org/wiki/Domain_Name_System_Security_Extensions

DNSSEC verification with dig

Categories: BlogNetzwerk