Diplomarbeit Faktorisierungsalgorithmen natürlicher Zahlen Universität Hamburg Fakultät für Mathematik, Informatik und Naturwissenschaften Department Informatik Peter Hartmann ([email protected]) 27. September 2007 Betreuer: Prof. Dr. Manfred Kudlek Zusammenfassung Diese Arbeit beschäftigt sich mit der Zerlegung natürlicher Zahlen in ihre Primfaktoren und soll einen aktuellen Überblick zu diesem umfangreichen Thema geben. Es wird vom allgemeinen Fall ausgegangen, dass keine weiteren Informationen zu den Zahlen, die faktorisiert werden sollen, vorliegen, so dass auf bestimmte Strukturen angepasste Algorithmen nicht weiter eingegangen wird. Zu den jeweils vorgestellten Algorithmen werden Beispiele angegeben, um die Funktionsweise der Algorithmen verständlicher darzustellen und damit ist diese Arbeit auch eine praktische Einführung in das Gebiet der Faktorisierung natürlicher Zahlen. Inhaltsverzeichnis 1 Einführung 1.1 1.2 1.3 Faktorisierung von natürlichen Zahlen . . . . . Anwendungen . . . . . . . . . . . . . . . . . . . 1.2.1 RSA . . . . . . . . . . . . . . . . . . . . 1.2.1.1 Der Algorithmus . . . . . . . . 1.2.1.2 RSA Factoring Challenge . . . 1.2.1.3 RSA Hardware . . . . . . . . . 1.2.2 Blum-Blum-Shub-Zufallszahlengenerator Anwendung in der Zahlentheorie . . . . . . . . 2 Mathematische Grundlagen 2.1 2.2 2.3 2.4 2.5 Zahlentheorie . . . . . . . . . . . . . . . . . . 2.1.1 Natürliche Zahlen . . . . . . . . . . . 2.1.2 Primzahlen . . . . . . . . . . . . . . . 2.1.3 Hauptsatz der Zahlentheorie . . . . . 2.1.4 Der gröÿte gemeinsame Teiler . . . . . 2.1.5 Euklidischer Algorithmus . . . . . . . 2.1.6 Der kleine Satz von Fermat . . . . . . 2.1.7 Die Eulersche φ-Funktion . . . . . . . 2.1.8 Satz von Dirichlet . . . . . . . . . . . 2.1.9 Quadratische Reste . . . . . . . . . . . 2.1.10 Legendre Symbol . . . . . . . . . . . . 2.1.11 Das Quadratische Reziprozitätsgesetz 2.1.12 Legendre Kongruenz . . . . . . . . . . Gruppen . . . . . . . . . . . . . . . . . . . . . Körper . . . . . . . . . . . . . . . . . . . . . . Ringe . . . . . . . . . . . . . . . . . . . . . . Kongruenzen . . . . . . . . . . . . . . . . . . 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 5 7 7 8 10 10 11 14 15 15 15 15 17 17 17 20 20 21 21 21 22 22 22 24 24 24 2.6 2.7 2.8 2.9 Komplexität . . . . . . . . . . . . . . . . . Schnelle Exponentiation . . . . . . . . . . Elliptische Kurven über Zp . . . . . . . . 2.8.1 Der Körper Zp . . . . . . . . . . . 2.8.2 Elliptische Kurven . . . . . . . . . 2.8.3 Elliptische Kurven als Gruppe . . 2.8.4 Projektive Koordinatendarstellung Der Einheitskreis über Zn . . . . . . . . . 3 Programme 3.1 3.2 3.3 Mathematica . . . . . . . Maxima . . . . . . . . . . Spezielle Programme . . . 3.3.1 Kettenbrüche . . . 3.3.2 Elliptische Kurven 3.3.3 Quadratisches Sieb 3.3.4 Zahlkörpersieb . . . . . . . . . 4 Algorithmen 4.1 4.2 4.3 4.4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Allgemeine Überlegungen . . . . . . . . . . . . . 4.1.1 Faktorisierung von Mersenne Zahlen . . . Primzahltest . . . . . . . . . . . . . . . . . . . . 4.2.1 Miller Rabin Test . . . . . . . . . . . . . . 4.2.2 Der Primzahltest von Agrawal, Kayal und Klassische Algorithmen . . . . . . . . . . . . . . 4.3.1 Probedivision . . . . . . . . . . . . . . . . 4.3.2 Sieb des Eratosthenes . . . . . . . . . . . 4.3.3 Euklid . . . . . . . . . . . . . . . . . . . . 4.3.4 Fermat . . . . . . . . . . . . . . . . . . . 4.3.5 Kraïtchik . . . . . . . . . . . . . . . . . . 4.3.6 Lehman . . . . . . . . . . . . . . . . . . . 4.3.7 Gauss . . . . . . . . . . . . . . . . . . . . Schnelle Algorithmen für groÿe Zahlen . . . . . . 4.4.1 Pollard Algorithmen . . . . . . . . . . . . 4.4.1.1 Pollard Rho Algorithmus . . . . 4.4.1.2 Pollard p − 1 Algorithmus . . . . 4.4.1.3 Williams p + 1 Algorithmus . . . 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Saxena . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 25 26 26 27 29 31 33 36 36 37 37 38 38 38 38 39 39 41 42 43 45 46 46 47 50 52 54 55 60 64 64 64 68 71 4.5 4.4.1.4 Einheitskreise . . . . . . . . . . . 4.4.2 Kettenbrüche . . . . . . . . . . . . . . . . . 4.4.2.1 Shanks (SQUFOF) . . . . . . . . . 4.4.2.2 Morrison und Brillhart (CFRAC) 4.4.3 Elliptische Kurven (ECM) . . . . . . . . . . 4.4.4 Quadratisches Sieb (QS) . . . . . . . . . . . 4.4.4.1 Dixon . . . . . . . . . . . . . . . . 4.4.4.2 Pommerance . . . . . . . . . . . . 4.4.4.3 Weitere Änderungen . . . . . . . . 4.4.5 Zahlkörpersieb (NFS) . . . . . . . . . . . . Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 73 73 75 76 81 81 85 91 92 93 5 Ausblick 95 A Inhalt der CD 98 5.1 Der Shor Algorithmus . . . . . . . . . . . . . . . . . . . . . B Liste der ersten tausend Primzahlen 5 96 100 Kapitel 1 Einführung In diesem Kapitel wird das Problem der Faktorisierung natürlicher Zahlen beschrieben und die Motivation, sich damit zu beschäftigen, aufgezeigt. 1.1 Faktorisierung von natürlichen Zahlen Zwei beliebige natürliche Zahlen miteinander zu multiplizieren, ist einfach und lässt sich auch bei groÿen Zahlen relativ schnell durchführen. Sind beispielsweise die beiden Zahlen 107 und 21 als Faktoren gegeben, so ist es recht einfach das Produkt zu ermitteln. 107 · 23 = 2461 Mit etwas Übung kann man dies ohne Hilfsmittel einfach im Kopf ausrechnen. Stellt man hier die umgekehrte Frage, also in welche Faktoren kann man eine gegebene natürliche Zahl zerlegen, dann ist diese Frage sehr einfach formuliert; allerdings ist die Antwort nicht mehr so einfach wie bei der Multiplikation. Vorausgesetzt man hätte nicht gerade die Multiplikation von 107 und 23 durchgeführt, dann ist die Frage nach den Faktoren der Zahl 2461 nicht einfach zu beantworten. Bei groÿen Zahlen ist die Zerlegung einer Zahl in ihre Primfaktoren selbst mit Hilfe von Computern nicht schnell durchzuführen. Das Problem der Faktorisierung natürlicher Zahlen ist eines der ältesten Probleme der Mathematik. Bereits Euklid von Alexandria hat sich in seinem Werk Die Elemente (siehe [Euklid 03, Buch XIII und IX]) vor ungefähr 2300 Jahren mit den zusammengesetzten Zahlen, deren Faktoren und 7 Primzahlen beschäftigt. In diesem Zusammenhang lassen sich weitere bedeutende Mathematiker (siehe [Robertson 07]) nennen, die sich auf diesem Gebiet und insbesondere mit der Zerlegung einer Zahl in ihre Primfaktoren beschäftigt haben. Eratosthenes von Kyrene (276 - 194 v. Chr.) Leonardo Pisano Fibonacci (1170 - 1250) Pierre de Fermat (1601 - 1665) Leonhard Euler (1707 - 1783) Adrien-Marie Legendre (1752 - 1833) Johann Carl Friedrich Gauss (1777 - 1855) Von Carl Friedrich Gauss stammt folgendes Zitat, welches auch heute noch den Wissensstand zum Problem der Faktorisierung natürlicher Zahlen gut beschreibt. Dass die Aufgabe, die Primzahlen von den zusammengesetzten zu unterscheiden und letztere in ihre Primfaktoren zu zerlegen, zu den wichtigsten und nützlichsten der gesamten Arithmetik gehört und die Bemühungen und den Scharfsinn sowohl der alten wie auch der neuen Geometer in Anspruch genommen hat, ist so bekannt, dass es überüssig wäre, hierüber viele Worte zu verlieren. Trotzdem muÿ man gestehen, daÿ alle bisher angewendeten Methoden entweder auf spezielle Fälle beschränkt oder so mühsam und weitläug sind, daÿ sie auf gröÿere Zahlen meistenteils kaum angewendet werden können. Auÿerdem aber dürfte es die Würde der Wissenschaft erheischen, alle Hilfsmittel zur Lösung jenes berühmten Problem eiÿig zu vervollkommnen. Disquisitiones Arithmeticae, Gerh. Fleischer, Leipzig 1801 Aktuell ist das öentliche Interesse an sicheren kryptograschen Verfahren sehr groÿ, und eines der bekanntesten und im Bereich der Public Key Algorithmen das am meisten eingesetzte Verfahren ist der so genannte RSA 8 Algorithmus (siehe Kapitel 1.2.1), dessen Sicherheit eben auf dem Problem der Faktorisierung groÿer Zahlen beruht. Abschlieÿend sei hier nochmals das Problem bzw. die Frage genannt, mit der sich diese Arbeit beschäftigt. Gegeben sei eine natürliche Zahl n, gesucht ist für diese Zahl ein nichttrivialer1 Faktor m. Wichtige Einzelheiten zu den mathematischen Grundlagen nden sich in Kapitel 2. 1.2 Anwendungen In diesem Abschnitt werden zwei Anwendungen beschrieben, die direkt mit dem Faktorisierungsproblem von Zahlen zu tun haben. 1.2.1 RSA Der RSA Algorithmus wurde 1977 in [Gardner 77] und 1978 in [RSA 78] vorgestellt und ist nach den Anfangsbuchstaben der Nachnamen seiner Ernder, Ron Rivest, Adi Shamir und Leonard Adleman, benannt. RSA wird sowohl für die Verschlüsselung von Daten als auch für die Authentizierung eingesetzt und ist ein so genannter Public Key Algorithmus. Das bedeutet, dass für die Ver- und Entschlüsselung verschiedene Schlüssel benutzt werden. Der Schlüssel zum Verschlüsseln kann veröentlicht werden, so dass jeder damit Daten verschlüsseln kann. Jedoch können die Daten nur mit dem geheimen Schlüssel wieder entschlüsselt werden. Dies ist besonders praktisch, wenn mehrere Personen beteiligt sind. Die Sicherheit des Verfahrens beruht auf dem Problem der Faktorisierung groÿer Zahlen. Sollte ein Verfahren gefunden werden, dass groÿe Zahlen in kurzer Zeit in ihre Primfaktoren zerlegen kann, dann wäre ein Einsatz von RSA nicht mehr sicher. 1 Triviale Faktoren einer Zahl n sind die Zahl 9 1 und n selbst, da n=1·n ist. 1.2.1.1 Der Algorithmus Für den öentlichen Schlüssel werden zufällig zwei groÿe Primzahlen p1 und p2 gewählt und das Produkt gebildet: kp1 = p1 · p2 . Weiterhin wählt man eine Zahl kp2 , welche relativ prim zu (p1 − 1)(p2 − 1) ist. kp1 und kp2 bilden dann den öentlichen Schlüssel. Der private Schlüssel s zum Entschlüsseln wird dann mit Hilfe des erweiterten Euklidischen Algorithmus berechnet, so dass: s · kp2 ≡ 1 mod ((p1 − 1)(p2 − 1)) gilt. Der Schlüssel s ist dann also: −1 s = kp2 mod ((p1 − 1)(p2 − 1)). Die Verschlüsselung der Daten d wird dann mit v = dkp2 mod kp1 und die Entschlüsselung mit d = v s mod kp1 berechnet. Das soll an einem kleinen Beispiel gezeigt werden. Verschlüsselt werden soll der Satz: Das ist ein geheimer Satz. . Um das Beispiel einfach zu gestalten, werden alle Wörter klein geschrieben und Leer- und Satzzeichen nicht benutzt. Weiterhin werden die Buchstaben wie folgt kodiert. a = 01 g = 07 m = 13 s = 19 y = 25 b = 02 h = 08 n = 14 t = 20 z = 26 c = 03 i = 09 o = 15 u = 21 d = 04 j = 10 p = 16 v = 22 e = 05 k = 11 q = 17 w = 23 f = 06 l = 12 r = 18 x = 24 10 Gewählt wurden hier Zahlen aus dem Dezimalsystem, damit die Berechnungsschritte sich einfacher nachvollziehen lassen. Aus dem gleichen Grund werden hier zweistellige Zahlen mit führenden Nullen benutzt. Damit ergibt sich für das Beispiel, dass aus dem Satz: dasisteingeheimersatz die Ziernfolge: 040 119 091 920 050 914 070 508 050 913 051 819 012 026 wird. Für den öentlichen Schlüssel kp1 werden die beiden Primzahlen p1 = 31 und p2 = 47 gewählt. kp1 = p1 · p2 = 31 · 37 = 1147 Auch diese Zahlen sind für das Beispiel angepasst. Für eine tatsächliche Verschlüsselung werden weitaus gröÿere Zahlen benutzt (siehe [Lenstra 01] und [Lenstra 03]). Relativ prim zu (31−1)(37−1) = 1080 wird dann zufällig kp2 = 353 gewählt. Der Schlüssel s wird dann mit dem erweiterten Euklidischen Algorithmus so berechnet, dass: s · 353 ≡ 1 mod 1080 gilt. Damit ist der Schlüssel s = 257. Die Daten werden dann blockweise, k wie bereits oben dargestellt, zur Verschlüsselung mit vi = di p2 mod kp1 verwendet. v01 = 040353 mod 1147 = 028 v02 = 119353 mod 1147 = 874 v03 = 091353 mod 1147 = 116 v04 = 920353 mod 1147 = 668 v05 = 050353 mod 1147 = 133 v06 = 914353 mod 1147 = 306 v07 = 070353 mod 1147 = 016 v08 = 508353 mod 1147 = 270 v09 = 050353 mod 1147 = 133 v10 = 913353 mod 1147 = 855 11 v11 = 051353 mod 1147 = 732 v12 = 819353 mod 1147 = 923 v13 = 012353 mod 1147 = 921 v14 = 026353 mod 1147 = 750 Damit lautet die verschlüsselte Ziernfolge: 028 874 116 668 133 306 016 270 133 855 732 923 921 750. Die Entschlüsselung wird mit di = vis mod kp1 berechnet. d01 = 028257 mod 1147 = 040 d02 = 874257 mod 1147 = 119 d03 = 116257 mod 1147 = 091 .. . d13 = 921257 mod 1147 = 012 d14 = 750257 mod 1147 = 026 1.2.1.2 RSA Factoring Challenge Im März 1991 wurde von RSA Security (heute RSA Laboratories) die RSA Factoring Challenge (siehe [RSA 07]) ins Leben gerufen. Hierbei ging es darum, RSA Zahlen, also Zahlen, die das Produkt zweier groÿer Primzahlen sind, in ihre Primfaktoren zu zerlegen. Für das Faktorisieren dieser Zahlen gab es in Abhängigkeit von der Gröÿe der Zahlen Preisgelder, insgesamt 635000 USD. Motivation für diesen Wettbewerb war, dass Mathematiker und Informatiker sich intensiv mit diesem Problem auseinandersetzen und damit die Sicherheit des RSA Algorithmus aufzeigen. Der Wettbewerb wurde in diesem Jahr eingestellt. 1.2.1.3 RSA Hardware Natürlich gibt es wegen der Bedeutung des RSA Algorithmus viele verschiedene Hardwareimplementierungen. Hardware zum Ver- und Entschlüsseln 12 (siehe [Schneier 96, S. 534]) sind innerhalb dieser Arbeit nicht weiter interessant. Interessant sind allerdings Implementationen, die dazu dienen, eine RSA Zahl in ihre beiden Primfaktoren zu zerlegen. Ältere Implementationen sind TWINKLE (siehe [Lenstra 00]) und TWIRL (siehe [Shamir 03]). In TWINKLE sind die Faktorisierungsalgorithmen Quadratisches Sieb (QS) (siehe Abschnitt 4.4.4) und das Zahlkörpersieb (NFS) (siehe Abschnitt 4.4.5) und in TWIRL nur noch das Zahlkörpersieb implementiert. In [Franke 05] wurde 2005 eine Implementation namens SHARK vorgestellt, die für 1024-Bit-Zahlen optimiert ist und das allgemeine Zahlkörpersieb (GNFS) verwendet. Für Hardwarekosten von ungefähr 160 Millionen USD könnte man damit innerhalb eines Jahres eine 1024-Bit RSA Zahl in ihre Faktoren zerlegen. Heute dürften diese Zeit- und Kostenabschätzungen günstiger aussehen. 1.2.2 Blum-Blum-Shub-Zufallszahlengenerator Einer der sichersten und einfachsten Pseudozufallszahlengeneratoren ist der Blum-Blum-Shub-Generator, oft auch als BBS-Generator oder quadratischer Restegenerator bezeichnet. Er wurde 1982 auf der Crypto 82 vorgestellt und 1986 in [Blum 86] veröentlicht und nach seinen Erndern Lenore Blum, Manuel Blum und Michael Shub benannt. Für den Algorithmus zur Erzeugung der Zufallszahlen werden zwei spezielle Primzahlen p1 und p2 mit folgenden Eigenschaften benötigt. p1 = 2p3 + 1, p3 = 2p4 + 1 und p4 sind Primzahlen. p2 = 2p5 + 1, p5 = 2p6 + 1 und p6 sind Primzahlen. Diese Forderungen ermöglicht das Erreichen der maximalen Periode des BBS-Generators in einer Länge von 2p4 p6 . Deterministische Zufallszahlengeneratoren wiederholen sich zwangsläug bei der Erzeugung von Zufallszahlen, und so ist eine möglichst lange Periode im kryptograschen Interesse, da ansonsten die Zufallszahlen leicht vorhersagbar werden. Der bei der Berechnung der Zufallszahlen eingesetzte Modulus m ist das Produkt der beiden Zahlen p1 und p2 . Zusätzlich wird eine Zahl s gewählt, die folgende Eigenschaften erfüllt. 13 s 6≡ 0 mod p1 s 6≡ 1 mod p1 s 6≡ (p1 − 1) mod p1 s 6≡ 0 mod p2 s 6≡ 1 mod p2 s 6≡ (p2 − 1) mod p2 Diese Forderungen dienen ebenfalls einer langen Periode. Einzelheiten dazu sind in [Blum 86, S. 376] zu nden. Der Startwert des Generators wird mit s0 = s2 mod m berechnet. Durch die fortgesetzte Berechnung der Rekurrenzgleichung si+1 = s2i mod m lassen sich die einzelnen Bits der Zufallszahlensequenz erzeugen, indem die niederwertigsten Bits der erzeugten si verwendet werden. Dies soll an einem Beispiel verdeutlicht werden. Die beiden Primzahlen p1 = 167 und p2 = 359 erfüllen die Forderungen, weil: p1 p2 167 = 2 · 83 + 1 83 = 2 · 41 + 1 = 359 = 2 · 179 + 1 179 = 2 · 89 + 1 = gilt und alle pi Primzahlen sind. Damit hat der Generator eine Periode mit der Länge von 2 · 41 · 89 = 7298. Der Modulus m ist 167 · 359 = 59953 und sei der Wert2 s = 301, dann ergeben sich folgende Berechnungsschritte. 2 301 ≡ 134 mod 167, 301 ≡ 301 mod 359 14 s0 s1 s2 s3 s4 s5 .. . = = = = = = 3012 306482 162532 70912 416672 199152 mod mod mod mod mod mod 59953 59953 59953 59953 59953 59953 = = = = = = 30648 16253 7091 41667 19915 18130 s7297 s7298 s7299 s7300 = = = = 352932 123212 60452 306482 mod mod mod mod 59953 59953 59953 59953 = = = = 12321 6045 30648 16253 Die Zufallszahlensequenz, aus den niederwertigsten Bits bestehend, lautet für die angegebenen Berechnungsschritte dieses Beispiels 011110 . . . 1101. Der BBS-Generator hat die Eigenschaft, dass die Bits der Sequenz weder nach links noch nach rechts vorhergesagt werden können. Diese Eigenschaft geht verloren, wenn mehrere Bits der si für die Zufallszahlensequenz benutzt werden. Um die Eigenschaft der Nichtvorhersagbarkeit der zu generierenden Bits zu behalten, gilt nach [Vazirani 84] als Grenze der möglichen zu benutzenden Bits log2 l, dabei ist l die Bitlänge der si . Eine weitere vorteilhafte Eigenschaft des Generators ist, dass man das i-te Bit berechnen kann, ohne die vorherigen i − 1 Bits berechnen zu müssen. Das bedeutet, dass man wahlfreien Zugri auf die einzelnen Bits der Zufallszahlensequenz hat. Dafür müssen aber die Werte für p1 und p2 bekannt sein. Die Berechnung erfolgt dann mit 2i mod ((p1 −1)(p2 −1)) si = s0 . Die Sicherheit dieses Verfahrens liegt, wie beim RSA-Algorithmus, in der Schwierigkeit der Faktorisierung von m. Ist das Primzahlprodukt groÿ genug, so ist die Zufallszahlensequenz nicht vorhersagbar, selbst wenn m veröentlicht wird. So kann jeder, der m kennt, mit dem Generator Zufallszahlen erzeugen und muss nur den Startwert s geheimhalten. Eine passende Anwendung für diesen Zufallszahlengenerator ist die Ver15 schlüsselung von Daten mittels Vernam's One-Time Pad (siehe [Rothe 05, S. 154]). 1.3 Anwendung in der Zahlentheorie Auch in der Zahlentheorie ist die Primfaktorzerlegung ein wichtiger Punkt. Ist die Primfaktorzerlegung bekannt, dann können beispielsweise die Eulersche φ-Funktion und Gruppen- und Elementordnungen schnell berechnet werden (siehe Abschnitte 2.1.7 und 2.2). 16 Kapitel 2 Mathematische Grundlagen In diesem Kapitel werden die mathematischen Grundlagen, die für das Verständnis dieser Arbeit notwendig sind, kurz vorgestellt. Soweit der Sto bekannt ist, kann er übersprungen werden. Weitere Einzelheiten können in Nachschlagewerken zum Beispiel in [Weisstein 99], [Bartsch 97] oder [Hilbert 89] und ausführlicher in Büchern zur Zahlentheorie wie [Hardy 68] oder [Bundschuh 98] nachgelesen werden. In [Riesel 94, S. 239] sind alle Grundlagen in sehr ausführlicher Form beschrieben. 2.1 2.1.1 Zahlentheorie Natürliche Zahlen Denition: Natürliche Zahlen sind die Zahlen der Menge N = {1, 2, 3, ...}. 2.1.2 Primzahlen Denition: Eine Zahl a teilt eine andere Zahl n, wenn es eine Zahl b gibt, so dass a · b = n und a, b, n ∈ N gilt. Denition: Primzahlen sind natürliche Zahlen p ≥ 2, die nur die beiden trivialen Teiler 1 und sich selbst besitzen. Denition: Zusammengesetzte Zahlen sind natürliche Zahlen n ≥ 2, die keine Primzahlen sind. 17 Die Menge der Primzahlen P beginnt demnach mit den Zahlen 2, 3, 5, 7, ... und diese Menge hat unendlich viele Elemente1 . Angenommen, dem wäre nicht so und die endliche Menge der Primzahlen wäre P = {p1 , p2 , . . . , pk }. Dann bildet man aus diesen Zahlen eine neue Zahl m = p1 · p2 · . . . · pk + 1. Diese Zahl m ist durch alle pi ∈ P nur mit Rest 1 teilbar. Das heiÿt, m ist entweder eine weitere Primzahl oder alle Primteiler von m sind weitere Primzahlen, so dass sich die Aussage der Endlichkeit der Menge P nicht mehr halten lässt. Natürlich gibt es auch unendlich viele zusammengesetzte Zahlen, was sich direkt aus den unendlich vielen Primzahlen ergibt, mit denen multiplikativ die zusammengesetzten Zahlen gebildet werden. Die Primzahlen werden mit steigenden Zahlen immer weniger; nden sich zwischen 0 und 100 noch 25 Primzahlen, so sind es zwischen 1000 und 1100 noch 16 und zwischen 10000 und 10100 nur 11 Primzahlen. Diese abnehmende Dichte der Primzahlen lässt sich leicht nachvollziehen, wenn man das Sieb des Eratosthenes (siehe Abschnitt 4.3.2) betrachtet. Eine naheliegende Frage ist natürlich, wie viele Primzahlen es überhaupt für die Verschlüsselung im derzeit häug benutzten Bereich von 512 Bit, also zwischen 2511 und 2512 − 1, gibt. Diese Frage lässt sich mit dem Primzahlsatz beantworten. Sei π(x) die Primzahlfunktion, die für eine reelle Zahl x die Anzahl der Primzahlen p ≤ x angibt, so lautet der Primzahlsatz: lim x→∞ π(x) x ln(x) = 1. Damit lässt sich näherungsweise berechnen, dass es in diesem Bereich: 2511 2512 − 1 − ≈ 1, 88531 · 10151 512 511 ln(2 − 1) ln(2 ) Primzahlen gibt. Diese Zahl zeigt deutlich, dass hier genug Primzahlen vorliegen. Denition: Zwei natürliche Zahlen u und v sind relativ prim, wenn sie keine gemeinsamen Teiler besitzen, anders ausgedrückt, wenn u und v teilerfremd sind, also2 ggT (u, v) = 1. 1 siehe auch http://www.beweise.mathematic.de 2 ggT (u, v) = gröÿter gemeinsamer Teiler der beiden Zahlen 18 u und v 2.1.3 Hauptsatz der Zahlentheorie Satz: Ist n ≥ 2 eine natürliche Zahl, so gibt es nicht notwendig verschiede- ne Primzahlen p1 , p1 , ..., pk , so dass n = p1 · p2 · ... · pk gilt. Diese Darstellung ist bis auf die Reihenfolge der Faktoren eindeutig. Dieser Satz war schon Euklid (siehe [Euklid 03, Buch IX]), allerdings mit der Einschränkung auf quadratfreie Zahlen, bekannt. Der erste vollständige und korrekte Beweis dieses Satzes von Carl Friedrich Gauss aus dem Jahre 1801 ndet sich in [Gauss 01]. 2.1.4 Der gröÿte gemeinsame Teiler Denition: Der gröÿte gemeinsame Teiler (ggT ) zweier natürlicher Zahlen u und v ist die gröÿte natürliche Zahl, die sowohl u als auch v ohne Rest teilt. Für die Erweiterung auf ganze Zahlen gilt, dass nur die Beträge der Zahlen betrachtet werden. So ist beispielsweise ggT (3, −12) = ggT (3, |−12|) = ggT (3, 12) = 3. Der ggT hat zwei wichtige Eigenschaften. Für v = 0 gilt: ggT (u, 0) = u und für u, v 6= 0 gilt: ggT (u, v) = ggT (u, v mod u). Diese beiden Eigenschaften werden beim Euklidischen Algorithmus genutzt. 2.1.5 Euklidischer Algorithmus Mit dem euklidischen Algorithmus lässt sich relativ schnell der gröÿte gemeinsame Teiler zweier natürlicher Zahlen u und v berechnen. Dazu werden die beiden Zahlen u und v bis zum Erreichen des Restes 0 wie folgt rekursiv mit Rest geteilt: 19 u = q 0 · v + r1 v = q1 · r1 + r2 r1 = q2 · r2 + r3 r2 = q3 · r3 + r4 .. . rk−2 = qk−1 · rk−1 + rk rk−1 = qk · rk + 0. Die Zahl rk ist dann das gesuchte Ergebnis ggT (u, v) = rk . Beim erweiterten Euklidischen Algorithmus wird der ggT zweier Zahlen zusätzlich als Linearkombination dargestellt. ggT (u, v) = x · u + y · v Die Werte für x und y lassen sich ermitteln, indem nach Berechnung des ggT (u, v) durch den euklidischen Algorithmus die vorletzte Gleichung nach dem Rest rk = rk−2 − qk−1 · rk−1 umgestellt wird und dann analog die Gleichungen für die ri rekursiv eingesetzt und jeweils zur Linearkombination der beiden Reste vereinfacht werden, so dass am Ende die gesuchte Gleichung in der Form ggT (u, v) = x · u + y · v als Ergebnis vorliegt. Dieser Algorithmus kann zum Berechnen des Kehrwertes modulo einer Zahl eingesetzt werden. Im Allgemeinen gibt es nicht immer eine Lösung für diese Fragestellung. Allerdings gibt es immer eine Lösung für den in Abschnitt 1.2.1 vorgestellen Fall bei der Berechnung des öentlichen Schlüssels beim RSA Algorithmus, weil die verwendeten Zahlen relativ prim zueinander sind. Das lässt sich am besten an einem Beispiel veranschaulichen. Gegeben ist die Kongruenz s · 8 ≡ 1 mod 35 bzw. die Gleichnung s = 8−1 mod 35. Um hier s zu berechnen, benötigen wir die Darstellung vom ggT (35, 8) in der Form x · 35 + y · 8. Mittels Euklidischen Algorithmus berechnet man den 20 schon bekannten ggT (35, 8): 35 = 4 · 8 + 3 8 = 2·3+2 3 = 1·2+1 2 = 2·1+0 Nach den Resten umgestellte und rekursiv eingesetzte Gleichungen: 1 = 3−1·2 1 = 3 − 1 · (8 − 2 · 3) 1 = 3·3−8 1 = 3 · (35 − 4 · 8) − 8 1 = 3 · 35 − 13 · 8 führen dann zum gesuchten Ergebnis s = −13 oder besser s = 22. Es lässt sich leicht überprüfen, dass 22 · 8 ≡ 1 mod 35 erfüllt ist. Praktisch werden beim erweiterten Euklidischen Algorithmus sowohl der gröÿte gemeinsame Teiler als auch die Linearfaktoren in einem Durchlauf berechnet. Dazu werden die schon bekannten Folgen rk und qk benötigt und zusätzlich die Folgen xk und yk . Dabei ist: x0 = 1 x1 = 0 xk+1 = qk xk + xk−1 y0 = 0 y1 = 1 yk+1 = qk yk + yk−1 21 und die Berechnung von x und y erfolgt mit: x = (−1)k xk y = (−1)k+1 yk . Für das Beispiel ggT (35, 8) sieht die Tabelle zur Berechnung wie folgt aus. k rk qk xk yk 0 2 3 4 5 35 8 3 2 1 0 1 0 1 4 0 1 2 1 1 2 4 9 2 3 13 Daraus ergibt sich die Lösung: 3 · 35 + (−13) · 8 = 1. 2.1.6 Der kleine Satz von Fermat Satz: Sei p eine Primzahl und a eine ganze Zahl, dann gilt: ap ≡ a mod p und für den Fall, dass a und p teilerfremd sind, gilt zusätzlich: ap−1 ≡ 1 mod p. 2.1.7 Die Eulersche φ-Funktion Denition: Die Eulersche φ-Funktion gibt für eine natürliche Zahl n die Anzahl der natürlichen Zahlen a mit a < n an, die teilerfremd zu n sind: φ(n) = | {1 ≤ a < n : ggT (a, n) = 1} |. 22 2.1.8 Satz von Dirichlet Satz: Eine arithmetische Folge an + b = x mit n ∈ N enthält unendlich viele Primzahlen, wenn a und b relativ prim sind. Interessant ist dann die Frage, wieviele dieser Zahlen ≤ x in einer arithmetischen Folge Primzahlen sind. Sei πa,b (x) die Funktion, die zu einem gegebenen x diesen Wert liefert. Es gibt die Abschätzung3 : √ − ln (x) π(x) = li(x) + O xe 15 und den Grenzwert: 1 πa,b (x) = . x→∞ li(x) φ(a) lim Daraus folgt: √ − ln (x) li(x) + O xe 15 πa,b (x) = . φ(a) Das zeigt, dass die Verteilung der Primzahlen in einer arithmetischen Folge annähernd gleich ist zu der Verteilung der Primzahlen innerhalb der natürlichen Zahlen. 2.1.9 Quadratische Reste Denition: Die Zahl a heiÿt quadratischer Rest von n, wenn ggT (a, n) = 1 ist und eine ganze Zahl x existiert, so dass folgende Kongruenz gilt: x2 ≡ a mod n. 2.1.10 Legendre Symbol Denition: Sei p eine Primzahl > 2, dann ist für die Zahl a das LegendreSymbol, wie folgt deniert: +1, wenn a quadratischer Rest von p ist. a = −1, wenn a kein quadratischer Rest von p ist. p 0, wenn a ein Vielfaches von p ist. 3 Logarithmisches Integral: li(x) = Rx 0 1 ln(x) dx 23 2.1.11 Das Quadratische Reziprozitätsgesetz Quadratisches Reziprozitätsgesetz Für zwei ungerade und nicht gleiche Primzahlen p und p gilt: ( p−1 q−1 p q −1, falls p ≡ q ≡ 3 mod 4 = (−1) 2 2 = +1, sonst. q p 1. Ergänzungssatz Für ungerade Primzahlen p gilt: ( p−1 −1 +1, = (−1) 2 = −1, p falls p ≡ +1 mod 4 falls p ≡ −1 mod 4. 2. Ergänzungssatz Für ungerade Primzahlen p gilt: ( p2 −1 2 +1, = (−1) 8 = −1, p 2.1.12 falls p ≡ ±1 mod 8 falls p ≡ ±3 mod 8. Legendre Kongruenz Die Kongruenz: x2 ≡ y 2 mod m wird als Legendre Kongruenz bezeichnet und hat für eine ungerade Primzahl m genau die beiden trivialen Lösungen: x ≡ ±y mod m. Ist m eine zusammengesetzte Zahl, dann hat die Kongruenz auch nichttriviale Lösungen. Diese Lösungen sind die Grundlage für viele moderne Faktorisierungsverfahren (siehe Abschnitt 4.4.4). 2.2 Gruppen Eine Gruppe ist eine algebraische Struktur, die über einer Menge G deniert wird. Weiterhin wird eine binäre Operation ◦ benötigt, die zwei 24 Elemente aus G verknüpft. Denition: Das Paar (G, ◦) heiÿt genau dann Gruppe, wenn folgende Axio- me erfüllt werden. G1 G2 G3 G4 Abgeschlossenheit Assoziativität Neutrales Element Inverses Element ∀x, y ∈ G: ∀x, y, z ∈ G: ∃e ∈ G: ∀x ∈ G: ∀x ∈ G: ∃x0 ∈ G: x◦y ∈G (x ◦ y ) ◦z = x◦ (y ◦ z ) e◦x=x◦e=x x ◦ x0 = x0 ◦ x = e Denition: Eine Gruppe (G, ◦) heiÿt Abelsche oder kommutative Gruppe, wenn zusätzlich zu den vier Gruppenaxiomen folgendes erfüllt ist. G5 Kommutativität ∀x, y ∈ G: x◦y =y◦x Denition: Die Anzahl der Elemente einer Gruppe (G, ◦) wird als Ord- nung der Gruppe (G, ◦) bezeichnet und mit |G| notiert. Ist |G| endlich, dann liegt eine endliche Gruppe vor. Denition: Sei x ∈ G, dann ist die Potenz xn mit n ≥ 0 wie folgt re- kursiv deniert: x0 = e, x1 = x und xn = x ◦ xn−1 . Für negative Exponenten n lautet die Denition analog; dabei wird für das in Axiom G4 eingeführte inverse Element x0 auch x−1 geschrieben. Denition: Sei x ∈ G und |G| endlich, dann ist die kleinste positive ganze Zahl m mit xm = e die Ordnung von x in (G, ◦). Denition: Eine Untergruppe U ist eine nichtleere Teilmenge einer Gruppe (G, ◦), die zusammen mit der Verknüpfung ◦ wieder eine Gruppe (U, ◦) bildet. Satz von Lagrange: Ist U eine Untergruppe von G, so ist ihre Odnung |U | ein Teiler von |G|. 25 2.3 Körper Denition: Es seien zwei kommutative Gruppen (G1 , ) und (G2 , ⊕) gege- ben und die neutralen Elemente dieser Gruppen mit e1 bzw. e2 bezeichnet. Wenn G1 = G2 ist, die Verknüpfungen und ⊕ sich unterscheiden und für die Gruppe (G1 , ) bei Axiom G4 für x x0 = e1 einschränkend x 6= e2 vorausgesetzt wird, dann ist das Tripel (K, , ⊕) ein Körper, wenn G1 = K und zusätzlich folgendes Axiom erfüllt ist. K1 Distributivität ∀x, y, z ∈ K : (x ⊕ y) z = (x z) ⊕ (y z) Ist |K| ein endlicher Wert, dann bezeichnet man (K, , ⊕) als endlichen Körper. 2.4 Ringe Denition: Sei (R, , ⊕) ein Körper mit der möglichen Ausnahme, dass be- züglich der Operation kein inverses Element existiert, dann ist (R, , ⊕) ein kommutativer Ring. Fehlt zusätzlich der Operation die Eigenschaft der Kommutativität, dann ist (R, , ⊕) ein Ring. Denition: Ein Ring (R, , ⊕) ist nullteilerfrei, wenn x y = 0 nur dann eintreten kann, wenn x = 0 oder y = 0 ist. Denition: Ein Ring (R, , ⊕), der nullteilerfrei und kommutativ ist, wird als Integritätsring bezeichnet. Ist (R, , ⊕) ein Integritätsring und |R| ein endlicher Wert, dann ist (R, , ⊕) ein Körper. 2.5 Kongruenzen Denition: Zwei natürliche Zahlen u und v sind kongruent mod m, wenn m die Dierenz u − v ohne Rest teilt. Denition: Zwei natürliche Zahlen u und v sind inkongruent oder nicht 26 kongruent mod m, wenn m die Dierenz u − v mit Rest teilt. In mathematischer Notation wird die Kongruenz u ≡ v mod m und die Inkongruenz u 6≡ v mod m geschrieben. 2.6 Komplexität Die beiden Komplexitätsklassen P und N P und die Landau-Notation für die Angabe der asymptotischen Laufzeit der Algorithmen in Kapitel 4 werden hier nur kurz deniert. Nähere Erklärungen nden sich in [Rothe 05] und [Floyd 96]. Denition: P ist die Klasse von Problemen, die von einer deterministi- schen Turingmaschine in polynomialer Zeit entschieden werden kann. Denition: N P ist die Klasse von Problemen, die von einer nichtdetermi- nistischen Turingmaschine in polynomialer Zeit entschieden werden kann. Denition: O(g(n)) = {f (n)|∃c ≥ 1 : |f (n)| ≤ c · |g(n)|} 2.7 Schnelle Exponentiation Oft werden schnelle Berechnungen für Potenzen nx benötigt. Bei der naiven Methode wird die Zahl n fortlaufend mit sich selbst multipliziert. Dies kann wesentlich beschleunigt werden, wenn zur Binärdarstellung der Zahl x übergegangen wird. k X x= xi 2i i=0 Die Koezienten xi sind entweder 0 oder 1 und es gilt: nx = n Pk i=0 xi 2i = k Y i (n2 )xi = i=0 Y i g2 . 0≤i≤k,xi =1 Es reicht also aus die Quadrate von g 2 zu berechnen und nur für die xi = 1 das Produkt zu bilden. Dabei ist: i i+1 g2 i = (g 2 )2 . 27 Eine Beschreibung für eine eziente Multiplikation in Zp (siehe Abschnitt 2.8.1) ist in [Montgomery 85] zu nden. 2.8 Elliptische Kurven über Zp Elliptische Kurven sind keine, wie der Name vermuten lässt, Kurven, die Ellipsen beschreiben, sondern Gleichungen, die bei der Berechnung von Ellipsenumfängen im Integranden auftreten. Die elliptischen Kurven, die hier vorgestellt und eingesetzt werden, sind auf den Körper Zp beschränkt. Im Allgemeinen werden elliptische Kurven über die Körper R oder Q deniert, so dass die Kurven auch grasch anschaulich gemacht werden können. Im Fall der Denition über Zp handelt es sich dann um Punktmengen, die in einem Koordinatensystem eingetragen nicht mehr an Kurven erinnern. Der Körper Zp und die darüber denierten elliptischen Kurven werden in diesem Abschnitt vorgestellt. Für weitergehende Informationen siehe [IEEE P1363 / D13]. 2.8.1 Der Körper Zp Denition: Sei Zp die Menge {0, 1, 2, ..., p − 1} und p eine Primzahl und weiterhin entsprechen die Verknüpfungen ⊕ und der Addition + modulo p und der Multiplikation · modulo p, dann ist (Zp , ⊕, ) ein Körper. In Zp kann also wie gewohnt addiert und multipliziert werden, so lange man beachtet, dass die Ergebnisse wieder in Zp liegen. Sei unser Körper Z7 und es wird 4 ⊕ 6 berechnet. Dann liegt das durch gewöhnliche Addition ermittelte Ergebnis 10 nicht in Z7 , aber durch 10 mod 7 = 3 wird genau das erreicht, so dass 4 ⊕ 6 = 3 ist. Anstatt x ⊕ y = z wird x + y = z geschrieben, mit der Einschränkung durch die Modulorechnung, also Division durch p mit Rest, dass x, y, z ∈ Zp sind. Negative Zahlen werden vermieden, indem man p oder ein Vielfaches von p zu einer negativen Zahl addiert, bis das Ergebnis in Zp liegt. Im Beispiel von Z7 mit 4 − 6 = −2 führt das damit zu 4 − 6 = 5, weil −2 + 7 = 5 ist. Es wird auch oft als (4 − 6) mod 7 = 5 geschrieben. Bei der Multiplikation wird analog verfahren. Allerdings ist die Division nicht einfach. Die Division xy lässt sich als Multiplikation mit dem inversen Element y 0 bzw. y −1 durchführen, xy = x · y −1 . Für y und y −1 gilt y · y −1 = 1 28 bzw. y · y −1 ≡ 1 mod p. Wenn in Z7 der Quotient 25 berechnet werden soll, dann ist zuerst 5−1 gesucht. 5−1 = 3, weil 5 · 3 ≡ 1 mod 7 ist. Also ist 2 = 2 · 5−1 = 2 · 3 = 6. 5 Das Berechnen des inversen Elementes in einem endlichen Körper ist im Allgemeinen keine einfache Aufgabe und sollte nach Möglichkeit vermieden werden. 2.8.2 Elliptische Kurven Denition: Eine elliptische Kurve EC p (a, b) ist zusammen mit dem so ge- nannten Unendlichkeitspunkt O eine Menge von Punkten (x, y), welche die Gleichung y 2 = x3 + ax + b erfüllen, und für die weiterhin gilt 4a3 + 27b2 6= 0 mit a, b, x, y, ∈ Zp und4 p > 3. Die Kurve EC 7 (2, 4) (siehe Abbildung) ist ein Beispiel für so eine Kurve. Die Punktmenge lautet: {O, (0, 2), (0, 5), (1, 0), (2, 3), (2, 4), (3, 3), (3, 4), (6, 1), (6, 6)} und alle Punkte (x, y) erfüllen die Gleichung y 2 = x3 + 2x + 4. Weiterhin ist 4 · 23 + 27 · 42 = 2 6= 0. Gerechnet wird in diesem Beispiel in Z7 . 4 Diese Einschränkung dient der einfachereren Darstellung der elliptischen Kurve. Aus- 2 und 3. Ein Körper hat die Charak1 + 1 + 1 = 0 gilt. Das ist bei Z2 und Z3 geschlossen werden damit Körper der Charakteristik teristik 2 bzw. 3, wenn im Körper 1+1 = 0 bzw. der Fall. 29 Elliptische Kurve EC 7 (2, 4) 30 2.8.3 Elliptische Kurven als Gruppe Für eine elliptische Kurve EC p (a, b) lässt sich die Addition ◦ von zwei Punkten P1 (x1 , y1 ) und P2 (x2 , y2 ) zu einem dritten Punkt P3 (x3 , y3 ) mit P1 , P2 , P3 ∈ EC p (a, b) wie folgt denieren: −P1 = (x1 , −y1 ) P 3 = P1 ◦ P2 O, falls P1 = −P2 = P2 , falls P1 = O P , falls P = O. 1 2 Ansonsten ist P3 (x3 , y3 ) = P1 ◦ P2 mit: λ = y2 −y1 , x2 −x1 falls P1 6= P2 3x21 +a , 2y1 falls P1 = P2 x3 = λ2 − x1 − x2 y3 = λ(x1 − x3 ) − y1 . Bei der Berechnung von λ darf weder für x2 − x1 noch für 2y1 der Wert Null auftreten. In beiden Fällen ist λ als Anstieg der Gerade bzw. Tangente durch die Punkte zu intepretieren und das Ergebnis der Punktaddition ist dann der Unendlichkeitspunkt O. Die Punktaddition ist eine abgeschlossene Verknüpfung. Wenn zwei Punkte P1 und P2 auf der Kurve liegen, dann liegt auch die Summe der Punkte, also der Punkt P3 , auf der Kurve. Für die Fälle P1 = −P2 , P1 = O und P2 = O ist das oensichtlich. Die Fälle 31 P1 6= P2 und P1 = P2 erfordern längere Rechnungen, auf die hier verzichtet wird. Die Addition von Kurvenpunkten ist weiterhin assoziativ. Das neutrale Element ist der Unendlichkeitspunkt O, da die Addition von einem Punkt P1 mit O per Denition wieder den Punkt P1 ergibt. Das inverse Element zu einem Punkt P1 (x1 , y1 ) ist P2 (x1 , −y1 ), da die Addition von den Punkten P1 und −P1 den Unendlichkeitspunkt O ergibt. Zusätzlich ist die Punktaddition kommutativ. Das zu zeigen bedarf ebenfalls längerer Rechnung, auf die hier ebenfalls verzichtet wird. Damit ist das Paar (EC p (a, b), ◦) eine kommutative Gruppe. Wird beispielsweise der Punkt (0, 2) der Kurve EC 7 (2, 4) genommen und fortlaufend addiert5 , so ergibt sich. (x1 , y1 ) = (0, 2) 3 · 02 + 2 =2·2=4 2·2 x2 = 42 − 0 − 0 = 2 (x2 , y2 ) = (0, 2) ◦ (0, 2) λ= y2 = 4 · (0 − 2) − 2 = 4 = (2, 4) 2−4 =5·3=1 0−2 x3 = 12 − 2 − 0 = 6 (x3 , y3 ) = (2, 4) ◦ (0, 2) λ= y3 = 1 · (2 − 6) − 4 = 6 = (6, 6) 2−6 =3·6=3 0−6 x4 = 32 − 6 − 0 = 3 (x4 , y4 ) = (6, 6) ◦ (0, 2) λ= y4 = 3 · (6 − 3) − 6 = 3 = (3, 3) 5 Alle arithmetischen Operationen werden in sich aus 2 · 4 = 3 · 5 = 6 · 6 = 1. 32 Z7 durchgeführt und die Inversen ergeben 2−3 =6·2=5 0−3 x5 = 52 − 3 − 0 = 1 (x5 , y5 ) = (3, 3) ◦ (0, 2) λ= y5 = 5 · (3 − 1) − 3 = 0 = (1, 0) 2−0 =2·6=5 0−1 x6 = 52 − 1 − 0 = 3 (x6 , y6 ) = (1, 0) ◦ (0, 2) λ= y6 = 5 · (1 − 3) − 0 = 4 = (3, 4) 2−4 =5·2=3 0−3 x7 = 32 − 3 − 0 = 6 (x7 , y7 ) = (3, 4) ◦ (0, 2) λ= y7 = 3 · (3 − 6) − 4 = 1 = (6, 1) 2−1 =1·1=1 0−6 x8 = 12 − 6 − 0 = 2 (x8 , y8 ) = (6, 1) ◦ (0, 2) λ= y8 = 1 · (6 − 2) − 1 = 3 = (2, 3) 2−3 =6·3=4 0−2 x9 = 42 − 2 − 0 = 0 (x9 , y9 ) = (2, 3) ◦ (0, 2) λ= y9 = 4 · (2 − 0) − 3 = 5 = (0, 5) (x10 , y10 ) = (0, 5) ◦ (0, 2) = (0, 5) ◦ (0, −5) = O 2.8.4 Projektive Koordinatendarstellung Bisher wurden die Punkte der elliptischen Kurven mit 2 Koordinaten in der so genannten anen Form angegeben; ein Punkt hatte also die Form (x, y) und konnte grasch in einem zweidimensionalen Koordinatensystem veranschaulicht werden. Bei der Addition von Punkten einer elliptischen 33 Kurve ist es in dieser Darstellung notwendig, im zugrundeliegenden Körper, hier Zp , zu dividieren und damit ist es erforderlich, das Inverse eines Elementes in Zp zu berechnen. Das lässt sich vermeiden, wenn man zur projektiven Koordinatendarstellung übergeht. Im folgenden werden zur Unterscheidung der Darstellungen für die ane kleine und für die projektive Koordinatendarstellung groÿe Buchstaben verwendet. Bei der projektiven Koordinatendarstellung ist eine dritte Variable Z notwendig. Der Punkt (x, y) bezeichnet einen Punkt in der anen und der Punkt (X, Y, Z) einen in der projektiven Darstellung. Die projektive Darstellung ist nicht eindeutig; so bezeichnet jeder Punkt der Form (λ2 X, λ3 Y, λZ) mit λ 6= 0 und λ ∈ Zp ein und denselben Punkt. Damit kann in der projektiven Darstellung nichts mehr einfach grasch veranschaulicht werden. Die Umrechnung von der anen zur projektiven Darstellung erfolgt mit: X = x, Y = y, Z = 1. Die Umrechnung von der projektiven zur anen Darstellung ist schwieriger und erfolgt mit: Y X x = 2, y = 3. Z Z Der Unendlichkeitspunkt O hat die Form (λ2 , λ3 , 0) mit λ 6= 0 und λ ∈ Zp . Es existieren weitere projektive Koordinatendarstellungen, die allerdings mit einem höheren Rechenaufwand verbunden sind. Der entscheidende Vorteil der projektiven Darstellung ist das Vermeiden der Division in Zp . Im folgenden wird die Punktaddition von einem Punkt mit sich selbst dargestellt, da unter anderem diese Operation bei der Faktorisierung mittels elliptischer Kurven (siehe Abschnitt 4.4.3) eine wichtige Rolle spielt. Die anderen Fälle6 nden sich ebenfalls in [IEEE P1363 / D13, S. 126]. Gegeben ist ein Punkt P1 (X1 , Y1 , Z1 ) und gesucht ist der Punkt P2 (X2 , Y2 , Z2 ) 6 Addition verschiedener Punkte und skalare Multiplikation (k 34 · P) mit P2 = P1 ◦ P1 . Zu berechnen ist in diesem Fall: X2 = M 2 − 2S Y2 = M (S − X2 ) − T Z2 = 2Y1 Z1 . Die drei Hilfsvariablen M, S und T erhält man wie folgt: M = 3X12 + aZ14 S = 4X1 Y12 T = 8Y14 . Das a wird der gegebenen elliptischen Kurve EC p (a, b) entnommen, und alle Berechnungen werden in Zp durchgeführt. Wird der Punkt (6, 1) der Kurve EC 7 (2, 4) verdoppelt bzw. zu sich selbst addiert, dann werden in der projektiven Darstellung folgende Berechnungsschritte durchgeführt: (x, y) = (X, Y, Z) (6, 1) = (6, 1, 1) M = 3 · 62 + 2 · 14 = 5 S = 4 · 6 · 12 = 3 T = 8 · 14 = 1 X2 = 5 2 − 2 · 3 = 5 Y2 = 5 · (3 − 5) − 1 = 3 Z2 = 2 · 1 · 1 = 2 2 · (6, 1, 1) = (5, 3, 2). 2.9 Der Einheitskreis über Zn Der Einheitskreis in der Euklidischen Geometrie lässt sich als Menge von Punkten (x, y) beschreiben, welche die Gleichung x2 + y 2 = 1 erfüllen. 35 Für diese Punktmenge existiert eine naheliegende Verknüpfung, nämlich die der Punktaddition. Ein Punkt P auf dem Einheitskreis deniert eindeutig einen Winkel ]P OX . Dabei ist O der Koordinatenursprung und X der Punkt (1, 0). Der Punkt P = (x, y) kann auf dem Einheitskreis mit den Denitionen vom Sinus und Cosinus als (cos(α), sin(α)) angegeben werden. Werden damit zwei Punkte addiert, so addiert man die beiden Winkel. Aus den Additionstheoremen: cos(α1 + α2 ) = cos(α1 ) · cos(α2 ) − sin(α1 ) · sin(α2 ) sin(α1 + α2 ) = cos(α1 ) · sin(α2 ) + cos(α2 ) · sin(α1 ) ergibt sich: (x1 , y1 ) + (x2 , y2 ) = (x1 x2 − y1 y2 , x1 y2 + x2 y1 ). Mit analoger Überlegung für den Fall (x, y) + (x, y), also der Verdopplung eines Punktes, ergibt sich: 2P = (x, y) + (x, y) = (x2 − y 2 , 2xy). Für diese Arbeit sollen die Werte für x und y eingeschränkt werden auf Elemente von Zn : EK(Zn ) := (x, y) : (x, y) ∈ Zn × Zn , n ∈ N, x2 + y 2 = 1 . Die Addition zweier Punkte kann auch in EK(Zn ) durchgeführt werden. Wegen: (1, 0) + (x2 , y2 ) = (1 · x2 − y1 · 0, 1 · y2 + x2 · 0) = (x2 , y2 ) und (x1 , y1 ) + (1, 0) = (x1 · 1 − y1 · 0, x1 · 0 + 1 · y1 ) = (x1 , y1 ) ist der Punkt (1, 0) das neutrale Element und aus: (x, y) + (x, −y) = (x2 + y 2 , −xy + xy) = (1, 0) folgt, dass der Punkt (x, −y) das inverse Element zum Punkt (x, y) ist. Weiterhin ist durch einfache Rechnung ersichtlich, dass die Addition assoziativ ist. Die Abgeschlossenheit ist aus (x1 , y1 )+(x2 , y2 ) = (x1 x2 −y1 y2 , x1 y2 +x2 y1 ) und der Denition von Zn oensichtlich. 36 Damit bildet der Einheitskreis über Zn mit der Punktaddition eine kommutative Gruppe (EK(Zn ), +). Die Ordnung von (EK(Zp ), +) mit p > 2 lässt sich mit: −1 |(EK(Zp ), +)| = p + p berechnen. Dabei ist der zweite Summand das Legendre-Symbol. Für zusammengesetzte Zahlen n mit n = p1 p2 gilt: |(EK(Zn ), +)| = |(EK(Zp1 ), +)| · |(EK(Zp2 ), +)| . Einheitskreis EK(Z16 ) 37 Kapitel 3 Programme In diesem Kapitel werden einige Programme vorgestellt, mit denen sich Zahlen faktorisieren lassen. Es sind zwei gröÿere Mathematikprogramme, das komerzielle Mathematica1 und das als Open Source veröentlichte Maxima2 . Weiterhin werden spezielle Programme angegeben, die nur Zahlen faktorisieren und das meist mit einem Algorithmus. Zum einen ist es interessant, welche Algorithmen implementiert werden und zusätzlich kann man sich bei den frei verfügbaren Programmen den Quellcode anschauen. Soweit es rechtlich möglich ist, sind die Programme auf der beigelegen CD zu nden3 . 3.1 Mathematica Mathematica, von Wolfram Research, ist eines der am meisten eingesetzten mathematisch-naturwissenschaftlich Softwarepakete. Aktuell liegt es in der Version 6 vor und ist für alle gängigen Betriebssysteme erhältlich. In der Dokumentation zur Funktion FactorInteger ist folgende Information zu nden: FactorInteger switches between trial division, Pollard p-1, Pollard rho, elliptic curve and quadratic sieve algorithms. In practice, you will nd that FactorInteger[k] will give a when k has fewer than about re- sult almost immediately 40 1 http://www.mathematica.com 2 http://maxima.sourceforge.net 3 siehe Anhang A 38 digits. But if k has more than 70 digits, FactorInteger[k] can start taking an unmanageably long time. Die Probedivision und die Algorithmen von Pollard sind in Abschnitt 4.3 und die Algorithmen, die elliptische Kurven und das so genannte quadratische Sieb nutzen, sind in Abschnitt 4.4 zu nden. Der derzeit schnellste Faktorisierungsalgorithmus für groÿe Zahlen, das Zahlkörpersieb, wird hier nicht eingesetzt. Von Perfectly Scientic (siehe [PrimeKit 07]) gibt ist jedoch ein Paket für Mathematica, in dem dieser Algorithmus implementiert ist. Das Paket PrimeKit kann man dort kostenlos herunterladen. Die in diesem Paket implementierten Algorithmen stammen alle aus [Crandall 05]. 3.2 Maxima Maxima (siehe [Maxima 07]) ist ein Programm, das für den Einsatz im Bereich der Algebra gedacht ist, und als Open Source Projekt entwickelt wird. Das heiÿt, dass man sich bei diesem Programm auch die Implementation der einzelnen Algorithmen anschauen kann. Aktuell ist die Version 5.12.0. In der Dokumentation zur Funktion ifactors zu Maxima heiÿt es: Function ifactors: For a positive integer n returns the factoe e rization of n. If n = p11 ..pkk is the decomposition of n into prime factors, ifactors returns [[p1 , e1 ], ..., [pk , ek ]]. Factorization methods used are trial divisions by primes up to 9973, Pollard's rho method and elliptic curve method. In Maxima werden für die Faktorzerlegung einer Zahl weniger Algorithmen eingesetzt, aber das Vorgehen ist recht ähnlich. 3.3 Spezielle Programme Für die schnellen Algorithmen für groÿe Zahlen sollen hier einige frei erhältliche Programme4 kurz vorgestellt werden. Die angegebenen Programme sind natürlich nicht alle verfügbaren Implementationen und unterliegen 4 Die Erwähnung der Programme soll keine Wertung darstellen, sondern dient nur als Hinweis dazu, dass man sich hier den Quellcode der Implementationen anschauen und die Programme ausprobieren kann. 39 auch der Entwicklung. Bei Interesse sollte es immer vorgezogen werden, sich die Internetquellen anzuschauen, auch wenn die Seiten und die Programme auf der beigelegten CD zu nden sind. 3.3.1 Kettenbrüche Eine Implementation zur Faktorisierung von Zahlen, die auf Kettenbrüchen basiert, ist auf der Seite von Christian Röpke (siehe [Röpke 07]) zu nden. 3.3.2 Elliptische Kurven Für das Faktorisieren von Zahlen mittels elliptischer Kurven ndet man auf der Seite vom ECMNET Project (siehe [ECMNET 07]) das Programm GMP-ECM in der Version 6.0.1. 3.3.3 Quadratisches Sieb Eine Implementation des Quadratischen Siebs, das Programm Qsieve in der Version 3.01, ndet sich auf der Seite von Thorsten Reinicke (siehe [Reinicke 07]). Bei der zu faktorisierenden Zahl werden vor dem Quadratischem Sieb für kleine und moderate Primfaktoren schnellere Algorithmen5 eingesetzt. 3.3.4 Zahlkörpersieb Auf der Seite von Chris Monico (siehe [Monico 07] wird eine Implementation namens GGNFS in der Version 0.77.0 des so genannten allgemeinen Zahlkörpersiebs vorgestellt. Einzelheiten zu den Algorithmen selbst nden sich im Abschnitt 4.4. 5 Probedivision, Pollard Algorithmen und ECM (Elliptische Kurven) 40 Kapitel 4 Algorithmen In diesem Kapitel werden Algorithmen beschrieben, mit denen man natürliche Zahlen in ihre Primfaktoren zerlegen kann. Die Algorithmen werden dabei in klassische Algorithmen und schnelle Algorithmen für groÿe Zahlen unterteilt. Zusätzlich wird das Thema Primzahltest mit zwei Verfahren angesprochen. Am Anfang werden grundsätzliche Überlegungen für den Einsatz der verschiedenen Algorithmen geführt und zum Schluÿ ein allgemeiner Ansatz angegeben, in dem aufgeführt ist, wann welcher Algorithmus eingesetzt werden sollte. Es gibt weitaus mehr Algorithmen zum Faktorisieren von Zahlen als hier vorgestellt werden können. Weitergehende Informationen dazu ndet man unter anderem in [Riesel 94], [Bressoud 89] und [Crandall 05]. 4.1 Allgemeine Überlegungen Im Abschnitt 1.1 wurde das Problem der Faktorisierung natürlicher Zahlen mit: Gegeben sei eine natürliche Zahl n, gesucht ist für diese Zahl ein nichttrivialer Faktor m. konkretisiert. Die Erweiterung auf die Zerlegung einer Zahl in ihre Primfaktoren ist ist nicht weiter schwierig und erfordert auch keine anderen Verfahren. Wenn man von einer Zahl n einen nichttrivialen Faktor m1 , also m1 6= 1 und m1 6= n, gefunden hat, dann hat man sofort einen zweiten Teiler m2 = mn1 . Jetzt testet man, ob die beiden Zahlen m1 und m2 Primzahlen 41 sind. Wenn ja, dann liegt damit die Zerlegung in Primfaktoren vor. Wenn nein, also eine oder beide Zahlen zusammengesetzt sind, dann wird bei diesen Zahlen wiederum nach Faktoren gesucht. Das wird so lange sukzessive durchgeführt, bis nur noch Primzahlen vorliegen und damit das Ergebnis feststeht. √ Ebenso naheliegend ist es, dass man Faktoren der Zahl n nur bis zu b nc suchen muss. Bei einer Quadratzahl, also n = m2 , wären beide Faktoren √ √ m1 = m2 = b nc = n. Ansonsten lassen sich die Teiler einer Zahl in zwei Mengen Mk und Mg einteilen. Die Elemente von Mk sind die Teiler mki , für √ die mki ≤ b nc gilt, und die Elemente von Mg sind dann die Teiler, für die √ mgi > b nc gilt. Es ist dann leicht zu sehen, dass es für jeden gefundenen Teiler mki ein dazugehöriger Teiler mgi mit mgi = mnki existiert. Ansonsten wäre mki kein Teiler von n und für alle i betrachtet ist mit dem gleichen Argument ersichtlich, dass |Mk | = |Mg | gilt und somit ist es ausreichend, √ alle Teiler bzw. Primteiler bis b nc zu suchen und die Teiler bzw. Primteiler aus der Menge Mg ergeben sich dann durch einfache Division. In dieser Arbeit werden bezüglich der Faktorisierung nur natürliche Zahlen betrachtet. Die Erweiterung auf ganze Zahlen ist sehr einfach und unproblematisch, wenn man das negative Vorzeichen der ganzen Zahlen, die kleiner als 0 sind, in der Zerlegung einer Zahl in ihre Primfaktoren zusätzlich als Faktor -1 ansieht. Weiterhin wird in dieser Arbeit immer der allgemeine Fall betrachtet, das heiÿt, es wird nicht davon ausgegangen, dass Zahlen einer bestimmten Form vorliegen. Gerade was Rekorde in der Faktorisierung von Zahlen betrit, handelt es sich fast immer um Zahlen bestimmter Form, die sich dadurch einfacher in Faktoren zerlegen lassen. Das bedeutet aber auch, dass die eingesetzten Algorithmen auf den Spezialfall angepasst und im allgemeinen nicht einsetzbar sind. Aktuelles Beispiel vom 21. Mai 2007 ist die Faktorisierung der 1039. Mersenne-Zahl, also einer Zahl der Form 2n − 1 und in diesem speziellen Fall der Zahl 21039 − 1 (siehe [PGP 07]). 42 4.1.1 Faktorisierung von Mersenne Zahlen Hier soll beispielhaft gezeigt werden, was es bedeuten kann, wenn Zahlen mit besonderer Struktur vorliegen. Denition: Mersenne Zahlen sind Zahlen Mn der Form 2n − 1. Dabei ist n ∈ N. Bekannt ist, dass die nach Marin Mersenne benannten Zahlen nur dann Primzahlen sein können, wenn n ∈ P ist. Das öentliche Interesse1 beschäftigt sich daher mit den Versuchen, die Zahlen der Form 2p −1 in ihre Faktoren2 zu zerlegen oder eine Primzahl dieser Form zu nden, um einen neuen Rekord aufzustellen3 . Die Faktoren der Mersenne-Zahlen 2p − 1, sofern sie denn keine Primzahlen sind, kann man also in Tabellen nachschlagen oder es wird weltweit daran gerechnet. Die Mersenne Zahlen mit einem Exponenten, der keine Primzahl ist, sind allesamt zusammengesetzte Zahlen und tatsächlich gibt es eine einfache Möglichkeit, Faktoren zu nden. Für zusammengesetzte n = a · b gilt: 2a·b − 1 = 2a·b − 1a·b = (2a )b − (1a )b = (2a − 1) · (2a(b−1) + 2a(b−2) + . . . + 2a + 1). Daraus folgt, dass für die Zahl Mn = 2n − 1 mit n = a · b die Zahlen Ma und Mb nichttriviale Teiler von Mn sind. Sind beispielsweise die Primfaktoren zur Zahl M1000 = 21000 − 1 = 107150860718626732094842504906000181056140481170553360744375038837 035105112493612249319837881569585812759467291755314682518714528569 231404359845775746985748039345677748242309854210746050623711418779 541821530464749835819412673987675591655439460770629145711964776865 42167660429831652624386837205668069375 gesucht, dann sind wegen 1000 = 23 · 53 die Zahlen: 1 http://www.mersenne.org/math.htm 2 Die möglichen Faktoren haben die Form das Sieb des Eratosthenes und der 2np + 1 p−1 und dahingehend sind für die Suche Algorithmus angepasst. 3 Aktuell wurde im September 2006 die Zahl 232582657 − 1 als 44. Mersenne Primzahl bestätigt. 43 M2 M4 M5 M8 M10 M20 M25 M40 M50 M100 M125 M200 M250 = 22 = 24 = 25 = 28 = 210 = 220 = 225 = 240 = 250 = 2100 = 2125 = 2200 = 2250 − − − − − − − − − − − − − M500 = 2500 − 1 = 3 1 = 15 1 = 31 1 = 255 1 = 1023 1 = 1048575 1 = 33554431 1 = 1099511627775 1 = 1125899906842623 1 = 1267650600228229401496703205375 1 = 42535295865117307932921825928971026431 1 = M100 · 1267650600228229401496703205377 1 = M125 · 3 · 11 · 251 · 4051 · 229668251 5519485418336288303251 1 = M250 · 54 · 41 · 101 · 7001 · 8101 · 28001 · 96001· 268501 · 3775501 · 47970133603445383501· 94291866932171243501 alle Teiler von M1000 . Da bis auf M2 und M5 alle angegebenen Teiler von M1000 wiederum zusammengesetzte Zahlen sind, ist die vollständige Zerlegung von M1000 in Primfaktoren eine Fleiÿarbeit, aber nicht wirklich aufwändig. 4.2 Primzahltest In diesem Abschnitt werden zwei Algorithmen vorgestellt, mit denen man testen kann, ob eine gegebene Zahl eine Primzahl oder zusammengesetzt ist. Der erste Algorithmus, der Miller-Rabin-Test, ist ein probabilistischer Algorithmus und der Primzahltest von Agrawal, Kayal und Saxena ist ein deterministischer Algorithmus. Das Testen von Zahlen auf ihre Primalität hin ist ein sehr wichtiges Hilfsmittel beim Faktorisieren von Zahlen. Die beiden Fragen: Ist eine Zahl eine Primzahl? und Wie lauten die Primfaktoren einer Zahl? 44 sind zwei sehr naheliegende Probleme, deren Beantwortung im Aufwand jedoch vollkommen unterschiedlich ist. Die Beantwortung der ersten Frage nach der Primalität einer Zahl liegt in P (siehe 4.2.2). Die Komplexitätsklasse für das Faktorisierungsproblem ist nicht bekannt; es sieht aber anhand der bisher vorliegenden Faktorisierungsalgorithmen danach aus, dass dieses Problem in N P und nicht in P liegt. Damit lässt sich praktisch gesehen relativ schnell feststellen, ob eine Zahl eine Primzahl ist, aber die Zerlegung einer Zahl in ihre Primfaktoren kann exponentiellen Aufwand erfordern. Daher wird vor Einsatz eines Faktorisierungsalgorithmus auf groÿe unbekannte Zahlen getestet, ob eine Primzahl vorliegt oder nicht. Bei einer Primzahl macht der Versuch, die Zahl in ihre Primfaktoren zu zerlegen, keinen Sinn, da eine Primzahl per Denition eben keine weiteren Teiler hat. 4.2.1 Miller Rabin Test Der Miller Rabin Test (siehe [Miller 76] und [Rabin 80]) setzt Zufallszahlen ein und ist deshalb ein so genannter probabilistischer Algorithmus. Weiterhin ist es so, dass bei einem Test einer Zahl auf ihre Primalität hin das Ergebnis, dass die getestete Zahl keine Primzahl ist, immer wahr ist, allerdings ist das Ergebnis, dass es sich um eine Primzahl handelt, nicht immer wahr. Probabilistische Algorithmen, die mit einer nach oben beschränkten Wahrscheinlichkeit falsche Ergebnisse liefern, nennt man Monte Carlo Algorithmen. Der Miller Rabin Test läuft sehr schnell4 ab, so dass man den Test mehrmals wiederholt und damit sehr kleine Werte in der Fehlerwahrscheinlichkeit erreicht. Die Fehlerwahrscheinlichkeit liegt bei höchstens 25%. Führt man den Test zehnmal aus, so sinkt die Fehlerwahrscheinlichkeit auf unter 0, 9 · 10−6 , also weniger als 1 zu einer Million. Der Test lässt sich natürlich für noch geringere Fehlerwahrscheinlichkeiten mehr als zehnmal wiederholen. Bei groÿen zu testenden Zahlen ist die Fehlerwahrscheinlichkeit von 25% zu hoch angesetzt. Beispielsweise liegt bei einer Zahl der Länge 256 Bit und einem sechsfachen Test die Fehlerwahrscheinlichkeit unter 1 zu 251 . Weitere Einzelheiten dazu nden sich in [Damgård 93] und [Landrock 93]. Der Algorithmus verwendet den kleinen Satz von Fermat und die Theo4 Die Komplexität ist O((log n)3 ). 45 rie der quadratischen Reste in Zp . Gegeben ist eine zu testende ungerade natürliche Zahl n ≥ 3. Für diese Zahl n wird jetzt folgende Darstellung mit möglichst groÿem k und damit ungeradem m ermittelt. n − 1 = 2k · m Dann wird zufällig ein z ∈ {1, 2, ..., n − 1} gewählt und x0 = z m mod n berechnet. Wenn x0 ≡ 1 mod n gilt, dann wird das Ergebnis n ist eine Primzahl. ausgegeben, ansonsten wird, bis ein Ergebnis vorliegt, aufsteigend für jedes i ∈ {0, 1, 2, ..., k} die Kongruenz xi ≡ −1 mod n überprüft. Wenn das der Fall ist, dann wird das Ergebnis n ist eine Primzahl. ausgegeben, ansonsten wird xi = (xi−1 )2 mod n berechnet. Wenn i = k erreicht wird und sich kein positives Ergebnis ergibt, dann wird das Ergebnis n ist eine zusammengesetzte Zahl. ausgegeben. Für einen eventuellen erneuten Testdurchlauf wird dann eine neue Zufallszahl z gewählt. Sei als Beispiel n = 257, dann ist 257 − 1 = 28 · 1 und damit k = 8 und m = 1. Aus der Menge {0, 1, 2, . . . , 256} sei für z zufällig die Zahl 39 gewählt. Dann ist x0 = 391 mod 257 = 39 und das führt zur Inkongruenz: 39 6≡ 1 mod 257, also sind für i ∈ {0, 1, 2, . . . , 8} die xi zu berechnen und die Kongruenz xi ≡ −1 mod 257 zu überprüfen. x0 x1 x2 x3 x4 x5 x6 x7 = = = = = = = = 2 39 2362 1842 1892 2552 42 162 mod 257 mod 257 mod 257 mod 257 mod 257 mod 257 mod 257 = = = = = = = 39 236 184 189 255 255 16 256 ⇒ ⇒ ⇒ ⇒ ⇒ ⇒ ⇒ ⇒ Damit terminiert der Algorithmus bei x7 und wird ausgegeben. 46 39 236 184 189 255 4 16 256 6≡ 6 ≡ 6 ≡ 6 ≡ 6 ≡ 6 ≡ 6 ≡ ≡ −1 mod 257 −1 mod 257 −1 mod 257 −1 mod 257 −1 mod 257 −1 mod 257 −1 mod 257 −1 mod 257 257 ist eine Primzahl. 4.2.2 Der Primzahltest von Agrawal, Kayal und Saxena Der Primzahltest von Manindra Agrawal, Neeraj Kayal und Nitin Saxena (siehe [Agrawal 02]), abgekürzt auch als AKS-Algorithmus bezeichnet, ist ein deterministischer Algorithmus, der in Polynomzeit entscheidet, ob eine vorgelegte Zahl eine Primzahl ist oder nicht. Bis zur Veröentlichung im August 2002 war unklar, ob die Frage nach der Primalität einer Zahl in P oder N P liegt. Das ist auch der Grund für die Bekanntheit dieses Algorithmus, da er zeitgleich diese wichtige theoretische Frage beantwortet hat. Wirklich praktischen Nutzen hat der Algorithmus derzeit allerdings nicht. Seine asymptotische Laufzeit liegt in der hier vorgestellten originalen Fassung bei O(log12+ n). In [Bernstein 03] sind Änderungen des AKSAlgorithmus vorgestellt, die die Laufzeit im allgemeinen Fall auf O(log6+ n) und im Fall spezieller Zahlen auf O(log4+ n) verbessern. Der Algorithmus läuft in drei Schritten ab. Gegeben sei eine natürliche Zahl n. Im ersten Schritt wird überprüft, ob n eine perfekte Potenz ist, also ob n = pa für a ∈ N, a ≥ 2 und p ∈ P gilt. Wenn das zutrit, wird das Ergebnis n ist eine zusammengesetzte Zahl. ausgegeben. Im zweiten Schritt wird zuerst das kleinste r ∈ N mit ggT (n, r) = 1 und or (n) > 4 · log2 n berechnet5 und dann überprüft, ob 1 < ggT (c, n) < n für ein c < r gilt. Wenn das zutrit, wird das Ergebnis n ist eine zusammengesetzte Zahl. ausgegeben. Wenn n ≤ r ist6 ist, dann wird das Ergebnis n ist eine Primzahl. ausgegeben. ko n jp φ(r) · log n überprüft, Im dritten Schritt wird für jedes d ∈ 1, 2, ..., ob (X + d)n 6≡ X n + d (mod X r − 1, n) ist. Wenn ja, dann wird das Ergebnis n ist eine zusammengesetzte Zahl. und ansonsten n ist eine Primzahl. ausgegeben. Für ausführliche Informationen zu diesem Algorithmus siehe [Wachter 05]. 5o r (n) ist die Ordnung von 6 Das ist nur relevant für n mod r n ≤ 5.690.034. 47 4.3 Klassische Algorithmen In diesem Abschnitt werden klassische Algorithmen vorgestellt. Klassisch bedeutet in diesem Fall, dass die Algorithmen oft schon sehr lange bekannt sind und damit aus einer Zeit stammen, als es zum Rechnen noch keine Hilfe durch den Computer gab. Das bedeutet aber auch, dass man diese Algorithmen recht gut verstehen kann, sie meist alle deterministisch sind, und man kann sie mit Papier und Bleistift ausführen. In heutigen Implementationen sind sie bis auf die Probedivision nicht mehr zu nden. Das heiÿt aber nicht, dass es sich nicht mehr lohnt, diese Algorithmen zu studieren. Viele Ideen, die in diesen Algorithmen stecken, bestimmen auch heute noch die grundlegenden Gedanken, auf die ein schneller Algorithmus für den Computereinsatz basiert. 4.3.1 Probedivision Das älteste Verfahren, um die Primfaktoren einer Zahl zu nden, ist die Probedivision. Intuitiv würde jeder, der die Aufgabe bekommt, Teiler einer Zahl zu suchen und keine Kenntnisse auf diesem Gebiet hat, anfangen, potenzielle Teiler auszuprobieren. Genau dieses Verfahren ist mit der Bezeichnung Probedivision gemeint. Die gegebene Zahl wird durch einen möglichen Teiler geteilt und wenn man ein Ergebnis ohne Rest erhält, dann hat man eine Lösung bzw. einen Teiler gefunden. Wichtig ist natürlich, welche Zahlen man zur testweisen Division benutzt. √ Der einfachste Ansatz ist, alle Zahlen 2, 3, 4, ..., b nc zu nehmen. Intuitiv nimmt man hier die Zahlen in aufsteigender Reihenfolge. Das hat auch zwei gute Gründe. Einerseits ist die Division bei kleinen Zahlen einfacher und hier kann man auch Teilbarkeitsregeln7 anwenden. Andererseits sind Teiler von Zahlen im Bereich kleiner Zahlen häuger zu nden als im Bereich groÿer Zahlen. Allerdings ist es sehr inezient, alle natürlichen Zahlen bis zu einer Grenze auszuprobieren. Wenn man schon die Division mit der 2 ausgeführt hat, dann sind die Zahlen 4, 6, 8, ... überüssig, weil sie keine Teiler mehr sein 7 Beispielsweise enden durch 2 teilbare Zahlen auf 0, 2, 4, 6 oder 8 und durch 3 teilbare 3 teilbar ist. Einzelheiten sind in Zahlen haben eine Quersumme, die ebenfalls durch [Padberg 96, S. 104 - 113] zu nden. 48 können. Ebenso sieht es bei der 3 mit den Zahlen 6, 9, 12, ... aus. Um dies auszuschlieÿen, ist es sinnvoll, zur Probedivision nur Zahlen der Form 6n ± 1 zu betrachten. Sehr einfach und schnell lassen sich diese Zahlen8 erzeugen, indem man beginnend bei der 5 abwechselnd 2 und 4 addiert. Es bleiben aber immer noch überüssige Divisionen, die man mit diesen Zahlen durchführt9 . Eine andere Möglichkeit besteht darin, Primzahlen bis zu einer bestimmten Grenze zu erzeugen (siehe Abschnitt 4.3.2) und für die Probedivision zu speichern10 . Der Unterschied hinsichtlich der Divisionen bis 103 bei diesen beiden Ansätzen sind 166 überüssige Divisionen11 . Wenn mittels Probedivision ein Primfaktor p gefunden wurde, dann ist √ es sinnvoll, gleich alle pk ≤ b nc zu testen, damit bei der weiteren Suche nach Faktoren die Probedivision bei der nachfolgenden Primzahl von p begonnen werden kann. Die Probedivision ist nur für Zahlen bis ≈ 107 sinnvoll, da der Algorithmus für gröÿere Zahlen zu langsam wird. Wenn die Primzahlen in einer Tabelle abgespeichert werden, dann macht mit zunehmender Gröÿe auch der Speicherverbrauch Probleme12 . 4.3.2 Sieb des Eratosthenes Das Sieb des Eratosthenes ist nach seinem Ernder Eratosthenes von Cyrene benannt. Erastosthenes lebte vor ungefähr 2500 Jahren in Alexandria und hat diesen Algorithmus entwickelt, um Primzahlen zu nden. Gleichzeitig gestattet dieser Algorithmus aber auch, die Zerlegung einer Zahl in ihre Primfaktoren zu nden. Die Zahlen werden in aufsteigender Reihenfolge aufgeschrieben. Da die 2 als erste Primzahl bekannt ist, wird die 2 markiert und alle Vielfachen der 2 in der Liste der Zahlen gestrichen. Das ist hier am Beispiel der Zahlen bis 97 veranschaulicht. 8 5, 7, 11, 13, 17, 19, 23, 25, 29, 31, 35, 37, ... 35, 49, 55, ... 9 25, 10 Für eine eziente Speicherung siehe [Riesel 94, S. 7 - 9]. 11 Es gibt 168 Primzahlen und 334 Zahlen der Form 6n ± 1 bis 103 . 12 Primzahlen bis 106 , 109 und 1012 benötigen etwa 59 kByte, 51 MByte und 49 42 GByte. 2 Z 14 Z Z 26 Z Z 38 Z Z 50 Z Z 62 Z Z 74 Z Z 86 Z 3 15 27 39 51 63 75 87 4A Z 16 Z Z 28 Z Z 40 Z Z 52 Z Z 64 Z Z 76 Z Z 88 Z 5 17 29 41 53 65 77 89 6A Z 18 Z Z 30 Z Z 42 Z Z 54 Z Z 66 Z Z 78 Z Z 90 Z 7 19 31 43 55 67 79 91 8A Z 20 Z Z 32 Z Z 44 Z Z 56 Z Z 68 Z Z 80 Z Z 92 Z 9 21 33 45 57 69 81 93 Z 10 Z Z 22 Z Z 34 Z Z 46 Z Z 58 Z Z 70 Z Z 82 Z Z 94 Z 11 23 35 47 59 71 83 95 Z 12 Z Z 24 Z Z 36 Z Z 48 Z Z 60 Z Z 72 Z Z 84 Z Z 96 Z 13 25 37 49 61 73 85 97 Im nächsten Schritt wird die 3 als Primzahl markiert, da sie die nächste Zahl ist und noch nicht gestrichen wurde. Dann werden analog zur 2 alle Vielfachen der 3 gestrichen. 2 3 Z Z 14 15 Z Z Z Z 26 27 Z Z Z Z 38 39 Z Z Z Z 50 51 Z Z Z Z 62 63 Z Z Z Z 74 75 Z Z Z Z 86 87 Z Z 4A Z 16 Z Z 28 Z Z 40 Z Z 52 Z Z 64 Z Z 76 Z Z 88 Z 5 17 29 41 53 65 77 89 6A Z 18 Z Z 30 Z Z 42 Z Z 54 Z Z 66 Z Z 78 Z Z 90 Z 7 19 31 43 55 67 79 91 8A Z 20 Z Z 32 Z Z 44 Z Z 56 Z Z 68 Z Z 80 Z Z 92 Z 9A Z 21 Z Z 33 Z Z 45 Z Z 57 Z Z 69 Z Z 81 Z Z 93 Z Z 10 Z Z 22 Z Z 34 Z Z 46 Z Z 58 Z Z 70 Z Z 82 Z Z 94 Z 11 23 35 47 59 71 83 95 Z 12 Z Z 24 Z Z 84 Z Z 96 Z 13 25 37 49 61 73 85 97 Z 12 Z Z 24 Z Z 25 Z Z 36 Z Z 48 Z Z 60 Z Z 72 Z Im nächsten Schritt geschieht dies ebenso mit der 5. 2 3 Z 14 Z Z 26 Z Z 15 Z Z 27 Z Z 38 Z Z 50 Z Z 39 Z Z 51 Z Z 62 Z Z 74 Z Z 63 Z Z 75 Z Z 86 87 Z Z Z 4A Z 16 Z Z 28 Z Z 40 Z Z 52 Z Z 64 Z Z 76 Z Z 88 Z 5 17 29 41 53 Z 65 Z 77 89 6A Z 18 Z Z 30 Z Z 42 Z Z 54 Z Z 66 Z Z 78 Z Z 90 Z 7 19 31 43 Z 55 Z 67 79 91 8A Z 20 Z Z 32 Z Z 44 Z Z 56 Z Z 68 Z Z 80 Z Z 92 Z 9A Z 21 Z Z 33 Z Z 45 Z Z 57 Z Z 69 Z Z 81 Z Z 93 Z Z 10 Z Z 22 Z Z 34 Z Z 46 Z Z 58 Z Z 70 Z Z 82 Z Z 94 Z 11 23 Z 35 Z 47 59 71 83 Z 95 Z Z 36 Z Z 48 Z Z 60 Z Z 72 Z Z 84 Z Z 96 Z 13 37 49 61 73 Z 85 Z 97 Für die Zahl 7 wird das Verfahren analog durchgeführt. Für die noch nicht gestrichenen Zahlen ist ein weiteres Streichen nicht mehr notwendig, da 50 √ √ auch hier die Schranke b nc bzw. 97 = 9 gilt. Alle weiteren noch nicht gestrichenen Zahlen können ebenfalls als Primzahlen markiert werden. 2 3 Z Z 14 15 Z Z Z Z 26 27 Z Z Z Z 38 39 Z Z Z Z 50 51 Z Z Z Z 62 63 Z Z Z Z 74 75 Z Z Z Z 86 87 Z Z 4A 5 Z 17 16 Z Z 29 28 Z Z 41 40 Z Z 53 52 Z Z Z 64 65 Z Z Z Z 76 77 Z Z Z 89 88 Z 6A 7 Z 19 18 Z Z 31 30 Z Z 43 42 Z Z Z 54 55 Z Z Z 67 66 Z Z 79 78 Z Z Z 90 91 Z Z 8A Z 20 Z Z 32 Z Z 44 Z Z 56 Z Z 68 Z Z 80 Z Z 92 Z 9A Z 21 Z Z 33 Z Z 45 Z Z 57 Z Z 69 Z Z 81 Z Z 93 Z Z 10 Z Z 22 Z Z 34 Z Z 46 Z Z 58 Z Z 70 Z Z 82 Z Z 94 Z Z 13 11 12 Z Z Z 23 24 25 Z Z Z Z 37 35 36 Z Z Z 47 Z 48 49 Z Z Z 61 59 60 Z Z 73 71 72 Z Z Z 83 84 85 Z Z Z Z 97 95 96 Z Z Die Menge der Primzahlen bis 97 ist damit: P97 = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97}. Wenn jetzt nicht nur Primzahlen, sondern auch die Zerlegung einer Zahl n in ihre Primfaktoren gesucht wird, dann muss zusätzlich notiert werden, wann eine Zahl n als Vielfaches welcher Primzahl gestrichen wird. Die Zahl 45 wird beispielsweise als Vielfaches der 3 und der 5 gestrichen. Zusätzlich muss dann aber noch überprüft werden, ob eine der Primzahlen mehrfach die zu zerlegende Zahl teilt. In diesem Beispiel ist das die 3 und zwar genau zweimal. Das Ergebnis lautet dann 45 = 32 · 5. Es sind natürlich auch Zahlenbereiche möglich, die mit Zahlen ≥ 2 beginnen. Sucht man zum Beispiel die Primzahlen zwischen 1900 und 2000, so muss allerdings trotzdem mit der 2 begonnen werden, die zusammengesetzten Zahlen auszusieben. Fertig ist man dann mit den Vielfachen der 43 √ 2000 = 44. Allerdings ist es nicht notwenbzw. die Schranke liegt bei dig, alle Vielfachen der Primzahlen, mit denen gesiebt wird, auszurechnen. Wenn g die untere Intervallgrenze darstellt, dann wird für eine Primzahl p, mit der die zusammengesetzten Zahlen gesiebt werden sollen, die Zahl g durch die betreende Primzahl p mit Rest r geteilt. Ist r = 0, so ist g ein Vielfaches von p und man kann g streichen und mit g + np fortfahren. Hierbei ist n ∈ N. Ansonsten ist die erste Zahl, die gestrichen wird, die Zahl g + r und mit g + r + np wird fortgefahren. 51 Das Verfahren ist dem der Probedivision recht ähnlich; nur wird hier hauptsächlich addiert und nicht dividiert. Zum Finden von Faktoren ist die Probedivision besser geeignet. In [Atkin 04] ist eine andere Siebmethode zum Aunden von Primzahlen beschrieben, die schneller abläuft, weil sie auf Quadraten und nicht auf einfachen Vielfachen beruht. 4.3.3 Euklid Der Euklidische Algorithmus (siehe Abschnitt 2.1.5) kann auch zum Berechnen von Primfaktoren benutzt werden. Dazu werden vorberechnete Werte, nämlich Produkte aus aufeinander folgenden Primzahlen, verwendet. Vor Einsatz des Computers waren das: P0 = P1 = 97 Y 2 199 Y p = 2305567963945518424753102147331756070 p = 3383080509296917481189798760796480670771162183 101 P2 = 293 Y p = 262025664754470334382813071883984477441 211 P3 = 397 Y p = 49766523393936228750138598082752980119549 307 P4 = 499 Y p = 1227453540237014997887615651109181957903188941 401 P5 = P6 = P7 = 599 Y 503 691 Y 601 797 Y p = 253056306993037840092244562196981381959 p = 879031892818978804933065306274691112009314693 p = 16866467815653776127243907167629319108817 701 52 P8 = P9 = 887 Y 809 997 Y p = 83623435734606723958852552002152901629917681 p = 500139990716305530696933027389294139003181. 907 Pi ist hierbei das Produkt aller Primzahlen i·102 < p < (i+1)·102 . Mit den hier angegebenen Zahlen Pi lassen sich dann die Primteiler einer Zahl n bis 1000 nden. Dazu wird mit dem Euklidischen Algorithmus nacheinander für alle Pi der ggT (Pi , n) berechnet. Ist dabei ein Ergebnis gleich 1, so ist keine Primzahl aus dem entsprechenden Intervall Teiler der Zahl n. Ist das Ergebnis > 1, dann sieht man an der Zerlegung des Ergebnisses, welche Primzahlen Teiler der Zahl n sind. Ist beispielsweise bekannt oder wird vermutet, dass die Zahl: n = 1227453540237014997887615651109181957903188941 einen Primteiler 3300 < p < 3400 besitzt, dann wird mit dem Euklidischen Algorithmus der gröÿte gemeinsame Teiler aus: P33 = 3391 Y p = 73008299705318135316017967460279265583184615390678519 3301 und n ermittelt: ggT (P33 , n) = 37197558941. Das ist ein recht groÿer Teiler; allerdings ist bekannt, dass diese Zahl nur Primteiler 3300 < p < 3400 haben kann. Es gibt also nur 15 mögliche Primteiler, die zudem wegen der Kenntnis von P33 bekannt sind. Die weitere Zerlegung lautet dann: ggT (P33 , n) = 33132 · 3389 und nach der Division von n durch ggT (P33 , n) ist folgendes Zwischenergebnis13 gefunden: n = 33132 · 3389 · 618970019642690137449562111. 13 618970019642690137449562111 = 289 − 1 ist die 89te Mersenne Zahl und zugleich eine Primzahl. Damit ist dies hier das engültige Ergebnis und die Zerlegung von Primfaktoren. 53 n in 4.3.4 Fermat Die zugrundeliegende Idee ist es, dass man eine Zahl als Dierenz zweier Quadrate darstellen kann: n = x2 − y 2 . Für eine ungerade und zusammengesetzte Zahl n = a · b mit a ≥ b sollen die beiden Faktoren a und b berechnet werden. Der Zusammenhang der beiden Quadratzahlen zu den Faktoren besteht durch die so genannte dritte binomischen Formel: n = x2 − y 2 = (x + y)(x − y) = a · b. Eine wichtige und naheliegende Frage ist hier, ob es eine Darstellung als Dierenz zweier Quadrate für jede zusammengesetzte ungerade Zahl gibt? a=x+y b=x−y Addieren und Subtrahieren der Gleichungen ergibt: a + b = 2x a − b = 2y. Die Gleichungen umstellen nach x und y liefert: x= a+b 2 y= a−b . 2 Aus diesen Gleichungen folgt: 2 2 a−b a2 + 2ab + b2 a2 − 2ab + b2 a+b 2 2 − = − = a · b. n = x −y = 2 2 4 4 Demnach gibt es diese Form der Zerlegung und damit ndet man bei diesem Algorithmus immer eine Lösung. Der erste Wert für z , mit dem man die Suche startet, berechnet sich mit: z0 = √ n + 1. 54 Für den Fall, dass es sich bei n um eine Quadratzahl handelt, ist man √ √ an dieser Stelle fertig, was man sofort an b nc = n erkennt. Ansonsten √ haben wir mit z0 die kleinste natürliche Zahl z > n. Das bedeutet, dass √ mit diesem Verfahren die Teilersuche in der Nähe von n beginnt. Jetzt wird y02 = n−z02 berechnet. Der folgende Schritt wird solange durchgeführt, bis eine Zahl yi2 gefunden wird, die eine Quadratzahl ist14 : zi = zi−1 + 1 yi2 = zi2 − n. Dabei ist es nicht nötig, in jedem Schritt zi zu quadrieren, weil: 2 2 zi2 − n = (zi−1 + 1)2 − n = zi−1 + 2zi−1 + 1 − n = yi−1 + 2zi−1 + 1 gilt und somit: 2 yi2 = yi−1 + 2zi−1 + 1. Wenn yi2 die gesuchte Quadratzahl ist, dann lassen sich die Werte für a und b leicht angeben. Ein kleines Beispiel soll dieses Verfahren verdeutlichen. √ Sei n = 803 und deshalb z0 = 803 + 1 = 29 und y02 = 292 − 803 = 38. Eine Tabelle zur weiteren Berechnung sieht dann folgendermaÿen aus. z 2z + 1 29 59 30 61 31 63 32 65 33 67 34 69 35 71 y2 38 97 158 221 286 353 422 z 2z + 1 36 73 37 75 38 77 39 79 40 81 41 83 42 85 y2 493 566 641 718 797 878 961 In der letzten Zeile ist die 961 eine Quadratzahl und n = 422 − 961 = 422 − 312 . Die beiden Werte für a und b sind dann: a = 42 + 31 und b = 42 − 31. 14 Der Test auf eine Quadratzahl lässt sich recht schnell realisieren, weil Quadratzahlen an den letzten beiden Ziern erkannt werden können. Diese sind aus der Menge {00, 01, 04, 09, 16, 21, 24, 25, 29, 36, 41, 44, 49, 56, 61, 64, 69, 76, 81, 84, 89, 96}. nungen im Computer wird dies im Dualsystem dann noch einfacher. 55 Für Berech- Die gesuchte Zerlegung der Zahl n in zwei Faktoren lautet damit n = 73·11. Verbesserungen bei diesem Algorithmus wurden von Kraïtchik vorgenommen. Die grundlegende Idee dieses Algorithmus wird auch bei den Kettenbrüchen (siehe Abschnitt 4.4.2), dem quadratischem Sieb (siehe Abschnitt 4.4.4) und dem Zahlkörpersieb (siehe Abschnitt 4.4.5) eingesetzt. 4.3.5 Kraïtchik Maurice Kraïtchik verbesserte 1926 den Algorithmus von Fermat (siehe [Kraïtchik 26]), indem bei der Suche nach Faktoren mittels der Gleichung: x2 = y 2 − n zur Kongruenz: x2 ≡ y 2 mod n übergegangen wurde. Das bedeutet, dass die Zahl n Teiler von x2 − y 2 = (x − y) · (x + y) ist. Damit besteht die Möglichkeit, dass beim Finden solcher Paare (x, y) über ggT (x − y, n) und ggT (x + y, n) ein nichttrivialer Faktor von n ermittelt werden kann. Im Unterschied zum Algorithmus von Fermat gibt es hier mehr als eine Lösung, da bei Kongruenzen auch Vielfache wiederum Lösungen darstellen. Allerdings werden hier auch die trivialen Lösungen 1 und n gefunden. Sei n hier die Zahl 221 und dazu folgende Kongruenz gefunden: 7042 ≡ 2622 mod 221. Dann ergibt sich: ggT (704 + 262, 221) = 1 und ggT (704 − 262, 221) = 221. Bei der Kongruenz: 7042 ≡ 2452 mod 221 ergibt sich: ggT (704 + 245, 221) = 13 56 und ggT (704 − 245, 221) = 17. Damit ist das gesuchte Ergebnis 221 = 13 · 17. Das Suchen nach Zahlenpaare (x, y), die die Kongruenz x2 ≡ y 2 mod n erfüllen und nach Möglichkeit nicht zu den trivialen Teilern führen, ist der grundlegende Gedanke für die Algorithmen in den Abschnitten 4.4.2, 4.4.4 und 4.4.5. Die jeweiligen eingesetzten Methoden entsprechen dann den Bezeichnungen der Algorithmen; Kettenbrüche, quadratisches Sieb und Zahlkörpersieb. 4.3.6 Lehman Die Probedivision hat den Vorteil, dass kleine und damit häuger vorkommende Primfaktoren schnell erkannt werden. Nachteilig wirkt sich dies aus, wenn eine Zahl groÿe Primfaktoren hat. Aus diesen Gründen wird die Probedivision anfangs eingesetzt, um dann nach einer bestimmten Zeit oder Grenze zu einem anderen Verfahren zu wechseln. Der Fermat Algorithmus √ dagegen beginnt mit seiner Suche bei b nc + 1. Durch Kombination beider Verfahren ist es möglich, die Suche nach Primfaktoren zu verbessern. Russell Lehman stellte 1974 in [Lehman 74] so einen Algorithmus vor. √ Beim Fermat Algorithmus werden ab b nc + 1 alle Zahlen x getestet, ob x2 − n eine Quadratzahl ist. Wenn bekannt ist, dass n ≡ 2 mod 3 ist, dann muss x durch drei teilbar sein. Mit diesem Wissen lässt sich die Suche beschleunigen. Im Beispiel zum Fermat Algorithmus wurde die Zahl 803 faktorisiert (siehe Abschnitt 4.3.4). Die Suche wurde bei 29 begonnen und mit 42 das Ergebnis gefunden. Das sind 14 Schritte. Da x durch 3 teilbar sein muss, ist es sinnvoll, nur die Zahlen 30, 33, 36, 39 und 42 zu testen. Damit wäre das Ergebnis in 5 Schritten gefunden. Entsprechend besteht die Möglichkeit, die Zahl n mit 3 zu multiplizieren. In dem Fall arbeitet der Fermat Algorithmus wie folgt: 57 2409 = j 3 · 803 k √ x0 = 2409 + 1 = 50 502 − 2409 = 91 512 − 2409 = 192 522 − 2409 = 295 532 − 2409 = 400 = 202 2409 = (53 − 20)(53 + 20) 2409 = 33 · 73 803 = 11 · 73. Weiterhin ist mit n ≡ 1 mod 4 bekannt, dass x keine gerade Zahl sein kann (siehe [Crandall 05, S. 226]). 58 Diese Gedanken sind beim Lehman Algorithmus umgesetzt. 1. Gegeben ist eine Zahl n > 21. 2. Probedivision a) Wenn ein Teiler m ≤ √ 3 n mittels Probedivision gefunden wird, beende das Verfahren und gib m aus. b) Gehe zu Punkt 3. l √ m j √ √ 3 3. Für 1 ≤ k ≤ d n e und 2 kn ≤ x ≤ 2 kn + √ y = x2 − 4kn eine ganze Zahl ist. k √ 6n √ 4 k teste, ob a) Wenn y eine ganze Zahl ist, dann beende das Verfahren und gib ggT (x + y, n) aus. b) Beende das Verfahren und gib n ist eine P rimzahl aus. Um die Funktion des Algorithmus besser zu verstehen, soll hier die Korrektheit gezeigt werden. Für den Fall, dass bei einer zusammengesetzten Zahl n nicht bereits durch die Probedivision ein Faktor gefunden wurde, ist die Zahl n das Produkt √ zweier Primzahlen p1 und p2 und es gilt n = p1 · p2 mit 3 n < p1 ≤ p2 . √ Angenommen, es gibt ein k ≤ d 3 n e, so dass k = c · d mit c, d ∈ N gilt und: √ |cp2 − dp1 | < 3 n ist. Tatsächlich gibt es für jede Grenze (siehe [Hardy 68, S. 30, Theorem √ q c p1 1 36]) G > 1 Zahlen c und d mit d ≤ G und d − p2 < dG . Mit G = 6 n · pp21 und Multiplikation mit dp2 ergibt sich: p2 |cp2 − dp1 | < √ q . 6 n · pp21 59 Mit √ 1 3 n = (p1 p2 ) 3 1 1 = (p1 p2 ) 2 · (p1 p2 )− 6 1 p1 1 = ( ) 2 · p2 · (p1 p2 )− 6 p2 p2 = 1 1 (p1 p2 ) 6 · ( pp21 ) 2 p2 = √ q 6 n · pp21 ergibt sich: √ p2 |cp2 − dp1 | < √ q = 3 n. 6 n · pp21 √ 3 Zu zeigen ist jetzt, dass k = cd ≤ d n e ist. Aus dc − mit Addition von d2 ergibt: Mit d ≤ G ist d G p1 p2 die Ungleichung < p1 p2 + 1 dG < 1 dG ergibt sich und Multiplikation mit c p1 d k = ab = d2 < d2 + . d p2 G √ q ≤ 1 und wegen G = 6 n · pp21 ist: 2 2 d ≤G = und damit: c d p1 p2 √ 6 r n· p2 p1 2 < p2 √ · 3n p1 √ p1 2 d p1 p2 √ d + < · · 3n+1= 3n+1 p2 G p2 p1 und insgesamt: √ c p1 d p1 p2 √ · · 3n+1= 3n+1 k = cd = d2 < d2 + < d p2 G p2 p1 √ und somit ist k ≤ d 3 n e. Sei x = cp2 + dp1 und y = |cp2 − dp1 |. Dann ist: 60 4kn = 4cdp1 p2 = 2cp2 dp1 + 2cp2 dp1 = 2cp2 dp1 + 2cp2 dp1 + (cp2 )2 − (cp2 )2 + (dp1 )2 − (dp1 )2 = (cp2 )2 + 2cp2 dp1 + (dp1 )2 − (cp2 )2 − 2cp2 dp1 + (dp1 )2 = (cp2 + dp1 )2 − (cp2 − dp1 )2 = x2 − y 2 . Zu zeigen ist, dass √ 6 √ √ n 2 kn ≤ x < 2 kn + √ 4 k gilt. Aus kn = cp2 · dp1 folgt: √ 2 kn ≤ cp2 + dp1 = x √ und sei x = 2 kn + E , dann ist: √ √ 2 4kn + 4E kn ≤ 2 kn + E = x2 = 4kn + y 2 und mit |cp2 − dp1 | < mit: √ 3 n und y = |cp2 − dp1 | folgt y 2 < √ 4E kn < √ 3 n2 ⇒ √ 3 n2 , so dass sich √ 6 n E< √ 4 k ergibt. Weiterhin ist zu zeigen, dass bei der Ausgabe von ggT (x+y, n) durch den Algorithmus es sich um einen nichttrivialen Teiler von n handelt. Da n das Produkt (x + y)(x − y) teilt, bleibt zu zeigen, dass x + y < n ist. Das folgt aus: √ √ q √ 6 6 √ √ n √ n 3 3 x + y < 2 kn + √ + n < 2 + 3 n < n. n + 1 · n+ p √ 3 4 k 4 ( n + 1) · n Die letzte Ungleichung gilt für n > 21. Das Verfahren soll an einem Beispiel demonstriert werden. Sei n = 823301 und damit ist k ∈ {1, 2, 3, ..., 94}. 61 ⇒ x = 1815 ⇒ ⇒ x = 1816 ⇒ ⇒ x = 1817 ⇒ ⇒ x = 2567 ⇒ ⇒ x = 2568 ⇒ k= 3 ⇒ x = 3144 ⇒ k= 4 ⇒ x = 3630 ⇒ k= 5 ⇒ x = 4058 ⇒ k= 6 ⇒ x = 4446 ⇒ k= 7 ⇒ x = 4802 ⇒ k= 8 ⇒ x = 5133 ⇒ k = 10 ⇒ x = 5739 ⇒ k = 11 ⇒ x = 6019 ⇒ k = 12 ⇒ x = 6287 ⇒ k= 1 k= 2 √ √ √ √ √ √ √ √ √ √ √ √ √ √ x2 − 4 · 823301 ≈ 31, 953 x2 − 4 · 823301 ≈ 68, 206 x2 − 4 · 823301 ≈ 91, 022 x2 − 8 · 823301 ≈ 55, 507 x2 − 8 · 823301 ≈ 90, 642 x2 − 12 · 823301 ≈ 71, 582 x2 − 16 · 823301 ≈ 63, 906 x2 − 20 · 823301 ≈ 36, 661 x2 − 24 · 823301 ≈ 87, 704 x2 − 28 · 823301 ≈ 82, 316 x2 − 32 · 823301 ≈ 45, 354 x2 − 40 · 823301 ≈ 63, 883 x2 − 44 · 823301 ≈ 55, 830 x2 − 48 · 823301 = 89 Mit ggT (6287 + 89, 823301) = 797 ist dann die Zerlegung in Primfaktoren n = 823301 = 797 · 1033 gefunden. √ Die Komplexität des Verfahrens ist O( 3 n · ln(ln(n))). Laufzeitverbesserungen lassen sich bei geeigneter Wahl15 von k erzielen. Weitere Einzelheiten nden sich in [Lehman 74]. In [McKee 99] ist ein weiteres Verfahren zu nden, welches die Probedivision und einen veränderten Fermat Algorithmus kombiniert. Hier wird √ bei Einsatz von Heuristik eine Komplexität von O( 4+ n) angegeben. 4.3.7 Gauss Das Verfahren von Carl Friedrich Gauss ist ein Siebverfahren und damit die Grundlage für weitere, diese Technik nutzende Algorithmen. Für eine zu faktorisierende Zahl n werden quadratische Reste16 gesucht, um damit als Faktoren in Frage kommende Primzahlen auszuschlieÿen. Das führt dazu, 15 zuerst Werte für k mit vielen Teilern einsetzen 16 siehe Abschnitt 2.1.9 62 dass die Zahl möglicher Primfaktoren soweit reduziert wird, dass für die restlichen Primfaktoren die Probedivision auch für groÿe Zahlen genutzt werden kann. Der grundlegende Gedanke ist folgender. Wenn die ganze Zahl a quadratischer Rest17 von ungefähr der Hälfte aller Primzahlen ist, dann ist wegen des Satzes von Dirichlet (siehe Abschnitt 2.1.8) und weil a ≡ x2 mod n für jeden Primfaktor p von n a ≡ x2 mod p impliziert, a auch quadratischer Rest ungefähr der Hälfte aller Primfaktoren von n. Auf Grund statistischer Gesetze werden bei k unabhängigen quadratischen Resten mod n 2k Divisoren bei der Division mit möglichen Primfaktoren ausgeschlossen. Bei 20 solcher gesuchten quadratischen Reste wird damit bei der Probedivision die Zahl notwendiger Divisionen um den Faktor von ungefähr 220 ≈ 1000000 reduziert. Quadratische Reste zu nden, ist relativ einfach. Man nimmt eine natürliche Zahl und quadriert diese diese fortlaufend mod n. Schwieriger ist es, die Primzahlen zu nden, die mit diesen quadratischen Resten ausgeschlossen werden können. Sinnvoll ist es auch, kleine quadratische Reste zu nden. 2 Wenn a ≡ x2 mod n ist, dann j√ giltk x − a = k · n für einige k ∈ Z. Wird k · n gewählt, dann erhält man kleine Werte nun ein x in der Nähe von für a. Das Produkt zweier quadratischer Reste ist wieder ein quadratischer Rest18 . Gesucht werden dann die quadratischen Reste, die sich in kleine Primfaktoren zerlegen lassen. Diese quadratischen Reste lassen sich dann mittels Multiplikation und Reduktion von Quadraten in den Faktoren zu neuen quadratischen Resten kombinieren. Das soll am folgenden Beispiel19 verdeutlicht werden. Sei die Zahl n = 12007001 gegeben. Die Suche nach quadratischen Resten wird j√mit dem Ausk 2 20 2 druck der Form k·n = x −a durchgeführt. Dabei ist x ≈ k · 12007001 und für a soll gelten |a| < 50 000. Weiterhin soll a nur Primfaktoren p < 100 17 Eine Tabelle solcher Zahlen [Riesel 94, S. 429 - 435]. 18 (x2 ≡ a mod p) · (x2 ≡ b mod 1 2 19 aus [Riesel 94, S. 151 u. 152] 20 √ a mit den dazugehörigen Primzahlen ndet sich in p) ⇒ (x1 · x2 )2 ≡ a · b mod p 12007001 = 3465 63 besitzen. Das führt zu folgenden Ergebnissen. n n n n n 2·n 2·n 3·n 5·n 8·n 10 · n 11 · n 11 · n 14 · n 14 · n 17 · n 19 · n 21 · n = = = = = = = = = = = = = = = = = = 34592 34612 34632 34642 34652 48982 49002 60032 77452 97992 109572 114912 114922 129642 129652 142872 151052 158792 + + + + + + + − + + + + + + + + − + 42320 28480 14632 7705 776 23598 4002 15006 49980 35607 14161 33930 10947 32718 6789 648 28006 4380 = = = = = = = = = = = = = = = = = = x2 + 24 · 5 · 232 x2 + 26 · 5 · 89 x2 + 23 · 31 · 592 x2 + 5 · 23 · 67 x2 + 23 · 97 x2 + 2 · 33 · 19 · 23 x2 + 2 · 3 · 23 · 29 x2 − 2 · 3 · 41 · 61 x2 + 22 · 3 · 5 · 72 · 17 x2 + 3 · 11 · 13 · 83 x2 + 72 · 172 x2 + 2 · 32 · 5 · 13 · 29 x2 + 3 · 41 · 89 x2 + 2 · 3 · 7 · 19 · 41 x2 + 3 · 31 · 73 x2 + 23 · 34 x2 − 2 · 11 · 19 · 67 x2 + 22 · 3 · 5 · 73 Nun können systematisch die gefundenen quadratischen Reste zu neuen kombiniert werden. 10 · n n n 17 · n n 14 · n 21 · n n 3·n 11 · n = = = = = = = = = = x2 + 72 · 172 ⇒ a 2 4 2 x + 2 · 5 · 23 ⇒ a 2 6 x + 2 · 5 · 89 ⇒ a 2 3 4 x +2 ·3 ⇒ a 2 3 x + 2 · 97 ⇒ a 2 x + 3 · 31 · 73 und x2 + 22 · 3 · 5 · 73 ⇒ a 2 3 x + 2 · 31 · 59 ⇒ a 2 x − 2 · 3 · 41 · 61 und x2 + 3 · 41 · 89 ⇒ a 64 = −1 = 5 = 89 = 2 = 97 = = 31 59 = 61 Bisher sind folgende quadratische Reste a für die Zahl n bekannt21 : −1, 2, 5, 31, 59, 61, 89, 97. Mit diesen Informationen lassen sich jetzt Aussagen zu den möglichen Primteilern von n angeben. Da −1 ein quadratischer Rest von n ist, können nur Primzahlen der Form p = 4k + 1 die Zahl n teilen. Zusätzlich mit dem quadratischen Rest 2 ist bekannt, dass die Primteiler die Form p = 8k ± 1 haben müssen. Zusammengefasst ergibt sich daraus die Bedingung p = 8k +1. Der quadratische Rest 5 schränkt die möglichen Primteiler weiter ein. Diese müssen dann einer der vier Formen p = 20k ± 1 und p = 20k ± 9 entsprechen. Nochmals zusammengefasst ergibt sich, dass die Primteiler der Form p = 40k + 1 oder p = 40k + 9 sein müssen. Weitere Einschränkungen durch andere quadratische Reste a führen zu unpraktikabel groÿen Werten. Jetzt werden mit der Berechnung des Legendre-Symbols (siehe Abschnitt √ 12007001 = 3465 der Form p = 40k + 1 und 2.1.10) die Primzahlen < p = 40k + 9 bestimmt, für welche die Werte a quadratische Reste sind. Ist einer der Werte a kein quadratischer Rest von einer Primzahl p, so wird diese Primzahl als möglicher Teiler der Zahl n ausgeschlossen und nicht weiter betrachtet. Für jeden betrachteten quadratischen Rest a werden bei diesem Verfahren ungefähr die Hälfte alle möglichen Primteiler ausgeschlossen. Wichtig dabei ist, dass die benutzten quadratischen Reste von einander unabhängig sind. Wurden zwei quadratische Reste a1 und a2 bereits zum Ausschluss von Primteilern benutzt, so wird durch den quadratischen Rest a1 a2 keine weitere Primzahl mehr ausgeschlossen. Im Beispiel haben folgende Primzahlen p < 3465 der Form p = 40k + 1 und p = 40k + 9 für das Legendre-Symbol ( 31 ) den Wert 1: p {41, 281, 521, 769, 1249, 1289, 1321, 1361, 1409, 1489, 1601, 1609, 1721, 2081, 2281, 2521, 2609, 2729, 3001, 3089, 3169, 3209, 3449}. Im nächsten Schritt bleiben für ( 59 ) = 1 folgende Primzahlen: p {41, 281, 521, 1361, 1609, 2081, 2729, 3001, 3089, 3449}. 21 eigentlich −5, −89, −2, ..., aber mit Kenntnis von hörigen positiven Zahlen bekannt 65 a = −1 sind dann auch die dazuge- Für ( 61 ) = 1 bleiben noch fünf Primzahlen: p {41, 1361, 1609, 2729, 3001, 3089}. Durch den quadratischen Rest 89 bleibt nur noch ein möglicher Primteiler 97 p = 3001 übrig. Zusätzlich lässt sich noch ( 3001 ) = 1 überprüfen. Somit ist, falls n eine zusammengesetzte Zahl ist, 3001 ein Teiler von n. Als Ergebnis erhält man: n = 12007001 = 3001 · 4001. Für den praktischen Einsatz ist dieses Verfahren heute zu langwierig. 4.4 Schnelle Algorithmen für groÿe Zahlen In diesem Kapitel werden aktuelle Algorithmen vorgestellt, die in erster Linie für den Einsatz mit einem Computer gedacht sind und auch für die Faktorisierung wirklich groÿer Zahlen bzw. Zahlen mit groÿen Primfaktoren benutzt werden. Faktorisierungen, die mit diesen Algorithmen realisiert werden, sind nicht mehr mit Stift und Papier handhabbar; allerdings werden Beispiele mit relativ kleinen Zahlen angegeben, um die Funktion der Verfahren zu veranschaulichen. 4.4.1 Pollard Algorithmen 4.4.1.1 Pollard Rho Algorithmus Der Algorithmus wurde 1975 in [Pollard 75] unter der Bezeichnung eines Monte Carlo Algorithmus zur Faktorisierung von Zahlen veröentlicht, weil Zufallszahlen benutzt werden. Allgemein bekannt ist dieses Verfahren heute jedoch unter der Bezeichnung Pollard Rho Algorithmus. 66 Bei diesem Verfahren werden Folgen von Zufallszahlen benutzt, die, grasch dargestellt, aussehen wie ein Kreis mit einem Schwanz, also in etwa wie der griechische Buchstabe Rho: ρ. Diesem Zusammenhang verdankt das Verfahren seinen Namen. Gegeben ist eine Menge S = {0, 1, 2, ..., l − 1}, eine Funktion f : S → S , die zufällige Werte erzeugt und ein zufälliges Startelement s ∈ S , so dass folgende Sequenz erzeugt wird: s, f (s), f (f (s)), f (f (f (s))), ... . Die Funktion f generiert Werte aus einer endlichen Menge und aus diesem Grund werden Elemente der Menge wiederholt als Ergebnis auftauchen und somit wird auch die Sequenz ab einer bestimmten Stelle wiederholt werden, so dass die Sequenz sich in einen nichtzyklischen Anfang und einen sich wiederholenden, also zyklischen Bereich aufteilt. Die naheliegende Frage ist die nach der Länge der beiden Teilsequenzen. Dies lässt sich leicht mit dem so genannten Geburtstagsparadoxon (siehe [Weisstein 03]) aus der elementaren Wahrscheinlichkeitsrechnung beantworten und liegt bei einer √ Länge von ≈ l zusammen für den Anfangsteil und den Zyklus. 67 Sei p ∈ P, S = {0, 1, 2, ..., p − 1} und f (x) = x2 + 1 mod p die Funktion, die die zufälligen Werte liefert. Die Funktion f ist zufällig genug, so dass erwartet werden kann, dass die Sequenz der f i (s) mit i = 0, 1, 2, 3, ... sich vor √ O( p) Schritten anfängt sich zu wiederholen. Das heiÿt, dass f i (s) = f j (s) √ mit 0 ≤ i < j = O( p). Das kann ausgenutzt werden, um einen Faktor p einer natürlichen Zahl n zu nden. Da p zu diesem Zeitpunkt nicht bekannt ist, kann die Sequenz s, f (s), f (f (s)), f (f (f (s))), ... nicht berechnet werden. Allerdings lässt sich die Sequenz s, F (s), F (F (s)), F (F (F (s))), ... mit F (x) = x2 + 1 mod n berechnen. Es gilt für die beiden Funktionen, dass f (x) = F (x) mod p ist. Aus diesem Grund ist F i (s) ≡ F j (s) mod p und der ggT (|F i (s) − F j (s)| , n) ist durch p teilbar. Mit ein wenig Glück ist der ggT 6= n und somit ein nichttrivialer Teiler von n gefunden. Dies soll an einem Beispiel verdeutlicht werden. Sei n = 11 · 13 = 143, p = 11, f (x) = x2 + 1 mod 11 und der Startwert s = 1. Die Gleichungen für F (x) lauten dann: F 1 (1) = F 2 (1) = F 3 (1) = F 4 (1) = F 5 (1) = F 6 (1) = F 7 (1) = 2 5 26 105 15 83 26 = 12 = 22 = 52 = 262 = 1052 = 152 = 832 + + + + + + + 1 mod 143 1 mod 143 1 mod 143 1 mod 143 1 mod 143 1 mod 143 1 mod 143 und die dazugehörigen Gleichungen für f (x) sind: f 1 (1) = F 1 (1) mod 11 f 2 (1) = F 2 (1) mod 11 f 3 (1) = F 3 (1) mod 11 f 4 (1) = F 4 (1) mod 11 f 5 (1) = F 5 (1) mod 11 f 6 (1) = F 6 (1) mod 11 f 7 (1) = F 7 (1) mod 11 68 = = = = = = = 2 5 4 6 4 6 4 . An den Werten von f i (x) sieht man sofort, dass f 3 (1) und f 5 (1) die gesuchten Werte sind, so dass ggT (|F 3 (1) − F 5 (1)| , 143) = ggT (26 − 15, 143) = 11 ist und 11 ist der gesuchte nichttriviale Teiler von 143. Ebenso funktionieren das Wertepaar f 4 (1) und f 6 (1). Nur sind diese Werte bei der Suche von p nicht bekannt, so dass die Suche ausschlieÿlich über die Berechnung des ggT (|F i (s) − F j (s)| , n) mit i < j läuft und Werte für ggT 6= 1 und ggT 6= n gesucht werden. Eine vollständige Suche über alle möglichen Wertepaare (F i (x), F j (x)) lassen den Algorithmus langsamer werden als die Probedivision. Bei der Vorstellung des Verfahrens wurde die Suche nach den Paaren (F i (x), F j (x)) für die Berechnung der ggT auf die Werte (F i (x), F 2i (x)) mit i ∈ N nach dem Floyd Cycle Suchalgorithmus (siehe [Floyd 67]) eingeschränkt, so dass √ die Suche nach einem nichtrivialen Faktor in O( p) Schritten abbrechen sollte. In [Brent 80] wurde 1980 ein weiteres Verfahren zur Suche der passenden F i (x) und F j (x) vorgestellt, das diesen Schritt nochmals um etwa 25% beschleunigt. Bei diesem Algorithmus kann es passieren, dass kein Teiler gefunden wird oder es zu lange dauert. Daher ist es bei Einsatz dieses Verfahrens unbedingt notwendig, dass vorher getestet wird, ob eine zusammengesetzte Zahl vorliegt. Da die Dauer der Suche von der Gröÿe des kleinsten Primteilers abhängt und diese meist nicht bekannt ist, ist es sinnvoll, den Algorithmus nach einer gewissen Zeit bzw. Anzahl der berechneten F i (x) abzubrechen und andere Werte für die Funktion f zu benutzen. Sowohl der Startwert s als auch der Wert c bei der Funktion x2 +c können geändert werden, um damit einen neuen Versuch zu starten. Allerdings sollten aus empirischen Gründen für c die Werte 0 und −2 ausgeschlossen werden. Die naheliegende Funktion ax + b ist nicht zufällig genug für dieses Verfahren. Aber höhere Polynome mit ganzzahligen Koezienten können eingesetzt werden, gerade wenn über die Zahl n weitere Informationen vorliegen. Ein Beispiel hierfür sind die Fermatzahlen (siehe beispielsweise [Brent 81]). Ein groÿer Vorteil dieses Verfahrens ist der geringe Speicherverbrauch. Es müssen nur die Werte zur Berechnung des ggT im Speicher behalten wer69 den. Eine Option, die Berechnung zu beschleunigen und dafür Speicherplatz zur Verfügung zu stellen, ist die Berechnung von: Dk = k Y F i (x) − F 2i (x) . i=1 Das heiÿt, die Werte der F i (x)−F 2i (x) werden akkumuliert, indem das Produkt Dk gebildet und dieses für die Berechnung des ggT verwendet wird, so dass bei etwa k = 100 der Euklidische Algorithmus und die Modulooperation nur einmal alle 100 Schritte ausgeführt werden. Da die einzelnen zu berechnenenden ggT meist den Wert 1 ergeben, falls kein Faktor gefunden werden kann, ist dies Verfahren auch nicht weiter problematisch für groÿe Dk . Für kleine Zahlen n < 104 macht es Sinn, durchaus die Probedivision einzusetzen, weil sie zuverlässiger funktioniert und in dem Bereich beide Algorithmen auf heutigen Rechnern fast ohne Verzögerung die Faktoren ausgeben. Für gröÿere, aber nicht zu groÿe Zahlen, also bis ≈ 107 , ist der Pollard Rho Algorithmus bei kleinen Primteilern schneller als die nachfolgenden Algorithmen ab Abschnitt 4.4.3. 4.4.1.2 Pollard p − 1 Algorithmus Dieser Algorithmus wurde 1974 in [Pollard 74] vorgestellt und ist dem Pollard Rho Algorithmus ähnlich. Auch hier wird versucht, einen nichttrivialen Teiler einer zusammengesetzten Zahl über die fortgesetzte Berechnung eines ggT zu nden. Sei n die hier zu faktorisierende zusammengesetzte Zahl, p ein unbekannter Primteiler und G die obere Suchgrenze. Gesucht werden kleine Primzahlen pi bzw. deren Potenzen pki ≤ G mit k ∈ N, welche die Zahl p − 1 teilen. Dieser Gedanke hat dem Algorithmus auch seinen Namen gegeben. Nach dem kleinen Satz von Fermat gilt für jede Primzahl p > 2 die Kongruenz: 2p−1 ≡ 1 mod p. 70 Sind bis zur Grenze von G Zahlen der Form pki , die Teiler von p − 1 sind, vorhanden, dann ist G! ein Vielfaches von p − 1. Aus diesem Grunde gilt: 2G! ≡ 2p−1 ≡ 1 mod p und jede Lösung x dieser Kongruenz: x ≡ 2G! ≡ 2p−1 ≡ 1 mod p führt damit über: ggT (x − 1, n) = m zu einem Teiler von n. Die Zahl m ist dann entweder die gesuchte Primzahl p oder ein Vielfaches von p. Für diesen Algorithmus ist die Wahl der Schranke G sehr wichtig. Das soll an einem Beispiel verdeutlicht werden. Sei n = 123107 = 307 · 401. Entscheidend im Einzelfall ist es, welche Primfaktoren die Zahlen p − 1 besitzen. In diesem Fall sind das 307 − 1 = 2 · 32 · 17 und 401 − 1 = 24 · 52 . Da hier nur kleine Primfaktoren vorliegen, ist diese Zahl durch den p − 1 Algorithmus sehr schnell zu faktorisieren. Wird allerdings der Wert für G mit G = 7 zu klein gewählt, dann führt das zu einem trivialen Teiler der Zahl 123107: 27! mod 123107 = 94553 und ggT (94553 − 1, 123107) = 1. Die kleinste Fakultätszahl22 , bei der dieses Verfahren zu einem gesuchten Ergebnis führt, ist die 10!, also die Wahl von G = 10. In 10! sind erstmals die Primfaktoren 24 und 52 von 401 enthalten: 210! mod 123107 = 24061 und ggT (24061 − 1, 123107) = 401. Ebenso erhält man dieses Ergebnis natürlich mit 11!, 12! oder 13!. Die Werte für 2G! lassen sich trotz der Gröÿe der Zahlen schnell berechnen, weil beispielsweise: 2100! = (. . . (((21 )2 )3 . . . )100 22 Das sind die Zahlen n!. Die erste Fakultätszahl ist 1! = 1 und die folgenden Zahlen n! = n · (n − 1)!. Die 7! ist dann die Zahl 7 · 6 · 5 · 4 · 3 · 2 · 1 = 5040. sind rekursiv deniert mit 71 ist. Die Zahl G! ist nicht optimal gewählt für dieses Verfahren, weil zu hohe und damit nicht benötigte Potenzen kleiner Primzahlen in gröÿeren G! enthalten sind. Es gibt verschiedene Methoden, eine Zahl zu konstruieren, die diesen Nachteil nicht hat. Allen gemein ist es, eine Liste der Primzahlen ≤ G zu generieren und den einzelnen Primzahlen einen Exponenten im Verhältnis ihrer eigenen Gröÿe zu der von G zu geben. [Bressoud 89, S. j In k log G 69] wird vorgeschlagen, dass sich der Exponent aus log p berechnet. Im Fall von G = 30 ist anstatt 30! die Zahl 24 · 33 · 52 · 7 · 11 · 13 · 17 · 19 · 23 · 29 als Exponent für die 2 zu nehmen. Der Algorithmus führt auch unabhängig von der Wahl der Grenze G nicht immer zu einem Ergebnis. Aus diesem Grund sollte vor Einsatz dieses Verfahrens immer ein Primzahltest durchgeführt werden. Ansonsten besteht auch die Möglichkeit, anstatt der Basis 2 in dem Berechnungsschritt zu den Werten von x − 1 eine andere Zahl zu wählen. Die Zahl G hat entscheidenden Einuss auf die Laufzeit dieses Verfahrens. Tatsächlich kann G so klein gewählt werden, dass das Verfahren in polynomieller Zeit abläuft; allerdings ist dann die Wahrscheinlichkeit für ein Ergebnis ggT (x − 1, n) 6= 1 oder ggT (x − 1, n) 6= n gering. Um einen Tei√ ler von n mit Sicherheit zu berechnen, muss die Wahl von G = b nc sein. Dann allerdings ist dieser Algorithmus nicht mehr schneller als die Probedivision. Im Allgemeinen liegt der Aufwand in O(G · log G · (log n)2 + (log n)3 ). Die Geschwindigkeit des Pollard p − 1 Algorithmus bei zusammengesetzten Zahlen mit Primfaktoren p, deren Vorgänger p − 1 nur kleine Primfaktoren besitzen, ist der Grund dafür, dass beim RSA Algorithmus oft die Bedingung genannt wird, dass die beiden eingesetzten Primzahlen so genannte starke Primzahlen sein sollten, also Primzahlen, deren Struktur einer Faktorisierung mit bestimmten Faktorisierungsalgorithmen widerstehen und für diesen Algorithmus sollen für die eingesetzten Primzahlen p die Zahlen p − 1 groÿe Primteiler besitzen. Im Abschnitt 4.4.3 wird die Faktorisierung mittels Elliptischer Kurven vorgestellt, die analog zum p − 1 Algorithmus abläuft. 72 4.4.1.3 Williams p + 1 Algorithmus Der Vollständigkeit halber sei hier der Williams p+1 Algorithmus, oft auch als Pollard p+1 Algorithmus bezeichnet, genannt. Vorgestellt wurde er 1982 in [Williams 82]. Das Verfahren ist dem p−1 Algorithmus sehr ähnlich. Hier werden zur Faktorisierung die Teiler p + 1 der Primfaktoren betrachtet und anstatt der Potenzen werden Zahlen der Lucas Folgen benutzt. 4.4.1.4 Einheitskreise Analog zum p − 1 Algorithmus lassen sich auch mit Einheitskreisen über Zn Zahlen in Faktoren zerlegen (siehe [Lemmermeyer 00]). Das Verfahren unterscheidet sich nur dadurch, dass hier die Gruppe (EK(Zn ), +) eingesetzt wird. Sei n eine zusammengesetzte Zahl und EK(Zn ) ein Einheitskreis wie in Abschnitt 2.9 beschrieben. Für einen Primteiler p von n gilt, dass die Ordnung für einen Punkt23 P = (x, y) in (EK(Zp ), +) die Ordnung |(EK(Z p ),+)| = und diese wiederum die Ordnung |(EK(Zn ), +)| teilt. Sei k = p − −1 p |(EK(Zp ), +)|, dann ist für kP der ggT (yk , n) = m ein Teiler von n. Diese Zahl m ist für den Fall 6= n ein nichttrivialer Faktor von n. Sei zur Grenze G das k mit p ∈ P wie folgt deniert. Y k= pai max(pa i ≤G) Bei der Berechnung des Punktes kP wird in jedem Zwischenschritt der ggT (y, n) = m berechnet. Ist bis kP kein Faktor gefunden, dann war die Grenze G zu klein gewählt. Für eine erfolgreiche Suche muss die Primfaktorzerlegung von k die Primfaktorzerlegung von p − 1 oder p + 1 enthalten, je nachdem, ob −1 quadratischer Rest von p ist oder nicht. Das Verfahren soll an einem einfachen Beispiel illustriert werden, so dass anstatt der direkten Berechnung von kP der Startpunkt fortlaufend zu sich selbst addiert wird. Sei n = 943 und der Punkt (101, 290) ist ein Punkt von EK(Z943 ), weil 1012 + 2902 = 94301 und 94301 ≡ 1 mod 943 ist. Die dazugehörige Rechnung sieht wie folgt aus. 23 P sollte ein nichttrivialer Punkt sind hier (1, 0), (0, 1) (x, y) auf dem Einheitskreis sein. Triviale Punkte oder Punkte mit zu kleinen Ordnungen. 73 2P = (101, 290) + (101, 290) = (101 · 101 − 290 · 290, 101 · 290 + 101 · 290) = (598, 114) 3P = (598, 114) + (101, 290) = (598 · 101 − 114 · 290, 598 · 290 + 101 · 114) = (934, 106) 4P = (934, 106) + (101, 290) = (934 · 101 − 106 · 290, 934 · 290 + 101 · 106) = (413, 552) ggT (290, 943) ggT (114, 943) ggT (106, 943) ggT (552, 943) = = = = 1 1 1 23 Damit ist 943 = 23 · 41 das Ergebnis. Die Ordnung des Punktes (101, 290) bzw. (9, 14) in (EK(Z23 ), +) ist gleich 8, weil 8 · (101, 290) = (1, 0) ist24 . Die Ordnung der Untergruppe (EK(Z23 ), +) berechnet sich mit: −1 |(EK(Z23 ), +)| = 23 − = 24 23 und für |(EK(Z41 ), +)| und |(EK(Z943 ), +)| gilt: −1 |(EK(Z41 ), +)| = 41 − = 40 41 |(EK(Z943 ), +)| = |(EK(Z23 ), +)| · |(EK(Z41 ), +)| = 24 · 40 = 960 Tatsächlich wurde in diesem Beispiel bereits bei k = 4 ein Teiler gefunden und nicht erst bei 8, was wegen der Punktordnung von (101, 290) in (EK(Z23 ), +) als Teiler der Grupenordnung |(EK(Z23 ), +)| = 24 zu erwarten gewesen wäre. 24 2 · (9, 14) = (0, 22) ⇒ 4 · (9, 14) = 2 · (0, 22) = (22, 0) ⇒ 8 · (9, 14) = 2 · (22, 0) = (1, 0) 74 Wenn die Zahl n aus Primzahlen p besteht, die für p − 1 bzw. p + 1 kleine Teiler besitzen, dann werden mit diesem Verfahren schnell Faktoren gefunden. In [Zhang 96] ist ein Verfahren beschrieben, welches Kegelschnitte zum Faktorisieren benutzt. Der Einheitskreis ist hier ein Spezialfall eines Kegelschnitts. 4.4.2 Kettenbrüche Kettenbrüche sind eine weitere Möglichkeit, Zahlenpaare (x, y) zu suchen, welche die Kongruenz: x2 ≡ y 2 mod n erfüllen. Anfangs (siehe Abschnitt 4.3.5) wurde noch versucht, solche Zahlen zufällig zu nden. Kurze Zeit später, 1931, zeigten dann Derrick Henry Lehmer und R.E. Powers in [Lehmer 31] die systematische Suche nach Lösungen der Kongruenz mittels regulärer Kettenbrüche. Ein regulärer Kettenbruch einer Zahl x ist von der Form: x = a0 + 1 a1 + 1 a2 + a 1 3 +... √ Dabei interessieren die ai in der Kettenbruchentwicklung von n. In der Zeit ohne Computer war wegen des hohen Berechnungsaufwandes bei groÿen Zahlen an einen praktischen Einsatz dieser Idee nicht zu denken. Weitergehende Informationen zu Kettenbrüchen nden sich in [Riesel 94, S. 327 - 342]. 4.4.2.1 Shanks (SQUFOF) Aus dem Jahre 1975 von Daniel Shanks stammt ein Verfahren namens Square Form Factorization, abgekürzt als SQUFOF bezeichnet, das die Kettenbruchentwicklung verwendet (siehe [McMath 04]). Sei n eine zusammengesetzte und keine Quadratzahl, dann sind: P0 = 0, Q0 = 1 und Q1 = n − P12 75 und folgende Rekurrenzgleichungen zu lösen: Pi+1 = qi Qi − Pi Qi+1 = Qi−1 + (Pi − Pi+1 )qi √ n + Pi qi = . Qi Das wird so lange fortgesetzt berechnet, bis mit Q2i eine Quadratzahl gefunden wird, um dann die Rekurrenzgleichungen erneut zu berechnen, allerdings dann mit den Startwerten: p n − P 02 P00 = −P2i , Q00 = Q2i und Q01 = √ 1 . Q2i 0 beendet und für ungeDiese Berechnung wird bei Vorliegen von Pi0 = Pi+1 0 Q 0 0 0 i rade Qi ist Qi und für gerade Qi ist 2 ein Faktor von n. Sei im folgenden Beispiel n = 889033, dann sieht die dazugehörige Rechnung wie folgt aus: P0 Q0 q0 P1 Q1 q1 P2 Q2 q2 = = 0 1 = 942 = = 942 1669 = 1 = 1669 · 1 − 942 = = j 1 + (942 − 727) k ·1 = √ 889033 + 727 = = 216 727 216 = j√ 889033 + 0 1 k = 1 · 942 − 0 = j 889033 − 9422k √ 889033 + 942 = 1669 7 . Die folgenden Werte ohne aufgeführte Rechnung sind dann: P3 P4 P5 P6 = 785 = 478 = 568 = 515 Q3 Q4 Q5 Q6 = = = = 76 1263 523 1083 576 q3 q4 q5 q6 = = = = 1 2 1 2 . An der Stelle von Q6 = 576 = 242 tritt eine Quadratzahl auf und Q6 = Q2·3 , so dass die Berechnung an dieser Stelle beendet ist und mit folgenden Werten neu beginnt: P00 = −515, Q00 = 24 und Q01 = 1546. Damit ergeben sich: P00 P10 P20 P30 P40 = −515 = 923 = 623 = 673 = 673 Q00 Q01 Q02 Q03 Q04 = 24 = 1546 = 324 = 1346 = 324 q00 q10 q20 q30 q40 = = = = = 17 1 4 1 4 . An dieser Stelle ist das Ende der Berechnung erreicht, weil P30 = P40 ist und Q03 = 673 ist der gesuchte Faktor von n und somit ist 889033 = 673 · 1321 2 das Ergebnis. Auch wenn der hier vorgestellte Algorithmus nicht nach Kettenbrüchen aussieht, so sind doch die berechneten Pi , Qi und qi genau die Werte, die √ bei der Kettenbruchentwicklung von 889033 berechnet werden. Bei diesem Verfahren kann es vorkommen, dass triviale Faktoren gefunden werden. Einzelheiten zu diesem Thema nden sich in [Riesel 94, S. 189]. Die Laufzeit für zu faktorisierende Zahlen ist sehr unterschiedlich, so dass schlecht abgeschätzt werden kann, ob ein Ergebnis in kurzer Zeit vorliegt √ oder nicht. Insgesamt liegt die Zeitkomplexität in O( n). Aufgrund des einfachen und kurzen Algorithmus ist eine Implementation sehr einfach und der sehr geringe Speicherverbrauch ist von groÿem Vorteil. Die grundlegende Theorie für dieses Verfahren sind die binären quadratischen Formen, also Ausdrücke Ax2 + Bxy + Cy 2 . Einzelheiten zu diesem Thema nden sich in [Bell 89]. 4.4.2.2 Morrison und Brillhart (CFRAC) Ein weiteres Verfahren, das sich der Kettenbrüche bedient, ist der Algorithmus von Michael A. Morrison und John Brillhart, genannt Continued Fraction Algorithm (kurz CFRAC). Vorgestellt wurde das Verfahren 77 1975 in [Morrison 75] und wiederum werden Lösungen für die Kongruenz x2 ≡ y 2 mod n gesucht. In den 70er Jahren wurden mit diesem Algorithmus verschiedene Faktorisierungsrekorde aufgestellt und zu dieser Zeit war er der schnellste bekannte Algorithmus zur Faktorisierung von natürlichen Zahlen. In den 80er Jahren wurde diese führende Stellung durch das quadratische Sieb eingenommen (siehe [Bourseau 02, S. 85]), so dass CFRAC heute im praktischen Einsatz keine Rolle mehr spielt. Aus diesem Grund und weil mit SQUFOF und dem quadratischen Sieb ähnliche Algorithmen hier beschrieben sind, wird CFRAC nicht weiter vorgestellt. 4.4.3 Elliptische Kurven (ECM) Das Faktorisieren einer zusammengesetzten Zahl n mittels elliptischer Kurven25 wurde 1987 in [Lenstra 87] vorgestellt und ersetzt bei ansonsten identischen Verfahren die multiplikative Gruppe Zp−1 im Pollard p − 1 Algorithmus durch die Gruppe (EC p (a, b), ◦) mit zufälligen elliptischen Kurven. Beim p − 1 Algorithmus werden Teiler der Zahl p − 1 gesucht, was gleichbedeutend mit der Suche nach Teilern der Ordnung von Zp−1 , also |Zp−1 |, ist. Hier werden elliptische Kurven mit: |EC p (a, b)| = n gesucht. Tatsächlich kann man für kleine Werte p die Ordnung einer elliptischen Kurve direkt ausrechnen: p 3 X x + ax + b +1 . |EC p (a, b)| = 1 + p x=1 3 Dabei ist x +ax+b das Legendre Symbol. Für gröÿere Werte p ist die Bep rechnung nicht mehr praktikabel. Sehr hilfreich an dieser Stelle ist ein Satz von Helmut Hasse aus dem Jahr 1934. 25 Die Rechnungen und Erklärungen werden in dieser Arbeit zum besseren Verständnis in der anen Koordinatendarstellung durchgeführt. Beim praktischen Einsatz von ECM (Elliptic Curve Method) werden alle Rechnungen aus Ezienzgründen in der projektiven Koordinatendarstellung (siehe Abschnitt 2.8.4) durchgeführt. 78 Satz: Die Ordnung einer elliptischen Kurve EC p (a, b) liegt im Intervall: √ √ I(p) = (p + 1 − 2 p, p + 1 + 2 p). Nach einem Satz von William Waterhouse aus dem Jahr 1969 gilt: Satz: Für eine Primzahl p > 3 und einer natürlichen Zahl n aus dem Intervall I(p) gibt es ein a und ein b, so dass: |EC p (a, b)| = n ist. Des weiteren sind die Ordnungen der Gruppen (EC p (a, b), ◦) im Intervall I(p) nahezu gleichverteilt. Diese Voraussetzungen führen zur Möglichkeit, die elliptischen Kurven zufällig auszuwählen und zu probieren, ob mit einer elliptischen Kurve eine zusammengesetzte Zahl faktorisiert werden kann. Das Probieren wird dann praktisch gleichzeitig an vielen zufälligen Kurven durchgeführt. Da bei der Faktorisierung einer Zahl n anfangs im allgemeinen der Teiler p unbekannt ist, ist es auch unbekannt, über welchen Körper Zp die elliptische Kurve EC p (a, b) deniert sein sollte. Die Berechnungen nden statt dessen in Zn statt. Bei den Berechnungen werden die Zahlen also mit modulo n reduziert. Dass elliptische Kurven mit der Punktaddition über einen Körper Zp deniert werden, hat den Grund, dass dann eine Gruppe vorliegt, also die Punktaddition uneingeschränkt durchgeführt werden kann. Die Zahl n ist zusammengesetzt und daher ist Zn kein Körper, weil nicht zu jedem Element ein Inverses existiert. Das führt dazu, dass die Addition von Punkten einer elliptischen Kurve EC n (a, b) nicht immer deniert ist, weil das Inverse nicht gebildet werden kann. Es wird dann auf einer so genannten Pseudokurve so lange gerechnet, bis der Fall eintritt, dass die Punktaddition nicht deniert ist, weil mit einem Nenner r gerechnet werden muss, von dem kein Inverses existiert. Das passiert genau dann, wenn bei der Berechnung k · P bzw. P k mit P ∈ EC p (a, b) das k ein Vielfaches der Ordnung von EC p (a, b) ist. Mit groÿer Wahrscheinlichkeit führt ggT (r, n) dann zu einem nichttrivialen Teiler von n. 79 Praktisch ist es auch so, dass nicht direkt eine elliptische Kurve zufällig ausgewählt wird, sondern es wird zufällig der Wert a und dazu ebenfalls zufällig ein Punkt P = (x, y) mit 0 ≤ x, y < n gewählt. Der Wert b lässt sich dann mittels b = (y 2 − x3 − ax) mod n berechnen. Ist eine elliptische Kurve EC p (a, b) gewählt, dann wird zuerst überprüft, ob ggT (4a3 + 27b2 , n) = 1 bzw. 6= n ist. Für den Fall, dass dem nicht so ist, ist hier bereits ein Faktor von n gefunden. Die Zahl n darf keinen der Primfaktoren 2 oder 3 besitzen. Das ist allerdings keine wirkliche Einschränkung, da vor dem Einsatz von ECM mittels Probedivision und dem p − 1 Algorithmus kleine Faktoren bereits durch Division eliminiert sein sollten. Ebenso sollte durch einen Primzahltest geklärt sein, dass es sich bei n um eine zusammengesetzte Zahl handelt. Für die folgenden Rechnungen auf der elliptischen Kurve müssen noch Grenzen festgelegt werden, da es bei der zufälligen Auswahl der elliptischen Kurve sein kann, dass kein Ergebnis erreicht wird. Insofern muss die Berechnung bei Erreichen einer festgelegten Grenze abgebrochen werden, um mit einer weiteren zufälligen Kurve die Berechnung fortzusetzen. Wie beim p − 1 Algorithmus hat auch hier die Wahl des Exponenten bei der Berechnung von P k entscheidenden Einuss auf die Laufzeit des Verfahrens. Zur einfachen Erklärung wird oft der Exponent als Fakultätszahl k! gewählt. Optimal ist das nicht (siehe dazu Abschnitt 4.4.1.2). Sinvoll ist es, eine Grenze G zu wählen, bis zu der die höchstmöglichen Primzahlpotenzen Berücksichtigung nden. Sei also G fest gewählt, dann ist mit p ∈ P: Y k= pm i . max(pm i ≤G) Bei der folgenden Berechnung von P k wird bei den Zwischenschritten jeweils überprüft, ob für einen Nenner r der ggT (r, n) 6= 1 ist. Ist das der Fall, wird die Berechnung abgebrochen und bei 1 < ggT (r, n) < n ist mit ggT (r, n) ein nichttrivialer Faktor von n gefunden. Ist ggT (r, n) = n, dann wird mit einer neuen elliptischen Kurve gerechnet. Wird bis zum Erreichen der Berechnungsgrenze kein Teiler gefunden, dann wird ebenfalls eine neue Kurve gewählt. 80 Sei p der kleinste Primteiler von n, dann ist die Komplexität des Verfahrens vermutlich26 : √ (1 + )· 2 ln (p)·ln (ln (p)) O e und für den aufwändigsten Fall, dass n das Produkt etwa gleich groÿer Primzahlen ist, ändert sich die Komplexität in: √ O e(1 + )· ln (n)·ln (ln (n)) . Das entspricht der Komplexität des quadratischen Siebs. Zusammenfassend sei hier der Algorithmus noch einmal dargestellt. 1. Gegeben sei eine zusammengesetzte Zahl n mit ggT (6, n) = 1 und n ist keine echte Potenz. 2. Wähle die Schranke G, die Werte a, x, y ∈ Zn und berechne k = Q 2 3 pm i mit p ∈ P und b = (y − x − ax) mod n. max(pm i ≤G) 3. Berechne ggT (4a3 + 27b2 , n) = d. a) Ist d = 1, dann gehe zu Punkt 4. b) Ist d = n, dann gehe zu Punkt 2. c) Ansonsten beende das Verfahren und d ist ein nichttrivialer Faktor von n. 4. Berechne in Zn die Potenz (x, y)k und in jedem Zwischenschritt ggT (r, n) = d. r ist der jeweils auftretende Nenner. a) Ist d = 1, setze die Berechnung von (x, y)k so lange fort, bis (x, y)k berechnet ist und gehe zu Punkt 2. b) Ist d = n, dann gehe zu Punkt 2. c) Ansonsten beende das Verfahren und d ist ein nichttrivialer Faktor von n. 26 Die Komplexitätsabschätzungen beruhen auf der Verteilung der Ordnungen der elliptischen Kurven im Intervall I(p) und Annahmen bezüglich der Ordnungen, die nur kleine Primteiler besitzen. 81 Als Beispiel sei die Zahl n = 1003 gegeben, a = 1 und P (2, 1) gewählt. Die Gleichung der Kurve lautet damit y 2 = x3 + x − 9. Der ggT (4 · 13 + 27 · 9942 , 1003) = 1 ist kein nichttrivialer Faktor von n. G = 8 sei die Grenze für die Primzahlpotenzen, so dass k = 23 · 3 · 5 · 7 = 840 ist. 840 = 23 + 26 + 28 + 29 und somit sind die Punkte 2P, 4P, 8P, ... und 512P zu berechnen27 : 2P = (2, 1) ◦ (2, 1) 3 · 22 + 1 = 13 · 502 = 508 2·1 x2 = 5082 − 2 · 2 = 289 λ= y2 = 508 · (2 − 289) − 1 = 641 = (289, 641) 4P = (289, 641) ◦ (289, 641) = (314, 713) 8P = (314, 713) ◦ (314, 713) = (571, 704) 16P = (571, 704) ◦ (571, 704) = (64, 719) 32P = (64, 719) ◦ (64, 719) = (550, 949) 64P = (550, 949) ◦ (550, 949) = (276, 114) 128P = (276, 114) ◦ (276, 114) = (772, 188) 27 Gerechnet wird hier in Nebenrechnungen sind −1 −1 65, 228 = 22, 376 Zn = Z1003 und die Inversen in den nicht weiter ausgeführten 279−1 = 719, 423−1 = 773, 405−1 = 317, 435−1 = 641, 895−1 = = 995 und 600−1 = 891. 82 256P = (772, 188) ◦ (772, 188) = (668, 300) 512P = (668, 300) ◦ (668, 300) = (984, 704). Bei der weiteren Berechnung von k · P mit 8P + 64P + 256P + 512P tritt bei 8P + 64P = (571, 704) ◦ (276, 114) im Nenner von λ mit x64 − x8 = 276 − 571 = 708 ein Wert auf, für den sich kein inverses Element in Z1003 nden lässt und der einen gemeinsamen Teiler mit n hat. Der ggT (708, 1003) = 59 liefert an dieser Stelle einen nichttrivialen Faktor. Damit ist die Zerlegung der Zahl 1003 in ihre Primfaktoren 17 · 59 gefunden. 4.4.4 Quadratisches Sieb (QS) In diesem Abschnitt soll das quadratische Sieb, abgekürzt als QS bezeichnet, vorgestellt werden. Das quadratische Sieb ist einer der schnellsten Faktorisierungsalgorithmen für groÿe Zahlen und hat eine groÿe Bedeutung im praktischen Einsatz. Mit diesem Verfahren sind viele Namen verbunden. Die Idee, die Gleichung n = x2 − y 2 zu nutzen, stammt von Fermat (siehe Abschnitt 4.3.4). Die Erweiterung auf die Kongruenz x2 ≡ y 2 mod n ist von Kraïtchik (siehe Abschnitt 4.3.5) und die Kongruenz selbst ist als Legendre Kongruenz bekannt (siehe Abschnitt 2.1.12). Zuerst soll zum besseren Verständnis der Algorithmus von Dixon beschrieben werden, um danach die Verbesserungen an diesem Verfahren zu erläutern. 4.4.4.1 Dixon Lösungen der Kongruenz x2 ≡ y 2 mod n führen über den ggT (x−y, n) meist zu einem nichttrivialen Faktor der Zahl n. Dixon stellte 1981 in [Dixon 81] einen probabilistischen Algorithmus, auch als Dixon's Random Square Algorithm bezeichnet, vor, der solche Lösungen ndet. 83 √ Es werden zufällige natürliche Zahlen z mit z ≥ d n e genommen, um damit: f (z) = z 2 mod n zu berechnen. Diese Werte von f (z) werden mittels Probedivision in ihre Primfaktoren zerlegt. Für den Fall, dass die Primfaktorzerlegung von einem f (z) nicht leicht zu nden ist, wird eine neue Zufallszahl z gewählt. Das wird so lange durchgeführt, bis ausreichend viele Zerlegungen gefunden sind. Wurde die Probedivision bis 1000 durchgeführt, dann sind mindestens 168 Zerlegungen erforderlich, was mindestens der Anzahl der Primzahlen bis 1000 entspricht. Seien p1 , p2 , p3 , . . . , p168 die ersten 168 Primzahlen, dann lässt sich eine Primfaktorzerlegung von f (z) wie folgt schreiben: 168 f (z) = pa11 · pa22 · pa33 · . . . · pa168 und als Vektor, der auch als Exponentenvektor bezeichnet wird,: v(z) = (a1 , a2 , a3 , . . . , a168 ) speichern. Sind in einem v(z) alle Einträge gerade Zahlen, dann ist f (z) ein Quadrat und eine Lösung gefunden. Allerdings ist der Fall unwahrscheinlich. Weil die Anzahl der v(z) gröÿer als die Länge eines v(z) ist, lässt sich eine Summe aus verschiedenen v(z) nden, in der alle Einträge gerade sind. Um diese Summe zu nden, werden alle Vektoreinträge in den v(z) wie folgt auf 0 oder 1 gesetzt: w(z) = (b1 , b2 , b3 , . . . , b168 ) mit ( b= 0, falls ai eine gerade Zahl ist. 1, falls ai eine ungerade Zahl ist. und mittels Gauss Algorithmus modulo 2 ndet man aus den w(z) eine Menge an z , deren zugehörige v(z) in der Summe nur gerade Einträge haben. Besteht diese Menge aus k verschiedenen v(z), so erhält man aus den dazugehörigen f (z): f (z1 ) · f (z2 ) · f (z3 ) · . . . · f (zk ) ≡ z12 · z22 · z32 · . . . · zk2 mod n. 84 Führt diese Lösung über den ggT nicht zu einem nichttrivialen Faktor von n, so wird eine neue Untermenge aus den v(z) berechnet, die in der Summe nur gerade Einträge haben. An einem kleinen Beispiel soll verdeutlicht werden, wie dieses Verfahren funktioniert. Sei n = 803 und die Zufallszahlen 55, 82, 102, 430, 583 und 762. Dabei wurde die Probedivision bis zur 11 durchgeführt und die Zufallszahlen, die bis zur 11 nicht in ihre Primfaktoren zerlegt werden konnten, sind nicht angegeben. f ( 55) f ( 82) f (102) f (430) f (583) f (762) = 552 mod 803 = 822 mod 803 = 1022 mod 803 = 4302 mod 803 = 5832 mod 803 = 7622 mod 803 = = = = = = 616 300 768 210 220 75 = 23 = 22 = 28 = 2 = 22 = · · 3 · 52 · 3 · 3 · 5 · 3 · 52 Daraus ergibt sich für die Vektoren v(z): v( 55) = (3, 0, 0, 1, 1) v( 82) = (2, 1, 2, 0, 0) v(102) = (8, 1, 0, 0, 0) v(430) = (1, 1, 1, 1, 0) v(583) = (2, 0, 0, 1, 1) v(762) = (0, 1, 2, 0, 0) und für die w(z) erhält man damit: w( 55) = (1, 0, 0, 1, 1) w( 82) = (0, 1, 0, 0, 0) w(102) = (0, 1, 0, 0, 0) w(430) = (1, 1, 1, 1, 0) w(583) = (0, 0, 0, 1, 1) w(762) = (0, 1, 0, 0, 0) 85 7 · 11 · 7 7 · 11 und etwas übersichtlicher die folgende Matrix. 1 0 0 1 0 0 0 1 1 1 0 1 0 0 0 1 0 0 1 0 0 1 1 0 1 0 0 0 1 0 Ziel ist es jetzt, einzelne Zeilen der Matrix zu addieren, so dass das Ergebnis modulo 2 ein Vektor nur mit Nullen ist. Wenn man die zweite und die dritte Zeile addiert28 , so erhält man (0, 2, 0, 0, 0) und modulo 2 ist das (0, 0, 0, 0, 0). Die beiden gesuchten Zahlen sind also z1 = 82 und z2 = 102. Daraus ergibt sich: 300 · 768 ≡ 822 · 1022 mod 803 (22 · 3 · 52 ) · (28 · 3) ≡ 822 · 1022 mod 803 (25 · 3 · 5)2 ≡ (82 · 102)2 mod 803 und wegen: 82 · 102 mod 803 = 334 25 · 3 · 5 mod 803 = 480 aus ggT (480 − 334, 803) = 73 und ggT (480 + 334, 803) = 11 die beiden Primfaktoren von 803. Die zufällige Suche nach den f (z), die sich in die gewünschten relativ kleinen Faktoren zerlegen lassen, ist bei groÿen Zahlen sehr umfangreich. Diese Zahlen mittels Probedivision zu zerlegen, ist aufwändig und bei vielen f (z) erfolglos. Genau an diesem Punkt nden die Verbesserungen von Pommerance statt. 28 Die Addition der zweiten und der sechten Zeile führt zu den trivialen Teilern 803. 86 1 und 4.4.4.2 Pommerance Vorgestellt wurde die Idee, den Schritt der Probedivisionen mit einem Siebverfahren ähnlich dem Sieb des Eratosthenes zu verbinden, erstmals 1982 in [Pomerance 82]. Die Zufallszahlen z aus dem Verfahren von Dixon werden durch die Zahlen r ersetzt: √ r := ri = k + i : i ∈ N, k = n und anstatt f (z) wird: g(r) = r2 − n verwendet, so dass aus der zufälligen Suche eine systematische wird. War bei Dixon die Probedivision noch bis zu einer Grenze angegeben, bis zu der die Probedivision mit allen Primzahlen durchgeführt wurde, so wird bei Pomerance für die Probedivision bzw. den Siebschritt eine so genannte Faktorbasis aus Primzahlen gewählt. Die Wahl der Faktorbasis ist ein wichtiger Punkt. Ist sie zu klein, kann es sein, dass die gegebene Zahl nicht faktorisiert werden kann. Andererseits steigt mit der Gröÿe der Faktorbasis auch der Aufwand des Verfahrens. Analog zum Algorithmus von Lehman (siehe Abschnitt 4.3.6) besteht auch hier die Möglichkeit, Vielfache der zu faktorisierenden Zahl n für den Algorithmus zu nutzen. Das hat natürlich auch Einuss auf die Wahl der Faktorbasis (siehe [Bressoud 89, S. 106 - 110]). Eine natürliche Obergrenze für die Faktorbasis ist der gröÿtmögliche Faktor der g(r). Als kleinster Wert wird als einzige Nichtprimzahl oft die −1 hinzugenommen, um auch mit negativen Werten von g(r) arbeiten zu können. Weiterhin können nach der Probedivision, die mit der Zahl n durchgeführt wurde, viele Primzahlen als Element der Faktorbasis ausgeschlossen werden. Angenommen, die Probedivision wurde bis 1000 durchgeführt und p ist eine ungerade Primzahl p < 1000, die aus diesem Grund auch kein Teiler von n ist und p teilt g(r) = r2 − n, dann gilt: n ≡ r2 mod p und deshalb muss das Legendre-Symbol np gleich +1 sein. Das bedeutet, dass in die Faktorbasis zur Faktorisierung von n nur die Primzahlen aufge87 nommen werden, für die n p = +1 gilt. Das quadratische Sieb Sei für ein festes j das Siebintervall S festgelegt mit S = [1, j]. Dann wird für jedes i ∈ S g(r) berechnet und schrittweise werden die Werte g(r) markiert, die Primteiler besitzen, die in der Menge der Faktorbasis enthalten sind. Wird für eine Primzahl in der Reihe der im Siebintervall berechneten g(r) ein29 g(r) gefunden, das durch p ohne Rest teilbar ist, dann sind jeweils im Abstand30 von p auch alle weiteren g(r) durch p ohne Rest teilbar. Die anderen g(r) werden in diesem Schritt ignoriert. Gesucht wird also der erste Eintrag g(r), für den gilt: r2 ≡ n mod p und dann wird gleich überprüft, ob es ein maximales a mit: r2 ≡ n mod pa gibt, das heiÿt, ob g(r) auch durch eine Potenz von p ohne Rest teilbar ist und gesucht ist für diese Zahl die maximale Potenz. Die Markierung in so einem Fall ist dann der Quotient pna bzw. np . Begonnen wird bei diesem Siebverfahren mit der kleinsten Primzahl aus der Faktorbasis und die Primzahl für den nächsten Schritt ist dann die nächstgröÿere. Die folgenden Siebschritte laufen ebenso ab, nur mit dem Unterschied, dass bei einem bereits markierten g(r) mit dem eingetragenen Quotienten anstatt des g(r) gerechnet wird. Werte der g(r), die mit 1 markiert sind, sind genau die g(r), die eine Zerlegung in Primzahlen besitzen, die allesamt in der Faktorbasis enthalten sind. Diese brauchen in noch folgenden Siebschritten nicht berücksichtigt zu werden. Das Siebverfahren ist beendet, wenn der Siebschritt mit der gröÿten Primzahl aus der Faktorbasis durchgeführt wurde. 29 bzw. zwei 30 Dieses Abzählen der durch p teilbaren g(r) funktioniert nur solange wie alle innerhalb der Modulorechnung mit dem gleichen Vielfachen von 88 n g(r) reduziert worden sind. Das Siebverfahren soll mit einem Beispiel verständlicher dargestellt wer√ den. Sei n = 293281, k = 293281 = 541 und die Faktorbasis sei {2, 3, 5, 7, 13, 19, 23}. Die Primzahlen 11 und 17 wurden für die Faktorbasis nicht in Betracht gezogen weil31 : 293281 293281 = = −1 11 17 ist. Mit j = 9 ist das Siebintervall S = [1; 9]. Zuerst werden für i ∈ S mit g(ri ) = (541 + i)2 − 293281 die g(r) berechnet. i g(r) 1 2 3 4 5 6 7 8 9 483 1568 2655 3744 4835 5928 7023 8120 9219 Im Siebschritt mit der 2 werden die geraden Zahlen durch die gröÿtmögliche 2er Potenz geteilt und das Ergebnis unter die entsprechende Zahl geschrieben. Der erste Zeileneintrag für das Sieb mit der 2 ergibt sich beispielsweise aus 1568 = 49. 25 i g(r) Sieb mit 2 1 2 3 4 5 6 7 8 9 483 1568 2655 3744 4835 5928 7023 8120 9219 49 117 741 1015 Beim Siebschritt mit der 3 fällt auf, dass zwei Einträge nebeneinander stehen. Tatsächlich stehen die Vielfachen der 3 trotzdem in einem Abstand von 3; allerdings handelt es sich bei g(r) um eine quadratische Funktion, so dass es auch zwei Lösungen geben kann. Das heiÿt, dass man den Abstand 3 einmal für i = 1, 4, 7 und für i = 3, 6, 9 hat. Die Quotienten ergeben sich immer aus dem letzten Eintrag in einer Spalte, so dass bei i = 3 die Zahl 2655, also g(r), und bei i = 4 die Zahl 117 aus der Zeile mit dem Siebschritt der 2 genommen wird. 31 Zur Berechnung wurde hier n p = n mod p p 89 verwendet. i g(r) 1 2 3 4 5 6 7 8 9 483 1568 2655 3744 4835 5928 7023 8120 9219 Sieb mit 2 Sieb mit 3 49 161 295 117 13 741 247 1015 2341 3073 Das Verfahren wird zeilenweise für die 5 und die 7 fortgesetzt und bei i = 2 wird der Eintrag 1 berechnet. Diese 1 bedeutet, dass bis zu diesem Punkt eine für die weitere Rechnung nutzbare Zerlegung von g(r2 ), nämlich 1568 = 25 + 72 , gefunden wurde. Bis zur 5 ist es noch leicht erkennbar, welche Zahlen ohne Rest geteilt werden können. Für die Zahl 7 wird man die betreenden Zahlen per Probedivision so lange auf Teilbarkeit testen, bis eine durch 7 teilbare Zahl gefunden wurde und dann tatsächlich erst wieder 7 Spalten weiter eine Division durchführen. Das wirkt bei diesem kleinen Zahlenbeispiel nicht sonderlich ezienzsteigernd, aber beim praktischen Einsatz des quadratischen Siebs mit groÿen Zahlen sind in den Faktorbasen dann auch deutlich mehr Einträge enthalten. In diesen Fällen vermeidet das quadratische Sieb durchaus Millionen von überüssigen Divisionen. Als Beispiel sei hier die Faktorisierung32 der RSA Zahl RSA-155 im August 1999 genannt. Die schon optimierte Matrix nach dem Siebverfahren hatte 6699191 Zeilen und 6711336 Spalten (siehe [Cavallar 00]). 1 2 3 4 5 6 7 8 9 483 1568 2655 3744 4835 5928 7023 8120 9219 i g(r) Sieb Sieb Sieb Sieb mit mit mit mit 2 3 5 7 49 161 23 1 295 59 117 13 741 247 967 1015 2341 3073 203 29 439 Das endgültige Ergebnis nach dem Sieben mit allen in der Faktorbasis enthaltenen Primzahlen sieht dann wie folgt aus. 32 Diese Zahl hat 155 Stellen und die Faktorisierung lautet: 102639592829741105772054196573991675900716567808038066803341933521790711307779· 106603488380168454820927220360012878679207958575989291522270608237193062808643 90 i g(r) Sieb Sieb Sieb Sieb Sieb Sieb Sieb mit mit mit mit mit mit mit 1 2 3 4 5 6 7 8 9 483 1568 2655 3744 4835 5928 7023 8120 9219 2 3 5 7 13 19 23 49 161 23 1 295 59 117 13 741 247 1015 2341 967 1 1 3073 203 29 439 19 1 Damit sind bis hierher folgende Werte gefunden: g(r1 ) = 483 = 3 · 7 · 23 g(r2 ) = 1568 = 25 · 72 g(r4 ) = 3744 = 25 · 32 · 13 g(r6 ) = 5928 = 23 · 3 · 13 · 19. Ohne die Rechnung hier aufzuführen, sind noch folgende g(r) berechnet worden: g(r18 ) = 19200 = 28 · 3 · 52 g(r25 ) = 27075 = 3 · 52 · 192 g(r30 ) = 32760 = 23 · 32 · 5 · 7 · 13. Die Anzahl der gesuchten g(r) ist mindestens der Anzahl der Primzahlen in der Faktorbasis, weil für eine garantierte Lösung die Zahl der linear unabhängigen Exponentenvektoren modulo 2 der Zahl der Primzahlen in der Faktorbasis entsprechen muss. Zur linearen Unabhängigkeit sind bis zu diesem Punkt keine weiteren Informationen bekannt, so dass einfach mehr brauchbare g(r) berechnet werden. Das weitere Vorgehen entspricht dem Dixon Algorithmus. Für die Vektoren v(r) ergeben sich: 91 v( r1 ) = (0, 1, 0, 1, 0, 0, 1) v( r2 ) = (5, 0, 0, 2, 0, 0, 0) v( r4 ) = (5, 2, 0, 0, 1, 0, 0) v( r6 ) = (3, 1, 0, 0, 1, 1, 0) v(r18 ) = (8, 1, 2, 0, 0, 0, 0) v(r25 ) = (0, 1, 2, 0, 0, 2, 0) v(r30 ) = (3, 2, 1, 1, 1, 0, 0) und die dazugehörige Matrix der w(r) ist: 0 1 1 1 0 0 1 1 0 0 1 1 1 0 0 0 0 0 0 0 1 1 0 0 0 0 0 1 0 0 1 1 0 0 1 0 0 0 1 0 0 0 1 0 0 0 0 0 0 Hier fällt auf, dass die Zeilen 5 und 6 identisch sind, so dass die Summe modulo 2 den Nullvektor ergibt. Daher sind g(r18 ) = 5592 und g(r25 ) = 5662 gute Kandidaten für die Faktorisierung von 293281: 19200 · 27075 ≡ 5592 · 5662 mod 293281 (28 · 3 · 52 ) · (3 · 52 · 192 ) ≡ 5592 · 5662 mod 293281 (24 · 3 · 52 · 19)2 ≡ (559 · 566)2 mod 293281. Mit 559 · 566 mod 293281 = 23113 und: ggT (23113 − 24 · 3 · 52 · 19, 293281) = 313 ggT (23113 + 24 · 3 · 52 · 19, 293281) = 937 erhält man die gesuchte Primfaktorzerlegung: 293281 = 313 · 937. 92 Nachteilig an diesem Verfahren ist der immense Speicherbedarf. Das Siebverfahren selbst lässt sich gut auf mehrere Rechner aufteilen, nur die Lösung der Matrix muss dann zentral vorgenommen werden. Die Zeitkomplexität beträgt: √ (1 + )· O e ln (n)·ln (ln (n)) . 4.4.4.3 Weitere Änderungen Für diesen Algorithmus gibt es viele Verbesserungen, die wichtigsten sollen im Folgenden erwähnt werden. Matrix Operationen Die Matrix mit den Exponentenvektoren modulo 2 lässt sich gut mit dem Gauss Algorithmus auösen; allerdings gibt es für dieses Problem angepasste und damit schnellere Varianten. Es existieren auch einige für diese Berechnung bessere Algorithmen, wie etwa der Lanczos Algorithmus (siehe [Montgomery 95]) oder der Wiedemann Algorithmus (siehe [Wiedemann 86]). Groÿe Primzahlen Beim Sieben bis zur Grenze der Faktorbasis kann man feststellen, dass gröÿere nicht in der Faktorbasis enthaltene Primzahlen als Rest übrig bleiben. Im Beispiel bleiben die Zahlen 29, 59, 439, 967 und 2341, die hier tatsächlich alle Primzahlen sind, übrig. Natürlich kann man eine gröÿere Faktorbasis wählen; allerdings wird mit gröÿeren Primzahlen auch der Aufwand immer gröÿer. Das betrit gerade das Finden des ersten g(r), welcher ohne Rest teilbar ist. Für groÿe Primzahlen führt der Weg dahin über die Probedivision. Anstatt die Faktorbais zu vergröÿern, werden nach dem Sieben die übriggebliebenen Einträge sortiert und es wird überprüft, ob für groÿe Primzahlen in der Nähe der Faktorbasis mehrere gleiche Einträge zu nden sind. Das bedeutet, dass die Faktorbasis nicht vergröÿert wird, aber günstige Ergebnisse auÿerhalb diesen Bereichs trotzdem berücksichtigt werden, so dass mehr komplett faktorisierte g(r) gefunden werden. Einzelheiten zu diesem Thema nden sich etwa in [Lenstra 94]. 93 MPQS Die g(r) lassen sich besser vollständig in kleine Primfaktoren zerlegen, wenn sie selbst keine groÿen Zahlen33 sind. Um dies auszunutzen, werden verschiedene quadratische Polynome der Form (ar + b)2 − n auf kürzere Intervalle eingesetzt. Die Abkürzung MPQS steht für Multiple Polynomial Quadratic Sieve. Vorgestellt wurde dieses Verfahren in [Davis 83]. In diesem Zusammenhang kann man auch oft den Zusatz selbstinitialisiernd lesen. Selbstinitialisierend bedeutet, dass der beim Wechsel der Polynome entstehende Aufwand minimiert wird, indem für ein festes a viele verschiedene dazu passende b generiert werden (siehe [Alford 93]). 4.4.5 Zahlkörpersieb (NFS) Das Zahlkörpersieb, abgekürzt auch als NFS (Number Field Sieve) bezeichnet, ist derzeit der für groÿe Zahlen schnellste Faktorisierungsalgorithmus. Vorgestellt wurde er 1988 von Pollard als ein Algorithmus für spezielle Zahlen der Form re − s (siehe [Lenstra 93, S. 4 - 10]). Heute kann man mit dem Zahlkörpersieb auch allgemeine Zahlen faktorisieren, so dass die jeweils angepassten Algorithmen für die allgemeinen Zahlen GNFS (General Number Field Sieve) und für die speziellen Zahlen SNFS (Special Number Field Sieve) heiÿen. Das Verfahren entspricht dem quadratischen Sieb mit dem Unterschied, dass beim Zahlkörpersieb ein für die Zahl n passender algebraischer Zahlkörper verwendet wird. Soll zum Beispiel die Zahl n = 247 = 113 + 2 fak√ torisiert werden, so wird Q( 3 −2) gewählt, weil 113 ≡ −2 mod n gilt und √ zwischen den algebraischen Zahlen a + bz + cz 2 mit z = 3 −2 und den Restklassen modulo n ein Homomorphismus34 besteht. Dieser Homomorphismus ist der zentrale Gedanke beim Zahlkörpersieb (siehe [Pomerance 96]). Die Komplexität beim allgemeinen Zahlkörpersieb ist: √ (1,92 + )· 3 ln (n)·(ln (ln (n))2 O e . 33 g(r) √ = r2 − n, r = b nc + i 34 Ein Homomorphismus ist eine strukturerhaltende Abbildung für die f (y) gilt. 94 f (x±y) = f (x)± Das Verfahren im Einzelnen soll hier nicht weiter vorgestellt werden, weil es ein zu umfangreiches Thema ist und abgesehen von dem algebraischen Zahlkörper bei einer einführenden Darstellung gegenüber dem quadratischen Sieb keine weiteren neuen Erkenntnisse liefert. Eine sehr gute Darstellung der Entwicklung des Zahlkörpersiebs ndet sich in [Samoa 03]. 4.5 Zusammenfassung Entscheidend bei der Suche nach den Faktoren einer Zahl ist es natürlich, welcher Algorithmus eingesetzt wird. Einzelheiten dazu nden sich bei den jeweiligen Beschreibungen der Algorithmen. Daraus ergibt sich folgendes Vorgehen. 1. Da ein Test35 , ob eine Zahl eine Primzahl oder eine zusammengesetzte Zahl ist, recht schnell ausgeführt werden kann, sollte man vor dem Versuch eine Zahl zu faktorisieren, was unter Umständen eine exponentielle Laufzeit erfordert, diesen Test durchführen. Sind es kleine Zahlen36 , die faktorisiert werden sollen, dann kann gleich zu Punkt 3 übergegangen werden. 2. Sind weitere Informationen zur Zahl vorhanden? Zahlen mit bestimmter Formen können unter Umständen leichter faktorisiert werden. Ist beispielsweise bekannt, dass ein Faktor die Form 803k + 1 hat, dann würde bei der Probedivision die zu testenden Divisionen auch mit Zahlen der Form 803k + 1 durchgeführt werden und damit wäre das Verfahren wesentlich schneller. Andere Beispiele sind Punkt 5 und die Mersenne Zahlen aus Abschnitt 4.1.1. 3. Bis ≈ 107 sollte die Probedivision37 durchgeführt werden, falls Punkt 4 nicht verfügbar ist. Ist das nicht der Fall, dann ist die Probedivision nur bis ≈ 104 die bessere Wahl. 35 siehe Abschnitt 4.2 36 n < 1000 37 Hier handelt es sich um die Angabe der Gröÿe der zu suchenden Faktoren. Natürlich sollte man auch bei hundertstelligen Zahlen die kleinen Faktoren mittels Probedivision oder ähnlichen Verfahren abgespalten oder ausgeschlossen werden. 95 4. Für Faktoren von ≈ 104 bis ≈ 107 sollte zu diesem Zeitpunkt der Pollard Rho Algorithmus eingesetzt werden. 5. An dieser Stelle sollte sichergestellt werden, dass es sich bei der zu faktorisierenden Zahl um keine Potenz der Form pk handelt. Alle Algorithmen, die auf der Legendre Kongruenz beruhen, versagen in einem solchen Fall. Ein Test auf eine Potenz hin kann im wesentlichen in linearer Zeit entschieden werden (siehe [Bernstein 98]). 6. Bevor die Algorithmen der nächsten Punkte eingesetzt werden, sollte man Algorithmen ausprobieren, die noch zur Verfügung stehen, beispielsweise der p − 1 Algorithmus (siehe Abschnitt 4.4.1.2), der Algorithmus von Fermat (siehe Abschnitt 4.3.4) oder die verbesserte Version von Lehman (siehe Abschnitt 4.3.6). Auch für den SQUFOF Algorithmus von Shanks ist hier der richtige Zeitpunkt (siehe 4.4.2.1). Mit ein wenig Glück werden Primfaktoren von n auf diese Weise gefunden. Es entsteht kein wirklicher Nachteil, wenn auf diesen Punkt ein wenig Zeit investiert wird. Im umgekehrten Fall ist es aber so, dass bei zeitlich groÿem Aufwand durch die Punkte 7 und 8 das Ergebnis nicht besser wird, nur weil man einen asymptotisch besseren Algorithmus eingesetzt hat. 7. Sind für zusammengesetzte Zahlen, die keine Potenzen sind, bis hierher noch keine Faktoren gefunden, so sind die elliptischen Kurven eine gute Wahl. Der Vorteil gegenüber den Siebverfahren liegt im geringen Speicherverbrauch. Einschlieÿlich der elliptischen Kurven hängt die Laufzeit der verwendeten Algorithmen von der Gröÿe der Primteiler ab. Bis etwa 40 Stellen ist das Verfahren den Siebverfahren vorzuziehen. Darüber nur dann, wenn man Kenntnis von einem kleinen Primteiler dieser Gröÿe hat. 8. Letztlich bleiben dann noch die beiden Siebverfahren MPQS und GNFS. Für über 100 Stellen und für Rekorde hat sich in den letzten 10 Jahren das Zahlkörpersieb durchgesetzt. Darunter kann man durchaus das quadratische Sieb einsetzen, welches auch leichter implementierbar ist. 96 Kapitel 5 Ausblick Die Faktorisierung von Zahlen ist ein aktives Forschungsgebiet und es ist davon auszugehen, dass es hier auch zukünftig Neues geben wird. Das kann auf drei Gebieten erfolgen. neue Algorithmen Verbesserungen, sowohl Algorithmen als auch die Technik betreend neuartige Rechner Auf dem Gebiet der Mathematik gibt es immer neue Ideen, die zu neuen Algorithmen führen und im Nachhinein sind es oft erstaunlich einfache Gedanken, welche die Entwicklung voran treiben. Es ist aber auch so, dass man die Entwicklung schwer oder gar nicht abschätzen kann. Natürlich kann es sein, dass plötzlich ein Algorithmus gefunden wird, der Zahlen in Polynomzeit zerlegt. Oder es wird nur bewiesen, dass ein solcher Algorithmus exitiert, ohne ihn gefunden zu haben. Und genauso gut ist es möglich, dass es so einen Algorithmus gar nicht gibt. Letztlich sind das alles Spekulationen. Verbesserungen der Technik gibt es ständig, alle paar Monate gibt es neue schnellere Rechner. Optimierungen an den bekannten Algorithmen gibt es auch recht häug, wenn auch nicht in so kurzen Zyklen wie bei der Technikentwicklung. Letztlich, so beeindruckend die Entwicklungen auf diesem Gebieten auch sind, ändern sie nichts an dem grundlegenden Problem, dass es im allgemeinen schwierig ist, groÿe Zahlen in ihre Primfaktoren zu zerlegen. Dass es neuartige Rechner gibt, die Berechnungen auf vollkommen neue 97 Weise ausführen, ist wohl der seltenste Fall bei diesen drei Punkten und tatsächlich gibt es mit dem Konzept eines Quantenrechners die momentan noch theoretische Möglichkeit, Zahlen in polynomieller Zeit in ihre Faktoren zu zerlegen. Im Februar diesen Jahres wurde von D-Wave Systems in Kalifornien ein erster Quantenprozessor mit 16 QBits vorgestellt (siehe [Heise 07]) und bereits 2001 demonstrierte IBM mittels Quantentechnik die Faktorisierung der Zahl 15 in ihre Faktoren 5 und 3. Der technische Aufwand für diese Technik ist sehr hoch und zur Zeit ist es nicht möglich, Quantenrechner in entsprechende Gröÿe zu realisieren. Die Grundlagen eines Quantencomputers (siehe [Hirvensalo 04]) sollen hier nicht vorgestellt werden, aber zum Abschluss dieser Arbeit der Shor Algorithmus (siehe [Shor 96]). 5.1 Der Shor Algorithmus Der Algorithmus von Shor wurde 1994 vorgestellt und basiert gröÿtenteils auf klassischen Rechnungen. Bei der Berechnung der Ordnung greift er auf die Quantenfouriertransformation zurück. Angenommen, es würde ein Quantenrechner ausreichender Gröÿe existieren, dann würde dieser Schritt dazu führen, dass Zahlen in einer Zeitkomplexität von O(n3 log(n)) in ihre Faktoren zerlegt werden können und viele der aktuell eingesetzten kryptograschen Verfahren nicht mehr sicher wären. Das ist auch ein Grund für den Bekanntheitsgrad dieses Verfahrens. Sei n eine ungerade, zusammengesetzte Zahl und keine perfekte Potenz. Es wird zufällig eine Zahl z mit z > 1 und ∈ Zn gewählt und überprüft, ob ggT (z, n) = 1 gilt. Dann wird die Ordnung r von z in Zn berechnet. Das ist der Teil des Verfahrens, der auf einem Quantenrechner abläuft (siehe [Hirvensalo 04, S. 63 - 69]). Ist r die Ordnung, dann gilt: z r = z 0 ≡ 1 mod n. Aus z r ≡ 1 mod n folgt, dass n die Dierenz z r − 1 teilt und für eine ger r r rade Zahl r folgt aus z r − 1 = (z 2 − 1)(z 2 + 1), dass mit ggT (z 2 − 1, n) ein Faktor der Zahl n berechnet werden kann. Für den Fall, dass sich ein 98 trivialer Faktor ergibt, wird eine neue zufällige Zahl zur Berechnung genommen. Dies gilt auch für den Fall, dass es sich bei r um eine ungerade 1 . Dabei ist k Zahl handelt. Die Wahrscheinlichkeit dafür ist höchstens 2k−1 die Anzahl der verschiedenen Primzahlen in der Primfaktorzerlegung von n. Sei beispielsweise n = 91 und z = 23. Die Ordnung von z in Z91 ist 6, weil 236 ≡ 1 mod 91 gilt. Daraus folgt: 6 23 2 − 1 = 12166 ggT (12166, 91) = 7 91 = 7 · 13. 99 Anhang A Inhalt der CD Zu dieser Diplomarbeit wurde eine CD erstellt, auf der die verschiedenen zitierten Internetseiten1 , einige online frei verfügbare Quellen, die freien Implementationen der Faktorisierungsalgorithmen und diese Arbeit selbst im PDF-Format zu nden sind. Die Daten sind in den einzelnen Unterverzeichnissen zu nden, die so benannt wurden wie die Quellen im Literaturverzeichnis. Bei den Internetseiten ist jeweils die Datei index.html die entsprechende Startseite. Auf der CD enthaltene Verzeichnisse: [Atkin 04] [Bernstein 98] [Bernstein 03] [Bourseau 02] [Brent 81] [Davis 83] [ECMNET 07] [Hartmann 07]2 1 Zum Oine-Speichern der Internetseiten wurde die Freeware WinHTTrack Website Copier 3.41-3 benutzt, die unter http://www.httrack.com erhältlich ist. 2 Hier ist diese Diplomarbeit in elektronischer Form zu nden. 100 [Heise 07] [IBM 01] [Lehmer 31] [Lemmermeyer 00] [Lenstra 87] [Lenstra 93] [Lenstra 01] [Lenstra 03] [Maxima 07] [Monico 07] [McKee 99] [McMath 04] [Pomerance 96] [PrimeKit 07] [PGP 07] [Reinicke 07] [Robertson 07] [Röpke 07] [RSA 07] [Samoa 03] [Shor 96] [Wachter 05] [Weisstein 03] 101 Anhang B Liste der ersten tausend Primzahlen 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199 211 223 227 229 233 239 241 251 257 263 269 271 277 281 283 293 307 311 313 317 331 337 347 349 353 359 367 373 379 383 389 397 401 409 419 421 431 433 439 443 449 457 461 463 467 479 487 491 499 503 509 521 523 541 547 557 563 569 571 577 587 593 599 601 607 613 617 619 631 641 643 647 653 659 661 673 677 683 691 701 709 719 727 733 739 743 751 757 761 769 773 787 797 809 811 821 823 827 829 839 853 857 859 863 877 881 883 887 907 911 919 929 937 941 947 953 967 971 977 983 991 997 1009 1013 1019 1021 1031 1033 1039 1049 1051 1061 1063 1069 1087 1091 1093 1097 1103 1109 1117 1123 1129 1151 1153 1163 1171 1181 1187 1193 1201 1213 1217 1223 1229 1231 1237 1249 1259 1277 1279 1283 1289 1291 1297 1301 1303 1307 1319 1321 1327 1361 1367 1373 1381 1399 1409 1423 1427 1429 1433 1439 1447 1451 1453 1459 1471 1481 1483 1487 1489 1493 1499 1511 1523 1531 1543 1549 1553 1559 1567 1571 1579 1583 1597 1601 1607 1609 1613 1619 1621 1627 1637 1657 1663 1667 1669 1693 1697 1699 1709 1721 1723 1733 1741 1747 1753 1759 1777 1783 1787 1789 1801 1811 1823 1831 1847 1861 1867 1871 1873 1877 1879 1889 1901 1907 1913 1931 1933 1949 1951 1973 1979 1987 1993 1997 1999 2003 2011 2017 2027 2029 2039 2053 2063 2069 2081 2083 2087 2089 2099 2111 2113 2129 2131 2137 2141 2143 2153 2161 2179 2203 2207 2213 2221 2237 2239 2243 2251 2267 2269 2273 2281 2287 2293 2297 2309 2311 2333 2339 2341 2347 2351 2357 2371 2377 2381 2383 2389 2393 2399 2411 2417 2423 2437 2441 2447 2459 2467 102 2473 2617 2707 2801 2917 3041 3181 3301 3391 3527 3617 3727 3851 3947 4079 4211 4297 4447 4561 4673 4799 4937 5023 5167 5297 5419 5521 5653 5779 5867 6029 6133 6263 6359 6491 6637 6761 2477 2621 2711 2803 2927 3049 3187 3307 3407 3529 3623 3733 3853 3967 4091 4217 4327 4451 4567 4679 4801 4943 5039 5171 5303 5431 5527 5657 5783 5869 6037 6143 6269 6361 6521 6653 6763 2503 2633 2713 2819 2939 3061 3191 3313 3413 3533 3631 3739 3863 3989 4093 4219 4337 4457 4583 4691 4813 4951 5051 5179 5309 5437 5531 5659 5791 5879 6043 6151 6271 6367 6529 6659 6779 2521 2647 2719 2833 2953 3067 3203 3319 3433 3539 3637 3761 3877 4001 4099 4229 4339 4463 4591 4703 4817 4957 5059 5189 5323 5441 5557 5669 5801 5881 6047 6163 6277 6373 6547 6661 6781 2531 2657 2729 2837 2957 3079 3209 3323 3449 3541 3643 3767 3881 4003 4111 4231 4349 4481 4597 4721 4831 4967 5077 5197 5333 5443 5563 5683 5807 5897 6053 6173 6287 6379 6551 6673 6791 2539 2659 2731 2843 2963 3083 3217 3329 3457 3547 3659 3769 3889 4007 4127 4241 4357 4483 4603 4723 4861 4969 5081 5209 5347 5449 5569 5689 5813 5903 6067 6197 6299 6389 6553 6679 6793 2543 2663 2741 2851 2969 3089 3221 3331 3461 3557 3671 3779 3907 4013 4129 4243 4363 4493 4621 4729 4871 4973 5087 5227 5351 5471 5573 5693 5821 5923 6073 6199 6301 6397 6563 6689 6803 2549 2671 2749 2857 2971 3109 3229 3343 3463 3559 3673 3793 3911 4019 4133 4253 4373 4507 4637 4733 4877 4987 5099 5231 5381 5477 5581 5701 5827 5927 6079 6203 6311 6421 6569 6691 6823 103 2551 2677 2753 2861 2999 3119 3251 3347 3467 3571 3677 3797 3917 4021 4139 4259 4391 4513 4639 4751 4889 4993 5101 5233 5387 5479 5591 5711 5839 5939 6089 6211 6317 6427 6571 6701 6827 2557 2683 2767 2879 3001 3121 3253 3359 3469 3581 3691 3803 3919 4027 4153 4261 4397 4517 4643 4759 4903 4999 5107 5237 5393 5483 5623 5717 5843 5953 6091 6217 6323 6449 6577 6703 6829 2579 2687 2777 2887 3011 3137 3257 3361 3491 3583 3697 3821 3923 4049 4157 4271 4409 4519 4649 4783 4909 5003 5113 5261 5399 5501 5639 5737 5849 5981 6101 6221 6329 6451 6581 6709 6833 2591 2689 2789 2897 3019 3163 3259 3371 3499 3593 3701 3823 3929 4051 4159 4273 4421 4523 4651 4787 4919 5009 5119 5273 5407 5503 5641 5741 5851 5987 6113 6229 6337 6469 6599 6719 6841 2593 2693 2791 2903 3023 3167 3271 3373 3511 3607 3709 3833 3931 4057 4177 4283 4423 4547 4657 4789 4931 5011 5147 5279 5413 5507 5647 5743 5857 6007 6121 6247 6343 6473 6607 6733 6857 2609 2699 2797 2909 3037 3169 3299 3389 3517 3613 3719 3847 3943 4073 4201 4289 4441 4549 4663 4793 4933 5021 5153 5281 5417 5519 5651 5749 5861 6011 6131 6257 6353 6481 6619 6737 6863 6869 6983 7121 7243 7411 7529 7621 7741 7879 6871 6991 7127 7247 7417 7537 7639 7753 7883 6883 6997 7129 7253 7433 7541 7643 7757 7901 6899 6907 7001 7013 7151 7159 7283 7297 7451 7457 7547 7549 7649 7669 7759 7789 7907 7919 6911 7019 7177 7307 7459 7559 7673 7793 6917 7027 7187 7309 7477 7561 7681 7817 6947 7039 7193 7321 7481 7573 7687 7823 104 6949 7043 7207 7331 7487 7577 7691 7829 6959 7057 7211 7333 7489 7583 7699 7841 6961 7069 7213 7349 7499 7589 7703 7853 6967 7079 7219 7351 7507 7591 7717 7867 6971 7103 7229 7369 7517 7603 7723 7873 6977 7109 7237 7393 7523 7607 7727 7877 Literaturverzeichnis [Agrawal 02] Manindra Agrawal, Neeraj Kayal und Nitin Saxena: PRIMES is in P, Department of Computer Science & Engineering, Indian Institute of Technology Kanpur, 2002 [Alford 93] W.R. Alford, Carl Pomerance: Implementing the Self Initializing Quadratic Sieve on a Distributed Network, in Number Theoretic and Algebraic Methods in Computer Science, Proceedings of the International Conference, Moscow, 1993, Singapore: World Scientic, 1995, S. 163 - 174 [Atkin 04] A.O.L. Atkin, D.J. Bernstein: Prime Sieves Using Binary Quadratic Forms, Mathematics of Computation, V. 73, N. 246, 2004, S. 1023 - 1030 [Bartsch 97] Hans-Jochen Bartsch: Taschenbuch meln, Carl Hanser Verlag, 1997 [Bell 89] Duncan A. Bell: mathematischer For- Binary Quadratic Forms - Classical Theory and Modern Computations, Springer, 1989 [Bernstein 98] Daniel J. Bernstein: Detecting Perfect Powers In Essentially Linear Time, Mathematics Of Computation, V. 67, N. 223, 1998, S. 1253 - 1283, http://citeseer.ist.psu.edu/550663.html, 22.08.2007 [Bernstein 03] Daniel J. Bernstein: Proving primality in essentially quartic random time, http://cr.yp.to/papers.html#aks 2003, 05.07.2007 [Blum 86] L. Blum, M. Blum, M. Shub, A Simple Unpredictable PseudoRandom Number Generator, Siam Journal on Computing, V. 15, N. 2, 1986, S. 364 - 383 105 [Bourseau 02] Frank Bourseau, Dirk Fox, Christoph Thiel: Vorzüge und Grenzen des RSA-Verfahrens, Datenschutz und Datensicherheit, 2/2002, S. 84 - 89, http://www.secorvo.de/publikationen/publikationsliste.html#2002, 15.08.2007 [Brent 80] Richard P. Brent: An Improved Monte Carlo Factorization Algorithm, Nordisk Tidskrift for Informationsbehandlung, BIT, V. 20, N. 2, 1980, S. 176 - 184 [Brent 81] Richard P. Brent, J.M. Pollard: Factorization of the Eighth Fermat Number, Mathematics of Computation, V. 36, N. 154, 1981, S. 627 - 630 http://wwwmaths.anu.edu.au/brent/pub/pub061.html, 23.08.2007 [Bressoud 89] David M. Bressoud: Springer, 1989 Factorization and Primality Testing, [Bundschuh 98] Peter Bundschuh: Springer, 1998 Einführung in die Zahlentheorie, [Cavallar 00] Stefania Cavallar et al.: Factorization of a 512-Bit Modulus, Advances in Cryptology - EUROCRYPT 2000, Springer, 2000, S. 1 18 [Crandall 05] Richard Crandall, Carl Pomerance: Computational Perspective, Springer, 2005 Prime Numbers - A [Damgård 93] I.B. Damgård, P. Landrock: Improved Bounds for the Rabin Primality Test, Cryptography and Coding III, Oxford Clarendon Press, 1993, S. 117 - 128 [Davis 83] James A. Davis, Diane B. Holdridge: Factorization Using the Quadratic Sieve Algorithm, Advances in Cryptology - CRYPTO 1983, Springer, 1983, S. 103 - 113 http://dsns.csie.nctu.edu.tw/research/crypto/HTML/C83.HTM, 21.08.2007 [Dixon 81] John D. Dixon: Asymptotically Fast Factorization of Integers, Mathematics of Computation, V. 36, N. 153, 1981, S. 255 - 260 106 [ECMNET 07] The ECMNET Project: GMP-ECM 6.0.1, http://www.loria.fr/zimmerma/records/ecmnet.html, 06.07.2007 [Eisenreich 94] Günther Eisenreich, Ralf Sube: tics, Verlag Harri Deutsch, 1994 [Euklid 03] Euklid, 2003 Dictionary Of Mathema- Die Elemente, Buch I - XIII, [Floyd 67] Robert W. Floyd: Nondeterministic the ACM, V. 14, N. 4, 1967, S. 636 - 644 Verlag Harri Deutsch, Algorithms, Journal of [Floyd 96] Robert W. Floyd, Richard Beigel: Die Sprache der Maschinen, International Thomson Publishing, 1996 [Franke 05] Jens Franke et al.: SHARK: A Realizable Special Hardwa- reSieving Device for Factorung 1024-Bit Integers, Cryptographic Hardware and Embedded Systems - CHES 2005, Springer, 2005, S. 119 - 130 [Gardner 77] M. Gardner: A New Kind of Cipher That Would Take Mil- lions of Yeras to Break, Scienttic American, V. 237, N. 8, 1977, S. 120-124 [Gauss 01] Carl Friedrich Gauss: Disquisitiones scher, Leipzig, 1801 Arithmeticae, Gerh. Flei- [Hardy 68] Godfrey Harold Hardy, Edward Maitland Wright: An Introduction to the Theory of Numbers, Oxford University Press, 1968 [Heise 07] Heise Online: Erster Quantenprozessor der Welt vorgestellt, Newstickermeldung vom 14.02.2007 http://www.heise.de/newsticker/meldung/85299, 22.08.2007 [Hilbert 89] Alfred Hilbert: Mathematik, [Hirvensalo 04] Mika Hirvensalo: [IBM 01] IBM: Fachbuchverlag Leipzig, 1989 Quantum Computing, Springer, 2004 IBM's Test-Tube Quantum Computer Makes History - First demonstration of Shor's historic factoring algorithm, Newsmeldung vom 19.12.2001, 107 IBM http://domino.watson.ibm.com/comm/pr.nsf/pages/ news.20011219_quantum.html, 22.08.2007 [IEEE P1363 / D13] IEEE P1363 / D13: Standard Specications for Public Key Cryptography, Anhang A, Number-Theoretic Background, 1999 [Jänich 96] Klaus Jänich: Lineare Algebra, [Knuth 98] Donald Erwin Knuth: Springer, 1996 The Art of Computer Programming - Third Edition, Volume 2 - Seminumerical Algorithms, Addison Wesley Longman, 1998 [Kraïtchik 26] Maurice Kraïtchik: Théorie Villlars, 1926, S. 195 - 208 des Nombres, Paris, Gauthier- [Landrock 93] I.B. Damgard, P. Landrock, C. Pomerance: Average Case Error Estimates for the Strong Probable Prime Test, Mathematics of Computation, V. 61, N. 203, 1993, S. 177 - 194 [Lehman 74] R.S. Lehman: Factoring Large Computation, V. 28, S. 637 - 646, 1974 Integers, Mathematics of [Lehmer 31] Derrick Henry Lehmer, R.E. Powers: On Factoring Large Numbers,Bulletin of the American Mathematical Society, V. 37, N. 10, 1931, S. 770 - 776, http://projecteuclid.org/euclid.bams/1183495051, 14.08.2007 [Lemmermeyer 00] Franz Lemmermeyer: Kreise und Quadrate modulo p, Mathematische Semesterberichte, V. 47, N. 1, S. 51 - 73, 2000, http://www.fen.bilkent.edu.tr/franz/publ.html, 16.08.2007 [Lenstra 87] Hendrik W. Lenstra, Jr: Factoring integers with elliptic curves, Annals of Mathematics, V. 126, 1987, S. 649 - 673, https://openaccess.leidenuniv.nl/bitstream/1887/3826/1/346_086.pdf, 31.07.2007 [Lenstra 93] Arjen K. Lenstra, Hendrik W. Lenstra, Jr. (Hrsg.): The Development of the number eld sieve, Lecture Notes in Mathematics, V. 1554, Springer, 1993, https://openaccess.leidenuniv.nl/bitstream/1887/2149/1/346_114.pdf, 31.07.2007 108 [Lenstra 94] Arjen K. Lenstra, Mark S. Manasse: Factoring with Two Large Primes, Mathematics of Computation, V. 63, N. 208, 1994, S. 785 - 798 [Lenstra 00] Arjen K. Lenstra, Adi Shamir: Analysis and Optimization of the TWINKLE Factoring Device, Advances in Cryptology - EUROCRYPT 2000, Springer, 2000, S. 35 - 52 [Lenstra 01] Arjen K. Lenstra: Selecting Cryptographic Key 2000, Journal of Cryptology, V. 14, 2001, S. 255 - 293 www.win.tue.nl/klenstra, 03.08.2007 Sizes, PKC [Lenstra 02] Arjen K. Lenstra et al: Analysis of Bernstein's Factorization Circuit, Advances in Cryptology - ASIACRYPT 2002, Springer, 2002, S. 1 - 26 [Lenstra 03] Arjen K. Lenstra: Factoring estimates for a 1024-bit RSA modulus, Asiacrypt 2003, www.win.tue.nl/klenstra, 03.08.2007 [Maxima 07] Open 06.07.2007 Source: Maxima, http://maxima.sourceforge.net, [McMath 04] Stephen McMath: Daniel Shanks' Square Forms zation, http://cadigweb.ew.usna.edu/wdj/mcmath, 14.08.2007 Factori- [McKee 99] James McKee: Speeding Fermat's Factoring Method, Mathematics of Computation, V. 68, N. 228, S. 1729 - 1737, 1999, http://www.ams.org/mcom/1999-68-228/S0025-5718-99-01133-3, 11.08.2007 [Miller 76] Gary L. Miller: Riemann's Hypothesis and Tests for Primality, Journal of Computer Systems Science, V. 13, N. 3, 1976, S. 300 317 [Monico 07] Chris Monico: GGNFS - A Number Field Sieve implementation, http://www.math.ttu.edu/cmonico/software/ggnfs, 06.07.2007 [Montgomery 85] Peter L. Montgomery: Modular Multiplication Without Trial Division , Mathematics of Computation, V. 44, N. 170, S. 519 - 521, 1985 109 [Montgomery 95] Peter L. Montgomery: A block Lanczos algorithm for nding dependencies over GF(2), Advances in Cryptology - EUROCRYPT 1995, Springer, 1995, S. 106 - 120 [Morrison 75] Michael. A. Morrison, John Brillhart: A Method of Factoring and the Factorization of F7 , Mathematics of Computation, V. 29, 1975, S. 183 - 205 [Padberg 96] Friedhelm Padberg: Akademischer Verlag, 1996 Elementare Zahlentheorie, Spektrum [PGP 07] New Factoring Record, http://www.pgp.com/newsroom/ctocorner/factoring.html, 02.07.2007 [Pollard 74] J.M.Pollard: Theorems on Factorization and Primality Testing, Mathematical Proceedings of the Cambridge Philosophical Society, V. 76, 1974, S. 521 - 528 [Pollard 75] J.M.Pollard: A Monte Carlo Method for Factorization, Nordisk Tidskrift for Informationsbehandlung, BIT, V. 15, N. 3, 1975, S. 331 - 334 [Pomerance 82] Carl Pomerance: Analysis and comparison on some integer factoring algorithms, in Hendrik W. Lenstra, Jr., R. Tijdeman (Hrsg.): Computational methods in number theory, Part I, V. 154 of Mathematical Centre Tracts, Mathematisch Centrum, Amsterdam, 1982, S. 89 - 139 [Pomerance 96] Carl Pomerance: A Tale of Two Sieves, Notices of the AMS, V. 43, N. 12, 1996, S. 1473 - 1485 http://www.ams.org/notices/199612, 21.08.2007 [PrimeKit 07] Richard Crandall, Carl Pomerance: PrimeKit, http://www.perfsci.com/freegoods.htm#primekit, 06.07.2007 [Rabin 80] Michael O. Rabin: Probabilistic Algorithms for Testing Primality, Journal of Number Theory, V. 12, N. 1, 1980, S. 128 - 138 [Reinicke 07] Thorsten Reinicke: Qsieve, http://www.thorstenreinecke.de/qsieve, 06.07.2007 110 [Riesel 94] Hans Riesel: Prime Numbers and Computer Methods for Factorization - Second Edition, Birkhäuser, 1994 [Robertson 07] Edmund Robertson: The MacTutor History of Mathematics, http://www-history.mcs.st-andrews.ac.uk/history, 02.07.2007 [Röpke 07] Christian Röpke: Faktorisieren mittels Kettenbruch - Im- plementation zur Veranschaulichung, http://www.christianroepke.de/studium_kryptographie2.html, 06.07.2007 [Rothe 05] Joerg Rothe: 2005 Complexity Theory And Cryptology, [RSA 78] Ron Rivest, Adi Shamir, Leonard Adleman: Springer, A Method for Ob- taining Digital Signatures and Public-Key Cryptosystems, Com- munications of the ACM, V. 21, N. 2, 1978 [RSA 07] RSA Laboratories: The RSA Factoring Challenge, http://www.rsa.com/rsalabs/node.asp?id=2092, 02.07.2007 [Samoa 03] Katja Schmidt-Samoa: Das Number Field Sieve: Entwicklung, Varianten und Erfolge, Universität Kaiserslautern, 2003, http://www.informatik.tu-darmstadt.de/KP/katja.html, 08.08.2007 [Schneier 96] Bruce Schneier: Wesley, 1996 Angewandte Kryptographie, Addison- [Shor 96] Peter W. Shor: Polynomial-Time Algorithms for Prime Factorization and Discrete Logarithms on a Quantum Computer, SIAM Journal on Computing, V. 26, N. 5, 1997, S. 1484 - 1509, http://citeseer.ist.psu.edu/25085.html, 22.08.2007 [Stinson 02] Douglas R. Stinson: Cryptography - Theory Second Edition, Chapman & Hall/CRC, 2002 an Practice - [Shamir 03] Adi Shamir, Eran Tromer: Factoring Large Numbers with the TWIRL Device, Advances in Cryptology - CRYPTO 2003, S. 1 26, Springer, 2003 111 [Vazirani 84] U.V. Vazirani, V.V. Vazirani: Ecient and Secure PseudoRandom Number Generation, Proceedings of the 25th Symposium on the Foundations of Computer Science, 1984, S. 458 - 463 [Wachter 05] Michael Wachter: Der AKS-Primtest, Universität Konstanz, Fachbereich Mathematik und Statistik, 2005, www.iam.unibe.ch/run/download.php?pdf=wachter05, 05.07.2007 [Weisstein 99] Eric W. Weisstein: CRC Concise THEMATICS, CRC Press LLC, 1999 Encyclopedia of MA- [Weisstein 03] Eric W. Weisstein: Birthday Problem, http://mathworld.wolfram.com/BirthdayProblem.html, 22.07.2007 [Wiedemann 86] Douglas H. Wiedemann: Solving sparse linear equations over nite elds, IEEE Transactions on Information Theory, V. 32, N. 1, 1986, S. 54 - 62 [Williams 82] H. C. Williams: A p + 1 Method of Factoring, Mathematics of Computation, V. 39, N. 159, 1982, pp. 225-234 [Witt 01] Stefan Witt, Peter Hartmann: Vergleichende Analyse und VHDL-basierte Implementation von Zufallszahlengeneratoren auf Chipkarten (SmartCards), Universität Hamburg, Fachbereich Infor- matik, Bericht Nr. 234, 2001 [Wussing 89] Hans Wussing: Vorlesungen zur Geschichte tik, Deutscher Verlag der Wissenschaften, 1989 der Mathema- [Zhang 96] Mingzhi Zhang: Factoring integers with conics, Journal of Sichuan University (Natural Science Edition), V. 33, N. 4, 1996, S. 356 - 359 112 Erklärung: Ich versichere, dass ich die vorstehende Arbeit selbstständig und ohne fremde Hilfe angefertigt und mich anderer als der im beigefügten Verzeichnis angegebenen Hilfsmittel nicht bedient habe. Alle Stellen, die wörtlich oder sinngemäÿ aus Veröentlichungen entnommen wurden, sind als solche kenntlich gemacht. Hamburg, 27. September 2007 Peter Hartmann