Stand: 29.12.2012 Vorlesung Randomisierte Algorithmen Dietzfelbinger 5 Randomisierte Algorithmen für Probleme aus der Zahlentheorie Zu Aussagen, die mit (∗) markiert sind, gibt es Beweise oder Anmerkungen im An- hang A. 5.1 Fakten aus der Zahlentheorie und grundlegende Algorithmen Fakt 5.1 (Division mit Rest). ein q mit Die Zahl x = qm + r. r Zu Die Zahlen (Rest) bezeichnen wir mit x unterscheidet sich also von ist ), wenn x mod m. Sie hat die Darstellung um ein Vielfaches von Wir sagen, dass eine ganze Zahl x x ∈ Z und m ≥ 2 gibt es ein r mit 0 ≤ r < m q und r sind eindeutig bestimmt. y die ganze Zahl x und x − qm, m. teilt (oder dass y ein Teiler von q gilt. Oft schreibt man dafür kurz y | x. 0 | x folgt x = 0; für jede ganze Zahl y gilt: y | 0; für jede 1 | x und −1 | x. Wenn m ≥ 2 ist, ist m | x gleichbedeutend mit x = qy für eine ganze Zahl (Beobachtungen: Aus x gilt: x mod m = 0.) ganze Zahl Fakt 5.2 ((∗)). Für jedes m ≥ 2 bildet die Menge Zm = {0, 1, . . . , m − 1} mit den m und Multiplikation modulo m einen Ring mit 1. Operationen Addition modulo Das heiÿt im Detail: Die Operationen Bereich Zm heraus. Die Addition erfüllt alle Rechenregeln für Gruppen. Insbesondere hat jedes Element und + (mod m) und · (mod m) führen nicht aus dem −0 = 0). a ein additives Inverses Die Multiplikation hat die 1 −a (beachte −a = m − a für 0<a<m als neutrales Element und ist assoziativ; für Addition und Multiplikation gelten die Distributivgesetze. (Für weitere Details siehe Bemerkung A.1.) Lemma 5.3. Für jedes m ≥ 2 ist die x, y ∈ Z gilt : Abbildung Z → Zm , x 7→ x mod m, Homomorphismus ; d. h. für (i) (x + y) mod m = ((x mod m) + (y mod m)) mod m, 1 ein (ii) (xy) mod m = ((x mod m)(y mod m)) mod m. Dieses Lemma wird hauptsächlich benutzt, um Rechnungen zu vereinfachen. Um einen arithmetischen Ausdruck auszuwerten (inklusive Potenzen), kann man auf beliebige Zwischenergebnisse die Beispiel : Um 137 mod 11 mod m-Operation anwenden. zu berechnen, rechnet man (13 mod 11)7 mod 11 = (25 mod 11) · 4 mod 11 = (−1) · 4 mod 11 = 7. Fakt 5.4. Für jedes x mod m = y mod m Beispiel : m≥2 gilt : genau dann wenn 29 mod 12 = 53 mod 12 = 5 Denition 5.5. (a) Für x−y und m, n ∈ Z, m, n ∈ Z, nicht m als auch n nicht beide gleich d. h. wenn keine Zahl >1 0, m teilbar ist. 53 − 29 = 24 positive Zahl, die sowohl (b) durch ist durch 12 teilbar. beide gleich 0, sei ggt(m, n) die gröÿte teilt. heiÿen teilerfremd, wenn ggt(m, n) =1 gilt, beide teilt. Es gibt einen ezienten Algorithmus zur Ermittlung des gröÿten gemeinsamen Teilers. Er beruht auf den Gleichungen ggt(a, 0) =a ggt(a, b) = ggt(b, a mod b) für für a>0 a ≥ b > 0, die in ein iteratives Verfahren umgesetzt werden. Algorithmus 5.1 (Euklidischer Algorithmus). Input: Zwei ganze Zahlen m und n. Methode: 1 a, b: integer; 2 if |m| ≥ |n| 3 then a ← |m|; b ← |n|; 4 else a ← |n|; b ← |m|; 5 while b > 0 repeat 6 7 (a, b) ← (b, a mod b); return a. 2 und 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 Zeilen 24 dienen nur dazu, die Normalsituation liche Rechnung ndet in der Fakt 5.6. wenn while-Schleife statt. Algorithmus 5.1 gibt ggt(m, n) m = n = 0, ist die Ausgabe > 0 a ≥ b ≥ 0 herzustellen. Die eigent- aus, wenn m, n nicht beide 0 sind ; 0. m = 10534, n = 12742 ergibt sich der in Tab. 5.1 angegebene Ablauf. Die Zahlen ai und bi bezeichnen den Inhalt der Variablen a und b, nachdem die Schleife in Zeilen 56 i-mal ausgeführt worden ist. Die Ausgabe ist 46 = ggt(10534, 12742). Auf Eingabe Um einzusehen, dass der Algorithmus terminiert, ja sogar sehr schnell terminiert, bemerken wir Folgendes. Betrachte den Beginn eines Schleifendurchlaufs. Der Inhalt a der Inhalt von b sei b, mit a ≥ 0 den Wert a = b und b den Wert b > 0. Nach einem Schleifendurchlauf enthält a 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{|m|, |n|}. Daraus ergibt von sei a, sich Teil (a) der folgenden Aussage. Fakt 5.7. (a) Die Schleife in Zeilen 56 wird höchstens O(log(min{|m|, |n|}))-mal ausgeführt. (b) Die gesamte Anzahl von Bitoperationen für den Euklidischen Algorithmus ist O(log(|m|) log(|n|)). 3 Man beachte, dass n dlog(n + 1)e ≈ log n 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 m und n, 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.) 21 und 25 sind teilerfremd. Es gilt 31 · 21 + (−26) · 25 = 651 − 650 = 1. ggt(21, 35) = 7, und 2 · 35 − 3 · 21 = 7. Beispiel : (a) (b) Es gilt Die folgende sehr nützliche Aussage verallgemeinert diese Beobachtung: Lemma 5.8 ((∗) . . . . von Bezout) m, n teilerfremd sind, gibt es x, y mit xm + yn = 1. m, n ∈ Z, nicht beide gleich 0, gibt es x, y ∈ Z mit xm + yn = ggt(m, n). (a) Wenn (b) Für Die Koezienten x, y aus dem Lemma von Bezout kann man mit einer Erweiterung des Euklidischen Algorithmus sehr ezient berechnen. Algorithmus 5.2 (Erweiterter Euklidischer Algorithmus). Eingabe: Ganze Zahlen m und n. Methode: 0 1 2 3 4 5 6 7 8 9 10 a, b, xa, ya, xb, yb, q: integer; if |m| ≥ |n| then a ← |m|; b ← |n|; xa ← sign(m); ya ← 0; xb ← 0; yb ← sign(n); else a ← |n|; b ← |m|; xa ← 0; ya ← sign(n); xb ← sign(m); yb ← 0; while b > 0 repeat q ← a div b; (a, b) ← (b, a − q · b); (xa, ya, xb, yb) ← (xb, yb, xa − q · xb, ya − q · yb); return (a, xa, ya); Im Algorithmus benutzen wir die Signumfunktion, die wie folgt deniert ist: 1 0 sign(n) = −1 , falls , falls , falls n > 0, n = 0, n < 0, (1) n (2) die also n = sign(n) · |n| 4 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 |m| < |n| ist. Die Idee hinter dem Algorithmus ist folgende. Für die Diskussion beschränken wir m ≥ n ≥ 0. Der Euklidische Algorithmus führt in den Variablen a und b Zahlen a und b mit, die stets ggt(a, b) = d = ggt(m, n) erfüllen. Die Variablen xa, ya, xb und yb enthalten immer Zahlenpaare (xa , ya ) und (xb , yb ), die folgende uns auf den Fall Gleichungen erfüllen: a = xa · m + ya · n, b = xb · m + yb · n. Dies wird durch die Initialisierung hergestellt (a = m, b = n, xa = 1, ya = 0, xb = 0, yb = 1). In einem Schleifendurchlauf wird a durch b ersetzt und (xa , ya ) durch (xb , yb ), und es wird b durch a − q · b ersetzt sowie (xb , yb ) durch (xa − q · xa , ya − q · yb ). Dadurch bleiben die Gleichungen gültig. Wenn schlieÿlich b = 0 geworden ist, gilt d = ggt(m, n) = a = xa · m + ya · n, was die Ausgabe erklärt. Als Beispiel betrachten wir den Ablauf des Algorithmus auf der Eingabe (10534, 12742). Die xa, ya, xb, yb nach Die Ausgabe ist Zahlen dem ai ,bi , xa,i , ya,i , xb,i , yb,i i-ten Schleifendurchlauf. 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). xa,i ya,i xb,i yb,i qi Man überprüft leicht, dass 46 = ggt(10534, 12742) = 75 · 10534 − 62 · 12742 gilt. Allgemein gilt: 5 (m, n) = a, b, bezeichnen den Inhalt von Fakt 5.9. m, n, die nicht d = ggt(m, n) = xm + yn. (a) Wenn Algorithmus 5.2 auf Eingabe Ausgabe (d, x, y) liefert, dann gilt beide 0 sind, die (b) Die Anzahl der Schleifendurchläufe ist dieselbe wie beim gewöhnlichen Euklidi- schen Algorithmus. O(log(|m|) log(|n|)). (c) Die Anzahl von Bitoperationen für Algorithmus 5.2 ist In jeder Struktur Zm spielen die Elemente, die ein multiplikatives Inverses haben, eine spezielle Rolle; sie erhalten eine spezielle Bezeichnung. Lemma 5.10 ((∗)). Es gibt ein b mit 31 · 21 + (−26) · 25 = 1 Beispiel : Aus Inverses zu m ≥ 2 und jedes a ∈ Z gilt : ab mod m = 1 genau dann wenn ggt(a, m) = 1. 21 Fakt 5.12 ((∗)). Für m≥2 Für jedes sei 31 mod 25 = 6 ein multiplikatives Z∗m := {a ∈ Zm | ggt(a, m) = 1}. m≥2 mit der Multiplikation modulo Beispiel : folgt, dass modulo 25 ist. Denition 5.11. Z∗m Für jedes gilt : m als Operation ist eine Gruppe. Z∗7 = {1, 2, 3, 4, 5, 6}. < m in Z∗m liegen. Z∗21 = {1, 2, 4, 5, 8, 10, 11, 13, 16, 17, 19, 20} Am schönsten ist die Situation, wenn alle Zahlen und Proposition 5.13 ((∗)). m ist Primzahl Für jedes m ≥ 2 gilt : ∗ ⇔ Zm = {1, . . . , m − 1} ⇔ Zm Die zweite Äquivalenz ist dabei klar: Der Ring genau dann wenn jedes Element von Zm − {0} ist ein Körper. Zm ist nach Denition ein Körper ein multiplikatives Inverses besitzt. Beispiel : Wir rechnen modulo 13 und geben für jedes Produkt a·b a ∈ Z∗13 das Inverse b sowie das an (das natürlich bei der Division durch 13 Rest 1 lassen muss). a b a·b 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. 6 b mit 2 · b mod 14 = 1; das heiÿt, dass Fakt 5.14 (Kleiner Satz von Fermat) . Wenn am−1 mod m = 1, m eine Primzahl ist, dann gilt : für jedes a ∈ Z∗m . Beweis : Betrachte die Abbildung ga : Z∗m 3 x 7→ ax mod m ∈ Z∗m . Diese Abbildung ist injektiv, da für das zu bax mod m = x. a inverse Element b gilt: b · ga (x) mod m = Also: {1, . . . , m − 1} = {ga (1), . . . , ga (m − 1)}. Wir multiplizieren: 1 · . . . · (m − 1) mod m = ga (1) · . . . · ga (m − 1) mod m = am−1 · (1 · . . . · (m − 1)) mod m. Wenn wir beide Seiten mit dem multiplikativen Inversen von m−1 multiplizieren, erhalten wir 1 = a mod m. Wir bemerken, dass auch die Umkehrung gilt: Wenn qm = 1 dann folgt ggt(a, m) m−1 gilt auf jeden Fall a mod m 6= 1. für ein Ab hier soll p ungerade. 1 p q, = 1. Wenn 1 · . . . · (m − 1) mod m am−1 mod m = 1 ist, d. h. am−1 − ∗ also a ∈ (Zm − {0}) − Zm , dann immer eine Primzahl bezeichnen. Normalerweise ist dabei p > 2, also Wir notieren noch wesentliche Eigenschaften von teilerfremden Zahlen. Fakt 5.15 ((∗)). von a, dann ist Wenn mn m und Teiler von n teilerfremd a. sind, und sowohl m als auch Sehr grundlegend ist folgende Aussage über teilerfremde Zahlenpaare wesentlichen sagt, dass die Strukturen und Zmn n ist Teiler (m, n), die im Zm ×Zn (mit komponentenweisen Operationen) isomorph sind. m = 3, n = 8, also mn = 24. Die folgende Tabelle gibt die Reste der Zahlen a ∈ {0, 1, . . . , 23} modulo 3 und modulo 8 an. Die Reste wiederholen sich zyklisch für andere a ∈ Z. Wir beginnen mit einem Beispiel, nämlich 1 All primes are odd except 2, which is the oddest of all. (D. E. Knuth) 7 a 0 1 2 3 4 5 6 7 8 9 10 11 a mod 3 0 1 2 0 1 2 0 1 2 0 1 2 a mod 8 0 1 2 3 4 5 6 7 0 1 2 3 a 12 13 14 15 16 17 18 19 20 21 22 23 a mod 3 0 1 2 0 1 2 0 1 2 0 1 2 a mod 8 4 5 6 7 0 1 2 3 4 5 6 7 Z3 ×Z8 ansehen, erkennen wir, dass sie alle verschieden sind, also auch alle Möglichkeiten in {0, 1, 2} × {0, 1, . . . , 7} abdecken. D. h.: Die Abbildung a 7→ (a mod 3, a mod 8) ist eine Bijektion zwischen Z24 und Z3 × Z8 . Zudem spiegeln sich arithmetische Operationen auf den Elementen von Z24 wieder 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 Wenn wir die Einträge in Zeilen 2 und 3 als 24 Paare in (25 mod 3, 35 mod 8) = (2, 3), was der Beobachtung 115 mod 24 = 11 entspricht. Der Chinesische Restsatz sagt im wesentlichen, dass eine solche strukturelle Entsprechung zwischen den Resten modulo gilt, wenn m Fakt 5.16 und n mn und Paaren von Resten modulo m, n (Chinesischer Restsatz) .m und n seien teilerfremd. Dann ist die Abbil- dung Φ : Zmn 3 x 7→ (x mod m, x mod n) ∈ Zm × Zn bijektiv. Weiterhin : Wenn Φ(x) = (x1 , x2 ) und Φ(y) = (y1 , y2 ), (a) Φ(x +mn y) = (x1 +m y1 , x2 +n y2 ); (b) Φ(x ·mn y) = (x1 ·m y1 , x2 ·n y2 ); (c) Φ(xk mod (mn)) = ((x1 )k mod m, (x2 )k mod n), (Dabei bezeichnen immer teilerfremd sind. +j für dann gilt : k ≥ 0. und ·j die Addition und die Multiplikation modulo 8 j .) Oft kommt es darauf an, Potenzen an mod m zu berechnen. Dabei kann n eine sehr groÿe Zahl sein. 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 a an mod m = ((an/2 mod m)2 ) mod m (a · (a(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 je- der Rekursionsstufe ist eine oder sind zwei Multiplikationen modulo m auszufüh2 ren, was O((log m) ) Bitoperationen erfordert (Schulmethode). Damit kommt man bei der schnellen Exponentiation selbst bei der einfachsten Implementierung mit O((log n)(log m)2 ) Bitoperationen 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 normalerweise durch die interne Darstellung gegeben. Alternativ kann man die Binärziern durch iterierte Division in der Reihenfolge b0 , b1 , . . . , bk ermitteln. In Runde i i a2 mod m als Faktor. Diesen kann man einfach durch 2i 2i−1 iteriertes Quadrieren ermitteln, mit der Formel a mod m = (a mod m)2 mod m. 2 Dies führt zu folgendem Verfahren, das ebenfalls O((log m) ) Bitoperationen erfor- von n benötigt man dann die Potenz dert. 9 Algorithmus 5.3 (Schnelle modulare Exponentiation). Eingabe: Ganze Zahlen a, n ≥ 0, and m ≥ 1. Methode: 0 1 2 3 4 5 6 7 8 u, s, c: integer; u ← n; s ← a 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 a = 2, n = 4321 Binärdarstellung bk . . . b0 = 1000011100001), m = 101. i 0 1 2 3 4 5 6 7 8 9 10 11 12 a mod m = a2 mod m initialisiert, und u mit n. Die Binärdarstellung von 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 Zeile 2 wird s n 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 10 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, 2i enthält s die Zahl si = a 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 Zahl mod m enthält. Die Abarbeitung der Schleife hält, wenn u 0 ge0≤j≤i, bj =1 a 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 = an mod n. 0≤j≤k, bj =1 a die Zahl mit Binärdarstellung Lemma 5.17. Die Berechnung von an mod m benötigt O(log n) Multiplikationen und Divisionen modulo m von Zahlen aus {0, . . . , m2 − 1} sowie O((log n)(log m)2 ) Bit- operationen. Bemerkung: Man kann denselben Algorithmus in einem beliebigen Monoid (Berei- che mit einer assoziativen Operation und einem neutralen Element) benutzen. Einen Monoid bilden zum Beispiel die natürlichen Zahlen mit der Multiplikation oder die ∗ Menge Σ über einem Alphabet Σ mit der Konkatenation. In Abschnitt 5.2 benutzen wir die schnelle Exponentiation für einen etwas ungewöhnlichen Monoid. 5.2 Quadratische Reste und Quadratwurzeln modulo p Wir betrachten hier den Begri des quadratischen Rests und der Quadratwurzeln modulo p, für Primzahlen Beispiel : Für und p = 19 betrachten wir die Quadrate der Zahlen in a 1 2 3 4 5 6 7 8 9 10 11 12 a2 a2 mod 13 1 4 9 16 25 36 49 64 81 100 121 144 1 4 9 3 12 10 10 12 3 9 4 1 a a mod 19 2 p = 13 p. Z∗p . 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 1 4 9 16 6 17 11 7 5 5 7 11 17 6 16 9 4 1 Wir bemerken, dass in beiden Fällen jede Zahl entweder keinmal oder zweimal als ∗ 1 Quadrat vorkommt, dass infolgedessen genau (p−1) Zahlen in Zp als Quadratzahlen 2 auftauchen. Im Fall p = 13 ist 12 = −1 mod 13 eine Quadratzahl, im Fall p = 19 ist 18 = −1 mod 19 keine Quadratzahl. Es stellt sich die Frage, wie man zu gegebenem 11 p und a ermitteln kann, ob a in ein Quadrat ist (einfach, wenn man weiÿ, wie es 2 geht) und wie man gegebenenfalls ein c mit c mod p = a nden kann (eventuell nicht Zp ganz so einfach). Bemerkung: In Zp spielt p − 1 die Rolle von −1, dem additiven Inversen von 1. Denition 5.18. Für eine ungerade Primzahl QRp p sei := {a ∈ Z∗p | ∃b ∈ Z∗p : b2 mod p = a} die Menge der quadratischen Reste in Z∗p . Wir stellen einige auch für sich wichtige Hilfsaussagen bereit. Fakt 5.19. (a) Wenn in Zp (b) Für Wenn d≥1 p eine ungerade Primzahl ist und ist, dann hat ein Polynom höchstens s≥1 d s ≥ 2, dann gilt: f (X) = X d + ad−1 X d−1 + · · · + a1 X + a0 Nullstellen. gibt es in Z∗p höchstens s Elemente b mit bs mod p = 1. Beweis : (a) Dies ist eine Tatsache, die in Körpern allgemein gilt. Man kann sich b1 , . . . , bk aus f (X) den Faktor (X − b1 ) · · · (X − bk ) ausklammern kann, d. h. f (X) = (X − b1 ) · · · (X − bk ) · g(X) schreiben kann. Dann kann k nicht gröÿer als der Grad d von f (X) sein. s (b) Wenn b1 , . . . , bs+1 verschiedene Lösungen wären, hätte das Polynom X − 1 Grad s, aber > s Nullstellen, was (a) widerspricht. recht leicht überlegen, dass man für Nullstellen Lemma 5.20. genau für p eine ungerade b ∈ {1, −1} = {1, p − 1}. Wenn Primzahl ist, dann gilt Beweis : Oensichtlich gilt für jedes beliebige 2 m ≥ 2, dass 1) mod m = (m(m + 2) + 1) mod m = 1 ist. Nach Fakt X 2 − 1 nicht mehr als diese beiden Nullstellen haben. b2 mod p = 1, b ∈ Zp 12 mod m = 1 und (m − 5.19(b) kann das Polynom Allgemeiner gilt: Lemma 5.21. zwei Zahlen Wenn b∈ p eine ungerade Primzahl ist und Zp mit b2 mod p = a. Folgerung: |QRp | = 21 (p − 1). 12 a ∈ QRp , dann gibt es genau (−b)2 mod p = b mod p = a. Weil p ungerade ist, gilt b − (−b) mod p = 2b mod p 6= 0, also b 6= −b. 2 Nach Fakt 5.19 kann das Polynom X − a nicht mehr als diese beiden Nullstellen haben. Beweis : Nach Denition von QRp gibt es ein solches b. Dann gilt auch 2 Die folgende Behauptung erlaubt es zu testen, ob Proposition 5.22 ((∗) jedes a ∈ Z∗p . Eulersches Kriterium) a ein quadratischer Rest ist. Für jede ungerade Primzahl p und gilt : (a) a(p−1)/2 mod p ∈ {1, −1}. (b) a ∈ QRp ⇔ a(p−1)/2 mod p = 1. (Beweis in Anhang A.) Mit diesem Kriterium kann man mit einer schnellen Exponentiation testen, ob eine Zahl a quadratischer Rest modulo p ist oder nicht. Algorithmus 5.4 (Quadratzahltest). Input: Primzahl p, Zahl a mit 1 < a < p Methode: (1) (2) Berechne if z = a(p−1)/2 mod p; (∗ Schnelle Exponentiation ∗) z = 1 then return Quadrat else Wir rechnen versuchsweise in Z19 , für return 18 ∈ / QR19 und Nichtquadrat. 17 ∈ QR19 : 189 mod 19 = (((−1)8 mod 19) · 18) mod 19 = 18 6= 1; 179 mod 19 = (((−2)8 mod 19) · (−2)) mod 19 = (256 · (−2)) mod 19 = (9 · (−2)) mod 19 = 1. Wir notieren eine leichte Folgerung aus dem Eulerschen Kriterium: Korollar 5.23. (a) Für Sei a, b ∈ Z∗p p eine ungerade Primzahl. Dann gilt : und das Produkt c = ab mod p: a, b ∈ QRp ⇒ c ∈ QRp ; a, b ∈ / QRp ⇒ c ∈ QRp ; a ∈ QRp , b ∈ / QRp ⇒ c ∈ / QRp . 13 (b) Für a ∈ Z∗p und a−1 in Z∗ p, das multiplikative Inverse von a ∈ QRp a: a−1 ∈ QRp . ⇔ ((a) folgt durch Anwendung von Exponentiationsregeln und Proposition 5.22; (b) −1 folgt aus a · a = 1 ∈ QRp und (a).) Wenn das so einfach geht kann man dann zu einer Quadratzahl Quadratwurzel b modulo p a auch leicht eine berechnen? Erstaunlicherweise gibt es hier zwei sehr verschiedene Fälle. Wir betrachten das Bei- p = 19. Die Quadrate in Z∗p sind die 9 5 berechnen a mod 19 für diese Quadratzahlen: spiel Zahlen 1, 4, 5, 6, 7, 9, 11, 16, 17. a 1 4 5 6 7 9 11 16 17 b = a5 mod 19 b2 mod 19 1 17 9 5 11 16 7 4 6 1 4 5 6 7 9 11 16 17 Wir a5 ist für jede der Quadratzahlen a eine Quadratwurzel. (Die andere ist 5 natürlich dann (19 − a ) mod 19.) Dies ist kein Zufall. Die Zahl 5 ergibt sich aus p = 19 als 41 (p + 1). Diese Operation ist für alle Primzahlen möglich, die um 1 unter einem Vielfachen von 4 liegen. Wir sehen: Proposition 5.24. dann ist für jedes Wenn a ∈ QRp p eine Primzahl ist derart, dass p + 1 durch 4 teilbar ist, a(p+1)/4 mod p eine Quadratwurzel von a. die Zahl Beweis : ((a(p+1)/4 ) mod p)2 mod p = (a(p+1)/2 ) mod p = (((a(p−1)/2 ) mod p) · a) mod p = a, wobei wir Proposition 5.22(b) benutzt haben. Mit anderen Worten: Für die Primzahlen p ∈ {3, 7, 11, 19, 23, 31, 43, 47, 59, . . . } läuft 1 das Ziehen von Quadratwurzeln auf eine schnelle Exponentiation mit Exponent (p+ 4 1) hinaus. (Bitkomplexität O((log p)3 ).) Wie steht es mit den anderen Primzahlen 5, 13, 17, 29, 37, 41, 53, . . . ? Gibt es einen ähnlich ezienten Algorithmus zum Finden von Quadratwurzeln? Hier gibt es nochmals zwei Unterfälle. Wenn man leicht einen beliebigen nichtquadratischen Rest modulo p nden kann, dann kann man mit Hilfe eines deterministischen Algorithmus, 14 O((log p)2 ) arithmetischen Operationen Quawenn p − 5 durch 8 teilbar ist, weil dann stets der in Anhang B beschrieben ist, mit dratwurzeln nden. Dies ist der Fall, 2 ∈ / QRp gilt (Ergebnis der Zahlentheorie im Zusammenhang mit dem Quadratischen Reziprozitätsgesetz). Es bleiben die Primzahlen p, für die p − 1 durch 8 teilbar ist, beispielsweise 17, 41, 73 . . .. Interessanterweise kennt man für solche Primzahlen keinen deterministischen Algorithmus, der Quadratwurzeln modulo p berechnet und O(1) dazu Zeit (log p) braucht. Wir betrachten hier einen randomisierten Algorithmus für diese Aufgabe. Er funktioniert für alle Primzahlen der Form durch 4 p, für die p−1 teilbar ist. Idee: Gegeben ein a ∈ QRp , bezeichne eine Quadratwurzel von a mit . Die andere −. Rechne mit (in Zp ) wie mit einer Unbekannten. Es entstehen Ausdrücke α + β · , die man addieren, subtrahieren und multiplizieren 2 kann. Höhere Potenzen von entstehen nicht, wenn durch a ersetzt wird. Es gelten Quadratwurzel von a ist dann folgende Regeln: (α + β · ) ± (γ + δ · ) = (α ± γ) + (β ± δ) · ; (α + β · ) · (γ + δ · ) = (αγ + βδ · a) + (αδ + βγ) · . Wenn man diese Operationen implementieren will, stellt man ein Element als (α, β) (3) α+β· dar und rechnet wie in (3). Mit den in (3) angegebenen Operationen bildet die Menge der Paare (a, b) in Zp × Zp einen Ring mit die Multiplikation ein neutrales Element, nämlich (1, 0), 1. Insbesondere besitzt und die Multiplikation ist kommutativ und assoziativ (prüft man leicht nach). Daher kann man das schnelle Exponentiationsverfahren aus Algorithmus 5.3 anwenden, um symbolisch die Potenz (α + β · )i in log i Runden mit jeweils höchstens 10 Multiplikationen modulo p zu berechnen. Wesentlich ist die folgende Grundeigenschaft. Wenn man in der abstrakten Notation eine Gleichheit ausgerechnet hat, dann gilt sie für beide Wurzeln von Wenn sich mit den Regeln von (3) 2 und wenn w mod p = a ist, i dann gilt (α + β · w) = γ + δ · w . (Man setzt w für (α + β · )i zu γ+δ· a: berechnet ein und verfolgt die symbolische Rechnung, aber nun in 15 Zp .) Algorithmus 5.5 (Quadratwurzeln, randomisiert). Input: Primzahl p, wobei p − 1 durch 4 teilbar ist; a ∈ {1, . . . , p − 1} Methode: (∗ 1 2 3 4 5 6 7 8 9 Finde repeat b mit mit b2 = a a(p−1)/2 mod p = 1. oder b2 − a ∈ / QRp : ∗) b := Zufallszahl in {1, . . . , p − 1}; if b2 mod p = a then return b; (∗ Glück gehabt! ∗) until (b2 − a)(p−1)/2 mod p = p − 1; (∗ b2 − a nicht-quadratischer (c + d · ) ← (b + 1 · )(p−1)/2 ; (∗ Schnelle Exponentiation mit Ausdrücken α + β · , −1 Berechne u = d (im Körper Zp ); (∗ Erweiterter Euklidischer Algorithmus ∗) return {u, −u}. Korrektheit: w sei eine Quadratwurzel von obigen Vorüberlegung gilt (in Zp a, Rest Regeln (3) ∗) ∗) die andere ist dann −w . Nach der w2 = a als auch (−w)2 = a gerechnet), weil sowohl gilt: c + dw = (b + w)(p−1)/2 ∈ {1, −1} und c − dw = (b − w)(p−1)/2 ∈ {1, −1}. (4) Wir addieren diese beiden Gleichungen und erhalten: 2 · c = (b + w)(p−1)/2 + (b − w)(p−1)/2 . 2 (p−1)/2 Andererseits ist (b − a) a = w2 ein und erhalten = −1 (5) (wegen Zeile 4 im Algorithmus). Wir setzen −1 = (b2 − w2 )(p−1)/2 = (b + w)(p−1)/2 · (b − w)(p−1)/2 . Wegen (4) muss einer der Faktoren gleich 1 und der andere gleich −1 sein: {(b + w)(p−1)/2 , (b − w)(p−1)/2 } = {1, −1}. Mit (5) folgt 2 · c = 0, und damit c = 0, weil in Zp gilt, dass Subtraktion der Gleichungen in (4) ergibt 2dw = (b + w)(p−1)/2 − (b − w)(p−1)/2 . 16 2 = 1 + 1 6= 0 ist. 1 und −1 2 6= 0): Die beiden Terme in der Dierenz sind ist 2dw ∈ {2, −2}, oder (wieder weil dw ∈ {1, −1}, (in irgendeiner Reihenfolge), also w ∈ {d−1 , −d−1 }, d.h.: wobei das multiplikative Inverse in Zp berechnet wird. Weil nach der Ausgangssituaw und −w die Quadratwurzeln von a sind, sind auf jeden Fall u = d−1 und −u = −d−1 diese Wurzeln. tion Rechenzeit: In der Laufzeit des Algorithmus gibt es drei entscheidende Kompo- nenten: (i) Das Finden eines Elements b derart dass b Quadratwurzel von a (sehr 2 unwahrscheinlich) oder b − a ∈ / QRp (ein nicht-quadratischer Rest) ist; (ii) die Ex(p−1)/2 ponentiation zum Finden von (a + 1 · ) (die höchstens log p Schleifendurchläufe mit je höchstens 10 modularen Multiplikationen erfordert); (iii) der Aufwand für den erweiterten Euklidischen Algorithmus. Teile (ii) und (iii) haben Kosten, die einer festen Anzahl modularer Exponentiationen entspricht, also O(log p) Multiplikationen und Additionen. Für den ersten Teil ist zu überlegen, was die Dichte |{b ∈ Z∗p | b2 = a ∨ b2 − a ∈ / QRp }| |G| = p−1 p−1 der Menge G der guten Elemente in Behauptung: |G| = 12 (p + 3). Z∗p Beweis der Behauptung : Die Elemente ist. w und −w sind verschiedene und jedenfalls gute Elemente. Es geht also um die Anzahl der guten Elemente in der Menge ( Nicht- Wurzeln ) NW Wir denieren eine Funktion f: f (b) := := Z∗p − {w, −w}. NW → Zp b+w b−w durch (Arithmetik in b 6= w, Zp ). 0 nicht an, da b 6= −w. Weiterhin wird der Wert 1 nicht angenommen (wenn b + w = b − w, wäre 2w = 0, also w = 0), und der Wert −1 auch nicht (wenn b + w = −(b − w), wäre 2b = 0, also b = 0, was b ∈ Z∗p widerspricht). Also gilt: f : NW → {2, . . . , p − 2}. Man sieht leicht, dass f injektiv ist: Diese Funktion ist wohldeniert, da 17 und sie nimmt den Wert b1 + w b2 + w = ⇒ b1 − w b2 − w ⇒ ⇒ ⇒ 2 6= 0 (b1 + w)(b2 − w) = (b2 + w)(b1 − w) b1 b2 − wb1 + wb2 − w2 = b1 b2 + wb1 − wb2 − w2 2w(b2 − b1 ) = 0 b1 = b2 , w 6= 0 benutzt haben. Aus der Injektivität folgt, dass f eine {2, . . . , p − 2} ist. In der letzteren Menge gibt es (p − 1)/2 − 2 quadratische Reste (weil 1 und p − 1 quadratische Reste sind: (p − 1)/2 (p−1)/2 ist gerade, daher ist (−1) = 1), also p − 3 − ((p − 1)/2 − 2) = (p − 1)/2 wobei wir und Bijektion zwischen NW und nicht-quadratische Reste. Bleibt zu zeigen: b2 − a ∈ QRp ⇔ b+w ∈ QRp . b−w b2 − a = (b + w)(b − w) ist, also (b + w)/(b − w) = (b2 − a)/(b − w)2 , und nach Korollar 5.23 die Menge der (nicht-)quadratischen Reste in Zp unter Division 2 mit quadratischen Resten (hier (b − w) ) abgeschlossen ist. Wegen dieser Eigenschaft von f ist Das gilt, weil |G| = 2 + |{u ∈ NW | f (u) ∈ / QRp }| = 2 + (p − 1)/2 = (p + 3)/2. Damit ist die Behauptung bewiesen. Die Wahrscheinlichkeit, in Zeile 2 ein Element 1 von |G| zu wählen, ist also (p + 3)/(2(p − 1)) > . Damit ist die erwartete Anzahl 2 von Versuchen, bis ein geeignetes b gefunden wird, kleiner als 2. Bemerkung: Es gibt einen anderen randomisierten Algorithmus zur Ermittlung von Quadratwurzeln modulo p, der mit O((log p)2 ) Multiplikationen modulo p (entspre- chend einer logarithmischen Anzahl von schnellen Exponentiationen) auskommt. Dieser Algorithmus benutzt Randomisierung, um einen beliebigen nichtquadratischen Rest zu nden; mit diesem Element wird dann deterministisch weiter gearbeitet. Siehe Anhang B. Bemerkung: Für Zahlen der Form n = p · q für Primzahlen p, q ist kein ezienter n bekannt (auch kein randomisierter!), wenn nur n und die Quadratzahl a (modulo n), nicht aber die Faktoren p und q Teil der Eingabe sind. Algorithmus zur Ermittlung von Quadratwurzeln modulo 18 5.3 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 Vorlesung Public-Key-Kryptographie) hat sich die Situation jedoch dahin entwickelt, dass man Algorithmen benötigt, die immer 2 wieder neue vielzirige Primzahlen (etwa mit 512 oder 1024 Bits bzw. 155 oder 310 Dezimalziern) bereitstellen können. Den Kern dieser Primzahlerzeugungs-Verfahren (siehe Abschnitt 5.4) bildet ein Verfahren, das eine gegebene Zahl n darauf testet, ob sie prim ist. Ein naiver Primzahltest (versuchsweise Division), der dem brute-force -Paradigma folgt, ndet durch direkte Division der Zahl n n durch √ 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 Fehlerwahrscheinlichkeit. Der Miller-Rabin-Algorithmus hat Fehlerschranke 1 . Wir 4 2 http://www.rsa.com/rsalabs/node.asp?id=2218 am 29.12.2012: RSA Laboratories currently 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 mit jeweils der halben Länge. 19 die Bitanzahl eines Produkts 1 . Im Beweis benutzen wir einfache zahlentheore2 tische und gruppentheoretische Überlegungen. Eine herausragende Eigenschaft des beweisen nur die Fehlerschranke Miller-Rabin-Tests ist seine Ezienz. Wir werden sehen, dass selbst bei Verwendung der Schulmethoden für Multiplikation und Division die Bitkomplexität des Primzahl3 tests 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 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. 5.3.1 Der Fermat-Test Wir erinnern uns an den kleinen Satz von Fermat (Fakt 5.14): 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 5.25. 1≤a<n n eine ungerade Zahl. Eine Zahl a mit 1 ≤ a < n − 1 heiÿt ein F-Zeuge für n, wenn an−1 mod n 6= 1 gilt. Wenn n zusammengesetzt ist und für a n−1 mit 1 ≤ a < n − 1 die Gleichheit a mod n = 1 gilt, heiÿt a ein F-Lügner für n. Wenn a Sei ein F-Zeuge für n ist, kann n keine Primzahl sein. Eigentlich ist a also ein n keine Primzahl k, ` > 1 gibt mit n = k·`, Zeuge (oder Beweis oder Zertikat oder Beleg) für die Tatsache, dass ist. Wir bemerken, dass ein F-Zeuge belegt, dass es Faktoren dass aber solche Faktoren nicht angegeben oder gefunden werden müssen. Dies wird von Primzahltests auch nicht verlangt und normalerweise auch nicht geleistet. 20 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 2: F-Zeugen und F-Lügner für n = 91 = 7 · 13 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 {1, . . . , n − 1} − Z∗ . 1n−1 mod n = 1 n gibt es einige F-Zeugen, nämlich die Elemente von n Lemma 5.26. Ist n keine Primzahl und a ∈ Zn \ Z∗n folgt: a ist F-Zeuge. an−1 mod n = 1, haben wir nach Fakt 5.4 an−1 −1 = yn ∗ ist ggt(n, a) ein Teiler von 1, also muss a ∈ Zn gelten. Beweis : Wenn Zahl y. Dann Leider ist für manche zusammengesetzten Zahlen n die Menge für eine ganze {1, . . . , n − 1} − Z∗ n 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 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 2 zeigt, dass es 18 Vielfache von 7 und 13 gibt (für gröÿere p und q wird der Anteil dieser äuÿerst dünn. Wenn zum Beispiel 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. 21 Algorithmus 5.6 (Fermat-Test). Eingabe: Ungerade Zahl n ≥ 5. Methode: Wähle a zufällig aus n−1 1 if a 2 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 5.17 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 Für 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 17 34 = 44 ≈ 0,3864. 88 auÿer 1 und 90 gewählt wird. Die Wahrscheinlichkeit hierfür ist 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. Fakt 5.27. ist |H| Wenn G eine endliche Gruppe und |G|. H ein Teiler von Insbesondere gilt : Wenn H echte Untergruppe von 3 eine Untergruppe von G G ist, dann |H| ≤ 12 |G|. ist, dann gilt (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. 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 ∼H b |h∈ eine Bijektion zwischen H und aH Hilfreich ist noch das folgende Untergruppenkriterium für endliche Gruppen. Fakt 5.28. Wenn Teilmenge von (i) 1∈A G, G eine endliche Gruppe mit neutralem Element 1 ist und A eine derart dass und 3 Wir betrachten im Folgenden die Gruppe ∗ Zn mit Multiplikation modulo der 1 als neutralem Elment. 22 n als Operation und (ii) A unter der Gruppenoperation von auch immer dann ist A ab ∈ A G abgeschlossen ist, d. h., wenn für a, b ∈ A gilt, 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 5.29. n ≥ 9 eine ungerade zusammengesetzte Zahl. Wenn es mindestens a ∈ Z∗n gibt, dann liefert der Fermat-Test auf Eingabe n mit Wahr1 gröÿer als 2 die korrekte Antwort 1. Sei einen F-Zeugen scheinlichkeit Beweis : In Lemma 5.26 haben wir gesehen, dass die Menge LFn = {a | 1 ≤ a < n, an−1 mod n = 1} der F-Lügner für gruppe von (i) (ii) Z∗n 1 ∈ LFn , n eine Teilmenge von Z∗n ist. Wir zeigen, dass LFn sogar eine Unter- ist. Hierzu wenden wir Fakt 5.28 an: weil 1n−1 = 1; ∗ LFn 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). ∗ Aus der Annahme, dass es in Zn mindestens einen F-Zeugen gibt, erhalten wir, dass LFn eine echte Untergruppe von Z∗n ist. Mit Fakt 5.27 folgt: |LFn | ≤ ϕ(n)/2 ≤ (n−2)/2. Daher ist die Wahrscheinlichkeit, dass ein aus {2, . . . , n − 2} zufällig gewähltes a in LFn − {1, n − 1} liegt, höchstens n−6 1 (n − 2)/2 − 2 = < , n−3 2(n − 3) 2 (6) wie gewünscht. Wie üblich verringern wir die Fehlerwahrscheinlichkeit durch Wiederholung. 23 Algorithmus 5.7 (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 1 ` = ist nach Satz 5.29 die Wahrscheinlichkeit für die falsche Ausgabe 0 höchstens 2 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 Z∗n F-Lügner sind. Mit diesen befasst sich der folgende Abschnitt. 5.3.2 Carmichael-Zahlen Denition 5.30. Eine ungerade zusammengesetzte Zahl n−1 Zahl, wenn für alle a ∈ Z∗ mod n = n die Gleichung a n heiÿt 1 gilt. eine Carmichael- 561 = 3 · 11 · 17. Weitere kleine Carmichael-Zahlen sind 1105 = 5 · 13 · 17 und 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 den zusammengesetzten Zahlen nicht bekannt. (Alles deutet aber darauf hin, dass sie eher selten sind.) 24 Wenn wir dem Fermat-Test eine Carmichael-Zahl n als Eingabe geben, ist die Wahr- scheinlichkeit für die falsche Antwort 0 genau Y ϕ(n) − 2 ϕ(n) 1 ≈ = 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 nicht, denn wenn etwa p0 n der kleinste Primfaktor von 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 Für einen zuverlässigen, ezienten Primzahltest, der für alle Eingabezahlen funktioniert, 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 5.31. Wenn n eine Carmichael-Zahl ist, dann ist Beweis : Wir beweisen die Kontraposition: Wenn p und einen Exponenten `≥2 Dazu genügt es, eine Zahl ist, dann ist a ∈ Z∗n n n = p` n keine Primzahlpotenz. für eine ungerade Primzahl keine Carmichael-Zahl. 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 25 (mod n). (7) (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 Damit folgt aus (7), dass a 6≡ 1 (mod n) ist, also an−1 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.) 5.3.3 Nichttriviale Quadratwurzeln der 1 Aus Abschnitt 5.2, Lemma 5.20, wissen wir, dass für jede Primzahl p gilt: 2 b mod p = 1 ⇔ b ∈ {1, p − 1}. Diese 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 5.16 (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. 5.3.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 26 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 3: Potenzen man sie als n−1 gilt a ≡ F-Z.? an−1 mod n mit Zwischenschritten, n = 325 n − 1 = u · 2k schreiben, für eine ungerade Zahl u und ein k ≥ 1. Dann k ((au ) mod n)2 mod n, und wir können an−1 mod n mit k + 1 Zwischen- schritten 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 3 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) 81 und 49 ≡ −1 (mod 325) gilt. Auch die Berechnung der Potenzen von 126 liefert 81 keine nichttriviale Quadratwurzel der 1, weil 126 mod 325 = 1 gilt. Wie kann die Folge sind bi+1 , . . . , bk b0 , . . . , b k alle gleich 1. Daher beginnt die Folge leeren) Folge von Elementen bi = 1 or bi = n − 1, dann b0 , . . . , bk mit einer (eventuell überhaupt aussehen? Wenn ∈ / {1, n − 1} 27 und endet mit einer (eventuell leeren) 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 4: Potenzen an−1 mod n F-Z.? A-Z.? 3 × × ∗ 3 × × 1 1 4a × ∗ 1 4b × berechnet mit Zwischenschritten, mögliche Fälle. 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 4 angegeben. Dabei steht ∗ für ein Element ∈ / {1, n − 1}. Es ergeben sich 4 Fälle, mit einigen Unterfällen: b0 = 1. Alle bi sind gleich 1. Fall 2a: b0 = n − 1. Alle bi mit 0 < i ≤ k sind gleich 1. Fall 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. Fall 4: 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.) Fall 1: 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: 28 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 5.32. n ≥ 3 ungerade. Wir schreiben n − 1 = u · 2k , für u ungerade, k ≥ 1. Eine Zahl a, 1 ≤ a < n, heiÿt ein A-Zeuge für n, wenn au mod n 6= 1 u·2i und a 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 Menge der A-Lügner heiÿt LA n. Sei Aus der obigen Diskussion der möglichen Fälle folgert man leicht folgende Beobachtungen. Lemma 5.33. (a) Wenn a Sei n≥3 ungerade. ein F-Zeuge für n (b) Wenn es einen A-Zeugen Beweis : Sei (a) Wenn a 1≤a<n und sei ein F-Zeuge für a auch (b0 , . . . , bk ) n a ist, dann ist für n b0 , . . . , b k a auch ein A-Zeuge. gibt, dann ist 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 Fall 3 oder Fall 4 zu. Wir haben oben schon gesehen, dass n ein A-Zeuge für n. 4b ein. Damit ist auf die Folge dann (b) Sei i au·2 mod n, 0 ≤ i ≤ k . wähltes eine zusammengesetzte Zahl sein muss. Der Miller-Rabin-Test besteht nun einfach darin, ein aus a darauf zu testen, ob a Dann trit {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 29 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 n−1 oder 1 vorge- ist A-Zeuge, Ausgabe 1). In Pseudocode sieht das Verfahren dann folgendermaÿen aus: Algorithmus 5.8 (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 58 wird höchstens 30 k -mal durchlaufen; oenbar ist k ≤ log n. 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 5.34. Wenn die Eingabe n für den Miller-Rabin-Test eine Primzahl ist, dann wird 0 ausgegeben. Beweis : Wir haben oben schon festgestellt, dass Ausgabe die zufällig gewählte Zahl A-Zeugen, wenn n a 1 genau dann erfolgt, wenn ein A-Zeuge ist. Nach Lemma 5.33(b) gibt es nur dann zusammengesetzt ist. 5.3.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 bei wünschte) Antwort 0 gibt, kleiner als 2 der Analyse des Fermat-Tests für Nicht-Carmichael-Zahlen (Beweis von Satz 5.29). n eine echte Untergruppe von Z∗ n 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 BnA von Z∗n nden, die alle A-Lügner enthält. Dort haben wir gezeigt, dass die F-Lügner für solche Wenn n keine Carmichael-Zahl ist, ist dies leicht. Lemma 5.35. Sei n≥3 zusammengesetzt. Dann gilt F LA n ⊆ Ln . Beweis : Dies ist nur eine andere Formulierung von Lemma 5.33(a). Wenn nun n keine Carmichael-Zahl ist, schlieÿen wir genau wie im Beweis von 1 Satz 5.29, 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. 31 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 5: Sicht auf Wir denieren eine Menge BnA . Weil u BnA a a ··· als Teilmenge von a 1 Z∗n 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} }. (8) Zur Veranschaulichung betrachte man Abb. 5. In der dort angegebenen Matrix entspricht jede Zeile einem der ϕ(n) Elemente von Z∗n , beginnend mit a1 = 1 und a erzeugte Folge b0 , . . . , bk einge- a2 = −1 ≡ n − 1. In der Zeile für a ist die von tragen. 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 32 −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. i0 ist die am weitesten rechts stehende Spalte, in der es einen Eintrag Lemma 5.36. (a) A LA n ⊆ Bn . (b) BnA (c) Z∗n − BnA 6= ∅. ist Untergruppe von Z∗n . Beweis : (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. u u·2i0 Fall 1: a mod n = 1. Dann ist auch a mod n = 1, und daher gilt a ∈ BnA . (Die Zeile zu a in Abb. 5 sieht aus wie die von a1 = 1.) u·2i Fall 2: a 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 5.28: (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. (c) Wir benutzen die in Lemma 5.31 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 5.16) benutzen. 33 Bei der nun folgenden Konstruktion geht es anschaulich um folgendes: Wir haben i u·2i0 einige a (z. B. a = 1) mit a mod n = 1 und einige a (z. B. a = a# ) mit au·2 0 ≡ −1 i (mod n). Wir wollen zeigen, dass es unmöglich ist, dass au·2 0 mod n ∈ {1, n − 1} für a ∈ Z∗n ∈ / {1, n − 1} enthalten muss. Dazu basteln wir aus 1 und a# ein Gegenbeispiel a. Diese Zahl a soll sich modulo n1 wie 1 verhalten, modulo n2 wie a# . Die u · 2i0 -te Potenz modulo n einer solchen Zahl a kann weder 1 noch −1 sein. alle gilt, dass also Spalte i0 auch einen Eintrag 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 5.16) gibt es eine eindeutig a≡1 erfüllt. Wir zeigen, dass Beh. 1: (mod n1 ) a in A Z∗ n − Bn a ≡ x2 und (mod n2 ) (9) liegt. a ∈ Z∗n . n−1 n−1 Bew.: Wir wissen, dass a mod n1 = 1n−1 mod n1 = 1 und an−1 mod n2 = a# mod n−1 n2 = ((a# ) mod n) mod n2 = 1 mod n2 = 1 gilt. Wegen der Eindeutigkeitsaussage n−1 n−1 −1 durch a mod n = 1. Das heiÿt, dass a = 1 sein, also a ∈ Z∗n . im Chinesischen Restsatz folgt daraus n teilbar ist. Daher muss ggt(n, a) Beh. 2: au·2i0 mod n 6= 1. u·2i0 Bew.: Indirekt. Annahme: a mod n = i n2 Teiler von au·2 0 − 1. Andererseits ist i i i 1. Dann ist n Teiler von au·2 0 − 1, also auch i 0 0 au·2 0 mod n2 = au·2 mod n2 = ((au·2 ) mod n) mod n2 = (n − 1) mod n2 . # # Also ist n2 Teiler von Teiler von 2 i au·2 0 − (n − 1), also Teiler von i au·2 0 + 1. Daraus folgt, dass n2 ist, ein Widerspruch. Beh. 3: au·2i0 mod n 6= n − 1.i u·2 0 Bew.: Indirekt. Annahme: a mod n = n − 1. Dann ist i u·2 0 auch n1 Teiler von a + 1. Andererseits ist n Teiler von i au·2 0 + 1, also i 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 5.36(c) vollständig. Beispiel 5.37. Wir betrachten die Zahl nicht so wichtig, dass n n = 325 = 13 · 25. (Für dieses Beispiel ist es keine Carmichael-Zahl ist.) In Tabelle 3 bemerken wir, dass 34 32162 mod 325 = 324 erfüllt (was −1 entspricht). Die a mit a mod 13 = 32 mod 13 = 6 und a mod 25 = 1 ist der A-Lügner 32 die Gleichung eindeutig bestimmte Zahl a = 201. Aus der Tabelle lesen wir ab, dass tatsächlich 201162 mod 325 = 51 ∈ / {1, 324}, und 201324 mod 325 = 1 51 ≡ 1 (mod 25) und 51 ≡ −1 (mod 13) gilt!) Insbesondere A ∗ Element von Z325 gefunden, das nicht in B325 liegt. gilt. (Man beachte, dass haben wir mit 201 ein 1 für die Irrtumswahrscheinlichkeit im Miller-Rabin2 Algorithmus bewiesen. Eine etwas kompliziertere Analyse zeigt, dass sogar die Feh1 lerschranke gilt; man kann auch zeigen, dass es zusammengesetzte Zahlen n gibt 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 5.7, 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 5.9 (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 5.38. Algorithmus 5.9 benötigt 2 auf zahlen, die kleiner als n sind, und O(` · Primzahl ist, ist die Ausgabe keit, dass 0 0, wenn n O(` · log n) arithmetische Operationen (log n)3 ) Bitoperationen. Wenn n eine zusammengesetzt ist, ist die Wahrscheinlich−` ausgegeben wird, kleiner als 4 . 35 5.4 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.) Können wir damit rechnen, so eine Primzahl leicht zu nden? Wir wissen natürlich, dass es unendlich viele Primzahlen gibt. Aber gibt es genügend viele so groÿe Primzahlen? Der Primzahlsatz, der in der Zahlentheorie bewiesen wird, sagt, dass dies so ist. Mit π(x) bezeichnen wir die Anzahl der Primzahlen, die nicht gröÿer als Satz 5.39 (Primzahlsatz). lim x→∞ x ist. π(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 1 2µ−1 / ln(2µ−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 5.40 (Ungleichung von Finsler). (m, 2m] mindestens m/(3 ln(2m)) Für jede ganze Zahl Primzahlen : π(2m) − π(m) ≥ Beispiele: 36 m . 3 ln(2m) m≥2 liegen im Intervall 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. Ein naheliegender Ansatz zur Erzeugung einer zufälligen Primzahl in folgender: Man wählt wiederholt eine (ungerade) Zahl aus [m, 2m) ist nun [m, 2m) zufällig und wendet auf sie den Miller-Rabin-Test an. Dies wiederholt man, bis eine Zahl gefunden wurde, die die Ausgabe 1 liefert. Algorithmus 5.10 (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 5.9 ∗) 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 5.38), 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ä- 4 cheres Ergebnis bekommen. Wir denieren: Satz 5.41. Primm := {p ∈ [m, 2m) | p ist Primzahl}. Bei der Anwendung von Algorithmus 5.10 auf eine gerade Zahl (a) Für jedes p ∈ Primm m gilt : gilt : Pr(GetPrime(m, `) = p | GetPrime(m, `) ∈ Primm ) = 4 Tatsächlich ist die Fehlerwahrscheinlichkeit durch 1/4` 1 . |Primm | 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. 37 [m, 2m) In Worten : Jede Primzahl in 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 2 3 arithmetische Operationen und O((log n) ) Bitoperationen. ≤ (c) Die erwartete Rundenzahl ist 2 O((log n) ) 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) hat 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 und erkannt 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 ∧ i−1 · 1 4` m/2 1 · ` |Primm | 4 3 ln(2m) ≤ . 2 · 4` = 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 5.40). (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 38 (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). 39 A Beweise und Bemerkungen für Abschnitt 5.1 Bemerkung A.1 (zu Fakt 5.2). Zm Wenn man es genau nimmt, sind die Elemente von nicht Zahlen, sondern Äquivalenzklassen [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. 5.4). Die Operationen [4] + [7] = [11] = [0] ist, also sind [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. werden auf den Repräsentanten ausgeführt, zum Beispiel gilt in Es ist bequem, die eckigen Klammern wegzulassen und für [i] Z11 , einfach dass 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]. D = {xm + yn | x, y ∈ Z}. Weil m + n > 0 eine Zahl in D ist, hat D ein kleinstes positives Element c. Wir wollen zeigen, dass c = 1 ist. Dazu wählen wir x, y so, dass c = xm + yn gilt und schreiben n = qc + r mit 0 ≤ r < c. Dann ist Beweis von Lemma 5.8: (a) Betrachte die Menge 2 2 r = n − qc = n − qxm − qyn = (−qx)m + (1 − qy)n, r ∈ D. Nach Wahl von c kann aber r nicht positiv sein, also Daraus folgt n = qc, also ist n durch c teilbar. Ganz genauso sieht man, durch c teilbar ist. Weil m und n teilerfremd sind, muss c = 1 sein. also ist folgt dass r = 0. auch m 0 0 0 (b) Es sei d = ggt(m, n). Wir denieren m = m/d und n = n/d. Natürlich sind m 0 und n teilerfremd (sonst wäre d nicht der gröÿte gemeinsame Teiler von m und n). 0 0 0 0 Nach Teil (a) gibt es x, y mit xm +yn = 1. Daraus folgt xm+ym = xm d+yn d = d. Beweis von Lemma 5.10: ⇒: Es sei ab mod m = 1. Das heiÿt: Es gibt ein 40 q∈Z mit ab − qm = 1. Wenn nun d>0 eine Zahl d = 1. Also sind a als auch m m teilerfremd. sowohl a und teilt, dann teilt d auch ab − qm = 1, also ist ⇐: a und m seien teilerfremd. Nach Lemma 5.8(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 Beweis von Fakt 5.12: Natürlich ist die in Zm und in Z∗m . a. 1 das neutrale Element der Multiplikation Wir bemerken zuerst, dass unter Multiplikation modulo a 1 = xa + ym = zc + um schreiben, und erhält daraus zu m Z∗m abgeschlossen ist: Seien und c m teilerfremd. Nach Lemma 5.8(a) kann man 1 = (xa + ym)(zc + um) = (xz)(ac) + (xau + yzc + yum)m. ac und m teilerfremd sind. ∗ Nach Lemma 5.10 hat jedes Element von Zm ein multiplikatives Inverses b ∈ Zm . ∗ Weil natürlich a auch das Inverse von b ist, folgt nach Lemma 5.10 auch, dass b ∈ Zm ist. Wieder nach Lemma 5.8(a) folgt daraus, dass Beweis von Proposition 5.13: ⇒: 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 5.10 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.) Beweis von Proposition 5.22: (a) Nach dem kleinen Satz von Fermat (Fakt 5.14) gilt a ∈ Z∗p . ap−1 mod p = 1 für jedes Daraus: a(p−1)/2 mod p 2 mod p = 1 für jedes a(p−1)/2 mod p ∈ {1, −1} ⊆ Z∗p . A := {a ∈ Z∗ | a(p−1)/2 mod p = 1}. a ∈ Z∗p . Mit Lemma 5.20 folgt (b) Wir denieren QRp =A p ist. Die eine Inklusion ist leicht zu sehen: Unser Ziel ist zu zeigen, dass Beh. 1: QRp ⊆ A. (Wenn a ∈ QR(p), also a = b2 mod p für ein b, dann gilt (a(p−1)/2 mod p) mod p = ((b2 )(p−1)/2 mod p) mod p = bp−1 mod m = 1, 41 also ist a ∈ A, wieder nach dem kleinen Satz von Fermat.) Für die Umkehrung benutzen wir ein Kardinalitätsargument. Beh. 2: |QRp | = 12 (p − 1). Dies gilt, weil nach Lemma 5.21 jeder quadratische Rest genau zwei verschiedene Quadratwurzeln hat und natürlich jede der Z∗p p−1 Zahlen in Quadratwurzel ist. Beh. 3: |A| ≤ 21 (p − 1). 1 (p 2 − 1) 1 (Nach Fakt 5.19 (mit s = (p − 1)) gilt, dass höchstens 2 ∗ (p−1)/2 mod p = 1 erfüllen.) viele Elemente von Zp die Gleichung a Aus Beh. 1, 2 und 3 folgt sofort QRp = A, wie gewünscht. m und n Teiler von a sind, kann man a = um und a = vn schreiben, für ganze Zahlen u, v . Weil m und n teilerfremd sind, kann man nach dem Lemma von Bezout (Lemma 5.8) 1 = ggt(m, n) = xm + yn schreiben, für ganze Zahlen x, y . Dann ist Beweis von Fakt 5.15: Weil a = axm + ayn = vnxm + umyn = (vx + uy)mn, was zu zeigen war. B Quadratwurzeln modulo p, alternativer Algorith- mus Wir betrachten hier den Fall, dass p−1 durch 4 teilbar ist. Nach Prop. 5.24 ist das Problem des Quadratwurzelziehens für die anderen p leicht deterministisch zu lösen. Algorithmus B.1 (Quadratwurzeln, randomisiert). Input: Primzahl p mit p − 1 durch 4 teilbar; a ∈ {1, . . . , p − 1} Methode: (∗ 1 2 Finde repeat b := mit a(p−1)/2 mod p = 1. b ∈ Z∗p − QRp : ∗) Zufallszahl in {2, . . . , p − 2} 3 until b(p−1)/2 mod p = p − 1; 4 Schreibe 5 (∗ s := 0; for i from 1 6 1 (p − 1) = u · 2k , u ungerade, k ≥ 1; 2 u·2k−i Berechne s0 , . . . , sk gerade mit a · bsi mod to k do 42 p = 1: ∗) if au·2k−i · bs/2 mod p = 1 then s := s/2 else s := s/2 + (p − 1)/2; return a(u+1)/2 · bs/2 mod p. 7 8 9 10 Erklärung, Korrektheitsbeweis, Zeitanalyse: Wir setzen voraus, dass ein vorab durchgeführter Quadratzahltest (Algorithmus 5.4) ergeben hat, dass a(p−1)/2 mod p = 1 ist und daher a in Zp (10) eine Quadratwurzel besitzt. In Zeilen 13 wird mit randomi- ∗ sierter Suche eine Zahl b ∈ Zp gesucht, die kein quadratischer Rest ist. Weil (p − 1)/2 (p−1)/2 gerade ist, ist (−1) mod p = 1, also −1 ein quadratischer Rest; wir müssen und p − 1 gar nicht testen. Unter den p − 3 Zahlen in {2, . . . , p − 2} sind 1 (p − 1) viele Nichtquadrate; das ist mehr als die Hälfte, also wird nach ei2 ner erwarteten Rundenzahl von < 2 ein passendes b gefunden. (Da der Rest des also 1 genau Algorithmus deterministisch ist, handelt es sich insgesamt um einen lupenreinen LasVegas-Algorithmus.) Bemerkung: In Kapitel 4.1 haben wir ein randomisiertes Suchverfahren betrachtet, A mit einer nichtleeren Teilmenge B , die nur indirekt, durch einen Test ist x ∈ B ? gegeben ist, ein Element von B sucht. ∗ Man beachte, dass das in Zeilen 13 gelöste Problem, ein Element der Menge Z − QR das in einer Menge p p zu nden, genau dieser Aufgabenstellung entspricht: - A ist Z∗p ; - B ist Z∗p − QRp ; - der Test ist b ∈ Z∗p −QRp ? wird in Zeile 3 durchgeführt (Eulersches Kriterium). ∗ 1 in Zp . Man beachte, dass tatsächlich, 2 ∗ wie in Kapitel 4 abstrakt angenommen, keine explizite Darstellung von Zp − QRp Die Menge G hat Dichte etwas gröÿer als bekannt ist. Zu Zeile 4: Weil wie angegeben. s0 , s1 , . . . , sk p − 1 durch 4 teilbar ist, ist 12 (p − 1) gerade, hat also eine Darstellung Startend in Zeile 5 berechnen wir in der Variablen s eine Folge mit folgender Eigenschaft: k−i au·2 · bsi mod p = 1 43 und si ist gerade . (11) Die Eigenschaft (11) beweisen wir durch Induktion über die Schleifendurchläufe i= 0, 1, . . . , k . k i = 0: s0 = 0 ist gerade und au·2 · b0 mod p = a(p−1)/2 mod p = 1, wegen (10). 0 ≤ i < k , i → i + 1: Nach Induktionsvoraussetzung gilt (11) für i. Wir betrachten Schleifendurchlauf i + 1. In Zeile 7 wird berechnet: f := au·2 Die Zahl f k−(i+1) · bsi /2 mod p. k−i 1, denn f 2 mod p = au·2 · bsi mod p = 1 f ∈ {1, −1}. Diese beiden Fälle werden in Zeilen 79 ist eine Quadratwurzel von (nach (11) für i). Daher gilt betrachtet. 1. Fall: f = 1. Dann wird si+1 = si /2, und au·2k−(i+1) · bsi+1 mod p = f = 1. 2. Fall: f = −1. Dann wird si+1 = si /2 + (p − 1)/2, und au·2 k−(i+1) · bsi+1 mod p = f · b(p−1)/2 mod p = (−1) · (−1) mod p = 1. (Wir benutzen hier, dass b kein quadratischer Rest ist, also Es fehlt nur noch der Nachweis, dass si+1 b(p−1)/2 mod p = −1 gerade ist. Annahme: si+1 ist.) ungerade. Dann gilt: k−(i+1) au·2 · bsi+1 mod p = 1. u·2k−(i+1) Dabei ist die rechte Seite (die Zahl 1) ein quadratischer Rest, ebenso wie a mod si+1 mod p hingegen ist als ungerade Potenz von b ∈ / QRp nicht in QRp . p. Der Faktor b Dies ist ein Widerspruch zu Korollar 5.23. In Zeile 10 des Algorithmus wird die Zahl t = a(u+1)/2 · bsk /2 mod p als Ergebnis ausgegeben. Wir berechnen: t2 mod p = au+1 · bsk mod p = a · (au · bsk ) mod p = a, wobei wir (11) (für Laufzeit: i = k) angewendet haben. Daher ist t eine Quadratwurzel von a. log p Runden durchgeführt; in jeder Runde ist eine schnelle Exponentiation mit O(log p) Multiplikationen modulo p durchzuführen. Die 2 Anzahl der Multiplikationen und Divisionen ist also O((log p) ), die Anzahl der Bit4 operationen O((log p) ). Es werden maximal 44