Paula und Rike haben einen schönen Tag in München verbracht. Sie wollen gern den RSA-Algorithmus nach Buchmann in Python implementieren. Doch welchen Text sollen sie nehmen?
Paula Wollen wir mal ein kleines Python-Programm für den RSA-Algorithmus schreiben?
Rike Gut, machen wir! Wollen wir einen Text aus Effi Briest chiffrieren?
Paula Ach nö!
Rike Dann hab‘ ich ‘ne tolle Idee, ich habe mich nämlich in letzter Zeit mit Flaubert angefreundet.
Flaubertsche Erection
Paula Flaubert?
Rike Na, Gustave Flaubert, französischer Schriftsteller, hatte vor kurzem seinen 200. Geburtstag. Er hat 3000 Briefe hinterlassen! Er schreibt viel und ausführlich von seiner Orientreise, von seiner Arbeit an Madame Bovary, von seinen literarischen Plänen aber auch vom Sex. Mehrfach schreibt er von seinem Wunsch, ein Dictionnaire des Idées reçues zu entwerfen, ein Wörterbuch der Gemeinplätze.
Paula Aha!
Rike Ja, eben eine Art Knigge. Er meint es sehr zynisch. Es ist fast wie heute, was man sagen soll und was man damit meint.
Paula Aha! Ich sage, was ich meine, jedenfalls meistens.
Rike Hmm! Das kommentiere ich jetzt nicht. Hör mal, Flaubert hat auch an seine Freundin Louise Colet von diesem Wörterbuch geschrieben. Mir ist aufgefallen, dass sein Wort Erection als Aufrichtung übersetzt wurde.
Paula Haha!
Rike Hier, hier steht’s:
ERECTION: ne se dít qu’en parlant des monuments.
Paula EREKTION: sagt man nur, wenn man von Denkmälern spricht?
Rike Ja, richtig.
Paula Warum wurde Erection nicht mit Erektion übersetzt? Das ist doch naheliegend!
Rike Da fragst du was, ja, du hast recht. Wir hätten das so übersetzt.
Paula Na, nicht gut, dann wollen wir das mal mathematisch übersetzen.
Rike Ja, das machen wir, mathematische Erektionen!
Ein passender mathematischer Rahmen für Erection
Paula Ha! Unser Wort wäre
Das hat 8 Buchstaben, das E ist doppelt, dafür brauchen wir aber die 0. Das kleinste Alphabet mit diesen Buchstaben wäre
Also ist die Länge des Alphabets 8:
Die Blocklänge müsste mindestens 8 sein, wenn wir das Wort Erection bilden wollen,
Für den RSA-Algorithmus brauchen wir eine Zahl die die Eigenschaft hat:
Da wird sehr groß. So große Beispiele habe ich noch nie gerechnet. Aber wir probieren es mit Python, die lassen große Zahlen zu.
Rike Gut, ich bin gespannt.
Paula Vielleicht fangen wir mit einer Funktion an, nämlich die Abbildung von in das weißt du doch immer so gut…
Rike Okay, soll ein Wort auf eine Zahl abbilden. Zuerst erklären wir das Buchstabe für Buchstabe:
0 | c | e | i | n | o | r | t | |
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
Abbildung von Buchstaben/Zeichen aus dem Alphabet auf Zahlen von 0 bis 7
Aus
wird
Den Wert brauchen wir als Zahl, nicht als Zeichenkette.
Paula Richtig. Außerdem brauchen wir den Wert dieser Oktalzahl als Dezimalzahl.
Rike Oktalzahl?
Paula Das 8er Stellenwertsystem heißt Oktalsystem.
Rike Alles klar. Kommt das oft bei euch vor?
Paula Haha, das Wort Erection mit 8 Zeichen hast du mitgebracht. Also gut, der Dezimalwert ist dann
Rike Na gut, dann bildet Produkte von Buchstaben, maximal 8 davon, in die natürlichen Zahlen ab:
und der komponentenweisen Abbildung
Mit den Koeffizienten
können wir dann die Zahl für Erection im Oktal- und im Dezimalsystem berechnen.
Paulas algorithmische Sicht
Paula Alles klar, sieht ja gar nicht so schwer aus. Wir starten mit einer Zeichenkette für das Wort Erection:
oder als Vektor geschrieben
Die Stellen in solchen Vektoren sind mit 0 beginnend durchnummeriert und enden mit 7. Das müssen wir beachten. Ich gehe also Buchstaben für Buchstaben durch und bestimme die Koeffizienten
Es wäre gut, wenn wir aus
die Zahl , die bei mir die Bezeichnung kriegt, berechnen könnten:
Rike Hmm, die kriegst du doch aus denselben Koeffizienten, nur mit Zehnerpotenzen multipliziert:
Den Dezimalwert von berechnest du ebenso:
Paula Okay, das passt, du hast doch einen mathematischen Blick auf solche Sachen, Rike. Warte, ich kodiere das mal eben. … So! Mit Erection klappt das.
Paulas Problem beim Testen des Programms
Doch wenn mein Wort kürzer ist, zum Beispiel
dann erhalte ich
Mit unserer Formel ergibt das dann:
Statt
und für kriegen wir
Richtig wäre aber
Was nun, Rike?
Rike Du hast recht, wir müssen auch kürzere Wörter berücksichtigen. Warte, …, wir berechnen die Wortlänge eines Wortes und berücksichtigen die. Hier in deinem Beispiel ist
Paula Stimmt.
Rike Die Zahl berechnen wir aus
Analog berechnen wir :
Paula Okay, ist ja etwas kompliziert.
Allgemeine Formel zur Berechnung der Zahlen
Rike So schwer ist es auch nicht:
Paula Den Dezimalwert rechnen wir mit den 8er-Potenzen aus, den Oktalwert mit den Zehnerpotenzen. Komisch!
Rike Haha, sehr witzig! Jetzt noch die Umkehrabbildung .
Paula Das ist jetzt nicht mehr schwer.
***
Übungsaufgaben
- Schreibe und teste das Programm.
- Schreibe auch ein Programm für die Umkehrfunktion!
Lösungen
2.
Programm als PDF