1 / 99

Das RSA-Verfahren

Das RSA-Verfahren. Klaus Becker 2010. Lehrplan - Leistungsfach. Ziel ist es, das RSA-Verfahren als eines der klassischen asymmetrischen Verschlüsselungs-verfahren genauer zu untersuchen, um die Funktionsweise dieses Verfahrens zu verstehen.

sibley
Download Presentation

Das RSA-Verfahren

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Das RSA-Verfahren Klaus Becker 2010

  2. Lehrplan - Leistungsfach Ziel ist es, das RSA-Verfahren als eines der klassischen asymmetrischen Verschlüsselungs-verfahren genauer zu untersuchen, um die Funktionsweise dieses Verfahrens zu verstehen. Die Vorgehensweise folgt einem Vorschlag von Witten und Schulz, der in den folgenden Artikeln beschrieben wird: H. Witten, R.-H. Schulz: RSA & Co. in der Schule, Teil1. LOG IN 140 S. 45 ff.H. Witten, R.-H. Schulz: RSA & Co. in der Schule, Teil2. LOG IN 143 S. 50 ff. Lehrplan für das Leistungsfach

  3. Teil 1 Experimente mit CrypTool

  4. Experimente mit CrypTool Einen ersten Eindruck vom RSA-Verfahren kann man sich mit dem Software-Werkzeug CrypTool verschaffen. Dieses Werkzeug macht die wichtigsten Schritte des RSA-Verfahrens transparent. Experimente mit CrypTool lassen direkt erkennen, dass das RSA-Verfahren auf Berechnungen mit Zahlen beruht. Die Experimente führen aber noch nicht dazu, dass man versteht, warum gerade dieses Verfahren heutzutage benutzt wird. Hierzu sind vertiefende Untersuchungen erforderlich.

  5. Experimente mit CrypTool Mit den Menüpunkten [Einzelverfahren][RSA-Kryptosystem][RSA-Demo...] kommst du in Bereich, in dem das RSA-Verfahren durchgespielt werden kann. Gib zunächst zwei verschiedene Primzahlen in die dafür vorgesehenen Felder ein. Mit [Parameter aktualisieren] werden dann die beiden Schlüssel erzeugt.

  6. Experimente mit CrypTool Wähle jetzt [Optionen für Alphabet und Zahlensystem...] und lege die vom Programm vorgesehenen Optionen fest. Am besten übernimmst du zunächst die Einstellungen der folgenden Abbildung (beachte das Leerzeichen im Alphabet).

  7. Experimente mit CrypTool Jetzt kannst du Texte (mit Zeichen aus dem voreingestellten Alphabet) verschlüsseln und die Verschlüsselung auch wieder entschlüsseln.

  8. Aufgabe Probiere die oben beschriebenen Schritte selbst einmal aus. Variiere auch die möglichen Vorgaben (z.B. eingegebene Primzahlen) und Einstellungsmöglichkeiten (z.B. Alphabetoptionen).

  9. Teil 2 Modulares Rechnen

  10. Vorbemerkung Das RSA-Verfahren basiert auf modularem Rechnen. Um die Details des RSA-Verfahren zu verstehen, muss man modulares Rechnen beherrschen und einige zahlentheoretische Zusammenhänge kennen. Im Unterricht kann man die mathematischen Grundlagen vorab erarbeiten, oder beim Erarbeiten des RSA-Verfahres - je nach Bedarf - immer wieder zu den mathematischen Betrachtungen zurückkommen.

  11. Uhrenaddition Modulare Addition kennt man aus dem täglichen Leben. Aufgabe: Ergänze die in der Tabelle fehlenden Angaben zur Uhrzeit (Moskauer Zeit). Wie rechnet man mit Uhrzeiten? Wie kann man z.B. direkt aus 17 und 149 zum Ergebnis 22 gelangen?

  12. Modulare Gleichheit Verallgemeinerte Uhrzeiten Bei Beginn der Reise in Moskau ist es 17 Uhr. Nach 149 Stunden wird das Ziel Wladiwostok erreicht. Es ist jetzt (17+149) Uhr bzw. 166 Uhr. Das entspricht - auch im fernen Sibirien - 22 Uhr. Man kann diese Uhrzeit leicht rechnerisch ermitteln indem man den Rest bei der Division durch 24 ermittelt: 166 % 24 = 22 Uhrzeiten werden eigentlich nur mit den Zahlen 0, 1, ..., 23 angegeben. Im Alltag lässt man auch manchmal die Zahl 24 zu. 24 Uhr ist dasselbe wie 0 Uhr. Die 24 ist - bei Uhrzeitangaben - also gleich zu behandeln wie die 0. 31 Uhr und 55 Uhr (als verallgemeinerte Uhrzeiten) würden für dieselben Uhrzeiten stehen, weil der zyklisch sich drehende und immer wieder bei 0 neu beginnende Uhrzeiger dieselbe Stelle anzeigen würde. Rechnerisch zeigt sich das, indem beide Zahlen 31 und 55 denselben Rest bei der Division durch 24 hinterlassen. Def.: Vorgegeben sei eine natürliche Zahl n. Zwei natürliche Zahlen a und b heißen gleich modulo n bzw. kongruent modulo n genau dann, wenn sie beide den gleichen Rest bei der Division durch n erzeugen. Beispiel: 31 und 55 sind gleich modulo 24, denn es gilt: [31]%24 = 7 = [55]%24

  13. Modulare Gleichheit Zählen modulo vorgegebener Primzahlen n: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 [n]%3: 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 [n]%5: 0 1 2 3 4 0 1 2 3 4 0 1 2 3 4 0 1 2 3 4 0 1 2 3 4 0 1 2 [n]%15: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 0 1 2 3 4 5 6 7 8 9 10 11 12 Satz (über modulare Gleichheit bzgl. Primzahlen): p und q seien zwei vorgegebene verschiedene Primzahlen. Wenn zwei natürliche Zahlen a und b sowohl gleich modulo p als auch gleich modulo q sind, dann sind sie auch gleich modulo p*q. Anders formuliert: Aus [a]%p = [b]%p und [a]%q = [b]%q folgt [a]%(p*q) = [b]%(p*q).

  14. Modulare Addition Aufgabe: (a) Führe die Rechnung für weitere Städte durch. (b) Darf man für EKATERINBURG auch so rechen: [17 + 26]%24 = [17]%24 + [26]%24 = ... (c) Geht das auch für NOVOSIBIRSK? Was müsste man hier noch tun? [17 + 46]%24 = [17]%24 + [46]%24 = ...

  15. Modulare Addition Vorgegeben sei eine natürliche Zahl n. Zwei natürliche Zahlen a und b werden modulo n addiert, indem man sie addiert und anschließend von der Summe den Rest bei der Division durch n berechnet. Das Ergebnis ist also [a+b]%n. Beachte, dass das Ergebnis bei der Addition modulo n immer eine Zahl kleiner als n ist. Aufgabe: Erstelle selbst eine Verknüpfungstafel für die Addition modulo n = 5. Rechengesetz (Modulare Gleichheit bei der Addition): Aus [a1]%n = [b1]%n und [a2]%n = [b2]%n folgt [a1+a2]%n = [b1+b2]%n. Das erste Rechengesetz besagt, dass Zahlen, die modulo n gleich sind, auch zu gleichen Additionsergebnissen modulo n führen. Rechengesetz (Addition und iterierte Modulberechnung): [a+b]%n = [[a]%n + [b]%n]%n Das zweite Rechengesetz erlaubt es, bei der Addition modulo n zuerst die Summanden zu verkleinern und dann erst die Addition durchzuführen.

  16. Modulare Multiplikation Vorgegeben sei eine natürliche Zahl n. Zwei natürliche Zahlen a und b werden modulo n multipliziert, indem man sie multipliziert und anschließend vom Produkt den Rest bei der Division durch n berechnet. Das Ergebnis ist also [a*b]%n. Beachte, dass das Ergebnis bei der Multiplikation modulo n immer eine Zahl kleiner als n ist. Aufgabe: Erstelle selbst eine Verknüpfungstafel für die Multiplikation modulo n = 8. Rechengesetz (Modulare Gleichheit bei der Addition): Aus [a1]%n = [b1]%n und [a2]%n = [b2]%n folgt [a1+a2]%n = [b1+b2]%n. Das erste Rechengesetz besagt, dass Zahlen, die modulo n gleich sind, auch zu gleichen Additionsergebnissen modulo n führen. Rechengesetz (Addition und iterierte Modulberechnung): [a+b]%n = [[a]%n + [b]%n]%n Das zweite Rechengesetz erlaubt es, bei der Addition modulo n zuerst die Summanden zu verkleinern und dann erst die Addition durchzuführen.

  17. Aufgaben Bestätige die Rechengesetze für modulare Addition und Multiplikation anhand von Beispielen. Du kannst Python als Taschenrechner benutzen. >>> n = 14 >>> a1 = 16 >>> b1 = 19 >>> a2 = 44 >>> b2 = 75 >>> a1%n 2 >>> a2%n 2 >>> b1%n 5 >>> b2%n 5 >>> (a1+b1)%n ...

  18. Modulares Inverses Def.: Zwei natürliche Zahlen a und b heißen modular invers zueinander bezüglich n genau dann, wenn gilt: [a*b]%n = 1. Beispiel: [2*3]%5 = 1. Die beiden Zahlen 2 und 3 sind also modular invers zueinander bzgl. 5. Die Zahl 2 ist das modulare Inverse von 3 bzgl. des Moduls 5. Ebenso ist 3 das modulare Inverse von 2 bzgl. des Moduls 5. Aufgabe: (a) Betrachte den Fall n = 5 (siehe Verknüpfungstafel oben). Bestimme zu a = 1, 2, 3, 4 jeweils das modulare Inverse bzgl. n. (b) Betrachte den Fall n = 8 (siehe Folie 16). Für welche der Zahlen a = 1, 2, ..., 7 kann man das modulare Inverse bzgl. n bestimmen? (c) Betrachte den Fall n = 15. Hast du bereits eine Vermutung, für welche der Zahlen a = 1, 2, ..., 14 man das modulare Inverse bzgl. n bestimmen kann?

  19. Existenz des modularen Inversen Satz (über die Existenz des modularen Inversen): Gegeben sei eine natürliche Zahl n. Das modulare Inverse zu einer Zahl a ungleich Null existiert genau dann, wenn a und n keinen gemeinsamen Teiler größer als 1 haben - d.h., wenn ggT(a, n) = 1 gilt.

  20. Berechnung des modularen Inversen Entwickle eine Python-Funktion modInv(a, n), die das modulare Inverse von a bzgl. n zurückgibt, sofern dieses Inverse existiert. Wenn keine solche Zahl existiert, soll der Wert -1 zurückgegeben werden. Tipp: Man kann der Reihe nach alle in Frage kommenden Zahlen durchprobieren.

  21. Modulare Potenz Vorgegeben sei eine natürliche Zahl n. Eine natürliche Zahl a wird mit einer natürlichen Zahl x modulo n potenziert, indem man sie mit x potenziert und anschließend von der Potenz den Rest bei der Division durch n berechnet. Das Ergebnis ist also [ax]%n. Beachte, dass das Ergebnis bei der Potenzbildung modulo n immer eine Zahl kleiner als n ist. Aufgabe: (a) Berechne [34]%5. (b) Berechne [64]%5. Berechne auch [([([([6]%5)*6]%5)*6]%5)*6]%5. Was stellst du fest? (c) Welche Vorteile ergeben sich bei großen Zahlen, wenn man [ax]%n wie folgt berechnet: [(...([([a]%n)*a]%n)...)*a]%n ? Aufgabe: Berechne [a(p-1)]%p für verschiedene natürliche Zahlen a und verschiedene Primzahlen p. Für welche Zahlen erhält man als Ergebnis 1? Du kannst hierzu ein einfaches Python-Programm schreiben, das die Berechnungen für verschiedene Primzahlen p und natürliche Zahlen a übernimmt.

  22. Kleiner Fermatscher Satz Satz (Kleiner Fermatscher Satz): Sei p eine Primzahl und a eine natürliche Zahl, die kein Vielfaches von p ist. Dann gilt [a(p-1)]%p = 1 Gegeben sei eine Primzahl p und eine natürliche Zahl, die kein Vielfaches von p ist (z.B. p=5 und a = 12). Wenn man [1*a]%p, [2*a]%p, [3*a]%p, ..., [(p-1)*a]%p berechnet, so erhält man als Ergebnisse die Zahlen 1, 2, 3, ..., p-1 - allerdings in anderer Reihenfolge. Hieraus lässt sich mit einigen Rechengesetzen folgender Zusammenhang herleiten: [(1*a)*(2*a)*(3*a)*...*((p-1)*a)]%p = [1*2*3*...*(p-1)]%p Umgeformt erhält man: [1*2*3*...*(p-1)*a(p-1)]%p = [1*2*3*...*(p-1)]%p Hieraus kann man mit einigen zusätzlichen Überlegungen schließen: [a(p-1)]%p = 1

  23. Teil 3 Verschlüsseln mit modularer Addition

  24. Vorbemerkung Als Vorstufe zum RSA-Verfahren betrachten wir hier ein Verfahren, das auf modularer Addition beruht und bereits viele Ähnlichkeiten zum RSA-Verfahren aufweist. Der Vorteil dieser Vorgehensweise besteht darin, dass wir an das sehr einfache Caesar-Verfahren anknüpfen können und durch Verallgemeinerung dieses Verfahrens zu den zahlenbasierten Verfahren gelangen.

  25. Den Anfang macht Caesar A B C D E F G H I J K L M N O P Q R S T U V W X Y Z D E F G H I J K L M N O P Q R S T U V W X Y Z A B C Schlüssel: D Quelltext: Geheimtext: SALVEASTERIX VDOYHDVWHULA

  26. Caesar-Verfahren mit Zahlen Codierung: Umwandlung von Zeichen in Zahlen A → 00B → 01...Z → 25 A,S,T,E,R,I,X 00,18,19,04,17,08,23 Verschlüsselung: Verarbeitung von Zahlen (00 + 3) % 26 = 03(18 + 3) % 26 = 21...(23 + 3) % 26 = 00 00,18,19,04,17,08,23 03,21,22,07,20,11,00 Entschlüsselung: Verarbeitung von Zahlen (03 + 23) % 26 = 00(21 + 23) % 26 = 18...(00 + 23) % 26 = 23 03,21,22,07,20,11,00 00,18,19,04,17,08,23 Decodierung: Umwandlung von Zahlen in Zeichen A → 00B → 01...Z → 25 00,18,19,04,17,08,23 D,V,W,H,U,L,A

  27. Caesar-Variation: zusätzliche Zeichen Codierung: Umwandlung von Zeichen in Zahlen ' ' → 00'A' → 01...'Z' → 26 N,A,C,H, ,R,O,M 14,01,03,08,00,18,15,13 Verschlüsselung: Verarbeitung von Zahlen (14 + 9) % 27 = 23(01 + 9) % 27 = 10...(13 + 9) % 27 = 22 14,01,03,08,00,18,15,13 23,10,12,17,09,00,24,22 Entschlüsselung: Verarbeitung von Zahlen (23 + 18) % 27 = 14(10 + 18) % 27 = 01...(22 + 18) % 27 = 13 23,10,12,17,09,00,24,22 14,01,03,08,00,18,15,13 Decodierung: Umwandlung von Zahlen in Zeichen ' ' → 00'A' → 01...'Z' → 26 14,01,03,08,00,18,15,13 N,A,C,H, ,R,O,M

  28. Caesar-Variation: verallgeinerte Addition Codierung: Umwandlung von Zeichen in Zahlen ' ' → 00'A' → 01...'Z' → 26 D,A, ,I,S,T, ,E,S 04,01,00,09,19,20,00,05,19 Verschlüsselung: Verarbeitung von Zahlen(e, m) = (9, 30) (04 + 18) % 30 = 22(01 + 18) % 30 = 19...(19 + 18) % 30 = 07 04,01,00,09,19,20,00,05,19 22,19,18,27,07,08,18,23,07 Entschlüsselung: Verarbeitung von Zahlen(d, m) = (21, 30) (22 + 12) % 30 = 04(19 + 12) % 30 = 01...(07 + 12) % 30 = 19 22,19,18,27,07,08,18,23,07 04,01,00,09,19,20,00,05,19 Decodierung: Umwandlung von Zahlen in Zeichen ' ' → 00'A' → 01...'Z' → 26 04,01,00,09,19,20,00,05,19 D,A, ,I,S,T, ,E,S

  29. Caesar-Variation: größere Blocklänge Codierung: Umwandlung von Zeichen in Zahlen ' ' → 00'A' → 01...'Z' → 26 HAL,LO 80112, 121500 Verschlüsselung: Verarbeitung von Zahlen(e, m) = (112233, 321321) (80112 + 112233) % 321321 = 192345 (80112 + 112233) % 321321 = 233733 80112, 121500 192345, 233733 Entschlüsselung: Verarbeitung von Zahlen(d, m) = (209088, 321321) (192345 + 209088) % 321321 = 192345 (233733 + 209088) % 321321 = 121500 192345, 233733 80112, 121500 Decodierung: Umwandlung von Zahlen in Zeichen ' ' → 00'A' → 01...'Z' → 26 80112, 121500 HAL,LO

  30. Verfahren mit modularer Addition Schritt 1: Wahl der Blocklänge und Zerlegung des Textes Die Blocklänge legt die Länge der Texteinheiten fest, die mit Zahlen codiert werden und anschließend verschlüsselt werden. Je größer die Blocklänge, desto mehr Zahlen benötigt man zur Codierung der Texteinheiten. Bei einer Blocklänge 3 wird beispielweise der Text 'CAESAR' wie folgt in Texteinheiten zerlegt: 'CAE','SAR' Bei einer Zerlegung eines Textes kann es vorkommen, dass eine Texteinheit übrig bleibt, die nicht mehr die gesamte Blocklänge hat. In diesem Fall füllen wir den Text mit zusätzlichen Zeichen (hier Leerzeichen) auf: 'HAL','LO '

  31. Verfahren mit modularer Addition Schritt 2: Wahl der Codierung Die Codierung ordnet jeder Texteinheit eine natürliche Zahl zu. Die Zuordnung muss eindeutig sein, so dass eine Decodierung möglich ist. Codierung von Zeichenblöcken: ' ' -> 000 ' A' -> 001 ' B' -> 002 ... ' Z' -> 026 'A ' -> 027 'AA' -> 028 ... 'ZZ' -> 728 Codierung von Zeichenblöcken: ' ' -> 0000 ' A' -> 0001 ' B' -> 0002 ... ' Z' -> 0026 'A ' -> 0100 'AA' -> 0101 ... 'ZZ' -> 2626 Codierung des Alphabets: ' ' -> 00 'A' -> 01 ... 'Z' -> 26

  32. Verfahren mit modularer Addition Schritt 3: Wahl des Moduls und der Verschiebezahl Die Modulzahl n ist eine beliebige natürliche Zahl. Sie muss nur so gewählt werden, dass sie größer als die größtmögliche Codezahl einer Texteinheit ist. Die zu wählende Größe hängt demnach von der Blocklänge und der gewählten Codierung ab. Die Verschiebezahl e zum Verschlüsseln (e-ncrypt) ist eine beliebige natürliche Zahl, die kleiner als die Modulzahl n ist. Beide zusammen - Verschiebezahl und Modul - werden zur Verschlüsselung benötigt. Das Zahlenpaar (e, n) bildet den Schlüssel zur Verschlüsselung eines Textes. Dieser Schlüssel wird auch öffentlicher Schlüssel genannt. Schritt 4: Bestimmung des Gegenschlüssels Die Verschiebezahl d zum Entschlüsseln (d-ecrypt) ergibt sich direkt aus e und n: Es muss e+d=m gelten. Also ist d = n - e. Das Zahlenpaar (d, n) bildet den Schlüssel zur Entschlüsselung eines Textes. Dieser Schlüssel wird auch privater Schlüssel genannt.

  33. Verfahren mit modularer Addition Schritt 5: Verschlüsselung codierter Texte Zur Verschlüsselung eine Codezahl x benötigt man den öffentlichen Schlüssel (e, m). Die Verschlüsselung erfolgt hier durch modulare Addition: x -> [x + e]%n Schritt 6: Entschlüsselung codierter Texte Zur Entschlüsselung eine Codezahl y benötigt man den privaten Schlüssel (d, n). Die Entschlüsselung erfolgt analog zur Verschlüsselung: y -> [y + d]%n

  34. Aufgabe Benutze unsere Standardcodierung mit Blocklänge 2. Wähle einen öffentlichen Schlüssel (wie z.B. (567, 2911)) und verschlüssele eine selbst gewählte Nachricht mit dem oben beschriebenen Verfahren mit modularer Addition (Version 3). Gib die Nachricht an deinen Nachbarn weiter. Teile ihm auch den benutzten öffentlichen Schlüssel mit. Dein Nachbar soll jetzt die Nachricht wieder entschlüsseln.

  35. Korrektheit Korrektheit: Die Entschlüsselung macht die Verschlüsselung rückgängig: x → [x + e]%n → [[x + e]%n + d]%n = [x + [e + d]%n]%n = [x]%n = x

  36. Prinzip von Kerckhoff Die Sicherheit eines Kryptosystems darf nicht von der Geheimhaltung des Algorithmus abhängen. Die Sicherheit darf sich nur auf die Geheimhaltung des Schlüssels gründen. Vgl. A. Beutelspacher: Kryptologie. Vieweg 1996 Das Prinzip wurde erstmals formuliert im Buch "La cryptographie militaire" von Jean Guillaume Hubert Victor Francois Alexandre Auguste Kerckhoffs van Nieuwenhof (1835 bis 1903).

  37. Sicherheit Sicherheit: Das additive Chiffrierverfahren ist nicht sicher, da man aus dem öffentlichen Schlüssel sofort den privaten Schlüssel bestimmen kann.

  38. Implementierung Aufgabe 1: Eine Implementierung testen Lade die Datei chiffriersystemModularesAddierenAufgabe1.txt (siehe inf-schule) herunter. Diese Datei enthält eine ganze Reihe von Funktionen, die Teilaufgaben beim Verfahren mit modularer Addition übernehmen. Teste alle Funktionen und beschreibe das Verhalten der Funktionen in Worten. Passende Funktionsaufrufe sind als Docstrings bereits angegeben. Aufgabe 2: Eine Implementierung nutzen Mit Funktionen der Implementierung aus Aufgabe 1 kannst jetzt interaktiv das Verfahren mit modularer Addition durchspielen. Führe selbst weitere Tests durch. Du kannst die Funktionsaufrufe auch in einem kleinen Testprogramm zusammenfassen. >>> block = 2 >>> oeffentlicherSchluessel = (2102, 3000) >>> privaterSchluessel = (898, 3000) >>> quelltext = 'ASTERIX' >>> quellcode = codieren(quelltext, block) >>> quellcode [119, 2005, 1809, 2400] >>> geheimcode = verschluesseln(quellcode, oeffentlicherSchluessel) >>> geheimcode [2221, 1107, 911, 1502] >>> entschluesseltercode = verschluesseln(geheimcode, privaterSchluessel) >>> entschluesseltercode [119, 2005, 1809, 2400] >>> entschluesseltertext = decodieren(entschluesseltercode, block) >>> entschluesseltertext 'ASTERIX'

  39. Implementierung Aufgabe 3: Eine Implementierung abändern Die Implementierung aus Aufgabe 1 benutzt zur Codierung das Aneinanderfügen von Codes bei Zeichenblöcken: ' ' -> 0000 ' A' -> 0001 ' B' -> 0002 ... ' Z' -> 0026 'A ' -> 0100 'AA' -> 0101 ... 'ZZ' -> 2626 Ändere die Implementierung so ab, dass der ASCII-Code zur Umwandlung von Zeichen in Zahlen benutzt wird. Bei Zeichenblöcken sollen die Codezahlen durch systematisches Durchzählen ermittelt werden. In CrypTool wird hierzu die Einstellung "b-adisch" gewählt. Experimentiere erst mit CrypTool und passe dann die Implementierung der Codierung geeignet an.

  40. Implementierung Aufgabe 4: Eine Implementierung selbst entwickeln Lade die Datei chiffriersystemModularesAddierenAufgabe4.txt (siehe inf-schule) herunter. Diese Datei enthält bereits eine ganze Reihe von Funktionsbeschreibungen, die Teilaufgaben beim Verfahren mit modularer Addition übernehmen können. Ergänze die Implementierung dieser Funktionen und teste die Funktionen wie in Aufgabe 2.

  41. Teil 3 Verschlüsseln mit modularer Multiplikation

  42. Vorbemerkung Statt modularer Addition verwenden wir hier modulare Multiplikation als Grundlage eines Verschlüsselungsverfahres. Dieses Verfahen kann ebenfalls als Vorstufe zum RSA-Verfahren angesehen werden. Genau wie beim RSA-Verfahren hängt die Sicherheit des hier betrachteten Verfahrens davon ab, ob man über schnelle Algorithmen für bestimmte Problemstellungen verfügt.

  43. A(lice) A(lice) B(ob) B(ob) öffentl. Schlüssel von B(ob) öffentl. Schlüssel von B(ob) pivat. Schlüssel von B(ob) pivat. Schlüssel von B(ob) (e, n) (e, n) (d, n) (d, n) "HALLO ..." "HALLO ..." "HALLO ..." "HALLO ..." Codierung Codierung f(x, (e,n)) = [x*e]%n f(x, (e,n)) = [x+e]%n f*(y, (d,n)) = [y*d]%n f*(y, (d,n)) = [y+d]%n Codierung Codierung x0, x1, x2, ... x0, x1, x2, ... y0, y1, y2, ... y0, y1, y2, ... x0, x1, x2, ... x0, x1, x2, ... Klartext Klartext Geheimtext Geheimtext Klartext Klartext Entschlüsselungsfunktion Entschlüsselungsfunktion Verschlüsselungsfunktion Verschlüsselungsfunktion Multiplikation statt Addition

  44. Statt Addition ... Codierung: Umwandlung von Zeichen in Zahlen ' ' → 00'A' → 01...'Z' → 26 N,I,X, ,L,O,S 14,09,24,00,12,15,19 Verschlüsselung: Verarbeitung von Zahlen (14 + 7) % 30 = 21(09 + 7) % 30 = 16...(19 + 7) % 30 = 26 14,09,24,00,12,15,19 21,16,01,07,19,22,26 Verschlüsselung: Verarbeitung von Zahlen (21 + 23) % 30 = 14(16 + 23) % 30 = 09...(26 + 23) % 30 = 19 21,16,01,07,19,22,26 14,09,24,00,12,15,19 Codierung: Umwandlung von Zeichen in Zahlen ' ' → 00 'A' → 01...'Z' → 26 14,09,24,00,12,15,19 N,I,X, ,L,O,S

  45. ... benutze Multiplikation! Codierung: Umwandlung von Zeichen in Zahlen ' ' → 00'A' → 01...'Z' → 26 N,I,X, ,L,O,S 14,09,24,00,12,15,19 Verschlüsselung: Verarbeitung von Zahlen (14 * 7) % 30 = 08(09 * 7) % 30 = 03...(19 * 7) % 30 = 13 14,09,24,00,12,15,19 08,03,18,00,24,15,13 Verschlüsselung: Verarbeitung von Zahlen (08 * x) % 30 = 14(03 * x) % 30 = 09...(13 * x) % 30 = 19 08,03,18,00,24,15,13 14,09,24,00,12,15,19 Codierung: Umwandlung von Zeichen in Zahlen ' ' → 00 'A' → 01...'Z' → 26 14,09,24,00,12,15,19 N,I,X, ,L,O,S

  46. Verfahren und seine Korrektheit Schlüsselerzeugung: Wähle n größer als die maximale Codezahl. Wähle e mit e <n. Bestimme d mit [e*d]%n = 1. A(lice) B(ob) öffentl. Schlüssel von B(ob) pivat. Schlüssel von B(ob) (e, n) (d, n) "HALLO ..." "HALLO ..." Codierung f(x, (e,n)) = [x*e]%n f*(y, (d,n)) = [y*d]%n Codierung x0, x1, x2, ... y0, y1, y2, ... x0, x1, x2, ... Klartext Geheimtext Klartext Entschlüsselungsfunktion Verschlüsselungsfunktion Korrektheit: Die Entschlüsselung macht die Verschlüsselung rückgängig: x → [x * e]%n → [[x * e]%n * d]%n = [x * [e * d]%n]%n = [x * 1]%n = x Es muss hierzu folgende Schlüsselbedingung erfüllt sein: [e * d]%n = 1 d.h.: d ist modulares Inverses zu e bzgl. n.

  47. Implementierung Aufgabe 1: Eine Implementierung testen Lade die Datei chiffriersystemModularesMultiplizieren.txt (siehe inf-schule) herunter. Diese Datei enthält eine ganze Reihe von Funktionen zur Implementierung des Verfahrens mit modularer Multiplikation. Teste die Implementierung, indem du das Verfahren mit modularer Multiplikation interaktiv durchspielst. Aufgabe 2: Implementierungen analysieren Vergleiche die Implementierungen zum Verfahren mit modularer Addition und zum Verfahren mit modularer Multiplikation. Die Implementierungen unterscheiden sich nur an einer Stelle. Welche Stelle ist das?

  48. Schlüsselerzeugung: Wähle n größer als die maximale Codezahl. Wähle e mit e <n. Bestimme d mit [e*d]%n = 1. A(lice) B(ob) öffentl. Schlüssel von B(ob) pivat. Schlüssel von B(ob) (e, n) (?, n) ??? ??? Codierung f(x, (e,n)) = [x*e]%n f*(y, (d,n)) = [y*d]%n Codierung ??? y0, y1, y2, ... ??? Klartext Geheimtext Klartext Entschlüsselungsfunktion Verschlüsselungsfunktion Mr(s) X Sicherheit Sicherheit:Die Sicherheit des multiplikativen Chiffrierverfahrens hängt davon ab, ob man zur Zahl e aus dem öffentlichen Schlüssel das modulare Inverse d bzgl. n bestimmen kann.

  49. Aufgabe Codierung: Umwandlung von Zeichen in Zahlen ' ' → 00'A' → 01...'Z' → 26 .,.,.,.,.,.,. Verschlüsselung: öffentlicher Schlüssel(e, m) = (16, 33) Entschlüsselung: privater Schlüssel(d, m) = (..., ...) 24, 12, 15, 29, 23, 12, 13 Decodierung: Umwandlung von Zahlen in Zeichen ' ' → 00 'A' → 01...'Z' → 26

  50. Aufgabe Codierung: Umwandlung von Zeichen in Zahlen ' ' → 00'A' → 01...'Z' → 26 ..,..,..,..,..,..,.. Verschlüsselung: öffentlicher Schlüssel(e, m) = (381, 800) Entschlüsselung: privater Schlüssel(d, m) = (..., ...) 030,235,314,316,305,253,368 Decodierung: Umwandlung von Zahlen in Zeichen ' ' → 00 'A' → 01...'Z' → 26

More Related