Dr. Andreas Borchert Institut für Angewandte Informationsverarbeitung 9. November 2006
Christian Ehrhardt Blatt 3


Uni Logo



Allgemeine Informatik III (WS 2006/2007)


Abgabetermin 14.Nov 2006

ACHTUNG!

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.

Geheimsachen oder Blum-Blum-Shub (10 Punkte)

Das Prinzip

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 $k=3$ 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 $k$ von Buchstaben verschoben wird, beginnen Sie mit einem Startwert $k_1$, der für den ersten Buchstaben gilt. Für den zweiten Buchstaben wird $k_2$ berechnet als $k_2 = k_1*k_1 \mbox{mod} M$, wobei $M$ 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 $k$ 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 $k_1 = 17$ und $M = 2021$, dann erhält man für $k_1$ bis $k_5$ nacheinander die Werte 17, 289, 660, 1085 und 1003. Das bedeutet, daß aus Hallo der Text Ydved wird.

Ein erster Versuch (4 Punkte)

Implementieren Sie ein Programm, das von der Standardeingabe einen Text einliest und wie oben beschrieben verschlüsselt. Die Werte für $k_1$ und $M$ 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.

Gute Werte für $M$ und $k_1$

Nicht jede Wahl von $M$ und $k_1$ liefert gleich gute Ergebnisse, da die erzeugte Folge der $k_i$ 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:

Gute Primzahlen (3 Punkte)

Ändern Sie Ihre Programme so ab, daß ab sofort nicht mehr $M$ direkt sondern zwei Primzahlen $P$ und $Q$ angegeben werden. $M$ 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 $P$ und $Q$ überprüft. Sollte die Überprüfung für einen der beiden Werte fehlschlagen, dann verweigert das Programm mit einer Fehlermeldung die Arbeit.

Die $\phi$-Funktion

Die $\phi$-Funktion für eine Zahl $x$ kann wie folgt berechnet werden. Anmerkungen: Die $\phi$-Funktion spielt in der Zahlentheorie eine große Rolle. Unter anderem gibt $\phi(x)$ an, wieviele Zahlen, zwischen 1 und $x$ teilerfremd zu $x$ sind. Mathematisch läßt sich die $\phi$-Funktion auch wie folgt beschreiben:

\begin{displaymath}\phi(x) = x\cdot \prod_{\mbox{$p\Vert x$, $p$ prim}}\frac{p-1}{p}\end{displaymath}

Implementierung der $\phi$-Funktion (3 Punkte)

Implementieren Sie die im letzten Abschnitt beschriebene $\phi$-Funktion, sowie eine Funktion, die den größten gemeinsamen Teiler zweier Zahlen berechnet. Überprüfen Sie damit die zweite oben angegebene Bedingung an $P$ und $Q$ beim Programmstart. Dabei soll klein bedeuten, daß der berechnete größte gemeinsame Teiler kleiner als 10 ist.

Hinweise



Christian Ehrhardt 2006-11-09