Stand: 05.11.2013 Vorlesung Grundlagen und Methoden der Kryptographie Dietzfelbinger 1 Grundlagen aus der Zahlentheorie 1.1 Fakten aus der Zahlentheorie und grundlegende Algorithmen Unsere Zahlenbereiche: • N = {0, 1, 2, 3, . . .}, • Z = {. . . , −2, −1, 0, 1, 2, 3, . . .} Wir stellen uns die Zahlen immer als zu einer passenden Basis b dargestellt vor: Binärdarstellung, (Oktaldarstellung,) Dezimaldarstellung, Hexadezimaldarstellung, 32 Darstellung zur Basis 256 (eine Zier ist ein Byte) oder 2 (eine Zier ist ein 32-BitWort, passend für die Darstellung in einem Rechner). Die Anzahl der Ziern in der Darstellung von a∈N zur Basis b ist dlogb (a + 1)e. Verwendete Operationen: Addition (mit Umkehrung Subtraktion), Multiplikation. O(1) addiert und subtrahiert werden können (von der Hardware). Addition zweier n-ziriger Zahlen kostet dann Zeit O(n), Multiplikation einer n-zirigen und einer `-zirigen Zahl mit der Schul1,58 methode kostet Zeit O(n`). Es gibt schnellere Verfahren: Karatsuba mit O(n ) für zwei n-zirige Zahlen, Schönhage-Strassen sogar mit O(n log n log log n). Wir nehmen an, dass zwei einzirige Zahlen in Zeit Fakt 1.1 Division mit Rest Zu x ∈ Z und m ≥ 1 gibt es ein r mit 0 ≤ r < m q und r sind eindeutig bestimmt. und ein q mit x = qm + r. Die Zahlen Die Zahl r (Rest) bezeichnen wir mit unterscheidet sich also von Beispiele: x x mod m. um ein Vielfaches von Sie hat die Darstellung x − qm, m. 30 = 3 · 9 + 3, −30 = (−4) · 9 + 6. Aufwand für Division mit Rest: Die Division einer Zahl mit der Schulmethode kostet Zeit O(n`). 1 n-zirigen Zahl durch eine `-zirige Wir sagen, dass eine ganze Zahl x ist ), wenn Beispiele: x = qy y x teilt die ganze Zahl für eine ganze Zahl q y ein Teiler von dafür kurz y | x. (oder dass gilt. Oft schreibt man 3 | 12, −3 | 12, −3 | −12, −3 | 12, 3 | 0, 0 | 0. Beobachtungen: Die Teilbarkeitsrelation | ist reexiv und transitiv. Es handelt sich x und −x können von ihr nicht unterschieden werden: Es gilt x | y ⇔ −x | y und y | x ⇔ y | −x, und weiter x ≤ −x und −x ≤ x. Die Präordnung ist also nicht antisymmetrisch. Sie ist auch nicht total, weil manche Elemente nicht verglichen werden können: 4 6 | 9 und 9 6 | 4. Aus 0 | x folgt x = 0; für jede ganze Zahl y gilt: y | 0; also ist in dieser Präordnung 0 das eindeutig bestimmte gröÿte Element. Für jede ganze Zahl x gilt: 1 | x und −1 | x, also sind 1 und −1 kleinste Elemente. Wenn m > 0 ist, ist m | x gleichbedeutend mit x mod m = 0.) damit um eine Präordnung (oft auch Quasiordnung genannt). Zahlen Fakt 1.2 (a) Aus x|y und (b) Aus x|y folgt (c) Aus x|y und y 6= 0 (d) Aus x|y und y|x Der Beweis ux | uy y|z für alle folgt folgt x | z. folgt u ∈ Z. |x| ≤ |y|. |x| = |y|. Wenn zudem x, y ≥ 0 gilt, folgt x = y. ist eine einfache Übung. Denition 1.3 Gröÿter gemeinsamer Teiler x, y ∈ Z t | y gilt. (Bemerkung: 1 ist stets gemeinsamer Teiler von x und y .) gemeinsamer Teiler von x und y, wenn t|x (a) Für heiÿt t∈Z ein und x, y ∈ Z sei ggt(x, y) die nichtnegative Zahl d mit: (i) d | x und d | y ; (ii) wenn c | x und c | y gilt, dann folgt c | d. (D. h.: d ist gemeinsamer Teiler von x und y und jeder gemeinsame Teiler von x und y ist Teiler von d.) (b) Für (c) x, y ∈ Z heiÿen teilerfremd, wenn ggt(x, y) = 1 gilt, d. h. wenn sie nicht beide 0 sind und keine Zahl > 1 beide teilt. 0 Die Zahl ggt(x, y) ist eindeutig bestimmt: Wenn in (b) d und d beide (i) und (ii) 0 0 0 erfüllen und nichtnegativ sind, dann folgt d | d und d | d, also d = d nach Fakt 1.2(d). x = y = 0, gemeinsame Teiler d Wir betrachten kurz einen nicht ganz oensichtlichen Sonderfall: Wenn dann sind alle d∈Z Teiler von x und y. Was soll der gröÿte 2 sein? Nach (ii) muss aber 0|d gelten. Dies gilt nur für d = 0, also ist ggt(0, 0) = 0. Hier ist also der gröÿte gemeinsame Teiler nicht gröÿtmöglich im Sinn der Standardanordnung der natürlichen Zahlen gemeint, sondern im Sinn der Präordnung x 6= 0 oder y 6= 0 gilt, kann es keinen Teiler geben, der gröÿer als max{|x|, |y|} ist, und der gröÿte gemeinsame Teiler ist auch gröÿtmöglich im Sinn der Teilbarkeit. Wnn gewöhnlichen Ordnung. Es gibt einen ezienten Algorithmus zur Ermittlung des gröÿten gemeinsamen Teilers. (Dieser beweist auch die Existenz.) Er beruht auf der Feststellung ggt(x, y) = ggt(|x|, |y|) und den Gleichungen ggt(a, 0) =a ggt(a, b) = ggt(b, a) ggt(a, b) = ggt(b, a mod b) für beliebige a≥0 , und für a ≥ b > 0, die in ein iteratives Verfahren umgesetzt werden. (Die letzte Gleichung folgt aus der Beobachtung, dass a = q · b + r. Wenn nun von r = a − q · b. Wenn von a = q · b + r .) und b genau die gleichen r = a mod b. Weshalb? Wir können schreiben: t gemeinsamer Teiler von a und b ist, dann ist t auch Teiler t gemeinsamer Teiler von b und r ist, dann ist t auch Teiler gemeinsamen Teiler haben wie b a und Algorithmus 1.1 Euklidischer Algorithmus Input: Zwei ganze Zahlen x und y. Methode: 1 a, b: integer; 2 if |x| ≥ |y| 3 then a ← |x|; b ← |y|; 4 else a ← |y|; b ← |x|; 5 while b > 0 repeat (a, b) ← (b, a mod b); 6 7 return a. Zeilen 24 dienen nur dazu, die Normalsituation liche Rechnung ndet in der a ≥ b ≥ 0 herzustellen. Die eigent- while-Schleife statt. In dieser Schleife wird immer ein Zahlenpaar durch ein anderes ersetzt, das dieselben gemeinsamen Teiler hat. Wenn der Algorithmus terminiert, weil der Inhalt Inhalt von a ausgeben. 3 b von b Null geworden ist, kann man den i ai bi 0 12742 10534 1 10534 2208 2 2208 1702 3 1702 506 4 506 184 5 184 138 6 138 46 7 46 0 Tabelle 1: Ablauf des Euklidischen Algorithmus auf einem Beispiel Fakt 1.4 Algorithmus 1.1 gibt ggt(x, y) aus. x = 10534, y = 12742 ergibt sich der in Tab. 1.1 angegebene Ablauf. Die bi bezeichnen den Inhalt der Variablen a und b, nachdem die Schleife 56 i-mal ausgeführt worden ist. Die Ausgabe ist 46 = ggt(10534, 12742). Auf Eingabe Zahlen ai in Zeilen und Um einzusehen, dass der Algorithmus terminiert, ja sogar sehr schnell terminiert, bemerken wir Folgendes. Betrachte den Beginn eines Schleifendurchlaufs. Der Inhalt a b b, mit a ≥ b > 0. Nach einem Schleifendurchlauf b den Wert b0 = a mod b. Falls b0 = 0, endet der Algorithmus. Sonst wird noch ein Durchlauf ausgeführt, an dessen Ende a den Wert b0 = a mod b enthält. Wir behaupten: b0 < 12 a. Um dies zu beweisen, betrachten wir 1 1 1 0 zwei Fälle: Wenn b > a ist, gilt b = a mod b = a − b < a. Wenn b ≤ a ist, gilt 2 2 2 b0 = a mod b < b ≤ 21 a. Also halbiert sich der Wert in a in jeweils zwei Durchläufen. Nach dem ersten Schleifendurchlauf enthält a den Wert min{|x|, |y|}. Daraus ergibt von sei enthält a a, der Inhalt von 0 den Wert a = b sei und sich Teil (a) der folgenden Aussage. Fakt 1.5 (a) Die Schleife in Zeilen 56 wird höchstens O(log(min{|x|, |y|}))-mal ausgeführt. (b) Die gesamte Anzahl von Ziernoperationen für den Euklidischen Algorithmus ist O(log(|x|) log(|y|)). 4 Man beachte, dass x dlog(x + 1)e ≈ log x die Anzahl der Bits ist, die man braucht, um aufzuschreiben. Damit hat der Euklidische Algorithmus bis auf einen konstanten Faktor denselben Aufwand wie die Multiplikation von x und y, wenn man die Schul- methode benutzt. (Es sei bemerkt, dass der Beweis der Schranke in (b) einer kleinen Rechnung bedarf, die die Längen der beteiligten Zahlen genauer verfolgt.) Beispiel : (a) 21 und 25 sind teilerfremd. Es gilt 31 · 21 + (−26) · 25 = 651 − 650 = 1. (b) Es gilt ggt(21, 35) = 7, und 2 · 35 − 3 · 21 = 7. Die folgende sehr nützliche Aussage verallgemeinert diese Beobachtung: Lemma 1.6 (∗) . . . von Bezout (a) Wenn x, y teilerfremd sind, gibt es s, t ∈ Z mit sx + ty = 1. (b) Für x, y ∈ Z, nicht beide gleich 0, gibt es s, t ∈ Z mit sx + ty = ggt(x, y). Beweis : (a) Betrachte die Menge D = {sx + ty | s, t ∈ Z}. Weil x2 + y 2 > 0 eine Zahl in D ist, hat D ein kleinstes positives Element Dazu wählen wir s, t so, dass c = sx + ty c. Wir wollen zeigen, dass gilt und schreiben x = qc + r mit c = 1 ist. 0 ≤ r < c. Dann ist r = x − qc = x − qsx − qty = (−qs)x + (1 − qt)y, r ∈ D. Nach Wahl von c kann aber r nicht positiv sein, also folgt r = 0. x = qc, also ist x durch c teilbar. Ganz genauso sieht man, dass auch y c teilbar ist. Weil x und y teilerfremd sind, muss c = 1 sein. also ist Daraus folgt durch = ggt(x, y). Wir denieren ganze Zahlen x0 = x/d und y 0 = y/d. Natürlich y 0 teilerfremd (sonst wäre d nicht der gröÿte gemeinsame Teiler von x und y ). Nach Teil (a) gibt es s, t mit sx0 + ty 0 = 1. Daraus folgt sx + ty = sx0 d + ty 0 d = d. (b) Es sei d 0 sind x und Die Koezienten s, t aus dem Lemma von Bezout kann man mit einer Erweiterung des Euklidischen Algorithmus sehr ezient berechnen. 5 Algorithmus 1.2 Erweiterter Euklidischer Algorithmus Eingabe: Ganze Zahlen x und y. Methode: 0 1 2 3 4 5 6 7 8 9 10 a, b, sa, ta, sb, tb, q: integer; if |x| ≥ |y| then a ← |x|; b ← |y|; sa ← sign(x); ta ← 0; sb ← 0; tb ← sign(y); else a ← |y|; b ← |x|; sa ← 0; ta ← sign(y); sb ← sign(x); tb ← 0; while b > 0 repeat q ← a div b; (a, b) ← (b, a − q · b); (sa, ta, sb, tb) ← (sb, tb, sa − q · sb, ta − q · tb); return (a, sa, ta); Im Algorithmus benutzen wir die Signumfunktion, die wie folgt deniert ist: 1 0 sign(x) = −1 , falls , falls , falls x > 0, x = 0, x < 0, (1) x (2) die also x = sign(x) · |x| für alle erfüllt. Genau wie im ursprünglichen Euklidischen Algorithmus ndet die eigentliche Arbeit in der while-Schleife statt (4 Zeilen). Zeilen 15 dienen nur der Vorbereitung und dem Umarrangieren, wenn die Eingabe negative Zahlen enthält oder |x| < |y| ist. Die Idee hinter dem Algorithmus ist folgende. Für die Diskussion beschränken wir uns x ≥ y ≥ 0. Der Euklidische Algorithmus führt in den Variablen a und b a und b mit, die stets ggt(a, b) = d = ggt(x, y) erfüllen. Die Variablen sa, ta, sb und tb enthalten immer Zahlenpaare (sa , ta ) und (sb , tb ), die folgende Gleichungen auf den Fall Zahlen erfüllen: a = sa · x + ta · y, b = sb · x + tb · y. Dies wird durch die Initialisierung hergestellt (a tb = 1). In einem Schleifendurchlauf wird = x, b = y , sa = 1, ta = 0, sb = 0, a durch b ersetzt und (sa , ta ) durch (sb , tb ), 6 und es wird b durch a−q·b ersetzt sowie (sb , tb ) durch Dadurch bleiben die Gleichungen gültig. Wenn schlieÿlich d = ggt(x, y) = a = sa · x + ta · y , (sa − q · sa , ta − q · tb ). b = 0 geworden ist, gilt was die Ausgabe erklärt. Als Beispiel betrachten wir den Ablauf des Algorithmus auf der Eingabe (10534, 12742). Die Zahlen ai ,bi , sa,i , ta,i , sb,i , tb,i ta, sb, tb nach dem i-ten Schleifendurchlauf. Die Ausgabe ist bi i ai 0 12742 10534 0 1 1 0 1 10534 2208 1 0 −1 1 1 2 2208 1702 −1 1 5 −4 4 3 1702 506 5 −4 −6 5 1 4 506 184 −6 5 23 −19 3 5 184 138 23 −19 −52 43 2 6 138 46 −52 43 75 −62 1 7 46 0 75 −62 −277 229 3 (46, 75, −62). sa,i bezeichnen den Inhalt von ta,i sb,i tb,i (x, y) = a, b, sa, qi Man überprüft leicht, dass 46 = ggt(10534, 12742) = 75 · 10534 − 62 · 12742 gilt. Allgemein gilt: Fakt 1.7 x, y , die nicht d = ggt(x, y) = sx + ty . (a) Wenn Algorithmus 1.2 auf Eingabe Ausgabe (d, s, t) liefert, dann gilt beide 0 sind, die (b) Die Anzahl der Schleifendurchläufe ist dieselbe wie beim gewöhnlichen Euklidischen Algorithmus. (c) Die Anzahl von Ziernoperationen für Algorithmus 1.2 ist O(log(|x|) log(|y|)). Wir notieren noch wesentliche Folgerungen aus dem Lemma von Bezout. Fakt 1.8 Wenn xy x y teilerfremd von a. und Teiler sind, und sowohl 7 x als auch y ist Teiler von a, dann ist Beweis : Weil x und y ganze Zahlen u, v . Teiler von a sind, kann man a = ux und a = vy schreiben, für x und y teilerfremd sind, kann man nach dem Lemma von 1 = ggt(x, y) = sx + ty schreiben, für ganze Zahlen s, t. Dann Weil Bezout (Lemma 1.6) ist a = asx + aty = vysx + uxty = (vs + ut)xy, was zu zeigen war. Oft kommt es darauf an, Potenzen n x mod m zu berechnen. Dabei kann n eine sehr groÿe Zahl sein. Beispiel: 31384788374932954500363985493554603584759389 mod 28374618732464817362847326847331872341234 Wieso kann ein Computer das Ergebnis (18019019948605604024937414441328931495971) in Bruchteilen von Sekunden berechnen? Auf keinen Fall kann er n Multiplikationen durchführen. Es gibt eine recht einfache rekursive Formel, die den Weg zu einer ezienten Berechnung weist: 1 x xn mod m = ((xn/2 mod m)2 ) mod m (x · (x(n−1)/2 mod m)2 ) mod m , wenn , wenn , wenn , wenn n = 0, n = 1, n ≥ 2 gerade ist, n ≥ 2 ungerade ist. Man erkennt sofort, dass in jeder Rekursionsebene die Bitanzahl des Exponenten um 1 sinkt, dass also die Anzahl der Rekursionsebenen etwa log n beträgt. In jeder Re- kursionsstufe ist eine oder sind zwei Multiplikationen modulo m auszuführen, was O((log m)2 ) Ziernoperationen erfordert (Schulmethode). Damit kommt man bei der schnellen Exponentiation selbst bei der einfachsten Implementierung der Multiplikati2 on mit O((log n)(log m) ) Ziernoperationen zum Ergebnis. Wenn man diesen Algorithmus aus Ezienzgründen iterativ formulieren möchte, benötigt man die Binärdarstellung bk . . . b1 b0 von n in der Reihenfolge von links nach rechts. Diese Darstellung ist oft durch die rechnerinterne Darstellung gegeben. Alternativ kann man die Binärzif- n durch iterierte Division in der Reihenfolge b0 , b1 , . . . , bk ermitteln. In Runde i i benötigt man dann die Potenz x2 mod m als Faktor. Diesen kann man einfach durch 2i 2i−1 iteriertes Quadrieren ermitteln, mit der Formel x mod m = (x mod m)2 mod m. 2 Dies führt zu folgendem Verfahren, das ebenfalls O((log n)(log m) ) Ziernoperatiofern von nen erfordert. Algorithmus 1.3 Schnelle modulare Exponentiation 8 Eingabe: Ganze Zahlen x, n ≥ 0, and m ≥ 1. Methode: 0 1 2 3 4 5 6 7 8 u, s, c: integer; u ← n; s ← x mod m; c ← 1; while u ≥ 1 repeat if u ungerade then c ← (c · s) mod m; s ← s · s mod m; u ← u div 2; return c; Hier ein Beispiel für den Ablauf: Dabei ist x = 2, n = 4321 Binärdarstellung bk . . . b0 = 1000011100001), m = 101. i 0 1 2 3 4 5 6 7 8 9 10 11 12 x mod m = x2 mod m initialisiert, und u mit n. Die Binärdarstellung von n soll bk . . . b1 b0 sein, mit bk = 1. In jedem Schleifendurchlauf wird u in Zeile 7 halbiert; wenn also Zeile 5 zum (i + 1)-sten Mal ausgeführt wird, enthält u die Zahl mit Binärdarstellung bk bk−1 . . . bi . In Zeile 6 jedes Durchlaufs wird der Inhalt von s quadriert (modulo m); wenn also Zeile 5 zum (i + 1)-sten Mal ausgeführt wird, In Zeile 2 wird s 162 542 882 682 792 802 372 562 52 252 si bi ci 21 = 2 1 2 2 2 = 4 0 2 2 4 = 16 0 2 mod 101 = 54 0 2 mod 101 = 88 0 2 mod 101 = 68 1 2 · 68 mod 101 = 35 mod 101 = 79 1 35 · 79 mod 101 = 38 mod 101 = 80 1 38 · 80 mod 101 = 10 mod 101 = 37 0 10 mod 101 = 56 0 10 mod 101 = 5 0 10 mod 101 = 25 0 10 mod 101 = 19 1 10 · 19 mod 101 = 89 mit 0 9 si = x2 mod m. Das letzte Bit bi von u wird in Zeile 5 benutzt, um zu entscheiden, ob p mit si multipliziert werden soll oder nicht. Mit vollständiger Induktion zeigt man, dass nach der i-ten Ausführung von Zeile 5 die Variable p die Q 2j mod m enthält. Die Abarbeitung der Schleife hält, wenn u 0 geZahl 0≤j≤i, bj =1 x worden ist, was oenbar nach genau k + 1 Durchläufen der Fall ist. An dieser Stelle Q 2j enthält p das gewünschte Ergebnis mod m = xn mod m. 0≤j≤k, bj =1 x enthält s i die Zahl Lemma 1.9 xn mod m benötigt O(log n) Multiplikationen und Divisionen 2 2 Zahlen aus {0, . . . , m − 1} sowie O((log n)(log m) ) Ziernoperatio- Die Berechnung von modulo m von nen. Bemerkung: Man kann denselben Algorithmus in einem beliebigen Monoid (Berei- che mit einer assoziativen Operation und einem neutralen Element) benutzen. Ein Monoid bilden zum Beispiel die natürlichen Zahlen mit der Multiplikation oder die ∗ Menge Σ über einem Alphabet Σ mit der Konkatenation. 1.2 Primzahlen Jede positive Zahl x Denition 1.10 (a) Eine Zahl ist durch 1 p≥1 b besitzt. a Die b Die Zahl Zahl 1 1 teilbar. heiÿt Primzahl, wenn a Diese Teiler sind dann Teiler hat. (b) Eine Zahl x und durch 1 und p genau zwei positive p. x ≥ 1 heiÿt zusammengesetzt, wenn sie einen Teiler y hat nur einen positiven Teiler, nämlich 1. Also ist besitzt keinen Teiler y mit 1 < y < 1. Also ist 1 1 mit 1<y<x keine Primzahl. auch nicht zusammengesetzt. Fakt 1.11 Wenn p eine Primzahl ist und p | xy gilt, dann gilt p|x oder p | y. Beweis : Wenn p | x, sind wir fertig. Also können wir p 6 | x annehmen. Das heiÿt, dass ggt(p, x) = 1 ist. Nach dem Lemma von Bezout können wir also 1 = sp+tx schreiben, für ganze Zahlen s, t. Daraus folgt: y = spy + txy . Nun ist xy durch p teilbar, also auch y = spy + txy . 10 Satz 1.12 Jede Zahl x ≥ 1 kann als Produkt von Primzahlen geschrieben werden. Die Faktoren sind eindeutig bestimmt (bis auf die Reihenfolge). Beweis : über x. Die Existenz der Zerlegung in Primfaktoren beweist man durch Induktion Die Zahl x = 1 kann als leeres Produkt Eine andere Darstellung gibt es nicht. Für x1 Q x > 1 p∈∅,p prim p geschrieben werden. sucht man einen echten Faktor x (1 < x1 < x), dann einen echten Faktor x2 von x1 usw., bis man einen xk von x erhält, der selber keinen echten Faktor hat. Dieses xk ist 0 0 Primfaktor von x, man kann also x = x · xk schreiben. Auf x wendet man die von echten Faktor ein Induktionsvoraussetzung an. Die Eindeutigkeit sieht man wie folgt: Nehmen wir an, unterschiedliche Primfaktorzerlegungen von x. p1 · · · pk und q1 · · · q ` q1 , . . . , q ` x die p1 , . . . , p k Wir können annehmen, dass kleinste Zahl mit unterschiedlichen Zerlegungen ist. Daraus folgt, dass in keine der Primzahlen wären vorkommt (sonst würde man durch Streichen eines Faktors eine kleiner Zahl mit unterschiedlichen Zerlegungen erhalten). Nun teilt q1 x = p1 · · · pk . Nach dem Lemma, iederholt angewendet, teilt q1 einen der Faktoren p1 , . . . , pk , etwa pi . Weil q1 und pi Primzahlen sind, muss p1 = qi gelten, ein die Zahl Widerspruch. Fakt 1.13 Jede zusammengesetzte Zahl Beweis : Man schreibt x x = yz besitzt einen Primfaktor für Zahlen √ x √ x ist. nicht möglich, dass beide gröÿer als Primfaktor, der nicht gröÿer als y und z, p mit die weder p≤ 1 √ x. noch x sind. Es ist sind. Der kleinere Faktor enthält also einen Bemerkung: Die Laufzeit des naiven Faktorisierungsverfahrens, das alls Zahlen in √ √ {2, . . . , b xc} darauf testet, ob sie x teilen, hat Rechenzeit mindestens x = 2(log x)/2 , also exponentiell in der Bitlänge von x. Wie wir später genauer diskutieren werden, sind für das Auf nden der Primzahlzerlegung einer gegebenen Zahl x überhautpt c keine ezienten Algorithmen bekannt (also Algorithmen mit Laufzeiten O((log x) ) für konstantes c). Aber es gibt eziente Algorithmen, mit denen man feststellen kann, ob eine Zahl x eine Primzahl ist oder nicht. Dieser Unterschied in der Schwierigkeit des Faktorisierungsproblems und des Primzahlproblems liegt einer ganzen Reihe von kryptographischen Verfahren zugrunde. Satz 1.14 Euklid Es gibt unendlich viele Primzahlen. 11 Beweis : p1 , . . . , pk eine endliche Folge von Primzahlen ist, betrachten wir die x = 1 + p1 · · · pk . Die Zahl x kann durch keine der Primzahlen p1 , . . . , pk teilbar Zahl Wenn sein, sonst wäre 1 durch diese Primzahl teilbar, was nicht möglich ist. Also sind alle x von p1 , . . . , pk Primfaktoren in der Primzahlzerlegung von auÿer p1 , . . . , p k Über die Verteilung der Primzahlen (ihre Dichte in satz Auskunft. als x 1 verschieden, es muss also noch weitere Primzahlen geben. Mit N) gibt der berühmte Primzahl- π(x) bezeichnen wir die Anzahl der Primzahlen, die nicht gröÿer ist. Satz 1.15 Primzahlsatz lim x→∞ π(x) = 1. x/ ln x − lnxx ≈ lnxx Primzahlen zu erwarten µ−1 µ sind. Die µ-zirigen Zahlen bilden das Intervall [2 , 2 ). Der Anteil der Primzahlen Das heiÿt, dass für groÿe x in (x, 2x] etwa 2x ln(2x) in diesem Intervall ist näherungsweise 2µ−1 / ln(2µ−1 ) 1 ≈ ≈ 1,44/µ. µ−1 2 (ln 2)(µ − 1) Für µ ≈ 2000 ist der relative Anteil von Primzahlen im interessanten Zahlenbereich ≈ 1,44/2000 ≈ 1/1400. Er sinkt umgekehrt proportional zur Ziernzahl. also etwa Für unsere Zwecke etwas angenehmer zu benutzen als der Primzahlsatz ist folgende etwas schwächere Aussage, die konkrete Konstante angibt: Satz 1.16 Ungleichung von Finsler Für jede ganze Zahl Primzahlen : m ≥ 2 liegen im Intervall π(2m) − π(m) ≥ (m, 2m] mindestens m/(3 ln(2m)) m . 3 ln(2m) Beispiele: 1 1793 von Gauÿ und unabhängig 1798 von Legendre vermutet; 1896 unabhängig von Hadamard und de La Vallé Poussin bewiesen. 12 Ziernzahl Finsler-Schranke für numerische µ m (π(2m) − π(m))/m untere Schranke 256 2255 512 2511 1024 21023 2048 22047 1 3·256·ln 2 1 3·512·ln 2 1 3·1024·ln 2 1 3·2048·ln 2 1 533 1 1065 1 2130 1 4260 Eine Verdopplung der Ziernzahl halbiert die untere Schranke für die Primzahldichte. 1.3 Modulare Arithmetik, Restklassenringe, Chinesischer Restsatz Denition 1.17 Für m≥2 denieren wir eine zweistellige Relation auf x≡y Fakt 1.18 (i) (mod m) x ≡ y (mod m) (ii) Die zweistellige Relation heiÿt Z: m | (x − y). gilt genau dann wenn x mod m = y mod m gilt. · ≡ · (mod m) ist eine Äquivalenzrelation, sie ist also reexiv, transitiv und symmetrisch. Beispiel für (i): 29 mod 12 = 53 mod 12 = 5 und 53 − 29 = 24 ist durch 12 teilbar. Der Beweis von (i) ist eine leichte Übung; (ii) folgt sofort aus (i). Die Äquivalenzrelation · ≡ · (mod m) führt (wie jede Z in Äquivalenzklassen: Äquivalenzrelation) zu einer Zerlegung der Grundmenge [x] = {y ∈ Z | x ≡ y (mod m)} = {y ∈ Z | x mod m = y mod m}. mZ = {. . . , −3m, −2m, −m, 0, m, 2m, 3m, . . .} A ⊆ Z. Wir denieren y ∈ A}, für und Beispiel : Für m = 3 gibt es die Äquivalenzklassen [0] = {. . . , −6, −3, 0, 3, 6, . . .} = 0 + 3Z, [1] = {. . . , −5, −2, 1, 4, 7, . . .} = 1 + 3Z, [2] = {. . . , −4, −1, 2, 5, 8, . . .} = 2 + 3Z. 13 x + A = {x + y | Mit den Äquivalenzklassen kann man wieder rechnen: Addition, Subtraktion, Multiplikation lassen sich wie folgt denieren. [x] + [y] := [x + y], [x] · [y] := [x · y]. Beispielsweise gelten für m=3 die Gleichheiten [4] + [5] = [9] = [0] und [4] · [5] = [20] = [2]. wohldeniert Genaugenommen muss man nachweisen, dass diese Operationen 0 0 das heiÿt, dass aus x ≡ x mod m und y ≡ y mod m die Gleichheit 0 sind, 0 [x + y] = [x + y ] 0 folgt, analog für die Multiplikation. (Wir nehmen als Beispiel an, dass x ≡ x mod m 0 0 0 und y ≡ y mod m gilt, d. h., dass x − x = sm und y − y = tm für passende Faktoren 0 0 0 0 0 s und t. Dann ist xy − x y = x(y − y ) + (x − x )y = xtm + smy 0 = (xt + sy 0 )m, also 0 0 durch m teilbar. Also gilt [x · y] = [x · y ]. Der Fall der Addition ist noch einfacher.) Aus der Denition (und der Wohldeniertheit) ergibt sich, dass man anstatt mit Äquivalenzklassen auch einfach mit Repräsentanten rechnen kann. Statt [2] = [1] · [2] = [1] ([4] + [4]) · schreibt man also einfach (4 · 4) · 2 ≡ 16 · (−1) ≡ 1 · (−1) ≡ −1 ≡ 2 (mod 3). An jeder Stelle dieser Rechnung kann man für jede Zahl eine äquivalente einsetzen, je nachdem, wie es bequem ist. Man betrachtet die Menge aller Äquivalenzklassen: Zm := Z/mZ := {[x] | x ∈ Z} = {[x] | 0 ≤ x < m}. Solange es nicht zu Missverständnissen führt, schreibt man auch m}, zusammen mit Addition modulo m und Multiplikation Zm = {x | 0 ≤ x < modulo m. Damit meint man, dass man mit den Repräsentanten der Äquivalenzklassen rechnet, die in {0, 1, . . . , m − 1} liegen. Fakt 1.19 Für jedes m≥2 bildet die Menge Zm mit den Operationen Multiplikation modulo m einen kommutativen Ring Das heiÿt im Detail: Die Operationen Bereich Zm mit Addition modulo m und 1. + (mod m) und · (mod m) führen nicht aus dem heraus. Die Addition erfüllt alle Rechenregeln für kommutative Gruppen, d. h. sie ist kommutativ und assoziativ, es gibt ein neutrales Element, nämlich 14 [0], [x] gibt es ein Inverses [−x]. (Es gilt ja [x] + [−x] = [0]. Beachte: Für 0 < x < m gilt 0 < m − x < m und [x] + [m − x] = [m] = [0].) Die Multiplikation ist assoziativ und kommutativ, und sie hat die [1] als neutrales Element ([1] · [x] = [x] · [1] = [x]); für Addition und Multiplikation gelten die Distributivgesetze. und zu jedem Lemma 1.20 m≥2 x, y ∈ Z Für jedes ist die Abbildung d h für gilt . . (i) (ii) : Z → Zm , x 7→ x mod m, ein Homomorphismus ; (x + y) mod m = ((x mod m) + (y mod m)) mod m, (xy) mod m = ((x mod m)(y mod m)) mod m. Dieses Lemma wird hauptsächlich benutzt, um Rechnungen zu vereinfachen. Um m auszuwerten (inklusive Potenzen), die mod m-Operation anwenden. einen arithmetischen Ausdruck modulo man auf beliebige Zwischenergebnisse Beispiel : 137 mod 11 zu berechnen, (−1) · 4 ≡ −4 ≡ 7 (mod 11). Um In jeder Struktur Zm rechnet man spielen die Elemente, die ein kann 137 ≡ 27 ≡ 25 · 4 ≡ 32 · 4 ≡ multiplikatives Inverses haben, eine spezielle Rolle. Lemma 1.21 Für jedes m ≥ 2 und jedes x ∈ Z gilt: y mit xy mod m = 1 genau Es gibt ein dann wenn ggt(x, m) = 1. Beweis : ⇒: Es sei xy mod m = 1. Das heiÿt: Es gibt ein q ∈ Z mit xy − qm = 1. Wenn nun d > 0 sowohl x als auch m teilt, dann teilt d auch xy − qm = 1, also ist d = 1. Also sind x und m teilerfremd. eine Zahl ⇐: Setze x und m seien teilerfremd. Nach Lemma 1.6(a) gibt es s, t ∈ Z mit sx + tm = 1. y := s mod m. Dann gilt: (x · y) mod m = (x · (s mod m)) mod m = sx mod m = 1. Beispiel : Aus Inverses zu 21 31 · 21 + (−26) · 25 = 1 folgt, dass modulo 25 ist. 15 31 mod 25 = 6 ein multiplikatives Wir bemerken: Mit dem Euklidischen Algorithmus 1.1 lässt sich herausnden, ob ggt(x, m) =1 Koezienten ist. Falls dies so ist, liefert der erweiterte Euklidische Algorithmus 1.2 s, t ∈ Z mit sx + tm = 1 und damit das Inverse chenzeit für das Berechnen des modularen Inversen beträgt Die Menge der invertierbaren Elemente von Zm y = s mod m. Die Realso O((log x)(log m)). erhält eine eigene Bezeichnung. Denition 1.22 Für m≥2 sei Z∗m := {x ∈ Zm | ggt(x, m) = 1}. (Wieder sind hier eigentlich die Restklassen Fakt 1.23 [x], ggt(x, m) = 1, 0 ≤ x < m, gemeint.) : Für jedes m ≥ 2 gilt Z∗m mit der Multiplikation modulo m als Operation ist eine Gruppe. Beispiel : Z∗21 = {1, 2, 4, 5, 8, 10, 11, 13, 16, 17, 19, 20} und Z∗7 = {1, 2, 3, 4, 5, 6}. Beweis von Fakt 1.23: Natürlich ist die 1 das neutrale Element der Multiplikation in Zm und in Z∗m . Wir bemerken zuerst, dass x 1 = sx + tm = uy + vm schreiben, und erhält daraus zu m unter Multiplikation modulo abgeschlossen ist: Seien und z Z∗m m teilerfremd. Nach Lemma 1.6(a) kann man 1 = (sx + tm)(uy + vm) = (su)(xy) + (sxv + tuy + tvm)m. Wieder nach Lemma 1.6(a) folgt daraus, dass xy und m teilerfremd sind. ∗ Nach Lemma 1.21 hat jedes Element x von Zm ein multiplikatives Inverses y ∈ Zm . ∗ Weil natürlich x auch das Inverse von y ist, folgt nach Lemma 1.21 auch, dass y ∈ Zm ist. Aus den elementaren Eigenschaften von Gruppen weiÿ man, dass Inverse eindeutig −1 bestimmt sind. Für das Inverse von x (wenn es existiert) schreiben wir x mod m (gemeint ist die Restklasse oder der eindeutig bestimmte Repräsentant in {0, 1, . . . , m − 1}.) Am schönsten ist die Situation, wenn alle Zahlen aus Proposition 1.24 Für jedes m m≥2 ist Primzahl gilt {1, . . . , m − 1} : ⇔ Z∗m = {1, . . . , m − 1} ⇔ Zm 16 ist ein Körper. in Z∗m liegen. Die zweite Äquivalenz ist dabei klar: Der Ring Zm − {0} genau dann wenn jedes Element von Beweis m eine Primzahl. Dann ist jedes Z∗m = teilerfremd; nach der Denition folgt ⇐: Sei ist k = ist nach Denition ein Körper ein multiplikatives Inverses besitzt. von Proposition 1.24: ⇒: Sei modulo Zm m eine zusammengesetzte Zahl, etwa durch ggt(k, m) m a ∈ {1, . . . , m − 1} = Zm − {0} Zm − {0}. > 1, k also kann b gleich 1 mit 2<k<m m teilbar. Dann nach Lemma 1.21 kein multiplikatives Inverses haben. (Man sieht auch direkt, dass ist, also für kein k zu kb mod m = kb − qm durch k teilbar sein kann.) Beispiel ∗ : Wir rechnen modulo 13 und geben für jedes x ∈ Z13 das Inverse y sowie das Produkt x · y an (das natürlich bei der Division durch 13 Rest 1 lassen muss). x y x·y 1 2 3 4 5 6 7 8 9 10 11 12 1 7 9 10 8 11 2 5 3 4 6 12 1 14 27 40 40 66 14 40 27 40 66 144 14 ist keine Primzahl, und es gibt keine Zahl 2∈ / Z∗14 und daher, dass Z14 kein Körper ist. y mit 2 · y mod 14 = 1; das heiÿt, dass Fakt 1.25 Kleiner Satz von Fermat Wenn m : eine Primzahl ist, dann gilt xm−1 mod m = 1, für jedes x ∈ Z∗m . Beweis : Betrachte die Abbildung gx : Z∗m 3 s 7→ xs mod m ∈ Z∗m . Diese Abbildung ist injektiv, da für das zu y(xs) mod m = (yx)s mod m = s. x inverse Element y gilt: y ·gx (s) mod m = Also gilt: {1, . . . , m − 1} = {gx (1), . . . , gx (m − 1)}. Wir multiplizieren die Zahlen 1...,m − 1 in zwei Anordnungen: 1 · . . . · (m − 1) mod m = gx (1) · . . . · gx (m − 1) mod m = xm−1 · (1 · . . . · (m − 1)) mod m. Wenn wir beide Seiten mit dem multiplikativen Inversen von m−1 multiplizieren, erhalten wir 1 = a mod m. 17 1 · . . . · (m − 1) mod m Wir bemerken, dass auch die Umkehrung gilt: Wenn qm = 1 für ein q, gilt auf jeden Fall dann folgt ggt(x, m) xm−1 mod m 6= 1. = 1. Wenn xm−1 mod m = 1 ist, d. h. xm−1 − ∗ also x ∈ (Zm − {0}) − Zm , dann (m, n), die im Zm ×Zn (mit komponentenweisen Operationen) Sehr grundlegend ist folgende Aussage über teilerfremde Zahlenpaare wesentlichen sagt, dass die Strukturen und Zmn isomorph sind. m = 3, n = 8, also mn = 24. Die folgende x ∈ {0, 1, . . . , 23} modulo 3 und modulo 8 an. Die für andere x ∈ Z. Wir beginnen mit einem Beispiel, nämlich Tabelle gibt die Reste der Zahlen Reste wiederholen sich zyklisch x 0 1 2 3 4 5 6 7 8 9 10 11 x mod 3 0 1 2 0 1 2 0 1 2 0 1 2 x mod 8 0 1 2 3 4 5 6 7 0 1 2 3 x 12 13 14 15 16 17 18 19 20 21 22 23 x mod 3 0 1 2 0 1 2 0 1 2 0 1 2 x mod 8 4 5 6 7 0 1 2 3 4 5 6 7 Z3 ×Z8 ansehen, erkennen wir, {0, 1, 2} × {0, 1, . . . , 7} x→ 7 (x mod 3, x mod 8) ist eine Bijektion zwischen Wenn wir die Einträge in Zeilen 2 und 3 als 24 Paare in dass sie alle verschieden sind, also auch alle Möglichkeiten in abdecken. D. h.: Die Abbildung Z24 und Z3 × Z8 . Zudem spiegeln sich arithmetische Operationen auf den Elementen von Z24 wider in den Resten modulo 3 und 8. Beispielsweise liefert die Addition von (2, 7) und (2, 1) das Resultat (1, 0), das der Addition von 23 und 17 mit dem Resultat 40 = 16 mod 24 entspricht. Genauso ist (25 mod 3, 35 mod 8) = (2, 3), was der Beobachtung 115 mod 24 = 11 entspricht. 2 Der Chinesische Restsatz sagt im wesentlichen, dass eine solche strukturelle Entsprechung zwischen den Resten modulo gilt, wenn m und n mn und Paaren von Resten modulo m, n teilerfremd sind. 2 Die Bezeichnung hat sich eingebürgert. Eigentlich geht es in dem Satz um Rest 18 klassen. immer Fakt 1.26 Chinesischer Restsatz m und n a . seien teilerfremd Dann ist die Abbildung Φ : Zmn 3 x 7→ (x mod m, x mod n) ∈ Zm × Zn . bijektiv Weiterhin : Wenn Φ(x) = (x1 , x2 ) und (a) Φ(x +mn y) = (x1 +m y1 , x2 +n y2 ); (b) Φ(x ·mn y) = (x1 ·m y1 , x2 ·n y2 ); (c) Φ(1) = (1, 1). (Dabei bezeichnen aΦ +j Φ(y) = (y1 , y2 ), dann gilt und ·j die Addition und die Multiplikation ist der griechische Buchstabe : modulo j .) Phi. Für mathematisch-strukturell orientierte Leser/innen: Die Gleichungen (a) und (b) kann man etwas abstrakter auch so fassen, dass die Abbildung Isomorphismus zwischen Beweis Zmn und Zm × Zn Φ ein Ring-mit-1- ist. von Fakt 1.26: Wir beschränken uns darauf, die Bijektivität zu beweisen. Als Zm × Zn beide genau m · n Elemente haben. Daher reicht es zu zeigen, dass die Abbildung Φ injektiv ist. Seien dazu 0 ≤ x ≤ y < mn beliebig mit Φ(x) = Φ(y). Das heiÿt: x mod m = y mod m und x mod n = y mod n. Das wiederum heiÿt, dass m | (y − x) und n | (y − x) gilt. Nach Fakt 1.8 folgt, dass mn Teiler von y − x ist. Nun ist 0 ≤ y − x < mn, woraus y − x = 0, also x = y , folgt. Damit ist die Injektivität von Φ bewiesen. erstes bemerkt man, dass Zmn und s ∈ Zm t ∈ Zn die Zahl x ∈ Zmn berechnen kann, die Φ(x) = (s, t) erfüllt. Dazu betrachtet man zunächst den Fall s = 1 und t = 0. Weil m und n teilerfremd sind, kann man mit dem erweiterten Euklidischen Algorithmus ein u ∈ Zm mit un mod m = 1 nden. Wir setzen y = un ∈ Zmn . Dann gilt y mod m = 1 und y mod n = 0. Analog ndet man ein z ∈ Zmn mit z mod m = 0 und z mod n = 1. Nun setzen wir x := (sy+tz) mod mn ∈ Zmn . Wir haben, modulo m gerechnet: x ≡ sy+tz ≡ s·1+t·0 ≡ s (mod m). Analog ergibt sich x ≡ sy + tz ≡ s · 0 + t · 1 ≡ t (mod n), wie gewünscht. Der Berechnungsaufwand ist O((log m)(log n)) Ziernoperationen, also sehr schnell. Man man kann sich noch fragen, wie man nötigenfalls zu gegebenen Zahlen und Beispiel : m = 5, n = 8, s = 3, t = 7. u = 2 mit u · 8 mod 5 = 1 und y = 2 · 8 = 16 sowie v = 5 mit v · 5 mod 8 = 1 und z = 5 · 5 = 25. Nun setzen wir x = (3 · 16 + 7 · 25) mod 40 = (48 + 175) mod 40 = (8 + 15) mod 40 = 23. Und Wir nden 19 tatsächlich: 23 mod 5 = 3 und 23 mod 8 = 7. Wir wollen jetzt noch untersuchen, wie sich Zahlen, die zu m und n teilerfremd sind, in der Sichtweise des Chinesischen Restsatzes verhalten. Proposition 1.27 Wenn man die Abbildung Φ aus dem Chinesischen Restsatz auf ∗ ∗ ∗ ergibt sich eine Bijektion zwischen Zmn und Zm × Zn . Beweis : Z∗mn einschränkt, x ∈ Z∗mn gilt, dass x mod m zu m ∗ teilerfremd ist. (Die entsprechende Aussage für n ergibt sich analog.) Wenn x ∈ Zmn ist, gibt es nach dem Lemma von Bezout Faktoren s und t mit sx + tmn = 1. Daher ist 1 durch ggt(x, m) teilbar, also muss ggt(x, m) = 1 sein. Umgekehrt müssen wir zeigen, dass für s mit ggt(s, m) = 1 und t mit ggt(t, m) = 1 die eindeutig bestimmte Zahl x mit Φ(x) = (s, t) teilerfremd zu mn ist. Der Beweis erfolgt indirekt. Annahme: ggt(x, mn) > 1. Wir wählen einen möglichst kleinen gemeinsamen Teiler p > 1 von x und mn. Dieses p muss eine Primzahl sein. Nach Fakt 1.11 ist p Teiler von m oder von n. O. B. d. A. nehmen wir an, dass p Teiler von m und von x ist. Weil ggt(s, m) = 1 gilt und x ≡ s (mod m), folgt ggt(x, m) = 1. Nach dem Lemma von Bezout können wir 1 = ux + vm schreiben. Es folgt, dass p ein Teiler von 1 ist, ein Widerspruch. Wir müssen zunächst zeigen, dass für Mit diesem Lemma können wir die Kardinalitäten der Mengen men. 3 Z∗m , m ≥ 2, Denition 1.28 Eulersche ϕ-Funktion Für m≥2 sei ϕ(m) := |Z∗m | = |{x | 0 ≤ x < m, ggt(x, m) = 1}|. Einige Beispielwerte sind in Tab. 2 angegeben. m 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ϕ(m) 1 2 2 4 2 6 4 6 4 10 4 12 7 8 8 Tabelle 2: Eulersche ϕ-Funktion für kleine m Folgendes ist eine unmittelbare Konsequenz aus Proposition 1.27: 3 ϕ ist der griechische Buchstabe phi. 20 bestim- Lemma 1.29 Für teilerfremde Zahlen n m und gilt ϕ(mn) = ϕ(m) · ϕ(n). Mit diesem Lemma lässt sich eine Formel für ϕ(m) angeben. Lemma 1.30 Für m≥2 gilt ϕ(m) = m · Y p prim p|m Beweis : 1 1− p . m eine Primzahlpotenz pt ist, dann besteht Z∗m aus den Zahlen in Zm = {0, 1, . . . , p − 1}, die nicht durch p teilbar sind. Da es in Zm insgesamt pt t−1 t t−1 Zahlen gibt und p Vielfache von p, gilt ϕ(m) = p − p = m − m/p = m(1 − 1/p). Wenn Nun nehmen wir an, dass m = pt11 · · · ptss p1 , . . . , ps und t1 , . . . , ts ≥ 1. Die Faktoren pt11 , . . . , ptss 1.29, (s − 1)-mal angewendet, erhalten wir gilt, für verschiedene Primzahlen sind teilerfremd. Mit Lemma ϕ(m) = s Y ϕ(ptii ) = i=1 s Y ptii (1 − 1/pi ) = m · s Y i=1 i=1 1 1− pi . Mit dieser Formel lassen sich die Werte in Tab. 2 schnell verizieren. ( Beispiel : ϕ(12) = 12(1−1/2)(1−1/3) = 12·(1/2)·(2/3) = 4.) Man beachte als Spezialfall: Wenn m = pq für verschiedene Primzahlen p und q , dann ist ϕ(m) = pq(1 − 1/p)(1 − 1/q) = (p − 1)(q − 1). (Beispiel : ϕ(15) = 2 · 4 = 8.) Bemerkung : Die simple Formel in Lemma 1.30 könnte zu dem Schluss verleiten, dass sich ϕ(m) immer leicht berechnen lässt. Aber Achtung: Man muss dazu die Menge der Primzahlen kennen, die in sierungsproblem für m vorkommen. Dies läuft darauf hinaus, das Faktori- m zu lösen, und hierfür kennt man keine ezienten Algorithmen. ϕ(m) aus Tatsächlich ist auch kein ezienter Algorithmus bekannt, der es erlaubt, m zu berechnen. Wir können den kleinen Satz von Fermat (Fakt 1.25) auf den Fall beliebiger allgemeinern. 21 m ver- Satz 1.31 Satz von Euler Für m≥2 und x mit ggt(m, x) =1 gilt : xϕ(m) mod m = 1. Beweis : x x mod m Der Beweis läuft exakt wie der Beweis des kleines Satzes von Fermat. Sei mit ggt(m, x) =1 gegeben. Da wir modulo m rechnen, können wir x durch ersetzen, d. h., wir können annehmen, dass 1 ≤ x < m gilt. Betrachte die Abbildung gx : Z∗m 3 s 7→ xs mod m ∈ Z∗m . (Um zu sehen, dass diese Abbildung wohldeniert ist, erinnere man sich, dass mit x und s auch xs teilerfremd zu m ist.) Diese Abbildung ist ∗ injektiv, weil für das multiplikative Inverse y von x in Zm die Gleichung y · gx (s) mod m = yxs mod m = s gilt. Weil Z∗m endlich ist, muss die Abbildung gx sogar bijektiv ∗ ∗ sein. Das heiÿt: {gx (s) | s ∈ Zm } = Zm . Daher: Y ∗ s∈Zm s≡ Y Y gx (s) ≡ ∗ s∈Zm xs ≡ xϕ(m) · ∗ s∈Zm Y s (mod m). ∗ s∈Zm Q ∗ s) mod m ist teilerfremd zu m, hat also ein multiplikatives Inverses Die Zahl ( s∈Zm ∗ z in Zm . Wenn wir beide Seiten der Gleichung mit z multiplizieren, erhalten wir 1 ≡ xϕ(m) (mod m). 2 Primzahltest und Primzahlerzeugung 2.1 Der Miller-Rabin-Primzahltest In diesem Abschnitt lernen wir einen randomisierten Algorithmus kennen, der es erlaubt, zu einer gegebenen Zahl n zu entscheiden, ob n eine Primzahl ist oder nicht. Ein idealer Primzahltest sieht so aus: Eingabe: Eine natürliche Zahl n ≥ 3. Ausgabe: 0, falls n eine Primzahl ist; 1, falls n zusammengesetzt ist. Wozu braucht man Primzahltests? Zunächst ist die Frage Ist n eine Primzahl? eine grundlegende mathematisch interessante Fragestellung. Spätestens mit dem Siegeszug des RSA-Kryptosystems (siehe spätere Kapitel) hat sich die Situation jedoch dahin entwickelt, dass man Algorithmen benötigt, die immer wieder neue vielzirige Primzahlen (etwa mit 512 oder 1024 Bits 4 bzw. 155 oder 310 Dezimalziern) bereitstellen 4 http://www.rsa.com/rsalabs/node.asp?id=2218 am 29.12.2012: RSA Laboratories current22 können. Den Kern dieser Primzahlerzeugungs-Verfahren (siehe Abschnitt 2.2) bildet ein Verfahren, das eine gegebene Zahl n darauf testet, ob sie prim ist. Ein naiver Primzahltest (versuchsweise Division), der dem folgt, ndet durch direkte Division der Zahl n n durch brute-force √ -Paradigma 2, 3, 4, . . . , b nc heraus, ob einen nichttrivialen Teiler hat. Man kann dieses Verfahren durch einige Tricks beschleunigen, aber die Rechenzeit wächst dennoch mit √ Θ( n). Dies macht es für Zahlen mit mehr als 40 Dezimalstellen praktisch undurchführbar, von Zahlen mit mehr als 100 Dezimalstellen ganz zu schweigen. (Achtung: Damit wird nichts über die Qualität anderer Faktorisierungsalgorithmen gesagt. Es gibt andere, sehr fortgeschrittene Faktorisierungsalgorithmen, die bei entsprechendem Zeitaufwand und mit sehr leistungsstarken Rechnern auch noch mit 200-stelligen Zahlen zurechtkommen. Für Information zu früheren und aktuelleren Faktorisierungserfolgen siehe z. B. http://en.wikipedia.org/wiki/RSA_numbers.) In diesem Abschnitt beschreiben wir den randomisierten Primzahltest von MillerRabin. Dabei handelt es sich um einen Monte-Carlo-Algorithmus mit einseitigem Fehler. Das heiÿt: Auf Eingaben auf Eingaben n, n, 0 ausgegeben; (von n abhängige) die Primzahlen sind, wird immer die zusammengesetzt sind, gibt es eine gewisse Wahrscheinlichkeit, dass die Ausgabe 0, also falsch ist. Für kein zusammengesetztes n ist diese Wahrscheinlichkeit gröÿer als die Fehlerschranke 14 . Wir beweisen nur die 1 Fehlerschranke . Im Beweis benutzen wir einfache zahlentheoretische und gruppen2 theoretische Überlegungen. Eine herausragende Eigenschaft des Miller-Rabin-Tests ist seine Ezienz. Wir werden sehen, dass selbst bei Verwendung der Schulmethoden 3 für Multiplikation und Division die Bitkomplexität des Primzahltests nur O((log n) ) ist. Bemerkung: Der Miller-Rabin-Algorithmus stammt aus dem Jahr 1977; er folg- te einem kurz vorher vorgestellten anderen randomisierten Primzahltest (SolovayStrassen-Test). Für diesen und andere randomisierte Primzahltests (z. B. Lucas-Lehmer-Test) sei auf die Literatur verwiesen. Im Jahr 2002 stellten Agarwal, Kayal und Saxena einen deterministischen Primzahltest mit polynomieller Rechenzeit vor. (Die 7,5 Rechenzeit ist z. B. durch O((log n) ) beschränkt.) Dieser Algorithmus stellte insofern einen gewaltigen Durchbruch dar, als er ein Jahrhunderte altes oenes Problem löste. Andererseits ist seine Laufzeit im Vergleich etwa zu dem hier diskutierten randomisierten Verfahren so hoch, dass nach wie vor die randomisierten Algorithmen ly recommends key sizes of 1024 bits for corporate use and 2048 bits for extremely valuable keys like the root key pair used by a certifying authority (see Question 4.1.3.12). Several recent standards specify a 1024-bit minimum for corporate use. Dabei bedeutet n=p·q für Primzahlen p und q key size die Bitanzahl eines Produkts mit jeweils der halben Länge. 23 benutzt werden, um für kryptographische Anwendungen Primzahlen zu erzeugen. Da gerade Zahlen leicht zu erkennen sind, beschränken wir im folgenden unsere Überlegungen auf ungerade Zahlen n ≥ 3. 2.1.1 Der Fermat-Test Wir erinnern uns an den kleinen Satz von Fermat (Fakt 1.25): n ist Primzahl und 1≤a<n an−1 mod n = 1. ⇒ Wir können diese Aussage dazu benutzen, um Belege oder Zertikate dafür anzugeben, dass eine Zahl n zusammengesetzt ist: Wenn wir eine Zahl a mit n−1 nden, für die a mod n 6= 1 gilt, dann ist n denitiv keine Primzahl. Denition 2.1 F-Zeuge für n, eine ungerade Zahl. Eine Zahl a mit 1 ≤ a < n − 1 heiÿt ein n−1 wenn a mod n 6= 1 gilt. Wenn n zusammengesetzt ist und für a mit n−1 die Gleichheit a mod n = 1 gilt, heiÿt a ein für n. Sei n F-Lügner Wenn a ein F-Zeuge für 1≤a<n n ist, kann n 1 ≤ a < n−1 keine Primzahl sein. Eigentlich ist a also ein n keine Primzahl ist. Wir bemerken, dass ein F-Zeuge belegt, dass es Faktoren k, ` > 1 gibt mit n = k·`, Zeuge (oder Beweis oder Zertikat oder Beleg) für die Tatsache, dass dass aber solche Faktoren nicht angegeben oder gefunden werden müssen. Dies wird von Primzahltests auch nicht verlangt und normalerweise auch nicht geleistet. Man sieht sofort, dass 1 und n − 1 immer F-Lügner sind: Es gilt n−1 und (n − 1) ≡ (−1)n−1 ≡ 1 (mod n), weil n − 1 gerade ist. Für jede zusammengesetzte Zahl uns, dass n n gibt es mindestens einen F-Zeugen. Wir erinnern {1, . . . , n − 1} − Z∗n 6= ∅ gilt. genau dann zusammengesetzt ist, wenn Lemma 2.2 Wenn n Beweis : 1n−1 mod n = 1 keine Primzahl ist, ist jedes a ∈ {1, . . . , n − 1} − Z∗n ein F-Zeuge. an−1 mod n = 1 gilt, haben wir nach Fakt 1.18(i) an−1 −1 = yn für ∗ Zahl y . Dann ist ggt(n, a) ein Teiler von 1, also muss a ∈ Zn gelten. Wenn eine ganze {1, . . . , n − 1} − Z∗n äuÿerst dünn. Wenn zum Beispiel n = pq für zwei Primzahlen p und q ist, dann gilt gcd(a, n) > 1 genau dann wenn p oder q ein Teiler von a ist. Es gibt genau Leider ist für manche zusammengesetzten Zahlen 24 n die Menge Vielfache von 7 Vielfache von 13 F-Zeugen in 7, 14, 21, 28, 35, 42, 49, 56, 63, 70, 77, 84 13, 26, 39, 52, 65, 78 Z∗91 2, 5, 6, 8, 11, 15, 18, 19, 20, 24, 31, 32, 33, 34, 37, 41, 44, 45, 46, 47, 50, 54, 57, 58, 59, 60, 67, 71, 72, 73, 76, 80, 83, 85, 86, 89 F-Lügner 1, 3, 4, 9, 10, 12, 16, 17, 22, 23, 25, 27, 29, 30, 36, 38, 40, 43, 48, 51, 53, 55, 61, 62, 64, 66, 68, 69, 74, 75, 79, 81, 82, 87, 88, 90 Tabelle 3: F-Zeugen und F-Lügner für n = 91 = 7 · 13 p + q − 2 solche Zahlen a in {1, . . . , n − 1}, was gegenüber n sehr klein ist, wenn p und q annähernd gleich groÿ sind. Ein Beispiel: n = 91 = 7 · 13. Tabelle 3 zeigt, dass es 18 Vielfache von 7 und 13 gibt (für gröÿere p und q wird der Anteil dieser oensichtlichen F-Zeugen noch kleiner sein), und daneben weitere 36 F-Zeugen und 36 F-Lügner in {1, 2, . . . , 90}. In diesem Beispiel gibt es um einiges mehr F-Zeugen als F-Lügner. Wenn dies für alle zusammengesetzten Zahlen n der Fall wäre, wäre es eine elegante randomisierte Strategie, einfach zufällig nach F-Zeugen zu suchen. Dies führt zu unserem ersten Versuch für einen randomisierten Primzahltest. 25 Algorithmus 2.1 Fermat-Test Eingabe: Ungerade Zahl n ≥ 5. Methode: 1 2 Wähle a zufällig aus n−1 if a mod n 6= 1 {2, . . . , n − 2}; then return 1 else return 0. Die Laufzeitanalyse liegt auf der Hand: Der teuerste Teil ist die Berechnung der n−1 Potenz a mod n durch schnelle Exponentiation, die nach den Ergebnissen von 3 Lemma 1.9 O(log n) arithmetische Operationen und O((log n) ) Bitoperationen benötigt. Weiter ist es klar, dass der Algorithmus einen F-Zeugen gefunden hat, wenn er 1 ausgibt, dass in diesem Fall also ausgedrückt: Wenn n n zusammengesetzt sein muss. Umgekehrt eine Primzahl ist, gibt der Fermat-Test garantiert 0 aus. n = 91 wird das falsche Ergebnis 0 ausgegeben, wenn als a einer der 34 F-Lügner 34 17 = 44 ≈ 0,3864. auÿer 1 und 90 gewählt wird. Die Wahrscheinlichkeit hierfür ist 88 Für Für viele zusammengesetzte Zahlen Test für diese n n gibt es reichlich F-Zeugen, so dass der Fermat- mit konstanter Wahrscheinlichkeit das korrekte Ergebnis liefert. Der Beweis benutzt ein einfaches Ergebnis aus der Gruppentheorie. 5 Fakt 2.3 Wenn G eine endliche Gruppe und Teiler von |G|. : Insbesondere gilt Wenn H echte H eine Untergruppe von Untergruppe von G G ist, dann ist ist, dann gilt |H| |H| ≤ 12 |G|. (Der Beweis hierfür läuft etwa so: Die Äquivalenzrelation ∼H auf G, die durch a ⇔ b−1 a ∈ H deniert ist, zerlegt die Menge G in Äquivalenzklassen aH = {ah H}, die sogenannten linken Nebenklassen. Die Anzahl heiÿt der Index von weil für jedes a H in G. ∼H b |h∈ dieser Nebenklassen Alle diese Nebenklassen haben die gleiche Kardinalität, H 3 h 7→ ah ∈ aH |G| = |H| · (G : H).) die Funktion ist. Daraus folgt: G : H ein eine Bijektion zwischen H und aH Hilfreich ist noch das folgende Untergruppenkriterium für endliche Gruppen. 5 Wir betrachten im Folgenden die Gruppe ∗ Zn mit Multiplikation modulo der 1 als neutralem Elment. 26 n als Operation und Fakt 2.4 G Wenn von G, (i) (ii) eine endliche Gruppe mit neutralem Element 1 ist und A eine Teilmenge derart dass 1∈A und A unter der Gruppenoperation von G abgeschlossen ist, d. h., wenn für a, b ∈ A auch immer ab ∈ A gilt, dann ist A eine Untergruppe von G. (Zum Beweis muss man sich nur überlegen, dass für jedes a ∈ A auch das Inverse a−1 in A liegt. Das sieht man so: Weil G endlich ist, können die Elemente 1 = a0 , a, a2 , a3 , . . . nicht alle verschieden sein. Also gibt es i < j mit ai = aj . Dann ist aj−i = 1, also a · aj−i−1 = 1, also aj−i−1 invers zu a, und aj−i−1 ∈ A wegen der Abgeschlossenheit.) Nun können wir das Verhalten des Fermat-Tests für gutmütige Eingabezahlen n analysieren. Satz 2.5 n ≥ 9 eine ungerade zusammengesetzte Zahl. Wenn es mindestens einen F-Zeugen a ∈ Z∗n gibt, dann liefert der Fermat-Test auf Eingabe n mit Wahrscheinlichkeit 1 die korrekte Antwort 1. gröÿer als 2 Sei Beweis : In Lemma 2.2 haben wir gesehen, dass die Menge LFn = {a | 1 ≤ a < n, an−1 mod n = 1} ∗ der F-Lügner für n eine Teilmenge von Zn ist. Wir zeigen, dass ∗ von Zn ist. Hierzu wenden wir Fakt 2.4 an: gruppe (i) (ii) 1 ∈ LFn , weil LFn sogar eine Unter- 1n−1 = 1; ∗ ist unter der Gruppenoperation in Zn abgeschlossen, nämlich der Multin−1 plikation modulo n, denn wenn a mod n = 1 und bn−1 mod n = 1, folgt (ab)n−1 ≡ an−1 · bn−1 ≡ 1 · 1 ≡ 1 (mod n). LFn ∗ Aus der Annahme, dass es in Zn mindestens einen F-Zeugen gibt, erhalten wir, dass ∗ F F Ln eine Untergruppe von Zn ist. Mit Fakt 2.3 folgt: |Ln | ≤ ϕ(n)/2 ≤ (n − 2)/2. echte 27 Daher ist die Wahrscheinlichkeit, dass ein aus LFn − {1, n − 1} liegt, höchstens {2, . . . , n − 2} zufällig gewähltes n−6 1 (n − 2)/2 − 2 = < , n−3 2(n − 3) 2 a in (3) wie gewünscht. Wie üblich verringern wir die Fehlerwahrscheinlichkeit durch Wiederholung. Algorithmus 2.2 Iterierter Fermat-Test Eingabe: Ungerade Zahl n ≥ 5, eine Zahl ` ≥ 1. Methode: 1 2 3 4 repeat ` times a ← ein zufälliges Element von {2, . . . , n − 2}; if an−1 mod n 6= 1 then return 1; return 0. Wenn die Ausgabe 1 ist, hat der Algorithmus einen F-Zeugen für n gefunden, also ist n zusammengesetzt. D. h.: Wenn n eine Primzahl ist, ist die Ausgabe 0. Andererseits: ∗ Wenn n zusammengesetzt ist, und es mindestens einen F-Zeugen a ∈ Zn gibt, dann ist 1 ` = 2−` . nach Satz 2.5 die Wahrscheinlichkeit für die falsche Ausgabe 0 höchstens 2 Indem wir ` genügend groÿ wählen, können wir die Fehlerwahrscheinlichkeit so klein wie gewünscht einstellen. Wenn es darum geht, aus einem genügend groÿen Bereich zufällig gewählte Zahlen darauf zu testen, ob es sich um eine Primzahl handelt, dann ist der Fermat-Test eine sehr eziente und zuverlässige Methode. Wir kommen darauf im folgenden Abschnitt nochmals zurück. Wenn man allerdings über die Herkunft der zu testenden Zahl n keine Information hat und eventuell damit rechnen muss, dass jemand (ein Gegenspieler) absichtlich eine besonders schwierige Eingabe vorlegt, dann stöÿt der Fermat-Test an eine Grenze. Es gibt nämlich widerspenstige zusammengesetzte Zahlen, denen man mit diesem Test ∗ nicht beikommen kann, weil alle Elemente von Zn F-Lügner sind. Mit diesen befasst sich der folgende Abschnitt. 28 2.1.2 Carmichael-Zahlen Denition 2.6 Eine ungerade zusammengesetzte Zahl n heiÿt eine a ∈ Z∗n die Gleichung an−1 mod n = 1 gilt. Carmichael-Zahl, wenn für alle 561 = 3 · 11 · 17. Weitere kleine Carmichael-Zahlen 1729 = 7 · 13 · 19. Erst im Jahr 1994 wurde bewiesen, dass es unendlich viele Carmichael-Zahlen gibt, genauer: wenn x genügend groÿ ist, dann 2/7 gibt es in {n | n ≤ x} mehr als x Carmichael-Zahlen. Die aktuell beste bekannte 1/3 untere Schranke ist x . Genaueres ist über den Anteil von Carmichael-Zahlen an Die kleinste Carmichael-Zahl ist sind 1105 = 5 · 13 · 17 und den zusammengesetzten Zahlen nicht bekannt. (Alles deutet aber darauf hin, dass sie eher selten sind.) Wenn wir dem Fermat-Test eine Carmichael-Zahl n als Eingabe geben, ist die Wahr- scheinlichkeit für die falsche Antwort 0 genau Y 1 ϕ(n) ϕ(n) − 2 1− ≈ = . n−3 n p p prim p teilt n Diese Wahrscheinlichkeit liegt nahe an 1, wenn n nur wenige und relativ groÿe Prim- faktoren hat. An solchen Carmichael-Zahlen besteht etwa im Bereich der Zahlen im 15 16 Bereich [10 , 10 ] kein Mangel, wie ein Blick in entsprechende Tabellen zeigt. Zum n = 651693055693681 = 72931 · 87517 · 102103 ϕ(n)/n > 0.99996. Beispiel ist eine Carmichael-Zahl mit Der Wiederholungstrick zur Wahrscheinlichkeitsverbesserung hilft hier leider auch p0 der kleinste Primfaktor von n ist, und n nur 3 oder 4 Faktoren hat, dann sind Ω(p0 ) Wiederholungen nötig, um die Fehlerwahrscheinlichkeit 1 zu drücken. Sobald p0 mehr als 30 Dezimalstellen hat, ist dies undurchführbar. auf 2 nicht, denn wenn etwa Für einen zuverlässigen, ezienten Primzahltest, der für alle Eingabezahlen funk- tioniert, müssen wir über den Fermat-Test hinausgehen. Interessanterweise ist dies praktisch ohne Ezienzverlust möglich. Für spätere Benutzung stellen wir noch eine Hilfsaussage über Carmichael-Zahlen bereit. Lemma 2.7 Wenn n eine Carmichael-Zahl ist, dann ist n 29 keine Primzahlpotenz. Beweis : p Wir beweisen die Kontraposition: Wenn und einen Exponenten `≥2 Dazu genügt es, eine Zahl n ist, dann ist a ∈ n = p` für eine ungerade Primzahl keine Carmichael-Zahl. Z∗n anzugeben, so dass an−1 mod n 6= 1 ist. Wir denieren: a := p`−1 + 1. p = 7 und ` = 3 ist, ist n = 343 und a = 49 + 1 = 50.) Man sieht sofort, = n ist, und dass a nicht von p geteilt wird, also a und n teilerfremd ∗ ist a ∈ Zn . Nun rechnen wir modulo n, mit der binomischen Formel: (Wenn z. B. ` dass a < p sind; also an−1 ≡ (p`−1 + 1)n−1 X n − 1 ≡ (p`−1 )j j 0≤j≤n−1 ≡ 1 + (p` − 1) · p`−1 (4) (mod n). (Die letzte Äquivalenz ergibt sich daraus, dass für j ≥ 2 gilt, dass (` − 1)j ≥ ` ist, `−1 j also der Faktor (p ) = p(`−1)j durch n = p` teilbar ist, also modulo n wegfällt.) ` ` `−1 ` Nun ist p − 1 nicht durch p teilbar, also ist (p − 1) · p nicht durch n = p teilbar. n−1 n−1 Damit folgt aus (4), dass a 6≡ 1 (mod n) ist, also a mod n 6= 1. Folgerung: Jede Carmichael-Zahl n lässt sich als n = n1 · n2 n2 teilerfremde ungerade Zahlen ≥3 schreiben, wo n1 und sind. (Eine etwas genauere Untersuchung, die wir hier aber nicht benötigen, ergibt, dass die Primfaktoren einer Carmichael-Zahl n alle verschieden sein müssen, und dass n mindestens drei Primfaktoren haben muss. Aus dieser Tatsache kann man entnehmen, dass Carmichael-Zahlen eher selten sind.) 2.1.3 Nichttriviale Quadratwurzeln der 1 Lemma 2.8 p eine ungerade Primzahl b ∈ {1, −1} = {1, p − 1}. Wenn Beweis : ist, dann gilt b2 mod p = 1, b ∈ Zp jedes beliebige m ≥ 2, genau für 12 mod m = 1 und (m − 1)2 mod m = (m(m + 2) + 1) mod m = 1 ist. Nun sei b ∈ {0, . . . , p − 1} beliebig mit b2 ≡ 1 (mod p). Dann gilt (b2 − 1) ≡ 0 (mod p), also ist p ein Teiler von b2 − 1 = (b + 1)(b − 1). Nach Fakt 1.11 ist p Teiler von b + 1 oder Teiler von b − 1. Im ersten Fall ist b ≡ −1 (mod p), im zweiten Fall ist b ≡ 1 (mod p). Oensichtlich gilt für 30 dass Die im Lemma angegebene Eigenschaft lässt sich in ein weiteres Zertikat für zusammengesetzte Zahlen ummünzen: Wenn es ein dann ist n b ∈ {2, . . . , n − 2} gibt, das b2 mod n = 1 erfüllt, zusammengesetzt. b ∈ {2, . . . , n − 2} mit b2 mod n = 1 heiÿen nichttriviale Quadratwurzeln der 1 modulo n. Solche Zahlen gibt es nur, wenn n zusammengesetzt ist. Beispielsweise sind die Zahlen 1, 27, 64 und 90 genau die Quadratwurzeln der 1 modulo 91; davon sind 27 und 64 nichttrivial. Allgemeiner sieht man mit der Verallgemeinerung von Fakt 1.26 (Chinesischer Restsatz) auf r Faktoren leicht ein, dass es für ein Produkt n = p1 · · · pr aus verschiedenen ungeraden Primzahlen p1 , . . . , pr r genau 2 Quadratwurzeln der 1 modulo n gibt, nämlich die Zahlen b, 0 ≤ b < n, die b mod pj ∈ {1, pj − 1}, 1 ≤ j ≤ r , erfüllen. Wenn n nicht sehr viele verschiedene Primfaktoren hat, ist es also aussichtslos, einfach zufällig gewählte b's darauf zu testen, ob sie vielleicht nichttriviale Quadratwurzeln der 1 sind. Dennoch wird uns Zahlen dieser Begri bei der Formulierung eines ezienten Primzahltests helfen. 2.1.4 Der Miller-Rabin-Test Wir kehren nochmals zum Fermat-Test zurück und sehen uns die dort durchgeführte n−1 Exponentiation a mod n etwas genauer an. Die Zahl n − 1 ist gerade, daher kann k man sie als n − 1 = u · 2 schreiben, für eine ungerade Zahl u und ein k ≥ 1. Dann n−1 u 2k gilt a ≡ ((a ) mod n) mod n, und wir können an−1 mod n mit k + 1 Zwischenschritten berechnen: Mit b0 = au mod n; bi = (b2i−1 ) mod n, für i = 1, . . . , k, bk = an−1 mod n. Beispielsweise erhalten wir für n = 325 = 52 · 13 den Wert n − 1 = 324 = 81 · 22 . In Tabelle 4 berechnen wir a81 , a162 und a324 , alle modulo 325, für verschiedene a. ist ∗ Wir sehen, dass 2 ein F-Zeuge für 325 ist, der in Z325 liegt, und dass 65 ein F-Zeuge ∗ ist, der nicht in Z325 liegt. Dagegen sind 7, 32, 49, 126, 201 und 224 alles F-Lügner 324 für 325. Wenn wir aber 201 mod 325 mit zwei Zwischenschritten berechnen, dann entdecken wir, dass 51 eine nichttriviale Quadratwurzel der 1 ist, was beweist, dass 325 keine Primzahl ist. Ähnlich liefert die Berechnung mit Basis 224, dass 274 eine nichttriviale Quadratwurzel der 1 ist. Die entsprechenden Berechnungen mit 7, 32 und 162 49 dagegen liefern keine weiteren Informationen, weil 7 ≡ 32162 ≡ −1 (mod 325) 31 b0 = a81 b1 = a162 b2 = a324 a A-Z.? × × × × 2 252 129 66 7 307 324 1 32 57 324 1 49 324 1 1 65 0 0 0 126 1 1 1 201 226 51 1 × 224 274 1 1 × Tabelle 4: Potenzen und F-Z.? 4981 ≡ −1 (mod 325) an−1 mod n mit Zwischenschritten, n = 325 gilt. Auch die Berechnung der Potenzen von 126 liefert 12681 mod 325 = 1 gilt. keine nichttriviale Quadratwurzel der 1, weil Wie kann die Folge sind bi+1 , . . . , bk b0 , . . . , b k leeren) Folge von Elementen bi = 1 or bi = n − 1, dann b0 , . . . , bk mit einer (eventuell überhaupt aussehen? Wenn alle gleich 1. Daher beginnt die Folge ∈ / {1, n − 1} und endet mit einer (eventuell leeren) Folge von Einsen. Diese beiden Teile können von einem Eintrag n−1 getrennt sein; dies muss aber nicht so sein. Alle möglichen Muster sind in Tabelle 5 angegeben. Dabei steht ∗ für ein Element ∈ / {1, n − 1}. Es ergeben sich 4 Fälle, mit einigen Unterfällen: Fall Fall Fall b0 = 1. Alle bi sind gleich 1. 2a: b0 = n − 1. Alle bi mit 0 < i ≤ k sind gleich 1. 2b: b0 ∈ / {1, n − 1}, aber es gibt ein i ∈ {1, . . . , k − 1} mit bi = n − 1. Dann gilt bi+1 = · · · = bk = 1. In den Fällen 1, 2a und 2b gilt bk = 1, also hilft der kleine Satz von Fermat nicht weiter. Die Folge (b0 , . . . , bk ) enthält aber auch keine nichttriviale Quadratwurzel der 1. Es ergibt sich aus der Rechnung kein Hinweis darauf, dass n zusammengesetzt ist. Wenn n eine Primzahl ist, muss einer dieser Fälle eintreten. Fall 3: bk 6= 1. Dann ist n zusammengesetzt, weil a ein F-Zeuge für n ist. (Es spielt keine Rolle, ob bk = n − 1 ist oder nicht.) Alle Werte b0 , . . . , bk−1 müssen dann von 1 und n − 1 verschieden sein. 1: 32 b0 b1 · · · ··· bk−1 bk Fall 1 1 ··· 1 1 1 ··· 1 1 1 n−1 1 ··· 1 1 1 ··· 1 1 2a ∗ ∗ ··· ∗ n−1 1 ··· 1 1 2b ∗ ∗ ··· ∗ ∗ ∗ ··· ∗ n−1 ∗ ∗ ··· ∗ ∗ ∗ ··· ∗ ∗ ∗ ··· ∗ 1 1 ··· ∗ ∗ ··· ∗ ∗ ∗ ··· Tabelle 5: Potenzen Fall an−1 mod n F-Z.? A-Z.? 3 × × ∗ 3 × × 1 1 4a × ∗ 1 4b × berechnet mit Zwischenschritten, mögliche Fälle. b0 ∈ / {1, n − 1}, aber es gibt ein i < k mit bi ∈ / {1, n − 1} und bi+1 = 1. Dann ist bi eine nichttriviale Quadratwurzel der 1 modulo n und damit ein Zertikat dafür, dass n zusammengesetzt ist. (Fall 4b stellt den Sonderfall i = k − 1 dar.) 4: b0 , . . . , bk ) einen Beleg dafür dar, dass n keine Primzahl ist. Diejenigen a ∈ {1, . . . , n − 1}, die zu Fall 3 oder In den Fällen 3 und 4 stellt die Zahl a (und seine Potenzen Fall 4 führen, lassen sich wie folgt charakterisieren: b0 6= 1, (∗) und n−1 erscheint nicht in der Folge Man beachte, dass das letzte Folgenglied bk b0 , . . . , bk−1 . keine Rolle spielt. (Es ist daher nur konsequent, dass es im späteren Algorithmus nicht einmal berechnet wird.) Die (∗) erfüllen, sind Beleg dafür, dass n a, die zusammengesetzt ist. Dies führt zu folgender Denition. Denition 2.9 n ≥ 3 ungerade. Wir schreiben n − 1 = u · 2k , für u ungerade, k ≥ 1. Eine Zahl a, i 1 ≤ a < n, heiÿt ein A-Zeuge für n, wenn au mod n 6= 1 und au·2 mod n 6= n − 1 für alle i mit 0 ≤ i < k gilt (Fälle 3 und 4). Wenn n zusammengesetzt ist und a, 1 ≤ a < n, kein A-Zeuge ist, dann heiÿt a ein A-Lügner für n (Fälle 1 und 2). Die A Menge der A-Lügner heiÿt Ln . Sei Aus der obigen Diskussion der möglichen Fälle folgert man leicht folgende Beobachtungen. 33 Lemma 2.10 Sei n≥3 ungerade. (a) Wenn a ein F-Zeuge für n (b) Wenn es einen A-Zeugen a ist, dann ist für n a ein F-Zeuge für a auch (b0 , . . . , bk ) n auch ein A-Zeuge. gibt, dann ist Beweis : Sei 1 ≤ a < n und sei b0 , . . . , bk (a) Wenn a n zusammengesetzt. die zugehörige Folge ist, dann gilt n. bk 6= 1, und daher tritt Fall 3 oder Fall a ein A-Zeuge für auf die Folge Fall 3 oder Fall 4 zu. Wir haben oben schon gesehen, dass n ein A-Zeuge für n. 4b ein. Damit ist dann (b) Sei i au·2 mod n, 0 ≤ i ≤ k . eine zusammengesetzte Zahl sein muss. Der Miller-Rabin-Test besteht nun einfach darin, ein aus wähltes Dann trit a darauf zu testen, ob a {2, . . . , n − 2} zufällig ge- ein A-Zeuge ist. Historisch hat schon der russische Mathematiker M. Artjuhov 1966 vorgeschlagen, die u·2i Folge bi = a mod n, 0 ≤ i ≤ k , in einem Primzahltest für n zu benutzen. Im Jahr 1976 stellte G. M. Miller einen deterministischen Algorithmus vor, der auf dieser Idee 2 beruhte. Er testete die kleinsten O((log n) ) Elemente a ∈ {2, 3, . . . , n − 1} auf die Eigenschaft, A-Zeugen zu sein. Der Algorithmus hat polynomielle Laufzeit und liefert das korrekte Ergebnis, wenn die erweiterte Riemannsche Vermutung (ERH) stimmt, eine berühmte Vermutung aus der Zahlentheorie, die bis heute unbewiesen ist. Um 1980 schlugen M. Rabin und (unabhängig) L. Monier vor, Millers Algorithmus so zu modizieren, dass die zu testende Zahl a zufällig gewählt wird, und bewiesen, dass dieser Algorithmus konstante Fehlerwahrscheinlichkeit haben wird. Der Algorithmus heiÿt heute allgemein der Miller-Rabin-Test . Der Test selbst ist leicht und sehr ezient durchführbar: Man berechnet zunächst b0 = au mod n und testet, ob b0 ∈ {1, n − 1} ist. Falls ja, trit Fall 1 oder Fall 2a zu, die Ausgabe ist 0. Falls nein, berechnet man durch iteriertes Quadrieren nacheinander die Werte b1 , b2 , . . ., bis • entweder der Wert • oder der Wert 1 auftaucht (Fall 4a, • oder b1 , . . . , bk−1 n−1 auftaucht (Fall 2b, Ausgabe 0) a ist A-Zeuge, Ausgabe 1) berechnet worden sind, ohne dass Werte kommen sind (Fall 3 oder 4b, a ist A-Zeuge, Ausgabe 1). In Pseudocode sieht das Verfahren dann folgendermaÿen aus: 34 n−1 oder 1 vorge- Algorithmus 2.3 Der Miller-Rabin-Primzahltest Eingabe: Eine ungerade Zahl n ≥ 5. Methode: 1 2 3 4 5 6 7 8 9 k ≥ 1 mit n − 1 = u · 2k ; wähle zufällig ein a aus {2, . . . , n − 2}; b ← au mod n; (∗ mit schnellem Potenzieren ∗) if b ∈ {1, n − 1} then return 0; (∗ Fall 1 oder 2a ∗) for j from 1 to k − 1 do (∗ wiederhole (k − 1)-mal ∗) b ← b2 mod n; if b = n − 1 then return 0; (∗ Fall 2b ∗) if b = 1 then return 1; (∗ Fall 4a ∗) return 1. (∗ Fall 3 oder 4b ∗) Bestimme u ungerade und log n Divisionen durch 2, um u und k zu nden. (Zeile 1). (Wenn man benutzt, dass n normalerweise in Binärdarstellung gegeben sein wird, ist die Sache noch einfacher: k ist die Zahl der Nullen, mit der die Binärdarstellung von n − 1 aufhört, u ist die Zahl, die Wie steht es mit der Laufzeit des Algorithmus? Man benötigt höchstens durch den Binärstring ohne diese letzten Nullen dargestellt wird.) Die Berechnung u von a mod n mit schneller Exponentiation 3 benötigt O(log n) arithmetische Ope3 rationen und O((log n) ) Bitoperationen (mit der Schulmethode für Multiplikation und Division). Die Schleife in Zeilen ist k ≤ log n. 58 wird höchstens k -mal durchlaufen; oenbar In jedem Durchlauf ist die Multiplikation modulo n die teuerste Ope- ration. Insgesamt benutzt der Algorithmus O(log n) arithmetische Operationen auf 2 3 zahlen, die kleiner als n sind, und O((log n) ) Bitoperationen. Wenn man die Laufzeit mit dem Fermat-Test vergleicht, und dazu die Details der schnellen Exponentiation ansieht, stellt man fest, dass die Multiplikationen modulo n in beiden Fällen exakt gleich aussehen, nur dass beim Miller-Rabin-Test unterwegs noch Zwischenergebnisse darauf getestet werden, ob sie gleich 1 oder gleich n−1 sind dies verursacht kaum Mehraufwand. Nun wenden wir uns dem Ein-/Ausgabeverhalten des Miller-Rabin-Tests zu. Lemma 2.11 Wenn die Eingabe n für den Miller-Rabin-Test eine Primzahl ist, dann wird 0 aus- gegeben. Beweis : Wir haben oben schon festgestellt, dass Ausgabe 1 genau dann erfolgt, wenn 35 a die zufällig gewählte Zahl A-Zeugen, wenn n ein A-Zeuge ist. Nach Lemma 2.10(b) gibt es nur dann zusammengesetzt ist. 2.1.5 Fehlerschranke für den Miller-Rabin-Test Wir müssen nun noch die Fehlerwahrscheinlichkeit des Miller-Rabin-Tests für den Fall analysieren, dass n eine zusammengesetzte (ungerade) Zahl ist. Dies wird also für diesen Abschnitt angenommen. Wir beweisen, dass die Wahrscheinlichkeit, dass der Miller-Rabin-Test die (uner1 ist. Dazu wollen wir ähnlich vorgehen wie wünschte) Antwort 0 gibt, kleiner als 2 bei der Analyse des Fermat-Tests für Nicht-Carmichael-Zahlen (Beweis von Satz 2.5). ∗ Dort haben wir gezeigt, dass die F-Lügner für solche n eine echte Untergruppe von Zn A bilden. Hier ist es etwas schwieriger, weil die Menge Ln der A-Lügner keine Untergrup∗ pe von Zn bilden muss. Dies beheben wir dadurch, dass wir eine echte Untergruppe A Bn von Z∗n nden, die alle A-Lügner enthält. Wenn n keine Carmichael-Zahl ist, ist dies leicht. Lemma 2.12 Sei n≥3 zusammengesetzt. Dann gilt F LA n ⊆ Ln . Beweis : Dies ist nur eine andere Formulierung von Lemma 2.10(a). Wenn nun n keine Carmichael-Zahl ist, schlieÿen wir genau wie im Beweis von 1 Satz 2.5, dass der Anteil von A-Lügnern in {2, . . . , n − 2} kleiner als ist. 2 Es bleibt der Fall, dass n eine Carmichael-Zahl ist. Wir denieren eine Menge BnA . Weil u ungerade ist, gilt 0 (n − 1)u·2 ≡ (n − 1)u ≡ (−1)u ≡ −1 ≡ n − 1 (mod n). Sei i0 das gröÿte i ∈ {0, 1, . . . , k} mit der Eigenschaft, dass es einen A-Lügner a# mit i au·2 # mod n = n − 1 gibt. (Wir werden dieses a# weiter unten nochmals benutzen.) u·2k Weil n eine Carmichael-Zahl ist, gilt a mod n = an−1 mod n = 1 für alle a ∈ Z∗n , und daher 0 ≤ i0 < k . Wir denieren: i BnA = {a ∈ Z∗n | au·2 0 mod n ∈ {1, n − 1} }. (5) Zur Veranschaulichung betrachte man Abb. 6. In der dort angegebenen Matrix ent∗ spricht jede Zeile einem der ϕ(n) Elemente von Zn , beginnend mit a1 = 1 und 36 a b0 b1 ··· a1 = 1 1 1 ··· 1 1 1 ··· 1 a2 = n − 1 n − 1 ··· bk−1 bk 1 ··· 1 1 1 1 ··· 1 1 bi 0 a3 ∗ ∗ ··· ∗ n−1 1 ··· 1 1 a4 ∗ ∗ ··· n−1 1 1 ··· 1 1 . . . . . . . . . . . . . . . . . . . . . . . . 1 1 u·21 u·2i0 −1 u·2i0 u·2i0 +1 u·2k−1 a au . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . a# ∗ ∗ ··· ∗ n−1 1 ··· 1 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . a? ∗? ∗? ··· ∗? ∗? ··· ··· ··· 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . aϕ(n) ? ? ··· ? ? ? ··· ? 1 a ··· a Tabelle 6: Sicht auf BnA 37 a a als Teilmenge von ··· Z∗n a 1 a2 = −1 ≡ n − 1. In der Zeile für a ist die von a erzeugte Folge b0 , . . . , bk eingetragen. Dass n eine Carmichael-Zahl ist, drückt sich dadurch aus, dass alle Einträge in der bk -Spalte gleich 1 sind. Der Eintrag für a2 = −1 in der b0 -Spalte ist n−1. Spalte i0 ist die am weitesten rechts stehende Spalte, in der es einen Eintrag −1 ≡ n − 1 ∗ A gibt, und a# ist ein Element von Zn , das zu diesem Eintrag führt. Die Menge Bn ∗ besteht aus den Elementen von Zn , die in Spalte i0 Eintrag 1 oder n − 1 haben. A Wir wollen zeigen, dass diese Menge Bn die gewünschten Eigenschaften hat. Lemma 2.13 (a) A LA n ⊆ Bn . (b) BnA (c) Z∗n − BnA 6= ∅. Beweis : ist Untergruppe von Z∗n . (Teil (a) ist die Überprüfung, dass die Denition sinnvoll ist. Teil (b) ist Routine. Der interessante Teil ist (c).) a ein beliebiger A-Lügner. i Fall 1: au mod n = 1. Dann ist auch au·2 0 mod n = 1, und daher gilt a ∈ BnA . (Die Zeile zu a in Abb. 6 sieht aus wie die von a1 = 1.) i Fall 2: au·2 mod n = n − 1 für ein i < k . Dann ist 0 ≤ i ≤ i0 nach der Denition A von i0 . Wenn i = i0 ist, haben wir direkt, dass a ∈ Bn (Beispiel: a3 oder a# ); wenn i < i0 ist, dann gilt (a) Sei i i −i i au·2 0 mod n = (au·2 mod n)2 0 also ebenfalls a ∈ BnA (Beispiel: a2 oder mod n = 1, a4 ). (b) Wir überprüfen die beiden Bedingungen von Fakt 2.4: (i) (ii) 1 ∈ BnA , weil 1 ∈ Z∗n und i 1u·2 0 mod n = 1. ∗ A ist unter der Gruppenoperation in Zn abgeschlossen: Seien a, b ∈ Bn . Dann i i 0 0 u·2 gilt a mod n, bu·2 mod n ∈ {1, n−1}. Weil 1·1 = 1, 1·(n−1) = (n−1)·1 = BnA n−1 und (n − 1) · (n − 1) mod n = 1, i i haben wir i (ab)u·2 0 mod n = ((au·2 0 mod n) · (bu·2 0 mod n)) mod n ∈ {1, n − 1}. Es folgt, dass ab mod n ∈ BnA gilt. 38 (c) Wir benutzen die in Lemma 2.7 beobachtete Eigenschaft von Carmichael-Zahlen, keine Primzahlpotenz zu sein. Nach diesem Lemma können wir für teilerfremde ungerade Zahlen n1 , n2 . n = n1 · n2 schreiben Im Folgenden werden wir diese Zerlegung und die Eigenschaften aus dem Chinesischen Restsatz (Fakt 1.26) benutzen. Bei der nun folgenden Konstruktion geht es anschaulich um folgendes: Wir haben i u·2i0 mod n = 1 und einige a (z. B. a = a# ) mit au·2 0 ≡ −1 einige a (z. B. a = 1) mit a i (mod n). Wir wollen zeigen, dass es unmöglich ist, dass au·2 0 mod n ∈ {1, n − 1} für ∗ / {1, n − 1} enthalten muss. alle a ∈ Zn gilt, dass also Spalte i0 auch einen Eintrag ∈ ein Gegenbeispiel a. Diese Zahl a soll sich modulo i verhalten, modulo n2 wie a# . Die u · 2 0 -te Potenz modulo n einer solchen Dazu basteln wir aus n1 wie Zahl a 1 1 a# und −1 kann weder 1 noch sein. x2 = a# mod n2 . Nach dem Chinesischen bestimmte Zahl a ∈ {0, 1, . . . , n − 1}, die Wir führen diese Idee jetzt formal durch. Sei Restsatz (Fakt 1.26) gibt es eine eindeutig a≡1 erfüllt. Wir zeigen, dass a (mod n1 ) und Z∗n − BnA liegt. in Beh. 1: a ∈ Z∗n . a ≡ x2 (mod n2 ) (6) Bew.: Wir wissen, dass an−1 mod n1 = 1n−1 mod n1 = 1 und an−1 mod n2 = an−1 mod # n2 = ((an−1 # ) mod n) mod n2 = 1 mod n2 = 1 gilt. Wegen der Eindeutigkeitsaussage n−1 im Chinesischen Restsatz folgt daraus a mod n = 1. Das heiÿt, dass an−1 −1 durch n teilbar ist. Daher muss ggt(n, a) = 1 sein, also a ∈ Z∗n . Beh. 2: au·2i0 mod n 6= 1. Bew.: Indirekt. Annahme: au·2 0 mod n = 1. Dann ist n Teiler von au·2 0 − 1, also auch n2 Teiler von a u·2i0 Also ist i au·2 0 − 1. i i Andererseits ist i i 0 0 mod n2 = au·2 mod n2 = ((au·2 ) mod n) mod n2 = (n − 1) mod n2 . # # n2 Teiler von 2 Teiler von i au·2 0 − (n − 1), also Teiler von i au·2 0 + 1. Daraus folgt, dass n2 ist, ein Widerspruch. Beh. 3: a u·2i0 mod n 6= n − 1. i Bew.: Indirekt. Annahme: au·2 0 mod n = n − 1. u·2i0 auch n1 Teiler von a + 1. Andererseits ist i Dann ist n Teiler von i au·2 0 + 1, also i au·2 0 mod n1 = 1u·2 0 mod n1 = 1. Also ist n1 Teiler von i au·2 0 − 1. Daraus folgt, dass n1 Teiler von 2 ist, ebenfalls ein Widerspruch. Damit ist der Beweis von Lemma 2.13(c) vollständig. 39 Beispiel 2.14 Wir betrachten die Zahl wichtig, dass n n = 325 = 13 · 25. (Für dieses Beispiel ist es nicht so keine Carmichael-Zahl ist.) In Tabelle 4 bemerken wir, dass der 32162 mod 325 = 324 erfüllt (was −1 entspricht). Die A-Lügner 32 die Gleichung eindeutig bestimmte Zahl a = 201. a mit a mod 13 = 32 mod 13 = 6 und a mod 25 = 1 ist Aus der Tabelle lesen wir ab, dass tatsächlich 201162 mod 325 = 51 ∈ / {1, 324}, gilt. (Man beachte, dass und 201324 mod 325 = 1 51 ≡ 1 (mod 25) und 51 ≡ −1 (mod 13) gilt!) Insbesondere A Z∗325 gefunden, das nicht in B325 liegt. haben wir mit 201 ein Element von 1 für die Irrtumswahrscheinlichkeit im Miller-Rabin2 Algorithmus bewiesen. Eine etwas kompliziertere Analyse zeigt, dass sogar die Feh1 gilt; man kann auch zeigen, dass es zusammengesetzte Zahlen n gibt lerschranke 4 (es handelt sich um gewisse Carmichael-Zahlen), bei denen eine Fehlerwahrschein1 tatsächlich auftritt. Durch `-fache Wiederholung, ebenso wie in lichkeit von fast 4 −` Algorithmus 2.2, kann man die Fehlerschranke auf 4 reduzieren. Wir kürzen den Wir haben eine Schranke von Miller-Rabin-Test mit MiRa-Test ab. Man beachte, dass bei jedem neuen Aufruf eine neue Zufallszahl a gewählt wird. Algorithmus 2.4 Iterierter MR-Test Eingabe: Ungerade Zahl n ≥ 5, eine Zahl ` ≥ 1. Methode: 1 2 3 repeat ` times if MiRa-Test(n) = 1 then return 1; return 0; Diesen Test wollen wir kurz IterMiRa(n, `) nennen. Wir erhalten zusammenfassend: Proposition 2.15 Algorithmus 2.4 benötigt O(` · log n) arithmetische Operationen auf zahlen, die klein2 sind, und O(` · (log n)3 ) Bitoperationen. Wenn n eine Primzahl ist, ist die ner als Ausgabe 0, wenn n zusammengesetzt ist, ist die Wahrscheinlichkeit, dass 4−` . ben wird, kleiner als 40 0 ausgege- 2.2 Die Erzeugung von Primzahlen Für kryptographische Anwendungen (zum Beispiel für die Erzeugung von Schlüsselpaaren für das RSA-Public-Key-Kryptosystem) werden vielzirige Primzahlen benötigt. Eine typische Aufgabe in diesem Zusammenhang könnte lauten: Finde eine zufällige Primzahl mit Dabei hängt µ µ Bits! von der Anwendung ab; wir können uns z. B. µ = 512 oder µ = 2048 sein. (Natürlich ist so eine riesengroÿe Zahl nicht als Anzahl von etwas gedacht, sondern als mathematisches Objekt, das für die Kryptographie nützliche Eigenschaften hat.) Man erinnere sich an den Primzahlsatz und an den Satz von Finsler, die angeben, [m, 2m) wie viele Primzahlen wir in nden. [m, 2m) ist [m, 2m) zufällig und wendet Ein naheliegender Ansatz zur Erzeugung einer zufälligen Primzahl in folgender: Man wählt wiederholt eine (ungerade) Zahl aus auf sie den Miller-Rabin-Test an. Dies wiederholt man, bis eine Zahl gefunden wurde, die die Ausgabe 1 liefert. Algorithmus 2.5 GetPrime Randomisierte Primzahlerzeugung Eingabe: Zahl m ≥ 2, Zahl ` ≥ 1 (∗ Zuverlässigkeitsparameter ∗). Methode: 1 2 3 4 repeat n← zufällige ungerade Zahl in [m, 2m); until IterMiRa(n, `) = 0; (∗ Algorithmus 2.4 ∗) return n. Die Ausgabe ist korrekt, wenn er eine Primzahl zurückgibt, ein Fehler tritt auf, wenn eine zusammengesetzte Zahl zurückgegeben wird. Auf den ersten Blick könnte man meinen (aufgrund von Proposition 2.15), dass die Fehlerwahrscheinlichkeit höchstens 1/4` ist eben die Fehlerwahrscheinlichkeit des iterierten MiRa-Tests. Wir werden sehen, dass wir auf der Basis der Analyse des Miller-Rabin-Tests nur ein etwas schwä- 6 cheres Ergebnis bekommen. Wir denieren: Primm := {p ∈ [m, 2m) | p ist Primzahl}. 6 Tatsächlich ist die Fehlerwahrscheinlichkeit durch 1/4` beschränkt. Dies kann man aber nur durch sehr fortgeschrittene zahlentheoretische Untersuchungen über das Verhalten einer zufälligen ungeraden Zahl beim Miller-Rabin-Test beweisen. 41 Satz 2.16 Bei der Anwendung von Algorithmus 2.5 auf eine gerade Zahl (a) Für jedes p ∈ Primm gilt m gilt : Pr(GetPrime(m, `) = p | GetPrime(m, `) ∈ Primm ) = In Worten : : Jede Primzahl in [m, 2m) 1 . |Primm | hat dieselbe Wahrscheinlichkeit, als Er- gebnis zu erscheinen. (b) 3 ln(2m) Pr(GetPrime(m, `) ∈ / Primm ) ≤ =O 2 · 4` ((!) Nicht 1/4` , log m 4` . ) wie naiv vermutet. 3 ln(2m), der erwartete Rechenaufwand ist (c) Die erwartete Rundenzahl ist ≤ 2 2 O((log n) ) arithmetische Operationen und O((log n)3 ) Bitoperationen. Beweis : (a) Eine Primzahl wird als Resultat genau dann geliefert, wenn keine zusammengesetzte Zahl fälschlicherweise vom Miller-Rabin-Test akzeptiert wird, bevor (in Zeile 2) die erste echte Primzahl gewählt wird. Jede der Primzahlen in [m, 2m) dieselbe Wahrscheinlichkeit, diese erste gewählte Primzahl zu sein. (b) Pr(GetPrime(m, `) ∈ / Primm ) = Pr ∃i ≥ 1 : in Runden j = 1, . . . , i − 1 wird eine zusammengesetzte Zahl gewählt in Runde i ≤ i≥1 |Primm | 1− m/2 n gewählt n liefert 0 wird zusammengesetzte Zahl und der iterierte MiRa-Test auf X und erkannt ∧ i−1 · 1 4` m/2 1 · ` |Primm | 4 3 ln(2m) ≤ . 2 · 4` = 42 hat Wir haben benutzt, dass es in [m, 2m) genau m/2 ungerade Zahlen gibt (m ist gerade). Die letzte Ungleichung folgt aus der Ungleichung von Finsler (Satz 1.16). (c) Da man in jeder Runde mit Wahrscheinlichkeit mindestens wählt, ist die erwartete Rundenzahl nicht gröÿer als m/2 |Primm | |Primm | eine Primzahl m/2 = O(log m). Bemerkung: Bei der Erzeugung zufälliger Primzahlen für kryptographische Zwecke wird man aus Ezienzgründen nicht unseren Algorithmus anwenden, der (log n)2 Multiplikationen benötigt, sondern eine Kombination zweier verschiedener Primzahltests (z. B. Miller-Rabin und Lucas-Lehmer) mit sehr wenigen Iterationen dies erfordert nur O(log n) Multiplikationen. Dies ist dadurch gerechtfertigt, dass die Dichte der zusammengesetzten Zahlen, die von einem solchen Test nicht erkannt werden, als sehr gering einzuschätzen ist. Über eine interessante experimentelle Untersuchung hierzu berichtet die kurze Notiz people.csail.mit.edu/rivest/Rivest-FindingFourMillionLargeRandomPrimes.ps von Ron Rivest (bekannt von RSA und von Cormen, Leiserson, Rivest und Stein). A Beweise und Bemerkungen für Abschnitt 1.1 Bemerkung A.1 zu Fakt 1.19 Wenn man es genau nimmt, sind die Elemente von Zm nicht Zahlen, sondern Äqui- valenzklassen [a] = {qm + a | q ∈ Z}, für 0 ≤ a < m, zur Äquivalenzrelation x≡y (mod m), die durch m ist Teiler von (auch: x − y x ≡ y(m) oder x ≡m y ), deniert ist (vgl. Fakt. 1.18). Die Operationen Z11 , dass [4] + [7] = [4] und [7] zueinander invers. Allgemeiner gilt in jedem Zm die Gleichheit [a] + [m − a] = [m] = [0], d. h., [m − a] ist das additive Inverse −[a] zu [a]. Multiplikativ gilt in Zm , dass [1] neutrales Element ist, und dass [1] · [1] = [1] und [m − 1] · [m − 1] = [m(m − 2) + 1] = [1], also [1] und −[1] = [m − 1] (triviale) Quadratwurzeln der 1 sind. Es ist bequem, die eckigen Klammern wegzulassen und für [i] einfach i zu schreiben. Man muss dann nur aufpassen, dass man Ausdrücke wie −1 richtig interpretiert, nämlich als das additive Inverse von 1 in Zm , also [m − 1]. werden auf den Repräsentanten ausgeführt, zum Beispiel gilt in [11] = [0] ist, also sind 43 Beweis von Lemma 1.21: ⇒: Es sei ab mod m = 1. Das heiÿt: Es gibt ein q ∈ Z mit ab − qm = 1. Wenn nun d > 0 sowohl a als auch m teilt, dann teilt d auch ab − qm = 1, also ist d = 1. Also sind a und m teilerfremd. eine Zahl ⇐: a und m seien teilerfremd. Nach Lemma 1.6(a) gibt es x, y ∈ Z mit xa+ym = 1. Setze b := x mod m. Dann gilt: (a · b) mod m = (a · (x mod m)) mod m = ax mod m = 1, d. h. b ist ein multiplikatives Inverses von a. Beweis von Fakt 1.23: Natürlich ist die 1 das neutrale Element der Multiplikation Z∗m . Wir bemerken zuerst, dass Z∗m unter Multiplikation modulo m abgeschlossen ist: Seien a und c zu m teilerfremd. Nach Lemma 1.6(a) kann man in Zm und in 1 = xa + ym = zc + um schreiben, und erhält daraus 1 = (xa + ym)(zc + um) = (xz)(ac) + (xau + yzc + yum)m. Wieder nach Lemma 1.6(a) folgt daraus, dass ac und m teilerfremd sind. ∗ Nach Lemma 1.21 hat jedes Element von Zm ein multiplikatives Inverses b ∈ Zm . ∗ Weil natürlich a auch das Inverse von b ist, folgt nach Lemma 1.21 auch, dass b ∈ Zm ist. Beweis von Proposition 1.24: ⇒: Sei m eine Primzahl. Dann ist jedes a ∈ {1, . . . , m} = Zm −{0} zu m teilerfremd; Z∗m = Zm − {0}. nach der Denition folgt ⇐: Sei ist k = modulo m eine zusammengesetzte Zahl, etwa durch ggt(k, m) m > 1, also kann k b gleich 1 mit 2<k<m teilbar. Dann nach Lemma 1.21 kein multiplikatives Inverses haben. (Man sieht auch direkt, dass ist, also für kein k kb mod m = kb − qm durch k teilbar sein kann.) 44