18.11.2013 Aufrufe

Elementare Zahlentheorie und Kryptographie

Elementare Zahlentheorie und Kryptographie

Elementare Zahlentheorie und Kryptographie

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

<strong>Elementare</strong> <strong>Zahlentheorie</strong> <strong>und</strong> <strong>Kryptographie</strong><br />

Vorläufige Version, noch nicht ganz vollständig!<br />

Sebastian Petersen<br />

Frühjahrstrimester 2008


Vorwort<br />

Dieses Skriptum gehört zu der Vorlesung “<strong>Elementare</strong> <strong>Zahlentheorie</strong> <strong>und</strong> Kryptograpie”,<br />

die ich im Frühjahrstrimester 2007 an der Universität der B<strong>und</strong>eswehr<br />

München erstmals gehalten habe.<br />

Die Vorlesung richtet sich an Studenten der Informatik im zweiten Studienjahr.<br />

Eine naturwissenschaftliche Gr<strong>und</strong>ausbildung ist also vorhanden. Auf der<br />

mathematischen Seite sind die Hörer mit den Gr<strong>und</strong>lagen der Analysis, der Linearen<br />

Algebra, der Wahrscheinlichkeitstheorie <strong>und</strong> der Logik in anderen Vorlesungen<br />

vertraut gemacht worden. (Nicht alles davon werden wir benötigen.) Auf<br />

der Seite der Informatik werden die Hörer vermutlich wesentlich mehr wissen<br />

als wir im Rahmen dieser Vorlesung brauchen. Z.B vertraue ich darauf, dass die<br />

Hörer eine gewisse Erfahrung im Arbeiten mit Algorithmen (Implementierung,<br />

Laufzeitabschätzungen ect.) haben.<br />

Kenntnisse in <strong>Zahlentheorie</strong> <strong>und</strong> nicht-linearer Algebra wie z.B. das Rechnen in<br />

Z/NZ, die Theorie der endlichen Gruppen oder Ring- <strong>und</strong> Idealtheorie können<br />

nicht als bekannt vorausgesetzt werden; sie sind zum Teil Gegenstand dieser<br />

Vorlesung oder werden im Laufe der Vorlesung entwickelt, soweit sie für die<br />

Vorlesung relevant sind.<br />

Die folgenden prinzipiellen Erwägungen haben mich beim Verfassen dieses Skriptums<br />

geleitet: Die Vorlesung kann aus Zeitgründen die beiden großen <strong>und</strong> gerade<br />

im Moment sehr rasch wachsenden Gebiete, die ihr Thema sind, nicht umfassend<br />

oder abschließend behandeln. Sie will eine Einführung in die Gr<strong>und</strong>lagen<br />

geben, auf deren Basis der interessierte Hörer in der Lage sein sollte, sich je nach<br />

Bedarf oder persönlichem Interesse im Selbststudium in ein spezielleres Teilgebiet<br />

einzuarbeiten. In der Vorlesung werden Hinweise zu Literatur gegeben, die<br />

für ein direktes Weiterstudium vom Schwierigkeitsgrad her angemessen ist.<br />

Die in der Vorlesung dargelegte Theorie wird von den im zweiten Abschnitt genannten<br />

Gr<strong>und</strong>lagen ausgehend Schritt für Schritt entwickelt (meist nach dem<br />

gewohnten Muster “Definition, Satz, Beweis”). In einigen Einzelfällen kann es<br />

aber vorkommen, dass wir ein nicht-triviales Resultat (als solches gekennzeichnet<br />

<strong>und</strong> mit einem Literaturverweis versehen) ohne Beweis verwenden. Z.B. wird<br />

im Bezug auf einige Resultate der algorithmischen <strong>Zahlentheorie</strong> (z.B. Faktorisierungsalgorithmen)<br />

nur genannt, was technisch möglich ist, ohne auf jedes<br />

Detail einzugehen. Diese Resultate werden ohnehin von der Vorlesung “Algo-<br />

1


ithmische <strong>Zahlentheorie</strong>” abgedeckt, die regelmäßig an der UniBw angeboten<br />

wird.<br />

In der Vorlesung werden sich Kapitel zur elementaren <strong>Zahlentheorie</strong> <strong>und</strong> zur<br />

<strong>Kryptographie</strong> abwechseln. Dabei folgen auf die Kapitel zur <strong>Zahlentheorie</strong> jeweils<br />

entsprechende kryptographische Anwendungen. Ich hoffe, dass dieser Aufbau<br />

für eine gewisse Kurzweil sorgt.<br />

In Bezug auf den Inhalt der Vorlesung war natürlich eine Auswahl zu treffen.<br />

In der elementaren <strong>Zahlentheorie</strong> wird zunächst einmal der Standardstoff abgedeckt,<br />

der durch die folgenden Schlagworte umschrieben werden kann: Euklidischer<br />

Algorithmus zur Berechnung der ggT, Rechnen in Z/NZ, Struktur von<br />

(Z/NZ) × <strong>und</strong> Primitivwurzeln, chinesischer Restsatz, diskreter Logarithmus,<br />

quadratische Reste <strong>und</strong> Reziprozitätsgesetz von Gauß. Wenn Zeit bleibt, wird<br />

als krönender Abschluß auf elliptische Kurven eingegangen, die mehr denn je<br />

im Zentrum der zahlentheoretischen <strong>und</strong> kryptographischen Forschung stehen.<br />

In der <strong>Kryptographie</strong> beginnen wir aus historischem Interesse mit einer kurzen<br />

Übersicht über klassische Private-Key-Verfahren wie die die Vigenere-Chiffre<br />

<strong>und</strong> die Vernam-Chiffre. Es wird auch eine Vorlesung zu der Chiffriermaschine<br />

Enigma geben, die im 2. Weltkrieg von den Deutschen verwendet wurde. Dann<br />

konzentrieren wir uns ausschließlich auf die modernen Public-Key-Verfahren wie<br />

RSA, Diffie-Hellman, El Gamal <strong>und</strong> ggfls. auf <strong>Kryptographie</strong> mit elliptischen<br />

Kurven 1 . Aus Zeitgründen war eine gewisse stoffliche Beschränkung unumgänglich,<br />

<strong>und</strong> ich habe die folgende Entscheidung getroffen, die auf den ersten Blick<br />

vielleicht etwas brutal erscheinen mag: Die moderneren Private-Key-Verfahren<br />

wie Triple-DES, IDEA oder AES werden in der Vorlesung nicht behandelt,<br />

weil deren Darstellung von sehr technischer Natur (um nicht zu sagen: “etwas<br />

ermüdend”) ist, <strong>und</strong> weil diese Verfahren nicht so gut zu dem Doppeltitel “<strong>Elementare</strong><br />

<strong>Zahlentheorie</strong> <strong>und</strong> <strong>Kryptographie</strong>” passen; die <strong>Zahlentheorie</strong> steht bei<br />

diesen Verfahren nicht so sehr im Vordergr<strong>und</strong>. In seiner endgültigen Fassung<br />

wird dieses Skriptum einen Appendix zu AES enthalten, der dem interessierten<br />

Hörer den Einstieg in die Theorie dieser modernen Private-Key-Verfahren erleichtern<br />

soll. Den Inhalt dieses Appendix werde ich aber nicht in der Vorlesung<br />

behandeln <strong>und</strong> in Prüfungen nicht verlangen.<br />

Ich hoffe, dass die Stoffauswahl im Sinne der Studenten <strong>und</strong> im Sinne des Kollegiums<br />

der Fakultät für Informatik ist, <strong>und</strong> dass die Vorlesung eine interessante<br />

Mischung aus Theorie <strong>und</strong> Praxis bietet.<br />

München, im März 2008<br />

Sebastian Petersen<br />

1 Ein Kapitel 6 zu elliptischen Kurven wird noch angehängt<br />

2


Inhaltsverzeichnis<br />

Vorwort 1<br />

1 Einige klassische Kryptograpieverfahren 5<br />

1.1 Gr<strong>und</strong>legende Begriffe der Kryptologie . . . . . . . . . . . . . . . 5<br />

1.2 Vigenère-Chiffre <strong>und</strong> Vernam-Chiffre . . . . . . . . . . . . . . . . 7<br />

1.3 Kryptoanalyse der Vigenère-Chiffre durch Häufigkeitsanalyse . . 10<br />

1.4 Permutationen <strong>und</strong> monoalphabetische Substitution . . . . . . . 12<br />

1.5 Die Chiffriermaschine Enigma . . . . . . . . . . . . . . . . . . . . 14<br />

1.6 Kryptoanalyse der Enigma . . . . . . . . . . . . . . . . . . . . . . 22<br />

2 <strong>Elementare</strong> <strong>Zahlentheorie</strong> 25<br />

2.1 Algebraische Gr<strong>und</strong>begriffe . . . . . . . . . . . . . . . . . . . . . 25<br />

2.2 Euklidischer Algorithmus . . . . . . . . . . . . . . . . . . . . . . 29<br />

2.3 Primfaktorzerlegung . . . . . . . . . . . . . . . . . . . . . . . . . 33<br />

2.4 Restklassenringe . . . . . . . . . . . . . . . . . . . . . . . . . . . 35<br />

2.5 Multiplikative Inverse in Z/NZ. . . . . . . . . . . . . . . . . . . . 39<br />

2.6 Der chinesische Restsatz . . . . . . . . . . . . . . . . . . . . . . . 42<br />

2.7 Der kleine Satz von Fermat . . . . . . . . . . . . . . . . . . . . . 44<br />

3 Das Public-Key-Verfahren von Rivest, Shamir <strong>und</strong> Adleman 47<br />

3.1 Der Potenzierungsalgorithmus Square and Multiply . . . . . . . . 47<br />

3


3.2 Der Miller-Rabin-Primzahltest . . . . . . . . . . . . . . . . . . . 48<br />

3.3 RSA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51<br />

3.4 Faktorisierung mit der Fermat-Methode . . . . . . . . . . . . . . 55<br />

3.5 Faktorisierung mit der (p − 1)-Methode von Pollard . . . . . . . 56<br />

4 Diskreter Logarithmus 58<br />

4.1 Primitivwurzeln <strong>und</strong> diskreter Logarithmus . . . . . . . . . . . . 58<br />

4.2 Die ρ-Methode von Pollard . . . . . . . . . . . . . . . . . . . . . 65<br />

4.3 Der Algorithmus von Silver, Pohlig <strong>und</strong> Hellman . . . . . . . . . 67<br />

5 Public-Key-Verfahren, die auf dem diskreten Logarithmus beruhen<br />

70<br />

5.1 Schlüsselerzeugung . . . . . . . . . . . . . . . . . . . . . . . . . . 70<br />

5.2 Das Massey-Omura-Verschlüsselungsverfahren . . . . . . . . . . . 73<br />

5.3 ElGamal-Verschlüsselung . . . . . . . . . . . . . . . . . . . . . . 75<br />

5.4 Schlüsselaustausch nach Diffie-Hellman . . . . . . . . . . . . . . . 77<br />

5.5 Signatur mit ElGamal . . . . . . . . . . . . . . . . . . . . . . . . 78<br />

6 Quadratische Reste, Jacobi-Symbole <strong>und</strong> Anwendungen 83<br />

6.1 Quadratische Reste . . . . . . . . . . . . . . . . . . . . . . . . . . 83<br />

6.2 Das Reziprozitätsgesetz von Gauß . . . . . . . . . . . . . . . . . 86<br />

6.3 Der Solovay-Strassen Primzahltest . . . . . . . . . . . . . . . . . 90<br />

6.4 Das Rabin-Verfahren . . . . . . . . . . . . . . . . . . . . . . . . . 91<br />

4


Kapitel 1<br />

Einige klassische<br />

Kryptograpieverfahren<br />

1.1 Gr<strong>und</strong>legende Begriffe der Kryptologie<br />

Im Gegensatz zum normalen Sprachgebrauch wird in der technisch-mathematischen<br />

Sprache streng zwischen den folgenden Disziplinen unterschieden:<br />

1. <strong>Kryptographie</strong> ist die Wissenschaft der Geheimschriften, d.h. der Verschlüsselung<br />

von Nachrichten, die dann über einen nicht abhörsicheren<br />

Kanal (z.B. E-Mail, Funk, Post, Bote) verschickt werden. Eine abgehörte<br />

verschlüsselte Nachricht soll keine bzw. möglichst wenig Rückschlüsse auf<br />

die unverschlüsselte Nachricht zulassen.<br />

2. Kryptoanalyse entwickelt Angriffe auf kryptographische Verfahren. Kryptoanalyse<br />

wird häufig ganz legitim von Fachleuten betrieben, um mögliche<br />

Schwachstellen in Kryptosystemen aufzudecken <strong>und</strong> dann zu beheben.<br />

3. Kryptologie ist der Oberbegriff für <strong>Kryptographie</strong> <strong>und</strong> Kryptoanalyse.<br />

4. Codierungstheorie beschäftigt sich mit Verfahren zur Erkennung <strong>und</strong><br />

Behebung von Fehlern, die entstehen, wenn Daten über einen Kanal übertragen<br />

werden, der diese Daten möglicherweise (um einzelne Bits) verfälscht.<br />

Abhörsicherheit gehört nicht zu den Zielen der Codierungstheorie. Eine<br />

separate Vorlesung zur Codierungstheorie wird regelmäßig an der UniBw<br />

angeboten.<br />

Wir beginnen mit einigen Sprechweisen der Kryptologie. Ein Alphabet ist im<br />

folgenden einfach eine nicht-leere, endliche Menge. Ein Text der Länge n über<br />

dem Alphabet A ist ein Element des Produktes A n . Ferner steht A ∗ := ∪ n∈N A n<br />

für die Menge der Texte beliebiger Länge über A.<br />

5


Beispiele: Das klassische Beispiel ist sicher die 26-elementige Menge<br />

A = {A, B, C, D, E, F, G, · · · , X, Y, Z},<br />

evtl. ergänzt um Kleinbuchstaben, Umlaute <strong>und</strong> Satzzeichen. F QAQST ist ein<br />

Beispiel für einen Text der Länge 6 über dem Alphabet A.<br />

In technischen Anwendungen kommt das Alphabet A := {0, 1} häufig vor. Ein<br />

Text über diesem Alphabet ist ein Bitvektor. Z.B. ist 01001010 ein Text der<br />

Länge 8 über {0, 1}.<br />

Der ASCII-Zeichensatz ist ein Beispiel für ein Alphabet mit 256 Elementen.<br />

Ein Private-Key-Verfahren ist ein Tupel (P, C, K, E, D), das aus folgenden<br />

Objekten besteht:<br />

P die Menge aller möglichen / erlaubten Klartexte,<br />

C die Menge aller möglichen Geheimtexte,<br />

K die Menge aller möglichen Schlüssel,<br />

E die Verschlüsselungs-Abbildung K × P → C,<br />

D die Entschlüsselungs-Abbildung K × C → P.<br />

Axiom: Es muß gelten:<br />

D(k, E(k, X)) = X ∀k ∈ K ∀X ∈ P.<br />

Die Funktionen E <strong>und</strong> D sollten leicht auf einem Computer zu implementieren<br />

sein. Es gibt gute Private-Key-Verfahren (z.B. IDEA, Triple-DES oder<br />

AES), bei denen die Laufzeiten für Ver- bzw. Entschlüsselung auch bei großen<br />

Datenmengen vertretbar klein bleiben. Der Schlüssel ist bei einem Private-<br />

Key-Verfahren unbedingt geheim zu halten. Wenn nur ein nicht abhörsicherer<br />

Kanal zur Verfügung steht, so ist die Schlüsselvereinbarung 1 das Hauptproblem.<br />

Natürlich sollte man niemals den Schlüssel vor der Kommunikation<br />

unverschlüsselt über den unsicheren Kanal vereinbaren.<br />

Einen Ausweg liefern die Public-Key-Verfahren. Wir sagen hier nur so viel:<br />

Mit einem solchen Verfahren kann man über einen nicht abhörsicheren Kanal<br />

kommunizieren, ohne vorher die Schlüsselvereinbarung auf anderem Wege<br />

durchgeführt zu haben. Dabei wird vom Empfänger ein Teil des Gesamtschlüssels<br />

öffentlich gemacht, der zum Verschlüsseln von Nachrichten genügt, nicht aber<br />

zum Entschlüsseln. Die Details werden wir später nachreichen. Die Schlüssellängen<br />

<strong>und</strong> die Rechenzeit für Ver- <strong>und</strong> Entschlüsselung sind hier in aller Regel wesentlich<br />

höher als bei einem guten Private-Key-Verfahren. Public-Key-Verfahren<br />

sind also nicht für die Übertragung großer Datenmengen geeignet.<br />

Wenn große Datenmengen übertragen werden sollen, dann behilft man sich gerne<br />

so: Mit einem Public-Key-Verfahren wird nur ein Schlüssel (verschlüsselt)<br />

übermittelt, <strong>und</strong> dann wird mit diesem Schlüssel eine Private-Key-Sitzung durchgeführt.<br />

Wir erwähnen noch zwei Formen der Kryptoanalyse:<br />

1 Man will vielleich mit Personen per E-Mail kommunizieren, die man noch nie persönlich<br />

getroffen hat.<br />

6


1. Ciphertext-Only-Angriff: Der Angreifer kennt den Geheimtext <strong>und</strong><br />

möchte den Klartext <strong>und</strong> evtl. sogar den Schlüssel berechnen.<br />

2. Known-Plaintext-Angriff: Der Angreifer kennt ein aus Klartext <strong>und</strong><br />

zugehörigem Geheimtext bestehendes Paar <strong>und</strong> will den Schlüssel bestimmen,<br />

um weitere Geheimtexte entschlüsseln zu können. Oder er kennt den<br />

Geheimtext <strong>und</strong> einen Teil des Klartextes, den er u.U. erraten 2 hat, <strong>und</strong><br />

möchte den gesamten Klartext <strong>und</strong> evtl. den Schlüssel bestimmen.<br />

Bei der Sicherheitsbewertung von <strong>Kryptographie</strong>verfahren sollte man niemals<br />

das folgende Kerkhoffsche Prinzip außer Acht lassen: Rechne immer damit,<br />

dass der Angreifer das verwendete Verfahren kennt. Es muß ausreichen, die<br />

Schlüssel geheim zu halten.<br />

Man denke etwa an Spionage 3 , aber auch an folgendes: Bei Freeware-Software<br />

zur Datenübertragung ist der Quellcode (<strong>und</strong> damit das Verschlüsselungsverfahren)<br />

ohnehin jedermann bekannt. Z.B. wurde nie ein Geheimnis daraus gemacht,<br />

dass das Linux-Programm OpenSSH das Diffie-Hellman-Verfahren benutzt.<br />

Trotzdem halte ich es für sicher.<br />

1.2 Vigenère-Chiffre <strong>und</strong> Vernam-Chiffre<br />

Wir diskutieren im folgenden einige klassische <strong>Kryptographie</strong>verfahren. Ich hoffe,<br />

dass diese Diskussion eine geeignete Einführung in das kryptologische Denken<br />

liefert, <strong>und</strong> dass sie “historisch interessant” ist. Einige moderne Private-Key-<br />

Verfahren (z.B. Feistel-Chiffren wie Tripel-DES) kann man als Weiterentwicklung<br />

klassischer Verfahren ansehen.<br />

Wir arbeiten mit dem natürlichen Alphabet A = {A, B, C, · · · , Z}. Wir bezeichnen<br />

mit<br />

S(A) := {σ : A → A | σ ist bijektiv}<br />

die Menge aller Permutationen A → A. Sei rot 1 ∈ S(A) die durch die “Tabelle”<br />

( )<br />

ABCD EF GH IJKL MNOP QRST UV W X Y Z<br />

rot 1 =<br />

BCDE F GHI JKLM NOP Q RST U V W XY ZA<br />

gegebene 4 Abbildung; rot 1 ist also der Links-Shift um eine Position. Sei rot n :=<br />

rot ◦n<br />

1 die n-fache Hintereinanderausführung, d.h. der Links-Shift um n Positionen.<br />

Sei rot −n := rot −1<br />

n der Rechts-Shift um n Positionen. (Z.B. gilt rot 1 (A) =<br />

B, rot 3 (A) = D oder rot −2 (A) = Y .)<br />

Sei nun P = C = A ∗ <strong>und</strong> s ∈ N. Der Schlüsselraum der Vigenère-Chiffre zur<br />

Schlüssellänge s (kurz: s-Vigenère-Chiffre) ist K := {0, · · · , 25} s . Ein Schlüssel<br />

der s-Vigenère-Chiffre ist also ein Vektor k := (k 1 , · · · , k s ) ∈ K. Ein Text 5<br />

2 Bei einer E-Mail ist es z.B. recht wahrscheinlich, dass am Anfrang eine der Phrasen “Sehr<br />

geehrte(r)”, “Liebe(r)” oder “Hallo” steht<br />

3 Es wird im 2. Weltkreig jedem europäischen Geheimdienst bekannt gewesen sein, dass<br />

z.B. die Deutschen mit der Enigma arbeiten <strong>und</strong> die USA-Navy mit CSP-1500<br />

4 Die vertikalen Linien wurden zur besseren Lesbarkeit eingefügt.<br />

5 Bei Texten schreiben wir oft x 1 · · · x N statt (x 1 , · · · , x N ).<br />

7


X = x 1 · · · x N der Länge N wird verschlüsselt zu<br />

E(k, X ) = rot k1 (x 1 ) · · · rot ks (x s )rot k1 (x s+1 ) · · · rot ks (x 2s ) · · · ,<br />

d.h. auf jeden der Buchstaben wird eine der Shiftabbildungen angewendet, <strong>und</strong><br />

zwar wird der n-ten Buchstabe x n mit rot kr verschlüsselt, wenn r der Rest der<br />

Division n ÷ s ist.<br />

Beispiel: Um zukünftig mit der Vigenère-Chiffre kommunizieren zu können, haben<br />

Alice <strong>und</strong> Bob bei einem persönlichen Treffen den Schlüssel k = (1, 2, 25) (also<br />

Schlüssellänge s = 3) vereinbart. Bob möchte nun die Phrase “HALLOALICE”<br />

verschlüsseln. Dazu schreibt er wiederholt den Schlüsselvektor unter den Klartext<br />

<strong>und</strong> verschiebt dann jeden Buchstaben des Klartextes um so viele Positionen<br />

im Alphabet, wie es die darunterstehende Zahl vorgibt:<br />

n 1 2 3 4 5 6 7 8 9 10<br />

Klartext H A L L O A L I C E<br />

⊕ Schlüssel 1 2 25 1 2 25 1 2 25 1<br />

Geheimtext I C K M Q Z M K B F<br />

Der Geheimtext ist also E(k, HALLOALICE) = ICKMQZMKBF .<br />

□<br />

Die Entschlüsselungs-Abbildung der Vigenère-Chiffre ist durch<br />

D(k, Y) = rot −k1 (y 1 ) · · · rot −ks (y s )rot −k1 (y s+1 ) · · · rot −ks (y 2s ) · · ·<br />

(Y = (y 1 , y 2 , · · ·) ein Geheimtext) definiert. Offenbar gilt dann D(k, E(k, X )) =<br />

X für alle X ∈ A ∗ <strong>und</strong> alle k ∈ K, d.h. (P, C, K, E, D) ist in der Tat ein Private-<br />

Key-System<br />

Beispiel: Wenn Alice eines Tages die Nachricht “NCW LQLNV IF V Y U” von<br />

Bob erhält, dann berechnet sie D(k, Y) nach dem Muster<br />

n 1 2 3 4 5 6 7 8 9 10 11 12 13<br />

Geheimtext N C W L Q L N V I F V Y U<br />

⊖ Schlüssel 1 2 25 1 2 25 1 2 25 1 2 25 1<br />

Klartext M A X K O M M T J E T Z T<br />

<strong>und</strong> weiß Bescheid.<br />

□<br />

Der Schlüsselraum der s-Vigenère-Chiffre hat |K| = 26 s Elemente. Es handelt<br />

sich also um einen log 2 (26 s ) = 4.7s-Bit Schlüssel. Für s = 20 sind das 94 Bit,<br />

<strong>und</strong> das ist recht viel. Zum Vergleich: DES hat einen 56-Bit Schlüssel 6 <strong>und</strong><br />

galt bis in die 90er Jahre als sicher. Die Größe des Schlüsselraumes ist aber<br />

nur eine der sicherheitsrelevanten Merkmale eines Verschlüsselungsalgorithmus,<br />

das angibt, wie lange ein Brute-Force-Angriff, d.h. das gesamte Absuchen des<br />

Schlüsselraumes dauern würde. Wir werden sehen, dass es wesentlich intelligentere<br />

Angriffe auf die s-Vigenere-Chiffre gibt, zumindest wenn das Verhältnis<br />

Textlänge zu Schlüssellänge klein ist.<br />

Die Caesar-Chiffre ist die Vigenère-Chiffre zur Schlüssellänge 1 (d.h. der<br />

Schlüssel hat nur 4.7 Bit!). Sie soll schon im alten Rom verwendet worden sein.<br />

6 Es gibt Varianten mit 128 Bit.<br />

8


Jeder Buchstabe des Klartextes wird hier mit der selben Shift-Abbildung verschlüsselt.<br />

(Beispiel: E(1, ALICE) = BMJDF , D(1, AF V T ) = ZEUS.)<br />

Kryptoanalyse der Caesar-Chiffre: Wegen dem extrem kleinen Schlüsselraum<br />

ist ein Angriff durch brutale Gewalt, d.h. durch Absuchen des gesamten<br />

Schlüsselraumes möglich, sogar per Hand! Nehmen wir an, wir wollen den Geheimtext<br />

7<br />

Y := NOHRS DW UDZ LUGNR HQLJL Q<br />

entschlüsseln <strong>und</strong> wissen, dass die Verschlüsselung durch Anwenden von einer<br />

der 26 Rotationsabbildungen auf jeden einzelnen Buchstaben erfolgt ist. Wir berechnen<br />

einfach der Reihe nach D(1, Y), D(2, Y) u.s.w., bis sich etwas Sinnvolles<br />

ergibt.<br />

D(1, Y) MNGQR CV T CY KT F MQ GP KIK P<br />

D(2, Y) LMF P Q BUSBX JSELP F OJHJ O<br />

D(3, Y) KLEOP AT RAW IRDKO ENIGI N<br />

Fertig! Es wurde also mit rot 3 verschlüsselt 8 .<br />

□<br />

Ein anderer Extremfall ist die Vernam-Chiffre (auch als One-Time-Pad bezeichnet)<br />

- das ist der Spezialfall einer Vigenère-Chiffre, in dem die Schlüssellänge<br />

gleich der Textlänge ist, also ein Private-Key-System (P, C, K, E, D) mit P =<br />

C = A N , K = {0, · · · , 25} N <strong>und</strong> D, E wie oben. Wenn als Schlüsselvektor eine<br />

rein zufällige Folge 9 genommen wird, dann ist die Vernam-Chiffre sehr sicher.<br />

Ein Angriff durch brutale Gewalt ist unmöglich: Wenn ein Angreifer auf den<br />

Geheimtext der Reihe nach alle möglichen Schlüssel anwendet, so kommt dabei<br />

jeder Text der Länge N (insbesondere jeder sinnvolle Text der Länge N) einmal<br />

heraus; er kann also aus dem Geheimtext keinerlei Rückschluß auf den Klartext<br />

ziehen.<br />

Die Vernam-Chiffre scheint in Geheimdienstkreisen 10 sehr beliebt gewesen zu<br />

sein (<strong>und</strong> zum Teil heute noch verwendet zu werden). Ein Agent bekommt vom<br />

Hauptquartier ein kleines Büchlein mit Vernam-Schlüsseln ausgehändigt <strong>und</strong> ein<br />

Duplikat verbleibt im Hauptquartier. Jede Seite kann der Reihe nach zum Verschlüsseln<br />

einer Nachricht verwendet werden <strong>und</strong> ist anschließend zu vernichten.<br />

Der Geheimtext kann dann per Telefon oder Funk oder · · · übertragen werden.<br />

Die hohe Sicherheit der Vernam-Chiffre kommt aber nur von dem extrem großen<br />

Schlüsselraum. Wenn z.B. eine 100 MB Datei übertragen werden soll, dann<br />

hat die Schlüsseldatei bei der Vernam-Verschlüsselung ebenfalls 100 MB. Falls<br />

sich die betreffenden Parteien nicht zur Schlüsselvereinbarung treffen können,<br />

so besteht ein Problem: Man wird dann den Schlüssel mit einem Public-Key-<br />

Verfahren übertragen wollen, aber dafür ist er zu groß! Man braucht deshalb<br />

andere Private-Key-Verfahren 11 , die es erlauben, die 100 MB Datei bei einer<br />

Schlüssellänge von ein paar h<strong>und</strong>ert Bit schnell <strong>und</strong> sicher zu übertragen.<br />

7 Die Abstände dienen der besseren Lesbarkeit.<br />

8 Soweit ich weiß soll Caesar in der Tat rot 3 verwendet haben.<br />

9 also insbesondere nicht periodisch<br />

10 u.a. angeblich beim KGB<br />

11 Z.B. IDEA, Triple-DES oder AES<br />

9


Bevor wir zur Kryptoanalyse der Vigenère-Chiffre kommen, benötigen wir eine<br />

Definition. Sei X = x 1 x 2 · · · ein Text über A. Für r, s ∈ N wird<br />

X r,s = x r x r+s x r+2s x r+3s · · ·<br />

Teiltext von X mit Beginn r <strong>und</strong> Sprungweite s genannt. Geht Y aus<br />

X durch eine s-Vigenère-Chiffrierung mit Schlüssel (k 1 , · · · , k s ) hervor, so ist<br />

Y r,s ein Caesar-Chiffrat von X r,s : Jeder Buchstabe in X r,s ist mit der selben<br />

Rotationsabbildung verschlüsselt, <strong>und</strong> zwar mit rot kr .<br />

Beispiel: Sei X = KLEOP AT RAIST KOENIGIN. Die Teiltexte X 1,3 , X 2,3 ,<br />

X 3,3 kann man gewinnen, in dem man den Text X “schlangenförmig” in s = 3<br />

Zeilen schreibt:<br />

Verschlüsselt man X mit k = (1, 2, 3)<br />

X 1,3 = K O T I K N I<br />

X 2,3 = L P R S O I N<br />

X 3,3 = E A A T E G<br />

Klartext K L E O P A T R A I S T K O · · ·<br />

⊕ Schlüssel 1 2 3 1 2 3 1 2 3 1 2 3 1 2 · · ·<br />

Geheimtext L N H P R D U T D J U W L Q · · ·<br />

so sieht man, daß X i,3 mit k i verschlüsselt wird.<br />

1.3 Kryptoanalyse der Vigenère-Chiffre durch<br />

Häufigkeitsanalyse<br />

Nehmen wir an, der Geheimtext Y = y 1 · · · y N ist mit dem s-Vigenère-Verfahren<br />

verschlüsselt worden, wobei die Schlüssellänge s bekannt <strong>und</strong> viel kleiner 12 als<br />

N ist. Wir wollen den Schlüssel (k 1 , · · · , k s ) bestimmen.<br />

In einer natürlichen Sprache kommen die Buchstaben nicht mit der gleichen relativen<br />

Häufigkeit vor. Z.B. ist in hinreichend langen deutschen Texten (<strong>und</strong> auch<br />

in Teiltexten von deutschen Texten) E der häufigste Buchstabe (rel. Häufigkeit<br />

ca. 13%) gefolgt von N (7.5%) <strong>und</strong> I (6%). Diesen Umstand macht man sich zu<br />

Nutze.<br />

Man ermittelt die Teiltexte Y 1,s , · · · , Y s,s zur Sprungweite s. Jedes Zeichen des<br />

Teiltextes Y r,s ist mit der selben Shift-Abbildung rot kr verschlüsselt worden.<br />

Wenn nun x der häufigste Buchstabe in Y r,s ist, so wird vermutlich x = rot kr (E)<br />

gelten <strong>und</strong> aus einer solchen Gleichung läßt sich k r bestimmen: Ist z.B. G der<br />

häufigste Buchstabe in Y 1,s , so würde ich vermuten, dass k 1 = 2 gilt, denn G<br />

kommt im Alphabet 2 Positionen nach E. Wenn in Y 2,s der häufigste Buchstabe<br />

D ist, so legt das den Verdacht k 2 = 25 nahe. So fortfahrend kann man<br />

versuchen, den gesamten Schlüssel zu gewinnen.<br />

□<br />

12 vielleicht s = 5 <strong>und</strong> N = 200<br />

10


φ-Index<br />

Sei X = x 1 x 2 · · · x N ein Text der Länge N über A. Für x ∈ A sei h x (X ) die<br />

Häufigkeit des Buchstabens x in X . (Beispiel: h L (HALLOARNOLD) = 3.)<br />

Die Zahl<br />

1 ∑<br />

φ(X ) :=<br />

h x (X )(h x (X ) − 1)<br />

N(N − 1)<br />

x∈A<br />

wird φ-Index von X genannt.<br />

Man kann beweisen: Für einen Zufallstext X = (x 1 , · · · x N ) (d.h. die x i sind<br />

unabhängige <strong>und</strong> jeweils gleichverteilte Zufallsvariablen) ist der Erwartungswert<br />

von φ(X ) ungefähr 0.03.<br />

Empirische Untersuchungen zeigen, dass für längere Texte in einer natürlichen<br />

Sprache (<strong>und</strong> auch für Teiltexte eines solchen Textes) der φ-Index viel höher<br />

ausfällt, z.B. φ(X ) ≈ 0.07 für längere deutsche Texte. Dies kann man zur Kryptoanalyse<br />

der Schlüssellänge einer Vigenère-Chiffre verwenden.<br />

Man beachte im folgenden: Wenn Y ein Caesar-Chiffrat von X ist, dann gilt 13<br />

φ(X ) = φ(Y).<br />

Kryptoanalyse der Schlüssellänge der Vigenère-Chiffre (Friedman-<br />

Test)<br />

Sei Y ein Vigenère-Chiffrat zu einem deutschen Klartext; die Schlüssellänge s<br />

sei unbekannt. Sei<br />

φ (k) (Y) = 1 k∑<br />

φ(Y j,k )<br />

k<br />

der Mittelwert der φ-Werte der Teiltexte zur Sprungweite k. Für k = s ist jeder<br />

dieser Teiltexte Y 1,s · · · Y s,s ein Caesar-Chiffrat eines Teiltextes eines deutschen<br />

Textes. Also wird φ (s) (Y) ≈ 0, 07 gelten.<br />

Für k ∈ {1, · · · , s − 1} werden sich die Texte Y 1,k · · · Y k,k mehr wie Zufallstexte<br />

verhalten; also wird φ (k) (Y) in der Nähe 14 von 0.03 liegen.<br />

j=1<br />

Zur Bestimmung von s berechnet 15 man also den φ-Vektor<br />

(φ (1) (Y), φ (2) (Y), φ (3) (Y), · · ·).<br />

Hier ist üblicherweise eine Periodizität erkennbar <strong>und</strong> die Position des ersten<br />

signifikanten Maximums ist die vermutete Schlüssellänge.<br />

13 in der obigen Summe treten die Summanden nur in anderer Reihenfolge auf<br />

14 in meinen Experimenten meist ≤ 0, 05<br />

15 Man verwende einen Computer, um die vielen Schlangentexte auszuzählen!<br />

11


1.4 Permutationen <strong>und</strong> monoalphabetische Substitution<br />

Wir beginnen diesen Abschnitt mit einem “Steilkurs zu Permutationen” <strong>und</strong><br />

gehen dann kurz auf die Verschlüsselung durch monoalphabetische Substitution<br />

ein. Einige Gr<strong>und</strong>lagen zu Permutationsgruppen werden aus anderen Vorlesungen<br />

bekannt sein; wir konzentrieren uns auf Resultate, die im folgenden<br />

besonders wichtig sind, insbesondere für das Verständnis der Chiffriermaschine<br />

Enigma, der wir uns dann im nächsten Abschnitt zuwenden.<br />

Sei X eine Menge <strong>und</strong><br />

S(X) := {σ : X → X | σ ist bijektiv}.<br />

Sei σ ∈ S(X). Ein Element x ∈ X heißt Fixpunkt von σ, wenn σ(x) = x gilt. σ<br />

heißt fixpunktfrei, wenn σ(x) ≠ x für alle x ∈ X gilt. σ heißt involutorisch,<br />

wenn σ◦σ(x) = x für alle x ∈ X gilt. Genau dann ist σ involutorisch, wenn σ mit<br />

seiner Umkehrabbildung übereinstimmt, d.h. wenn σ = σ −1 gilt. Involutorische<br />

Permutationen spielen in der <strong>Kryptographie</strong> eine gewisse Rolle.<br />

Beispiel: Sei X = {A, B, C, D, E, F, G}. Wir geben σ, η ∈ S(X) “in Tabellenform”<br />

an:<br />

( ) ( )<br />

A B C D E F G<br />

A B C D E F G<br />

σ =<br />

, η =<br />

.<br />

C G E B A D F<br />

B A D C F E G<br />

η hat Fixpunkt G, während σ fixpunktfrei ist. σ ist wegen σ ◦ σ(A) = σ(C) =<br />

E ≠ A nicht involutorisch. η hingegen ist involutorisch.<br />

□<br />

Für x 1 , · · · , x n ∈ X paarweise verschieden bedeutet die Notation 16<br />

σ := (x 1 , · · · , x n ),<br />

daß σ ∈ S(X) die Elemente x 1 , · · · , x n zyklisch permutiert <strong>und</strong> die anderen<br />

Elemente von X festläßt; in Formeln: σ(x i ) = x i+1 für i ∈ {1, · · · , n − 1},<br />

σ(x n ) = x 1 <strong>und</strong> σ(x) = x für x ∈ X \{x 1 , · · · , x n }. Die Bijektion σ = (x 1 , · · · x n )<br />

verfährt also gem. dem Muster<br />

x 1<br />

σ<br />

→ x2<br />

σ<br />

→ · · ·<br />

σ<br />

→ xn−1<br />

σ<br />

→ xn<br />

σ<br />

→ x1 .<br />

Eine solche Permutation wird n-Zykel genannt. Die 2-Zyklen heißen Transpositionen;<br />

sie vertauschen zwei Elemente <strong>und</strong> lassen den Rest fest. Die Einerzyklen<br />

(x) sind die Identität. Zwei Zyklen σ = (x 1 , · · · , x s ) <strong>und</strong> η = (y 1 , · · · , y t )<br />

werden disjunkt genannt, wenn {x 1 , · · · , x s } ∩ {y 1 , · · · , y t } = ∅. Der folgende<br />

Satz ist sicher aus der linearen Algebra geläufig.<br />

Satz 1.4.1 Sei X eine endliche Menge.<br />

16 Diese Notation ist m.E. nicht ideal, aber sie ist Standard. Ob mit (x 1 , ·, x n) ein Vektor<br />

oder der entsprechende n-Zykel (d.h. eine gewisse Bijektion, also ganz etwas anderes) gemeint<br />

ist, muß aus dem Kontext eindeutig hervorgehen.<br />

12


a) Wenn σ ∈ S(X) <strong>und</strong> η ∈ S(X) disjunkte Zyklen sind, dann gilt 17 σ ◦ η =<br />

η ◦ σ.<br />

b) Jede Permutation σ ∈ S(X) kann als Produkt von disjunkten Zyklen geschrieben<br />

werden. Die Darstellung ist bis auf die Reihenfolge der Zyklen<br />

(<strong>und</strong> bis auf das Hinzufügen bzw. Weglassen von Einerzyklen) eindeutig.<br />

Sei (s 1 , · · · , s t ) ∈ N t ein Vektor mit s 1 ≥ · · · ≥ s t > 1. Wir sagen σ ∈ S(X)<br />

ist von der Zyklenstruktur 18 (s 1 , · · · , s t ), wenn σ als Produkt von disjunkten<br />

Zyklen der Längen s 1 , · · · , s t geschrieben werden kann.<br />

Beispiel: Um die Permutation σ aus obigem Beispiel als Produkt von disjunkten<br />

Zyklen zu schreiben, kann man nach folgendem Muster vorgehen:<br />

A σ → C σ → E σ → A, d.h. der Zykel (A, C, E) kommt vor.<br />

B σ → G σ → F σ → D σ → B, d.h. der Zykel (B, G, F, D) kommt vor.<br />

Also gilt σ = (B, G, F, D)(A, C, E) <strong>und</strong> σ ist von der Zyklenstruktur (4, 3).<br />

Wir zerlegen nun η (vgl. obiges Bsp.) in ein Produkt disjunkter Zyklen:<br />

A σ → B σ → A, d.h. die Transposition (A, B) kommt vor.<br />

C σ → D σ → C, d.h. (C, D) kommt vor.<br />

E σ → F σ → E, d.h. (E, F ) kommt vor.<br />

Also gilt η = (A, B)(C, D)(E, F ) <strong>und</strong> diese Permutation hat Zyklenstruktur<br />

(2, 2, 2). □<br />

Eine Permutation vom Typ (2, 2, · · · , 2) ist ein Produkt von disjunkten Transpositionen<br />

<strong>und</strong> daher involutorisch.<br />

Wir führen nun eine Notation ein, die bei der Diskussion der Chiffriermaschine<br />

Enigma im nächsten Abschnitt sehr nützlich sein wird. Sei X eine Menge. Für<br />

σ, τ ∈ S(X) sei<br />

σ τ := τ −1 ◦ σ ◦ τ.<br />

Man sagt: “σ wird mit τ konjugiert.” Für σ ∈ S(X) <strong>und</strong> n ∈ N soll die übliche<br />

Definition<br />

σ n = σ ◦ · · · ◦ σ<br />

} {{ }<br />

n−mal<br />

nach wie vor in Kraft sein; es kommt also darauf an, ob der Exponent eine<br />

Permutation oder eine natürliche Zahl ist.<br />

Bemerkung 1.4.2 Sei σ, η, τ ∈ S(X).<br />

a) Es gilt (σ η ) τ = σ η◦τ <strong>und</strong> (σ ◦ η) τ = σ τ ◦ η τ .<br />

b) Sei x ∈ X. Wenn x Fixpunkt von σ ist, dann ist η −1 (x) Fixpunkt von σ η .<br />

Für den Beweis verweisen wir auf die Übungen. Der folgende allgemeine Satz<br />

über Permutationen wurde mehrfach plakativ “The Theorem that won World<br />

17 Vorsicht: Für nicht-disjunkte Zyklen gilt oft ση ≠ ησ.<br />

18 Das ist in dieser Form nicht Standardterminologie.<br />

13


War II” genannt, weil er bei der Kryptoanalyse der Chiffriermaschine Enigma<br />

eine wichtige Rolle spielt 19 .<br />

Satz 1.4.3 Sei σ, η ∈ S(X). Die Permutationen σ <strong>und</strong> σ η haben die selbe Zyklenstruktur.<br />

Beweis: Wir beweisen die Aussage nur in dem Sonderfall, dass σ = (x 1 , · · · , x s )<br />

ein s-Zykel ist. Der allgemeine Fall folgt dann leicht mit obiger Bemerkung.<br />

Wir behaupten, dass σ η = (η −1 (x 1 ), · · · , η −1 (x s )) gilt. In der Tat, für 1 ≤<br />

i ≤ s − 1 gilt σ η (η −1 (x i )) = η −1 σηη −1 (x i ) = η −1 σ(x i ) = η −1 (x i+1 ). Analog<br />

zeigt man σ η (η −1 (x s )) = η −1 (x 1 ). Für x ∈ X \ {η −1 (x 1 ), · · · , η −1 (x s )} gilt<br />

η(x) ∈ X \ {x 1 , · · · , x s }. Daher σ η (x) = η −1 ση(x) = η −1 (η(x)) = x. □<br />

Wir beenden diesen Abschnitt mit einem weiteren <strong>Kryptographie</strong>verfahren. Sei<br />

A ein Alphabet. Das folgende Private-Key-Verfahren (P, C, K, E, D) wird monoalphabetische<br />

Substitution genannt: P = C = A ∗ <strong>und</strong> der Schlüsselraum<br />

K = S(A) ist die Menge aller Permutationen von A. Sei σ ∈ K. Die Verschlüsselung<br />

eines Textes X = x 1 x 2 · · · über A mit dem Schlüssel σ geschieht, indem die<br />

selbe Permutation σ der Reihe nach auf jedes Zeichen von X angewendet wird:<br />

E(X , σ) = σ(x 1 )σ(x 2 ) · · ·<br />

Entschlüsseln ist das selbe wie Verschlüsseln mit der Umkehrabbildung σ −1 des<br />

Schlüssels: D(Y, σ) = E(Y, σ −1 ) für Y ∈ A ∗ .<br />

Ich denke, man darf auf ein explizites Beispiel verzichten. Monoalphabetische<br />

Substitutionen sind kryptologisch schwach. Man kann sie mit Häufigkeitsanalysen<br />

angreifen.<br />

1.5 Die Chiffriermaschine Enigma<br />

Noch fertigstellen<br />

Zeichnungen u. Bilder nachtragen<br />

Die Chiffriermaschine Enigma (griechisch: Rätsel) wurde von dem deutschen<br />

Elektroingenieur Arthur Scherbius (1878-1929) erf<strong>und</strong>en; das entsprechende Patent<br />

wurde 1918 erteilt. Später wurden u.a. von Wilhelm Korn Verbesserungen<br />

angebracht. Die Enigma war zunächst für den zivilen Gebrauch gedacht <strong>und</strong><br />

wurde (mit wenig Erfolg) kommerziell vermarktet. Bereits in den zwanziger<br />

Jahren zeigten militärische Stellen Interesse <strong>und</strong> wenig später wurde die Enigma<br />

vom Markt genommen <strong>und</strong> nur noch für militärische Zwecke genutzt. Während<br />

des 2. Weltkrieges wurde nahezu die gesamte Kommunikation des deutschen Militärs<br />

über die Enigma abgewickelt. Auch bei Polizei, Reichsbahn, Reichspost<br />

19 Eigentlich braucht man ihn bereits, um die Gr<strong>und</strong>eigenschaften der Enigma zu verstehen.<br />

Ich denke, dieser Satz wird bereits im 19. Jahrh<strong>und</strong>ert bekannt gewesen sein.<br />

14


<strong>und</strong> SS waren Enigmas im Einsatz. Es sollen während des Krieges über 40.000<br />

(hohe Schätzungen gehen von bis zu 200.000 aus) Enigmas gebaut worden sein.<br />

Die Maschine wurde während des Krieges mehrfach verbessert <strong>und</strong> auch die<br />

Dienstvorschriften für den Umgang mit ihr haben sich laufend geändert. Man<br />

kann also eigentlich nicht von der Enigma sprechen; es gab viele Varianten, die<br />

aber alle nach dem selben Gr<strong>und</strong>prinzip aufgebaut waren.<br />

Seit 1932 wurde massiv an der Entschlüsselung der Enigma gearbeitet. In Frankreich<br />

war das Dechiffrierbüro um General Gustav Bertrand <strong>und</strong> den Agenten<br />

Hans-Thilo Schmidt damit betraut. In Polen arbeitete eine Gruppe von Kryptologen<br />

unter der Leitung von dem Mathematiker Rejewski an der Entschlüsselung<br />

der Enigma <strong>und</strong> erzielte beeindruckende Ergebnisse bereits in den 30er Jahren.<br />

Vor dem Überfall auf Polen teilte Rejewski seine Erkenntnisse mit dem englischen<br />

Geheimdienst, bevor er aus Polen floh. Die englische Gruppe um Alain<br />

Turing, Gordon Welchman <strong>und</strong> Dilly Knox in Bletchley Park konnte in den 40er<br />

Jahren die größten Erfolge verbuchen.<br />

Erste gelegentliche Einbrüche in die Enigma gelangen der polnischen Gruppe<br />

bereits in den 30er Jahren. Ab 1940 war die Theorie weit genug entwickelt, um<br />

regelmäßig in die Schlüsselnetze RED (Luftwaffe) <strong>und</strong> ORANGE (SS) einzubrechen.<br />

Spätestens 1942 kam man auch mit den anderen Schlüsselnetzen der Luftwaffe<br />

(WASP, GADFLY, SCORPION u.a.) <strong>und</strong> dem Schlüsselnetz DOLPHIN<br />

der Marine gut zurecht. Hartnäckiger scheinen die Schlüsselnetze des Heeres<br />

gewesen zu sein, aber auch hier gelangen gegen Kriegsende immer wieder Einbrüche<br />

(allerdings nur ein einziger vor 1943). Die entschlüsselten Informationen<br />

waren natürlich von höchster militärischer Relevanz 20 .<br />

Funktionsweise der Enigma<br />

Die Enigma sieht auf den ersten Blick wie eine Schreibmaschine aus. Vor der<br />

Verschlüsselung muß der Tagesschlüssel eingestellt werden (dies geschieht durch<br />

das Herstellen gewisser Steckverbindungen auf einem Schaltbrett, das Einlegen<br />

<strong>und</strong> Positionieren gewisser Walzen <strong>und</strong> das Einstellen gewisser Ringstellungen<br />

an diesen Walzen, siehe unten). Wenn dann eine Taste gedrückt wird, so leuchtet<br />

eine andere Taste auf <strong>und</strong> dies ist die Verschlüsselung des gedrückten Buchstabens.<br />

Wir erläutern den ungefähren 21 Aufbau der Enigma I (zu Beginn der 30er Jahre<br />

im Einsatz).<br />

Hauptbauteil: Der Satz von Walzen<br />

Hauptbestandteil sind fünf Walzen (auch Rotoren genannt), die mit römische<br />

Zahlen I bis V durchnummeriert sind. Jede davon ist umlaufend mit den Zahlen<br />

0 bis 25 (oder, je nach Modell 22 , mit Buchstaben A bis Z) beschriftet <strong>und</strong><br />

20 Einzelne Historiker sagen, das regelmäßige Abhören von Nachrichten sei kriegsentscheidend<br />

gewesen; ich bin nicht kompetent, das zu beurteilen.<br />

21 Wie gesagt: Es gab laufend Veränderungen an der Enigma. Mir geht es um den prinzipiellen<br />

Aufbau.<br />

22 An vielen Modellen soll eine Umrechnungstabelle A = 00, B = 02, · · · angebracht gewesen<br />

sein.<br />

15


hat auf beiden Seiten 26 Anschlüsse A bis Z. Diese Kontakte sind durch eine<br />

(anfangs streng geheime) innere Verdrahtung miteinander verb<strong>und</strong>en. Diese<br />

Verdrahtung ist heute bekannt <strong>und</strong> kann durch Permutationen ω I , · · · , ω V mathematisch<br />

beschrieben werden:<br />

x ABCDE F GHIJ KLMNO P QRST UV W XY Z<br />

ω I (x) EKMF L GDQV Z NT OW Y HXUSP AIBRC J<br />

ω II (x) AJDKS IRUXB LHW T M CQGZN P Y F V O E<br />

ω III (x) BDF HJ LCP RT XV ZNY EIW GA KMUSQ O<br />

ω IV (x) ESOV P ZJAY Q UIRHX LNF T G KDCMW B<br />

ω V (x) V ZBRG IT Y UP SDNHL XAW MJ QOF EC K<br />

Wenn man z.B. bei Rotor I auf der rechten Seite Spannung bei C anlegt, so kann<br />

Strom zu ω I (C) = M fließen. Wenn man bei diesem Rotor links Spannung bei A<br />

anlegt, so fließt Strom zu ω −1<br />

I<br />

(A) = U. Außerdem waren zwei Umkehrwalzen<br />

(UKW 23 B <strong>und</strong> C) beigelegt. Diese haben nur auf einer Seite Kontakte A bis<br />

Z. Dreizehn Paare der 26 Kontakte sind jeweils durch einen inneren Draht miteinander<br />

verb<strong>und</strong>en. Die Verdrahtung der Umkehrwalzen kann ebenfalls durch<br />

Permutationen mathematisch erfaßt werden 24 :<br />

ν B = (AY )(BR)(CU)(DH)(EQ)(F S)(GL)(IP )(JX)(KN)(MO)(T Z)(V W ),<br />

ν C = (AF )(BV )(CP )(DJ)(EI)(GO)(HY )(KR)(LZ)(MX)(NW )(QT )(SU).<br />

Das heißt grob gesprochen: UKW C vertauscht A mit F , B mit V , C mit P<br />

u.s.w. Wenn man z.B. bei UKW C Spannung an Kontakt V legt, so kann Strom<br />

nach ν C (V ) = B fließen.<br />

Die Enigma I hat nun vier nebeneinanderliegende Schächte; der linke Schacht<br />

ist für eine UKW <strong>und</strong> in die anderen Schächte können drei der fünf Rotoren<br />

eingelegt werden. “Walzlage III, I, V mit UKW B” bedeutet, dass von rechts<br />

beginnend die Rotoren V, I, III eingelegt sind <strong>und</strong> mit UKW B gearbeitet wird.<br />

Die Rotoren sind in ihrem Schacht drehbar <strong>und</strong> können gemäß ihrer äußeren<br />

Beschriftung in eine geeignete Position gebracht werden. Diese Position ist in<br />

einem Sichtfenster ablesbar. “Gr<strong>und</strong>stellung 0, 12, 7” bedeutet: Bei dem rechten<br />

Rotor ist 0 im Sichtfenster ablesbar, bei dem mittleren 12 <strong>und</strong> bei dem<br />

linken 7. Die UKW ist nicht drehbar. Rechts der Schächte sitzt die fest eingebaute<br />

Stator-Walze mit Anschlüssen A bis Z. Sind die Walzen einmal eingelegt,<br />

so entsteht zwischen den Walzen eine elektrische Verbindung; dies wird durch<br />

Schleifkontakte realisiert.<br />

Sei A := {A, B, · · · , Z}. p = (p 1 , p 2 , p 3 ) ∈ {I, · · · , V } 3 eine Walzlage <strong>und</strong> g =<br />

(g 1 , · · · , g 3 ) ∈ {0, · · · , 25} 3 eine Gr<strong>und</strong>stellung. Bei Gr<strong>und</strong>stellung g = (0, 0, 0)<br />

ist in dem Block von drei Rotoren der rechte Kontakt x ∈ A mit dem Kontakt<br />

R p,(0,0,0) (x) = ω p1 ω p2 ω p3 (x)<br />

der UKW verb<strong>und</strong>en. (Z.B. kommt bei Walzlage V, IV, I <strong>und</strong> Gr<strong>und</strong>stellung<br />

(0, 0, 0) eine Verbindung von Kontakt D rechts mit Kontakt<br />

R (V,IV,I),(0,0,0) (x) = ω V ω IV ω I (D) = ω V ω IV (F ) = ω V (Z) = K<br />

23 Ich weiß nicht, warum sie nicht mit A <strong>und</strong> B benannt waren. Vielleicht gab es einmal eine<br />

UKW A, die nie oder nicht lange verwendet wurde.<br />

24 Wie üblich schreiben wir (x, y) für die Transposition, die x <strong>und</strong> y vertauscht <strong>und</strong> alle<br />

anderen Elemente festläßt.<br />

16


an der UKW zustande.) Bei allgemeiner Gr<strong>und</strong>stellung g kommt noch ein Versatz<br />

zwischen den Walzen hinzu. Sei ρ := rot 1 . Dann ist bei Walzlage p <strong>und</strong><br />

Gr<strong>und</strong>stellung g in dem Block von drei gewöhnlichen Walzen der Kontakt x ∈ A<br />

rechts mit dem Kontakt<br />

der UKW verb<strong>und</strong>en.<br />

R p,g (x) = ρ −g1 ω p1 ρ g1−g2 ω p2 ρ g2−g3 ω p3 ρ g3 (x)<br />

Wenn man nun Spannung an den Statoranschluß x ∈ A rechts anlegt, so kann<br />

Strom von dort durch den Satz von Rotoren, dann durch die UKW <strong>und</strong> dann<br />

noch einmal durch den Satz von Rotoren zurück zum Stator fließen. In der Tat<br />

ist also Statoranschluß x ∈ A mit Statoranschluß<br />

W p,u,g (x) = R −1<br />

p,g ◦ ν u ◦ R p,g (x)<br />

verb<strong>und</strong>en, wenn p die Walzlage, g die Gr<strong>und</strong>stellung <strong>und</strong> u die eingesetzte<br />

UKW ist. Das gesamte Bauteil realisiert also die Permutation W p,u,g .<br />

Satz 1.5.1 Die Permutation W p,u,g ist von der Zyklenstruktur<br />

(2, 2, · · · , 2),<br />

} {{ }<br />

13−mal<br />

d.h. W p,u,g ist ein Produkt von 13 disjunkten Transpositionen. Insbesondere ist<br />

W p,u,g fixpunktfrei <strong>und</strong> involutorisch.<br />

Beweis: Die UKW-Permutation ν u ist ein Produkt von 13 disjunkten Transpositionen<br />

(siehe oben). Nach 1.4.3 muß “die mit R p,g konjugierte UKW” W p,u,g =<br />

νu<br />

Rp,g<br />

die selbe Zyklenstruktur wie ν u haben. Also ist auch W p,u,g ein Produkt<br />

von 13 disjunkten Transpositionen. Daher die Behauptung.<br />

□<br />

Das Steckbrett<br />

Das zweite Hauptbauteil war das sogenannte Steckbrett. Auf diesem Steckbrett<br />

waren in zwei Zeilen je 26 doppelpolige Anschlüsse angebracht, die jeweils mit<br />

A bis Z beschriftet waren. Mitgeliefert waren einige doppelpolige Verbindungskabel.<br />

Mit diesen Kabeln konnte man Buchstabenpaare verbinden (im Jargon:<br />

steckern) <strong>und</strong> das Steckbrett hat die gesteckerten Buchstaben dann vertauscht.<br />

Anfangs wurden 6, später 10 Buchstabenpaare gesteckert. Wenn 10 Paare gesteckert<br />

sind, dann wirkt das Steckbrett wie ein Produkt von 10 disjunkten<br />

Transpositionen (<strong>und</strong> es hat demnach 6 Fixpunkte).<br />

17


Schlüsselbucheinträge für die Enigma könnten ungefähr so ausgesehen haben:<br />

13.Mai.1933<br />

Walzlage: I, V, III UKW C<br />

Gr<strong>und</strong>stellung: QKF (bzw. 16, 10, 5) Ringstellung: UXF (bzw. 20, 23, 5)<br />

Steckerverbindungen: AX CE UW BM NK LQ DO EP FY RT<br />

12.Mai.1943<br />

Walzlage: IV, II, V UKW B<br />

Gr<strong>und</strong>stellung: DLV (bzw. 3, 11, 21) Ringstellung: WUC (bzw. 22, 20, 2)<br />

Steckerverbindungen: AD CE OL FP XZ SY BT GQ HJ NK<br />

.<br />

.<br />

.<br />

Das Steckbrett hat dann am 12.Mai.1933 die Permutation<br />

bewirkt.<br />

S = (AD)(CE)(OL)(F P )(XZ)(SY )(BT )(GQ)(HJ)(NK)<br />

Stromfluß durch die Enigma<br />

An das Steckbrett ist die Tastatur angeschlossen <strong>und</strong> das Steckbrett ist mit dem<br />

Satz von Walzen verb<strong>und</strong>en. Wenn eine Taste gedrückt wird, dann fließt Strom<br />

durch das Steckbrett, durch den Walzsatz, nocheinmal durch das Steckbrett <strong>und</strong><br />

dann zurück in die Tastatur; eine andere Taste leuchtet dann auf.<br />

Wenn bei Walzlage p, UKW u, Gr<strong>und</strong>stellung g <strong>und</strong> Steckbrettpermutation S<br />

die Taste x ∈ A gedrückt wird, dann leuchtet die Taste<br />

auf.<br />

E p,u,g,S (x) = S −1 W p,u,g S(x)<br />

Satz 1.5.2 Die Permutation E p,u,g,S ist ein Produkt von 13 Transpositionen.<br />

Insbesondere ist E p,u,g,S fixpunktfrei <strong>und</strong> involutorisch.<br />

Beweis: Nach 1.4.3 muß E p,u,g,S = W S p,u,g die selbe Zyklenstruktur wie W p,u,g<br />

haben <strong>und</strong> W p,u,g ist ein Produkt von 13 disjunkten Transpositionen nach 1.5.1<br />

□<br />

Fortschalten <strong>und</strong> Ringstellung<br />

Der eigentliche Clou der Maschine ist, daß sich die Rotoren bei jedem Tastenanschlag<br />

ähnlich einem (etwas perversen) Kilometerzähler weiterdrehen. Die anfangs<br />

eingestellte Gr<strong>und</strong>stellung ändert sich also bei jedem Tastenanschlag. Dies<br />

macht die kryptologische Stärke der Maschine aus: Jeder Buchstabe wird durch<br />

eine andere Permutation verschlüsselt. Dadurch wird die Enigma weitgehend<br />

immun gegen Angriffe durch Häufigkeitsanalyse.<br />

Der rechte Rotor fungiert als schneller Rotor. Er dreht sich bei jedem Tastenanschlag<br />

um eine Position weiter. Der mittlere Rotor dreht sich (im Mittel) alle<br />

18


26 Anschläge weiter <strong>und</strong> der langsame (linke) Rotor nur (im Mittel) bei jedem<br />

26 2 -ten Anschlag.<br />

Details regelt die Ringstellung r ∈ A 3 (vgl. den obigen exemplarischen Schlüsselbucheintrag).<br />

An jedem Rotor kann vor dem Einlegen in den Schacht durch einen<br />

verstellbaren Ring die Position einer Kerbe eingestellt werden. Ich habe Widersprüchliches<br />

über die genaue Auswirkung der Ringstellung gelesen. Bei manchen<br />

Modellen scheint es so gewesen zu sein: Bei Ringstellung r = (r 1 , r 2 , r 3 )<br />

zieht der schnelle Rotor den mittleren Rotor mit, nachdem im Sichtfenster r 3<br />

zu lesen war. Der mittlere Rotor zieht den langsamen Rotor mit, wenn er ab<br />

r 2 umspringt. Die Einstellung r 1 am langsamen Rotor ist irrelevant; die UKW<br />

ist ja nicht drehbar. In Buchstabennotation ergibt sich die folgende Folge von<br />

Gr<strong>und</strong>stellungen, wenn man mit Gr<strong>und</strong>stellung QKF bei Ringstellung UXI<br />

auf einer solchen Enigma tippt:<br />

QKF → QKG → QKH → QKI → QLJ → QLK → QLL → QLM → · · ·<br />

· · · QXH → QXI → RY J → RY K → · · · .<br />

Wenn g die Gr<strong>und</strong>stellung <strong>und</strong> r die Ringstellung ist, so bezeichnen wir mit<br />

g ⊕ r n die Gr<strong>und</strong>stellung nach n Anschlägen.<br />

Die Enigma verschlüsselt also bei Walzlage p, UKW u, Gr<strong>und</strong>stellung g, Ringstellung<br />

r <strong>und</strong> Steckbrett-Permutation S einen Text X = x 0 x 1 x 2 · · · zu<br />

ENIGMA p,u,g,r,S (X ) = E p,u,g,S (x 0 )E p,u,g⊕r1,S(x 1 )E p,u,g⊕r2,S(x 2 ) · · ·<br />

Satz 1.5.3<br />

a) ENIGMA p,u,g,r,S ist involutorisch: Sei Y ein Enigma-Chiffrat, das bei Ausgangstellung<br />

(Schlüssel) k = (p, u, g, r, S) erzeugt wurde. Wenn man dann die<br />

Maschine erneut in die Ausgangsstellung k bringt <strong>und</strong> den Geheimtext Y eingibt,<br />

dann erhält man den Klartext zurück! Das ist natürlich sehr benutzerfre<strong>und</strong>lich.<br />

b) Die Enigma-Verschlüsselung ist fixpunktfrei: Kein Buchstabe wird jemals in<br />

sich selbst überführt. (Dies wird sich als eine entscheidende kryptologische Schwäche<br />

herausstellen!)<br />

Dies folgt leicht aus 1.5.2. Die kryptologische Stärke liegt in dem Stromchiffrencharakter:<br />

Jeder Buchstabe wird mit einer anderen Permutation verschlüsselt.<br />

Dies zerstört die Häufigkeitsverteilung des Klartextes <strong>und</strong> schleift Muster ab:<br />

Z.B. wird ANNA nicht zu OTTO verschlüsselt.<br />

Größe des Schlüsselraumes der Enigma<br />

Teilschlüssel Möglichkeiten in Bit<br />

Walzlage (incl. UKW) 5 · 4 · 3 · 2 = 120 ≈ 7<br />

Gr<strong>und</strong>stellung 26 3 ≈ 14<br />

Ringstellung 26 2 ≈ 9<br />

Steckbrett ≈ 150 · 10 12 ≈ 47<br />

19


Mit insgesamt 77 Bit ist der Schlüsselraum für damalige Verhältnisse (ohne<br />

Computer!) riesig; ein reiner Brute-Force-Angriff von Hand wurde zurecht für<br />

völlig unmöglich gehalten. Zum Vergleich: DES hat einen 56-Bit Schlüssel, galt<br />

bis in die 90er Jahre als sicher <strong>und</strong> wird zum Teil heute noch verwendet.<br />

Der Löwenanteil von 47 Bit kommt allerdings von dem Steckbrett <strong>und</strong> das ist<br />

das “weniger intelligente” Bauteil. Ein alleine betriebenes Steckbrett bewirkt<br />

nur eine monoalphabetische Substitution, ist also kryptologisch recht schwach.<br />

Kurz: Die Steckbrett-Permutation ändert sich während dem Tippen auf der<br />

Enigma nicht.<br />

Das kryptologisch sehr ausgeklügelte Hauptbauteil (der Walzsatz) macht nur 30<br />

Bit aus.<br />

Solange einem Angreifer die innere Verdrahtung der Walzen nicht bekannt ist,<br />

kommen im Prinzip noch weitere ca. 300 Bit hinzu. Ich zähle dies aber nicht<br />

zu dem Schlüsselraum, weil sich die innere Verdrahtung nicht von Tag zu Tag<br />

ändert <strong>und</strong> somit als ein Teil der Maschine bzw. des Algorithmus <strong>und</strong> nicht als<br />

Teil des einstellbaren Schlüssels anzusehen ist.<br />

In der Tat wurde die innere Verdrahtung der fünf Rotoren von dem polnischen<br />

Dechiffrierbüro um Rejewski bereits Anfang der 30er Jahre durch eine “kryptologische<br />

Meisterleistung” aufgedeckt. Hierbei wurden sowohl abgehörte Nachrichten<br />

als auch von dem Agenten Hans-Thilo Schmidt beigebrachte, streng vertrauliche<br />

Dokumente über die Enigma benutzt. Später wurden drei weitere Rotoren<br />

eingeführt, aber auch deren innere Verdrahtung blieb nicht lange geheim, denn<br />

schon bald fielen den Engländern beim Aufbringen von deutschen U-Booten<br />

gesamte Rotorensätze in die Hände. Dies ist eine eindrucksvolle Bestätigung<br />

des Kerkhoffschen Prinzips: Man sollte niemals hoffen, den Verschlüsselungs-<br />

Algorithmus (hier: den inneren Aufbau der Maschine) dauerhaft geheimhalten<br />

zu können.<br />

Welchman schreibt, es sei in der Zeit in Bletchley Park sein Alptraum gewesen,<br />

die Deutschen könnten irgendwann zu steckbaren Walzen übergehen, deren innere<br />

Verdrahtung sich von Tag zu Tag ändern läßt. Diese Angst läßt sich leicht<br />

nachvollziehen, denn dies hätte den Schlüsselraum wirklich um weitere 300 Bit<br />

vergrößert. In der Tat scheint es in Deutschland gegen Kriegsende Pläne für<br />

eine steckbare UKW gegeben zu haben, aber diese Pläne wurden nicht mehr<br />

realisiert.<br />

Dienstvorschrift für das Aufbereiten des Klartextes Weitgehend dauerhaft<br />

scheint die folgende Dienstvorschrift für die Aufbereitung des Klartextes<br />

vor dem Verschlüsseln gegolten zu haben:<br />

1. Entferne SPACE <strong>und</strong> ersetze Satzzeichen durch X.<br />

2. Zahlen werden ziffernweise ausgeschrieben.<br />

3. Ersetze CH durch Q, außer bei Eigennamen. (Ich halte es kryptologisch<br />

durchaus für klug, das sehr häufige Bigramm CH zu vermeiden.)<br />

4. Eigennamen sind zu verdoppeln <strong>und</strong> in X eizuschließen. (Dies ist m.E.<br />

20


aus kryptologischer Sicht sehr schlecht. Vermutlich sollte diese Regelung<br />

dem Problem vorbeugen, daß ein Eigenname durch Funkrauschen nicht<br />

verstanden wird.)<br />

Ein aufbereiteter Klartext könnte typischerweise so ausgesehen haben 25 :<br />

DASOB ERKOM MANDO DERWE HRMAQ TGIBT<br />

BEKAN NTXAA CHENX AACHE NXIST GERET<br />

TETXD URQGE BUEND ELTEN EINSA TZDER<br />

HILFS KRAEF TEKON NTEDI EBEDR OHUNG<br />

ABGEW ENDET WERDE NUNDD IESTA DTGEG<br />

ENXEI NSXAQ TXNUL LXNUL LXUHR SIQER<br />

GESTE LLTWE RDENX<br />

Dienstvorschrift: Spruchschlüssel<br />

Es war den Deutschen bekannt, daß es aus kryptologischer Sicht gefährlich ist,<br />

nacheinander eine Vielzahl von Nachrichten mit dem selben Schlüssel zu verschlüsseln.<br />

Deshalb hat man mit Spruchschlüsseln gearbeitet. Die Schlüsselbucheinträge<br />

sahen aber keine Spruchschlüssel sondern nur Tagesschlüssel vor,<br />

die dann einen Tag lang für das ganze Schlüsselnetz gegolten haben; alles andere<br />

wäre vermutlich zu aufwändig gewesen.<br />

Die exakten Vorschriften bez. der Spruchschlüssel haben sich laufend geändert.<br />

Ich gebe nur eine einzelne Regelung wieder, die eine Weile lang in Kraft gewesen<br />

sein soll, <strong>und</strong> verzichte auf weitere Details: Der Sender entnimmt dem Schlüsselbuch<br />

den Tagesschlüssel K = (p, u, r, g, S) <strong>und</strong> wählt zufällig eine Gr<strong>und</strong>stellung<br />

g ′ als <strong>und</strong> verschickt zunächst einmal c = ENIGMA K (g ′ ). Der Empfänger entschlüsselt<br />

diesen Spruchschlüssel: g ′ = ENIGMA K (c). Dann wird die Übertragung<br />

mit dem Schlüssel (p, u, r, g ′ , S) durchgeführt. Stereotype Spruchschlüssel<br />

wie XYZ, ABC, QWE, PIA haben den Dechiffrierern in dieser Zeit die Arbeit<br />

etwas erleichtert; aber selbst wenn der Spruchschlüssel von 7 Bit einmal erraten<br />

wird, bleibt das Entschlüsseln schwierig, denn der Rest (p, u, r, S) des Schlüssels<br />

macht immer noch 70 Bit aus.<br />

Eine Dienstvorschrift für Schlüsselbuchersteller<br />

Zeitweise war es verboten, in den Schlüsselbüchern Steckverbindungen zwischen<br />

aufeinanderfolgenden Buchstaben vorzusehen. Es wurde also nicht AB oder BC<br />

oder UV ect. gesteckert. Dies blieb den Dechiffrierern natürlich nicht lange verborgen<br />

26 <strong>und</strong> wurde in Bletchley-Park “Consecutive Stecker Knock-Out”<br />

genannt. Eine solche Vorschrift ist kryptologisch sehr schlecht; sie verkleinert nur<br />

den möglichen Schlüsselraum, ohne Vorteile zu bringen. Man sollte AB weder<br />

besonders häufig noch besonders selten steckern.<br />

25 Das Beispiel findet sich vielerorts in der Literatur; vielleicht ist es authentisch.<br />

26 Erfahrung, erbeutete/ausspionierte Schlüsselbuchseiten, ...<br />

21


1.6 Kryptoanalyse der Enigma<br />

Wie gesagt gelangen in den 40er Jahren regelmäßig Einbrüche in deutsche<br />

Schlüsselnetze. Die Methoden waren vielfältig <strong>und</strong> wurden laufend angepaßt<br />

an Verbesserungen, die an den eingesetzen Enigmas vorgenommen wurden, <strong>und</strong><br />

an Änderungen in deutschen Dienstvorschriften. Ich finde, die (Mathematik hinter<br />

der) Kryptoanalyse der Enigma ist in der Literatur nur bedingt befriedigend<br />

dargestellt. Mir geht es in diesem Abschnitt in keiner Weise darum historisch<br />

auseinanderzusetzen, was genau zu welcher Zeit von wem gemacht wurde. Ich<br />

will nur repräsentativ einige Methoden aufzeigen, die, laufend modifiziert <strong>und</strong><br />

um andere Methoden ergänzt, eine Rolle gespielt haben. Es soll demonstriert<br />

werden, wo <strong>und</strong> in welcher Weise sich trotz des riesigen 77 Bit Schlüsselraumes<br />

bei der Enigma-Chiffre der ein oder andere Hebel für einen Angriff ansetzen<br />

läßt.<br />

Cribs<br />

Viele Angriffe auf die Enigma beginnen mit dem Erraten eines Wortes oder einer<br />

Phrase, die im Klartext vorkommt. Ein solches “wahrscheinliches Wort” wurde<br />

in Bletchley-Park “Crib” genannt. Im Militärjargon kamen stereotype Redewendungen<br />

häufig vor, z.B. “Oberkommando der Wehrmacht”, “Nichts zu melden”,<br />

Name <strong>und</strong> Rang des Empfängers wie “Obersturmbannführer Müller” ect. Die<br />

Listen in Bletchley-Park waren endlos <strong>und</strong> es hat oft die Arbeit erleichtert, wenn<br />

man wußte, woher die Nachricht kommt 27 .<br />

Positionierung eines Cribs<br />

Es wurde von den Erfindern als besonderer Vorteil der Enigma herausgestellt,<br />

daß sie nie einen Buchstaben in sich abbildet (z.B. wird ANNA nie zu AXGF),<br />

aber das ist in der Tat eine entscheidende Schwäche. Wenn nämlich bei einer fixpunktfreien<br />

Permutationschiffre ein Klartextteil einmal richtig erraten ist, dann<br />

kann man häufig seine genaue Position im Text bestimmen, oder wenigstens viele<br />

Lagen von vorne herein ausschließen. Wir geben ein Beispiel: Nehmen wir an<br />

wir hätten Gr<strong>und</strong> zu der Annahme, daß der Klartext zu dem ENIGMA-Chiffrat<br />

MCTJDLEXENQI das Wort MELDEN enthält. Wir schreiben den Crib an jede<br />

denkbare Position unter das Chiffrat.<br />

M C T J D L E X E N Q I<br />

M E L D E N<br />

M E L D E N<br />

M E L D E N<br />

M E L D E N<br />

M E L D E N<br />

M E L D E N<br />

M E L D E N<br />

Nun ist die erste Position unmöglich, weil niemals M auf M geht. Position zwei<br />

ist auch unmöglich, weil sonst der fünfte Buchstabe D zu D verschlüsselt worden<br />

wäre. So fortfahrend kann man hier alle Lagen außer der letzten ausschließen 28 .<br />

27 Ein Wetterschiff sendet z.B. häufig WETTERVORHERSAGE<br />

28 Ich gebe zu, das Beispiel ist günstig gewählt.<br />

22


Wenn MELDEN überhaupt vorkommt, dann steht es also sicher ganz hinten!<br />

Das Menü zu einem Crib<br />

Nehmen wir an wir haben einen Crib richtig erraten <strong>und</strong> richtig positioniert.<br />

Wir könnten z.B. mit obigen Methoden zu dem Schluß gekommen sein, dass die<br />

Chiffrierung ab einer bekannten Position den Übergang<br />

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15<br />

O B E R K O M M A N D O D E R<br />

Z M G E R F E W M L K M T A W<br />

16 17 18 19 20 21 22 23 24<br />

W E H R M A C H T<br />

X T S W V U I N Z<br />

bewirkt hat. Sei Q i die (uns explizit nicht bekannte) Permutation, welche die<br />

Enigma bei der i-ten Position bewirkt hat. Wir erhalten 24 Aussagen über<br />

Q 1 , · · · , Q 24 :<br />

Q 1 (O) = Z, Q 2 (B) = M, Q 3 (E) = G, · · · , Q 24 (T ) = Z.<br />

Da Q i involutorisch ist (d.h. Q −1<br />

i<br />

müssen auch die Aussagen<br />

= Q i ; Verschlüsseln gleich Entschlüsseln!)<br />

Q 1 (Z) = O, Q 2 (M) = B, Q 3 (G) = E, · · · , Q 24 (Z) = T<br />

gelten. Mehr über die Q i wissen wir vorerst nicht; zum Beispiel weiß man für<br />

keinen Buchstaben außer O <strong>und</strong> Z, wie Q 1 auf ihn wirkt. Selbst wenn man für<br />

Q 1 , · · · , Q 24 die Wirkung auf jeden Buchstaben kennen würde, so würde das bei<br />

weitem nicht unmittelbar zu einer Entschlüsselung des ganzen Textes führen;<br />

jeder Buchstabe wird ja anders verschlüsselt <strong>und</strong> vorerst haben wir keine einzige<br />

Aussage über Q 25 , Q 26 ect. Aber immerhin.<br />

Zu einem (positionierten) Crib ist der Übergangsgraph (im Jargon: das Menü)<br />

wie folgt definiert. Ecken sind die Buchstaben die in dem erratenen Geheimtextstück<br />

oder dem entsprechenden Klartextstück vorkommen. Zwei Ecken x<br />

<strong>und</strong> y sind mit einer (ungerichteten Kante) verb<strong>und</strong>en, wenn P i (x) = y für ein<br />

i gilt, <strong>und</strong> dann wird die entsprechende Kante mit i beschriftet. Wir zeichnen<br />

einen relevanten Teil des Übergangsgraphen zu unserem Crib:<br />

K<br />

11<br />

↔ D ↔<br />

13<br />

T<br />

24<br />

↔ Z<br />

↕ 5 ↕ 17<br />

R<br />

4<br />

↔ E ↕ 1<br />

↕ 15, 19 ↕ 7<br />

W<br />

8<br />

↔ M ↔<br />

12<br />

O<br />

Wir sehen z.B.: Es gilt M = Q 7 (E), W = Q 8 (M) = Q 8 Q 7 (E), R = Q 15 (W ) =<br />

Q 15 Q 8 Q 7 (E), E = Q 4 (R) = Q 4 Q 15 Q 8 Q 7 (E), d.h. E ist Fixpunkt von Q 4 Q 15 Q 8 Q 7 .<br />

Wir drücken es nochmal anders aus: Wenn jemand, der den Schlüssel (p, u, r, g, S)<br />

kennt, vier Enigmas mit der richtigen Walzlage, UKW, Ringstellung <strong>und</strong> Steckbrettverbindung<br />

hintereinanderschaltet <strong>und</strong> bei diesen Maschinen die Gr<strong>und</strong>stellungen<br />

g ⊕ r 7, g ⊕ r 8, g ⊕ r 15, g ⊕ r 4 einstellt, so hat die Gesamtschaltung<br />

E als Fixpunkt (obwohl die einzelnen Eingmas keinen Fixpunkt haben).<br />

23


Aus dem Übergangsgraphen lassen sich nun eine ganze Reihe von Fixpunktaussagen<br />

über den “zentralen” Knoten E herauslesen:<br />

Q 4 Q 15 Q 8 Q 7 (E) = E,<br />

Q 4 Q 19 Q 8 Q 7 (E) = E,<br />

Q 13 Q 11 Q 5 Q 4 Q 17 (E) = E,<br />

Q 17 Q 24 Q 1 Q 12 Q 7 (E) = E <strong>und</strong> übrigends auch<br />

Q 7 Q 9 Q 14 (E) = E, aber das kommt aus einem nicht skizzierten<br />

Teil des Graphen.<br />

Sei nun P i die Permutation, die der Walzsatz (ohne Steckbrett) beim i-ten<br />

Anschlag bewirkt hat <strong>und</strong> S die Steckbrett-Permutation. Dann gilt (beachte:<br />

S = S −1 ) Q i = S −1 P i S, also P i = Q S i . Wenn x Fixpunkt von Q i 1 · · · Q it ist,<br />

dann ist S(x) Fixpunkt von P i1 · · · P it nach 1.4.2. Im Beispiel ergibt sich:<br />

1. Wenn E ungesteckert ist, dann ist E gemeinsamer Fixpunkt von P 4 P 15 P 8 P 7 ,<br />

P 4 P 19 P 8 P 7 , P 13 P 11 P 5 P 4 P 17 , P 17 P 24 P 1 P 12 P 7 <strong>und</strong> P 7 P 9 P 14 .<br />

2. Wenn E gesteckert ist, dann ist der mit E gesteckerte Buchstabe S(E) gemeinsamer<br />

Fixpunkt von P 4 P 15 P 8 P 7 , P 4 P 19 P 8 P 7 , P 13 P 11 P 5 P 4 P 17 , P 17 P 24 P 1 P 12 P 7<br />

<strong>und</strong> P 7 P 9 P 14 .<br />

Noch fertigstellen<br />

24


Kapitel 2<br />

<strong>Elementare</strong> <strong>Zahlentheorie</strong><br />

2.1 Algebraische Gr<strong>und</strong>begriffe<br />

Wir beginnen mit einigen algebraischen Gr<strong>und</strong>begriffen wie “Gruppe”, “Ring”<br />

<strong>und</strong> “Körper”. Vieles davon wird aus anderen Vorlesungen bekannt sein. Die<br />

folgenden Definitionen sind nicht schwer; man sollte ihren Inhalt aber wirklich<br />

im Detail auswendig parat haben.<br />

Definition 2.1.1 1. Ein Monoid ist ein Tupel (M, ◦, e) (kurz: M statt (M, ◦, e))<br />

bestehend aus einer Menge M, einer assoziativen Verknüpfung ◦ : M ×<br />

M → M <strong>und</strong> einem Element e ∈ M mit e ◦ x = x = x ◦ e für alle x ∈ M.<br />

Das Element e wird neutrales Element der Verknüpfung ◦ genannt.<br />

2. Eine Gruppe ist ein Monoid (G, ◦, e), in dem zu jedem x ∈ G ein y ∈ G<br />

existiert mit x◦y = e = y◦x. Das Element y ist durch x eindeutig bestimmt<br />

<strong>und</strong> wird inverses Element zu x genannt.<br />

3. Ein Monoid (M, ◦, e) wird kommutativ oder abelsch genannt, wenn<br />

seine Verknüpfung kommutativ ist, d.h. wenn x◦y = y◦x für alle x, y ∈ M<br />

gilt.<br />

In einer Gruppe, deren Verknüpfung mit · bezeichnet ist, sind e oder 1 gebräuchliche<br />

Bezeichnungen für das neutrale Element <strong>und</strong> das zu x ∈ G inverse<br />

Element wird mit x −1 bezeichnet. Es ist unüblich, die Verknüpfung in einer<br />

nicht-kommutativen Gruppe mit + zu bezeichnen. Wenn G eine kommutative<br />

Gruppe mit Verknüpfung + ist, dann ist es üblich, das neutrale Element mit o<br />

oder 0 zu bezeichnen <strong>und</strong> für das zu x ∈ G inverse Element −x zu schreiben.<br />

Bemerkung <strong>und</strong> Definition 2.1.2 1. Ein Ring ist ein Tupel (R, +, ·, 0, 1)<br />

bestehend aus einer Menge R, zwei Verknüpfungen +, · : R × R → R <strong>und</strong><br />

25


Elementen 0, 1 ∈ R derart, dass folgendes gilt: (R, +, 0) ist eine kommutative<br />

Gruppe, (R, ·, e) ist ein kommutatives Monoid <strong>und</strong> es gilt das<br />

Distributivgesetz x(y + z) = xy + xz für alle x, y, z ∈ R.<br />

2. Sei R ein Ring. Dann hat jedes Element x ∈ R eine inverses Element<br />

(−x) bez. + mit x+(−x) = 0. Ein Element x ∈ R braucht im allgemeinen<br />

aber kein Inverses bezüglich · haben; die Menge<br />

R × := {x ∈ R | x hat ein multiplikatives Inverses}<br />

kann viel kleiner sein als R. Es gilt immer 1 ∈ R × <strong>und</strong> (R × , ·, 1) ist immer<br />

eine Gruppe. Diese Gruppe wird Einheitengruppe von R genannt <strong>und</strong><br />

die Elemente von R × heißen Einheiten. Das multiplikative Inverse einer<br />

Einheit x ∈ R × wird mit x −1 bezeichnet; die Nicht-Einheiten haben per<br />

Definition kein multiplikatives Inverses!<br />

3. Ein Ring R heißt Integritätsring, wenn für x, y ∈ R aus xy = 0 schon<br />

x = 0 oder y = 0 folgt <strong>und</strong> 0 ≠ 1 gilt.<br />

4. Ein Ring K wird Körper genannt, wenn jedes von 0 verschiedene Element<br />

eine Einheit ist <strong>und</strong> 0 ≠ 1 gilt, d.h. wenn K × = K \ {0} gilt.<br />

Bemerkung 2.1.3 In einem Ring gilt immer 0x = 0. (Denn 0x + 0x = (0 +<br />

0)x = 0x <strong>und</strong> wenn man −0x zu dieser Gleichung addiert, so erhält man 0x =<br />

0.)<br />

In einem Integritätsring gilt die Kürzungsregel ax = ay, a ≠ 0⇐x = y. (Denn<br />

aus ax = ay folgt a(x − y) = 0 <strong>und</strong> wg. a ≠ 0 muß dann (x − y) = 0, d.h.<br />

x = y gelten.) In einem beliebigen Ring braucht die Kürzungsregel nicht zu<br />

gelten, außer wenn a eine Einheit ist.<br />

Beispiel:<br />

1. Wenn 0 = 1 in einem Ring R gilt (dies ist ein unnatürlicher Extremfall),<br />

dann muss x = 1x = 0x = 0 für alle x ∈ R gelten; d.h. R = {0} besteht<br />

nur aus dem einen Element 0, es gilt 0 + 0 = 0, 0 · 0 = 0 <strong>und</strong> 0 fungiert<br />

gleichzeitig als Einselement. Dieser Ring R = {0} wird als Nullring bezeichnet.<br />

Per Definition wird der Nullring weder als Integritätsring noch<br />

als Körper angesehen.<br />

2. Die ganzen Zahlen Z bilden einen Integritätsring, der aber kein Körper<br />

ist. Wegen 1 · 1 = 1 <strong>und</strong> (−1)(−1) = 1 sind 1 <strong>und</strong> −1 Einheiten. Weitere<br />

Einheiten gibt es nicht. (Wenn die Gleichung xy = 1 mit ganzen Zahlen<br />

xy ∈ Z gilt, dann folgt |x||y| = 1 <strong>und</strong> |x|, |y| sind sogar natürliche Zahlen<br />

≥ 1. Wäre |x| ≥ 2 oder |y| ≥ 2, so wäre |x||y| ≥ 2 zu groß. Daher muss<br />

|x| = 1 gelten, <strong>und</strong> das bedeutet x ∈ {1, −1}. ) Die Einheitengruppe von<br />

Z ist also Z × = {1, −1}. Der Ring Z steht im Zentrum des Interesses der<br />

elementaren <strong>Zahlentheorie</strong>.<br />

3. Q, R <strong>und</strong> C sind Bespiele von Körpern. Es gilt also Q × = Q \ {0}. Z.B.<br />

hat 2 in Q ein multiplikatives Inverses 2 −1 = 1 2 in Q, aber 1 2<br />

/∈ Z. Somit<br />

ist 2 eine Einheit in Q aber eine Nicht-Einheit in Z.<br />

26


4. Wir werden später für das Rechnen modulo N die Restklassenringe Z/NZ<br />

definieren <strong>und</strong> zeigen, dass Z/NZ für nicht-primes N ≥ 2 kein Integritätsring<br />

ist. Für eine Primzahl p ist Z/pZ ein Körper.<br />

Teilbarkeitstheorie<br />

Sei R ein Integritätsring. Man darf beim ersten Lesen R = Z annehmen. Sei<br />

a, b ∈ R. Man nennt a einen Teiler von b bzw. b ein Vielfaches von a (in<br />

Formeln: a | b), wenn ein r ∈ R mit ar = b existiert. (Z.B. gilt in Z: 3 ist<br />

ein Teiler von 12 (d.h. 3 | 12), weil 3 · 4 = 12 gilt. Aber auch −3 ist wegen<br />

(−3)(−4) = 12 ein Teiler von 12; in Formeln: (−3) | 12.)<br />

Bemerkung 2.1.4 Durch | wird eine Relation auf den Elementen von R definiert.<br />

1. Diese Relation ist reflexiv: Es gilt a | a für alle a ∈ R. Sie ist auch<br />

transitiv: Wenn a ein Teiler von b <strong>und</strong> b ein Teiler von c ist, dann ist<br />

a ein Teiler von c. Die Relation | ist nicht antisymmetrisch, also keine<br />

partielle Ordnung (siehe aber 2.).<br />

2. Wir nennen zwei Elemente a, b ∈ R zueinander assoziiert (in Formeln:<br />

a ∼ b), wenn a|b <strong>und</strong> b|a gilt. Genau dann ist a zu b assoziiert, wenn eine<br />

Einheit u ∈ R × mit au = b existiert. (Beispiel: Zwei Zahlen a, b ∈ Z sind<br />

genau dann zueinander assoziiert, wenn sie bis auf evtl. das Vorzeichen<br />

gleich sind, d.h. genau dann, wenn |a| = |b| gilt. Das liegt daran, dass<br />

Z × = {1, −1} ist.)<br />

3. Das Nullelement 0 wird von jedem anderen Element von R geteilt, d.h. es<br />

gilt a | 0 für alle a ∈ R.<br />

4. Ist w ∈ R × eine Einheit, so teilt w jedes andere Element a ∈ R.<br />

5. Aus x | a <strong>und</strong> x | b folgt x | (a + b). Aus x | a folgt x | ab für alle b.<br />

Beweis. Zu 3.) Wir zeigen: a | b <strong>und</strong> b | a ⇐⇒ ∃u ∈ R × : au = b.<br />

“⇐”: Gelte au = b mit einer Einheit u. Dann folgt sofort a | b. Multipliziert<br />

man die Gleichung au = b mit u −1 (u −1 existiert, weil u eine Einheit ist), so<br />

erhält man a = bu −1 , also b | a.<br />

“⇒”: Gelte a | b <strong>und</strong> b | a. Dann gibt es u, v ∈ R mit au = b <strong>und</strong> bv = a. Wenn<br />

b = 0 gilt, so muss auch a = 0 sein <strong>und</strong> dann gilt a · 1 = b. Nehme b ≠ 0 an. Wir<br />

zeigen, dass u Einheit ist. (Dann sind wir wg. au = b fertig.) Sezte a = bv in<br />

b = au ein. Es folgt b = au = bvu. Da R ein Intgritätsring war <strong>und</strong> b ≠ 0 gilt,<br />

darf man b kürzen (vgl. 2.1.3). Es folgt vu = 1. Daher ist u ∈ R × .<br />

Die anderen Aussagen sind einfacher <strong>und</strong> wir überlassen sie dem Leser als<br />

Übungsaufgabe.<br />

□<br />

Für a, b ∈ R sei gT (a, b) = {x ∈ R : x | a <strong>und</strong> x | b} die Menge der gemeinsamen<br />

Teiler von a <strong>und</strong> b. Ein Element g ∈ R wird ein größter gemeinsamer Teiler<br />

27


von a <strong>und</strong> b genannt, wenn g ein größtes Element (bez. der Teilbarkeitsrelation<br />

|) der Menge der gemeinsamen Teiler gT (a, b) ist. Explizit: Genau dann ist g<br />

ein größter gemeinsamer Teiler von a <strong>und</strong> b, wenn g ein gemeinsamer Teiler von<br />

a <strong>und</strong> b ist <strong>und</strong> g von jedem anderen gemeinsamen Teiler g ′ ∈ gT (a, b) geteilt<br />

wird.<br />

Wenn g <strong>und</strong> ˜g zwei größte gemeinsame Teiler von a <strong>und</strong> b sind, dann muss g zu ˜g<br />

assoziiert sein. Wir schreiben ggT (a, b) für die Menge der größten gemeinsamen<br />

Teiler von a <strong>und</strong> b.<br />

Für ganze Zahlen a, b ∈ Z werden wir im nächsten Abschnitt sehen, dass zu a<br />

<strong>und</strong> b immer ein größter gemeinsamer Teiler g existiert <strong>und</strong> dann ist im Sinne<br />

obiger Definition auch −g ein größter gemeinsamer Teiler von a <strong>und</strong> b. Weitere<br />

größte gemeinsame Teiler von a <strong>und</strong> b gibt es nicht. Natürlich könnte man hier<br />

vereinbaren, dass immer der nichtnegative ggT zu bevorzugen ist; eine solche<br />

Voschrift will ich aber nicht treffen - sie hätte ohnehin nur im Spezialfall R = Z<br />

Sinn.<br />

Beispiel: Wir arbeiten nun in Z. Sei a = −18 <strong>und</strong> b = 12. Die Menge der<br />

gemeinsamen Teiler von a <strong>und</strong> b ist gT (−18, 12) = {1, −1, 2, −2, 3, −3, 6, −6}.<br />

Daher ist 6 ∈ ggT (−18, 12) aber auch −6 ∈ ggT (−18, 12). Die Zahl −3 ist zwar<br />

ein gemeinsamer Teiler von −18 <strong>und</strong> 12, aber kein größter gemeinsamer Teiler<br />

dieser beiden Zahlen.<br />

Idealtheorie<br />

Definition 2.1.5 Sei R ein Ring. Eine Teilmenge I ⊂ R wird Ideal genannt,<br />

wenn I abgeschlossen ist bez. der Addition + (d.h. x + y ∈ I für alle x, y ∈ I)<br />

<strong>und</strong> rx ∈ I für alle r ∈ R <strong>und</strong> alle x ∈ I gilt 1 .<br />

Für a ∈ R sei (a) R := Ra := {ra | r ∈ R} die Menge der durch a teilbaren<br />

Elemente von R. Dann ist (a) R ein Ideal nach 2.1.4.5. Man nennt (a) R das von<br />

a erzeugte Hauptideal. Allgemeiner sei für a 1 , · · · , a n ∈ R sei<br />

(a 1 , · · · , a n ) R := {r 1 a 1 + · · · r n a n | r i ∈ R beliebig}<br />

die Menge aller Linearkombinationen der a i mit Koeffizienten in R. Man sieht<br />

leicht, dass auch (a 1 , · · · , a r ) R ein Ideal ist.<br />

Beispiel: In jedem Ring R ist {0} <strong>und</strong> auch R ein Ideal.<br />

Das Hauptideal (2) Z von Z besteht aus den geraden Zahlen, (2) Z = {0, 2, −2, 4, −4, · · ·}.<br />

Das Ideal (6, 10) Z von Z besteht aus allen Zahlen von der Form 6n + 10m mit<br />

n, m ∈ Z. Z.B. liegt 7 · 6 + (−4) · 10 = 2 in diesem Ideal: 2 ∈ (6, 10) Z .<br />

Bemerkung 2.1.6 Sei R ein Ring <strong>und</strong> I ein Ideal. Seien a i , b j , a, b ∈ R.<br />

1. Genau dann gilt (a 1 , · · · , a n ) R ⊂ I, wenn alle a i in I liegen.<br />

1 Beachte: rx ∈ I wird verlangt für alle r ∈ R, x ∈ I; nicht nur für r, x ∈ I<br />

28


2. Genau dann gilt (a 1 , · · · , a n ) R ⊂ (b 1 , · · · , b m ) R , wenn sich jedes a i als<br />

Linearkombination der b j mit Koeffizienten in R schreiben läßt.<br />

3. Die Idealformel (a) R ⊂ (b) R ist äquivalent zu b | a.<br />

Beweis. Zu 1.) Wenn alle a i in I liegen, dann gilt nach der Idealeigenschaft 2.1.5<br />

r i a i ∈ R für alle r i ∈ R. Wieder nach 2.1.5 ist I aber auch unter Summenbildung<br />

abgeschlossen <strong>und</strong> daher gilt r 1 a 1 + · · · + r n a n ∈ I für jede Wahl der r i ∈ R.<br />

Daher enthält I jede Linearkombination der a i mit Koeffizienten in R, also jedes<br />

Element von (a 1 , · · · , a n ) R . Die anderen Aussagen folgen leicht aus 1.) <strong>und</strong> den<br />

Definitionen.<br />

Beispiel: Wir zeigen, dass (2) Z = (6, 10) Z gilt.<br />

“⊂” Durch 2 = 7 · 6 + (−4) · 10 wird 2 als Linearkombination aus 6 <strong>und</strong> 10<br />

erkannt, d.h. 2 ∈ (6, 10) Z . Mit Teil 1. von 2.1.6 folgt (2) Z ⊂ (6, 10) Z .<br />

“⊃” Um (2) Z ⊃ (6, 10) Z zu zeigen, reicht es nach 2.1.6 6 ∈ (2) Z <strong>und</strong> 10 ∈ (2) Z<br />

zu zeigen. Das ist aber klar, da (2) Z = {2r|r ∈ Z} die Menge der geraden Zahlen<br />

ist.<br />

Die Idealformel (2) Z = (6, 10) Z stellt in bündiger Weise die folgende arithmetische<br />

Information dar: Die Zahlen der Form 6n + 10m (vgl. das vorige Bsp.) sind<br />

genau die geraden Zahlen.<br />

Satz 2.1.7 Sei a, b, g ∈ R. Wenn (a, b) R = (g) R gilt, dann muss g ein größter<br />

gemeinsamer Teiler von a <strong>und</strong> b sein.<br />

Beweis: Es gelte die Idealformel (a, b) R = (g) R . Dann folgt a ∈ (g) R <strong>und</strong> b ∈<br />

(g) R , d.h. g | a <strong>und</strong> g | b. Daher ist g ein gemeinsamer Teiler von a <strong>und</strong> b.<br />

Ferner folgt aus der Idealformel, dass g ∈ (a, b) R gilt. D.h. es gibt u, v ∈ R mit<br />

g = au+bv. Wenn ˜g ein weiterer gemeinsamer Teiler von a <strong>und</strong> b ist, dann muss<br />

˜g (nach 2.1.4.5) auch den Ausdruck au + bv = g teilen . Daher ist g in der Tat<br />

größter gemeinsamer Teiler von a <strong>und</strong> b.<br />

□<br />

2.2 Euklidischer Algorithmus<br />

Im Ring Z kann man Divisionen mit Rest durchführen. Ein euklidischer Ring<br />

ist grob gesprochen ein Ring, in dem Divisionen mit Rest immer möglich sind:<br />

Definition 2.2.1 Ein euklidischer Ring ist ein Paar (R, ‖ ‖) bestehend aus<br />

einem Integritätsring R <strong>und</strong> einer Abbildung ‖ ‖ : R → N mit ‖x‖ = 0 ⇐⇒<br />

x = 0 derart, dass folgendes gilt:<br />

Zu a, b ∈ R mit b ≠ 0 existieren q, r ∈ R mit a = qb + r <strong>und</strong> ‖r‖ < ‖b‖.<br />

Wir schreiben oft “a ÷ b = q Rest r” statt “a = qb + r <strong>und</strong> ‖r‖ < ‖b‖”.<br />

29


Satz 2.2.2 (Z, | |) ist ein euklidischer Ring. Dabei ist | | der gewöhnliche Absolutbetrag.<br />

Beweis: Aus der Analysis dürfte bekannt sein, dass jede nicht-leere, beschränkte<br />

Teilmenge von N ein maximales Element hat.<br />

Sei a, b ∈ Z mit b ≠ 0. Wir nehmen der Einfachheit halber a, b ≥ 0 an. X := {x ∈<br />

N | xb ≤ a} ist eine beschränkte Teilmenge von N (hier geht das archimedische<br />

Prinzip ein!) mit 0 ∈ X. Sei q = max(X) das maximale Element von X <strong>und</strong><br />

r := a − qb. Dann gilt a = qb + r <strong>und</strong> es genügt r < b zu zeigen. Wäre r ≥ b,<br />

dann würde a = qb + r ≥ qb + b = (q + 1)b folgen, also q + 1 ∈ X; dies wäre ein<br />

Widerspruch zur Maximalität von q.<br />

□<br />

Man hat auch einen effizienten Algorithmus zur Berechnung von a ÷ b in Z, der<br />

vermutlich jedermann bekannt ist. Wir erläutern ihn anhand eines Beispiels.<br />

Beispiel:<br />

1 2 5 3 ÷ 1 3 = 9 6 Rest 5<br />

1 1 7<br />

− − −<br />

8 3<br />

7 8<br />

− −<br />

5<br />

Daher gilt 1253 ÷ 13 = 95 Rest 5 oder, anders ausgedrückt: 1253 = 95 · 13 + 5<br />

<strong>und</strong> 5 < 13.<br />

Ein Ring R heißt Hauptidealring, wenn jedes Ideal von R ein Hauptideal ist.<br />

Satz 2.2.3 Jeder euklidische Ring (R, ‖ ‖) ist ein Hauptidealring. Insbesondere<br />

ist jedes Ideal von Z ein Hauptideal.<br />

Beweis: Sei I ein Ideal von R. Falls I = {0}, so ist I ein Hauptideal. Wenn<br />

I ≠ {0}, dann sei<br />

k = min({‖a‖ : a ∈ I \ {0}}<br />

<strong>und</strong> a ∈ I \ {0} ein Element mit ‖a‖ = k. Offenbar gilt I ⊃ (a) R . Es reicht zu<br />

zeigen, dass I ⊂ (a) R gilt, d.h. dass jedes Element von I durch a teilbar ist.<br />

Sei x ∈ I beliebig. Wir können x mit Rest durch a teilen: Es gibt q, r ∈ Z mit<br />

x = qa + r <strong>und</strong> ‖r‖ < ‖a‖. Die Gleichung r = x + (−q)a zeigt, dass r ∈ I gilt<br />

(vgl. 2.1.5). Wegen der Minimalität von a muß ‖r‖ = 0 gelten. Daher geht obige<br />

Divison mit Rest auf: x = qa. Also ist x durch a teilbar.<br />

□<br />

Bemerkung 2.2.4 Sei R ein Hauptidealring (z.B. R = Z) <strong>und</strong> a, b, g ∈ R.<br />

Genau dann gilt (a, b) R = (g) R , wenn g ein größter gemeinsamer Teiler von a<br />

<strong>und</strong> b ist. Insbesondere hat jedes g ∈ ggT (a, b) eine Darstellung g = au + bv mit<br />

u, v ∈ R.<br />

30


Mit anderen Worten: Die Hauptidealerzeuger von (a, b) R sind genau die größten<br />

gemeinsamen Teiler von a <strong>und</strong> b.<br />

Beweis: Wenn (a, b) R = (g) R gilt, dann muß g ∈ ggT(a, b) nach 2.1.7 gelten.<br />

Wir beweisen die andere Implikation. Sei g ∈ ggT (a, b). Da R nach Voraussetzung<br />

ein Hauptidealring ist, muss ein h ∈ R mit (a, b) R = (h) R existieren. Nach<br />

2.1.7 ist h (wie auch g) ein ggT von a <strong>und</strong> b. Es folgt h | g <strong>und</strong> g | h, also<br />

(g) R = (h) R = (a, b) R .<br />

□<br />

Folgerung 2.2.5 Sei R ein Hauptidealring. Dann haben je zwei Elemente a, b ∈<br />

R einen größten gemeinsamen Teiler.<br />

Sei (R, ‖ ‖) ein euklidischer Ring. Wir schildern nun den euklidischen Algorithmus,<br />

der folgendes leistet:<br />

1. Berechnung eines größten gemeinsamen Teilers g zweier Elemente a <strong>und</strong><br />

b. Das Verfahren ist so effizient, dass es ggT(a, b) sogar in Fällen schnell<br />

berechnen kann, in denen es aus Laufzeitgründen nicht mehr möglich ist,<br />

a <strong>und</strong> b in Primfaktoren zu zerlegen!<br />

2. Berechnung von Elementen u, v ∈ R mit au + bv = g.<br />

Lemma 2.2.6 Sei a, b ∈ R mit b ≠ 0. Sei a ÷ b = q Rest r. Dann gilt 2 :<br />

a) (a, b) R = (b, r) R .<br />

( ) ( ) ( b 0 1 a<br />

b) =<br />

r 1 −q b<br />

)<br />

.<br />

Beweis: Aus a ÷ b = q Rest r folgt a = qb + r <strong>und</strong> diese Formel erkennt a als<br />

Linearkombination von b <strong>und</strong> r, d.h. a ∈ (b, r) R . Da offenbar auch b ∈ (b, r) R<br />

gilt, folgt (a, b) R ⊂ (b, r) R .<br />

Für die umgekehrte Inklusion ist b ∈ (a, b) R (dies ist aber klar!) <strong>und</strong> r ∈ (a, b) R<br />

zu zeigen. Die Gleichung a = qb + r kann man zu r = a + (−q)b umstellen, <strong>und</strong><br />

dies zeigt r ∈ (a, b) R .<br />

Die Matrixgleichung ist offensichtlich erfüllt.<br />

□<br />

Wir führen den euklidischen Algorithmus an einem Beispiel vor.<br />

( ) a 2 Beachte: (a, b) R ⊂ R ist ein Ideal <strong>und</strong> ∈ R<br />

b<br />

2 ein Vektor.<br />

31


Beispiel: Wir wollen ggT(51, 33), also den Hauptidealerzeuger von (51, 33) Z<br />

berechnen.<br />

51 ÷ 33 = 1 Rest 18,<br />

d.h. 51 = 1 · 33 + 18 (1)<br />

33 ÷ 18 = 1 Rest 15,<br />

d.h. 33 = 1 · 18 + 15 (2)<br />

18 ÷ 15 = 1 Rest 3,<br />

d.h. 18 = 1 · 15 + 3 (3)<br />

15 ÷ 3 = 5 Rest 0,<br />

d.h. 15 = 5 · 3 + 0 (4)<br />

L<br />

⇐<br />

L<br />

⇐<br />

L<br />

⇐<br />

L<br />

⇐<br />

(51, 33) Z = (33, 18) Z<br />

(33, 18) Z = (18, 15) Z<br />

(18, 15) Z = (15, 3) Z<br />

(15, 3) Z = (3, 0) Z<br />

An den mit L gekennzeicheten Stellen wurde obiges Lemma 2.2.6 Teil a) verwendet.<br />

Offenbar gilt (3, 0) Z = (3) Z . Die Idealgleichungen auf der rechten Seite<br />

zeigen zusammengenommen, dass (51, 33) Z = (3, 0) Z = (3) Z gilt. Also ist<br />

3 ∈ ggT (51, 33).<br />

Will man eine Gleichung 51n + 33m = 3 finden, die es nach 2.2.4 ja geben muss,<br />

so braucht man nur die Gleichungen (1)-(3) von unten beginnend ineinander<br />

einzusetzen:<br />

3 (3)<br />

= 18−15 (2)<br />

= 18−(33−18) = (−1)·33+2·18 (1)<br />

= (−1)·33+2·(51−33) = (−3)·33+2·51.<br />

Wer das Rechnen mit dem euklidischen Algorithmus gewohnt ist <strong>und</strong> die Darstellung<br />

3 = (−3) · 33 + 2 · 51 nicht braucht, wird bei der Berechnung von<br />

ggT(51, 33) wohl nur die folgende Kette von Idealgleichungen zu Papier bringen,<br />

<strong>und</strong> die anfallenden Divisionen mit Rest im Kopf erledigen:<br />

(51, 33) Z = (33, 18) Z = (18, 15) Z = (15, 3) Z = (3, 0) Z = (3) Z .<br />

Aus algorithmischer Sicht ist obiges Vorgehen nicht ganz ideal, weil für das<br />

Rückwärtseinsetzen alle Ergebnisse der anfänglichen Rechnung gespeichert werden<br />

müssen. Der folgende Algorithmus vermeidet dieses Problem. Um ihn zu<br />

verstehen, ist es günstig, folgendes durchzudenken: Zur Berechnung von n, m<br />

mit 51n + 33m = 3 kann man mit Teil b) von Lemma 2.2.6 alternativ wie folgt<br />

32


vorgehen:<br />

( ) 33<br />

(1) : =<br />

18<br />

(2) :<br />

(3) :<br />

(4) :<br />

( 0 1<br />

1 −1<br />

) ( 51<br />

33<br />

( ) ( ) ( )<br />

18 0 1 33<br />

=<br />

=<br />

( 15 ) 1( −1<br />

)<br />

18<br />

1 −1 51<br />

−1 2 33<br />

( ) ( ) ( )<br />

15 0 1 18<br />

=<br />

=<br />

( 3 ) 1( −1)<br />

15<br />

−1 2 51<br />

2 −3 33<br />

( ) ( ) ( )<br />

3 0 1 15<br />

=<br />

=<br />

( 0 1) ( −5 ) 3<br />

2 −3 51<br />

−11 17 33<br />

)<br />

( 0 1<br />

1 −1<br />

( 0 1<br />

1 −1<br />

( 0 1<br />

1 −5<br />

) 2 ( 51<br />

33<br />

)<br />

=<br />

) ( 1 −1<br />

−1 2<br />

) ( −1 2<br />

2 −3<br />

) ( 51<br />

33<br />

) ( 51<br />

33<br />

)<br />

=<br />

)<br />

=<br />

Daraus folgt (51, 33) Z = (3) Z <strong>und</strong> die erste Zeile der letzten Matrix-Gleichung<br />

liefert 3 = 2 · 51 − 3 · 31.<br />

□<br />

Algorithmus 2.2.7 (Euklidischer Algorithmus)<br />

Eingabe: x, y ∈ R.<br />

Initialisierung: a = x, b = y, M :=<br />

( 1 0<br />

0 1<br />

Schleife: While b ≠ 0 do { Berechne ( q, r mit a ) ÷ b = q Rest r.<br />

0 1<br />

Überschreibe: a := b, b := r, M :=<br />

M. }<br />

1 −q<br />

Ausgabe: (a, M[1, 1], M[1, 2]). Dann gilt (a) R = (x, y) R , a ∈ ggT(x, y) <strong>und</strong> a =<br />

M[1, 1]x + M[1, 2]y.<br />

( ) a<br />

Man beachte, daß nach jedem Schleifendurchlauf (a) R = (x, y) R <strong>und</strong> =<br />

( )<br />

b<br />

x<br />

M gilt. Da der Betrag von b bei jedem Durchgang um mindestes 1 absinkt,<br />

wird die while-Schleife spätestens nach |y| Schritten<br />

y<br />

verlassen.<br />

)<br />

.<br />

2.3 Primfaktorzerlegung<br />

Eine natürliche Zahl p ≥ 2 heißt Primzahl genau dann, wenn für x, y ∈ N aus<br />

p = xy schon x = 1 oder x = p folgt. Das ist genau dann der Fall, wenn 1 <strong>und</strong><br />

33


p die einzigen nicht-negativen Teiler von p sind.<br />

Lemma 2.3.1 (Lemma von Bézout) Sei p eine Primzahl <strong>und</strong> a, b ∈ Z. Wenn<br />

p | ab gilt, dann gilt p | a oder p | b.<br />

Dies wird aus Satz 2.5.4 folgen, den wir später beweisen werden. (Natürlich werden<br />

wir die Ergebnisse dieses Abschnittes nicht im Beweis von 2.5.4 benutzen.)<br />

Satz 2.3.2 Zu jeder natürlichen Zahl N ≥ 2 gibt es Primzahlen p 1 , · · · , p t mit<br />

N = p 1 · · · p t . Diese Darstellung als Produkt von Primzahlen ist bis auf die<br />

Reihenfolge der Faktoren eindeutig.<br />

Beweis: Die Existenz der Primfaktorzerlegung zeigen wir durch vollständige<br />

Induktion nach N. Der Fall N = 2 ist klar. Im Induktionsschritt N − 1 → N<br />

zeigen wir, dass N ein Produkt von Primzahlen ist, wenn jede Zahl N ′ mit<br />

2 ≤ N ′ < N als Produkt von Primzahlen geschrieben werden kann. Falls N eine<br />

Primzahl ist, so sind wir fertig. Falls N nicht prim ist, so kann man N = N ′ N ′′<br />

mit 2 ≤ N ′ , N ′′ < N schreiben <strong>und</strong> sowohl N ′ als auch N ′′ sind nach Induktions-<br />

Hypothese Produkte von Primzahlen. Daher ist N ein Produkt von Primzahlen.<br />

Zur Eindeutigkeit der Darstellung: Gelte N = p 1 · · · p r = q 1 · · · q s mit Primzahlen<br />

p i , q i <strong>und</strong> mit r ≤ s. Wir zeigen durch vollständige Induktion nach s,<br />

daß es eine Bijektion σ : {1, · · · , s} → {1, · · · , r} mit q i = p σ(i) ∀i gibt. Dies<br />

ist klar, wenn s = 1. Sei s ≥ 2. Dann gilt q s | p 1 · · · p r <strong>und</strong> nach dem obigen<br />

Lemma von Bézout gibt es ein k ∈ {1, · · · , r} mit q s | p k , d.h. mit q s = p k . Dann<br />

folgt 3 p 1 · · · ˆp k · · · p r = q 1 · · · q s−1 <strong>und</strong> nach Induktions-Hypothese gibt es eine<br />

Bijektion ˜σ : {1, · · · , r} \ {k} → {1, · · · , s − 1} mit p˜σ(i) = q i ∀1 ≤ i ≤ s − 1.<br />

Die Bijektion σ mit σ(i) = ˜σ(i) für 1 ≤ i ≤ s − 1 <strong>und</strong> mit σ(s) = k leistet das<br />

Gewünschte.<br />

□<br />

Aus algorithmischer Sicht ist das Berechnen der Primfaktorzerlegung sehr zeitaufwändig.<br />

Beispiel: Es gilt 300 = 2 · 2 · 3 · 5 · 5 = 2 2 · 3 · 5 2 <strong>und</strong> 1750 = 2 · 5 3 · 7. Dies wurde<br />

“durch Probedivision” errechnet.<br />

□<br />

Bemerkung 2.3.3 Seien p 1 , · · · , p t paarweise verschiedene Primzahlen. Sei e 1 , · · · , e t ∈<br />

N <strong>und</strong> f 1 , · · · , f t ∈ N. Sei x = p e1<br />

1 · · · pet t <strong>und</strong> y = p f1<br />

1 · · · pft t .<br />

1. Genau dann gilt x | y, wenn e i ≤ f i für alle i ∈ {1, · · · , t} gilt.<br />

2. g := ∏ t<br />

i=1 pmin(ei,fi)<br />

i ist ein größter gemeinsamer Teiler von x <strong>und</strong> y.<br />

Beispiel: Wir wollen das nicht-negative g ∈ ggT(300, 1750) berechnen. Es gilt<br />

300 = 2 2 · 3 · 5 2 · 7 0 <strong>und</strong> 1750 = 2 · 3 0 · 5 3 · 7. Also folgt g = 2 · 5 2 = 50. □<br />

3 Der Hut bedeutet, daß der entsprechende Faktor ausgelassen wird.<br />

34


2.4 Restklassenringe<br />

Sei (G, +) eine abelsche Gruppe <strong>und</strong> I ⊂ G eine Untergruppe. Für a, b ∈ G<br />

setzen wir im folgenden a = b mod I (sprich: a ist kongruent b modulo I), wenn<br />

b − a ∈ I gilt. Eine solche Aussage a = b mod I wird Kongruenz genannt.<br />

Durch − = − mod I ist eine Relation auf G gegeben. Auch a ≡ b mod I,<br />

a ≡ b(I) oder a = b(I) statt a = b mod I ist gebräuchlich.<br />

Bemerkung 2.4.1 Sei N ≥ 1 <strong>und</strong> G := (Z, +) die additive Gruppe des Ringes<br />

Z. Dann ist das Ideal (N) Z = NZ eine Untergruppe von G; sie besteht aus den<br />

durch N teilbaren ganzen Zahlen. Insbesondere gilt x = y mod NZ genau dann,<br />

wenn y − x durch N teilbar ist. Es wird manchmal x = y mod N oder kurz<br />

x = y(N) statt x = y mod NZ geschrieben.<br />

Wenn x ÷ N = q Rest r gilt, dann ist x − r = qN durch N teilbar <strong>und</strong> es folgt<br />

x = r mod NZ. Zu jedem x ∈ Z gibt es also ein r ∈ {0, 1, · · · , N − 1} mit<br />

x = r mod NZ. Diese Zahl r ist offenbar durch x <strong>und</strong> N eindeutig bestimmt<br />

<strong>und</strong> wird der (kleinste nicht-negative) Repräsentant von x modulo NZ<br />

genannt.<br />

Beispiel: In Z gilt 23 = 3 mod 5Z, weil 3 − 23 = −20 durch 5 teilbar ist. 3 ist<br />

auch der kleinste nicht-negative Repräsentant von 23 modulo 3. Genauso gilt<br />

−14 = 1 mod 5Z (beachte: 1 − (−14) = 15 ist ein Vielfaches von 5) <strong>und</strong> 1 ist<br />

der kleinste Repräsentant von −14 modulo 5.<br />

Es gilt 1214 = 1208 mod 3Z, denn 1208 − 1214 = −6 ist durch 3 teilbar; aber<br />

1208 /∈ {0, 1, 2} ist nicht der kleinste Repräsentant.<br />

Was ist der Repräsentant von 1214 modulo 3Z? Um dies zu beantworten, rechnet<br />

man 1214 ÷ 3 = 403 Rest 2 <strong>und</strong> erkennt 1214 = 2 mod 3Z. Also ist 2 ∈ {0, 1, 2}<br />

der gesuchte Repräsentant.<br />

□<br />

Bemerkung 2.4.2 Sei (G, +) eine abelsche Gruppe, I ⊂ G eine Untergruppe<br />

<strong>und</strong> x, y, x ′ , y ′ ∈ G.<br />

1. Die Relation − = − mod I ist eine Äquivalenzrelation.<br />

2. Wenn x = y mod I <strong>und</strong> x ′ = y ′ mod I gilt, dann folgt x+x ′ = y+y ′ mod I.<br />

3. Wenn (G, +) die additive Gruppe eines Ringes (G, +, ·) <strong>und</strong> I ein Ideal<br />

ist, dann folgt aus x = y mod I <strong>und</strong> x ′ = y ′ mod I schon xx ′ = yy ′ mod I.<br />

Beweis: Wir verweisen auf die Übung.<br />

□<br />

Beispiel: Aus 112 = 2 mod 10Z <strong>und</strong> 111324 = 4 mod 10Z folgt unter Beachtung<br />

von Teil 3. der obigen Bemerkung 112·111324 = 2·4 = 8 mod 10Z. Auf diese Art<br />

berechnet sich der Repräsentant 8 von 112·111324 modulo 10 leichter, als durch<br />

folgende Rechnung: 112 · 111324 = 12468288 <strong>und</strong> 12468288 = 8 mod 10. Beim<br />

35


Arbeiten mit Kongruenzen ist es rechentechnisch günstig (aber nicht Pflicht)<br />

bei jedem Teilschritt zum kleinsten Repräsentanten überzugehen.<br />

□<br />

Wir geben ein weiteres Beispiel, da es an dieser Stelle leicht zu anfänglichen<br />

Verständnisschwierigkeiten kommen kann.<br />

Beispiel: Die Rechnung<br />

13 · (11 + 12) = 3 · (1 + 2) = 9 mod 5Z<br />

ist völlig korrekt. Es ist bei solchen Rechnungen üblich (aber nicht Pflicht)<br />

beim Endergebnis zum kleinsten Repräsentanten überzugehen, d.h. bei obiger<br />

Rechnung noch 9 = 4 mod 5 anzufügen.<br />

Der Autor fühlt sich an das Bruchrechnen erinnert. Die Rechnung<br />

1<br />

11 (1 3 + 1 8 ) = 1 33 + 1 88 + 33<br />

=<br />

88 33 · 88 = 121<br />

2904<br />

zeugt zwar nicht von besonderem Geschick im Umgang mit Zahlen, aber sie ist<br />

121<br />

völlig korrekt. Man würde wohl üblicherweise noch kürzen:<br />

2904 = 1 24<br />

; aber das<br />

ist kein Muß.<br />

Beim Bruchrechnen kann es manchmal geschickt sein, geeignet zu erweitern.<br />

Beim Rechnen mit (oder bei Beweisen zu) Kongruenzen kann durchaus einmal<br />

ein Teilschritt der Form 4 = 99 mod 5Z vorkommen. a = b mod NZ ist per<br />

Definition nur eine Aussage, die wahr oder falsch ist, je nachdem, ob b−a ∈ NZ<br />

oder b − a /∈ NZ gilt.<br />

Sei (G, +) eine abelsche Gruppe <strong>und</strong> I ⊂ G eine Untergruppe. Wir verfolgen nun<br />

das Ziel, eine neue abelsche Gruppe G/I zu konstruieren, in der das Modulo-<br />

Rechnen stattfindet. Jede prinzipielle Aussage über abelsche Gruppen soll eine<br />

Aussage über das Modulo-Rechnen liefern.<br />

Für a ∈ G setzen wir 4 [a] I := a + I := {a + x|x ∈ I} - dies ist die Teilmenge<br />

von G, die aus denjenigen Elementen besteht, die gleich a modulo I sind: [a] I =<br />

{y ∈ G | y = a mod I}. Mit anderen Worten: [a] I ist die Äquivalenzklasse von a<br />

bezüglich der Äquivalenzrelation − = − mod I. Man nennt [a] I die Restklasse<br />

von a modulo I. Offenbar gilt a ∈ [a] I .<br />

Bemerkung 2.4.3 Sei a, b ∈ G.<br />

1. Genau dann gilt [a] I = [b] I , wenn a = b mod I gilt. Wenn a ≠ b mod I<br />

gilt, dann sind die Mengen [a] I <strong>und</strong> [b] I disjunkt, d.h. [a] I ∩ [b] I = ∅.<br />

2. Die Abbildung ϕ : I → [a] I , x ↦→ x + a ist bijektiv.<br />

Beweis: Zu 1.) Sei a ≠ b mod I. Wäre x ∈ [a] I ∩ [b] I , so folgte x = a mod I<br />

<strong>und</strong> x = b mod I, also a = x = b mod I. Widerspruch. Ist aber a = b mod I,<br />

4 Die Bezeichnung [a] I ist nicht Standardterminologie, wohl aber die (längere) Bezeichnung<br />

a + I; andere Autoren verwenden a oder [a] oder · · ·.<br />

36


so gilt x ∈ [a] I ⇐⇒ x = a mod I ⇐⇒ x = b mod I ⇐⇒ x ∈ [b] I für alle<br />

x ∈ G, d.h. [a] I = [b] I .<br />

Zu 2.) Man sieht leicht, dass ϕ wohldefiniert ist, d.h. dass ϕ wirklich nur Werte<br />

in [a] I annimmt. Aus ϕ(x) = ϕ(y) folgt x + a = y + a <strong>und</strong> dies impliziert x = y.<br />

Somit ist ϕ injektiv. Für jedes z ∈ [a] I gibt es nach der Definition der Menge<br />

[a] I ein x ∈ I mit x + a = z, d.h. mit ϕ(x) = z. Deshalb ist ϕ surjektiv. □<br />

Wir werden im folgenden die Menge aller Restklassen G/I := {[a] I | a ∈ G}<br />

betrachten. [a] I ist bereits eine Teilmenge von G. Daher ist G/I eine Menge von<br />

Mengen.<br />

Wir sagen es noch einmal: Oft sind die Mengen [a] I <strong>und</strong> [b] I gleich, obwohl<br />

a ≠ b gilt (vgl. Teil 1. obiger Bemerkung). Das ist letzten Endes der<br />

Sinn der Konstruktion. Somit ist die Mächtigkeit von G/I in aller Regel<br />

kleiner als die Mächtigkeit von G. Es kann z.B. vorkommen, dass G unendlich<br />

<strong>und</strong> G/I endlich ist.<br />

Beispiel: Sei G = (Z, +). Für a ∈ Z sei [a] := [a] 3Z . Es gilt<br />

[0] = 3Z = {· · · , −6, −3, 0, 3, 6, · · ·}.<br />

[1] besteht aus allen Zahlen, die gleich 1 modulo 3Z sind, d.h.<br />

Genauso folgt<br />

[1] = 1 + 3Z = {· · · , −5, −2, 1, 4, 7, · · ·}.<br />

[2] = 2 + 3Z = {· · · , −4, −1, 2, 5, 8, · · ·},<br />

[3] = 3 + 3Z = {· · · , −3, 0, 3, 6, 9, · · ·},<br />

[4] = 4 + 3Z = {· · · , −2, 1, 4, 7, 10, · · ·}<br />

u.s.w. Man sieht, dass [3] = [0], [4] = [1], [5] = [2], [6] = [0], [7] = [1] u.s.w. gilt.<br />

Per Definition ist Z/3Z die Menge aller Restklassen,<br />

Z/3Z = {[a] : a ∈ Z} = {·, [−1], [0], [1], [2], [3], [4], · · ·}.<br />

In dieser Definition einer Menge sind aber (extrem) viele Elemente mehrfach<br />

aufgeführt, was bei der Definiton einer Menge ja nicht verboten ist. Ohne Mehrfachauflistung<br />

geschrieben gilt:<br />

Z/3Z = {[0], [1], [2]},<br />

<strong>und</strong> das ist eine endliche, 3-elementige Menge.<br />

Auch sieht man, dass die Restklassen [1] <strong>und</strong> [2], die als Mengen verschieden sind<br />

([1] ≠ [2]), überhaupt kein gemeinsames Element haben: [1]∩[2] = ∅ <strong>und</strong> ebenso<br />

[0]∩[2] = ∅, [0]∩[1] = ∅. Auch diese Eigenschaft war nach obiger Bemerkung zu<br />

erwarten. Ferner gilt Z = [0] ∪ [1] ∪ [2], da jede ganze Zahl entweder = 0 mod 3Z<br />

oder = 1 mod 3Z oder gleich = 2 mod 3Z ist. Die Restklassen modulo 3Z bilden<br />

also eine disjunkte Zerlegung (oder: Überdeckung) der Ausgangsgruppe Z. Dies<br />

gilt allgemein:<br />

□<br />

37


Sei wieder (G, +) eine abelsche Gruppe <strong>und</strong> I eine Untergruppe. Dann bilden<br />

die Restklassen modulo I nach obiger Bemerkung 2.4.3 eine disjunkte Zerlegung<br />

von G, d.h. G = ⋃ M∈G/I M <strong>und</strong> M ∩ M ′ = ∅ für M ≠ M ′ ∈ G/I. Jede<br />

Zerlegungsmenge hat die selbe Mächtigkeit wie I, d.h. für jede Restklasse [a] I<br />

gilt: Entweder sind [a] I <strong>und</strong> I beide unendlich oder beide endlich von der selben<br />

Anzahl. Dies liegt an der Existenz einer Bijektion I → [a] I .<br />

Folgerung 2.4.4 Wenn G endlich ist, dann gilt |G| = |I||G/I|. Insbesondere<br />

ist |I| ein Teiler von |G| für jede Untergruppe I.<br />

Satz 2.4.5 Sei (G, +) eine Gruppe <strong>und</strong> I eine Untergruppe.<br />

1. Auf G/I kann man durch [a] I ⊕ [b] I := [a + b] I eine Addition definieren,<br />

die G/I zu einer abelschen Gruppe macht. Diese Gruppe G/I wird Restklassengruppe<br />

von G modulo I oder Faktorgruppe von G modulo<br />

I genannt.<br />

2. Wenn G ein Ring <strong>und</strong> I ein Ideal ist, dann kann man auf G/I (zusätzlich<br />

zu der Addition) durch [a] I ⊙ [b] I := [ab] I eine Multiplikation definieren.<br />

G/I wird dadurch zu einem Ring. Dieser wird Restklassenring von G<br />

modulo I genannt.<br />

Beweis: Wir zeigen nur 1. Der Beweis von 2. ist analog zu führen. Wir setzen zur<br />

Abkürzung [a] := [a] I . Da [a] nicht durch a eindeutig bestimmt ist (es kann ja<br />

[a] = [a ′ ] gelten, ohne dass a = a ′ gilt), muß man prüfen, daß die neue Addition<br />

wohldefiniert ist. Nimm an, dass [a] = [a ′ ] <strong>und</strong> [b] = [b ′ ] gilt. Es ist zu zeigen,<br />

dass dann [a + a ′ ] = [b + b ′ ] gilt 5 . Dies ist aber eine direkte Folgerung von 2.4.2<br />

Es ist klar, dass [0] neutrales Element für die neue Addition ⊕ ist. [−x] ist invers<br />

zu [x] <strong>und</strong> das Assoziativgesetz vererbt sich von der alten auf die neue Addition.<br />

□<br />

Wir schreiben im folgenden wieder + statt ⊕ bzw. · statt ⊙. Sei R ein Ring <strong>und</strong><br />

I ein Ideal. Ich empfehle, im folgenden bei [−] I in erster Linie an ein “Symbol”<br />

zu denken, das sich gemäß den Rechenregeln<br />

[a] I = [b] I ⇐⇒ a = b mod I ⇐⇒ b − a ∈ I<br />

[a] I + [b] I = [a + b] I<br />

[a] I · [b] I = [a · b] I<br />

(a, b ∈ R) transformiert. Bei R/I denke man an die “Menge, die aus all diesen<br />

Symbolen besteht”. Es spielt im folgenden nur eine untergeordnete Rolle, daß<br />

[a] I eigentlich eine Teilmenge von R <strong>und</strong> R/I eine Teilmenge der Potenzmenge<br />

P (R) ist.<br />

Sei N ≥ 1. Wendet man obige Theorie mit dem Ring R = Z <strong>und</strong> dem Ideal<br />

I = NZ an, so erhält man den Restklassenring Z/NZ. Wir setzen zur Abkürzung<br />

5 Wenn [a+a ′ ] ≠ [b+b ′ ] gelten würde, dann folgte [a ′ +b ′ ] = [a ′ ]⊕[b ′ ] = [a]⊕[b] = [a+b] ≠<br />

[a ′ + b ′ ], d.h. die Definition der neuen Addition würde “in sich widersprüchlich sein”.<br />

38


[a] N := [a] NZ . Wenn keine Verwechslungsgefahr besteht, schreiben wir einfach<br />

[a] statt [a] N . Per Definition gilt<br />

Z/NZ = {[a] : a ∈ Z} = {· · · , [−2], [−1], [0], [1], [2], [3], · · ·}.<br />

Hier sind aber wieder viele Elemente mehrfach aufgelistet:<br />

Bemerkung 2.4.6 Für jedes [a] ∈ Z/NZ existiert genau ein 6 r ∈ {0, · · · , N −<br />

1} mit [a] = [r] gem. 2.4.1. Daher gilt, ohne Mehrfachauflistung geschrieben:<br />

Z/NZ = {[0], · · · , [N − 1]} .<br />

Z/NZ ist ein endlicher, N-elementiger Ring.<br />

Übrigends ist Z/1Z der Nullring <strong>und</strong> Z/0Z ∼ = Z.<br />

Beispiel: Wir rechnen in dem 6-elementigen Ring Z/6Z. Es gilt<br />

Z/6Z = {[0], [1], [2], [3], [4], [5]}.<br />

Z.B. gilt in diesem Ring [4] + [2] = [6] = [0]. Ferner gilt [5][5] = [−1][−1] = [1].<br />

Daher hat [5] ein multiplikatives Inverses, d.h. [5] ist eine Einheit in diesem<br />

Restklassenring, [5] ∈ (Z/6Z) × . Es gilt [5] −1 = [5]. Ferner gilt [2] ≠ [0] <strong>und</strong><br />

[3] ≠ [0] aber [2][3] = [6] = [0]. Daher ist Z/6Z kein Integritätsring. [2] <strong>und</strong> [3]<br />

sind Nicht-Einheiten. Auch [4] ist eine Nicht-Einheit, denn [4][1] = [4], [4][2] =<br />

[2], [4][3] = [0], [4][4] = [4], [4][5] = [2]; daher hat [4] kein multiplikatives Inverses<br />

in Z/6Z - es kommt ja nie [1] heraus. Also ist (Z/6Z) × = {[1], [5]}. □<br />

Das “Hexen-Einmaleins” der Ringe Z/NZ ist für die <strong>Kryptographie</strong> eine wahre<br />

F<strong>und</strong>grube.<br />

2.5 Multiplikative Inverse in Z/NZ.<br />

Sei R ein Ring <strong>und</strong> a, b ∈ R. Jede Einheit u ∈ R × wird dann sowohl a als auch<br />

b teilen. Man nennt a zu b teilerfremd, wenn es außer den Einheiten keine<br />

gemeinsamen Teiler von a <strong>und</strong> b gibt; in Formeln: gT (a, b) = R × . Dies ist genau<br />

dann der Fall, wenn 1 ∈ ggT(a, b) gilt.<br />

Sei N ≥ 2 <strong>und</strong> [a] := a + NZ. Wir betrachten den endlichen, N-elementigen<br />

Ring<br />

Z/NZ = {[0], [1], · · · , [N − 1]}.<br />

Satz 2.5.1 Sei x ∈ Z <strong>und</strong> g ∈ ggT (x, N) nicht-negativ.<br />

6 r kann durch Division mit Rest berechnet werden.<br />

39


1. Genau dann ist [x] eine Einheit in Z/NZ (in Formeln: x ∈ (Z/NZ) × ),<br />

wenn x zu N teilerfremd ist. Dies kann man so umformulieren: Genau<br />

dann gibt es ein y ∈ Z mit xy = 1 mod NZ, wenn x zu N teilerfremd ist.<br />

2. Sei N ′ := N/g <strong>und</strong> k ∈ Z. Genau dann gilt xk = 0 mod NZ, wenn<br />

k = 0 mod N ′ Z.<br />

Beweis: Implikation “⇐” von 1.: Sei x zu N teilerfremd, d.h. sei g = 1. Nach<br />

2.2.4 gibt es u, v ∈ Z mit 7 1 = g = ux + vN. Dann ist aber 1 = ux + v · 0 =<br />

ux mod NZ <strong>und</strong> somit ist [u] multiplikatives Inverses zu [x].<br />

Implikation “⇒” von 1.: Gelte xy = 1 mod NZ. Wegen g | N folgt daraus<br />

xy = 1 mod gZ. Weil x = 0 mod gZ folgt 0 = 1 mod gZ <strong>und</strong> das ist nur für<br />

g = 1 möglich.<br />

Implikation “ ⇐⇒ ” von 2.: Sei x ′ := x/g. Dann ist x ′ zu N ′ teilerfremd <strong>und</strong><br />

daher ist [x ′ ] N ′ ∈ (Z/N ′ Z) × eine Einheit modulo N ′ . Es gilt<br />

xk = 0 mod NZ ⇐⇒ ∃m : x ′ gk = mN ⇐⇒ ∃m : x ′ k = mN ′<br />

<strong>und</strong> das ist äquivalent zu [x ′ ] N ′[k] N ′ = [0] N ′. Weil [x ′ ] N ′ eine Einheit ist, ist<br />

[x ′ ] N ′[k] N ′ = [0] N ′ seinerseits äquivalent zu [k] N ′ = [0] N ′. □<br />

Ein Element x eines Ringes R heißt Nullteiler, wenn ein y ∈ R mit xy = 0<br />

<strong>und</strong> y ≠ 0 existiert. Bsp.: In einem Integritätsring ist 0 der einzige Nullteiler.<br />

Folgerung 2.5.2 Jedes Element x ∈ Z/NZ ist entweder eine Einheit oder ein<br />

Nullteiler.<br />

Beweis: Wenn x = [a] ∈ Z/NZ eine Nicht-Einheit ist, dann gilt g > 1 für das<br />

nicht-negative g ∈ ggT(a, N) (vgl. Teil 1. des Satzes). Also gilt N ′ := N/g ∈<br />

{1, · · · , N − 1} <strong>und</strong> somit [N ′ ] ≠ [0]. Aber [a][N ′ ] = [0] nach Teil 2. des Satzes.<br />

Daher ist x = [a] ein Nullteiler.<br />

□<br />

Algorithmus 2.5.3 (Euklidischer Algorithmus für Inverse in Z/NZ)<br />

Will man entscheiden, ob [x] Einheit in Z/NZ ist, so berechnet man mit dem<br />

euklidischen Algorithmus 2.2.7 das nicht-negative g ∈ ggT(x, N) <strong>und</strong> Zahlen<br />

u, v ∈ Z mit g = ux + vN.<br />

Wenn g ≠ 1, dann hat [x] kein multiplikatives Inverses. Wenn g = 1, dann ein<br />

ist [x] Einheit <strong>und</strong> das multiplikative Inverse ist [u], d.h. xu = 1 mod NZ.<br />

Wir setzen ϕ(N) := |(Z/NZ) × |. Nach obigem Satz ist ϕ(N) die Anzahl der zu N<br />

teilerfremden Zahlen im Bereich 1, 2, · · · , N −1. Die Funktion ϕ wird Eulersche<br />

ϕ-Funktion genannt.<br />

7 Der euklidische Algorithmus ist ein effektives Verfahren zu Berechnung von u <strong>und</strong> v.<br />

40


Beispiel: Nach obigem Satz gilt:<br />

(Z/2Z) × = {[1]},<br />

(Z/3Z) × = {[1], [2]},<br />

(Z/4Z) × = {[1], [3]},<br />

(Z/5Z) × = {[1], [2], [3], [4]},<br />

(Z/6Z) × = {[1], [5]},<br />

(Z/7Z) × = {[1], [2], [3], [4], [5], [6]},<br />

(Z/8Z) × = {[1], [3], [5], [7]},<br />

(Z/9Z) × = {[1], [2], [4], [5], [7], [8]},<br />

(Z/10Z) × = {[1], [3], [7], [9]}.<br />

Somit gilt ϕ(2) = 1, ϕ(3) = ϕ(4) = 2, ϕ(5) = 4, ϕ(6) = 2, ϕ(7) = 6, ϕ(8) = 4,<br />

ϕ(9) = 6, ϕ(10) = 4. Wir werden später eine einfachere Formel zur Berechnung<br />

von ϕ beweisen.<br />

Wir rechnen nun in Z/99Z. In diesem Ring muß [31] ein Inverses haben, denn<br />

31 ist zu 99 teilerfremd. Wir berechnen das Inverse zu [31] mit dem euklidischen<br />

Algorithmus.<br />

(99, 31) Z = (31, 6) Z = (6, 1) Z = (1, 0) Z = (1) Z .<br />

Dies ist keine Überraschung - wir haben ja schon erwähnt, dass 1 ∈ ggT(31, 99)<br />

gilt. Nun können wir aber rückwärts einsetzen: 1 = 31−5·6 = 31−5·(99−3·31) =<br />

(−5) · 99 + 16 · 31 <strong>und</strong> daraus folgt 1 = 31 · 16 mod 99, d.h. [31] −1 = [16].<br />

Satz 2.5.4<br />

1. Sei p eine Primzahl. Dann ist F p := Z/pZ ein Körper.<br />

2. Sei N ≥ 2 eine Zahl, die nicht prim ist. Dann ist Z/NZ nicht einmal ein<br />

Integritätsring, insbesondere kein Körper.<br />

Beweis: Sei p prim. Es gilt Z/pZ = {[0], [1], · · · , [p − 1]} <strong>und</strong> da p prim ist,<br />

sind die Zahlen 1, 2, · · · p − 1 allesamt zu p teilerfremd. Daher gilt (Z/pZ) × =<br />

{[1], · · · , [p − 1]} = (Z/pZ) \ {[0]}, d.h. jedes von [0] verschiedene Element in<br />

Z/pZ ist eine Einheit. Daher ist Z/pZ ein Körper.<br />

Sei N ≥ 2 keine Primzahl. Dann läßt sich N schreiben als N = nm mit 1 <<br />

n, m < N. Daraus folgt nm = 0 mod NZ, d.h. [n][m] = [0] aber [n] ≠ [0] <strong>und</strong><br />

[m] ≠ [0]. In Z/NZ gibt es also Produkte, die Null sind, ohne daß einer der<br />

Faktoren Null ist. Daher ist Z/NZ kein Integritätsring.<br />

□<br />

Die endlichen Körper F p (p prim) sind für die elementare <strong>Zahlentheorie</strong> <strong>und</strong><br />

für die <strong>Kryptographie</strong> von besonderer Bedeutung. Wie in jedem Körper gilt<br />

F × p = F p \ {0}.<br />

Satz 2.5.5 Sei p eine Primzahl. Dann gilt ϕ(p n ) = p n−1 (p − 1).<br />

Beweis: Wir müssen zählen, wie viele Einheiten Z/p n Z hat. Da p prim ist, sind<br />

die zu p n nicht teilerfremden Zahlen gerade die durch p teilbaren Zahlen. Daher<br />

41


ist die Menge der Nicht-Einheiten von Z/p n Z gerade<br />

M = {[0], [p], [2p], · · · , [(p n−1 − 2)p], [(p n−1 − 1)p]}<br />

<strong>und</strong> diese Menge hat p n−1 Elemente. Die Menge der Einheiten<br />

(Z/p n Z) × = (Z/p n Z) \ M<br />

hat also genau p n −p n−1 Elemente. Daraus folgt ϕ(p n ) = p n −p n−1 = p n−1 (p−1).<br />

□<br />

Z.B. gilt ϕ(5) = 5 − 1 = 4, ϕ(8) = ϕ(2 3 ) = 2 2 (2 − 1) = 4 <strong>und</strong> ϕ(9) = ϕ(3 2 ) =<br />

3(3 − 2) = 6, aber das wissen wir schon nach obigem Beispiel.<br />

2.6 Der chinesische Restsatz<br />

Sei n 1 , · · · , n t ≥ 2 <strong>und</strong> n = n 1 , · · · , n t . Im folgenden kommen Restklassen modulo<br />

verschiedenen Idealen vor. Sei [a] := [a] n . Wir betrachten die Abbildung<br />

f : Z → Z/n 1 Z × · · · × Z/n t Z, a ↦→ ([a] n1 , · · · , [a] nt ).<br />

Beispiel: Wenn n 1 = 2, n 2 = 5, n 3 = 7 <strong>und</strong> n = 70 gilt, dann gilt z.B.<br />

f(30) = ([30] 2 , [30] 5 , [30] 7 ) = ([0] 2 , [0] 5 , [2] 7 ) <strong>und</strong> f(53) = ([53] 2 , [53] 5 , [53] 7 ) =<br />

([1] 2 , [3] 5 , [4] 7 ).<br />

Man kann die Menge auf der rechten Seite durch komponentenweise Addition<br />

<strong>und</strong> Multiplikation zu einem Ring mit Nullelement 0 := ([0] n1 , · · · , [0] nt ) <strong>und</strong><br />

Einselement 1 := ([1] n1 , · · · , [1] nt ) machen. Man sieht sofort, daß f(1) = 1,<br />

f(a + b) = f(a) + f(b) <strong>und</strong> f(ab) = f(a)f(b) für alle a, b ∈ Z gilt, d.h. f ist ein<br />

Ringhomomorphismus.<br />

Man beachte: Für x, a 1 , · · · , a t ∈ Z gilt<br />

f(x) = ([a 1 ] n1 , · · · , [a t ] nt ) ⇐⇒ ([x] n1 , · · · , [x] nt ) = ([a 1 ] n1 , · · · , [a t ] nt )<br />

⇐⇒ x = a 1 mod n 1<br />

x = a 2 mod n 2<br />

.<br />

x = a t mod n t ,<br />

d.h. wenn man f(x) = ([a 1 ] n1 , · · · , [a t ] nt ) schreibt, so bedeutet das “in Kompaktschreibweise”,<br />

dass die t Modulo-Gleichungen 8 auf der rechten Seite gelten;<br />

Genau dann hat der Vektor ([a 1 ] n1 , · · · , [a t ] nt ) ein Urbild unter f, wenn das Gleichungssystem<br />

auf der rechten Seite eine Lösung in x hat. Wenn f surjektiv ist,<br />

dann bedeutet das, daß für jede erdenkliche Wahl der a i das Gleichungssystem<br />

eine Lösung in x besitzt.<br />

Satz 2.6.1 (Chinesischer Restsatz) Nimm an, dass die Zahlen n i paarweise<br />

teilerfremd sind.<br />

8 Man sagt auch: Kongruenzen.<br />

42


1. f(x) = f(y) ⇐⇒ x = y mod n 1 · · · n t Z.<br />

2. f ist surjektiv.<br />

3. f induziert einen bijektiven Homomorphismus<br />

f : Z/nZ → Z/n 1 Z × · · · × Z/n t Z, [a] ↦→ ([a] n1 , · · · , [a] nt ).<br />

Beweis: Genau dann gilt f(x) = f(y), wenn x = y mod n i für alle i gilt, also<br />

wenn y −x durch alle n i teilbar ist. Dies ist äquivalent zu n 1 · · · n t | (y −x) (hier<br />

geht die Voraussetzung ein, daß die n i teilerfremd sind!). Das ist aber wiederum<br />

genau dann der Fall, wenn x = y mod n 1 · · · n t gilt. Somit gilt 1.<br />

Aus 1. folgt, dass f eine wohldefinierte <strong>und</strong> injektive Abbildung ist. Da Definitionsbereich<br />

<strong>und</strong> Wertebereich von f die gleiche (endliche) Mächtigkeit haben,<br />

muß f auch surjektiv sein. Daraus folgt leicht, daß auch f surjektiv ist.<br />

Bemerkung 2.6.2 Nimm an, dass die Zahlen n i paarweise teilerfremd sind.<br />

Dann sieht man leicht, dass x ∈ (Z/nZ) × ⇐⇒ f([x]) ∈ (Z/n 1 Z) × × · · · ×<br />

(Z/n t Z) × gilt. Daher induziert f einen bijektiven Gruppenhomomorphismus<br />

(Z/nZ) × → (Z/n 1 Z) × × · · · × (Z/n t Z) × .<br />

Die Menge auf der linken Seite hat also die selbe Mächtigkeit wie die Menge<br />

auf der rechten Seite. Die Eulersche ϕ-Funktion haben wir durch ϕ(m) :=<br />

|(Z/mZ) × | definiert. Es folgt die Multiplikationsregel<br />

ϕ(n 1 · · · n t ) = ϕ(n 1 ) · · · ϕ(n t ).<br />

Folgerung 2.6.3 Seien p 1 , · · · , p t paarweise verschiedene Primzahlen, e 1 , · · · , e t ≥<br />

1 <strong>und</strong> n = p e1<br />

1 · · · pet t . Dann gilt ϕ(n) = p e1−1<br />

1 (p 1 − 1) · · · pt et−1 (p t − 1).<br />

Beweis: Sei n i := p ei<br />

i . Dann sind die n i paarweise teilerfremd <strong>und</strong> n = n 1 · · · n t .<br />

Mit obiger Bemerkung folgt ϕ(n) = ϕ(n 1 ) · · · ϕ(n t ) = ϕ(p e1<br />

1 ) · · · ϕ(pet t ). Nach<br />

2.5.5 gilt ϕ(p ei<br />

i ) = pei−1 i (p i − 1). Daraus folgt die Behauptung. □<br />

Beispiel: Es gilt ϕ(4896) = ϕ(2 5·3 2·17) = 2 4 (2−1)·3(3−1)·(17−1) = 1536. Bei<br />

großen Zahlen, die verschiedene große Primfaktoren haben, ist dieses Verfahren<br />

nicht schnell, da die Berechnung der Primfaktorzerlegung viel Zeit beansprucht.<br />

Sei nun t = 2. Nimm an, daß die beiden Zahlen n 1 , n 2 teilerfremd sind. Sei<br />

a 1 , a 2 ∈ Z beliebig. Dann besagt der chinesische Restsatz (vgl. 2.6.1, Teil 2.),<br />

dass ein x ∈ Z mit f(x) = ([a 1 ] n1 , [a 2 ] n2 ) (d.h. mit x = a 1 mod n 1 <strong>und</strong> x =<br />

a 2 mod n 2 ) existiert. Der Beweis liefert aber keine Information darüber, wie<br />

man die Lösungsmenge<br />

L = {x : f(x) = ([a 1 ] n1 , [a 2 ] n2 )}<br />

errechnet, denn die Surjektivität von f wird dort aus der Injektivität von f<br />

gefolgert. Der folgende Algotithmus berechnet bei Eingabe (n 1 , n 2 , a 1 , a 2 ) eine<br />

Lösung x ∈ L. Die gesamte Lösungsmenge ist dann<br />

L = {y : y = x mod n 1 n 2 } = {x, x ± n 1 n 2 , x ± 2n 1 n 2 , · · ·}<br />

43


nach 2.6.1, Teil 1.<br />

Algorithmus 2.6.4 (Euklidischer Algorithmus zum chinesischen Restsatz)<br />

Schritt 1: Mit dem euklidischen Algorithmus berechnet man u 1 , u 2 ∈ Z mit<br />

u 1 n 1 + u 2 n 2 = 1. (Dies ist möglich da n 1 zu n 2 teilerfremd ist.)<br />

Schritt 2: Setze x := a 1 u 2 n 2 + a 2 u 1 n 1 .<br />

Gib aus: “x erfüllt die Kongruenzen x = a 1 mod n 1 , x = a 2 mod n 2 .”<br />

Warum funktioniert dieser Algorithmus? Aus u 1 n 1 + u 2 n 2 = 1 folgt u 1 n 1 =<br />

∗∗<br />

1 mod n 2 (∗) <strong>und</strong> u 2 n 2 = 1 mod n 1 (∗∗). Daher gilt x = a 2 u 1 · 0 + a 1 u 2 n 2 =<br />

∗<br />

a 1 mod n 1 <strong>und</strong> x = a 2 u 1 n 1 = a2 mod n 2 , d.h. x erfüllt die gewünschen Kongruenzen.<br />

Man beachte: Wenn verschiedene Kongruenzen zu der selben Eingabe (n 1 , n 2 )<br />

gelöst werden sollen, dann muß Schritt 1 zur Berechnung der u i nur einmal<br />

ausgeführt werden.<br />

Beispiel: Wir lösen das System<br />

x = 5 mod 7, x = 9 mod 11.<br />

1 ∈ ggT(7, 11) hat die Darstellung 1 = (−3)·7+2·11. Also muß x ′ := 9·(−3)·7+5·<br />

2·11 = −79 eine Lösung sein; Jede Zahl x = x ′ mod 77 ist ebenfalls eine Lösung.<br />

Also ist x := 75 die kleinste nicht-negative Lösung (beachte: −79 = 75 mod 77)<br />

<strong>und</strong> die Lösungsmenge ist<br />

L = {y : y = 75 mod 77} = {75, 75 ± 77, 75 ± 2 · 77, · · ·}.<br />

2.7 Der kleine Satz von Fermat<br />

Sei (G, ·) eine (multiplikativ geschriebene) endliche, abelsche Gruppe <strong>und</strong> x ∈ G.<br />

Wir setzen<br />

〈x〉 := {x k | k ∈ N} = {1, x, x 2 , x 3 , · · ·} ⊂ G.<br />

Da G endlich war, muß diese Teilmenge 〈x〉 von G ebenfalls endlich sein. Somit<br />

müssen in der Liste 1, x, x 2 , · · · Wiederholungen vorkommen, d.h. es muß<br />

natürliche Zahlen n < m mit x n = x m geben. Daraus folgt aber x m−n = 1. Sei<br />

ord(x) die kleinste positive natürliche Zahl mit x ord(x) = 1. Diese Zahl ord(x)<br />

wird die Ordnung von x genannt.<br />

Sei k ∈ Z. Wir dividieren mit Rest: k÷ord(x) = q Rest r, d.h. k = qord(x)+r mit<br />

r ∈ {0, 1, · · · , ord(x) − 1}. Daraus folgt x k = (x ord(x) ) q x r = x r . (Insbesondere<br />

gilt: Genau dann ist x k = 1, wenn k durch ord(x) teilbar ist.) Jedes Element<br />

von 〈x〉 ist also von der Form x k mit k ∈ {0, 1, · · · , ord(x) − 1}. In der Tat gilt<br />

also<br />

〈x〉 = {1, x, x 2 , · · · , x ord(x)−1 },<br />

44


<strong>und</strong> dies ist eine Menge der Mächtigkeit |〈x〉| = ord(x).<br />

Die Menge 〈x〉 ist sogar eine Untergruppe von G: Man sieht sofort, dass sie<br />

mutiplikativ abgeschlossen ist <strong>und</strong> 1 enthält. Sei k ∈ {0, · · · , ord(x) − 1}. Dann<br />

gilt x k · x ord(x)−k = x ord(x) = 1. Dies liefert die Existenz inverser Elemente.<br />

Beispiel: Wir rechnen in der 6-elementigen Gruppe<br />

F × 7 = (Z/7Z)× = {[1], [2], [3], [4], [5], [6]}.<br />

Wir berechnen die Potenzen einiger Elemente:<br />

k 0 1 2 3 4 5 6<br />

[2] k [1] [2] [4] [1] [2] [4] [1]<br />

[3] k [1] [3] [2] [6] [4] [5] [1]<br />

[4] k [1] [4] [2] [1] [4] [2] [1]<br />

[5] k [1] [5] [4] [6] [2] [3] [1]<br />

[6] k [1] [6] [1] [6] [1] [6] [1]<br />

Man sieht nun z.B., daß 3 das kleinste k mit [2] k = [1] ist, d.h. ord([2]) = 3.<br />

Die Menge 〈[2]〉 besteht aus den Potenzen von [2], also aus den Elementen der<br />

ersten Zeile: 〈[2]〉 = {[1], [2], [4]}. So kann man ord(x) <strong>und</strong> 〈x〉 für jedes x ∈ F × 7<br />

bestimmen:<br />

x ord(x) 〈x〉<br />

[1] 1 {[1]}<br />

[2] 3 {[1], [2], [4]}<br />

[3] 6 {[1], [2], [3], [4], [5], [6]} = F × 7<br />

[4] 3 {[1], [2], [4]}<br />

[5] 6 {[1], [2], [3], [4], [5], [6]} = F × 7<br />

[6] 2 {[1], [6]}<br />

In obiger Tabelle ist jede vorkommende Elementordung ein Teiler von |F × 7 | =<br />

ϕ(7) = 6. Dies gilt allgemein:<br />

Satz 2.7.1 Sei G eine endliche, abelsche Gruppe. Für alle x ∈ G gilt ord(x) |<br />

|G|. Insbesondere gilt x |G| = 1 für alle x ∈ G.<br />

Beweis: Wir haben oben gesehen, daß |〈x〉| = ord(x) gilt <strong>und</strong> daß 〈x〉 eine<br />

Untergruppe von G ist. Nach 2.4.4 ist die Mächtigkeit einer jeden Untergruppe<br />

von G ein Teiler von |G|. Daraus folgt ord(x) | |G| <strong>und</strong> das impliziert x |G| = 1<br />

für alle x ∈ G.<br />

□<br />

Wer lieber mit der Relation − = − mod N als mit Restklassen arbeitet, wird<br />

folgende Fassung begrüßen:<br />

Folgerung 2.7.2 (Kleiner Satz von Fermat) Sei N ≥ 2. Für jede zu N<br />

teilerfremde Zahl a ∈ Z gilt a ϕ(N) = 1 mod NZ .<br />

45


Beweis: Weil a zu N teilerfremd ist, gilt [a] ∈ (Z/NZ) × . Ferner gilt |(Z/NZ) × | =<br />

ϕ(N) nach Definition der Eulerschen ϕ-Funktion. Obiger Satz liefert [a] ϕ(N) =<br />

[1], d.h. a ϕ(N) = 1 mod N. □<br />

Folgerung 2.7.3 Sei p eine Primzahl. Dann gilt a p = a mod pZ für alle a ∈ Z.<br />

Beweis: Nun gilt ϕ(p) = p − 1. Wenn a zu p teilerfremd ist, dann liefert 2.7.2,<br />

daß a p−1 = 1 mod pZ mithin a p = a mod pZ gilt. Wenn a nicht zu p teilerfremd<br />

ist, dann muß a = 0 mod pZ gelten <strong>und</strong> daraus folgt ebenfalls a p = a mod p.□<br />

46


Kapitel 3<br />

Das Public-Key-Verfahren<br />

von Rivest, Shamir <strong>und</strong><br />

Adleman<br />

3.1 Der Potenzierungsalgorithmus Square and<br />

Multiply<br />

Bei vielen Berechnungen, die im Zusammenhang mit RSA auftreten, müssen<br />

hohe Potenzen in Z/NZ berechnet werden. Wir stellen einen schnellen Algorithmus<br />

dafür vor.<br />

Sei N ≥ 2 eine (evtl. sehr große) natürliche Zahl. Vorab sei erwähnt, dass man<br />

bei längeren Rechnungen in Z/NZ nach jedem einzelnen Teilschritt modulo N<br />

reduzieren sollte. (Beispiel: Rechne nicht 44 · 123 · 42 = 227304 = 4 mod 5,<br />

sondern 44 · 123 · 42 = 4 · 3 · 2 = 12 · 2 = 2 · 2 = 4 mod 5.)<br />

Sei nun (G, ·) ein abelsches Monoid. Eine Routine zur Berechnung des Produktes<br />

zweier Elemente liege bereits vor. Es ist rechentechnisch ungünstig, zur<br />

Berechnung von x n (x ∈ G, n ∈ N) die Definitionsformel<br />

x n = x · x · · · x<br />

} {{ }<br />

n-mal<br />

heranzuziehen. Dies würde für die Berechnung von x n genau n − 1 Multiplikationen<br />

in Z/NZ erfordern.<br />

Besser ist folgendes Vorgehen. Zuerst berechnet man die 2-adische Entwicklung<br />

des Exponenten n = a 0 + a 1 2 + a 2 2 2 + ·a m 2 m (a i ∈ {0, 1}). Die a i können durch<br />

die Formeln 1 n = a 0 mod 2, a k = n−(a0+···+a k−12 k−1 )<br />

2 k mod 2 rekursiv berechnet<br />

1 Vgl. Übungsblatt 2, Aufg. 3<br />

47


werden. Dann benutzt man die Formel<br />

x n = x a0 (x 2 ) a1 (x 4 ) a2 (x 8 ) a3 · · · (x 2m ) am .<br />

Die dabei auftretenden Ausdrücke x 2k können durch k-maliges Quadrieren berechnet<br />

werden. Bei dieser Berechnung von x 2k fallen nur k <strong>und</strong> nicht 2 k − 1<br />

Multiplikationen an; das ist der entscheidende Vorteil!<br />

Algorithmus 3.1.1 (Square <strong>und</strong> Multiply Algorithmus)<br />

Eingabe: x ∈ G, n ∈ N.<br />

Initialisierung: y := 1.<br />

While n ≠ 0 do<br />

Berechne a ∈ {0, 1}, q ∈ N mit n ÷ 2 = q Rest a.<br />

y := y ∗ x a , x := x ∗ x, n := q.<br />

Gib aus: y.<br />

Man beachte, dass bei jeder Schleife der Wert von n absinkt, während der Wert<br />

y · x n gleichbleibt. Insgesamt treten bei Square and Multiply ca. 2 log 2 (n) Multiplikationen<br />

in G auf, während es bei dem naiven Algorithmus n − 1 Multiplikationen<br />

wären. Wieviel Laufzeit eine einzelne Multiplikation kostet, hängt<br />

natürlich stark von G ab. Wenn z.B. eine einzelne Multiplikation in G eine Sek<strong>und</strong>e<br />

dauert, dann dauert die Berechnung von x 222 mit Square and Multiply<br />

ca. 22 Sek<strong>und</strong>en, während sie mit dem naiven Algorithmus ca 2 22 = 4194304<br />

Sek<strong>und</strong>en, d.h. mehr als ein Jahr Laufzeit benötigen würde.<br />

3.2 Der Miller-Rabin-Primzahltest<br />

Das RSA-Verfahren beruht letzten Endes auf folgendem Phänomen:<br />

Es ist technisch kein Problem, in Sek<strong>und</strong>enschnelle zwei große Primzahlen p <strong>und</strong><br />

q zufällig zu wählen, die jeweils ein paar h<strong>und</strong>ert Dezimalstellen lang sind, <strong>und</strong><br />

das Produkt N := pq zu bilden.<br />

Es ist aus algorithmischer Sicht ein extrem hartes Problem, ein solches Produkt<br />

N in seine Primfaktoren zu zerlegen. Wer nur N, nicht aber p <strong>und</strong> q kennt, kann<br />

also p <strong>und</strong> q nicht mit vertretbarem Zeitaufwand berechnen.<br />

In diesem Abschnitt geht es um die Erzeugung großer Primzahlen. Dieses Problem<br />

läßt sich leicht auf Primzahltests zurückführen. Ein Primzahltest ist<br />

ein Algorithmus, der bei Eingabe einer Zahl N ∈ N mit “prim” oder “zusammengesetzt”<br />

antwortet, je nach dem, ob N eine Primzahl ist oder nicht.<br />

Ein probabilistischer Primzahltest antwortet auf die Eingabe N ∈ N mit<br />

“wahrscheinlich prim” oder mit “zusammengesetzt”. Wenn die Antwort “zusammengesetzt”<br />

lautet, dann ist die Zahl N sicher zusammengesetzt. Die Fehlerwahrscheinlichkeit<br />

des probabilistischen Tests ist die Wahrscheinlichkeit dafür,<br />

48


dass der Test mit “wahrscheinlich prim” antwortet, obwohl N nicht prim ist.<br />

Die Fehlerwahrscheinlichkeit eines guten Tests ist so klein, daß die theoretisch<br />

bestehende Möglichkeit einer fehlerhaften Ausgabe in der Praxis nicht relevant<br />

ist. Vielleicht wäre 10 −7 = 0, 00001% ein guter Wert für die Fehlerwahrscheinlichkeit.<br />

Wenn man einen solchen Primzahltest einmal hat, dann kann man große Zufalls-<br />

Primzahlen erzeugen, indem man mit einer Zufallszahl M der gewünschten<br />

Größenordnung (vielleicht 500 Dezimalstellen) beginnt 2 , <strong>und</strong> dann den Primzahltest<br />

der Reihe nach auf M, M + 1, M + 2, · · · anwendet, bis man eine<br />

Primzahl findet. Man muß dabei nicht allzu lange suchen: Der Anteil der Primzahlen<br />

an den Zahlen in [M, M + δ] ∩ N (δ ∈ N viel kleiner als M) ist nach dem<br />

Primzahlsatz ungefähr 1/ log(M) (dabei ist log der Logarithmus zur Basis e).<br />

Man darf also erwarten, nach ca. log(M) Versuchen auf eine Primzahl zu stoßen.<br />

Wenn M = 10 500 ist, dann wird man nach ca. log(M) = 500 log(10), d.h.<br />

spätestens nach ein paar Tausend Versuchen eine Primzahl finden, wenn man<br />

sukzessive M, M + 1, M + 2 u.s.w. auf Primalität testet.<br />

Wir beschreiben nun den Miller-Rabin-Primzahltest, der in der Praxis gerne<br />

verwendet wird 3 . Wir bemerken vorab: Jede Zahl M ≥ 1 kann man als M = 2 s m<br />

mit einer ungeraden Zahl m <strong>und</strong> s ∈ N schreiben. m <strong>und</strong> s lassen sich aus<br />

M leicht durch sukzessive Probedivision durch 2 berechnen. (Z.B. 96/2 = 48,<br />

48/2 = 24, 24/2 = 12, 12/2 = 6, 6/2 = 3, 3 ist ungerade. Daher gilt 96 = 2 5 · 3.)<br />

Der Miller-Rabin-Test beruht auf dem folgenden Satz.<br />

Satz 3.2.1 Sei N > 2. Sei a ∈ {1, · · · , N − 1} teilerfremd zu N. Schreibe<br />

N − 1 = 2 s m mit m ungerade <strong>und</strong> s ∈ N. Wenn<br />

<strong>und</strong><br />

gilt, dann kann N nicht prim sein.<br />

a m ≠ 1 mod N<br />

a m2r ≠ −1 mod N ∀r ∈ {0, 1, · · · , s − 1}<br />

Beweis: Es genügt die folgende Behauptung zu zeigen: Wenn N prim ist <strong>und</strong><br />

[a] m ≠ [1] (Restklassen in Z/NZ) gilt, dann gibt es ein r ∈ {0, · · · , s − 1} mit<br />

[a] m2r = [−1].<br />

Sei also N eine Primzahl, a zu N teilerfremd, <strong>und</strong> es gelte [a m ] ≠ [1]. Da N<br />

prim ist, muß Z/NZ ein Körper <strong>und</strong> (Z/NZ) × eine Gruppe mit ϕ(N) = N − 1<br />

Elementen sein (siehe 2.5.4 <strong>und</strong> 2.5.5). Mit dem kleinen Satz von Fermat 2.7.2<br />

(siehe auch 2.7.1) folgt also 4 [a] m2s = [a] N−1 = [1].<br />

Die Menge {k ∈ {0, 1, · · · , s}|[a] m2k = [1]} ist demnach nicht-leer; sie enthält ja<br />

s. Sei t das kleinste Element dieser Menge. Dann gilt [a] m2t = [1] <strong>und</strong> wegen<br />

2 Die Konstruktion von Zufallszahlgeneratoren ist ein interessantes Thema; wir gehen aus<br />

Zeitgründen nicht darauf ein.<br />

3 Henri Cohen nennt ihn “The workhorse of primality testing”<br />

4 Für zusammengesetztes N liegen die Dinge völlig anders: Wenn N nicht prim ist, dann<br />

ist sicher Z/NZ kein Körper <strong>und</strong> es gilt sicher ϕ(N) < N − 1. Zwar gilt noch [a] ϕ(N) = [1],<br />

aber in aller Regel wird [a N−1 ] ≠ [1] gelten, außer wenn N prim ist.<br />

49


[a m20 ] ≠ [1] muß t ≥ 1 gelten. Sei r := t − 1 <strong>und</strong> x := [a] m2r . Wegen der<br />

Minimalität von t muß x ≠ [1] sein. Ferner gilt<br />

x 2 = ([a] m2r ) 2 = [a] m2r+1 = [a] m2t = [1].<br />

Weil Z/NZ ein Körper ist, folgt daraus x = [1] oder x = [−1]. Aber x = [1] ist<br />

unmöglich (s.o.). Also gilt x = [a] m2r = [−1], wie gewünscht. □<br />

Für N > 2 ungerade mit N = 2 s m <strong>und</strong> m ungerade. Wir nennen a ∈ {2, 3, · · · , N−<br />

1} einen Zeugen gegen die Primalität von N, wenn eine der folgenden Aussagen<br />

wahr ist:<br />

a) a ist nicht zu n teilerfremd.<br />

b) a ist zu N teilerfremd <strong>und</strong> a m ≠ 1 mod N <strong>und</strong> a m2r ≠ −1 mod N ∀r ∈<br />

{0, · · · , s − 1}.<br />

Man kann leicht eine Routine implementieren, die bei der Eingabe (N, a) prüft,<br />

ob a Zeuge gegen die Primalität von N ist. Um Bedingung a) zu prüfen, kann<br />

man ggT (N, a) mit dem euklidischen Algorithmus 2.2.7 berechnen. Beim Prüfen<br />

von b) ist der Vektor ([a] m20 , a m21 , · · · , [a] m2s−1 ) zu berechnen. Hier kommt<br />

Square and Multiply zum Einsatz.<br />

Klar ist nun folgendes: Wenn es in {2, · · · , N − 1} einen Zeugen gegen die Primalität<br />

von N gibt, dann ist N sicher nicht prim. (Sei a ein solcher Zeuge <strong>und</strong> g<br />

der nicht-negative ggT von N <strong>und</strong> a. Falls g ≠ 1 gilt ist g ≥ 2 ein echter Teiler<br />

von N <strong>und</strong> N ist aus diesem Gr<strong>und</strong> nicht prim. Falls g = 1 gilt, so ist die obige<br />

Bedingung b) erfüllt <strong>und</strong> obiger Satz impliziert, daß N nicht prim sein kann.)<br />

Man wird fragen, ob für zusammengesetztes N auch immer genug Zeugen a ∈<br />

{1, · · · , N − 1} gegen die Primalität von N existieren. Der folgende Satz besagt,<br />

dass die Antwort ja ist:<br />

Satz 3.2.2 Sei N ≥ 2 ungerade. Wenn N zusammengesetzt ist, dann sind mindestens<br />

3 4<br />

der Zahlen im Bereich 1, · · · , N − 1 Zeugen gegen die Nicht-Primalität<br />

von N.<br />

Für den Beweis verweisen wir auf [B], Theorem 6.4.2.<br />

Wenn N zusammengesetzt ist, dann gibt es nach diesem Satz sogar so viele Zeugen<br />

gegen die Primalität von N, daß man höchstwahrscheinlich durch “simples<br />

Herumprobieren” schnell einen solchen Zeugen findet. Wenn N prim ist, dann<br />

gibt es sicher keinen Zeugen gegen die Primalität von N. Dies macht sich der<br />

Miller-Rabin-Test zu Nutze.<br />

Algorithmus 3.2.3 (Miller-Rabin-Test)<br />

Eingabe: N ≥ 2 <strong>und</strong> Steuerparameter B ≥ 2, t ≥ 1.<br />

50


Führe Probedivision durch die Primzahlen ≤ B durch. Diese Primzahlen sollten<br />

vorab in einer Liste gespeichert werden. (Ein vernünftiger Wert für B wäre<br />

vielleicht B = 100 oder B = 1000.) Wenn schon dabei ein Teiler von N gef<strong>und</strong>en<br />

wird, dann gib “N ist nicht prim; (N hat sogar einen nicht-trivialen Teiler<br />

≤ B)” aus <strong>und</strong> halte an.<br />

Wähle t Werte a 1 , · · · a t ∈ {1, 2, · · · , N − 1}. Dies kann per Zufallsgenerator<br />

geschehen. M.E. wäre auch die Wahl a 1 = 2, a 2 = 3, · · · , a t = t + 1 nicht<br />

besonders nachteilig. (Ein vernünftiger Wert für t könnte t = 10 sein.)<br />

Prüfe für jede dieser Zahlen a i , ob a i ein Zeuge gegen die Primalität von N ist.<br />

Wenn dabei ein Zeuge gegen die Primalität gef<strong>und</strong>en wird, gib aus “N ist nicht<br />

prim (<strong>und</strong> dies wird durch a i bezeugt).”<br />

Wenn kein Zeuge gegen die Primalität gef<strong>und</strong>en wird, gib aus “N ist wahrscheinlich<br />

prim”.<br />

Sei ε die Fehlerwahrscheinlichkeit dieses Tests, d.h. die Wahrscheinlichkeit dafür,<br />

dass der Test auf zusammengesetztes N mit “wahrscheinlich prim” antwortet.<br />

Dies passiert genau dann, wenn N zusammengesetzt ist <strong>und</strong> bei t Wahlen<br />

a i ∈ {1, 2, · · · , N − 1} lauter Nicht-Zeugen gef<strong>und</strong>en wurden, obwohl höchstens<br />

1/4 der Elemente von {1, · · · N − 1} Nicht-Zeugen sind. Die Fehlerwahrscheinlichkeit<br />

erfüllt also ε ≤ (1/4) t (z.B ε ≤ 0.000095% für t = 10). Wenn man<br />

den Parameter t erhöht, dann verringert sich die Fehlerwahrscheinlichkeit auf<br />

Kosten der Laufzeit.<br />

Algorithmus 3.2.4 Zur Wahl einer großen Zufallsprimzahl wählt man eine<br />

Zufallszahl M <strong>und</strong> wendet den Miller-Rabin-Test mit Parameter t 1 (t 1 hier nicht<br />

allzu groß, vielleicht t 1 = 5 oder t 1 = 10) auf M, M + 1, M + 2, · · · an, bis das<br />

Ergebnis “M + k ist wahrscheinlich prim” erzielt wird.<br />

Wer auf Nummer sicher gehen will, wird vielleicht abschließend noch einmal<br />

einen Miller-Rabin-Test auf M + k anwenden, aber jetzt mit sehr hohem Parameter<br />

t 2 (z.B. t 2 = 30). Sollte die Antwort dann wider aller Erwartungen “M +k<br />

ist nicht prim” lauten, so beginnt man noch einmal von vorne. Anderenfalls ist<br />

M + k mit sehr hoher Wahrscheinlichkeit prim.<br />

3.3 RSA<br />

Wir erläutern nun das <strong>Kryptographie</strong>verfahren RSA. Dies war das erste Public-<br />

Key-Verfahren <strong>und</strong> ist bis heute das wichtigste.<br />

Alice möchte sich von jemandem, sagen wir Bob, oder sogar von jedermann verschlüsselt<br />

Nachrichten schicken lassen können. Sie (bzw. die auf Ihrem Rechner<br />

installierte Software) wählt dazu zwei große Zufalls-Primzahlen p <strong>und</strong> q (hier<br />

kann sie den Miller-Rabin-Test 3.2.3 verwenden) mit p ≠ q <strong>und</strong> bildet das Produkt<br />

N = pq. Derzeit (2007) gilt es als sicher, mit Primzahlen p <strong>und</strong> q jeweils<br />

51


von der Länge ca. 1024 Bit (d.h. ca. 300 Dezimalstellen) zu arbeiten. N hat<br />

dann ca. 600 Dezimalstellen.<br />

Alice wählt des weiteren eine zu ϕ(N) = (p − 1)(q − 1) (vgl. 2.6.3) teilerfremde<br />

Zahl e ∈ {0, 1, · · · , ϕ(N) − 1}. Nach 2.5.1 ist e + ϕ(N)Z Z/ϕ(N)Z eine Einheit,<br />

d.h. es existiert ein d ∈ {0, 1, · · · , ϕ(N) − 1} mit ed = 1 mod ϕ(N)Z. Alice<br />

berechnet diese Zahl d mit dem euklidischen Algorithmus 2.5.3.<br />

Von den bisher errechneten Daten (p, q, N, ϕ(N), e, d) macht Alice nun einen<br />

Teil öffentlich (z.B. auf ihrer Homepage) <strong>und</strong> behält den anderen Teil für sich<br />

(z.B. abgespeichert auf einem USB Stick).<br />

Geheim bleibt p, q, ϕ(N), d, d.h. nur Alice (<strong>und</strong> nicht einmal Bob) kennt diese<br />

Daten.<br />

Öffentlich gemacht wird N <strong>und</strong> e. Insbesondere kennt Bob diese Daten; aber<br />

auch jeder potentielle Angreifer kennt sie.<br />

(N, e) ist der öffentliche Verschlüsselungsschlüssel (kurz: V-Schlüssel) <strong>und</strong> d ist<br />

der geheime (nur Alice kennt ihn) Entschlüsselungsschlüssel (kurz: E-Schlüssel).<br />

Übertragen werden Elemente von P := Z/NZ = {[0], · · · , [N−1]}. Wenn Bob die<br />

Nachricht m ∈ Z/NZ an Alice übermitteln will, so berechnet er c := m e . Für<br />

die Potenzierung kann der Square and Multiply Algorithmus 3.1.1 verwendet<br />

werden. Bob übermittelt dann c.<br />

Alice empfängt c = m e <strong>und</strong> berechnet c d (mit dem Square and Multiply Algorithmus).<br />

Nach dem folgenden Satz ist c d = m; sie erhält also die ursprüngliche<br />

Nachricht m zurück. Ein Angreifer Oskar, der den gesamten Dialog abhört, kann<br />

m nicht durch die selbe Rechnung m = c d wie Alice ermitteln, weil er d nicht<br />

kennt. Mehr dazu später.<br />

Satz 3.3.1 Es gilt m ed = m.<br />

Beweis: Nach 2.6.1 hat man einen bijektiven Ringhomomorphismus<br />

f : Z/NZ → Z/pZ × Z/qZ<br />

Sei (m 1 , m 2 ) := f(m). Es genügt m ed<br />

1 = m 1 <strong>und</strong> m ed<br />

2 = m 2 zu zeigen. (Daraus<br />

folgt nämlich f(m ed ) = f(m) <strong>und</strong> das impliziert m ed = m, weil f injektiv ist.)<br />

Wegen ϕ(N) = (p − 1)(q − 1) <strong>und</strong> ed = 1 mod ϕ(N)Z gibt es ein k ∈ N mit<br />

ed = 1 + k(p − 1)(q − 1). Falls m 1 ∈ (Z/pZ) × = F × p \ {[0]} eine Einheit ist, so<br />

gilt m p−1<br />

1 = 1 nach dem kleinen Satz von Fermat 2.7.2. Daraus folgt<br />

m ed<br />

1 = m 1+k(p−1)(q−1)<br />

1 = m 1 (m p−1<br />

1 ) k(q−1) = m 1 · 1 k(q−1) = m 1 .<br />

Falls m 1 = 0 in Z/pZ gilt, so hat man offensichtlich m ed<br />

1 = m 1 . Also gilt in<br />

jedem Fall m ed<br />

1 = m 1 .<br />

Völlig analog kann man zeigen, daß m ed<br />

2 = m 2 gilt. □<br />

52


Beispiel: Wir gehen durch ein Beispiel mit kleinen 5 Zahlen. Sagen wir, Alice<br />

wählt p = 11 <strong>und</strong> q = 31. Dann ist N = 341 <strong>und</strong> ϕ(N) = 10 · 30 = 300. Ferner<br />

wählt Alice e = 7 als V-Schlüssel <strong>und</strong> berechnet daraus den E-Schlüssel d = 43<br />

(beachte: ed = 7 · 43 = 301 = 1 mod 300). Alice macht N = 341 <strong>und</strong> e = 7 auf<br />

ihrer Homepage publik.<br />

Wenn Bob die Nachricht m = 10 an Alice übermitteln will, dann berechnet er<br />

m e = 10 7 = 175 mod 341 <strong>und</strong> übermittelt 175.<br />

Alice empfängt 175 <strong>und</strong> kann dann die Rechnung (m e ) d = 175 43 = 10 durchführen,<br />

um m aus m e zu gewinnen; sie kennt ja d.<br />

Angriffe auf RSA<br />

Nehmen wir an, ein Angreifer Oskar hat den gesamten Dialog abgehört, also<br />

Oskar kennt N, e, m e ,<br />

Bob kennt N, e, m, m e <strong>und</strong><br />

Alice kennt N, p, q, ϕ(N), e, d, m e , m.<br />

1. Nehmen wir an, es gelingt Oskar, N zu faktorisieren, d.h. p <strong>und</strong> q zu<br />

bestimmen. Dann kann er leicht ϕ(N) = (p−1)(q−1) bestimmen <strong>und</strong> dann<br />

das d ∈ {0, 1, · · · , ϕ(N) − 1} mit ed = 1 mod ϕ(N) berechnen, genau wie<br />

Alice es eingangs getan hat. Das entspricht nur einer Inversenbildung in<br />

(Z/ϕ(N)Z) × mit dem euklidischen Algorithmus. Wenn er den E-Schlüssel<br />

d einmal hat, dann kann er m aus m e durch die Rechnung m = (m e ) d<br />

(Square and Multiply!) finden. Er kann dann jede abgehörte Nachricht an<br />

Alice entschlüsseln.<br />

Die Sicherheit von RSA beruht also wesentlich darauf, dass es heute für<br />

“technisch unmöglich” gehalten wird, ein Produkt aus zwei großen Zufalls-<br />

Primzahlen (sagen wir je ca. 1024 Bit) in seine Primfaktoren zu zerlegen.<br />

Fortschritte im Bereich der Hardware oder im Bereich der Faktorisierungsalgorithmen<br />

würden eine massive Bedrohung für RSA darstellen. Solange<br />

nur kleinere Fortschritte gemacht werden, kann man allerdings einfach die<br />

Schlüssellänge nach oben anpassen.<br />

2. Natürlich würde es Oskar genügen, ϕ(N) zu finden. Das ist aber auch<br />

nicht leichter als das Faktorisieren von N. Wer ϕ(N) kennt, der kennt<br />

ϕ(N) = (p − 1)(q − 1) = N − p − q + 1 <strong>und</strong> kann p <strong>und</strong> q durch das<br />

Auflösen der Gleichungen pq = N, p + q = N + 1 − ϕ(N) ermitteln. (Dies<br />

läuft auf eine quadratische Gleichung in p hinaus.)<br />

3. Ebenso würde es Oskar genügen, an d zu kommen. Man kann auch hier<br />

beweisen, daß das ungefähr genauso schwer ist, wie das Faktorisieren von<br />

N. D.h.: Wer d kennt, der kann p <strong>und</strong> q leicht berechnen.<br />

4. Oskar könnte auch versuchen, m aus m e zu bestimmen, ohne d zu errechnen,<br />

d.h. ohne die Gleichung m = (m e ) d zu benutzen. Es ist meines<br />

Wissens nicht bekannt, ob das genauso schwer ist wie das Faktorisieren<br />

von N, <strong>und</strong> das wird als Nachteil von RSA angesehen.<br />

5 viel zu klein, um sicher zu sein!<br />

53


Es wird vermutet, daß es keinen Polynomialzeit-Algorithmus zur Faktorisierung<br />

einer b-Bit-Zahl N, die Produkt zweier großer Primzahlen ist, gibt. Ein Beweis<br />

dafür wurde allerdings bisher nicht erbracht. Das sogenannte Zahlkörpersieb<br />

ist derzeit einer der besten Faktorisierungsalgorithmen; seine Laufzeit ist<br />

≤ O(exp( 3√ 8b log(b) 2 )), also nicht polynomial. Mit ihm wurde F 9 = 2 512 + 1<br />

faktorisiert.<br />

Faktorisierungsalgorithmen stehen seit jeher im Zentrum der mathematischen<br />

Forschung, <strong>und</strong> daher wird es vermutlich schnell publik, wenn jemand einen<br />

neuen, schnelleren Faktorisierungsalgorithmus findet.<br />

Die Firma RSA hat 2001 eine Liste von Zahlen in das Internet gestellt<br />

(siehe http://www.rsa.com/rsalabs/node.asp?id=2092) <strong>und</strong> für das Faktorisieren<br />

der Zahlen ein jeweiliges Preisgeld ausgesetzt. Jede Zahl in der Liste<br />

ist ein Produkt zweier Primzahlen <strong>und</strong> jede trägt einen Namen der Form RSA-b<br />

wobei b die Bitlänge der entsprechenden Zahl ist. Bis jetzt (also 6 Jahre später)<br />

sind nur 2 davon faktorisiert worden <strong>und</strong> zwar RSA-576 (2003) <strong>und</strong> RSA-640<br />

(2005). Es waren jeweils mehrere Wissenschaftler beteiligt. In beiden Fällen wurde<br />

mit dem Zahlkörpersieb gearbeitet. Bereits bei RSA-576 wurde an Rechnern<br />

verschiedener Institutionen (u.a. Uni Bonn, MPI Bonn, IEM Essen) parallel<br />

gerechnet bei einer Laufzeit von mehreren Monaten! Der Preis für das Faktorisieren<br />

von RSA-2048 wäre 200.000 US-Dollar.<br />

Einige Sicherheitsvorkehrungen:<br />

Alice sollte e nicht allzu klein wählen. Wenn nämlich die Nachricht [m] ist mit<br />

m ∈ {0, · · · , N − 1} <strong>und</strong> m e ≤ N − 1 gilt, dann kann ein Angreifer m aus m e<br />

durch Ziehen der e-ten Wurzel in dem Körper R errechnen. (In obigem Beispiel<br />

geht das nicht! Die Berechnung von 7√ 175 in R nützt dort einem Angreifer gar<br />

nichts.)<br />

Die Primzahlen p <strong>und</strong> q sollten nicht allzu nahe beisammen sein. Sonst könnte<br />

ein Angreifer einfach von s := floor( √ N) ausgehend N auf Teilbarkeit durch s,<br />

s + 1, s + 2, · · · prüfen. Theoretisch wird er dabei irgendwann einen der beiden<br />

Teiler von N finden, <strong>und</strong> dann ist auch der andere Teiler schnell gef<strong>und</strong>en; wenn<br />

aber p <strong>und</strong> q nicht sehr nahe beisammen liegen (z.B. p 1023 Bit <strong>und</strong> q 1025 Bit),<br />

dann wird dieser Angriff aus Laufzeitgründen unmöglich.<br />

Das Verschlüsseln von kurzen Texten mit RSA<br />

Sei A ein Alphabet <strong>und</strong> α := |A|. Sei n : A → {0, 1, · · · , α − 1} eine Bijektion.<br />

RSA verschlüsselt zunächst Elemente von Z/NZ. Man kann es aber in modifizierter<br />

Form auch zum Verschlüsseln von kurzen Texten über A verwenden. Z.B.<br />

könnte man vorab vereinbaren, dass dem Text (x 0 , x 1 , · · · , x k ), der so kurz sein<br />

muß, daß α k+1 < N, immer die Restklasse von m = ∑ k<br />

i=0 n(x i)α i entsprechen<br />

soll. Um aus dieser Zahl m den Text zurückzugewinnen, muß man m α-adisch<br />

entwickeln. Dadurch erhält man die n(x i ) <strong>und</strong> daraus leicht die x i .<br />

Z.B. könnte A = {A, B, · · · , Z} <strong>und</strong> n(A) = 0, n(B) = 1, n(C) = 2, · · · gelten.<br />

HALLO entspricht dann der Zahl 7 + 0 · 26 + 11 · 26 2 + 11 · 26 3 + 14 · 26 4 , denn<br />

54


n(H) = 7, n(A) = 0, n(L) = 11 <strong>und</strong> n(O) = 14. Was bedeutet dann die Zahl<br />

215? Die 26-adische Entwicklung ist 215 = 7 + 8 · 26. Ferner gilt n −1 (7) = H<br />

<strong>und</strong> n −1 (8)) = I. Die Zahl 215 entspricht also dem Text HI.<br />

Etwas längere Texte können blockweise übertragen werden. Für die Übertragung<br />

großer Datenmengen ist RSA nicht geeignet, weil dann die Ver- <strong>und</strong> Entschlüsselung<br />

zu lange dauern. Hier ist es besser, mit RSA nur einen Schlüssel zu<br />

übermitteln, der dann für eine Private-Key-Sitzung (z.B. mit AES) verwendet<br />

wird.<br />

3.4 Faktorisierung mit der Fermat-Methode<br />

Sei N = pq ein Produkt von zwei großen Primzahlen p <strong>und</strong> q. Falls p <strong>und</strong> q<br />

sehr nah beisammen liegen, kann man N durch den folgenden “naiven” Ansatz<br />

faktorisieren: Man sucht ab m := ⌈ √ N)⌉ nach einem Teiler von N. Die folgende<br />

Fermat-Methode ist eine weitgehende Verbesserung dieses Ansatzes.<br />

Wir können q < p annehmen. Sei im folgenden 6 x := 1 2 (p+q) <strong>und</strong> y := 1 2 (p−q).<br />

Dann gilt p = x + y <strong>und</strong> q = x − y <strong>und</strong> es folgt<br />

N = pq = (x + y)(x − y) = x 2 − y 2 .<br />

Nach der Ungleichung vom arithmetischen <strong>und</strong> geometrischen Mittel gilt<br />

√ √ 1<br />

N = pq ≤ (p + q) = x.<br />

2<br />

Wer N faktorisieren möchte, wird ab ⌈N⌉ nach x suchen.<br />

Algorithmus 3.4.1 (Faktorisierungsmethode von Fermat)<br />

Eingabe: Ein Produkt N von zwei ungeraden Primzahlen.<br />

x := ⌈ √ N⌉<br />

while(issquare(x 2 − N) = false, x = x + 1)<br />

y = √ x 2 − N<br />

p = x + y<br />

q = x − y<br />

Ausgabe: N ist Produkt von p <strong>und</strong> q.<br />

Satz 3.4.2 Sei N ein Produkt von zwei ungeraden Primzahlen p > q. Sei α ∈ R<br />

eine Zahl mit |p − q| ≤ α 4√ N. Dann findet man mit dem obigen Algorithmus p<br />

<strong>und</strong> q nach höchstens α2<br />

8 Schritten.<br />

6 Wer N Faktorisieren möchte, kennt N, nicht aber p, q, x, y.<br />

55


Beweis. Sei wieder x := 1 2 (p + q) <strong>und</strong> y := 1 2 (p − q). Sei m = ⌈√ N⌉. Dann<br />

wird die While-Schleife in obigem Algorithmus k = x − m mal durchlaufen.<br />

Wir wollen k nach oben abschätzen. Offenbar gilt y ≤<br />

4√ √ α<br />

2 N, d.h. y 2 ≤ α2<br />

4 N.<br />

Ferner gilt<br />

Daraus folgt<br />

y 2 = x 2 − N = m 2 + 2km + k 2 − N ≥ 2km ≥ 2k √ N.<br />

α 2 √ √<br />

N ≥ 2k N,<br />

4<br />

also k ≤ α2<br />

4 . □<br />

Beispiel. Nehmen wir an, p <strong>und</strong> q sind 500-Bit-Zahlen (insbes. ist N = pq eine<br />

1000-Bit-Zahl) <strong>und</strong> p − q ist nur eine 255-Bit-Zahl. Dann haben p <strong>und</strong> q exakt<br />

die selbe Bitlänge <strong>und</strong> die ersten 245 Dualziffern stimmen überein. (D.h. p <strong>und</strong><br />

q liegen sehr nah beisammen.)<br />

Nun ist 4√ N eine 250-Bit-Zahl,<br />

4√<br />

N ≈ 2 250 , <strong>und</strong> mit α = 2 6 wird sicher p − q ≤<br />

α 4√ N gelten. Die Fermat-Faktorisierungsmethode wird also nur α 2 /8 = 2 9 =<br />

512 Schritte benötigen, um die Teiler von N zu finden. Diese Rechnung läßt sich<br />

völlig problemlos auf einem handelsüblichen Laptop durchführen!<br />

Beispiel. Ganz anders verhält es sich mit der Laufzeit, wenn q eine 500-Bit-<br />

Zahl <strong>und</strong> p um ein paar Bit länger (etwa eine 252-Bit-Zahl) ist als q: Nehmen<br />

wir an, p ≥ 4q (also etwa p um zwei Bit länger als q). Dann gilt<br />

x − √ N = 1 2 (p + q) − √ pq = 1 2 (√ p − √ q) 2 ≥ 1 2 (√ 4q − √ q) 2 = q 2 ,<br />

d.h. das Fermat-Faktorisierungsverfahren würde hier ≈ 2 500 Schritte benötigen!<br />

Dies ist nach dem heutigen Stand der Technik völlig unpraktikabel!<br />

Sicherheitsvorkehrung für RSA. Um einen Angriff via Fermat-Faktorisierung<br />

abzuwehren, soll man als RSA-Modul ein Produkt N = pq von großen Primzahlen<br />

nehmen, wobei p um ein paar Bit größer sein sollte als q.<br />

3.5 Faktorisierung mit der (p − 1)-Methode von<br />

Pollard<br />

Mit der (p − 1)-Methode von Pollard kann man, unter gewissen Umständen,<br />

für eine gegebene (große) zusammengesetzte natürliche Zahl N einen nichttrivialen<br />

Teiler t von N finden. “Nicht-trivial” soll “mit t ∈ {2, · · · , N − 1}”<br />

bedeuten. Wiederholte Anwendung kann evtl. auf die gesamte Faktorisierung<br />

von N führen.<br />

Sei B ≥ 0. Eine Zahl n heißt B-glatt, wenn es keine Primzahlpotenz q > B<br />

gibt, die Teiler von n ist. (Z.B. ist 96 = 2 5 ·3 nicht 10-glatt (2 5 = 32 ist ja größer<br />

als 10), wohl aber 40-glatt.) Die p−1-Methode funktioniert für solche N gut, die<br />

einen Primfaktor p haben, für den p − 1 B-glatt ist, mit einer nicht allzugroßen<br />

56


Schranke B. Für eine gegebenes N kann man natürlich a priori nicht entscheiden,<br />

ob N einen solchen Primfaktor hat, solange man die Primfaktoren von N nicht<br />

kennt. Wer N faktorisieren will, wird also vielleicht “auf gut Glück” versuchen,<br />

ob die (p − 1)-Methode einen Teiler von N liefert oder ob sie fehlschlägt.<br />

Nehmen wir an N ist zusammengesetzt, p ist ein Primteiler von N <strong>und</strong> p − 1 ist<br />

B-glatt. Sei P die Menge der Primzahlpotenzen <strong>und</strong> 7<br />

k := k B :=<br />

∏<br />

q∈P,q≤B<br />

Diese Zahl hängt nur von B ab. (Z.B. gilt k 15 = 2 · 3 · 4 · 5 · 7 · 8 · 9 · 11 · 13.)<br />

Weil wir p − 1 als B-glatt angenommen haben, muß p − 1 ein Teiler von k B sein:<br />

D.h. es wird k B = (p − 1)j mit j ∈ N gelten 8 . Sei nun a ≥ 2 beliebig. Dann<br />

gilt a p−1 = 1 mod p nach dem kleinen Satz von Fermat 2.7.2 <strong>und</strong> daraus folgt<br />

a k B<br />

= (a (p−1) ) j = 1 j = 1 mod p, d.h. p | (a k B<br />

− 1). Daher wird (a k B<br />

− 1) nicht<br />

zu N teilerfremd sein. Sei g ∈ ggT (a k B<br />

− 1, N). Dann gilt |g| > 1 <strong>und</strong> wenn<br />

|g| < N gilt, dann hat man in |g| einen nicht-trivialen Teiler von N gef<strong>und</strong>en.<br />

q.<br />

Algorithmus 3.5.1 ((p − 1)-Methode von Pollard)<br />

Eingabe: N ∈ N. Steuerparameter B ∈ N <strong>und</strong> a ≥ 2.<br />

Berechne k B .<br />

Berechne das nicht-negative g ∈ ggT (a k B<br />

− 1, N) mit dem euklidischen Algorithmus<br />

2.2.7.<br />

Wenn g = 1 oder g = N, dann gib aus “Kein nicht-trivialer Teiler von N<br />

gef<strong>und</strong>en. Sie können versuchen B zu erhöhen.”<br />

Wenn g ≠ 1 <strong>und</strong> g ≠ N, dann gib aus “g ist ein nicht-trivialer Teiler von N”<br />

Um Angriffe mit der (p − 1)-Methode zu verhindern, wird bei RSA empfohlen,<br />

die folgende Sicherheitsvorkehrung zu treffen.<br />

Sicherheitsvorkehrung für RSA. Um einen Angriff via der p − 1-Methode<br />

abzuwehren, soll man als RSA-Modul ein Produkt N = pq von großen Primzahlen<br />

nehmen, wobei p <strong>und</strong> q so beschaffen sind, dass p − 1 <strong>und</strong> q − 1 jeweils<br />

einen großen Primfaktor haben.<br />

7 Man kann das Produkt durch das kgV ersetzen.<br />

8 Man weiß, daß das so ist, obwohl man j <strong>und</strong> p nicht explizit kennt. Die Zahl k B kennt<br />

man aber explizit.<br />

57


Kapitel 4<br />

Diskreter Logarithmus<br />

4.1 Primitivwurzeln <strong>und</strong> diskreter Logarithmus<br />

Sei (G, ·) eine abelsche Gruppe. Für x ∈ G sei 〈x〉 = {x k : k ∈ Z}. Wenn nun<br />

〈x〉 = G gilt, dann wird x ein Erzeuger von G genannt. Das ist genau dann<br />

der Fall, wenn jedes Element in G eine Potenz von x ist. Nicht jede Gruppe hat<br />

einen Erzeuger. Wenn in G ein Element existiert, das Erzeuger von G ist, dann<br />

nennt man G eine zyklische Gruppe.<br />

Sei nun G endlich. ord(x) ist die kleinste positive Zahl mit x ord(x) = 1. Es gilt,<br />

ohne Mehrfachauflistung von Elementen geschrieben, 〈x〉 = {1, x, · · · , x ord(x)−1 }.<br />

Ferner gilt ord(x) = |〈x〉| <strong>und</strong> nach 2.7.1 ist ord(x) immer ein Teiler von |G|.<br />

Ferner gilt für k ∈ Z: Genau dann ist x k = 1, wenn k ∈ ord(x)Z. Für k ∈ Z sei<br />

[k] := [k] ord(x) ∈ Z/ord(x)Z die entsprechende Restklasse. Dann hat es Sinn<br />

zu definieren.<br />

x [u] := x u<br />

für [u] ∈ Z/ord(x)Z<br />

Offenbar ist x ein Erzeuger von G genau dann, wenn ord(x) = |G| gilt.<br />

Beispiel: Wir betrachten eine “Potenzierungstafel” für die 6-elementige Gruppe<br />

G := F × 7 . Sei [a] := [a] 7.<br />

k 0 1 2 3 4 5 6<br />

[1] k [1] [1] [1] [1] [1] [1] [1]<br />

[2] k [1] [2] [4] [1] [2] [4] [1]<br />

[3] k [1] [3] [2] [6] [4] [5] [1]<br />

[4] k [1] [4] [2] [1] [4] [2] [1]<br />

[5] k [1] [5] [4] [6] [2] [3] [1]<br />

[6] k [1] [6] [1] [6] [1] [6] [1]<br />

Die linke Spalte von Einsen ergibt sich, da x 0 = [1] für alle x ∈ G gilt. Die<br />

rechte Spalte von Einsen war nach dem Satz von Fermat zu erwarten; es gilt<br />

x |G| = [1] für alle x ∈ G <strong>und</strong> |G| = 6.<br />

.<br />

58


Man sieht: ord([1]) = 1, ord([6]) = 2, ord([2]) = ord([4]) = 3 <strong>und</strong> ord([3]) =<br />

ord([5]) = 6 = |G|. Ebenso sieht man, daß 〈[1]〉 = {[1]}, 〈[6]〉 = {[1], [6]},<br />

〈[2]〉 = 〈[4]〉 = {[1], [2], [4]} <strong>und</strong> 〈[3]〉 = 〈[5]〉 = F × 7 gilt.<br />

Also sind [3] <strong>und</strong> [5] Erzeuger von G. Die Erzeuger sind genau die Elemente, in<br />

deren Zeile außer in der ganz linken <strong>und</strong> ganz rechten Spalte keine Eins steht.<br />

Da G Erzeuger hat ist G = F × 7 zyklisch. Die Elemente [1], [2], [4], [6] sind keine<br />

Erzeuger von G; ihre Ordnung ist jeweils < |G|.<br />

□<br />

Beispiel: Betrachte nun die “Potenzierungstafel” der Gruppe (Z/8) × = {[1], [3], [5], [7]}<br />

( [a] := [a] 8 ).<br />

k 0 1 2 3 4<br />

[1] k [1] [1] [1] [1] [1]<br />

[3] k [1] [3] [1] [3] [1] .<br />

[5] k [1] [5] [1] [5] [1]<br />

[7] k [1] [7] [1] [7] [1]<br />

Also gilt ord([1]) = 1 <strong>und</strong> ord([3]) = ord([5]) = ord([7]) = 2 < 4 = |G|. Also hat<br />

die Gruppe G keinen Erzeuger, d.h. G ist nicht zyklisch.<br />

□<br />

Mit Hilfe der Potenzierungstafel einer endlichen abelschen Gruppe G kann man<br />

also Elementordungen bestimmen, prüfen ob G zyklisch ist <strong>und</strong> ggfls. die Erzeuger<br />

von G bestimmen. Man beachte aber: Der Aufwand für das Anlegen<br />

einer einzelnen Zeile der Potenzierungstafel ist exponential in der Bitlänge von<br />

|G|. Man braucht Sätze, mit deren Hilfe sich Aufgaben wie oben schneller lösen<br />

lassen.<br />

Will man für ein Element x ∈ G entscheiden, ob x ein Erzeuger von G ist, so<br />

könnte man für jedes t mit 1 < t < |G| (oder besser: für jeden Teiler t von |G|<br />

mit t < |G|) prüfen, ob x t ≠ 1 gilt. Wenn die PFZ von |G| bekannt ist, so gibt<br />

es einen viel schnelleren Test, der auf dem folgenden Satz beruht.<br />

Satz 4.1.1 Sei x ∈ G <strong>und</strong> n ∈ N. Gelte x n = 1. Genau dann gilt ord(x) = n,<br />

wenn x n p ≠ 1 für jeden Primteiler p von n gilt.<br />

Beweis: Wenn ord(x) = 1 gilt, dann gilt x t ≠ 1 für jeden Exponent t ≥ 1, der<br />

kleiner ist als n.<br />

Wenn ord(x) ≠ n gilt, dann muß ord(x) < n <strong>und</strong> ord(x) | n gelten. Wenn<br />

n = p e1<br />

1 · · · per r die Primfaktorzerlegung von n ist, dann muß ord(x) = p f1<br />

1 · · · pfr r<br />

mit f i ≤ e i für alle i ∈ {1, · · · , r} gelten, <strong>und</strong> es muß ein j mit f j < e j geben.<br />

p := p j ist dann ein Primteiler von n derart, daß ord(x) Teiler von n/p ist.<br />

Daraus folgt aber x n p = 1. □<br />

Satz 4.1.2 Sei x, y ∈ G k ∈ Z.<br />

1. Sei g ∈ ggT (ord(x), k) mit g ≥ 0. Dann gilt ord(x k ) = ord(x)<br />

g<br />

.<br />

2. Wenn ord(x) zu ord(y) teilerfremd ist, dann gilt ord(xy) = ord(x)ord(y).<br />

59


Beweis: Sei n := ord(x). Offenbar gibt es Zahlen k ′ ∈ N, n ′ ∈ Z mit gk ′ = k<br />

<strong>und</strong> gn ′ = n. Ferner gibt es u, v ∈ Z mit g = uk + vn nach 2.2.7. Es ist<br />

ord(x k ) = n ′ zu zeigen. Man sieht leicht, daß (x k ) n′ = x k′ gn ′ = x ord(x)k′ = 1.<br />

Daher gilt ord(x k ) | n ′ . Angenommen n ′′ ∈ {1, · · · , n ′ − 1} wäre ein Teiler von<br />

n mit (x k ) n′′ = 1. Dann folgte<br />

1 = x ukn′′ = x (g−vn)n′′ = x gn′′ (x nvn′′ ) −1 = x gn′′<br />

<strong>und</strong> gn ′′ wäre kleiner als gn ′ = n. Widerspruch.<br />

Sei n = ord(x) teilerfremd zu m := ord(y). Offenbar gilt (xy) nm = (x n ) m (y m ) n =<br />

1. Sei p ein beliebiger Primteiler von nm. Nach obigem Satz 4.1.1 reicht es<br />

(xy) nm/p ≠ 1 zu zeigen. O.E. gilt p | n. Weil n zu m teilerfremd ist, kann<br />

p kein Teiler von m sein <strong>und</strong> außerdem muß ord(x m ) = n gelten. Also gilt<br />

xy nm/p = (x m ) n p (y m ) n p = (x m ) n p ≠ 1. □<br />

Folgerung 4.1.3 a) Wenn k ein Teiler von ord(x) ist, dann ist ord(x k ) =<br />

ord(x)/k.<br />

b) Wenn k zu ord(x) teilerfremd ist, dann gilt ord(x k ) = ord(x).<br />

c) Genau dann ist x ein Erzeuger von G, wenn x |G|<br />

p<br />

p von |G| gilt. (Dies folgt aus 4.1.1.)<br />

≠ 1 für jeden Primteiler<br />

d) Wenn G zyklisch <strong>und</strong> x ∈ G ein Erzeuger von G ist, dann ist {x u |u ∈<br />

(Z/|G|Z) × } die Menge aller Erzeuger von G. D.h. die anderen Erzeuger<br />

von G sind von der Form x v mit einer Zahl v ∈ {1, · · · , |G|}, die zu |G|<br />

teilerfremd ist. Weitere Erzeuger gibt es nicht. (Dies folgt unmittelbar aus<br />

obigem Satz.)<br />

e) Insbesondere gilt: Eine zyklische Gruppe G hat genau ϕ(|G|) = |(Z/|G|Z) × |<br />

Erzeuger.<br />

Wir kommen zu dem zentralen Ergebnis dieses Abschnittes.<br />

Satz 4.1.4 Sei k ein Körper <strong>und</strong> (G, ·) eine endliche Untergruppe der Einheitengruppe<br />

(k × , ·). Dann ist G zyklisch.<br />

Beweis: Sei x ∈ G ein Element von maximaler Ordnung <strong>und</strong> d := ord(x), d.h.<br />

mit d = ord(x) <strong>und</strong> d ≥ ord(y) ∀y ∈ G.<br />

Widerspruchsannahme: G ist nicht zyklisch.<br />

Dann gilt d < |G|. Das Polynom X d − 1 hat höchstens d Nullstellen in dem<br />

Körper k. Daher muß es ein y ∈ G mit y d − 1 ≠ 0, d.h. mit y d ≠ 1 geben.<br />

Dann ist aber ord(y) kein Teiler von d. Sei g ∈ ggT (ord(y), d) mit g ≥ 0. Dann<br />

wird z := y g zu d teilerfremde Ordnung ord(z) = ord(y)/g > 1 haben. Es folgt<br />

ord(xz) = ord(x)ord(z) > ord(x) im Widerspruch zur Wahl von x. □<br />

60


Folgerung 4.1.5 a) Wenn k ein endlicher Körper ist, dann ist k × zyklisch.<br />

Insbesondere ist F × p für jede Primzahl p zyklisch.<br />

b) Sei N ≥ 2. Wenn (Z/N) × zyklisch ist 1 , dann gibt es in G := (Z/N) ×<br />

genau ϕ(|G|) = ϕ(ϕ(N)) Erzeuger von G. Diese Erzeuger werden auch<br />

Primitivwurzeln modulo N genannt. Mithin liegen in F × p genau ϕ(p −<br />

1) Primitivwurzeln modulo p.<br />

Beispiel: Wir wollen die Primitivwurzeln von F 13 (d.h. die Erzeuger von G :=<br />

F × 13 ) bestimmen. Wir setzen [a] := [a] 13. Es gilt |G| = |F 13 | = ϕ(13) = 12. Nach<br />

obiger Folgerung 4.1.5 muß es ϕ(12) = ϕ(4)ϕ(3) = 4 solche Primitivwurzeln<br />

geben. Die Primteiler von 12 sind 2 <strong>und</strong> 3. Nach 4.1.3 ist [a] ∈ F 13 Primitivwurzel<br />

genau dann, wenn [a] 12/3 ≠ [1] <strong>und</strong> [a] 12/2 ≠ [1] gilt. Wir testen auf gut Glück,<br />

ob [2] Primitivwurzel ist. [2] 4 = [3] ≠ [1] <strong>und</strong> [2] 6 = [3][4] = [12] ≠ [1]. Also ist<br />

[2] Primitivwurzel. Die anderen Primitivwurzeln sind von der Form [2] u , wobei<br />

u ∈ (Z/12Z) × = {1 + 12Z, 5 + 12Z, 7 + 12Z, 11 + 12Z}. D.h. die Gesamtheit aller<br />

Primitivwurzeln ist hier [2], [2] 5 = [6], [2] 7 = [6][4] = [11], [2] 11 = [−3][2] = [7].<br />

Wir berechnen die Potenzen der Primitivwurzel [2] <strong>und</strong> der Nicht-Primitivwurzel<br />

[3]:<br />

k 0 1 2 3 4 5 6 7 8 9 10 11 (12)<br />

[2] k [1] [2] [4] [8] [3] [6] [12] [11] [9] [5] [10] [7] ([1])<br />

[3] k [1] [3] [9] [1] [3] [9] [1] [3] [9] [1] [3] [9] ([1])<br />

Hier kann man das unterschiedliche Verhalten gut sehen. Jedes Element von<br />

F × 13 kann als Potenz der Primitivwurzel [2] geschrieben werden, d.h. 〈[2]〉 =<br />

F × 13 . Die Potenzen der Nicht-Primitivwurzel [3] liegen alle in der Menge 〈[3]〉 =<br />

{[1], [3], [9]}.<br />

Sei G eine endliche, abelsche Gruppe <strong>und</strong> g ∈ G. Die Abbildung<br />

ist dann bijektiv <strong>und</strong> es gilt<br />

exp G,g : (Z/ord(g)Z, +) → (〈g〉, ·), u ↦→ g u<br />

exp G,g (u + v) = g u+v = g u g v = exp G,g (u) exp G,g (v)<br />

für alle u, v ∈ Z/ord(g)Z, d.h. exp G,g ist ein Isomorphismus von Gruppen. Die<br />

Umkehrabbildung wird mit log G,g bezeichnet <strong>und</strong> diskreter Logarithmus zur<br />

Basis g (bez. der Gruppe G) genannt. Für x ∈ 〈g〉 sei ferner Log G,g (x) ∈ Z<br />

der kleinste nicht-negative Repräsentant von log G,g (x). Dann ist Log G,g (x) die<br />

kleinste nicht-negative Zahl k ∈ Z mit g k = x.<br />

ist wieder ein Isomorphismus; es gilt<br />

log G,g : (〈g〉, ·) → (Z/ord(g)Z, +)<br />

log G,g (xy) = log G,g (x) + log G,g (y)<br />

1 Das braucht im allgemeinen nicht der Fall sein, wie das Bsp. N = 8 zeigt!<br />

.<br />

61


für alle x, y ∈ G. Man beachte: Genau dann gilt log G,g (x) = u, wenn g u = x<br />

gilt (x ∈ G, u ∈ Z/|G|Z). Man beachte: Wenn x ∈ G keine Potenz von g ist,<br />

dann ist log G,g (x) nicht definiert!<br />

Besonders wichtig ist der Spezialfall in dem G zyklisch <strong>und</strong> g ein Erzeuger von<br />

G ist. Dann gilt |G| = ord(g) <strong>und</strong><br />

exp G,g : (Z/ord(g)Z, +) → (G, ·), log G,g : (G, ·) → (Z/|G|Z, +)<br />

sind zueinander inverse Isomorphismen.<br />

Wenn klar ist um welche Gruppe es geht, so schreiben wir oft exp g statt exp G,g ,<br />

log g statt log G,g bzw. Log g statt Log G,g .<br />

Folgerung 4.1.6 Jede endliche zyklische Gruppe G ist isomorph zu (Z/|G|Z, +).<br />

Beispiel: Wir wollen diskrete Logarithmen zur Basis [6] in F 13 berechnen. Wir<br />

betrachten die entsprechende Zeile der Potenzierungstafel.<br />

k 0 1 2 3 4 5 6 7 8 9 10 11<br />

[6] k [1] [6] [10] [8] [9] [2] [12] [7] [3] [5] [4] [11] .<br />

Man sieht, daß ord([6]) = 12 = |F × 13 | <strong>und</strong> 〈[6]〉 = F× 13 gilt, d.h. daß [6] ein<br />

Erzeuger von F × 13 ist. Also ist log [6](x) bzw. Log [6] (x) für jedes x ∈ F × 13 definiert.<br />

Was ist Log [6] ([3])? Aus der obigen Tabelle entnimmt man, daß [6] 8 = [3] (<strong>und</strong><br />

[6] k ≠ [3] für 0 ≤ k < 8) gilt. Also gilt Log [6] ([3]) = 8. Ferner muß log [6] ([3])<br />

die Restklasse von Log [6] ([3]) = 8 modulo ord([6]) = 12 sein, d.h. log [6] ([3]) =<br />

[8] 12 . Aus obiger Tabelle entnimmt man in völlig analoger Weise Log [6] (x) bzw.<br />

log [6] (x) für jedes x ∈ F × 13 :<br />

x [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12]<br />

Log(x) 0 5 8 10 9 1 7 3 4 2 11 6<br />

log(x) 0 5 8 10 9 1 7 3 4 2 11 6<br />

.<br />

Wir haben hier a statt [a] 12 <strong>und</strong> [a] statt [a] 13 geschrieben.<br />

Genauso können wir nach diskreten Logarithmen zur Basis [8] fragen. Wir betrachten<br />

die entsprechende Zeile der Potenzierungstafel:<br />

k 0 1 2 3 4 5 6 7 8 9 10 11 12<br />

[8] k [1] [8] [12] [5] [1] [8] [12] [5] [1] [8] [12] [5] [1] .<br />

Es folgt ord([8]) = 4 <strong>und</strong> 〈[8]〉 = {[1], [8], [5], [12]}. Insbesondere ist [8] kein Erzeuger<br />

von F × 13 . Nur für x ∈ 〈[8]〉 ist Log [8](x) definiert! Was ist nun Log [ 8]([5])?<br />

Es ist die kleinste nicht-negative ganze Zahl k mit [8] k = [5], also Log [8] ([5]) = 3.<br />

Ferner ist log [8] ([5]) die Restklasse von Log [8] ([5]) modulo ord([8]) = 4, d.h.<br />

log [8] ([5]) = [3] 4 . So kann man Log [8] (x) bzw. log [8] (x) für jedes x ∈ 〈[8]〉 bestimmen:<br />

x [1] [5] [8] [12]<br />

Log(x) 0 3 1 2 .<br />

log(x) [0] 4 [3] 4 [1] 4 [12] 4<br />

62


Wenn p eine große Primzahl <strong>und</strong> g eine Primitivwurzel in F × p ist, dann hat man<br />

in dem Square and Multiply Algorithmus ein schnelles 2 Verfahren zur Berechnung<br />

von exp F<br />

×<br />

p ,g(u) für u ∈ Z/(p − 1)Z.<br />

Für die Berechnung von log F<br />

×<br />

p ,g<br />

kann man eine Tabelle wie in obigem Beispiel<br />

anlegen, <strong>und</strong> dann auslesen. Das kostet natürlich enorm viel Laufzeit. Das Berechnen<br />

des relevanten Teils der Zeile [x] der Potenzierungstabelle braucht ca.<br />

2 B Schritte, wenn ord([x]) eine B-Bit-Zahl ist. Es gibt etwas schnellere Algorithmen<br />

für die Berechnung diskreter Logarithmen, z.B.<br />

a) den Algorithmus von Silver, Pohig <strong>und</strong> Hellman,<br />

b) die Babystep-Giantstep-Methode von Shanks (siehe [B], Abschnitt 9.3)<br />

oder<br />

c) die Index-Kalkulus-Methode.<br />

All diese Algorithmen sind i.a. nicht polynomial in der Bitlänge von p, zumindest<br />

wenn die Basis g des Logarithmus so beschaffen ist, daß ord(g) einen großen<br />

Primteiler 3 l hat<br />

Nach dem Stand der Technik 4 gilt es als praktisch unmöglich, log F<br />

×<br />

p ,g(x) zu berechnen,<br />

wenn p eine 1000-Bit Primzahl ist <strong>und</strong> ord(g) einen 200-Bit Primteiler<br />

hat.<br />

Wir wissen bereits, dass für jede Primzahl p die Gruppe F × p zyklisch ist. Die<br />

zyklischen Gruppen haben eine sehr einfache Strukturtheorie. Wir beenden den<br />

Abschnitt mit wichtigen Sätzen über zyklische Gruppen.<br />

Satz 4.1.7 Sei G eine endliche, zyklische Gruppe <strong>und</strong> g ein Erzeuger. Für jeden<br />

positiven Teiler d von |G| hat G genau eine Untergruppe U mit |U| = d nämlich<br />

U = 〈g |G|/d 〉.<br />

Beweis: Gelte dm = |G|. Sei N = |G|. Offenbar ist U := 〈g m 〉 eine Untergruppe<br />

mit<br />

|U| = ord(g m ) = |G|/m = d<br />

(beachte 4.1.2, 4.1.3).<br />

Sei V eine Untergruppe der Ordnung d. Wir zeigen V ⊂ U. (Dann muß U = V<br />

gelten wg. |U| = |V | = d). Sei v ∈ V beliebig. Wegen |V | = d folgt v d =<br />

1. Wie jedes Element von G ist v eine Potenz von g: Sagen wir v = g s mit<br />

s ∈ {0, · · · , N − 1}. Dann gilt 1 = g ds <strong>und</strong> mit ord(g) = N folgt N | ds, d.h.<br />

md | sd. Daher ist s ein Vielfaches von m. Also existiert ein k ∈ {0, · · · , d − 1}<br />

mit s = mk. Es folgt v = g mk ∈ U.<br />

□<br />

2 polynomial in der Bitlänge von p<br />

3 vielleicht ist die Bitlänge von l halb so groß wie die Bitlänge von p<br />

4 im Jahr 2007<br />

63


Bemerkung 4.1.8 Sei G eine endliche, zyklische Gruppe mit Erzeuger g. Für<br />

jeden positiven Teiler d | |G| sei U d die Untergruppe der Ordnung d. Sei d <strong>und</strong><br />

d ′ positive Teiler von |G|. Genau dann gilt U d ⊂ U d ′, wenn d ein Teiler von d ′<br />

ist.<br />

Beweis: Sei m := |G|/d <strong>und</strong> m ′ := |G|/d ′ . Dann gilt m, m ′ ∈ N. Es gilt U d =<br />

〈g m 〉 <strong>und</strong> U d ′ = 〈g m′ 〉. Wenn U d ⊂ U d ′ gilt, dann muß g m ∈ U d ′ gelten. Also muß<br />

m ′ ein Teiler von m sein. Aber das impliziert d | d ′ . Die umgekehrte Implikation<br />

ist trivial.<br />

□<br />

Folgerung 4.1.9 Sei G eine endliche zyklische Gruppe <strong>und</strong> g ein Erzeuger von<br />

G.<br />

a) G hat genau so viele Untergruppen, wie |G| Teiler hat.<br />

b) Sei d ein positiver Teiler von |G| <strong>und</strong> U die (eindeutig bestimmte) Untergruppe<br />

mit |U| = d. Die Elemente der Ordnung d in G sind genau die<br />

Erzeuger von U. Also gibt es in G genau ϕ(d) Elemente der Ordnung d.<br />

Folgerung 4.1.10 In F × p gibt es für jeden positiven Teiler d von p − 1 genau<br />

ϕ(d) Elemente der Ordnung d.<br />

Beispiel: Wir rechnen in G := F × 103 . Wir wissen nach 4.1.5, daß G zyklisch ist.<br />

Die obigen Struktursätze erlauben es, mit minimalem Rechenaufwand diverse<br />

Aussagen über G zu treffen:<br />

Für jeden positiven Teiler d von |G| = ϕ(103) = 102 gibt es genau eine Untergruppe<br />

U d der Ordnung d. Die Menge der positiven Teiler von 102 = 2 · 3 · 17<br />

ist<br />

T = {2 i · 3 j · 17 k : i, j, k ∈ {0, 1}} = {1, 2, 3, 6, 17, 34, 51, 102}.<br />

Für jedes Element x ∈ F × 103 wird ord(x) ∈ T ein Teiler von 102 sein nach dem<br />

kleinen Satz von Fermat 2.7.2. Es wird nach 4.1.9 genau<br />

1 Element der Ordunung 1 (nämlich [1]),<br />

ϕ(2) = 1 Element der Ordnung 2,<br />

ϕ(3) = 2 Elemente der Ordung 3 (d.h. Erzeuger von U 3 ),<br />

ϕ(6) = 2 Elemente der Ordung 6 (d.h. Erzeuger von U 6 ),<br />

ϕ(17) = 16 Elemente der Ordung 17 (d.h. Erzeuger von U 17 ),<br />

ϕ(34) = 16 Elemente der Ordung 34 (d.h. Erzeuger von U 34 ),<br />

ϕ(51) = 32 Elemente der Ordung 51 (d.h. Erzeuger von U 51 ),<br />

ϕ(102) = 32 Elemente der Ordung 102 (d.h. Erzeuger von U 102 = F × 103 )<br />

geben.<br />

Wir zeigen, daß g = [6] 103 ein Erzeuger von G = F × 103 ist. Nach 4.1.1 brauchen<br />

wir nur zu zeigen, daß g 102/l ≠ [1] für jeden Primteiler l von 102 (d.h. für<br />

l ∈ {2, 3, 17}) gilt. Es gilt [6] 51 = [102] ≠ [1], [6] 34 = [46] ≠ [1] <strong>und</strong> [6] 6 =<br />

[100] ≠ [1]. Also ist g = [6] ein Erzeuger von G = F × 103 , d.h jedes Element in<br />

F × 103 ist eine Potenz von [6], F× 103 = 〈[6]〉.<br />

64


Wie findet man nun eines der 16 Elemente der Ordung d = 34, d.h. einen der<br />

Erzeuger von U 34 ? Nach 4.1.7 muß g 102/34 = [6] 3 = [10] ein solches Element<br />

sein: U 34 = 〈[10]〉 <strong>und</strong> ord([10]) = 34.<br />

Wie kann ich die beiden Elemente der Ordnung 6, d.h. die beiden Erzeuger von<br />

U 6 finden? Mit 4.1.7 folgt, daß<br />

U 6 = 〈g 102/6 〉 = 〈[6] 17 〉 = 〈[47]〉<br />

gilt, d.h [47] erzeugt U 6 . Nach 4.1.3 sind die Erzeuger von U 6 genau die Elemente<br />

der Form [47] u mit u ∈ (Z/6) × . Aber (Z/6) × = {[1] 6 , [5] 6 }. Daher sind [47] <strong>und</strong><br />

[47] 5 = [57] die beiden Erzeuger von U 6 . Die Elemente [47] <strong>und</strong> [57] haben also<br />

Ordung 6 <strong>und</strong> weitere Elemente der Ordnung 6 gibt es nicht in F × 103 .<br />

Zum Schluß möchte ich alle sechs Elemente der Untergruppe U 6 auflisten. Ich<br />

muß dazu nur die Potenzen des Erzeugers 5 [47] von U 6 berechnen.<br />

U 6 = {[47] 0 , [47] 1 , · · · , [47] 5 } = {[1], [47], [46], [102], [56], [57]}.<br />

Ich denke, dieses Beispiel zeigt, daß sich mit obiger Strukturtheorie viele Fragen<br />

zu der Gruppe F × 103 schnell beantworten lassen, ohne dass dafür die Potenzierungstafel<br />

(diese hätte ≈ 102 2 Einträge!) berechnet werden müßte.<br />

4.2 Die ρ-Methode von Pollard<br />

Sei G eine endliche, abelsche Gruppe <strong>und</strong> g ∈ G. Wir betrachten das folgende<br />

diskrete Logarithmus-Problem: Gegeben h ∈ G entscheide, ob h ∈ 〈g〉<br />

<strong>und</strong> berechne gegebenenfalls ein x ∈ {0, · · · , |G| − 1} mit g x = h. Mit anderen<br />

Worten: Man möchte, gegeben h ∈ G entscheiden, ob ein x ∈ {0, · · · , |G| − 1}<br />

mit exp g (x) = h existiert, <strong>und</strong> ein solches x ggfls. berechnen.<br />

Wir fassen das Problem etwas weiter:<br />

Problem A. Seien X eine N-elementige Mengen <strong>und</strong> f : {0, · · · , N − 1} → X<br />

eine Abbildung. Gegeben y ∈ X entscheide, ob a mit f(a) = x existiert <strong>und</strong><br />

berechne ggfls. ein solches a.<br />

Wenn man nichts über die spezielle Gestalt von f weiß, so ist der folgende “naive<br />

Algorithmus” (exhaustives Absuchen) die optimale Strategie:<br />

löst dieses Problem A.<br />

a = 0; while(f(a) x ANDa ≤ n − 1, a = a + 1)<br />

Faktum A. Problem A läßt sich in O(N) Rechenschritten lösen.<br />

Sei X eine endliche N-elementige Menge <strong>und</strong> f : X → X eine Abbildung. Sei<br />

x 0 ∈ X ein Startwert <strong>und</strong> (x i ) i∈N die rekursiv definierte Folge mit x i+1 = f(x i ),<br />

5 Der andere Erzeuger [57] würde das selbe Endergebnis liefern.<br />

65


d.h. mit x j = f j (x 0 ), wobei f j = f ◦ · · · ◦ f die j-malige Hintereinanderausführung<br />

von f ist. Da X endlich ist, kann die Abbildung<br />

N → X, i ↦→ x i<br />

nicht injektiv sein. Es muß also ein Indexpaar (i, j) mit i < j <strong>und</strong> x i = x j geben.<br />

Ein solches Indexpaar wird im folgenden eine Kollision in (x i ) i genannt.<br />

Sei (v, w) das kleinste solche Indexpaar <strong>und</strong> s = w −v. Dann gilt für jedes j ∈ N<br />

schon x v+j+s = f j (x v+s ) = f j (x v ) = x v+j . D.h. nach einer Vorperiode der<br />

Länge v mündet (x i ) i in einen Zyklus der Periodenlänge s. Wenn f eine Zufallsabbildung<br />

(d.h. ein zufällig gewähltes Element der Menge aller Abbildungen<br />

X → X) ist, dann sind v <strong>und</strong> s Zufallsvariable mit Erwartungswert ≈ 0.6 √ N.<br />

Faktum B. Sei f : X → X eine Zufallsabbildung <strong>und</strong> x 0 ∈ X ein Startwert.<br />

Dann läßt sich eine Kollision in der Folge (x i ) i = (f i (x 0 )) in erwarteter Laufzeit<br />

von O( √ N) Schritten berechnen.<br />

Sei wieder G eine endliche abelsche Gruppe <strong>und</strong> g ∈ G. Der Clou bei der<br />

ρ-Methode von Pollard ist folgendes: Das diskrete Logarithmusproblem (d.h.<br />

Problem A im Spezialfall der Abbildung exp g ) kann durch einen “Trick” (Betrachten<br />

einer geeigneten Hilfsfunktion) überführt werden in ein Problem, das<br />

auf Gr<strong>und</strong> von Faktum B in O( √ |G|) Schritten gelöst werden kann. Dies ergibt<br />

eine Verbesserung der Laufzeit von O(|G|) auf O( √ |G|).<br />

Wir gehen nun auf die Details ein. Sei o.E. G = 〈g〉 zyklisch mit Erzeuger g.<br />

Sei h ∈ G. Wir wollen x mit g x = h berechen. Sei G = T 1 ∪ T 2 ∪ T 3 eine<br />

disjunkte Zerlegung in drei etwa gleich große Teilmengen. Wir betrachten die<br />

Hilfsfunktion<br />

⎧<br />

⎨ xg x ∈ T 1<br />

f : G → G, x ↦→ x 2 x ∈ T 2<br />

⎩<br />

xh x ∈ T 3<br />

Seien a 0 , b 0 ∈ Z/N (N := |G|) <strong>und</strong> x 0 = g a0 h b0 . Seien (x i ) i , (a i ) i <strong>und</strong> (b i ) i die<br />

rekursiv definierten Folgen mit<br />

<strong>und</strong><br />

x i+1 = f(x i ),<br />

⎧<br />

⎨ a i + 1 x ∈ T 1<br />

a i+1 = 2a i x ∈ T 2<br />

⎩<br />

a i x ∈ T 3<br />

⎧<br />

⎨ b i x ∈ T 1<br />

b i+1 = 2b i x ∈ T 2 .<br />

⎩<br />

b i + 1 x ∈ T 3<br />

Dann gilt x i = g ai h bi für alle i. Man findet nach Faktum B in erwarteter Laufzeit<br />

von O( √ N) Rechenschritten eine Kollision (i, j) in der Folge (x i ) i . Dann gilt<br />

g ai h bi = g aj h bj <strong>und</strong> das impliziert g ai−aj = h bj−bi = g x(bj−bi) . Daraus gewinnt<br />

man die folgende Gleichung im Ring Z/N:<br />

a i − a j = x(b j − b i ).<br />

66


Aller Wahrscheinlichkeit nach ist dann b j − b i eine Einheit in Z/N <strong>und</strong> dann<br />

läßt sich (∗) nach x Auflösen.<br />

Merke: In jeder Gruppe G läßt sich das diskrete Logarithmusproblem in erwarteter<br />

Laufzeit von O( √ |G|) Schritten berechnen.<br />

Bemerkung: Dies ist für kleine Gruppen relevant. Im Fall |G| ≈ 2 1000 ist die<br />

Beschleunigung aber bei weitem nicht stark genug, um diskrete Logarithmen<br />

mit dieser Methode effektiv berechnen zu können.<br />

4.3 Der Algorithmus von Silver, Pohlig <strong>und</strong> Hellman<br />

Sei G eine zyklische Gruppe <strong>und</strong> g ∈ G. Wir nehmen an, daß die Primfaktorzerlegung<br />

ord(g) = l e1<br />

1 · · · let t<br />

von ord(g) bekannt ist.<br />

Wir stellen einen Algorithmus für das Berechnen von<br />

Log G,g : 〈g〉 → N<br />

vor, der in manchen Fällen schneller ist als der naive Algorithmus “Berechnen<br />

der entsprechenden Zeile einer Potenzierungstafel”. Zur Abkürzung setzen wir<br />

im folgenden Log := Log G,g .<br />

Für jeden Primteiler l von ord(g) sei g l := g ord(g)/l . g l ist also ein Erzeuger der<br />

eindeutig bestimmten Untergruppe U l von 〈g〉 der Ordnung l.<br />

Wir gehen im folgenden davon aus, daß Log gl für jeden Primteiler l von ord(g)<br />

bereits implementiert ist. Meist wird in einer Initialisierungsphase für jeden<br />

Primteiler l von ord(g) die Logarithmentafel für Log gl<br />

berechnet.<br />

Schon hier sieht man: Wenn ord(g) prim ist, dann wird dieses Vorgehen keinerlei<br />

Vorteil gegenüber dem naiven Algorithmus haben. Wenn aber ord(g) ein<br />

Produkt von kleinen Primzahlen ist, dann ist der Zeitgewinn erheblich.<br />

Beispiel: p = 30000001 ist prim. g = [2744] ist ein Element der Ordnung<br />

10 7 in F × 30000001 . Die Primteiler von ord(g) = 107 sind 2 <strong>und</strong> 5 (also sehr<br />

klein verglichen mit ord(g)). g 2 = g 107 /2 = [30000000] hat Ordnung 2 <strong>und</strong><br />

g 5 = g 107 /5 = [18544125] hat Ordung 5.Es sollen Logarithmen Log g zur Basis<br />

g berechnet werden. In der Initialisierungsphase des Algorithmus von Silver,<br />

Pohlig <strong>und</strong> Hellman werden die beiden Potenzierungstafeln<br />

k 0 1 2 3 4 (5) (6)<br />

g k 5 [1] [18544125] [20552807] [9404415] [11498654] ([1]) ([18544125]) ,<br />

k 0 1 (2) (3)<br />

g k 2 [1] [30000000] ([1]) ([30000000]) · · ·<br />

67


ereitgestellt. Dies ist wesentlich weniger Aufwand als das Erstellen der Potenzierungstafel<br />

für g, denn diese hätte ord(g) = 10 7 Einträge. 6<br />

□<br />

Satz 4.3.1 Sei a ∈ 〈g〉 <strong>und</strong> l ein Primteiler von 7 N := ord(g). Gelte l i+1 | N.<br />

Sei x ∈ {0, · · · , l i − 1}<br />

Wenn die Kongruenz<br />

Log(a) = x mod l i<br />

(auch der Fall i = 0 <strong>und</strong> x = 0 ist erlaubt!) gilt, dann gilt<br />

Log g (a) = x + Log gl<br />

((ag −x ) N/li+1 )l i mod l i+1 .<br />

Beweis: Aus der Voraussetzung folgt Log(ag −x ) = 0 mod l i , also Log(ag −x ) =<br />

ul i für ein geeignetes u. Daraus folgt ag −x = g uli , d.h<br />

Log gl<br />

((ag −x ) N/li+1 ) = Log gl<br />

(g uN/l ) = Log gl<br />

(g u l ) = u mod l.<br />

Daraus folgt Log gl<br />

((ag −x ) N/li+1 )+wl = u für ein geeignetes w. Schließlich ergibt<br />

sich<br />

Log g (a) = x + ul i = x + Log gl<br />

((ag −x ) N/li+1 )l i + wl i+1 .<br />

Wenn man diese Gleichung modulo l i+1 betrachtet, dann ergibt sich die Behauptung.<br />

□.<br />

Sei a ∈ 〈g〉. Es soll Log g (a) berechnet werden. Die Berechnung von Log gl<br />

stellt<br />

mit den in der Initialisierungsphase errechneten Tabellen kein Problem mehr<br />

da. Sei l s die höchste in ord(g) aufgehende Potenz von l. Obiger Satz kann dann<br />

offensichtlich dazu verwendet werden, von der trivialen Kongruenz<br />

Log g (a) = 0 mod l 0<br />

ausgehend in s Schritten ein x ∈ Z zu berechnen, derart daß die Kongruenz<br />

Log g (a) = x mod l s (∗)<br />

gilt. In jedem der s Teilschritte ist ein Wert von Log gl<br />

aus der vorbereiteten<br />

Tabelle auszulesen <strong>und</strong> in jedem Schritt fällt die Berechnung eines Ausdruckes<br />

(ag −x ) ord(g)/li an (Square and Multiply!). Das geht schnell. Eine einzelne Kongruenz<br />

(∗) legt die zu berechnende Größe Log g (a) nicht eindeutig fest; sie stellt<br />

aber eine wichtige Teilinformation über die Zielgöße Log g (a) dar.<br />

Algorithmus 4.3.2 Sei G eine endliche, zyklische Gruppe. Eingabe: a ∈ G,<br />

g ∈ G.<br />

Berechne die PFZ ord(g) = l s1<br />

1 · · · lst t<br />

l i ).<br />

(mit paarweise verschiedenen Primzahlen<br />

6 Erst in der 10 7 -ten Spalte käme [1] <strong>und</strong> ab da würde sich alles wiederholen!<br />

7 Beachte: Wenn g ein Erzeuger von G ist, dann ist N = |G|.<br />

68


Berechne für jedes i ein x i ∈ {0, · · · , li s − 1} derart, dass<br />

gilt.<br />

Log(a) = x i mod l si<br />

i<br />

Berechne mit dem euklidischen Algorithmus zum chinesischen Restsatz das X ∈<br />

{0, · · · , ord(g) − 1} mit<br />

Ausgabe: Log g (a) = X.<br />

X = x 1 mod l s1<br />

1<br />

X = x 2 mod l s2<br />

2<br />

· · ·<br />

X = x t mod l st<br />

t .<br />

Wenn p eine große Primzahl <strong>und</strong> g ein Erzeuger von F × p ist, dann wird ord(g) =<br />

p − 1 in aller Regel nicht nur kleine Primteiler haben <strong>und</strong> es kann bereits das<br />

Berechnen der PFZ von ord(g) = p − 1 zum Problem werden.<br />

Die Berechnung von Log gl<br />

, die beim Aufstellen der Kongruenzen mehrfach aufgerufen<br />

wird, kostet enorm viel Laufzeit, wenn l ein großer Primteiler von ord(g)<br />

ist.<br />

Man hält es wie gesagt derzeit 8 für technisch unmöglich, Log F<br />

×<br />

p ,g<br />

zu berechnen,<br />

wenn p eine 1000-Bit-Primzahl ist <strong>und</strong> ord(g) einen 300-Bit Primteiler hat.<br />

Bemerkung 4.3.3 Ganz anders liegen die Dinge, wenn g ein Element der Ordnung<br />

2 s in F × p ist. Dann ist 2 der einzige Primteiler von ord(g) <strong>und</strong> die Berechnung<br />

von<br />

log F<br />

×<br />

p ,g<br />

: 〈g〉 → Z/2s<br />

funktionert dann mit dem obigen Algorithmus in Laufzeit, die polynomial in<br />

der Bitlänge von p ist. (Man beachte, dass s kleiner-gleich der Bitlänge von<br />

p sein wird. Der obige Algorithmus berechnet log g (a) in s Schritten, wobei die<br />

laufzeitintensivste Operationen in jedem Schritt eine Potenzierung mit Square<br />

<strong>und</strong> Multiply ist. In jedem Schritt fällt auch eine Auswertung Log [−1] (y), y ∈<br />

{[1], [−1]} an, aber das läuft auf eine einfache if-Abfrage hinaus.)<br />

8 im Jahr 2007<br />

69


Kapitel 5<br />

Public-Key-Verfahren, die<br />

auf dem diskreten<br />

Logarithmus beruhen<br />

5.1 Schlüsselerzeugung<br />

Sei G eine abelsche Gruppe <strong>und</strong> g ∈ G. Wir nennen (G, g) eine Einweggruppe,<br />

wenn folgendes gilt:<br />

a) Die Elemente sind “vernünftig speicherbar” <strong>und</strong> die Multiplikation <strong>und</strong><br />

die Inversenbildung in G ist schnell berechenbar. Dann wird mit Square<br />

and Multiply für x ∈ {1, · · · |G|} auch exp g (x) = g x schnell berechenbar<br />

sein.<br />

b) Es ist aus Laufzeitgründen (vermutlich) technisch derzeit unmöglich, für<br />

x ∈ 〈g〉 den diskreten Logarithmus log g (x) zu berechnen.<br />

Das folgende Beispiel ist für uns besonders wichtig.<br />

Beispiel: Sei p eine ≥ 1000-Bit-Primzahl, l eine ≥ 300-Bit-Primzahl <strong>und</strong> g ∈ F × p<br />

ein Element der Ordnung l. Dann ist (F × p , g) eine Einweggruppe 1 .<br />

Nicht jede Gruppe ist eine Einweggruppe. Wenn z.B. p eine 1000-Bit-Primzahl<br />

<strong>und</strong> h ∈ F × p ein Element mit ord(h) = 2 s ist, dann ist log h (−) schnell berechenbar<br />

<strong>und</strong> (F × p , h) ist keine Einweggruppe.<br />

Auch die additive Gruppe (F p , +) ist keine Einweggruppe; sie ist kryptologisch<br />

völlig unsicher.<br />

1 Besser: Man hat derzeit (2007) sehr gute Gründe für die Annahme, daß (F × p , g) eine<br />

Einweggruppe ist.<br />

70


Wir wenden uns in diesem Abschnitt der Erzeugung von Einweggruppen zu.<br />

Problem: Sei B > b > 0. Wir wollen ein Zufallstripel (p, l, g) konstruieren derart,<br />

daß p eine B-Bit-Primzahl, l eine b-Bit-Primzahl <strong>und</strong> g ∈ F × p ein Element<br />

mit ord(g) = l ist. (Etwa für B = 1000, b = 500 wird das auf eine zufällige Einweggruppen<br />

(F × p , g) führen, die dann im Rahmen der <strong>Kryptographie</strong>verfahren,<br />

die im folgenden besprochen werden, benutzt werden können.)<br />

Sei im folgenen ispseudoprime ein schneller, probabilistischer Primzahltest, z.B.<br />

der Miller-Rabin-Test. Wenn der Aufruf ispseudoprime(N, ε) die Antwort “false”<br />

liefert, dann ist N sicher zusammengesetzt. Wenn der Aufruf ispseudoprime(N, ε)<br />

die Antwort “true” ergibt, dann ist N wahrscheinlich (mit Wahrscheinlichkeit<br />

≥ 1 − ε) prim. Je kleiner man die Fehlerwahrscheinlichkeit ε wählt, desto größer<br />

wird die Laufzeit.<br />

Wir schildern nun den Algorithmus stepnextprime, der für die Lösung des obigen<br />

Problems gebraucht wird. Sei N, s ∈ N mit s > 0. Die Folge<br />

N, N + s, N + 2s, N + 3s, · · ·<br />

wird im folgenden arithmetische Progression mit Beginn N <strong>und</strong> Sprungweite<br />

s genannt. Der Algorithmus stepnextprime sucht nach einer Primzahl in<br />

dieser arithmetischen Progression. Gegebenenfalls wird die kleinste Primzahl,<br />

die gef<strong>und</strong>en wird, ausgegeben.<br />

Klar ist folgendes: Wenn 1 < g < N ein gemeinsamer Teiler von s <strong>und</strong> N ist,<br />

dann teilt g auch jede Zahl der Form N + ks. Wenn also s nicht zu N teilerfremd<br />

<strong>und</strong> N zusammengesetzt ist, dann sind die Elemente der arithmetischen<br />

Progression N, N + s, N + 2s, · · · sicher allesamt nicht prim. Der folgende Algorithmus<br />

hält in diesem Fall mit einer Fehlermeldung an.<br />

Algorithmus 5.1.1 (stepnextprime) Eingabe: N, s. Steuerparameter ε 1 <strong>und</strong><br />

ε 2 , z.B. ε 1 = 10 −2 <strong>und</strong> ε 2 = 10 −10 .<br />

1. if ggT (N, s) > 1 then HALT mit Fehlermeldung;<br />

2. p := N;<br />

3. while ispseudoprime(p, ε 1 ) = false do p = p + s;<br />

4. if ispseudoprime(p, ε 2 ) = false GOTO 3.<br />

Ausgabe: p ist (mit Fehlerwahrscheinlichkeit ≤ ε 2 ) eine Primzahl in der arithmetischen<br />

Progression N, N +s, N +2s, · · ·; wahrscheinlich ist es sogar die kleinste<br />

Primzahl mit dieser Eigenschaft.<br />

Anders gesagt: p ist (mit Fehlerwahrscheinlichkein ≤ ε 1 ) eine Primzahl ≥ N,<br />

welche die Kongruenz p = N mod s erfüllt.<br />

71


Satz 5.1.2 (Primzahlen in arithmetischen Progressionen) Sei s zu N<br />

teilerfremd. Dann gibt es in der arithmetischen Progression<br />

unendliche viele Primzahlen.<br />

N, N + s, N + 2s, N + 3s, · · ·<br />

Der Erwartungswert für die Anzahl der Durchläufe der while-Schleife in obigem<br />

Algorithmus ist dann 2<br />

b<br />

log(N)<br />

ϕ(b) .<br />

Wenn überdies N eine 1000-Bit-Zahl ist, dann wird stepnextprime spätestens<br />

nach ein paar tausend Schritten eine Primzahl finden.<br />

Sei im folgenden random(b) eine ≈ b-Bit-Zufallszahl. Der Aufruf<br />

l := stepnextprime(random(b), 1)<br />

wird dann eine ≈ b-Bit-Zufallsprimzahl erzeugen. N := 1+random(B−b)·l wird<br />

dann eine B-Bit-Zufallszahl sein, die N = 1 mod l erfüllt. p := stepnextprime(N, l)<br />

ergibt eine zufällige Primzahl p, die p = 1 mod l erfüllt. Dann gilt l | p−1 = |F × p |.<br />

Da F × p zyklisch ist, muß es in F × p genau ϕ(l) = l − 1 Elemente der Ordnung l<br />

geben. Um das eingangs gestellte Problem vollständig zu lösen, muss nur noch<br />

ein solches Element g der Ordnung l gef<strong>und</strong>en werden. Dafür kann man den<br />

folgenden Satz verwenden.<br />

Satz 5.1.3 Sei p prim <strong>und</strong> l ein Primteiler von p − 1. Sei z ∈ F × p<br />

g := z (p−1)/l . Wenn g ≠ [1] gilt, dann gilt ord(g) = l.<br />

beliebig. Sei<br />

Beweis: Nach dem Satz von Fermat gilt g l = z p−1 = [1] <strong>und</strong> das impliziert<br />

ord(g) | l. Da l prim ist, muß ord(g) ∈ {1, l} gelten. Wenn g ≠ 1, dann folgt also<br />

ord(g) = l.<br />

□<br />

Für ein willkürlich gewähltes Element z ∈ F × p wird in aller Regel z p−1<br />

l<br />

ord(z) = l gelten. Wenn z p−1<br />

l<br />

sein. Dieses Polynom hat p−1<br />

l<br />

willkürlich gewähltes Element z die Gleichung z p−1<br />

l<br />

(Also z.B. ≈ 2 −300 , wenn l eine 300-Bit-Zahl ist.)<br />

≠ [1], also<br />

= [1] gilt, dann wird z Nullstelle von Z p−1<br />

l − [1]<br />

Nullstellen. Die Wahrscheinlichkeit dafür, daß ein<br />

= [1] erfüllt ist also nur 1/l.<br />

Der folgende Algorithmus stellt eine Lösung des eingangs gestellten Problems<br />

dar.<br />

Algorithmus 5.1.4 (Schlüsselerzeugung)<br />

Eingabe: b < B.<br />

l := stepnextprime(random(b), 1) (Dann ist l eine ≈ b-Bit-Zufallsprimzahl.)<br />

2 ϕ steht für die Eulersche ϕ-Funktion.<br />

72


N := l + l · random(B − b). (Dann ist N eine ≈ B-Bit-Zufallszahl, die N =<br />

1 mod l erfüllt.)<br />

p := stepnextprime(N, l). (Dann ist p eine ≈ B-Bit-Zufallszahl, die p = 1 mod l<br />

erfüllt.)<br />

repeat z := random, g := z p−1<br />

l until g ≠ [1].<br />

(Dann ist g ein Element der Ordnung l in F × p .<br />

Ausgabe: (p, l, g).<br />

5.2 Das Massey-Omura-Verschlüsselungsverfahren<br />

Dieses Verschlüsselungsverfahren erinnert an das folgende Gedankenexperiment: 3<br />

Man stelle sich ein Land vor, in dem keine vertrauenswürdigen Boten zur Verfügung<br />

stehen. Wie kann ich vertrauliche Informationen von einer Dienststelle A zu einer<br />

Dienststelle B bringen, ohne vorher Schlüssel für ein Private-Key-Verfahren 4<br />

vereinbart zu haben? Dienststelle A packt die vertraulichen Unterlagen in eine<br />

einbruchsichere Kiste, schießt diese mit einem Vorhängeschloß ab <strong>und</strong> schickt<br />

diese zu B. Der Schlüssel verbleibt bei A. Dienststelle B kann die Kiste dann<br />

natürlich nicht öffnen. Sie verschließen die Kiste stattdessen mit einem zweiten<br />

Vorhängeschloß <strong>und</strong> schicken die doppelt verschlossene Kiste zurück zu A.<br />

Der Schlüssel für das zweite Schloß verbleibt bei B. Dienstelle A wird nun ihr<br />

Schloß entfernen <strong>und</strong> die nur noch einfach verschlossene Kiste ein drittes Mal<br />

zu B schicken. Dienstelle B kann die Kiste nun öffnen <strong>und</strong> die Unterlagen entnehmen.<br />

Der Bote hat aber nie die Kiste in unverschlossenem Zustand bei sich<br />

gehabt.<br />

Sei im folgenden (G, g) eine Einweggruppe 5 . Ein Paar (G, g) kann mit Algorithmus<br />

5.1.1 erzeugt werden. Wir fordern aus Bequemlichkeit, daß G zyklisch sein<br />

soll. Die Gruppe G sei öffentlich bekannt.<br />

Sei U eine Menge von Usern (evtl. nur zwei). Jeder User X wählt nun eine Zahl<br />

e X ∈ {2, · · · , |G|−1}, die teilerfremd zu |G| ist. Er berechnet d X ∈ {2, · · · , |G|−<br />

1} mit e X d X = 1 mod |G|. User X hält sowohl e X als auch d X geheim.<br />

Satz 5.2.1 Für m ∈ G gilt m e X d X<br />

= m.<br />

Beweis: Wegen e X d X = 1 mod |G| gibt es ein k mit e X d X = 1 + k|G|. Es folgt<br />

m e X d X<br />

= m 1+k|G| = m(m |G| ) k = m. Wir haben verwendet, daß m |G| = 1 nach<br />

dem Satz von Fermat gilt.<br />

□<br />

3 Die Geschichte soll auf Diffie zurückgehen.<br />

4 etwa Vernam<br />

5 Für diese spezielle Anwendung braucht das Element g nicht einmal explizit bekannt sein.<br />

73


Der Nachrichtenraum des Verfahrens ist G. Durch das folgende Massey-Omura-<br />

Protokoll kann eine Nachricht m ∈ G von User Alice (A) zu User Bob (B)<br />

übertragen werden.<br />

a) A berechnet c 1 := m e A<br />

<strong>und</strong> schickt c 1 zu B. (Niemand kann in diesem<br />

Stadium aus c 1 alleine nennenswerte Rückschlüsse auf die Nachricht ziehen.<br />

In der Tat wird zumindest für jeden der ϕ(|G|) Erzeuger ˜m von G<br />

ein e mit ˜m e = c 1 existieren. Auch Bob kann aus c 1 die Nachricht nicht<br />

rekonstruieren.)<br />

b) B berechnet c 2 = c e B<br />

1 <strong>und</strong> schickt c 2 zurück an A. (Dann wird c 2 = m e Ae B<br />

gelten.)<br />

c) A berechnet c 3 = c d A<br />

2 <strong>und</strong> schickt c 3 zu Bob. (Dann gilt c 3 = m e Ae B d A<br />

=<br />

(m e Ad A<br />

) e B<br />

= m e B<br />

nach dem obigen Satz.)<br />

d) B kann nun c d B<br />

3 berechnen. Aber es gilt c d B<br />

3 = m e Bd B<br />

= m nach obigem<br />

Satz. Bob kennt nun die Nachricht m.<br />

,<br />

Wir diskutieren die Sicherheit dieses Verfahrens 6 . Wir sagen es gleich hier: Das<br />

Verfahren von El Gamal, das im nächsten Abschnitt besprochen wird, scheint<br />

uns wesentlich besser zu sein als Massey-Omura.<br />

a) Ein Angreifer, der den ganzen Dialog abgehört hat, kennt c 1 = m e A<br />

,<br />

c 2 = m e Ae B<br />

= c e B<br />

1 <strong>und</strong> c 2 = m e B<br />

. Es gilt die Formel e B = Log G,c1 (c 2 ).<br />

Wenn der Angreifer es schafft, diesen diskreten Logarithmus zu berechnen,<br />

d.h.. e B zu bestimmen, so wird er mühelos auch an d B <strong>und</strong> an die Nachricht<br />

m = c e B<br />

3 kommen. Die Berechnung des diskreten Logarithmus wird aber<br />

aus Laufzeitgründen unmöglich sein.<br />

Eine Bemerkung scheint mir allerdings angebracht: Um das Massey-Omura-<br />

System zu brechen würde es genügen, einen Logarithmus zur Basis c 1<br />

(<strong>und</strong> nicht zur Basis g) zu berechnen. Wenn ord(c 1 ) ein Produkt von kleinen<br />

Primfaktoren ist 7 , dann könnte der Algorithmus von Silver-Pohlig-<br />

Hellman einen Hebel zur Berechnung von e B = Log c1<br />

(c 2 ) bieten. Wenn<br />

dafür gesorgt wurde, daß |G| einen großen Primteiler l hat (etwa l im<br />

300-Bit-Bereich), dann ist die Wahrscheinlichkeit dafür, daß ord(c 1 ) nicht<br />

durch l teilbar ist, nur ≈ 1/l ≈ 2 −300 .<br />

Bei dem ElGamal-Verfahren, das im nächsten Abschnitt dargestellt wird,<br />

hängt die Sicherheit definitiv von einem Logarithmus Log g (−) zur Basis g<br />

ab, der schwer zu berechnen ist. Ich sehe das als einen Vorteil von ElGamal.<br />

b) Das Massey-Omura-Verfahren bietet keinerlei Sicherheit gegen Man-inthe-Middle-Angriffe:<br />

Nimm an, daß sich Oskar vor Alice als Bob ausgeben<br />

kann <strong>und</strong> alles abhören kann. Er könnte sich dann z.B. nach Ablauf<br />

6 An dieser Stelle wurde die Darstellung der Vorlesung gegenüber ein wenig verbessert.<br />

7 Das ist sehr selten der Fall!<br />

74


von Phase a) einklinken <strong>und</strong> c ′ 2 := c e O<br />

1 an Alice schicken, bevor Bob antwortet.<br />

Wenn Alice davon überzeugt ist, daß die Nachricht c ′ 2 von Bob<br />

kommt, dann wird sie c ′ 3 := (c ′ 2) d A<br />

= m e Ae O d A<br />

= m e O<br />

an Bob senden.<br />

Oskar hört das ab <strong>und</strong> berechnet die Nachricht (c ′ 3) d O<br />

= m.<br />

Man sollte das Massey-Omura-Verfahren also immer mit einem guten Signierungsverfahren<br />

kombinieren.<br />

5.3 ElGamal-Verschlüsselung<br />

Sei (G, g) eine Einweggruppe 8 . Sei U eine Menge von Usern (evtl. nur zwei).<br />

Die Einweggruppe (G, g) sei öffentlich bekannt. Jeder User X wählt zufällig ein<br />

d X ∈ {2, · · · , ord(g) − 1} (nicht zu klein) <strong>und</strong> berechnet E X := g d X<br />

∈ G.<br />

d X bleibt geheim (nur User X kennt d X ) <strong>und</strong> E X wird öffentlich gemacht.<br />

Dann gilt d X = Log g (E X ), aber es ist technisch unmöglich den Logarithmus<br />

zu ziehen. Somit läßt sich der geheime Schlüssel d X nicht aus dem öffentlichen<br />

Schlüssel E X errechnen.<br />

Beispiel: Die Gruppe (G, g) <strong>und</strong> die öffentlichen Schlüssel könnten auf einer gemeinsamen<br />

Homepage der Usergroup eingestellt werden. Wir geben ein Beispiel<br />

mit (zu) kleinen Zahlen:<br />

X E X<br />

ALICE [49]<br />

BOB [67]<br />

OSKAR [12]<br />

· · · · · ·<br />

Der Nachrichtenraum bei dem ElGamal-Verfahren ist G. Durch das folgende<br />

Protokoll kann eine Nachricht m ∈ G abhöhrsicher von Alice zu Bob geschickt<br />

werden:<br />

.<br />

□<br />

a) A wählt (gleichverteilt) eine Zufallszahl k ∈ {2, · · · , ord(g) − 1}. Sie berechnet<br />

(c 1 , c 2 ) = (g k , mE k B ).<br />

b) B erhält (c 1 , c 2 ) <strong>und</strong> berechnet c −d B<br />

1 c 2 . Dadurch erhält der die Nachricht<br />

m zurück, denn<br />

c −d B<br />

1 c 2 = g −kd B<br />

mE k B = g −kd B<br />

mg d Bk = m.<br />

8 Eine solche Gruppe kann mit 5.1.1 erzeugt werden.<br />

75


Beispiel: Betrachten wir die Usergroup in obigem Beispiel. Wenn ich die Nachricht<br />

m = [100] an Alice senden möchte, dann entnehme ich g = [5] <strong>und</strong><br />

E A = [49] der Homepage. Ich wähle k zufällig, z.B. k = 19. Dann berechne<br />

ich<br />

(c 1 , c 2 ) = (g k , mE k A) = ([5] 19 , [100][49] 19 ) = ([86], [83])<br />

<strong>und</strong> sende das Paar ([86], [83]) an Alice.<br />

Beispiel: Ich möchte obiger Usergroup beitreten. Dazu wähle ich vielleicht d S =<br />

77, berechne E S = g d S<br />

= [5] 77 = [43] <strong>und</strong> trage E S ein:<br />

X<br />

E X<br />

ALICE [49]<br />

BOB [67]<br />

.<br />

OSKAR [12]<br />

SEBAST IAN [43]<br />

· · · · · ·<br />

Die Zahl d S = 77 muß ich geheim halten. Nehmen wir an, die erste Nachricht, die<br />

bei mir eingeht, ist (c 1 , c 2 ) = ([17], [99]). Dann wollte mir jemand den Klartext<br />

m = c −d S<br />

1 c 2 = [17] −77 [99] = [78] mitteilen. □<br />

Wir diskutieren die Sicherheit von ElGamal.<br />

a) Nimm an, Oskar hat den Dialog zwischen Alice <strong>und</strong> Bob mitgehört. Er<br />

kennt dann c 1 = g k , c 2 = mE k A = gd Ak <strong>und</strong> auch E A = g d A<br />

. Nimm an, es<br />

gelingt Oskar auf irgendeine Art <strong>und</strong> Weise m zu bestimmen. Dann kommt<br />

es leicht auch in den Besitz von g d Ak . Das Brechen von ElGamal ist also<br />

genauso schwer wie das Lösen des folgenden Diffie-Hellman-Problems.<br />

Diffie-Hellman-Problem: Sei (G, g) eine Einweggruppe. Gegeben A =<br />

g a , B = g b (a <strong>und</strong> b unbekannt) berechne 9 g ab .<br />

Offenbar gilt g ab = A Log g (B) = B Log g (A) (*). Das Berechnen der diskreten<br />

Logarithmen gilt aber als technisch unmöglich. Es wird vermutet, daß<br />

es keinen schnelleren Algorithmus für die Berechnung von g ab gibt, als<br />

Log g (B) zu berechnen <strong>und</strong> die Formel (∗) zu benutzen. Ueli Maurer hat<br />

Ergebnisse in Richtung dieser Vermutung bewiesen.<br />

b) ElGamal ist nicht sicher gegen einen Man-in-the-Middle-Angriff. Nimm<br />

an Oskar kann die Homepage der Usergroup verändern oder einem einzelnen<br />

User (sagen wir B) eine Fälschung dieser Homepage unterschieben.<br />

Dann wird es Oskar gelingen dem User B vorzutäuschen, sein öffentlicher<br />

Schlüssel E O = g d O<br />

sei der Schlüssel von A. Bob wird dann Nachrichten<br />

an A so verschlüsseln, dass Oskar (aber nicht A) sie entschlüsseln kann.<br />

Wenn Oskar alles abhört was Bob schreibt, so kommt er in den Besitz der<br />

Nachrichten, die eigentlich für A bestimmt waren.<br />

Elektronische Unterschriften <strong>und</strong> Trustcenter können verhindern, daß einem<br />

User ein Fake-Schlüssel untergeschoben wird.<br />

9 g a+b = AB ist leicht zu berechnen, aber das hilft nichts für die Berechnung von g ab .<br />

76


5.4 Schlüsselaustausch nach Diffie-Hellman<br />

Dieses Protokol ist kein Verschlüsselungsverfahren. Ziel ist es zwei User X <strong>und</strong> Y<br />

in den Besitz eines gemeinsamen Geheimnisses k X,Y (etwa eine 1000-Bit-Zahl)<br />

zu bringen, ohne daß dafür ein persönliches Treffen stattfinden muß. Wenn z.B.<br />

große Datenmengen zu übertragen sind, dann werden X <strong>und</strong> Y ein Private-<br />

Key-Verfahren (z.B. Triple-DES, AES, IDEA, BLOWFISH) verwenden müssen.<br />

Aus dem gemeinsamen Geheimnis können dann Schlüssel für die Private-Key-<br />

Sitzung abgeleitet werden. Wenn z.B. k X,Y eine 1000-Bit-Zahl ist, dann kann<br />

ein geeigneter 256-Bit-Hashwert von k X,Y (bez. einer öffentlich bekannten Hash-<br />

Funktion) als Schlüssel für eine AES-Sitzung genommen werden.<br />

Durch Kombination von Diffie-Hellman mit einem Private-Key-Verfahren entsteht<br />

also die Möglichkeit, große Datenmengen schnell verschlüsselt zu übertragen,<br />

ohne sich vorher zur Schlüsselvereinbarung treffen zu müssen.<br />

Wie bei ElGamal sei folgende Situation zugr<strong>und</strong>e gelegt: (G, g) ist eine öffentlich<br />

bekannte Einweggruppe 10 . U ist eine Menge von Usern (evtl. nur zwei). Jeder<br />

User X wählt zufällig ein d X ∈ {2, · · · , ord(g)−1} (nicht zu klein) <strong>und</strong> berechnet<br />

E X := g d X<br />

∈ G.<br />

d X bleibt geheim (nur User X kennt d X ) <strong>und</strong> E X wird öffentlich gemacht.<br />

Vgl. das erste Beispiel in Abschnitt 5.3<br />

Sei nun k X,Y := g d X d Y<br />

. User X kann dies mit der Formel k X,Y = E d X<br />

Y<br />

berechnen;<br />

er kennt ja seinen geheimen Schlüssel d X <strong>und</strong> E Y ist ohnehin öffentlich. Auch<br />

User Y kann k X,Y berechnen. Er verwendet die Formel k X,Y = E d Y<br />

X .<br />

Die User X <strong>und</strong> Y teilen also das Geheimnis k X,Y .<br />

Wir nennen im folgenden k X,Y das DH-Geheimnis von X <strong>und</strong> Y.<br />

Beispiel: Betrachten wir wieder die User-Group aus dem Abschnitt 5.3. Als<br />

Gruppe ist (G, g) = (F 103 , [3]) gewählt <strong>und</strong> veröffentlicht.<br />

X<br />

E X<br />

ALICE [49]<br />

BOB [67]<br />

.<br />

OSKAR [12]<br />

SEBAST IAN [43]<br />

· · · · · ·<br />

Mein geheimer Schlüssel ist d S = 77.<br />

k S,A = E d S<br />

A<br />

= [49]77 = [7] ist das DH-Geheimnis, das ich mit Alice teile.<br />

k S,O = E d S<br />

O<br />

= [103]77 = [20] ist das DH-Geheimnis, das ich mit Oskar teile.<br />

· · · □<br />

Angriffe:<br />

10 Eine solche Gruppe kann mit 5.1.1 erzeugt werden.<br />

77


a) Ein Angreifer Oskar möchte auch in den Besitz von k X,Y kommen. Er<br />

kennt E X = g d X<br />

<strong>und</strong> E Y = g d Y<br />

; aber er kennt weder d X noch d Y . Das<br />

Berechnen von k X,Y ist also genauso schwer wie das im vorigen Abschnitt<br />

genannte Diffie-Hellman-Problem.<br />

Natürlich gilt k X,Y = E Log g (E Y )<br />

X<br />

= E Log g (E X )<br />

Y<br />

, aber Oskar kann von diesen<br />

Formeln nicht profitieren, weil die diskreten Logarithmen in der Einweggruppe<br />

(G, g) praktisch nicht berechenbar sind.<br />

b) Diffie-Hellman ist nicht sicher gegen Man-in-the-Middle-Angriffe. Nimm<br />

an, es gelingt Oskar Bob vorzutäuschen, sein öffentlicher Schlüssel E O =<br />

g d O<br />

O<br />

wäre der öffentliche Schlüssel von Alice. (Dies könnte Oskar vielleicht<br />

durch eine Fake-Homepage gelingen.) Sei k = g d B,d O<br />

. Bob wird nun denken,<br />

er würde das Geheimnis k mit Alice teilen. In der Tat teilt er das<br />

Geheimnis k aber mit Oskar. Nimm an, Oskar kann alles abhören. Wenn<br />

Bob nun z.B. aus k einen AES-Schlüssel k ′ ableitet <strong>und</strong> vertrauliche Daten<br />

mit k ′ verschlüsselt an Alice schickt, dann kann Oskar (aber nicht Alice)<br />

diese Daten entschlüsseln.<br />

Zur Abwehr braucht man elektronische Unterschriften <strong>und</strong> Trustcenter.<br />

Oft wird Diffie-Hellman in einer Situation angewendet, in der nur zwei User (A<br />

<strong>und</strong> B) vorhanden sind. Es könnte wie folgt vorgegangen werden.<br />

Man einigt sich (unverschlüsselt) auf eine Einweggruppe (G, g); vielleicht erzeugt<br />

einer der beiden User (G, g) mit 5.1.1 <strong>und</strong> schlägt diese Gruppe vor.<br />

A wählt d A ≥ 2 <strong>und</strong> schickt E A := g d A<br />

an B.<br />

B wählt d B ≥ 2 <strong>und</strong> schickt E B := g d B<br />

an A.<br />

Sie teilen dann das Geheimnis k = E d B<br />

A<br />

= E d A<br />

B<br />

.<br />

5.5 Signatur mit ElGamal<br />

Wir schildern ein Verfahren für elektronische Unterschriften, das auf Einweggruppen<br />

beruht. User X soll zu jeder Nachricht aus dem Nachrichtenraum 11<br />

P = {0, 1} ∗ (die Menge der Bitvektoren beliebiger, endlicher Länge) eine Unterschrift<br />

S X (m) erzeugen können, die als “Appendix” an die Nachricht angefügt<br />

wird.<br />

a) S X (m) muß von User X <strong>und</strong> von der Nachricht abhängen 12 . Sonst könnte<br />

jeder, der einmal ein von X unterschriebenes Dokument gesehen hat, die<br />

Unterschrift mit Copy-and-Paste auf jedes andere Dokument kopieren.<br />

b) User X muß S X (m) schnell aus m berechnen können.<br />

11 Man kann das Verfahren leicht so modifizieren, daß es auf Texte über ASCII angewendet<br />

werden kann.<br />

12 Eine Unterschrift von Hand hängt nur vom Signierer ab.<br />

78


c) Für jeden anderen muß es praktisch unmöglich sein, zu einer gegebenen<br />

Nachrischt eine gültige Unterschrift von X zu erzeugen.<br />

d) Jedermann (nicht nur der Empfänger) soll in der Lage sein, für ein Paar<br />

(m, S) zu entscheiden, ob S eine zu m passende Signatur von X ist oder<br />

nicht. Der Empfänger soll nach dem Dialog jedem (z.B. einem Gericht)<br />

beweisen können, daß X die Nachricht m unterschrieben an ihn geschickt<br />

hat. Insbesondere soll das elektronische Unterschreiben von Verträgen<br />

ermöglicht werden.<br />

Sei (G, g) eine Einweggruppe, l = ord(g) <strong>und</strong> b = floor(log 2 (l)) die (ungefähre)<br />

Bitlänge von l. Ein üblicher Wert könnte (b = 160 oder b = 300 sein.) In<br />

der Praxis wird üblicherweise ein Hash-Wert der Nachricht unterschrieben. Das<br />

führt dazu, daß die Unterschrift immer die selbe (vielleicht ein paar h<strong>und</strong>ert<br />

Bit) Länge hat, selbst wenn die Nachricht sehr groß ist.<br />

Sei h : {0, 1} ∗ → {0, · · · , 2 b } eine Hash-Funktion. h ordnet also jedem (evtl.<br />

sehr langen) Bitvektor einen Kontrollwert (man sagt auch “Hash” oder “Fingerprint”)<br />

h(x) zu, dessen Bitlänge b ist.<br />

Wir verlangen, daß h die folgenden Eigenschaften hat.<br />

a) h(x) ist aus x schnell berechenbar.<br />

b) h ist eine Einweg-Funktion: Es ist praktisch unmöglich zu y ∈ {0, · · · , 2 b }<br />

ein x mit h(x) = y zu finden.<br />

c) h ist kollisionsresistent: Es ist praktisch unmöglich, zwei Bitvektoren x 1 ≠<br />

x 2 mit h(x 1 ) = h(x 2 ) zu finden.<br />

Gängige Hashfunktionen sind MD4, MD5, SHA1, WHIRLPOOL, RIPE-MD.<br />

Die Konstruktion von Hashfunktionen ist ein interessantes Thema; wir können<br />

aus Zeitgründen nicht näher darauf eingehen.<br />

Sei bv : G → {0, 1} ∗ eine leicht berechenbare Injektion. Eine solche Abbildung<br />

wird ohnehin gegeben sein, wenn man G auf dem Rechner realisiert: Die Elemente<br />

von G werden dann ohnehin intern als Bitvektor gespeichert. Für γ ∈ G<br />

sei h ′ (γ) = h(bv(γ)).<br />

Wir fassen zusammen:<br />

Für einen Bitvektor m ∈ {0, 1} ∗ ist h(x) ein b-Bit-Hash.<br />

Für ein Element γ ∈ G der Einweggruppe ist h ′ (x) ein b-Bit-Hash.<br />

Die Daten (G, g), l = ord(g), b, h <strong>und</strong> h ′ sind öffentlich bekannt. Wir<br />

gehen wieder von einer Gruppe von Usern aus. Wie in den beiden vorigen Abschnitte<br />

wählt jeder User X zufällig ein d X ∈ {2, · · · , ord(g)−1} (nicht zu klein)<br />

<strong>und</strong> berechnet E X := g d X<br />

∈ G.<br />

d X bleibt geheim (nur User X kennt d X ) <strong>und</strong> E X wird öffentlich gemacht.<br />

Vgl. das erste Beispiel in Abschnitt 5.3<br />

79


Erzeugung der ElGamal-Signatur: Um die Signatur zu m ∈ {0, 1} ∗ zu<br />

erzeugen wählt User X zufällig ein k ≥ 2 <strong>und</strong> berechnet<br />

S X (m) = ( g k , [k] −1 [h(m) − d<br />

}{{}<br />

X h ′ (g k )]).<br />

} {{ }<br />

=:γ∈G<br />

=:s∈Z/l<br />

[x] steht für die Restklasse von x in Z/l. Dabei ist unbedingt für jede<br />

Nachricht ein neues k zu verwenden. User X könnte die bereits verwendeten<br />

k’s wie Tan-Nummern abstreichen.<br />

Satz 5.5.1 Es gilt γ s E h′ (γ)<br />

X<br />

= g h(m) .<br />

Beweis: γ s = g [k][k]−1 ([h(m)]−[d X h ′ (g k ))]) = g h(m) g −d X h ′ (γ) = g h(m) E −h′ (γ)<br />

X<br />

. □<br />

Man beachte: In die Formel für S X (m) geht der geheime Exponent d X ein. Dies<br />

führt dazu, daß nur Xaver S X (m) aus m berechnen kann. Ganz im Gegensatz<br />

dazu kann jeder, der γ <strong>und</strong> s vorgelegt bekommt, die beiden in obigem Satz<br />

vorkommenden Werte γ s E h′ (γ)<br />

X<br />

<strong>und</strong> g h(m) berechnen. Dazu braucht man nur<br />

den öffentlichen Schlüssel E X von User X <strong>und</strong> die öffentlichen Hashfunktionen<br />

h <strong>und</strong> h ′ zu benutzen.<br />

Verifizieren einer ElGamal-Signatur: Der Verifizierer V bekommt (m, S)<br />

vorgelegt, wobei S = (γ, s) ∈ G × Z/l. Er soll prüfen, ob S eine gültige Unterschrift<br />

von X zu der Nachricht m ist.<br />

V berechnet γ s E h′ (γ)<br />

X .<br />

V berechnet g h(m)<br />

Nur wenn diese beiden Werte übereinstimmen akzeptiert V die Unterschrift.<br />

Zur Sicherheit:<br />

a) Natürlich gilt d X = Log g (E X ). Dieser Logarithmus ist praktisch nicht<br />

berechenbar. Wenn es einem Angreifer dennoch gelingt ihn zu berechnen,<br />

so kommt er in den Besitz von d X . Wer d X hat, der kann zu beliebigen<br />

Nachrichten m Unterschriften von X erzeugen.<br />

b) Sei m eine Nachricht <strong>und</strong> S X (m) = (γ, s) eine Unterschrift von X zu m.<br />

Viele Leute können in den Besitz von (m, S X (m)) = (m, γ, s) kommen;<br />

zumindest der Empfänger <strong>und</strong> die potentiellen Verifizierer.<br />

Nimm an, Oskar kennt eine gültige, signierte Nachricht (m, γ, s) von X <strong>und</strong><br />

es gelingt ihm, k = Log g (γ) zu berechnen. Es gilt [k]s = [h(m)]−[d X h ′ (γ)]<br />

<strong>und</strong> somit<br />

[d X ] = [h ′ (γ)] −1 ([h(m)] − [k]s).<br />

Mit dieser Gleichung kann Oskar [d X ] berechnen. (Er kennt alle Größen<br />

der rechten Seite dieser Gleichung.) In Kenntnis von [d X ] kann er nach<br />

Belieben Unterschriften von X zu beliebigen Nachrichten erzeugen.<br />

Dieser Angriff scheitert üblicherweise, da der diskrete Logarithmus k =<br />

Log g (γ) praktisch nicht berechnet werden kann.<br />

80


c) Man nimmt an, daß es keine Möglichkeit gibt, zu vorgegebenen Nachrichten<br />

m eine gültige Unterschrift von X zu erzeugen, ohne diskrete Logarithmen<br />

zu lösen.<br />

d) Gibt es ein Verfahren, um ein Paar (m, S) zu erzeugen, wobei S eine<br />

gültige Unterschrift zu m ist? (Wir verlangen nicht, daß m dabei beeinflußt<br />

werden kann.) Mit anderen Worten: Kann man irgendeinen “Zufallstext”<br />

(Kauderwelsch) m <strong>und</strong> eine gültige Unterschrift von X zu m finden 13 ?<br />

Wir nehmen die Antwort vorweg: Es wäre möglich, wenn die Hashfunktion<br />

unsicher wäre.<br />

Oskar wählt u, v mit [v] ∈ (Z/l) × . Er setzt<br />

γ := g u EX v ,<br />

s := −[v] −1 h ′ (γ),<br />

S := (γ, s)<br />

<strong>und</strong> fragt sich, zu welchen Kontrollwerten h(m) diese Signatur passen<br />

würde. Es gilt<br />

γ s E h′ (γ)<br />

X<br />

= g [u][v]−1 h ′ (γ) .<br />

Sei m ′ = [u][v] −1 h ′ (γ). Wenn es gelingt ein m ∈ {0, 1} ∗ zu finden mit<br />

h(m) = m ′ (aber das ist bei sicheren Hashfunktionen praktisch nicht<br />

möglich), dann ist S eine gültige Unterschrift von X zu m.<br />

e) Nimm an, X hat beim Unterschreiben zweier Nachrichten m 1 ≠ m 2 den<br />

selben Zufallswert k ≥ 2 verwendet, obwohl das ausdrücklich verboten<br />

ist. Die Unterschriften sind dann von der Form S X (m 2 ) = (γ, s 1 ) <strong>und</strong><br />

S X (m 2 ) = (γ, s 2 ) mit γ = g k <strong>und</strong> s i = [k] −1 ([h(m i )] − [d X h ′ (γ)]). Entscheidend<br />

ist, daß γ nun nicht von i abhängt.<br />

Dann gilt s 1 − s 2 = [k] −1 [h(m 1 ) − h(m 2 )] <strong>und</strong> daraus folgt 14<br />

[k] = (s 1 − s 2 ) −1 [h(m 1 ) − h(m 2 )].<br />

In Kenntnis von m, γ, s 1 , s 2 kann Oskar also [k] finden. (Er kennt dann<br />

alle Größen, die auf der rechten Seite vorkommen.) Wenn er [k] einmal<br />

hat, dann kann er den geheimen Exponenten [d X ] von X mit der Methode<br />

aus b) berechnen. Wer d X hat, der kann zu beliebigen Nachrichten m<br />

Unterschriften von X erzeugen.<br />

f) Natürlich bietet sich auch hier die Möglichkeit eines Man-in-the-Middle-<br />

Angriffs. Wenn es Oskar gelingt, Alice davon zu überzeugen, sein öffentlicher<br />

Schlüssel E O wäre der öffentliche Schlüssel von Xaver. Dann kann<br />

Oskar Signaturen zu beliebigen Nachrichten erzeugen, die für Alice so aussehen,<br />

als kämen sie von Bob.<br />

Abwehr von Man-in-the-Middle-Angriffen durch Trustcenter:<br />

Um die Man-in-the-Middle-Angriffe in den Abschnitten 5.2.-5.5. (MIM-Angriff<br />

auf ElGamal-Verschlüsselung, ElGamal-Signatur oder auf Diffie-Hellman) abzuwehern,<br />

muß jeder User X den öffentlichen Schlüssel von jedem anderen User<br />

auf Echtheit überprüfen können. Hierzu werden Trustcenter verwendet.<br />

13 Es fragt sich natürlich, ob das schlimm wäre; ein Angreifer wird in aller Regel Unterschriften<br />

zu von ihm gewählten Nachrichten erzeugen wollen<br />

14 In aller Regel wird s 1 ≠ s 2 gelten.<br />

81


Sei T (Trustcenter) ein User, dessen Integrität außer Frage steht. Es wird verlangt,<br />

daß sich jeder User anfangs bei dem Trustcenter persönlich anmeldet.<br />

User X erzeugt seine Schlüssel d X , E X = g d X<br />

<strong>und</strong> legt bei der Anmeldung den<br />

öffentlichen Teil E X (oder wenigstens einen Fingerprint von E X ) dem Trustcenter<br />

vor. Den privaten Teil d X sollte User X geheim halten, d.h. nicht einmal das<br />

Trustcenter sollte d X erfahren 15 . Er bekommt bei der Anmeldung den öffentlichen<br />

Schlüssel E T des Trustcenters. Nun hat T Gewißheit über die Echtheit der<br />

öffentlichen Schlüssel aller User <strong>und</strong> jeder User hat wenigstens Gewißheit über<br />

den öffentlichen Schlüssel des Trustcenters.<br />

Jeder User X kann nun den öffentlichen Schlüssel E Y von einem anderen User<br />

Y anfragen. Das Trustcenter schickt dann E Y unterschrieben 16 an X.<br />

Das Trustcenter kann weitere Benutzer T 1 , · · · , T s (vielleicht Filialen in verschiedenen<br />

Ländern, oder Benutzer, die schon lange dabei sind <strong>und</strong> sich immer integer<br />

<strong>und</strong> kryptologisch klug verhalten haben) authorisieren, Neuanmeldungen<br />

durchzuführen. Ein neuer User N kann sich dann bei T i anmelden, T i schickt<br />

E N unterschrieben an T <strong>und</strong> T nimmt den Eintrag in der Schlüsseldatei vor. In<br />

einem solchen Fall wird von einem Web of Trust gesprochen.<br />

Gängige Trustcenter sind VeriTrust 17 , QuoVadis, Cybertrust ect.<br />

15 Manche Trustcenter verlangen/empfehlen die Hinterlegung der geheimen Schlüsselteile,<br />

für den Fall, daß ein User sein d X aus Versehen löscht. Man sollte wissen, daß ein solches<br />

Trustcenter alles mitlesen kann <strong>und</strong> auch die Unterschrift von jedem seiner User fälschen<br />

kann...<br />

16 Die Unterschrift von T kann X bereits verifizieren, weil X seit der Anmeldung Gewißheit<br />

über E T hat.<br />

17 VeriTrust ist der Marktführer. Der Wert dieser Firma wird auf über eine Mrd. US-Dollar<br />

geschätzt.<br />

82


Kapitel 6<br />

Quadratische Reste,<br />

Jacobi-Symbole <strong>und</strong><br />

Anwendungen<br />

6.1 Quadratische Reste<br />

Sei R ein Ring. Wir definieren R ×2 := {x 2 |x ∈ R × }. Dies ist eine Untergruppe<br />

der Einheitengruppe R × ; sie wird Gruppe der Quadrate in R × genannt. Per<br />

Definition gilt 0 /∈ R ×2 . Wenn p prim ist, dann werden die Elemente von F ×2<br />

p<br />

Quadrate in F × p oder quadratische Reste modulo p genannt.<br />

Sei b ∈ R × . Offenbar gilt: Genau dann ist die Gleichung X 2 = b lösbar über R,<br />

wenn b ∈ R ×2 gilt.<br />

Bemerkung 6.1.1 Z.B. gilt<br />

F × 5 = {[1]2 5, [2] 2 5, [3] 2 5, [4] 2 5} = {[1] 5 , [4] 5 } = {[1] 5 , [4] 5 , [3] 5 , [4] 5 },<br />

<strong>und</strong><br />

(Z/4) ×2 = {[1] 2 4, [3] 2 4} = {[1] 4 }<br />

(Z/8) ×2 = {[1] 2 8, [3] 2 8, [5] 2 8, [7] 2 8} = {[1] 8 }<br />

Sei p ≠ 2 eine Primzahl. Für a ∈ Z sei [a] := [a] p die Restklasse von a modulo<br />

p. Wir interessieren uns hauptsächlich für die Quadrate in F × p . Für jede Zahl<br />

a ∈ Z definieren wir das sogenannte Legendre-Symbol als<br />

⎧<br />

( ) a<br />

⎨ 0 falls p | a,<br />

= 1 falls [a] ∈ F ×2<br />

p ein Quadrat ist,<br />

p ⎩<br />

−1 falls [a] /∈ F ×2<br />

p ein Nicht-Quadrat ist.<br />

83


(<br />

Für zwei Zahlen a, b ∈ Z mit a = b mod p gilt<br />

) ( )<br />

:= zu setzen.<br />

(<br />

[a]<br />

p<br />

a<br />

p<br />

a<br />

p<br />

) (<br />

=<br />

b<br />

p<br />

)<br />

; es hat also Sinn<br />

Beispiel: Wir rechnen in F × 13 = {[1], [2], · · · , [12]}. Wir berechnen die Quadrate<br />

in F × 13 . x [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12]<br />

x 2 [1] [4] [9] [3] [12] [10] [10] [12] [3] [9] [4] [1]<br />

Somit gilt F ×2<br />

13<br />

= {[1], [3], [4], [9], [10], [12]}. Für das Jacobi-Symbol ergibt sich:<br />

x [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12]<br />

( x<br />

13)<br />

+1 −1 +1 +1 −1 −1 −1 −1 +1 +1 −1 +1<br />

Bemerkung 6.1.2 Sei p ≠ 2 eine Primzahl <strong>und</strong> g ∈ F × p eine Primitivwurzel.<br />

( )<br />

Dann gilt g<br />

k<br />

= (−1) k für alle k ∈ Z. (Mit anderen Worten: g k ist genau<br />

p<br />

dann ein Quadrat, wenn k gerade ist.)<br />

Beweis: Nimm an, dass g k ∈ F ×2<br />

p ein Quadrat ist. Dann gibt es ein b ∈ F × p mit<br />

g k = b 2 . Da g Primitivwurzel ist, muss jedes Element von F × p eine Potenz von<br />

g sein. Also existiert ein m ∈ Z mit b = g m (Es wird m = Log g (b) mod p − 1<br />

gelten). Es folgt g k = g 2m <strong>und</strong> wegen ord(g) = p − 1 folgt k = 2m mod p − 1.<br />

Da 2 | p − 1 gilt, folgt k = 2m = 0 mod 2.<br />

Die umgekehrte Implikation ist trivial.<br />

□<br />

Man sieht, dass genau die Hälfte der Elemente von F × p Quadrate sind. Für<br />

jedes Element a ∈ F × p gilt a = g Log g (a) <strong>und</strong> daraus folgt: Genau dann ist a ein<br />

( )<br />

Quadrat, wenn Log(a) = 0 mod 2 gilt. Man kann = (−1) log g (a) schreiben.<br />

Ist a ein Quadrat in F × Logg (a)<br />

p , so sind ±g 2 die beiden Lösungen der Gleichung<br />

X 2 = a über F p .<br />

a<br />

p<br />

Satz 6.1.3 Sei p ≠ 2 eine Primzahl.<br />

( )<br />

a<br />

1. Sei a ∈ Z nicht durch p teilbar. Dann gilt<br />

p<br />

= a p−1<br />

2 mod p. Beachte:<br />

Da p ungerade ist, muß p−1 durch 2 teilbar sein. Dieses Teilergebnis wird<br />

Satz von Euler genannt.<br />

( ) ( ) ( )<br />

2. Sei u, v ∈ F p . Dann gilt = . Insbesondere ist<br />

ein Homomorphismus.<br />

uv<br />

p<br />

F × p<br />

u<br />

p<br />

v<br />

p<br />

( ) u<br />

→ {±1}, u ↦→<br />

p<br />

84


Beweis: Sei m := (p − 1)/2 <strong>und</strong> g ∈ F × p<br />

mit [a] = g k . Daher gilt [a] m = g km .<br />

eine Primitivwurzel. Es gibt ein k ∈ Z<br />

(a m ) 2 = a p−1 = 1 mod p nach dem kleinen Satz von Fermat, <strong>und</strong> da F p ein<br />

Körper ist folgt daraus a m = 1 mod p oder a m = −1 mod p (∗).<br />

( )<br />

Wenn = 1 gilt, dann ist k nach obiger Bemerkung gerade, k = 2k ′ , <strong>und</strong><br />

a<br />

p<br />

[a] m = g 2k′m = (g k′ ) p−1 = [1] nach dem kleinen Satz von Fermat.<br />

( )<br />

Wenn = −1 gilt, dann ist k ungerade <strong>und</strong> km kann nicht durch ord(g) = p−<br />

a<br />

p<br />

1 = 2m teilbar sein. Also ist [a] m = g km ≠ [1] <strong>und</strong> mit (∗) folgt a m = −1 mod p.<br />

( )<br />

In jedem Fall gilt also a m = mod p.<br />

a<br />

p<br />

Sei nun u, v ∈ F × p . Wenn u = 0 oder v = 0 gilt, dann sind beide Seiten der<br />

( ) ( ) ( )<br />

uv u v<br />

Gleichung<br />

p<br />

=<br />

p p<br />

Null. Wir nehmen u, v ∈ F × p an. Es gibt k, l ∈ N<br />

mit u = g k <strong>und</strong> v = g l . Man folgert<br />

( ) ( )<br />

( ) ( )<br />

uv g<br />

k+l<br />

u v<br />

= = (−1) k+l = (−1) k (−1) l =<br />

p p<br />

p p<br />

mit Hilfe obiger Bemerkung.<br />

□<br />

Folgerung 6.1.4 Nach dem 2. Teil des obigen Satzes gilt in F × p : Das Produkt<br />

von zwei Quadraten ist ein Quadrat. Das Produkt von einem Quadrat mit einem<br />

Nicht-Quadrat ist ein Nicht-Quadrat. Das Produkt von zwei Nicht-Quadraten ist<br />

ein Quadrat! Letzteres ist in Q × ganz anders.<br />

Sei nun b ≥ 3 eine ungerade Zahl <strong>und</strong> b = p e1<br />

1 · · · pet t die Primfaktorzerlegung von<br />

b (p i paarweise verschiedene Primzahlen). Für a ∈ Z ist das Jacobi-Symbol<br />

definiert durch<br />

( a<br />

) ( ) e1<br />

( ) et<br />

a a<br />

= · · · .<br />

b p 1 p t<br />

Man beachte: b muß eine ungerade Zahl mit b ≥ 3 sein. An a ∈ Z werden<br />

keine weiteren Bedingungen gestellt.<br />

Beispiel: Ich möchte ( 2<br />

35)<br />

berechnen. Dazu kann man wie folgt vorgehen.<br />

Per Definition gilt ( (<br />

2<br />

35)<br />

=<br />

2<br />

( 2<br />

)<br />

5)<br />

7 . Ferner gilt F<br />

×2<br />

5 = {[1] 5 , [4] 5 } <strong>und</strong> F ×2<br />

7 =<br />

{[1] 2 7, [2] 2 7, [3] 2 7} = {[1] 7 , [4] 7 , [2] 7 }. Es folgt ( (<br />

2<br />

35)<br />

=<br />

2<br />

( 2<br />

5)<br />

7)<br />

= (−1)(+1) = −1. □<br />

Bemerkung 6.1.5 Sei b ≥ 3 ungerade.<br />

1. Sei a, a ′ ∈ Z. Wenn a = a ′ mod b gilt, dann muß a = a ′ mod p i für alle i<br />

gelten <strong>und</strong> daher gilt ( ) ( )<br />

( )<br />

a<br />

b =<br />

a ′<br />

b<br />

. Es hat Sinn [a]b<br />

b<br />

:= ( )<br />

a<br />

b zu definieren.<br />

2. Für u, v ∈ Z gilt ( ) (<br />

uv<br />

b = u<br />

) ( v<br />

)<br />

b b . Dies folgt unmittelbar aus der entsprechenden<br />

Rechenregel für das Legendre-Symbol.<br />

85


3. Für b, c ∈ N ungerade <strong>und</strong> u ∈ Z gilt ( u<br />

bc)<br />

=<br />

( u<br />

b<br />

) ( u<br />

c<br />

)<br />

. Dies folgt leicht aus<br />

der Definition des Jacobi-Symbols.<br />

4. Wenn a nicht zu b teilerfremd ist, dann gilt ( a<br />

b<br />

)<br />

= 0.<br />

Sei a ∈ (Z/b) × . Wenn a ein Quadrat ist, d.h. wenn a = x 2 für ein x ∈ (Z/b) ×<br />

gilt, dann wird ( ) (<br />

a<br />

b = x<br />

) 2<br />

b = +1 gelten. Wenn b keine Primzahl ist, dann<br />

kann die Umkehrung dieser Aussage falsch sein!<br />

Beispiel: Ferner gilt F ×2<br />

3 = {[1] 3 } <strong>und</strong> F ×2<br />

5 = {[1] 5 , [4] 5 }. Z.B. gilt nun ( 2<br />

( 15)<br />

=<br />

2<br />

) ( 2<br />

)<br />

3 5 = (−1)(−1) = +1. Wir haben zweimal den Ergänzungssatz verwendet.<br />

Wir rechnen in (Z/15) × . Wir berechnen die Quadrate in (Z/15) × .<br />

x [1] [2] [4] [7] [8] [11] [13] [14]<br />

x 2 [1] [4] [1] [4] [4] [1] [4] [1]<br />

.<br />

Man sieht: [2] /∈ (Z/15) ×2 , obwohl ( 2<br />

15)<br />

= +1<br />

Wie berechnet man ( ) (<br />

82<br />

15 ? Wegen 82 = 2 mod 5 <strong>und</strong> 82 = 1 mod 3 gilt 81<br />

( 2<br />

) ( 1<br />

)<br />

5 3 = (−1)(+1) = −1.<br />

15)<br />

=<br />

6.2 Das Reziprozitätsgesetz von Gauß<br />

Wir kommen zu dem zentralen Satz über Jacobi-Symbole.<br />

Satz 6.2.1 (Reziprozitätsgesetz von Gauß) Seien n, m ≥ 3 zwei ungerade<br />

Zahlen. Dann gilt<br />

( m<br />

) (n−1)(m−1) (<br />

n = (−1) 4 n<br />

)<br />

m .<br />

Man beachte: Da n, m ungerade sind muß sowohl n − 1 als auch m − 1 gerade<br />

sein <strong>und</strong> daher ist (n − 1)(m − 1) durch 4 teilbar.<br />

Satz 6.2.2 (Ergänzungssatz) Sei b ≥ 3 ungerade.<br />

1. ( )<br />

1<br />

b = +1.<br />

2. ( {<br />

) b−1<br />

−1<br />

b = (−1) 2<br />

+1 b = 1 mod 4<br />

=<br />

−1 b = 3 mod 4 .<br />

3. ( {<br />

) b 2<br />

b = (−1) 2 −1<br />

8<br />

+1 b = ±1 mod 8<br />

=<br />

. Beachte: Weil b ungerade ist<br />

−1 b = ±3 mod 8<br />

<strong>und</strong> (Z/8) 2 = {[1] 8 } gilt (siehe 6.1.1) muß b 2 − 1 durch 8 teilbar sein.<br />

Das Reziprozitätsgesetz ist das tiefste zahlentheoretische Resultat, das in dieser<br />

Vorlesung behandelt wird. Es hat zahllose theoretische <strong>und</strong> praktische Anwendungen.<br />

Die für uns wichtigste Anwendung besteht in Algorithmen für die<br />

86


Berechnung des Jacobi-Symbols (also insbesondere ein Test, ob [a] p (a ∈ Z) ein<br />

Quadrat in F p ist) <strong>und</strong> für das Ziehen der Wurzel aus [a] p , falls [a] p ∈ F ×2<br />

p . Dies<br />

wird z.B. im Public-Key-Verfahren von Rabin angewendet. Man kann sich fragen,<br />

ob ein ähnliches Gesetz für höhere Potenzreste gilt. Diese Frage wurde erst<br />

in den 1960er Jahren im Rahmen der sogenannten Klassenkörpertheorie geklärt.<br />

Eine Behandlung dessen würde den Rahmen dieser Vorlesung sprengen.<br />

Wir verzichten auf den Beweis von 6.2.2 <strong>und</strong> 6.2.1 Vorher wollen wir Anwendungen<br />

des Reziprozitätsgesetzes diskutieren.<br />

Beispiel: 101 ist eine Primzahl. Ist [79] 101 ∈ F × 101 ein Quadrat? Um dies zu<br />

beantworten berechnen wir ( 79<br />

101)<br />

. Es gilt<br />

( )<br />

( ) ( )<br />

79<br />

101 101<br />

= (−1) 78·100/4 = +<br />

101<br />

79 79<br />

nach dem Reziprozitätsgesetz. Da 101 = 22 mod 79 gilt folgt<br />

( ) ( ) ( ) ( ) ( )<br />

101 22 2 11 11<br />

= =<br />

= + .<br />

79 79 79 79 79<br />

Im letzten Schritt haben wir den Ergänzungssatz verwendet; beachte 79 =<br />

−1 mod 8. Weil 11 <strong>und</strong> 79 ungerade sind, dürfen wir wieder das Reziprozitätsgesetz<br />

anwenden:<br />

( 11<br />

79<br />

)<br />

( ) 79<br />

= (−1) 10∗78/4 = −<br />

11<br />

( ) ( 79 2<br />

= − .<br />

11 11)<br />

Im letzten Schritt haben wir 79 = 2 mod 11 verwendet. Da 11 = 3 mod 8 gilt,<br />

liefert der Ergänzungssatz<br />

( 2<br />

− = (−1)(−1) = +1.<br />

11)<br />

Insgesamt ergibt sich ( 79<br />

101)<br />

= +1, d.h. [79]101 ist ein Quadrat. □<br />

Algorithmus 6.2.3 (Algorithmus für Jacobi-Symbole)<br />

( Eingabe: a ∈ Z, b ∈ N mit b ungerade.<br />

a<br />

)<br />

b soll berechnet werden.<br />

Initialisiere: s := 1.<br />

if(a < 0, a := |a|; s := (−1) (b−1)/2 )<br />

(Nun a, b > 0, b ungerade.)<br />

while(a /∈ {0, 1},<br />

Berechne q, r mit a ÷ b = q Rest r, r ≥ 0.<br />

a := r.<br />

if (2 | a <strong>und</strong> a > 1 schreibe a = 2 t u mit u ungerade; a := u, s := ((−1) (b2 −1)/8 ) t s).<br />

(Nun a ∈ {0, · · · , b} ungerade.)<br />

if (a > 1, s := (−1) (a−1)(b−1)/4 s; vertausche a <strong>und</strong> b)<br />

87


) /* Ende while<br />

if(a=0, s:=0);<br />

Ausgabe: Das gesuchte Jacobi-Symbol ist s.<br />

Man beachte, daß das Produkt s·( a<br />

b<br />

)<br />

bei keinem der Teilschritte verändert wird.<br />

Nach jedem Schleifendurchlauf sinkt a ab.<br />

Dieser Algorithmus ist sehr schnell. Die Laufzeit ist ähnlich schnell wie bei dem<br />

euklidischen Algorithmus zur Berechnung von ggT (a, b).<br />

Sei nun p ≠ 2 eine Primzahl <strong>und</strong> a ∈ F × p . Wir schreiben sqrt(a) := {x ∈ F p :<br />

x 2 = a} für die Lösungsmenge der Gleichung X 2 = a. Mit(<br />

obigem ) Algorithmus<br />

kann man testen, ob a ein Quadrat ist oder nicht. Falls = −1 so ist a ∈<br />

F × p \ F ×2<br />

p <strong>und</strong> die Gleichung X 2 = a hat keine Lösung, d.h. sqrt(a) = ∅. Wenn<br />

( )<br />

= 0, dann gilt a = 0 <strong>und</strong> sqrt(a) = {0}.<br />

a<br />

p<br />

(<br />

Wenn<br />

a<br />

p<br />

)<br />

= +1, dann hat die Gleichung X 2 = a genau zwei Lösungen x <strong>und</strong><br />

−x <strong>und</strong> sqrt(a) ist zweielementig. Aber wie findet man diese Lösungen?<br />

Beispiel: Wir rechnen in F 13 . Nach der Tabelle im Beispiel zu Beginn dieses<br />

Beispiels liest man leicht ab: sqrt([2]) = ∅, sqrt([10]) = {[6], [7]} = {[6], [−6]},<br />

sqrt([12]) = {[5], [8]} ect. □.<br />

Das Anlegen einer geeigneten Tabelle ist für die Berechnung von sqrt(a) ein<br />

unnötig langsames Verfahren. Es gibt eine viel schnellere Möglichkeit. Wir beginnen<br />

mit dem einfachen Sonderfall p = 3 mod 4.<br />

a<br />

p<br />

Satz 6.2.4 Sei p eine Primzahl mit p = 3 mod 4 <strong>und</strong> a ∈ F × p ein Element mit<br />

( )<br />

= +1. Sei 1 x := a p+1<br />

4 . Dann gilt x 2 = a, d.h. sqrt(a) = {x, −x}.<br />

a<br />

p<br />

(<br />

Beweis: Es gilt x 2 = a (p+1)/2 = a (p−1)/2+1 = a (p−1)/2 a = a, denn aus<br />

a<br />

p<br />

)<br />

= +1<br />

folgt a (p−1)/2 = [1] p (alle Rechnungen in F p ) nach dem Satz von Euler 6.1.3. □<br />

Beispiel: Wir rechnen in F 23 . Es gilt ( 2<br />

23)<br />

= +1 nach dem Ergänzungssatz 6.2.2<br />

(beachte 23 = 7 = −1 mod 8). Daher ist [2] 23 ein Quadrat. Es gilt 2 (23+1)/4 =<br />

2 6 = 64 = 18 mod 23. Wegen 23 = 3 mod 4 muss muß nach obigem Satz<br />

18 2 = 2 mod 23 gelten <strong>und</strong> natürlich folgt dann auch (−18) 2 = 5 2 = 2 mod 23.<br />

Also ist sqrt([2]) = {[18], [−18]} = {[5], [18]} die Lösungsmenge der Gleichung<br />

X 2 = [2] über F 23 . (Man kann sich nachträglich leicht direkt davon überzeugen,<br />

dass 5 2 = 25 = 2 mod 23 <strong>und</strong> 18 2 = 324 = 2 mod 23 gilt.)<br />

Wegen 23 = 3 mod 4 gilt ( )<br />

−1<br />

23 = −1 (vgl. 6.2.2) <strong>und</strong> somit sqrt([−1]23 ) = ∅.<br />

D.h. die Gleichung X 2 = [−1] hat keine Lösung in F 23 .<br />

□<br />

1 Beachte: p + 1 = 4 = 0 mod 4, d.h. p + 1 ist durch 4 teilbar.<br />

88


Sei nun p ≠ 2 eine beliebige Primzahl. Wir schreiben p − 1 = 2 s u mit einer<br />

ganzen Zahl s ≥ 1 <strong>und</strong> einer ungeraden Zahl u. Für a ∈ F × p setzen wir<br />

δ(a) := a u<br />

Bemerkung 6.2.5 a) Es gilt δ(a) 2s−1 = a p−1<br />

2 =<br />

von Euler 6.1.3.<br />

(<br />

a<br />

p<br />

)<br />

in F p nach dem Satz<br />

a’) Wenn a ein Quadrat ist, dann ist δ(a) ein Quadrat <strong>und</strong> ord(δ(a)) | 2 s−1 .<br />

( ) 2<br />

b) Es gilt δ(a) 2s a<br />

=<br />

p = 1.<br />

c) Wenn a ein Nicht-Quadrat ist, dann gilt ord(δ(a)) = 2 s .<br />

Beweis: Nur c) ist nicht-trivial. Nach b) muß ord(δ(a)) | 2 s , also ord(δ(a)) ( = ) 2 t<br />

mit 0 ≤ t ≤ s gelten. Sei a ein Nicht-Quadrat. Wäre t < s, so würde =<br />

δ(a) 2s−1 = 1 folgen; Widerspruch. □<br />

( )<br />

Sei nun p ≠ 2 eine beliebige Primzahl. Wir nehmen nun an, dass = 1. Wie<br />

kann man die Wurzel aus a berechnen? Sei ˜x := a u+1<br />

2 . ˜x läßt sich aus a mit<br />

Square and Multiply schnell berechnen. Man sollte ˜x als eine erste Approximation<br />

an eine Wurzel von a ansehen. Offenbar gilt a = ˜x 2 δ(a) −1 ; man kann also<br />

δ(a) als den “Fehlerterm” der Approximation ansehen. Nach obiger Bemerkung<br />

ist δ(a) ein Quadrat <strong>und</strong> ord(δ(a)) | 2 s−1 . Es bleibt die Wurzel aus δ(a) zu<br />

ziehen.<br />

Für d | p − 1 sei µ d die Untergruppe der Ordung d in der zyklischen Gruppe F × p .<br />

Sei ζ ∈ F × p ein Element der Ordnung 2 s (es gibt nach 4.1.10 genau ϕ(2 s ) = 2 s−1<br />

solche Elemente). Dann gilt µ 2 s = 〈ζ〉. Nach obiger Bemerkung gilt ord(δ(a)) =<br />

2 t mit t < s <strong>und</strong> <strong>und</strong> somit ist δ(a) ein Erzeuger von µ 2 t (vgl. 4.1.9). Mit 4.1.8<br />

folgt µ 2 t ⊂ µ 2 s, also δ(a) ∈ 〈ζ〉. Sei L ∈ N mit L = log ζ (a) mod 2 s . Dann gilt<br />

ζ L = δ(a). Da δ(a) ∈ µ 2 t ein Quadrat ist, muß L gerade sein. Also ist ζ L/2 eine<br />

Wurzel aus δ(a). Daher muß x := ˜xζ −L/2 = a u+1<br />

2 ζ −L/2 eine Wurzel von a sein.<br />

Wir haben bewiesen:<br />

Fazit:<br />

x = a u+1<br />

2 ζ<br />

− log ζ (a u )/2<br />

erfüllt x 2 = a <strong>und</strong> sqrt(a) = {x, −x}. x läßt sich aus a (<strong>und</strong> p) leicht berechnen,<br />

sofern ein Element ζ der Ordnung 2 s bekannt ist: Die Exponentiationen können<br />

mit Square and Multiply in Polynomzeit (in der Bitlänge von p) berechnet<br />

werden, <strong>und</strong> der diskrete Logarithmus log ζ (y) ist mit der Silver-Pohig-Hellman-<br />

Methode 4.3.2, 4.3.3 Polynomzeit berechenbar, weil ord(ζ) eine Potenz von 2<br />

ist.<br />

Aber wie kommt man zu einem Element ζ ∈ F × p der Ordnung 2 s ? Nach obiger<br />

Bemerkung ist klar: Wenn b ∈ F × p ein beliebiges Nichtquadrat ist, dann hat<br />

ζ := δ(b) = b u Ordnung 2 s .<br />

a<br />

p<br />

a<br />

p<br />

89


Algorithmus 6.2.6 (Algorithmus für Quadratwurzeln in F p )<br />

Eingabe: p ≠ 2 prim, a ∈ F ×2<br />

p ein Quadrat. Ferner muß zur Unterstützung des<br />

Algorithmus ein Nicht-Quadrat b ∈ F × p eingegeben werden.<br />

Berechne s, u mit u ungerade <strong>und</strong> p − 1 = 2 s u.<br />

Berechne ζ := b u .<br />

Berechne x := a u+1<br />

2 ζ − log ζ (au )/2 mit Square and Multiply <strong>und</strong> Silver-Pohig-<br />

Hellman.<br />

Ausgabe: x ist eine Wurzel aus a.<br />

Dies ist ein deterministischer Algorithmus mit polynomialer Laufzeit in der<br />

Bitlänge von p.<br />

Wie kommt man zu einem Nicht-Quadrat?<br />

Algorithmus 6.2.7 (Algorithmus zur Konstruktion eines Nicht-Quadrates)<br />

Eingabe: p ≠ 2 prim.<br />

i := 2 ( )<br />

i<br />

while(<br />

p<br />

≠ −1, i:=i+1);<br />

Die Jacobi-Symbole sind mit 6.2.3 berechnet werden.<br />

Ausgabe: [i] p ist ein Nicht-Quadrat.<br />

Da 50% der Elemente von F p Nicht-Quadrate sind, ist der Erwartungswert<br />

für die Anzahl der Durchläufe der while-Schleife gleich 2. Die Jacobi-Symbole<br />

können in Polynomialzeit berechnet werden. Daher hat dieser Algorithmus erwartete<br />

Polynomialzeit in der Bitlänge von p.<br />

Wir halten fest: Für ein Element a ∈ F p kann man in Polynomialzeit<br />

entscheiden, ob a ein Quadrat ist, <strong>und</strong> in erwarteter Polynomialzeit<br />

kann man ggfls. eine Wurzel aus a berechnen.<br />

6.3 Der Solovay-Strassen Primzahltest<br />

Wir erläutern in diesem Abschnitt einen probablistischen Primzahltest von Solovay<br />

<strong>und</strong> Strassen, der alternativ zum Miller-Rabin-Test verwendet werden kann.<br />

Dieser Primzahltest beruht auf dem Satz von Euler 6.1.3.<br />

Sei N eine ungerade natürliche Zahl. Wir nennen eine Zahl a ∈ {1, · · · , N − 1}<br />

einen Solovay-Strassen-Zeugen gegen die Primalität von N, falls 1 /∈<br />

ggT (a, N) oder<br />

(<br />

a N−1 a<br />

)<br />

2 ≠ mod N<br />

N<br />

90


gilt. Sei Z(N) die Menge der Solovay-Strassen-Zeugen (in diesem Abschnitt<br />

kurz: Zeugen) gegen die Primalität von N. Aus dem Satz von Euler 6.1.3 folgt:<br />

Wenn Z(N) ≠ ∅, dann ist N sicher zusammengesetzt. Oder anders gesagt: Wenn<br />

N prim ist, dann gilt Z(N) = ∅.<br />

Lemma 6.3.1 Wenn N zusammengesetzt ist, dann gibt es eine zu N teilerfremde<br />

Zahl a ∈ Z(N).<br />

Beweis. Siehe [So].<br />

Satz 6.3.2 Wenn N zusammengesetzt ist, dann ist |Z(N)| ≥ N 2 .<br />

Beweis. Sei<br />

U = {[a] : 1 ≤ a ≤ N − 1 zu N teilerfremd <strong>und</strong> a /∈ Z(N).<br />

Dies ist eine Untergruppe von (Z/N) × . Nach dem Lemma gilt U ≠ (Z/N) × .<br />

Da |U| ein Teiler von ϕ(N) sein muß, folgt |U| ≤ ϕ(N)/2 ≤ N/2. Daher gilt die<br />

Behauptung.<br />

□<br />

Zusammenfassend kann man sagen:<br />

a) Wenn N prim ist, dann ist Z(N) = ∅.<br />

b) Wenn N zusammengesetzt ist, dann sind mindestens 50 Prozent der Zahlen<br />

im Bereich {0, · · · , N − 1} Zeugen gegen die Primalität von N.<br />

Algorithmus 6.3.3 (Solovay-Strassen-Test)<br />

Eingabe: N ungerade <strong>und</strong> ein Steuerparameter t, der die Fehlerwahrscheilichkeit<br />

regelt.<br />

Man testet für t Zufallszahlen im Bereich a ∈ {0, · · · , N − 1}, ob a ∈ Z(N).<br />

Wird dabei ein Zeuge gegen die Primalität von N gef<strong>und</strong>en, gib aus “N ist<br />

zusammengesetzt”.<br />

Wird dabei kein Zeuge gegen die Primalität von N gef<strong>und</strong>en, gib aus “N ist<br />

wahrscheinlich prim”.<br />

Die Fehlerwahrscheinlichkeit dieses Monte-Carlo-Verfahrens ist ≤ 2 −t .<br />

6.4 Das Rabin-Verfahren<br />

Sei R ein Ring <strong>und</strong> a ∈ R. Wir bezeichnen mit sqrt R (a) die Lösungsmenge der<br />

Gleichung X 2 = a über R. Wenn R ein Körper ist, dann gilt |sqrt R (a)| ≤ 2, da<br />

ein Polynom zweiten Grades über einem Körper höchstens zwei Nullstellen hat.<br />

91


Wir erinnern an die Hauptergebnisse aus Abschnitt 6:<br />

a) Für n ∈ Z <strong>und</strong> m > 0 ungerade läßt sich das Jacobi-Symbol ( n<br />

m)<br />

mit dem<br />

Algorithmus ?? schnell (in Polynomzeit) berechnen.<br />

(<br />

b) Sei p ≠ 2 prim. Für a ∈ F p hat die Gleichung X 2 = a (∗) genau<br />

( )<br />

Lösungen. Z.B. hat (∗) keine Lösung genau dann, wenn = −1.<br />

(<br />

c) Sei p = 3 mod 4 <strong>und</strong><br />

a<br />

p<br />

a<br />

p<br />

a<br />

p<br />

)<br />

+ 1<br />

)<br />

≠ −1. Dann ist X 2 = a lösbar <strong>und</strong> die Lösungsmenge<br />

kann durch die Formel sqrt Fp<br />

(a) = {a p+1<br />

4 , −a p+1<br />

4 } schnell berechnet<br />

werden (Square and Multiply).<br />

(<br />

d) Auch im Fall p = 1 mod 4 <strong>und</strong><br />

a<br />

p<br />

)<br />

≠ −1 kann sqrt Fp<br />

(a) in Polynomzeit<br />

berechnet werden; der Algorithmus dafür ist aber etwas komplizierter als<br />

die Formel in c). Siehe 6.2.6 <strong>und</strong> 6.2.7.<br />

Seien nun p ≠ q ungerade Primzahlen <strong>und</strong> N = pq. Wie berechnet man Wurzeln<br />

in Z/N?<br />

Berechnung von Wurzeln in Z/pq, wobei p <strong>und</strong> q bekannt sind.<br />

Der chinesische Restsatz 2.6.1 liefert einen Isomorphismus<br />

f : Z/N → F p × F q , [x] N ↦→ ([x] p , [x] q ).<br />

f <strong>und</strong> f −1 sind schnell berechenbar mit dem euklidischen Algorithmus.<br />

Zur Erinnerung: Sei ([a] p , [b] q ) ∈ F p × F q . Sei x ∈ {0, · · · , N − 1} die Lösung des<br />

Systems<br />

x = a mod p<br />

x = b mod q<br />

von Kongruenzen. Dann gilt [x] N = f −1 ([a] p , [b] q ).<br />

Um X 2 = [a] N (∗) über Z/N zu lösen genügt es also (X 1 , X 2 ) 2 = ([a] p , [a] q )<br />

über F p × F q zu lösen <strong>und</strong> das läuft auf die (nicht gekoppelten) Gleichungen<br />

X1 2 = [a] p (∗∗ 1 ) über F p <strong>und</strong><br />

X2 2 = [a] q (∗∗ 2 ) über F q<br />

hinaus. Man ist also durch den chinesischen Restsatz darauf zurückgeführt, die<br />

Gleichungen (∗∗ 1 ) <strong>und</strong> (∗∗ 2 ) mit den Methoden aus Abschnitt 6 zu lösen, <strong>und</strong><br />

dann gewisse Systeme von Kongruenzen zu lösen. Wir gehen auf die Details ein.<br />

(<br />

Wenn<br />

a<br />

p<br />

)<br />

(<br />

= −1 oder<br />

a<br />

q<br />

)<br />

= −1 gilt, dann hat (∗∗) <strong>und</strong> auch (∗) keine Lösung.<br />

( ) ( )<br />

a<br />

a<br />

Nimm nun<br />

p<br />

≠ −1 <strong>und</strong><br />

q<br />

≠ −1 an. Dann wird (∗∗) <strong>und</strong> auch (∗) Lösungen<br />

haben. Wir wollen diese finden.<br />

Berechne w p ∈ sqrt Fp<br />

([a] p ) eine Wurzel aus [a] p in F p . Diese kann mit den<br />

Methoden aus 6 schnell berechnet werden. (Wenn p = 3 mod 4, dann kann<br />

92


einfach w p = [a] p+1<br />

4<br />

p gesetzt werden.)<br />

Sei w q ∈ sqrt Fq<br />

([a] q ) eine Wurzel aus [a] q in F q .<br />

Dann ist<br />

L := {(w p , w q ), (−w p , w q ), (−w p , −w q ), (w p , −w q )<br />

} {{ } } {{ } } {{ } } {{ }<br />

=:u ′ =:v ′ =−u ′ =−v ′<br />

die Lösungsmenge von (∗∗). Sei u := f −1 (u ′ ) <strong>und</strong> v := f −1 (v ′ ). (Zur Berechnung<br />

von u ist das System von Konguenzen<br />

u = w p mod p<br />

u = w q mod q zu lösen.<br />

Zur Berechnung von v ist das System von Konguenzen<br />

v = −w p mod p<br />

v = w q mod q zu lösen.)<br />

Die Lösungsmenge von (∗) ist<br />

sqrt Z/N ([a] N ) = {u, v, −u, −v}.<br />

Manche Lösungen können zusammenfallen, d.h. |sqrt Z/N ([a] N )| ≤ 4. In Z/N<br />

(das ist sicher keine Körper) kann das Polynom X 2 = [a] N bis zu vier Nullstellen<br />

haben. Wie viele es genau sind richtet sich nach den Jacobisymbolen; es gilt<br />

|sqrt Z/N ([a] N )| =<br />

(<br />

1 +<br />

( a<br />

p<br />

)) (<br />

1 +<br />

( a<br />

q<br />

))<br />

.<br />

Wenn p ≠ q ungefähr gleich große, große Primzahlen sind, dann wird in aller<br />

Regel sqrt Z/N ([a] N ) = ∅ (≈ 75% der Fälle) oder |sqrt Z/N ([a] N )| = 4 (≈ 25% der<br />

Fälle) gelten.<br />

□<br />

Fazit: Wenn p <strong>und</strong> q bekannt sind, dann kann die Gleichung X 2 = [a] über<br />

Z/pq schnell (in Polynomzeit) behandelt werden.<br />

Sei nun [a] ∈ (Z/N) ×2 <strong>und</strong> sqrt Z/N ([a] N ) = {u, v, −u, −v}. Sei û (bzw. ˆv) der<br />

kleinste nicht-negative Repräsentant von u (bzw. v). Aus f(u + v) = (0, 2w q )<br />

folgt p | û + ˆv aber q teilt nicht û + ˆv. Daraus folgt p ∈ ggT (û + ˆv.<br />

Man sieht: Wer N <strong>und</strong> die vier Wurzeln aus einem Element a ∈ (Z/N) ×2 kennt,<br />

der kann die Primfaktorzerlegung von N leicht berechnen. Er hat nur mit dem<br />

euklidischen Algorithmus einen ggT zu berechnen.<br />

Fazit: Sei p <strong>und</strong> q nicht bekannt. Das Berechnen der vier Wurzeln eines Quadrates<br />

a ∈ (Z/N) ×2 ist genauso schwer, wie das Berechnen der Primfaktorzerlegung<br />

von N. Wenn p <strong>und</strong> q 1000-Bit-Zahlen sind, so ist beides praktisch unmöglich.<br />

Beispiele: Wir rechnen in R := Z/77. Die Primfaktorzerlegung von 77 ist<br />

77 = 7 · 11.<br />

a) Löse X 2 = [24] 77 (∗). Es gilt<br />

( ) ( 24 3<br />

=<br />

7 7)<br />

( ( 7 1<br />

= − = − = −1.<br />

3)<br />

3)<br />

93


Daraus 2 folgt, daß (∗) keine Lösung hat, d.h. sqrt R ([24] 77 ) = ∅.<br />

b) Löse X 2 = [15] 77 . Es gilt ( ) (<br />

15<br />

7 = 1<br />

) (<br />

7 = +1 <strong>und</strong> 15<br />

(<br />

11)<br />

=<br />

4<br />

11)<br />

= +1. Also<br />

wird es (genau 4) Lösungen geben.<br />

Finde zuerst eine Lösung X 2 = [15] 7 (= [1] 7 ) über F 7 . Offensichtlich ist<br />

w 7 = [1] 7 ∈ sqrt([1] 7 ) eine solche Lösung.<br />

Nun wird eine Lösung von X 2 = [15] 11 (= [4] 11 ) gebraucht. Offensichtlich<br />

hat w 11 = [2] 11 diese Eigenschaft.<br />

Eine Lösung von x = 1 mod 7 <strong>und</strong> x = 2 mod 11 ist x = 57.<br />

Eine Lösung von y = −1 mod 7 <strong>und</strong> y = 2 mod 11 ist y = 13.<br />

Somit ist<br />

sqrt R ([15] 77 ) = {[57] 77 , [−57] 77 , [13] 77 , [−13] 77 } = {[13] 77 , [20] 77 , [57] 77 , [64] 77 }<br />

die Lösungsmenge von X 2 = [15] 77 über Z/77, d.h. die Menge der vier<br />

Wurzeln aus [15] 77 .<br />

□<br />

Seien p ≠ q 1000-Bit-Primzahlen <strong>und</strong> N = pq. Die Funktion<br />

s : Z/N → Z/N, x ↦→ x 2<br />

ist ein wichtiges Beispiel für eine Trapdoor-Oneway-Funktion, d.h.<br />

a) s(x) ist aus x schnell berechenbar.<br />

b) Wer p <strong>und</strong> q kennt, der kann zu gegebenem y alle Wurzeln berechnen, d.h.<br />

s −1 (y) bestimmen.<br />

c) Wer p <strong>und</strong> q nicht kennt, für den ist “die Falltüre geschlossen”. Ohne p <strong>und</strong><br />

q zu kennen ist es für (die meisten) y praktisch unmöglich alle Wurzeln zu<br />

berechnen, d.h. s −1 (y) zu bestimmen (oder p <strong>und</strong> q zu finden).<br />

Alice möchte sich mit dem Rabin-Verfahren verschlüsselte Nachrichten schicken<br />

lassen können. Wie bei RSA wählt sie zwei große Primzahlen p ≠ q. Sie berechnet<br />

N = pq. (Derzeit gilt es als sicher, mit 1000-Bitzahlen p <strong>und</strong> q zu arbeiten.<br />

Um einem Angriff mit der p − 1-Methode vorzubeugen ist es sinnvoll p <strong>und</strong> q so<br />

zu wählen, daß (p−1) <strong>und</strong> (q −1) je einen großen (vielleicht 300 Bit) Primfaktor<br />

haben. p <strong>und</strong> q sollten nicht allzu nah beisammen liegen. Vgl. die Bemerkungen<br />

zu RSA.)<br />

Alice macht nun N öffentlich.<br />

Sie hält p <strong>und</strong> q geheim.<br />

Verschlüsselung: Der Nachrichtenraum ist Z/N. Bob verschlüsselt seine Nachricht<br />

m ∈ Z/N zu c = m 2 <strong>und</strong> überträgt c an Alice.<br />

2 Es gilt ( ) ( 24<br />

11 = −1 <strong>und</strong> übrigends 24 )<br />

77 = +1, aber diese Informationen werden hier nicht<br />

gebraucht.<br />

94


Entschlüsselung: Alice empfängt c ∈ Z/N <strong>und</strong> berechnet die (bis zu) vier<br />

Wurzeln sqrt(c). Sie kann dazu den chinesischen Restsatz verwenden, weil sie p<br />

<strong>und</strong> q kennt. Die Nachricht muß eine dieser bis zu 3 vier Wurzeln sein.<br />

Beispiel: Alice hat als öffentlichen Schlüssel N = 77 gewählt 4 . Bob will die<br />

Nachricht m = [10] an Alice schicken. Die Verschlüsselung von m ist m 2 =<br />

[100] = [23]. Bob schickt also [23] an Alice. □<br />

Beispiel: Alice kennt die Primfaktorzerlegung von 77 = pq; p = 7, q = 11.<br />

Sie erhält die Nachricht c = [23]. Um dies zu entschlüsseln muß sie sqrt([23] 77 )<br />

berechnen. Sie kann von vorne herein davon ausgehen, daß X 2 = [23] 77 lösbar<br />

ist - das liegt hier in der Natur des Verfahrens.<br />

Eine Lösung von X 2 = [23] 7 (= [2] 7 ) über F 7 ist (beachte 7 = 3 mod 4)<br />

w 7 := [2] (7+1)/4<br />

7 = [4] 7 .<br />

Eine Lösung von X 2 = [23] 11 (= [1] 11 ) über F 11 ist w 11 = [1] 11 (offensichtlich).<br />

Alice löst das System<br />

u = 4 mod 7<br />

u = 1 mod 11<br />

<strong>und</strong> findet die Lösung u = 67-<br />

Dann löst sie das System v = −4 mod 7<br />

v = 1 mod 11<br />

<strong>und</strong> findet die Lösung v = 45.<br />

Also gilt<br />

sqrt([23] 77 ) = {[67] 77 , [−67] 77 , [45] 77 , [−45] 77 } = {[10] 77 , [32] 77 , [45] 77 , [67] 77 }.<br />

Welcher dieser vier Werte der Klartext ist, kann sie nicht rekonstruieren. Wir<br />

werden unten erläutern, wie man diesen “Mißstand” beheben kann. □<br />

Der entscheidende Vorteil des Rabin-Verfahrens ist, daß man wirklich beweisen<br />

kann, daß das Berechnen der Wurzeln aus einem Geheimtext c ∈ (Z/N) ×<br />

genauso schwer ist, wie das Faktorisieren von N.<br />

In Anwendungen benötigt man geeignete Padding-Abbildungen pad : A ∗ →<br />

(Z/N) ∗ <strong>und</strong> repad : (Z/N) ∗ → A ∗ mit repad ◦ pad = Id, wobei A = {0, 1} oder<br />

A = ASCII gilt. pad verwandelt einen Bitvektor oder ASCII-Text in einen<br />

Vektor von Elementen in Z/N, der dann blockweise mit Rabin verschlüsselt<br />

<strong>und</strong> übertragen werden kann. Nach dem Entschlüsseln entsteht ein Vektor über<br />

Z/N, aus dem mit der Routine repad der ursprüngliche Bitvektor oder ASCII-<br />

Text gewonnen werden kann.<br />

Wer eine nicht randomisierte Padding-Abbildung verwendet, hat keinen Schutz<br />

gegen Wörterbuchangriffe der folgenden Form: Nimm an, Oskar kann alles<br />

abhören. Er will herausfinden, ob jemand den Text “Ich liebe Dich” an Alice<br />

3 Höchstwahrscheinlich werden es genau vier Wurzeln sein.<br />

4 Dies ist viel zu klein, um sicher zu sein.<br />

95


schickt. Oskar überlegt sich, was er an Alice schicken würde, wenn er “Ich liebe<br />

Dich” an sie schreiben wollte. Er wendet pad an <strong>und</strong> verschlüsselt das mit<br />

dem öffentlichen Schlüssel N von A. Dabei kommt er vielleicht auf die Zahl<br />

[207892340789024839234893028032189] N . Sobald er unter den Nachrichten an<br />

Alice die Zahl [207892340789024839234893028032189] N sieht, weiß er Bescheid<br />

...<br />

pad sollte also unbedingt eine randomisierte Abbildung sein, d.h. pad sollte<br />

in jeden Block ein paarh<strong>und</strong>ert Zufallsbits einfügen, die dann von repad wieder<br />

entfernt werden.<br />

Ein offensichtlicher Nachteil des obigen Protokolls ist, daß die Nachricht beim<br />

Entschlüsseln nicht eindeutig rekonstruiert wird. Hier kann man sich so behelfen.<br />

Die Abbildung pad sorgt dafür, daß jeder Block in pad(T ) = (m 1 , m 2 , · · ·)<br />

(für jeden Text T ) eine besondere Struktur bekommt. Z.B. könnte es so eingerichtet<br />

werden, daß in der Dualdarstellung des kleinsten Repräsentanten von<br />

m i die letzten 32 Bit mit den vorletzten 32 Bit übereinstimmen. Dann kann<br />

man aus den (bis zu) vier Wurzeln von c i = m 2 i höchstwahrscheinlich m i leicht<br />

rekonstruieren.<br />

Es ist klar, daß auch das Rabin-Verfahern unsicher gegen Man-in-the-Middle-<br />

Angriffe ist, solange es nicht innerhalb eines Systems mit Signatur <strong>und</strong> Trustcenter<br />

betrieben wird. Kurz gesagt: Bob sollte auch hier eine Möglichkeit haben<br />

sich zu vergewissern, daß der Schlüssel N, den er irgendwo aus dem Netz gezogen<br />

hat, auch wirklich der öffentliche Schlüssel von Alice ist.<br />

96


Literaturverzeichnis<br />

[AM]<br />

M. Atiyah, I. MacDonald, Introduction to Commutative Algebra,<br />

Addison-Wesley (1996)<br />

[B] J. Buchmann, Einführung in die <strong>Kryptographie</strong>, Springer (1999)<br />

[Kn] D. Knuth, The Art of Computer Programming, Addison-Wesley (1998)<br />

[Ko]<br />

N. Koblitz, A Course in Number Theory and Cryptography , Springer<br />

GTM 114 (1987)<br />

[Si] J. Silverman, The Arithmetic of Elliptic Curves, Springer GTM 106<br />

(1992)<br />

[So]<br />

R. Solovay, R. Strassen, A fast Monte-Carlo test for primality, SIAM<br />

Journal on Computing 6 (1), 1977<br />

97

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!