Die RSA-Verschlüsselung

Nach etwa 2000 Jahren weiterer Forschungsarbeit stehen heute weitaus sicherere und den technischen Umständen angepasstere Verschlüsselungsmethoden als die Caesar-Chiffre zur Verfügung. Dabei handelt es sich sowohl um asymmetrische als auch um symmetrische Verfahren. Alle aufzuführen, würde den Rahmen der Arbeit aber sprengen. Ein Beispiel für ein modernes Kryptosystem stellt die RSA-Verschlüsselung dar. Sie wurde im Jahre 1977 von Ronald L. Rivest, Adi Shamir und Leonard Adleman am Massachusetts Institute of Technology entwickelt. Ihr Name leitet sich aus den Anfangsbuchstaben der Entwickler her. Anwendung findet RSA bis heute in verschiedenster Verschlüsselungssoftware wie zum Beispiel beim freien GNU Privacy Guard, auch GnuPG genannt, dem kommerziellen Pretty Good Privacy, besser bekannt unter der Bezeichnung PGP, sowie im Netzwerkprotokoll SSH. Es handelt sich um ein asymmetrisches Kryptosystem mit zwei Schlüsseln, das auf der Annahme beruht, dass die Zerlegung einer großen Zahl in ihre Primfaktoren bei genügend großen Zahlen eine sehr rechenintensive Aufgabe ist. Da dies zur unbefugten Entschlüsselung notwendig wäre, ist einen Bruch der Verschlüsselung fast unmöglich.

Warum zwei Schlüssel besser sind

Werden zwei Schlüssel verwendet, dann spricht man von einem asymmetrischen Kryptosystem. Zwei Schlüssel werden zu je einem Schlüsselpaar, von denen jede am Kryptosystem beteiligte Person eines besitzen muss, zusammengefasst. Ein solches Schlüsselpaar besteht meist aus einem privaten und einem öffentlichen Schlüssel. Der private Schlüssel muss unter allen Umständen geheim bleiben, während der öffentliche Schlüssel meist im Internet auf sogenannten Schlüsselservern verbreitet wird. Soll nun eine Nachricht an einen Teilnehmer des Systems verschlüsselt gesendet werden, so wird die Nachricht mit dem öffentlichen Schlüssel des Empfängers verschlüsselt. Eine Entschlüsselung ist dann nur mit dem privaten Schlüssel des Empfängers möglich. Dieser befindet sich bereits beim Empfänger, eine Übertragung eines geheimen Schlüssels über einen eventuell unsicheren Weg entfällt also. Damit ist es dem Kryptoanalytiker nicht möglich, durch Abhören der Übertragungswege in Kenntnis des geheimen Schlüssels zu kommen, was der große Vorteil dieses Verfahrens ist. Die Nachteile dieser auch Public-Key-Verfahren genannten Kryptosysteme sind zum einen ihre meist erheblich langsamere Geschwindigkeit. Außerdem ergibt sich ein großer Mehraufwand, wenn eine Information an mehrere Empfänger verschickt werden soll. Während es bei einem symmetrischen Kryptosystem ausreicht, die Nachricht einmal zu verschlüsseln, muss bei einem asymmetrischen Kryptosystem die Nachricht für jeden Empfänger einzeln verschlüsselt werden.

Einwegfunktionen als Grundlage sicherer Verschlüsselung

Eine Einwegfunktion ist eine mathematische Funktion, die „in einer Richtung“ einfach durchzuführen ist, ihre Umkehrfunktion ist jedoch schwer, noch nicht oder idealerweise gar nicht lösbar. Im konkreten Fall der RSA-Verschlüsselung ist eine Multiplikation zweier großer Primzahlen einfach durchzuführen, während die Zerlegung des Produkts in Primfaktoren zu einer nahezu unmöglichen Aufgabe werden kann. Nur durch den Einsatz modernster Computer und einiger Zeit ist es möglich, große Zahlen zu in ihre Primfaktoren zu zerlegen. Beispielsweise konnte die 232-stellige Zahl RSA768 erst am 12. Dezember 2009 in ihre beiden Faktoren zerlegt werden, in der Praxis werden jedoch oft deutlich größere Zahlen als diese verwendet. Die Primfaktoren ihrerseits ermöglichen im Fall von RSA die Berechnung der Information, die zum Entschlüsseln verwendet wird. Ohne diese Information stellt die Entschlüsselung bei RSA die praktisch unmögliche Umkehrfunktion einer weiteren Einwegfunktion dar. Bei dieser Umkehrung handelt es sich um die Berechnung der e-ten Wurzel modulo N, wobei der Parameter e unbekannt ist.

Was eine Falltür mit Verschlüsselung zu tun hat

Damit die Umkehrfunktion einer Einwegfunktion nun doch relativ einfach berechenbar ist, wird eine Zusatzinformation, eine sogenannte „Falltür“ benötigt. „Falltür“ wohl deshalb, weil durch sie eine Möglichkeit gegeben ist, mit der man der schweren Berechnung einer Umkehrfunktion „entfliehen“ kann. Bei der RSA-Verschlüsselung ist diese zusätzliche Information im privaten Schlüssel gespeichert. Mit ihr kann die e-te Wurzel modulo N effizient berechnet werden, sie ist sozusagen die „Falltür“ bei RSA. Die Berechnung dieser „Falltür-Information“ ist bei RSA aber durch die Umkehrfunktion der Multiplikation geschützt. Für diese Umkehrfunktion existiert jedoch keine Falltür, wodurch die Sicherheit von RSA gewährleistet wird.

Das Problem der großen Zahlen

Ein Problem, dass sich immer ergeben wird, ist, dass durch zufälliges Probieren eine Möglichkeit gefunden werden kann, eine wie auch immer geartete Verschlüsselung zu umgehen. Um die Wahrscheinlichkeit für einen solchen Bruch der Verschlüsselung möglichst gering zu halten, verwendet man im Allgemeinen sehr große Informationseinheiten. Daraus ergeben sich – umgeformt in numerische Werte – sehr große Zahlen. Nun kann ein Computer aber bedingt durch seinen Aufbau nur mit Zahlen bis zu einem gewissen Grenzwert rechnen. Dieser Grenzwert berechnet sich aus der Anzahl der Bits, die ein Datenübertragungsmittel gleichzeitig übermitteln kann. Dies bezeichnet man auch als Datenübertragungsbreite. In einem handelsüblichen Computer ist das Datenübertragungsmittel der Adressbus und damit auch die CPU an sich. Nahezu alle Computer unterstützen heutzutage eine Datenübertragungsbreite von 32 Bit, modernere Computer verwenden auch schon Breiten von 64 Bit. Ein Bit ist in der Lage zwei unterschiedliche Zustände darzustellen. Aus dieser Überlegung folgt dann die Berechnung des Grenzwertes:

G(x) = 2^x

x bezeichnet hierbei die Datenübertragungsbreite. Bei einem modernen Computer mit einer Datenübertragungsbreite von 64 Bit ergibt sich damit die Möglichkeit, maximal 18446744073709551616 verschiedene Zustände darzustellen. Um größere Zahlen darstellen zu können müssen nun mehr als 64 Bit verwendet werden. Wegen der beschränkten Datenübertragungsbreite des Computers ist der Computer dann jedoch nicht mehr von sich selbst aus in der Lage, Berechnungen mit diesen Zahlen durchzuführen. Es ist also notwendig, Algorithmen zu finden, mit deren Hilfe große Zahlen durch kleinere Zahlen dargestellt werden können und mit deren Hilfe es auch effizient möglich sein sollte, in dieser Darstellung Rechenoperationen vorzunehmen. Ein möglicher Ansatz dazu besteht in der Verwendung eines Kongruenzsystems wie etwa des Chinesischen Restsatzes. Unglücklicherweise ist es jedoch mit einem auf dem Chinesischen Restsatz beruhendem System scheinbar nicht möglich, Divisionen und Größenvergleiche durchzuführen, weshalb auf eine langsamere Art der Darstellung zurückgegriffen werden muss. Es handelt sich dabei um eine Art Stellensystem, bei dem die Zahlen in einzelne Blöcke mit unterschiedlichen Stellenwerten unterteilt werden.

Praktische Anwendung des RSA-Verfahrens

Erster Schritt, um ein RSA-Kryptosystem zu erstellen, ist die Erzeugung eines öffentlichen sowie eines privaten Schlüssels. Dazu werden zunächst zufällig und stochastisch unabhängig zwei Primzahlen p und q gewählt. Um zur Zeit eine angemessene Sicherheit des Verfahrens zu gewährleisten, sollten dabei beide Zahlen größer als 10^{100} sein. m nächsten Schritt wird darauf hin das sogenannte RSA-Modul N = p*q berechnet. Dieses wird später sowohl im öffentlichen als auch im privaten Schlüssel enthalten sein. Im Folgendem wird die euler'sche Funktion phi(N) = (p-1)*(q-1) des RSA-Moduls berechnet. Eine zum vorherigem Ergebnis teilerfremde Zahl e, für die 1 < e < phi(N) gilt, ergibt dann den zweiten Teil des öffentlichen Schlüssels. Das multiplikative Inverse zu e bezüglich phi(N) wird als d bezeichnet. und ergibt damit den zweiten Teil des privaten Schlüssels.

Zum Verschlüsseln einer Nachricht wird die Nachricht nun in gleich große Abschnitte unterteilt. Jeder dieser Abschnitte wird anschließend einzeln über die Vorschrift C = K^e(mod~N) verschlüsselt. Wichtig ist, dass K auf jeden Fall kleiner sein muss als die beiden Primfaktoren p und q von N, K also auf jeden Fall teilerfremd zu N ist. Zum Entschlüsseln dient exakt der selbe Vorgang, nur das hierbei über die Vorschrift K = C^d(mod~N) entschlüsselt wird. Diese beiden modularen Exponentiationen lassen sich effizient durch die binäre Exponentiation berechnen.

Berechnung der Primzahlen

TODO

Modulare Exponentation

TODO

Warum funktioniert das Verfahren?

TODO

Anwendung an einem Beispiel

TODO