RSA
Das Symmetrische-Schlüssel-Problem
Wird der Schlüssel beim Austausch abgefangen, so ist die gesamte Verschlüsselung wertlos. Lange Zeit galt diese Sicherheitslücke als unvermeidbar. Es gibt aber auch Verschlüsselungen, die ganz ohne unsicheren Schlüsselaustausch auskommen:
Wir denken uns für eine erste Idee, dass eine Kiste geschickt wird, die man mit einem Vorhängeschloss abschliessen kann. Dabei wird zwar die Nachricht mehrfach hin und her geschickt, es wird aber kein Schlüssel ausgetauscht.
Das geht so, wenn Alice Bob eine verschlüsselte Nachricht schicken möchte:
-
Alice verschliesst die Kiste mit ihrem Schloss und schickt sie Bob.
-
Bob verschliesst die Kiste ein zweites Mal mit seinem Schloss und schickt sie Alice zurück.
-
Alice entfernt ihr Schloss mit ihrem Schlüssel und schickt die Kiste wieder an Bob.
-
Bob kann die Kiste mit seinem Schlüssel öffnen.
Das Verfahren geht natürlich einfacher, ohne die Kiste hin und her schicken zu müssen. Nämlich ...
Solution
Bob könnte Alice beispielsweise ein offenes Vorhängeschloss, dessen Schlüssel er besitzt, schicken.
Das Diffie-Hellman-Merkle-Verfahren
Im Jahr 1976 hatte Hellman die Idee für ein Konzept zum Schlüsselaustausch, das auf dem oben genannten Prinzip aufbaut. Es erlaubt Alice und Bob, einen Schlüsselaustausch vorzunehmen, ohne sich dazu treffen zu müssen.
- Alice und Bob wählen gemeinsam eine Primzahl und eine Primitivwurzel .
- Alice wählt eine geheime Zahl
Bob wählt eine geheime Zahl
Sie berechnen jeweils ihren "öffentlichen Schlüssel":
- Alice:
- Bob:
Diese Werte und werden öffentlich übermittelt; es ist praktisch unmöglich, daraus oder zu berechnen.
Nun berechnen beide den gemeinsamen Schlüssel :
- Alice:
- Bob:
Es ist ; dieser Schlüssel kann nun für die symmetrische Verschlüsselung verwendet werden.
Proof
daher:
Gegeben:
Berechnung:
Schlüsselberechnung:
Beide erhalten denselben Schlüssel:
Betrachte noch folgende Überlegungen: Falls Eve den Wert (oder ) abfängt, muss sie versuchen, den Exponenten (bzw. ) durch Ausprobieren zu finden.
Angenommen
Schon der erste Versuch mit liefert das korrekte Resultat: . Das bedeutet: Eve findet irgendein gültiges , aber nicht notwendigerweise das ursprünglich gewählte .
Oder, falls man keine Primitivwurzel wählt, hat man die Schwachstelle, dass die Werte nicht alle möglichen Reste aus besuchen:
| 1 | 2 | 3 |
| 2 | 4 | 9 |
| 3 | 8 | 27 |
| 4 | 16 | 19 |
| 5 | 1 | 26 |
| 6 | 2 | 16 |
| 7 | 4 | 17 |
| 8 | 8 | 20 |
| 9 | 16 | 29 |
| 10 | 1 | 25 |
| 11 | 2 | 13 |
| 12 | 4 | 8 |
| 13 | 8 | 24 |
| 14 | 16 | 10 |
| 15 | 1 | 30 |
Die Zahl ist keine Primitivwurzel modulo - es gibt nur 5 verschiedene Resultate: , , , , . Dadurch ist es für Eve einfacher, auf den Schlüssel zu schliessen. Wähle also so, dass alle Zahlen von bis abdeckt. Dann ist eine Primitivwurzel modulo , und der diskrete Logarithmus wird schwerer zu berechnen.
Einwegfunktionen
Eine Einwegfunktion ist eine Funktion, die in einer Richtung einfach zu berechnen aber sehr schwer umkehrbar ist.
Eine One-Way-Function ist eine injektive Funktion
so dass gilt:
- Es gibt ein effizientes Verfahren zur Bestimmung von .
- Die Umkehrung ist praktisch unmöglich, d.h. es gibt kein effizientes Verfahren zur Bestimmung von .
Das heisst nicht, dass eine Einwegfunktion nicht umkehrbar ist, die Umkehrung ist nur so schwierig, dass sie sehr schwer umzusetzen ist. Man braucht also etwas anderes: eine Einwegfunktion mit Falltür; das heisst die Umkehrbarkeit ist effizient möglich, falls man "ein Geheimnis" kennt.
Eine Trap-Door One-Way-Function ist eine injektive Funktion , für die gilt:
- Es gibt effiziente Verfahren zur Berechnung von und .
- Das Verfahren zur Berechnung von kann nicht aus dem Verfahren zur Berechnung von hergeleitet werden - man benötigt eine (geheime) Zusatzinformation.
Dass Funktionen in der modularen Arithmetik zu Einwegfunktionen werden können, wird klar, wenn wir uns folgendes Beispiel anschauen:
Nehmen wir die Funktion : Wenn ist, ist . Auch die Umkehrung ist nicht so schwierig: Ist , nehmen wir einfach den und erhalten als Resultat für .
Schauen wir uns nun die Funktion in an; da wird die Sache kniffliger:
Für ist das Resultat . Haben wir nur die Basis und das Resultat , wird es schon schwieriger, zu finden - wir müssen raten.
Eine Funktion der Form heisst diskrete Exponentialfunktion. Die Umkehrung davon heisst diskreter Logarithmus. Erstere lässt sich selbst für grosse Zahlen effizient ausrechnen.
Wir wollen ausrechnen: Für eine effiziente Berechnung suchen wir eine Zahl der Form , die modulo einen kleinen Wert ergibt. Wir finden:
Jetzt wird damit gerechnet:
Da , ergibt sich:
Berechne:
a)
b)
c)
Solution
a)
b)
c)
Der Weg, um den diskreten Logarithmus auszurechnen, ist im Allgemeinen sehr viel langwieriger, da wir nur ausprobieren können. Bei einem sehr hohen Modulus kann das äusserst lange dauern.
Eine andere One-Way-Function ist die Multiplikation grosser Primzahlen. Wir wissen, dass das Produkt zweier Primzahlen einfach zu berechnen ist - wie sieht es mit der Umkehrung aus?
Bestimme die Primfaktorzerlegung von
a) 21
b) 65
c) 14'803
d) 12'863'273
Solution
, , und
Je grösser die Zahl, desto aufwändiger kann es werden, ihre Primfaktorzerlegung zu bestimmen.
Bestimme die Primfaktorzerlegung von und .
Solution
, , und
Obige Übung ist einfach, weil einer der beiden Primfaktoren sehr klein ist. Im Allgemeinen gilt aber, dass das Multiplizieren zweier grosser Primzahlen eine One-Way-Trap-Door-Function ist.
Auf der Multiplikation zweier grosser Primzahlen beruht das bekannteste asymmetrische Verschlüsselungsverfahren RSA. Wählt nämlich Bob zwei grosse Primzahlen und und hält diese geheim, so kann er das Produkt veröffentlichen, ohne in Gefahr zu laufen, dass jemand die Primfaktoren und bestimmen kann.
RSA: Das Verfahren
RSA ist ein asymmetrisches Verfahren; es gibt einen Public Key und einen Private Key. Beide Keys werden mit Hilfe von Primzahlen gebildet und in das Verfahren spielt die Modulo-Rechnung hinein. Den Namen hat das Verfahren von Ronald Rivest, Adi Shamir und Leonard Adleman; sie haben es 1977 kreiert.
Für die Erzeugung der beiden Schlüssel wählt man zunächst zwei grosse Primzahlen und . Diese werden multipliziert und man erhält . Diese Zahl sowie eine weitere, (fast) beliebig wählbare Zahl (encipher: verschlüsseln) bilden den Public Key . Eine dritte Zahl (decipher: entschlüsseln), zu deren Berechnung wir später kommen, ist Grundlage des Private Keys. Verschlüsselt wird durch
ist der Klartext (Message), der verschlüsselte Text (Cipher).
Nehmen wir an, du willst an Alice die Nachricht schicken. Alices Public Key sei , also und . Das sei ; die Nachricht lautet also ... .
Solution
Zum Entschlüsseln benötigt man den geheimen Schlüssel . Entschlüsselt wird damit analog durch
Und umgekehrt? Angenommen, dein öffentlicher Schlüssel ist . Du erhältst die damit verschlüsselte Nachricht . Um diese zu entschlüsseln, benötigst du deinen Private Key - der ist in diesem Fall .
Solution
Das funktioniert allerdings nur, wenn die Nachricht (als Zahl) kleiner ist als . Dies ist allerdings keine Einschränkung. Will man eine Nachricht verschlüsseln, deren Zahlenwert "zu gross" ist, so teilt man sie in kleinere Blöcke und verschlüsselt jeden Block einzeln.
Um es einfach zu halten, codieren wir: Leerzeichen = 00, A = 01, B = 02, \dots, Z = 26. Mit dem Schlüssel wird die Nachricht:
in 3er-Blöcke geteilt (die sind sicher kleiner als ):
und verschlüsselt zu (mit führenden Nullen auf vier Stellen aufgefüllt):
Nun zur Frage, wie man den Private Key berechnet:
Der Private Key errechnet sich aus der Gleichung
Grundlage zur Berechnung von ist folgender Satz, der garantiert, dass es eine solche Zahl überhaupt gibt - vorausgesetzt die Zahl hat eine bestimmte Eigenschaft ...
Sind teilerfremd, so gibt es eine ganze Zahl , so dass
Proof
Da und teilerfremd sind, gilt . Nach dem Satz von Bézout gibt es ganze Zahlen mit
Betrachten wir diese Gleichung modulo , so erhalten wir
Da , folgt
Setze . Dann gilt
womit die Existenz von gezeigt ist.
Mit den Bezeichnungen aus obigem Satz sagt man, ist Modulo invertierbar und nennt das modular Inverse von .
Finde das modular Inverse Element zu modulo .
Solution
Mit Ausprobieren findet man .
In unserem Fall sind wir daran interessiert modulo zu invertieren. Das heisst insbesondere, dass und teilerfremd sein müssen.
Und wie berechnet man das modular Inverse nun? Ein Verfahren für diese Berechnung ist in dem Beweis zu obigem Satz versteckt. Deswegen folgt er hier ausführlich. Er erfolgt in drei Schritten:
- Mit dem euklidschen Algorithmus zur Bestimmung des ggT
- Summendarstellung des ggT von entsprechenden Vielfachen der beiden Zahlen (erweiterter Euklidscher Algorithmus)
- Betrachtung des Falls, dass und teilerfremd sind, d.h. dass ihr ggT ist.
Wir wissen bereits, wie man den ggT von zwei Zahlen mit dem Euklidschen Algorithmus bestimmt - der ggT ist ja dann der letzte, nichttriviale Rest.
Schreibe allgemein das Verfahren des Euklidschen Algorithmus für zwei Zahlen und auf.
Solution
OEdA und für unsere Zwecke .
Rechnet man nun rückwärts und ersetzt die Reste durch entsprechende Ausdrücke, so erhält man eine Vielfachendarstellung von und für ihren ggT .
Zeige dies.
Solution
Aus der letzten Zeile folgt und weiter
Rückwärts eingesetzt folgt und , also und . Also gibt es so, dass
Berechne mit Hilfe des euklidischen Algorithmus:
a)
b)
c)
Solution
a)
Wende den Algorithmus an:
b)
c)
Zu zwei Zahlen gibt es immer Zahlen , so dass
Proof
Idee: Wir betrachten alle ganzzahligen Linearkombinationen von und :
Diese Menge ist eine Teilmenge der positiven ganzen Zahlen und damit nichtleer (z. B. oder liegt in für geeignetes ). Nach dem Prinzip des wohlgeordneten hat ein kleinstes Element – nennen wir es . Dann ist für gewisse .
Nun zeigen wir, dass der grösste gemeinsame Teiler von und ist:
-
teilt sowohl als auch :
Division mit Rest: Teile durch :Dann ist
Also ist eine weitere Linearkombination von und , also . Aber – Widerspruch zur Minimalität von , ausser für . Also gilt: .
Analog zeigt man: .
-
Wenn ein Teiler von und ist, dann gilt :
Denn jede Linearkombination ist durch teilbar, also insbesondere .
ist der grösste gemeinsame Teiler von und .
Da , folgt die Behauptung.
Damit ist Schritt drei nur noch Formsache. Für teilerfremde gilt jetzt
Dies gilt natürlich auch noch modulo bzw. , da ist.
Also ist modulo invers zu .
Hat man also die Vielfachensummendarstellung
bestimmt, so ist die kleinste positive Zahl der Form
gleich dem Private Key .
Dieses lässt sich also mit dem Euklid'schen Algorithmus berechnen. Erweiterter Euklid kommentiert.
Der erweiterte Euklid'sche Algorithmus
Berechnung des inversen Elements zu
Um das inverse Element zu zu berechnen, wird der erweiterte euklidische Algorithmus verwendet. Dabei soll gelten:
Gegeben:
Berechne:
Gesucht ist mit:
Berechne :
-
⇒ -
⇒ -
⇒
Rücksubstitution: Substituiere von unten nach oben:
Jetzt durch Ausdruck aus 1. Gleichung ersetzen:
Damit:
Schlussfolgerung: Das ist eine Darstellung von als Linearkombination:
In unserem Fall:
Ergebnis: Das modulare Inverse von modulo ist:
Kontrolle:
Gegeben: , . Finde das inverse Element zu modulo .
Solution
Gegeben: ,
Zuerst die Primfaktorzerlegung .
Da multiplikativ ist, gilt:
Gesucht: mit
und nun mit dem erweiterten Euklid:
Ergebnis: .
Damit ist .
Kontrolle:
Das modulare Inverse von ist also:
Mit Hilfe des euklidischen Algorithmus kann man also den Private Key bestimmen. Kennt man die beiden Primzahlen und , so ist es also einfach, zu berechnen und damit dann die mit und verschlüsselten Nachrichten zu entschlüsseln. Allerdings ist es nahezu unmöglich, zu berechnen, ohne und zu kennen.
Beweis des RSA-Verfahrens
Aber warum funktioniert das Verfahren denn nun überhaupt? Warum kommt wirklich wieder der Klartext heraus, mit anderen Worten: warum gilt
Wir erinnern uns, wie der Cipher-Text entstanden ist,
und können daher die Frage umformulieren: gilt tatsächlich
Die Antwort auf diese Frage lautet natürlich ja. Für den Beweis brauchen wir den kleinen Satz von Fermat, der ein Spezialfall des Satzes von Euler ist. Zur einfachen Formulierung des Satzes brauchen wir die sogenannte Euler'sche -Funktion.
Für eine natürliche Zahl ist die Anzahl der natürlichen Zahlen , deren grösster gemeinsamer Teiler mit gleich ist. Man nennt die Euler'sche -Funktion.
Ist prim, dann gilt
Proof
Da teilerfremd zu ist, folgt der Satz.
Sind zwei verschiedene Primzahlen, so ist
Proof
Reminder: Die Eulersche -Funktion zählt die positiven ganzen Zahlen kleiner oder gleich , die zu teilerfremd sind.
Seien und zwei verschiedene Primzahlen. Dann ist zusammengesetzt, aber seine einzigen Primfaktoren sind und . Eine Zahl ist genau dann nicht teilerfremd zu , wenn sie durch oder durch teilbar ist.
Die Anzahl der Zahlen zwischen und , die durch teilbar sind, ist:
Analog gibt es Zahlen, die durch teilbar sind.
Aber Achtung: Eine Zahl, die sowohl durch als auch durch teilbar ist, ist durch teilbar – und das ist nur die Zahl selbst. Diese wurde also doppelt gezählt, also müssen wir 1 abziehen:
Die Anzahl der Zahlen , die nicht teilerfremd zu sind, ist:
Somit ist die Anzahl der teilerfremden Zahlen gleich:
und daraus folgt die Behauptung
Nun folgt der kleine Satz von Fermat. Zuerst schicken wir aber einen Hilfssatz voraus.
Beim Teilen der ersten Vielfachen von , also der Zahlen
durch eine Primzahl mit tritt jeder Rest genau einmal auf. Formal:
Proof
Angenommen, es gäbe zwei gleiche Reste mit , . Dann gälte:
Daraus folgt:
Da , kann man durch kürzen:
Da aber , folgt daraus , im Widerspruch zur Annahme : das heisst jeder Rest tritt genau einmal auf.
Sei eine natürliche Zahl und teilerfremd zur Primzahl . Dann gilt
Proof
Multipliziert man alle möglichen Reste modulo :
Da laut Hilfssatz jeder Rest genau einmal vorkommt, ist:
Da , darf man kürzen:
Der Beweis, dass die Entschlüsselung korrekt ist, geht damit so: Wir wissen, dass
Das heisst, es gibt ein mit
Wir betrachten eine Message , die ver- und entschlüsselt wird und ziehen vom Resultat ab:
Dies gilt insbesondere auch, wenn ein Teiler von ist, denn dann ist sowieso gleich . Ferner sieht man analog, dass . Die Primzahlen und teilen also dieselbe Zahl , also muss auch ihr Produkt diese Zahl teilen. Somit gilt:
Der Beweis kommentiert.
Anleitung RSA
Schritte:
a) Wähle zwei Primzahlen und
b) Berechne
c) Berechne die eulersche Phi-Funktion:
d) Wähle eine natürliche Zahl mit
e) Berechne , das inverse Element zu mit dem erweiterten euklidischen Algorithmus.
Es gilt:
f) Öffentlicher Schlüssel:
g) Privater Schlüssel:
Der öffentliche Schlüssel wird veröffentlicht, sodass jeder, der eine verschlüsselte Nachricht senden möchte, darauf zugreifen kann. Der Klartext wird mit Hilfe der ASCII-Tabelle in eine binäre Zahl umgewandelt.
Verschlüsselung:
Gegeben: Nachricht
Entschlüsselung:
Gegeben: Chiffrat
In der Praxis wird für oft gewählt. Ferner: Die Nachricht muss kleiner sein als , daher muss sie gegebenenfalls in kleinere Blöcke aufgeteilt werden.
Wir erhalten von Alice eine verschlüsselte Nachricht . Gesucht sind:
- der private Schlüssel
- der Klartext
Gegeben:
Berechnungen:
Berechne mit erweitertem euklidischen Algorithmus
Rückwärts eingesetzt:
- also
Modulo :
Entschlüsselung der Nachricht
Dies ergibt:
, und . Finde und und verschlüssle die Zahl mit RSA.
Solution
, , ,
Rückwärts eingesetzt:
, .
, , . Entschlüssle die Zahl .
Solution
, , ,
Rückwärts eingesetzt:
. Entschlüsselung:
RSA knacken
Zum Schluss noch ein Beispiel, in dem es dem Codeknacker leicht gemacht wird. Also keine Angst, so schnell wie hier lässt sich RSA nicht knacken\dots
Man fängt eine RSA-verschlüsselte Nachricht ab. Sie lautet
10473054210223505497035330523101828168 2305497093070549713322042531164705144
Ausserdem weiss man, für wen die Nachricht bestimmt ist. Der öffentliche Schlüssel des Empfängers ist , . Um die Nachricht zu entschlüsseln, muss man wissen, aus welchen beiden Primzahlen und sich zusammensetzt. Eine erste Möglichkeit, und zu finden ist, bei 2 anzufangen und jede Zahl zu testen, ob sie ein Teiler von ist. Dabei kann man sich die Arbeit einfacher machen, wenn man bedenkt, dass
- nicht und beide grösser als sein können (Man braucht also "nur" die Zahlen bis zu testen.)
- die beiden gesuchten Teiler von Primzahlen sind (man braucht also z.B. die geraden Zahlen gar nicht testen).
Allerdings dauert diese Suche um so länger je grösser und sind. Es scheint also geschickter zu sein, die Suche bei möglichst grossen Zahlen anzufangen, d.h. bei . Wenn die Zahlen und eruiert wurden, kann man den Private Key bestimmen.
Das RSA-Rätsel
Im August 1977 wurde mit der Veröffentlichung des RSA-Algorithmus im „Scientific American“ ein Rätsel gestellt: Gegeben ist:
Man entschlüssle die Botschaft .
Damals ergab sich eine grobe Abschätzung, dass es etwa () Jahre dauern würde, um zu faktorisieren. Nach einem Zusammenschluss von 1600 Rechnern dauerte es aber nur ein halbes Jahr, bis klar war:
Die verschlüsselte Botschaft konnte nun leicht ermittelt werden. Sie lautete:
THE MAGIC WORDS ARE SQEAMISCH OSSIFRAGE
(Die magischen Worte sind zimperliche Lämmergeier)
Obwohl diese Nachricht ohne die Kenntnis des privaten Schlüssels dechiffriert wurde, muss man sich keine Sorgen über die Sicherheit von RSA machen. Diese basiert darauf, dass es sehr lange Zeit dauert, bis man von der Zahl n auf die Primfaktoren p und q kommt. Für wichtige Geschäfte wird heute die Zahl n mit mindestens 600 Dezimalstellen gewählt. Aus p und q kann ein Computer die Zahl in kürzester Zeit ausrechnen. Um n jedoch zu faktorisieren, würden selbst die vereinten Kräfte von 100 Millionen aktueller Computer über tausend Jahre benötigen. Die einzige Chance, RSA unsicher zu machen, wäre die Entwicklung von besseren Algorithmen zur Primfaktorzerlegung. Allerdings sind Mathematiker schon seit dem Bekanntwerden, dass jede natürliche Zahl eine eindeutige Primfaktorzerlegung besitzt, an der Lösungssuche zur effizienten Primfaktorzerlegung.