Elementare Zahlentheorie und Kryptographie
Elementare Zahlentheorie und Kryptographie
Elementare Zahlentheorie und Kryptographie
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