Kapitel 2 Public-Key-Kryptographie In diesem Kapitel soll eine kurze Einführung in die Kryptographie des 20. Jahrhunderts und die damit verbundene Entstehung von Public-Key Verfahren gegeben werden. Es soll dabei auf die grundlegenden Probleme von Private-Key Verfahren sowie die ersten Lösungsansätze eingegangen werden. 2.1 Entstehung Nach Ende des Zweiten Weltkriegs und mit Beginn des Informationszeitalters entstanden viele neue Verschlüsselungsalgorithmen, welche nach dem Kerckhoffs-Prinzip 1 entwickelt wurden. Dieses Prinzip verlangt, dass die Sicherheit eines Verschlüsselungsverfahrens nur von der Geheimhaltung des Schlüssels, jedoch nicht von der Geheimhaltung des Algorithmus abhängen darf. Damit wollte man verhindern, dass Verfahren, deren genaue Arbeitsweise nicht veröffentlicht wird, auf breiter Basis eingesetzt werden, da sich solche Verfahren in der Vergangenheit oftmals als sehr unsicher herausgestellt haben. Durch die Offenlegung der Verfahren konnten diese nun von verschiedenen Personen auf ihre Sicherheit hin untersucht werden. Dennoch konnten auch mit dem Kerckhoffs Prinzip zwei grundlegende Probleme für sämtliche Private-Key Verfahren also Verfahren, welche ausschließlich mit einem geheimen Schlüssel arbeiten, nicht gelöst werden: Möchten zwei Personen verschlüsselte Informationen austauschen, so müssen sie zunächst einen geheimen Schlüssel vereinbaren. Dies erweist sich als schwierig, wenn diese Personen keinen direkten Kontakt haben. Diese Schwierigkeit wird auch als Schlüsseltauschproblem bezeichnet. 1 Auguste Kerckhoffs (1835-1903), niederländischer Linguist und Kryptologe 5
Jede Person muss für alle Kommunikationspartner je einen geheimen Schlüssel verwalten. Bereits bei wenigen Partnern tritt dabei das Problem auf, dass diese Schlüssel z.b. in Schlüsselbüchern notiert werden müssen, so dass dies ein Sicherheitsrisiko darstellt. In der Literatur ist dies auch als Schlüsselverwaltungsproblem bekannt. Es stellte sich nun die Frage, ob es überhaupt möglich ist, dass zwei Kommunikationspartner über einen unsicheren Kanal 2 einen geheimen Schlüssel austauschen können, welcher auch nach der Übertragung geheim bleibt. Dies wurde oftmals verneint, da jede Person, welche den unsicheren Kanal abhört, genau die Informationen mitlesen kann, welche die Kommunikationspartner austauschen. Bis Mitte der 70er Jahre sollte es auf diese Fragestellung also keine zufriedenstellende Antwort geben. 2.1.1 Merkles Rätsel Im Jahr 1974 schlug der damalige Student Ralph Merkle folgendes Verfahren vor, mit welchem die Kommunikationspartner Alice und Bob 3 über einen unsicheren Kanal einen geheimen Schlüssel vereinbaren können. Es läuft dabei in folgenden Schritten ab: 1. Bob erzeugt n Nummern x 1,..., x n sowie zweimal n Schlüssel y 1,..., y n und k 1,..., k n. Es ist dabei zu beachten, dass die Nummern zufällig erzeugt werden, also dass zwischen diesen keine Abhängigkeit besteht. 2. Nun verschlüsselt er jedes Tupel (x i, y i ) (1 i n) mit dem dazugehörigen Schlüssel k i und erhält n Rätsel (als Verschlüsselungsverfahren kann dabei jeder symmetrische Algorithmus verwendet werden). 3. Jetzt sendet er alle Rätsel an seine Kommunikationspartnerin Alice. 4. Diese wählt ein zufälliges Rätsel k {1,..., n} aus, entschlüsselt dieses mit einem Bruteforce-Angriff, erhält (x k, y k ) und sendet x k wieder an ihren Kommunikationspartner. 5. Bob sucht den zu der Nummer x k zugehörigen Schlüssel y k heraus. Der Wert y k kann nun als geheimer Schlüssel für ein beliebiges symmetrisches Verschlüsselungsverfahren verwendet werden. Sollte eine Person die Kommunikation zwischen Alice und Bob mitlesen, so muss sie alle Rätsel 2 Unter einem unsicheren Kanal versteht man eine Verbindung, die jederzeit mitgehört werden kann 3 Alice und Bob sind Synonyme für Sender bzw. Empfänger 6
lösen, bis sie auf das Rätsel mit der Nummer x k stößt. Dafür sind im Durchschnitt aber etwa n 2 Rätsel notwendig, so dass sich für die einzelnen Parteien folgender Aufwand ergibt: Bob: Erzeugen von n Rätseln Alice: Entschlüsselung eines Rätsels mittels Bruteforce Angreifer: Entschlüsselung aller Rätsel, bis das Rätsel mit der Nummer x k gefunden ist Ertel [Ert01, S. 75f] gibt zu diesem Verfahren ein Zahlenbeispiel an, bei welchem er annimmt, dass Alice und ein Angreifer je ca. 10 4 Schlüssel pro Sekunde testen können und Bob 2 20 verschiedene Rätsel erzeugt. Somit ist Alice in der Lage, ihr gewähltes Rätsel in etwa zwei Minuten zu lösen, während ein Angreifer ungefähr 2 19 220 Sekunden (und somit etwa 636 10 4 Tage) benötigt, um das Rätsel mit der Nummer x k (und den dazugehörigen Schlüssel y k ) zu finden. Merkle hatte somit erstmals (auf etwas komplizierte Weise) gezeigt, dass es doch möglich ist, einen Schlüssel über einen unsicheren Kanal zu vereinbaren, ohne dass Angreifer diesen sofort ermitteln können. Diese Verfahren fand aber keine Anwendung, da das Verhältnis zwischen Aufwand des Angreifers und Aufwand für Alice und Bob zu gering ist, um in der Praxis als sicher zu gelten. 2.1.2 Diffie-Hellman-Schlüsselaustausch Whitfield Diffie und Martin Hellmann veröffentlichten zwei Jahre später in ihren Aufsatz New Directions in Cryptography (vgl. [WD76, S. 644-654]) einen weiteren Algorithmus, mit welchem zwei Kommunikationspartner über einen unsicheren Kanal einen geheimen Schlüssel vereinbaren können. Dieses Verfahren stellt allerdings eine Erweiterung zu dem Algorithmus von Merkle dar, da nun ein deutlich höherer Aufwand nötig ist, um Kenntnis vom Schlüssel zu erlangen. 1. Alice und Bob wählen eine große Primzahl p und eine Zahl g 2. Alice wählt eine Zufallszahl x, berechnet X = g x (mod p) und sendet dieses Ergebnis an ihren Partner 3. Bob wählt ebenfalls eine Zufallszahl y, bestimmt Y = g y (mod p) und sendet dies über den Kanal an Alice 7
4. Alice berechnet nun k = Y x (mod p); Bob hingegen k = X y (mod p) Nun gilt: k = Y x (mod p) = (g y (mod p)) x (mod p) = g y x (mod p) = (g x ) y (mod p) = X y (mod p) = k. Somit haben sich die beiden Kommunikationspartner auf einen geheimen Schlüssel k = k geeinigt. Dieses Verfahren kann als sicher angesehen werden, weil zwar die Werte X = g x (mod p) und Y = g y (mod p) öffentlich bekannt sind, jedoch x und y geheim bleiben. Diese Zahlen sind jedoch nötig, um X y (mod p) bzw. Y x (mod p) zu bestimmen, können aber durch Lösen der entsprechenden Gleichungen bestimmt werden. Diese Gleichungen sind aber als Problem des diskreten Logarithmus bekannt, für welches bis heute kein effizientes Lösungsverfahren bekannt ist. In ihrem Aufsatz definierten die Autoren ebenfalls erste Forderungen an Public-Key Kryptosysteme, konnten aber noch kein konkretes System nennen. Nach der Veröffentlichung dieser Postulate entstand ein Wettlauf um die Entwicklung des ersten Public-Key Kryptosystems, welches Rivest, Shamir und Adleman mit der Definition des RSA-Verfahrens 1978 gewinnen sollten. 2.2 Schlüsselverwaltung Neben dem RSA-Verfahren wurden einige weitere Public-Key Kryptosysteme entwickelt, welche alle die folgenden Eigenschaften teilen: Jeder Benutzer besitzt einen öffentlichen Schlüssel K o, welcher öffentlich zugänglich gemacht wird. Er wird dazu benutzt, dass jede andere Person diesem Benutzer eine verschlüsselte Nachricht zukommen lassen kann. Weiterhin hat jeder Benutzer einen zu dem öffentlichen Schlüssel passenden privaten Schlüssel K p, welcher nicht veröffentlicht werden darf. Dies wird gefordert, da der Besitzer dieses privaten Schlüssels Nachrichten, welche mit dazugehörigen öffentlichen Schlüssel kodiert wurden, dekodieren kann. Es muss praktisch unmöglich sein, den privaten Schlüssel aus dem öffentlichen Schlüssel in polynomieller Zeit abzuleiten. Public-Key Verfahren greifen auf Funktionen mit bestimmten Eigenschaften zurück (siehe Kapitel 3), um dies zu gewährleisten. Da die Public-Key Kryptographie sowohl das Schlüsselaustausch als auch das Schlüsselverwaltungsproblem löst, ist es für jeden Benutzer nun ohne 8
weiteres möglich, seinen öffentlichen Schlüssel zu veröffentlichen. Die Vereinbarung eines Schlüssel über einen sicheren Kanal ist somit überflüssig. Zur Hinterlegung der öffentlichen Schlüssel eignen sich sogenannte Keyserver, welche mit Telefonbüchern verglichen werden können. Jeder Benutzer speichert dabei seinen Benutzernamen und seinen öffentlichen Schlüssel auf diesem Server, so dass andere Benutzer dieser Person unter Kenntnis dieses Schlüssels eine kodierte Nachricht zukommen lassen können. Es bleibt allerdings zu erwähnen, dass bei der Hinterlegung des öffentlichen Schlüssels sichergestellt werden muss, dass die Person, die einen Schlüssel hinterlegen möchte, sich auch als diejenige identifizieren kann. Dazu wird auf sogenannte Zertifizierungsstellen zurückgegriffen, wie in Buchmann [Buc01, S. 209f] beschrieben ist. 9