Quadratische Sieb

Werbung
PRAXIS & METHODIK
Faktorisieren mit dem
Quadratischen Sieb
Ein Beitrag zur Didaktik der Algebra und Kryptologie
von Ralph-Hardo Schulz und Helmut Witten
A Tale of Three Sieves
Sieve the twos and sieve the threes –
The sieve of Eratosthenes!
When the multiples sublime
The numbers which remain are prime!
Add log p as you advance –
Such is the sieve of Pomerance!
The largest sums which you have found
Give numbers which are smooth and round!
Mark out a gigantic square.
Add logs at random everywhere.
This brief account you must forgive
Of Pollard’s Number Field Sieve!
John M. Pollard
Eines der zurzeit schnellsten Verfahren zur Faktorisierung ganzer Zahlen ist das Quadratische Sieb (engl.: quadratic sieve factorization method), das im Jahr 1981 von
Carl Pomerance unter Weiterentwicklung einer Idee von
Richard Schroeppel entwickelt wurde. Mit einer Variante dieses Siebs
konnte 1994 die Zahl RSA-129 mit
129 Dezimalstellen unter Leitung von
Derek Atkins, Michael Graff, Arjen
Lenstra und Paul Leyland (parallel
unter Mithilfe von 600 Freiwilligen)
in acht Monaten mit rund 1017 Operationen faktorisiert werden (vgl. Atkins u. a., 1994; Wikipedia – Stichwort
,,RSA-129“; Pomerance, 1996).
Diese Zahl war nicht Bestandteil
der berühmten ,,RSA Factoring
Challenge“, die von der Firma RSA
Security am 18. März 1991 begonnen
und im Jahr 2007 beendet wurde
(vgl. Wikipedia – Stichwort ,,RSA
Factoring Challenge“). RSA-129
wurde bereits im Jahr 1976 von Martin Gardner in der Zeitschrift Scientific American in einem Artikel über
das damals neu entwickelte RSAKryptosystem veröffentlicht und erhielt später – sozusagen ehrenhalber
– seinen Namen. Ron Rivest schätz-
70
te seinerzeit, dass man 40 Billiarden Jahre (engl.: quadrillion! years) benötigen würde, um diese Zahl zu faktorisieren (vgl. Wikipedia – Stichwort ,,The Magic
Words are Squeamish Ossifrage“). Die Faktorisierung
gelang dann aber schon nach 18 Jahren. (Zu weiteren
Einzelheiten vgl. Witten/Schulz, 2006, S. 55 ff.) Mit der
Entschlüsselung war klar, dass die für das RSA-Kryptosystem benötigte sichere Schlüssellänge wesentlich
größer sein musste.
Das Quadratische Sieb eignet sich besonders gut für
Zahlen mit höchstens 100 Dezimalstellen; das damit
konkurrierende ,,Zahlkörpersieb“ (engl.: number field
sieve) für Zahlen mit mehr als 130 Stellen. (Man beachte auch unsere Zeit-Experimente zur Faktorisierung;
vgl. Schulz/Witten, 2010.)
Wir beschreiben im Folgenden die Basisversion des
Quadratischen Siebs sowie die Variante des Quadratischen Siebs mit mehrfachen Polynomen, das sogenannte Multiple Polynomial Quadratic Sieve (MPQS), das von
James Davis und Diane Holdridge bzw.
Bild 1: Martin Gardner popularisierte
mathematische Themen.
Quelle: LOG-IN-Archiv und El Correo
LOG IN Heft Nr. 172/173 (2011/2012)
PRAXIS & METHODIK
Peter Montgomery unabhängig voneinander gefunden
wurde. Bei der Darstellung der Verfahren orientieren
wir uns an Buchmann (52010), Crandall/Pomerance
(22005), Esslinger u. a. (102010), Pomerance (1996) und
den einschlägigen Wikipedia-Artikeln.
Die Grundidee
Es sei die natürliche Zahl n zu faktorisieren. Dazu
bestimme man ganze Zahlen a und b mit
(1.1) a2 b2 (mod n) und
(1.2) a ±b (mod n).
Denn dann gilt: n teilt a2 – b2, aber weder a – b noch
a + b. Es existiert eine ganze Zahl t mit (a – b)(a + b) =
tn; wären (a – b) und n zueinander teilerfremd, so wäre
n ein Teiler von a + b ein Widerspruch. Somit hat man
mit ggT(a – b, n) einen echten Teiler von n gefunden.
Analog dazu ist ggT(a + b, n) echter Teiler von n. Solche Zahlen a und b sind aber i. Allg. nicht einfach zu
bestimmen.
Anmerkung: Das beschriebene Prinzip wird auch bei
anderen Faktorisierungsverfahren angewandt, z. B.
beim Verfahren von Fermat (s. u.) und beim schon erwähnten Zahlkörpersieb. Der Unterschied liegt im Vorgehen beim Bestimmen der Zahlen a und b.
Im Folgenden beschreiben wir zunächst das Faktorisieren nach Fermat; es enthält schon wesentliche Elemente des Quadratischen Siebs.
Das Faktorisierungsverfahren
von Fermat
Der Algorithmus
Gesucht ist eine natürliche Zahl a derart, dass a2 – n
gleich einem Quadrat b2 ist (dies bedingt a > √⎯⎯n ). Definiert man q(x) := x2 – n (als Kraitchik’s quadratisches
Polynom bezeichnet), so kann man q(x) für verschiedene x > √⎯⎯n solange berechnen, bis ein Quadrat b2 = q(a)
= a2 – n gefunden ist. Ähnlich wie oben erhält man dadurch die Zerlegung
(2.1) n = a2 – b2 = (a – b)(a + b) =
⎯⎯⎯⎯
q(a) )(a + √
⎯⎯⎯⎯
q(a) ).
(a – √
Damit q(x) nicht größer als nötig wird, wählt man x
nahe bei √⎯⎯n . Statt q(x) = x2 – n betrachtet man daher
LOG IN Heft Nr. 172/173 (2011/2012)
oft das Polynom g(x^) = (x^ + ⎡√⎯⎯n ⎤)2 – n. (Im Folgenden
bezeichnet m = ⎡√⎯⎯n ⎤ die kleinste natürliche Zahl, die
größer oder gleich √⎯⎯n . ist.)
Man untersucht nun nacheinander für x = m, x = m +
1, x = m + 2 usw., ob q(x) ein Quadrat ist – solange, bis
ein Quadrat gefunden wurde (was aber lange dauern
kann; s. u.). Die Hauptschleife des Algorithmus und ein
PYTHON-Programm finden sich in den beiden folgenden Kästen.
Hauptschleife des Verfahrens von Fermat
(nach Crandall/Pomerance (22005; 5.1.1); zur rechten Laufgrenze s. u.)
For ( ⎡√
⎯⎯n ⎤ ⱕ a ⱕ
n+9
6
)
2
{ if (b = √⎯⎯⎯⎯
a −⎯n is an integer) return a – b; }
return ,,n ist Primzahl“.
Faktorisierung nach Fermat
(Programm in PYTHON, Version 2.7.2)
Das Programm liefert bei zusammengesetzten
positiven ganzen Zahlen einen nicht-trivialen Teiler, bei Primzahlen wird 1 zurückgegeben. Die geraden Zahlen werden am Anfang gesondert behandelt. Außerdem wird sichergestellt, dass nur
positive ganze Zahlen größer 1 übergeben werden.
#-*- coding: cp1252 -*from math import sqrt, ceil
def fermat(n):
if n <= 1: return -1
#
#
n = int(n)
#
#
if n%2 == 0: return 2 #
#
a = ceil(sqrt(n))
#
#
while a <= (n + 9)/6:
b = sqrt(a * a – n)
if (b). is_integer():
return int(a - b) #
#
a = a+1
#
return 1
#
Unzulässige Eingabe
für n
ggf. Nachkommastellen abschneiden
Eingabewert ist
gerade!
Startwert für die
Schleife
int unterdrückt ".0"
am Ende der Ausgabe
nächster Versuch
n ist Primzahl
Die angegebene PYTHON-Funktion arbeitet (aufgrund
der Rundungsfehler bei der Umwandlung von biginteger
in float und umgekehrt) nur dann korrekt, wenn der Eingabeparameter kleiner als 256 ist. Deshalb kann man mit
dieser Funktion auch nicht die Semiprimzahl aus dem
Kryptorätsel ,,NICHT SO GEHEIME NACHRICHT
AUS MALAWI – TEIL I (RSA)“ (vgl. Schaefer, 2010)
zerlegen, die 309 Stellen hat bzw. 1025 Bit lang ist. Zur
Zerlegung einer so großen Semiprimzahl mit dem Fermat-Verfahren benötigt man eine höhere Genauigkeit
bei der Umwandlung. Sie lässt sich z. B. mit dem Computer-Algebra-System SAGE oder einer anderen PYTHONMathematik-Bibliothek realisieren.
71
PRAXIS & METHODIK
natürlich die Faktorisierung ,,mit Brachialgewalt“, also
mittels Probedivisionen, ungleich schneller.)
Kleine Beispiele zum Verfahren von Fermat
䉯 n = 703:
x
2
2
q(x) = x – n
27 (= ⎡√
⎯⎯⎯⎯
703 ⎤ )
28
729
784
26
81 = 92
Dies liefert 703 = (28 – 9)(28 + 9) = 19 ⴢ 37.
䉯 n = 1649 (vgl. Stichwort ,,Quadratisches Sieb“ in Wikipedia):
Nach Beginn mit x = 41 = ⎡40, 6…⎤ = ⎡√⎯⎯⎯⎯
1649
⎯ ⎤ liefert
erst im 17. Schritt x = 57 =: a ein Quadrat: q(a) = 402
= b2. Es folgt 1649 = (57 + 40)(57 – 40) = 97 ⴢ 17. (Zur
Fortsetzung des Beispiels s. u.)
䉯 n = 15229: Beginnend mit x = 124 erhält man im
4. Schritt mit 127 = a die Beziehung q(a) = 302 und
damit 15229 = 1272 – 302 = (127 – 30)(127 + 30) = 97 ⴢ
157.
Weitere Beispiele findet man in jedem Lehrbuch der
elementaren Zahlentheorie (etwa bei Kumanduri/Romero, 1997).
Zur Laufzeit des Fermat’schen Algorithmus
Die Darstellung als Differenz zweier Quadrate ist i.
Allg. nicht eindeutig: 105 = 112 – 42 = 192 – 162. Für ungerade Semiprimzahlen, also natürliche Zahlen der
Form n = p ⴢ q mit ungeraden Primteilern p und q, folgt
aber aus pq = (a + b)(a – b) und p > q, dass p = a + b
und q = a – b und damit a = p +2 q und b = p −2 q gilt. Umgekehrt erfüllen (übrigens auch für andere als Semiprimzahlen) diese a und b die Gleichungen b ≠ a ⱖ √⎯⎯n
(das arithmetische Mittel positiver reeller Zahlen ist
immer größer oder gleich dem geometrischen Mittel)
und a2 – b2 = (a + b)(a – b) = p ⴢ q = n, also (2.1).
Kann das Verfahren bei Semiprimzahlen früher enden? Nein! Denn aus y2 – n = c2, also n = (y + c)(y – c),
für y, c ∈ ⺞ folgt, dass p = y + c und q = y – c und damit
y = a ist. Der Algorithmus, der x = m, x = m + 1, … x = a
= m + d testet ist erst mit x = a erfolgreich und kommt
somit nach d + 1 = a – m + 1 = p −2 q – ⎡√⎯⎯n ⎤ + 1 Schritten
zu einem Ende.
Nun kennt man p und q nicht vor erfolgreicher Anwendung des Algorithmus; daher nimmt man als obere
Laufgrenze die Zahl A = n +6 9 ; es gilt für p ⱖ q ⱖ 3 nämlich die Ungleichung q(p – 3) ⱖ 3(p – 3) und daher A =
pq + 9
ⱖ p +2 q = a.
6
Diese Schranke wird auch erreicht: Der ungünstigste
Fall tritt bei n = 3p mit ungerader Primzahl p ein; dann
führen nämlich erst A = n +6 9 und B = n −6 9 wegen n = (A
+ B)(A – B) (gilt immer für reelle A und B und A, B ∈
⺞) und nicht frühere Werte zur Faktorisierung: Es ist ja
a = p +2 3 = 3p6+ 9 = A.
Damit ist die (maximale) Laufzeit des Algorithmus
mindestens von der Größenordnung von n, also exponentiell bzgl. der Stellenzahl von n. (Im Fall n = 3p ist
72
Von Fermat
zum Quadratischen Sieb
Kombination von Kongruenzen
Um schneller zum Ziel zu kommen (dabei aber subexponentiell zu bleiben), sucht man erstens – angeregt
durch Maurice Kraitchik aus den 1920er-Jahren (siehe
Bild 2), aufbauend auf Arbeiten von Gauß und Seelhoff
– nach Zahlen a und b derart, dass a2 – b2 ein Vielfaches
von n ist (vgl. die Kongruenz (1.1)!).
Dies ermöglicht zweitens, statt direkt ein a zu bestimmen, für das q(a) ein Quadrat ist, ein Quadrat durch geeignete Kombination von Kongruenzen zu erreichen: Aus
q(xi) = xi2 – n xi2 (mod n) (i = 1 ,…, k) ergibt sich ja
(3.1) q(x1) ⴢ q(x2) ⴢ … ⴢ q(xk) x21 ⴢ x22 ⴢ … ⴢ x2k (mod n),
wobei die rechte Seite der Kongruenz auf jeden Fall ein
Quadrat ist, nämlich (x1 ⴢ x2 ⴢ … ⴢ xk)2. Wählt man nun
verschiedene Werte x1, ..., xk so aus, dass
q(x1) ⴢ q(x2) ⴢ … ⴢ q(xk) mod n
Bild 2: Maurice B. Kraitchik (1882–1957), belgischer Mathematiker russischer Herkunft, ist für
seine Beiträge zur Unterhaltungsmathematik bekannt.
Die Zahlentheorie verdankt ihm eine Verbesserung
des Fermat-Verfahrens. Seine Idee war, viele verschiedene einfach-quadratische Kongruenzen mittels Multiplikation zu einer quadratischen Kongruenz zu kombinieren. Da Kraitchik jedoch noch keine elektronischen
Hilfsmittel zur Verfügung hatte, konnte er das Potenzial der Methode nicht aufdecken.
LOG IN Heft Nr. 172/173 (2011/2012)
Quelle: LOG-IN-Archiv
x
PRAXIS & METHODIK
ein Quadrat b2 ist, so gilt für a = x1 ⴢ x2 ⴢ … ⴢ xk und b
die Bedingung (1.1). Die (oft erfüllte) Hoffnung ist,
dass auch Ungleichung (1.2) gilt und damit ggT(a + b,
n) und ggT(a – b, n) echte Teiler von n sind (s. oben).
Wie findet man nun geeignete Werte xi? Dazu sieht
man sich (nach Kraitchik, siehe Text zu Bild 2) die
Primfaktorzerlegung von q(xi) für mehrere xi an und
kombiniert geeignete Kongruenzen derart, dass die
Primfaktordarstellung des Produkts nur gerade Exponenten enthält, das Produkt also ein Quadrat ist. Man
will somit erreichen, dass sich die Exponenten entsprechender Primfaktoren der ausgewählten q(xi) zu einer
geraden Zahl, mod 2 also zu 0, addieren.
Ein erstes kleines Beispiel zum Quadratischen Sieb:
n = 1.649 (s. o.)
Primfaktorzerlegung
x
q(x) =
x2 – n
Exponenten
der Primfaktoren
2
3
5
23
Exponenten mod 2
der Primfaktoren
2
3
5
23
41
32
5
0
0
0
1
0
0
0
42
115
0
0
1
1
0
0
1
1
43
200
3
0
2
0
1
0
0
0
Die Exponentenvektoren zu 41 und 43 addieren sich
mod 2 zum Nullvektor. Daher wählt man a = 41 ⴢ 43 =
4
1763 und b = √⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
q(41) ⋅ q(43)
⎯ = √
⎯⎯⎯⎯⎯⎯⎯
25 ⋅ 23 ⋅ ⎯52 = 2 ⴢ 5 = 80. Erfreulicherweise ist a ± b 0 (mod n). Einen Teiler von
1649 erhält man als ggT(a – b, n) = ggT(1763 – 80,
1649), der sich z. B. mithilfe des Euklidischen Algorithmus zu 17 berechnet.
In diesem Beispiel konnte man durch ,,genaues Hinsehen“ erkennen, mit welchen Kongruenzen sich die
Exponentenvektoren zum Nullvektor kombinieren lassen. Wie kann man dies im allgemeinen Fall systematisch erreichen? Eine entsprechende Strategie wurde
von John Brillhart und Michael Morrison entwickelt.
Laut Pomerance (1996) hat der Aufsatz von Morrisson
und Brillhart (1975) die Ära moderner FaktorisierungAlgorithmen eingeleitet.
Zunächst sucht man eine Reihe von Werten q(xi)
mod n (i = 1, ..., k), bei denen die Primfaktorzerlegung
von q(xi) jeweils bekannt ist und höchstens kleine
Primzahlen p1, ... pr (s. u.) enthält. Der zu
r
q(xi) = ∏ pj hj
j=1
gehörende Exponentenvektor mod 2, nämlich (h1 mod
2, …, hr mod 2) (mit Komponenten 0 oder 1) lässt sich
dann auffassen als Vektor →
vi aus dem Vektorraum V =
⺖r2 der Dimension r über ⺖2 (dem Körper mit 2 Elementen, der auch als Galoisfeld GF(2) bezeichnet
wird). Gesucht sind dann Koeffizienten c1, ..., ck ∈ {0, 1},
nicht alle 0, derart, dass
k
vi = 0 (über ⺖2) gilt.
∑ ci →
i=1
LOG IN Heft Nr. 172/173 (2011/2012)
Falls es solche ci gibt, lassen sie sich als Lösungen eines
linearen Gleichungssystems in diesen Variablen (z. B.
mit der Gauß’schen Eliminationsmethode) bestimmen.
Anmerkung: Das lineare Gleichungssystem hat eine
→
v1, … →
Lösung ungleich 0, wenn die Vektoren →
vk linear
abhängig sind. Aus der Linearen Algebra wissen wir,
dass dies der Fall ist, wenn die Anzahl k der Vektoren
größer als die Dimension r des Raumes ist, evtl. schon
früher.
Wahl einer Faktorbasis
Da bei dem zu behandelnden Algorithmus die Faktorisierung einer großen Zahl auf viele kleinere Faktorisierungen zurückgeführt wird, und da die Dimension
nicht zu groß sein sollte, wählt man aus der Menge ⺠
aller Primzahlen eine Teilmenge von kleinen, durch
eine Zahl B beschränkten Primzahlen aus. Zur Vermeidung zu großer Zahlen will man von m auch Schritte
rückwärts gehen können und lässt negative q(xi) (s. u.)
und somit den Faktor –1 zu. Man legt daher eine sogenannte Faktorbasis (engl.: factor base) fest:
(3.2) FB := {p ∈ ⺠⏐p ⱕ B} ∪ {–1}.
Die Faktorbasis FB ist also definiert als die Menge
aller Primzahlen unterhalb einer – in Abhängigkeit von
n gewählten (moderaten) – Schranke B ergänzt um –1.
Eine Zahl q(x) heißt dann B-glatt (engl.: B-smooth)
oder auch nur glatt, falls sie lediglich Primfaktoren aus
FB (und evtl. Faktor –1) hat.
Man betrachtet nunmehr nur solche xi, bei denen
q(xi) glatt ist. Für kleine B existieren dann effiziente
Faktorisierungsalgorithmen zur Bestimmung der Primfaktorzerlegung von q(xi). (Oft lässt man noch ein oder
zwei, manchmal auch drei weitere bei der Faktorisierung auftretende Primzahlen zu, die größer als B sind.)
Anmerkung: Es ist p Teiler von q(x) = x2 – n genau
dann, wenn x2 – n 0 (mod p), also x2 n (mod p) gilt,
d. h. n sogenannter Quadratischer Rest mod p (mit
Wurzel x) ist (siehe Kasten ,,Quadratische Reste“,
nächste Seite). Von Interesse für FB sind also nur Primzahlen p mit dieser Eigenschaft. Entsprechend kann
man FB durch Streichen der Nicht-Quadrate zu einer
^
Teilmenge FB =: F abändern.
Eine weitere entscheidende Vereinfachung erhält
man dadurch, dass aus gegebenen Zerlegungen auf andere Zahlen geschlossen wird. Weiß man beispielsweise, dass p Teiler von q(xl) = x2l − n ist, so folgt aus
(3.3) q(xl + j ⴢ p) = (xl + j ⴢ p)2 – n x2l – n = q(xl) (mod p),
dass p auch alle Zahlen aus {q(xl + j ⴢ p)⏐j ∈ ⺪} teilt.
Dieser Umstand ermöglicht das weiter unten beschriebene Sieben.
Einige Beispiele von Faktorbasisgrößen (auch für Varianten des Quadratischen Siebs) sind in folgender Tabelle
73
PRAXIS & METHODIK
angegeben (vgl. Atkins u. a., 1994; Esslinger, u. a., 102010;
Leyland u. a., 2002; Wikipedia, ,,Quadratisches Sieb“):
Anzahl der
Dezimalstellen von n
Anzahl der Primzahlen
der Faktorbasis
50
120
3000 245 000
129 (RSA)
135
524 338
550 000
Wahl eines Siebintervalls
Auch die Folge der betrachteten xi beschränkt man
oft durch die Bedingung x – ⏐ ⎡√⎯⎯n ⎤ ⏐ⱕ s auf ein sogenanntes Siebintervall (engl.: sieve interval oder sieving
range), also auf
S = {x ∈ ⺞⏐⏐x – m⏐ ⱕ s}.
Hierbei sind auch negative Werte für x – ⎡√⎯⎯n ⎤, also x
< m, zugelassen. Der Vorteil dabei ist, dass die Werte
von q(x) im Mittel etwas kleiner sind, der Nachteil,
dass auch negative q(x) auftreten können. Letzteres
lässt sich hingegen leicht durch Erweiterung der Exponentenvektoren um eine Komponente ausgleichen, die
0 im positiven Fall und 1 im negativen Fall gesetzt wird;
auch diese Komponente muss sich bei der (multiplikativen) Kombination der Kongruenzen mod 2 zu 0 summieren, da b2 positiv zu sein hat. Bei Bedarf wird während des Experiments das Siebintervall noch erweitert.
Übliche Anzahlen der Elemente eines Siebintervalls
sind 0,2 Millionen für 50-stellige und – vom Experiment abhängig – zwischen 2 Millionen (bei günstiger
Polynomwahl, s. u.) und 100 Millionen für 135-stellige
Dezimalzahlen (vgl. Leyland u. a., 2002).
Der Siebschritt
Es werden nun alle x aus dem Siebintervall betrachtet, die glatt bzgl. der Faktorbasis FB sind. Wie erkennt
man nun, ob q(x) glatt ist oder nicht? Für jede Zahl x
aus dem Siebintervall könnte man q(x) für alle Werte p
^
∈ FB durch die jeweils höchstmögliche p-Potenz teilen.
Die Primfaktorzerlegung durch Probedivisionen herausfinden zu wollen, ist aber sehr aufwendig. Eine bessere Möglichkeit, die Glätte festzustellen, ist das folgende, von Carl Pomerance durch Komplexitätsüberlegungen entwickelte, Siebverfahren.
In seinem lesenswerten Aufsatz A Tale of Two Sieves
(1996) beschreibt Pomerance diese Überlegungen.
Auch erwähnt er seine Anfangsmotivation, nämlich
dass ihm auf der High-School in einem Wettbewerb die
Faktorisierung der Zahl 8051 innerhalb der gesetzten
Zeit von 5 Minuten nicht gelang. Hören wir ihn selbst:
I was involved in a math contest, and one of the problems
was to factor the number 8051. A time limit of five minutes was given. It is not that we were not allowed to use
pocket calculators; they did not exist in 1960, around
when this event occurred! Well, I was fairly good at arithmetic, and I was sure I could trial divide up to the square
root of 8051 (about 90) in the time allowed. But on any
test, especially a contest, many students try to get into
the mind of the person who made it up. Surely they would
74
Quadratische Reste
Eine ganze Zahl a heißt quadratischer Rest (engl.: quadratic residue) modulo m (für eine ungerade natürliche Zahl
m), falls sie zu m teilerfremd ist und es eine ganze Zahl x
gibt mit x2 a (mod m).
Existiert keine solche Zahl, so heißt ein zu m teilerfremdes a ein ,,quadratischer Nichtrest“ mod m.
Beispiele: a = 2 ist quadratischer Rest modulo 7 mit ,,Wurzel“ ±3 (wegen (±3)2 2(mod 7)).
a = 3 ist quadratischer Nichtrest mod 5
(wegen x2 mod 5 ∈ {0, 1, 4}).
Reduktion auf Primzahl-Moduln
Man kann zeigen, dass für ungerades m a genau dann
quadratischer Rest mod m ist, wenn a auch für alle Primteiler p von m quadratischer Rest mod p ist.
Für einfacheres Rechnen mit quadratischen Resten dienen das Legendre- und das Jacobi-Symbol. Dabei ist für
eine ganze Zahl a und eine Primzahl p > 2 das
⎛a⎞
Legendre Symbol ⎜ ⎟
⎝p⎠
(gelesen als ,,a nach p“ oder ,,a für p“)
definiert als:
⎧ 1 falls a quadratischer Rest modulo p ist
⎛a⎞ ⎪
=
⎜ p ⎟ ⎨−1 falls a quadratischer Nichtrest modulo p ist
⎝ ⎠ ⎪⎩ 0 falls p Teiler von a ist.
Aus dem kleinen Satz von Fermat (ap a mod p) folgt u. a.
a
p−1
2
±1 (mod p) falls p nicht a teilt, und daraus das
⎛a⎞
Euler’sche Kriterium ⎜ ⎟ a
⎝p⎠
(für Primzahlen p > 2).
p−1
2
(mod p)
Das Jacobi-Symbol definiert man mithilfe des LegendreSymbols:
r
∏ ⎛⎜ pi ⎞⎟
⎛a⎞
⎜m⎟ =
⎝ ⎠ i=1
a
ri
⎝ ⎠
für die Primfaktorzerlegung
k
m = ∏ pi ri von m.
i=1
Das Legendre Symbol ist also der Spezialfall des JacobiSymbols mit m = p für eine Primzahl p, stimmt damit in
diesem Fall mit diesem überein.
Man beachte, dass ⎛⎜ ma ⎞⎟ = 1 auch für Nichtreste, dass ⎛⎜ ma ⎞⎟ = –1
⎝ ⎠
⎝ ⎠
aber nicht für quadratische Reste gelten kann. Das
Jacobi-Symbol und damit auch das Legendre Symbol genügen (für positive ungerade Zahlen P bzw. P und Q mit
ggt (P, Q) = 1) folgenden Gesetzen:
⎛a ⋅ b⎞
⎛ a ⎞ ⎛b ⎞
⎛ a ⎞ ⎛ a mod P ⎞
䉴 ⎜
⎟ = ⎜ P ⎟ ⋅ ⎜P ⎟ und ⎜P ⎟ = ⎜
⎟.
⎝ P ⎠
⎝ ⎠ ⎝ ⎠
⎝ ⎠ ⎝ P ⎠
⎛ P ⎞ ⎛Q⎞
䉴 ⎜ ⎟ ⋅ ⎜ ⎟ = (−1)
⎝Q⎠ ⎝ P ⎠
⎛ −1 ⎞
䉴 ⎜ ⎟ (−1)
⎝P⎠
P−1
2
(P − 1) (Q − 1)
4
(quadr. Reziprozitätsgesetz).
⎛2⎞
und ⎜ ⎟ (−1)
⎝ P⎠
P2 − 1
8
.
LOG IN Heft Nr. 172/173 (2011/2012)
not give a problem where the only reasonable approach
was to try possible divisors frantically until one was found. There must be a clever alternate route to the answer. So I spent a couple of minutes looking for the clever
way, but grew worried that I was wasting too much time. I
then belatedly started trial division, but I had wasted too
much time, and I missed the problem.
Die Lösung wäre wieder die Darstellung als Differenz
zweier Quadrate gewesen: 8051 = 8100 – 49 = 902 – 72 =
(90 + 7)(90 – 7).
Zu p ∈ FB sucht man diejenigen Zahlen x ∈ {m, m + 1,
…, m + (p – 1)} (mit m = ⎡√⎯⎯n ⎤), für die q(x) durch p teilbar ist und wendet (3.3) an; sind diese Zahlen nicht offensichtlich, so kann wie folgt verfahren werden:
Das Polynom q(X) = X2 – n hat modulo p (also im
^
Körper ⺖p) wegen p ∈ FB zwei Nullstellen. (Zur Bestimmung der Lösungen gibt es spezielle, dafür geeignete Algorithmen.) Geht man von diesen Nullstellen
durch Addition von geeigneten Vielfachen von p ins
Siebintervall und dort in Schritten der Länge p nach
rechts und links durch das Siebintervall, so findet man
alle Werte x ∈ S, für die q(x) durch p teilbar ist (vgl. die
Kongruenz (3.3), siehe Seite 73). Die entsprechenden
Zahlen q(x) teilt man jeweils durch p, statt sie, wie
beim Sieb des Eratosthenes, zu streichen.
Dieser Vorgang nennt sich Sieben mit p. Man vermeidet so erfolglose Probedivisionen. Ein Problem sind
höhere Potenzen von p, die man ebenfalls durch Sieben
erkennt und durch die man q(x) gegebenenfalls dividiert; dabei sind wieder nur diejenigen q(x) zu betrachten, die schon durch p teilbar waren. Falls nach allen
^
solchen Divisionen mit jedem p ∈ FB von q(x) nur 1
oder –1 übrig bleibt, enthält die Primfaktorzerlegung
von q(x) nur Potenzen von Primzahlen aus der Faktorbasis, und q(x) ist glatt. Alle anderen Werte x und q(x)
können gestrichen werden.
Zusammenfassung
Der Algorithmus besteht aus vier wesentlichen
Schritten:
1. Wahl des Siebintervalls S = {m – s, m – s + 1, …, m, m
+ 1, …, m + s} und Berechnung der Liste der q(x) =
x2 – n mit x ∈ S (siehe Abschnitt ,,Wahl eines Siebintervalls“, Seite 74)
2. Wahl einer Faktorbasis FB = {p ∈ ⺠⏐p ⱕ B} ∪ {–1}
und Sieben mit allen Primzahlen der Faktorbasis
(siehe Abschnitte ,,Wahl einer Faktorbasis“ und
,,Der Siebschritt“, Seiten 73 und 74). Ergebnis ist
eine Liste aller Zahlen x aus S mit glattem q(x).
3. Auswahl der zu kombinierenden Kongruenzen durch
Lösung eines Linearen Gleichungssystems (siehe
Abschnitt ,,Kombination von Kongruenzen“, Seite
72).
4. Überprüfung der Bedingungen a2 b2 (mod n) und
a ±b (mod n) und Berechnung der Faktoren von n
mittels ggT(a ± b, n).
Eine ausführliche Darstellung und Zusammenfassung findet man z. B. in Crandell/Pomerance, 22005,
LOG IN Heft Nr. 172/173 (2011/2012)
http://www.mathematicaladventures.org/files/talks/Pomerance1.html
PRAXIS & METHODIK
Bild 3:
Carl Bernard
Pomerance wurde
1944 in Joplin,
Missouri (USA)
geboren und hat 1981
einen der schnellsten
Algorithmen zur
Faktorisierung großer
natürlicher Zahlen
entwickelt –
das Quadratische Sieb.
6.1). Dort wird auch erläutert, dass (bei geeigneter
Wahl von B, von S und des Lösungsverfahrens für das
lineare Gleichungssystem) die Laufzeit des Algorithmus (für ungerades zusammengesetztes n, das keine
ln n ln ln⎯n beträgt und damit subexpoPotenz ist) e (1 + o(1) √⎯⎯⎯⎯⎯⎯⎯⎯⎯
nentiell ist, d. h. von der Form no(1).
Ein einfaches Beispiel mit Sieben
Zu faktorisieren sei die Zahl 22 213.
Weitere Beispiele findet man in der Literatur, z. B.
die Faktorisierung von n = 87463 in Hulpke (2004) oder
in Wikipedia (Stichwort ,,Quadratisches Sieb“), von
n = 2041 in Esslinger u. a. (102010), von n = 4309 und
n = 7729 in Müller-Stach/Piontkowski (22011) und von
n = 15347 in Wikipedia (Stichwort ,,Quadratic Sieve“).
Mit Probedivisionen (wie sich später zeigt, wären 25
Divisionen durch Primzahlen bis zu einem der Faktoren nötig) könnte man das Problem lösen. Wir wollen
hier jedoch das Quadratische Sieb verwenden. (Dass
man das Beispiel mithilfe eines Taschenrechners lösen
kann, ist nicht so entscheidend, man kann auch die einzelnen Operationen mit mathematischer Software ausführen, aber ohne Faktorisierungs-Befehl. Es geht darum, Schritt für Schritt einen Einblick in die Methode
zu erhalten.)
Zunächst bestimmen wir m = ⎡√⎯⎯n ⎤ = ⎡149, 04, …⎤ = 150
und versuchen die Setzung: B = 19. Damit ergibt sich (unter Berücksichtigung obiger Anmerkung) als Faktorbasis:
F = {–1} ∪ {p ⱕ 19 ⏐ p prim
und n quadratischer Rest modulo p} ⊆ FB.
Zunächst bestimmen wir F explizit, indem wir prüfen, für welche Primzahlen p aus FB = {–1} ∪ {p ⏐ p
prim und p ⱕ 19} die Zahl n quadratischer Rest mod p
ist. Durch Reduktion modulo p sehen wir, dass
n1
n3
n2
n4
n9
n 11
n2
(mod 3) ist (mit Wurzel ±1) und n 1 mod 9),
(mod 5) ist, also kein quadratischer Rest,
(mod 7) ist (mit Wurzel ±3),
(mod 11) ist (mit Wurzel ±2),
(mod 13) ist (mit Wurzel ±3),
(mod 17) (s. u.) und
(mod 19).
75
PRAXIS & METHODIK
䉯 mit x ∈ {147 ± 3 + t ⴢ 7} = {143, 144, 150, 151, 157}
Liste nach dem Sieben
143
–1764 = (–1) ⴢ 22 ⴢ 32 ⴢ 72
144
–1477 = (–1) ⴢ 7 ⴢ 211
145
–1188 = (–1) ⴢ 22 ⴢ 33 ⴢ 11
146
147
148
durch 7 teilbar,
䉯 mit x ∈ {154 ± 2 + t ⴢ 11} = {145, 152, 156}
q(x) = x2 – 22 213
x
durch 11 teilbar,
glatt
䉯 mit x ∈ {143 ± 3 + t ⴢ 13} = {146, 153}
durch 13 teilbar.
nicht glatt
glatt
Man erhält die ,,Liste nach dem Sieben“, siehe links.
– 897 = (–1) ⴢ 3 ⴢ 13 ⴢ 23
(evtl. 23 in die Faktorbasis aufnehmen)
Kombination von Kongruenzen
nicht glatt: durch keine p aus F außer durch
– 604 2 teilbar (s. ,,Vorbereitung zum Sieben“); keine
2-Potenz
Es ergeben sich so als binäre Exponentenvektoren der
glatten Zahlen die Vektoren der folgenden Tabelle:
– 309 nicht glatt: durch kein Element von F \ {3}
teilbar; keine 3-Potenz
149
–12 = (–1) ⴢ 22 ⴢ 3
150
287 nicht glatt: durch keine p aus F außer durch 7
teilbar; keine 7-Potenz
151
588 = 22 ⴢ 3 ⴢ 72
152
891 = 34 ⴢ 11
glatt
glatt
x/p
–1
2
3
7
11 13
143
1
0
0
0
0
0
145
1
0
1
0
1
0
149
1
0
1
0
0
0
151
0
0
1
0
0
0
152
0
0
0
0
1
0
glatt
153
1196 = 22 ⴢ 13 ⴢ 23
(evtl. 23 in die Faktorbasis aufnehmen)
154
1503 nicht glatt: durch kein Element von F außer 3
teilbar; keine 3-Potenz
155
1812 = 22 ⴢ 3 ⴢ 151
156
2123 nicht glatt: durch kein Element von F außer 11
teilbar; keine 11-Potenz
157
2436 = 22 ⴢ 3 ⴢ 7 ⴢ 29
nicht glatt
nicht glatt
In den letzten beiden Fällen liegen keine quadratischen Reste vor, was man direkt sehen kann oder mit
p−1
Hilfe des Satzes, dass für ungerade Primzahlen gilt: n 2
mod p ist gleich 1, falls n quadratischer Rest ist, andernfalls gleich –1 (s. das Euler-Kriterium im Kasten ,,Quadratische Reste“, Seite 74). Hier ist 118 24 –1 (mod
17) und 29 + 1 0 (mod 19).
Somit ergibt sich F = {–1, 2, 3, 7, 11, 13}.
Damit sind die Exponentenvektoren von der Länge
6. In der Hoffnung, dass genügend Werte q(x) glatt sein
werden und linear abhängige Exponentenvektoren besitzen, verwenden wir das Siebintervall
S = {x ∈ ⺞⏐150 – 7 ⱕ x ⱕ 150 + 7} =
{143, 144, 145, 146, 147, …, 157}.
Die Exponentenvektoren zu x1 = 145, x2 = 149 und x3
= 152 (beispielsweise) addieren sich zum Nullvektor.
Daher kann man a = 145 ⴢ 149 ⴢ 152 = 3 283 960 setzen
und b wie folgt bestimmen: b2 = (–1) ⴢ 22 ⴢ 33 ⴢ 11 ⴢ (–1)
ⴢ 22 ⴢ 3 ⴢ 34 ⴢ 11 = 24 ⴢ 38 ⴢ 112 und somit b = 22 ⴢ 34 ⴢ 11 =
3564. Leider stellt sich nun heraus, dass a + b =
3 287 524 durch n teilbar, also die Bedingung (1.2) verletzt ist.
Die Kombination der Exponentenvektoren zu x = 143,
145, 151 und 152 führt ebenfalls zu keinem Erfolg: Mit
a = 143 ⴢ 145 ⴢ 151 ⴢ 152 = 475 909 720,
b2 = (–1) ⴢ 22 ⴢ 32 ⴢ 72 ⴢ (–1) ⴢ 22 ⴢ 33 ⴢ 11 ⴢ 22 ⴢ 3 ⴢ 72 ⴢ 34 ⴢ 11
= 26 ⴢ 310 ⴢ 74 ⴢ 112 und
b = 23 ⴢ 35 ⴢ 72 ⴢ 11 = 1 047 816 gilt erneut
a + b (= 476 957 536) 0 (mod n).
Auch nach Erweiterung von F zu F ∪ {23} und Wahl
von x = 146, 149 und 153 erhält man mit a = 146 ⴢ 149 ⴢ
153 = 3 328 362, b = 22 ⴢ 3 ⴢ 13 ⴢ 23 = 3588 und a + b =
3 331 950 0 (mod n) keine Lösung.
Anstatt nun nach anderen Mengen linear abhängiger
Exponentenvekoren bei erweitertem Siebintervall und
vergrößerter Faktorbasis zu suchen, werden wir das
Beispiel im nächsten Abschnitt mit einem anderen Polynom fortsetzen.
Vorbereitung zum Sieben
Für x aus dem Intervall S sind genau alle
q(x) = x2 – 22 213
Sieben mit mehrfachen
Polynomen (MPQS)
䉯 mit x ungerade durch 2 teilbar,
䉯 mit x ∈ {150 ± 1 + t ⴢ 3} = {143, 145, 146, 148, 149, 151,
Das Verfahren
152, 154, 155, 157} durch 3 teilbar,
Begründung: 150 ist durch 3 teilbar und im Siebintervall; x = 150 ± 1 ± 1 (mod 3) erfüllt q(x) x2 – n (±1)2 – 1 0 (mod 3). Nun wird (3.3) angewandt.
䉯 mit x ∈ {150 ± 1 + t ⴢ 9} = {143, 145, 152, 154}
durch 32 teilbar,
Da beim Quadratischen Sieb die Zahlen q(x) mit
wachsendem Abstand von x zu √
⎯⎯n schnell wachsen und
da man auch parallel rechnen will, benutzt man statt
des einzigen Polynoms q(x) = x2 – n beim Multiple Polynomial Quadratic Sieve (MPQS) mehrere geeignet ge-
76
LOG IN Heft Nr. 172/173 (2011/2012)
PRAXIS & METHODIK
wählte Polynome der Form: qg(x) = gx2 + 2hx + j mit g,
h, j ∈ ⺪ und h2 – gj = n. Lässt sich dann die Kongruenz
h2 n (mod g) lösen, so ist j =
h2 − n
wählbar. Auf diese
g
Weise erhält man
(4.1) Qg(x) = g ⴢ qg(x) =
g2x2 + 2ghx + gj = (gx + h)2 – n
und daraus
4x – 451
140
109
141
113
– 9 444 = (–1) ⴢ 22 ⴢ 3 ⴢ 787
142
117
– 8 524 = (–1) ⴢ 2 ⴢ 2131
143
121
– 7 572 = (–1) ⴢ 22 ⴢ 3 ⴢ 631
nicht glatt
144
125
– 6 588 = (–1) ⴢ 22 ⴢ 33 ⴢ 61
nicht glatt
145
129
– 5 572 = (–1) ⴢ 2 ⴢ 7 ⴢ 199
nicht glatt
146
133
– 4 524 = (–1) ⴢ 22 ⴢ 3 ⴢ 13 ⴢ 29
glatt bzgl. F ∪ {29}
147
137
– 3 444 = (–1) ⴢ 22 ⴢ 3 ⴢ 7 ⴢ 41
glatt bzgl. F ∪ {41}
148
141
– 2 332 = (–1) ⴢ 22 ⴢ 11 ⴢ 53
149
145
–1 188 = (–1) ⴢ 2 ⴢ 3 ⴢ 11 glatt
150
149
–12 = (–1) ⴢ 22 ⴢ 3
151
153
1 196 = 2 ⴢ 13 ⴢ 23
152
157
2 436 = 22 ⴢ 3 ⴢ 7 ⴢ 29 glatt bzgl. F ∪ {29}
153
161
3 708 = 22 ⴢ 32 ⴢ 103 nicht glatt
154
165
5 012 = 22 ⴢ 7 ⴢ 179
nicht glatt
169
6 348 = 2 ⴢ 3 ⴢ 23
glatt bis auf Quadrat
156
173
7 716 = 2 ⴢ 3 ⴢ 643
nicht glatt
157
177
9 116 = 22 ⴢ 43 ⴢ 53
nicht glatt
181
10 548 = 2 ⴢ 3 ⴢ 293
159
185
12 012 = 2 ⴢ 3 ⴢ 7 ⴢ 11 ⴢ 13
160
189
13 508 = 22 ⴢ 11 ⴢ 307
(4.2) (gx + h) Qg(x) (mod n).
2
Diese Kongruenzen kann man wieder multiplizieren
(sogar für verschiede Qg), sodass wieder eine Kombination von Kongruenzen (nach dem Sieben mit Primzahlen aus FB) möglich ist. Wie beim Quadratischen
Sieb kommen als ungerade Primteiler von Qg(x) nur
solche Primzahlen p in Frage, für die nach (4.1)
0 g ⴢ qg(x) = (gx + h)2 – n (mod p)
gilt und für die daher n quadratischer Rest mod p ist.
Damit kann man die beim Sieben verwendeten Primzahlen unabhängig von den Polynomen wählen.
Sei nun g Produkt eines Quadrats mit einer glatten
Zahl. Beispielsweise wählt man g = p2 für eine Primzahl p, modulo der die Zahl n quadratischer Rest ist.
Die Kongruenz h2 n (mod g) ist dann lösbar, da n
dann auch quadratischer Rest modulo p2 ist (s. Kasten
,,Quadratische Reste“, Seite 74). Von den beiden Lösungen wählt man eine bzw. eine dazu kongruente aus.
Ergibt sich für ein x ein glattes qg(x), so erhalten wir
mittels (gx + h)2 – n einen der gesuchten modulo 2 reduzierten Exponentenvektoren für unser Gleichungssystem, durch das wir wie beim Quadratischen Sieb
eine Darstellung von n oder eines Vielfachen von n als
Differenz zweier Quadrate finden und so evtl. zu einer
Faktorisierung gelangen. Mit den Werten x~ = gx + h
statt x geht man also wie beim Quadratischen Sieb vor.
Fortsetzung des Beispiels n = 22 213
Wie oben sei n = 22 213 zu faktorisieren. Statt des Polynoms x2 – n verwenden wir nun ein anderes Polynom
(in der Hoffnung, mit einem auszukommen), und zwar
von der Form (gx + h)2 – n. Wieder ist m = 150. Wir
wählen g = 4 und ein h mit h2 22 213 (mod g), also h2
1 (mod 4), d. h. h ±1 (mod 4). Damit wir nicht zu
große Zahlen erhalten, sei (4 ⴢ 150 + h)2 ≈ n, also h ≈ √
⎯⎯n
– 600 ≈ –450. Daher setzen wir h = – 451 und somit
Qg(x) = g ⴢ qg(x) = (gx + h)2 – n = (4x – 451)2 – 22 213.
Als Faktorbasis wählen wir wieder F = {–1, 2, 3, 7, 11,
13} und als Siebintervall diesmal S = {x ∈ ⺪⏐140 ⱕ x ⱕ
160}. Durch Sieben mit den Zahlen aus F erhalten wir
die Zerlegungen von Qg(x) der folgenden Tabelle; (diese enthält mit x~ = gx + h ) auch Teile der ,,Liste nach
dem Sieben“, vorige Seite).
LOG IN Heft Nr. 172/173 (2011/2012)
= (4x – 451)2 – 22 213 = 4 ⴢ q4(x)
x
155
158
Qg(x)
–10 332 = (–1) ⴢ 22 ⴢ 32 ⴢ 7 ⴢ 41
glatt bzgl. F ∪ {41}
2
nicht glatt
nicht glatt
2
2
2
2
2
2
2
nicht glatt
3
2
glatt
glatt bzgl. F ∪ {23}
nicht glatt
2
glatt
nicht glatt
Da die Exponentenvektoren der bis auf ein Quadrat
glatten Werte linear unabhängig sind, erweitern wir die
~
Faktorbasis zu F := F ∪ {23, 29, 41} und erhalten die Exponentenvektoren aus folgender Liste:
x
gx + h
–1
2
3
7
11
13
23
29
41
140
109
1
0
0
1
0
0
0
0
1
146
133
1
0
1
0
0
1
0
1
0
147
137
1
0
1
1
0
0
0
0
1
149
145
1
0
1
0
1
0
0
0
0
150
149
1
0
1
0
0
0
0
0
0
151
153
0
0
0
0
0
1
1
0
0
152
157
0
0
1
1
0
0
0
1
0
155
169
0
0
1
0
0
0
0
0
0
159
185
0
0
1
1
1
1
0
0
0
Schon die Exponentenvektoren zu x1 = 140, x2 = 147
und x3 = 155 addieren sich zum Nullvektor. So erhalten
wir:
77
PRAXIS & METHODIK
3
a = ∏ (gxi + h) = 109 ⴢ 137 ⴢ 169 = 2 523 677
i=1
2
und b = (–1) ⴢ 22 ⴢ 32 ⴢ 7 ⴢ 41 ⴢ (–1) ⴢ 22 ⴢ 3 ⴢ 7 ⴢ 41 ⴢ 22 ⴢ 3
ⴢ 232, somit b = 23 ⴢ 32 ⴢ 7 ⴢ 23 ⴢ 41 = 475272. Wieder hoffen wir, durch ggT(a ± b, n) echte Teiler von n zu finden. Tatsächlich erhalten wir mit a + b = 2 998 949 194 = 2 ⴢ 97 (mod n) in ggT(a + b, n) = 97 einen echten
Teiler von n = 22 213 und in n/97 = 229 den Gegenteiler. (Mit a – b = 2 048 405 4809 = 3 ⴢ 7 ⴢ 229 finden wir
letzteren ebenfalls.) Damit ist 22 213 faktorisiert, und
zwar mit dem Ergebnis:
22 213 = 97 ⴢ 229.
Implementierung
Eine Implementierung des Quadratischen Siebs
steht (neben alternativen Verfahren) z. B. im Programmpaket CrypTool 1.4.30 (→ Einzelverfahren →
RSA-Kryptosystem → Faktorisieren einer Zahl) zur
Verfügung. Die Quelltextdatei dazu findet man im Subversion-Repository der Download-Seite (als Benutzer
anonymous mit leerem Kennwort) unter IntegerArithmetic.cpp.
Prof. Dr. Ralph-Hardo Schulz
Freie Universität Berlin
Fachbereich Mathematik und Informatik
Institut für Mathematik
Arnimallee 3
14195 Berlin
E-Mail: [email protected]
Helmut Witten
Brandenburgische Straße 23
10707 Berlin
E-Mail: [email protected]
Danksagung:
Herrn Bernhard Esslinger (Universität Siegen und CrypTool) danken
wir herzlich für Verbesserungsvorschläge bei der Entstehung unserer
Artikel.
Literatur und Internetquellen
Atkins, D.; Graff, M.; Lenstra, A. K.; Leyland, P.: Factorization of RSA129. 1994.
http://www.mit.edu:8001/people/warlord/RSA129-announce.txt
Crandall, R.; Pomerance, C.: Prime Numbers – A Computational Perspective. New York: Springer, 22005.
CrypTool 1 – Lernprogramm für Kryptografie und Kryptoanalyse:
http://www.cryptool.org/de/cryptool1
Esslinger, B. u. a.: Das CrypTool-Skript – Kryptographie, Mathematik
und mehr. 102010.
http://www.cryptool.org/images/ctp/documents/CrypToolScript-de.pdf
Hulpke, A.: Factorization of n = 87463 with the Quadratic Sieve. 2004.
http://www.math.colostate.edu/~hulpke/lectures/m400c/quadsievex.pdf
Kumanduri, R.; Romero, C.: Number Theory with Computer Applications. Upper Saddle River: Prentice Hall, 1997.
Leyland, P.; Lenstra, A.; Dodson, B.; Muffett, A.; Wagstaff, S.: MPQS with
Three Large Primes. In: C. Fieker, D. R. Kohel (Hrsg.): Algorithmic
Number Theory, 5th International Symposium, ANTS-V, Sydney,
Australia, July 7–12, 2002, Proceedings. Reihe ,,Lecture Notes in Computer Science“, Band 2369. Berlin; Heidelberg: Springer, 2002, S. 446–
460.
Morrison, M. A.; Brillhart, J.: A method of factorization and the factorization of F7. In: Mathematics of Computation, 29. Jg. (1975), Nr. 129
(Januar 1975); S. 183–205.
http://www.ams.org/journals/mcom/1975-29-129/S0025-5718-1975-0
371800-5/S0025-5718-1975-0371800-5.pdf
Müller-Stach, St.; Piontkowski, J.: Elementare und algebraische Zahlentheorie – Ein moderner Zugang zu klassischen Themen. Wiesbaden:
Vieweg+Teubner, 22011.
Pomerance, C.: A Tale of Two Sieves. In: Notices of the American
Mathematical Society, 43. Jg. (1996), Nr. 12, S. 1473–1458.
http://www.ams.org/notices/199612/pomerance.pdf
Schaefer, E.: NICHT SO GEHEIME NACHRICHT AUS MALAWI –
TEIL I (RSA). 2010.
http://www.mysterytwisterc3.org/images/challenges/mtc3-schaefer-01
-rsa-de.pdf
Schulz, R.-H.; Witten, H.: Zeit-Experimente zur Faktorisierung – Ein
Beitrag zur Didaktik der Kryptologie. In: LOG IN, 30. Jg. (2010), H. 166/
167, S. 113–120.
Wikipedia – Stichwort ,,Quadratic Sieve“:
http://en.wikipedia.org/wiki/Quadratic_sieve
Wikipedia – Stichwort ,,Quadratisches Sieb“:
http://de.wikipedia.org/wiki/Quadratisches_Sieb
Wikipedia – Stichwort ,,RSA Factoring Challenge“:
http://de.wikipedia.org/wiki/RSA_Factoring_Challenge
Wikipedia – Stichwort ,,RSA-129“:
http://en.wikipedia.org/wiki/RSA_numbers#RSA-129
Wikipedia – Stichwort ,,The Magic Words are Squeamish Ossifrage“:
http://en.wikipedia.org/wiki/The_Magic_Words_are_Squeamish_Ossif
rage
Witten, H.; Schulz, R.-H.: RSA & Co. in der Schule – Moderne Kryptologie, alte Mathematik, raffinierte Protokolle. Neue Folge – Teil 2: RSA
für große Zahlen. In: LOG IN, 26. Jg. (2006), Heft 143, S. 50–58.
Alle Internetadressen wurden zuletzt am 31. August 2012 geprüft.
Buchmann, J.: Einführung in die Kryptographie. Berlin; Heidelberg:
Springer, 52010.
78
LOG IN Heft Nr. 172/173 (2011/2012)
Herunterladen