Die Forderungen nach verschlüsselten Daten nehmen zu und haben natürlich ihre Berechtigung. Sobald persönliche oder sensible Daten zwischen Servern und Computern im Internet getauscht werden, ist es natürlich erforderlich und empfehlenswert, genau diese Daten zu schützen. Leider setzt sich aber dieser Trend in allgemeiner Handhabung fort. So scheinen viele Websitebetreiber, generell öffentlich zugängliche Daten genauso akribisch zu verschlüsseln, wie eben sensible Daten, die man auf jeden Fall gegen Zugriffe Dritter schützen sollte.
Dieses Vorgehen findet in fast allen Fällen statt, ohne dass die Websitebetreiber überhaupt wissen oder gar verstehen, was ein Verschlüsselungsalgorithmus macht und welche Auswirkungen er auf Performance und Datenübertragung hat.
Die Kryptologen Martin Hellmann und Withfield Diffie entwickelten 1976 ein Verfahren zur sogenannten asymmetrischen Verschlüsselung auf Basis des diskreten Logarithmus und der diskreten Exponentialfunktion. Voraussetzung sollte sein, dass die diskrete Exponentialfunktion bx mod m auch für große Exponenten effizient zu berechnen ist, der diskrete Logarithmus als dessen Umkehrfunktion jedoch nicht.
Hierbei bedient man sich der Uhrenarithmetik, einer Division mit Rest. Ausgegangen wird dabei nicht von unendlich natürlichen Zahlen sondern von einer endlichen Menge natürlicher Zahlen, die sich unendlich wiederholt. Wie bei einer Uhr wiederholt sich die Folge von 12 Stunden. Wenn wir also von 17.00 Uhr nachmittags sprechen, so entspricht das auf der Uhrenskala die 5.
In diesem Fall würden wir schreiben: 17 mod 12 = 5.
So lässt sich aber auch 100.000 mod 12 = 4 ausdrücken. [8333 x 12 +4]
Schauen wir uns nun einmal an, wie eine Verschlüsselung in der Praxis funktioniert.
Es gibt zwei Kommunikationspartner, den Server und den Client, die über das unsichere Internet verschlüsselt kommunizieren wollen. Hierfür benötigen beide Seiten einen gemeinsamen geheimen Schlüssel. Ein Kommunikationsprotokoll sorgt dafür, dass ein geheimer Schlüssel berechnet wird, ohne dass Dritte diesen ermitteln können. Dieser Schlüssel ist die Basis der künftigen verschlüsselten Kommunikation.
Bei der ersten Kommunikation des Clients mit dem Server sendet dieser zunächst öffentlich eine große Primzahl p und eine natürliche Zahl g, die kleiner als p ist, an den Client. Da diese Information öffentlich ist, kann natürlich auch ein dritter Lauscher, diese beiden Zahlen erfahren.
Im nächsten Schritt erzeugen der Server wie auch der Client geheime Zufallszahlen s und c aus der Menge {1,…,p-1}. Diese beiden Zahlen werden nicht übertragen und bleiben daher für dritte Lauscher geheim.
Nun berechnet der Server mit seiner geheimen Zahl s den öffentlichen Schlüssel S = gs mod p und schickt diesen an den Client.
Der Client berechnet mit seiner geheimen Zahl c einen öffentlichen Schlüssel C =gc mod p und teilt diesen dem Server mit.
Der Server errechnet mit dem öffentlichen Schlüssel C des Clients und seinem privaten Schlüssel s die Zahl K1 = Cs mod p.
Der Client berechnet mit dem öffentlichen Schlüssel des Server S und seinem privaten Schlüssel c die Zahl K2 = Sc mod p.
Da K1 = Cs = ( gc )s = ( gs )c = Sc = K2 gilt, haben beide die gleiche Zahl berechnet. Diese ist somit der gesuchte gemeinsame Schlüssel K. Dieser ist die Basis der künftigen Verschlüsselung.
Nur der Server und Client kennen K. Dritte können aus der Abhörung der Kommunikation K nicht berechnen. Dazu müsste sie den diskreten Logarithmus lösen, was nach heutigem Kenntnisstand nicht effizient möglich ist, wenn die Zahlen groß genug sind.
Das folgende Beispiel dient zur Veranschaulichung und benutzt deshalb sehr kleine Zahlen. In der tatsächlichen Anwendung werden dagegen Zahlen mit mindestens mehreren hundert Stellen benutzt.
Im folgenden Beispiel rechnen wir einmal mit einfachen Zahlen. Als Primzahl p wählen wir die 11 und als gemeinsame Basis wählen wir der Einfachheit halber die 2. Es gilt g {1,…,(11-1)}
Der Server wählt nun eine geheime Zahl , die kleiner als die Primzahl p ist. In unserem Beispiel die 7. Der Client wählt die 5.
Nun berechnet der Server S = gs mod p = 27 mod 11 = 128 mod 11 = 7 und teilt diesen öffentlichen Schlüssel dem Client mit. Der Client berechnet C = gc mod p = 25 mod 11 = 32 mod 11 = 10 und teilt diesen Schlüssel dem Server mit.
Der Server berechnet nun K1 = Cs mod p = 107 mod 11 = 10.
Der Client berechnet nun K2 = Sc mod p = 75 mod 11 = 10.
Der gemeinsame geheime Schlüssel ist K = K1 = K2 = 10.
Wenn die Primzahl p groß genug ist, ist es für Dritte zu aufwendig, alle Zahlen zwischen 1 und p-1 zu durchlaufen, um den geheimen Schlüssel K zu ermitteln. In der Praxis werden hier Primzahlen mit mehreren hundert Stellen benutzt. Die Primzahl p muss so gewählt werden, dass diskrete Logarithmen modulo p mit derzeit bekannten Methoden nicht effizient berechnet werden können. Je größer die verwendete Primzahl, desto sicherer ist das Verfahren. Man sollte aber bedenken, dass die Erzeugung sicherer Primzahlen sehr rechenaufwendig ist. Viele Implementierungen verwenden daher eine feste Primzahl. Dadurch wird die Verschlüsselung allerdings auch weitaus anfälliger.
So sicher diese Methode auch ist, so muss jedoch mit jeder beginnenden Kommunikation zwischen Server und Client im https-Verfahren die gesamte Prozedur erneut gestartet werden. Das hat natürlich auch einen Einfluss auf die Performance der Server und Clients sowie auf die Geschwindigkeit der Datenübertragung. Hinzu kommt noch der eigentliche Prozess der Verschlüsselung und Entschlüsselung jedes zu übertragenden Zeichens einer Website. Die oben dargestellte Prozedur ermittelt lediglich den geheimen Schlüssel für die Verschlüsselung.
So ist es sicher nicht sinnvoll, jegliche Webseiteninhalte uneingeschränkt zu verschlüsseln, auch hinsichtlich der Tatsache, dass womöglich hunderte oder gar hunderttausende Verbindungen von Clients zum Server zeitgleich bestehen. Letztendlich wäre dies so, als ob man ein öffentliches Gebäude mit mehreren hundert Schlössern versschließt und jedem Nutzer, der Zugang zu diesem öffentlichen Gebäude hat, zu allen Schlössern die benötigten Schlüssel überreicht, um dieses zu öffnen. Hier stellt sich die Frage, warum dieses Gebäude überhaupt öffentlich und für jeden zugänglich ist. Website-Administratoren sollten also entsprechende Überlegungen nicht nur oberflächlich und voreilig treffen, sondern generell erst einmal verstehen, was überhaupt geschieht, wenn eine Internetverbindung verschlüsselt wird.
Mit intelligenten Methoden kann man Algorithmen erstellen, die individuell entscheiden, welche Art der Datenübertragung zwischen Client und Server angebracht sind.