Die Public-Key-Authentifizierung gilt derzeit als eine der sichersten Methoden für den Login in ein System. Sie ist weitverbreitet in der Welt von SSH und ersetzt damit – in gewisser Weise – das Passwort. Im Gegensatz zu letztgenannten meldest du dich mit einem Schlüssel an. Aber wie funktioniert das Ganze?
Public Key und Private Key
Für die Public-Key-Authentifizierung werden zwei Schlüssel benötigt, ein Public Key und ein Private Key. Stell dir das System wie eine Haustür vor, wobei die Haustür dein SSH-Server ist. Um hineinzukommen, benötigst du einen Schlüssel, den nur du besitzt. Das wäre der Private Key. Diesen steckst du in das Schloss – das wäre der Public Key. Er hat seinen Namen nicht von ungefähr: Er ist „public“, also öffentlich. Klar, denn das Schloss an deiner Tür kann ja auch jeder sehen, der vor der Tür steht.
Auf dem Server ist es so ähnlich. Du benötigst beide Schlüssel. Den Public Key hinterlegst du auf dem Server, den Private Key hältst du unter Verschluss, auf deinem eigenen Computer. Du musst dafür sorgen, dass Unbefugte niemals Zugriff darauf haben! Andernfalls können sie einfach in den Server hineinspazieren. Denn wer den Schlüssel hat, kann die Tür öffnen.
Wie funktioniert das Ganze?
Die dahinterliegende Technik nennt sich „asymmetrisches Kryptosystem“. Das Verfahren an sich ist ziemlich mathematisch, deshalb gibt es hier „alles, was du wissen musst“.
Du möchtest dich in deinen SSH-Server einloggen. Dafür verwendest du einen SSH-Client. Das System funktioniert so, dass sich der Server eine Nachricht ausdenkt und diese mit dem hinterlegten Public Key verschlüsselt. Die verschlüsselte Nachricht sendet er an den Client. Dieser kann dank des Private Keys die Nachricht entschlüsseln und entsprechend darauf reagieren. Da die Antwort des Clients zur verschlüsselten Nachricht des Servers passt, kann der SSH-Server daraus schlussfolgern, dass du den privaten Schlüssel besitzt und damit offensichtlich zugangsberechtigt bist.
Eine Falltürfunktion
In der Mathematik nennt man den Mechanismus, der hier zum Einsatz kommt, eine „Falltür- oder Einwegfunktion“. Diese zeichnet sich dadurch aus, dass eine Funktion leicht zu berechnen, aber ohne Kenntnis eines Geheimnisses nicht umkehrbar ist. Die Beschreibung der Funktion ist der öffentliche Schlüssel, das Geheimnis ist der private Schlüssel.
Damit das Ganze funktioniert und sicher ist, muss definitionsgemäß klar sein, dass es keinen Weg gibt, aus dem öffentlichen Schlüssel den privaten zu berechnen. Natürlich ist nichts tatsächlich unmöglich: Genügend Rechenleistung vorausgesetzt, lässt sich natürlich der Private Key aus dem Public Key erzeugen. Strenggenommen handelt es sich auch nicht um eine Berechnung, sondern um das stumpfe Durchprobieren aller möglichen Kombinationen („Bruteforce“), bis der richtige Wert gefunden ist. Dem kann man jedoch mit einem hinreichend langen Schlüssel entgegenwirken, sodass die Prozedur derart viel Rechenleistung und vor allem trotzdem Zeit in Anspruch nimmt, dass das Unterfangen nicht praktikabel ist.
Bewiesen ist nichts – aber ziemlich wahrscheinlich
Der Vollständigkeit halber sei noch erwähnt, dass die Funktionsweise „die beste, die wir haben“ ist. Es ist mathematisch bisher nicht bewiesen, ob die verwendeten Algorithmen den Anforderungen an Einwegfunktionen entsprechen. Es gibt momentan nicht den Beweis, dass es überhaupt derlei Funktionen gibt. Was es jedoch gibt, ist die bislang erfolglose Suche nach einer Umkehrung des Algorithmus sowie zahllose Überlegungen, warum es „wahrscheinlich“ keine Umkehrung gibt.
Die Frage ist nicht, ob es geknackt wird – sondern wann
Wie so häufig in der Kryptografie geht es in dem Thema weniger darum, ob das Verfahren wirklich sicher ist, sondern viel mehr, wann es geknackt werden kann. Momentan gilt es noch als sicher, denn wenn die Schlüssel korrekt erzeugt wurden, ist kein Weg bekannt, der schneller zu einer Umkehrung führt als Bruteforce.
Für eine Zugangskontrolle, wie in einem SSH-Server, ist dies gut genug. Wenn es ein Angreifer wirklich darauf anlegen will, an die verschlüsselten Inhalte zu kommen, hätte er die Möglichkeit, den Datenverkehr in seiner verschlüsselten Form aufzuzeichnen. Dann hätte er gewissermaßen beliebig viel Zeit zum Entschlüsseln. Da dies mit einem hinreichend sicheren Schlüssel und momentan verfügbarer Rechenleistung aktuell Jahre (oder Jahrzehnte) dauert, ist der Fall in der Praxis weitestgehend irrelevant. Denn auch wenn es einem Angreifer gelingen sollte, die Informationen aus der Kommunikation mit dem SSH-Server zu entschlüsseln, sind die Informationen bedeutungslos. Der Angreifer könnte zwar nachvollziehen, ob und wann du deine Linux-Distribution aktualisiert hast, aber bis die Entschlüsselung erfolgreich war, existiert der Server vermutlich schon gar nicht mehr. Es ist also dennoch nicht möglich, dass der Angreifer Zugriff auf deinen Server erlangt.
Wo wird das Verfahren noch eingesetzt?
Neben der Zugangskontrolle für einen SSH-Server findet der beschriebene Mechanismus noch in weiteren Bereichen der IT Anwendung. Am weitesten verbreitet ist dabei vermutlich die Übertragungsverschlüsselung bei Webseiten über HTTPS. Auch in E-Mails lässt sich das Ganze verwenden; die Stichwörter sind hier OpenPGP und S/MIME.