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)