Gute Zahlen, schlechte Zahlen

Seite 3: Diffie-Hellman-Verfahren

Inhaltsverzeichnis

Der Diffie-Hellman-Schlüsselaustausch ist ein kryptographisches Protokoll, mit dem sich zwei Kommunikationspartner durch den Austausch nicht geheimer Informationen auf ein gemeinsames Geheimnis einigen können, ohne dass dieses über die Leitung geht. Es dient dann als Sitzungsschlüssel für eine symmetrische Verschlüsselung der ausgetauschten Nachrichten.

Da das DH-Protokoll keine Authentisierung der Partner vorsieht, ist es anfällig für Man-In-The-Middle-Angriffe: Ist ein Angreifer in der Lage, sich aktiv in die Kommunikation zwischen den beiden Partnern einzuschleifen, so kann er gegenüber beiden vorgeben, der jeweils andere Partner zu sein und so selbst mit beiden ein gemeinsames Geheimnis vereinbaren. In der Praxis wird DH daher immer zusammen mit einem zusätzlichen Authentisierungsverfahren verwendet, in der Regel auf Basis von digitalen Signaturen.

Eine wichtige Eigenschaft des Protokolls ist, dass es bei korrekter Implementation sogenannte Perfect Forward Secrecy (PFS) erreicht. Das bedeutet, dass ein Angreifer den ausgehandelten Sitzungsschlüssel selbst dann nicht ermitteln kann, wenn er bereits alle anderen an der Kommunikation beteiligten Schlüssel wie die privaten Schlüssel der Kommunikationspartner kompromittiert hat. Einen Mitschnitt einer solchermaßen geschützten Verbindung kann er auch nachträglich nicht entschlüsseln.

Um Perfect Forward Secrecy für Diffie-Hellman zu erreichen, müssen die beiden Kommunikationspartner lediglich die für den DH-Austausch erzeugten Zufallszahlen unmittelbar nach der Einigung auf den Sitzungsschlüssel verwerfen. Kann der Angreifer jedoch mindestens eine der beiden für Diffie-Hellman verwendeten Zufallszahlen erraten, so bricht die Perfect Forward Secrecy zusammen, und der Angreifer kann unmittelbar auf den vereinbarten symmetrischen Schlüssel zurückschließen.

Auf diese Weise lassen sich mitgelesene Sitzungen nachträglich entschlüsseln. Es ist dabei nicht nötig, die asymmetrischen Schlüssel anzugreifen, da ein direkter Angriff auf den Sitzungsschlüssel möglich ist. Im Fall von OpenSSH gilt dies auch für Verbindungen, bei denen eine Authentisierung nicht mit dem Public Key, sondern mit Benutzername und Passwort erfolgte.

Dass dies in der Praxis funktioniert, zeigt das Skript check_weak_dh_ssh.pl von Alexander Klink, das mitgeschnittene OpenSSH-Sitzungen im PCAP-Format analysiert. Es versucht, anhand der im Handshake ausgehandelten Diffie-Hellman-Parameter durch Proberechnung mit allen unter dem verwundbaren Debian-OpenSSL möglichen Zufallszahlen auf den im Handshake gesendeten Wert zu kommen und gibt im Falle eines Treffers aus, welche Clients mit schlechten Zufallszahlen gearbeitet haben. Das Skript kann zur Zeit keine Server erkennen, die mit schlechten Zufallszahlen arbeiten, da Server pro PID und Verbindungsanzahl eine Zufallszahl generieren und das Skript mehr vorberechnete Daten benötigen würde.