Diplomarbeit: Faktorisierungsalgorithmen natürlicher Zahlen

Werbung
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
Herunterladen