Dr. Andreas Borchert Institut für Angewandte
Informationsverarbeitung 9. November 2006
Christian Ehrhardt Blatt 3
Allgemeine Informatik III (WS 2006/2007)
Abgabetermin 14.Nov 2006
Leider hatte sich in die veröffentlichten verschlüsselten
Texte ein Fehler eingschlichen. Wer diese bereits vor Donnerstag
12h heruntergeladen hat, hat die falschen bekommen. Es tut mir
leid, wenn das zu Verwirrung geführt hat und bedanke mich für
den freundlichen Hinweis.
Um einen Text zu verschlüsseln, haben Sie sich überlegt,
daß es vielleicht eine gute Idee wäre, wenn einfach die
Buchstaben des Alphabets rotiert würden. Wird zum Beispiel
um rotiert, dann wird aus einem A ein
D, aus einem B ein E und aus
einem X wieder ein A. Analoges gilt
natürlich auch für Kleinbuchstaben. Alle anderen Zeichen
werden überhaupt nicht verschlüsselt.
Weil es Ihnen zu einfach erscheint, wenn jeder Buchstabe um
die gleiche Anzahl von Buchstaben verschoben wird, beginnen
Sie mit einem Startwert , der für den ersten Buchstaben
gilt. Für den zweiten Buchstaben wird berechnet als
, wobei zunächst frei gewählt
werden kann, es sollte nur nicht zu klein sein. Auf diese
Weise wird für jeden Buchstaben, der zu verschlüsseln ist,
ein neuer Wert für berechnet.
Um ein Gefühl für das System zu bekommen, ist es am sinnvollsten,
das Verfahren einmal mit kleinen Werten von Hand auszuprobieren.
Ist etwa und , dann erhält man für
bis nacheinander die Werte 17, 289, 660, 1085 und
1003. Das bedeutet, daß aus Hallo der Text
Ydved wird.
Implementieren Sie ein Programm, das von der Standardeingabe
einen Text einliest und wie oben beschrieben verschlüsselt.
Die Werte für und sollen im Programm mit Hilfe von
Konstanten festgelegt werden. Wenn das funktioniert, wird natürlich
auch ein Programm zum Entschlüsseln benötigt, das man durch einige
kleine Veränderungen am Verschlüsselungsprogramm erhalten kann.
Nicht jede Wahl von und liefert gleich gute
Ergebnisse, da die erzeugte Folge der unter Umständen eine
sehr kurze Periodenlänge hat. Die Erfinder des Verfahrens
(Lenore Blum, Manuel Blum und Michael Shub - daher auch der Name
Blum-Blum-Shub) haben zwei Bedingungen
angegeben, unter denen die Periodenlänge groß wird:
- ist des Produkt von zwei (größeren) Primzahlen
und , die beide einen Rest von 3 bei der Division durch 4
lassen.
- Der größte gemeinsame Teiler von und
ist klein. Was hierbei bedeutet
wird weiter unten erklärt.
Ändern Sie Ihre Programme so ab, daß ab sofort nicht mehr
direkt sondern zwei Primzahlen und angegeben werden.
ergibt sich dann als das Produkt dieser beiden Primzahlen.
Schreiben Sie weiterhin eine Funktion, die überprüft, ob eine
gegebene Zahl überhaupt eine Primzahl ist und ob die Zahl bei
Division durch 4 den Rest 3 läßt. Mit dieser Funktion werden
beim Programmstart die Werte für und überprüft.
Sollte die Überprüfung für einen der beiden Werte fehlschlagen,
dann verweigert das Programm mit einer Fehlermeldung die Arbeit.
Die -Funktion für eine Zahl kann wie folgt berechnet
werden.
- Das vorläufige Ergebnis wird mit 1 initialisiert.
- Man beginnt von 2 an aufwärts nach Teilern von
zu suchen. Hat man einen Teiler gefunden, wird
durch dividiert und das vorläufige Ergebnis mit
multipliziert.
- Sollte nach diesem Schritt immernoch durch
teilbar sein, dann wird solange durch dividiert,
bis kein Teiler von mehr ist. Dabei wird das
vorläufige Ergebnis jedes Mal mit (nicht mehr mit
) multipliziert.
- Anschließend wird um 1 erhöht.
- Sobald den Wert 1 erreicht wird das vorläufige
Endergebnis zum endgültigen Ergebnis.
Anmerkungen: Die -Funktion spielt in der Zahlentheorie eine
große Rolle. Unter anderem gibt an, wieviele Zahlen,
zwischen 1 und teilerfremd zu sind. Mathematisch läßt
sich die -Funktion auch wie folgt beschreiben:
Implementieren Sie die im letzten Abschnitt beschriebene
-Funktion, sowie eine Funktion, die den größten gemeinsamen
Teiler zweier Zahlen berechnet. Überprüfen Sie damit die
zweite oben angegebene Bedingung an und beim Programmstart.
Dabei soll klein bedeuten, daß der berechnete größte
gemeinsame Teiler kleiner als 10 ist.
- Der hier beschriebene Blum-Blum-Shub
Zufallszahlengenerator gilt zwar als kryptographisch sicher,
die Art, wie er hier angewendet wird, ist es aber nicht.
- Wenn größer wird, dann kann es sein,
daß das Quadrat von nicht mehr in einem int
Platz hat. Es empfiehlt sich daher ein long long int
zur Berechnung dieses Zwischenergebnisses.
- Auf der Homepage der Vorlesung gibt es einige Texte, die
mit unterschiedlichen Werten für , und
verschlüsselt wurden. Damit kann das eigene
Entschlüsselungsprogramm getestet werden.
- Die zum Verschlüsseln verwendeten Werte für , und
den Startwert stehen in der Datei. Da Zahlen nicht
mitverschlüsselt werden, sind diese Werte im Klartext zu lesen.
- Nicht alle verwendeten Werte erfüllen die Bedingungen
an und . Eine vollständige Lösung sollte das natürlich
feststellen.
- Bei einem Beispiel sind die Zwischenergebnisse unter Umständen
sogar so groß, daß sie auch in einem long long keinen
Platz finden. Wer diese Datei auch entschlüsseln möchte, muß
sich noch etwas zusätzliches einfallen lassen. Dieses Problem
zu lösen ist aber nicht Bestandteil dieses Blatts.
Christian Ehrhardt
2006-11-09