Quadratisches Sieb
Quadratisches Sieb ist ein Begriff aus dem Bereich Zahlentheorie der Mathematik und bezeichnet einen der schnellsten bekannten Algorithmen zur Faktorisierung großer Natürlicher Zahlen. Es ist ein allgemeines Faktorisierungsverfahren, d.h. die Laufzeit hängt nur von der Größe der zu faktorisierenden Zahl ab und nicht von speziellen Eigenschaften der Zahl (bzw. ihrer Teiler). Für Zahlen mit bis ca. 110 dezimalen Stellen ist es das schnellste (allgemeine) Faktorisierungsverfahren. Für größere Zahlen ist das Zahlkörpersieb schneller. Die Laufzeit zum Faktorisieren einer Zahl n mit dem Quadratischen Sieb ist unter einigen als wahrscheinlich geltenden Annahmen:
Entstehungsgeschichte
Aufbauend auf der Kettenbruchmethode von John Brillhart und Michael Morrison, sowie inspiriert durch das lineare Sieb von Richard Schroeppel erfand Carl Pomerance 1981 durch theoretische Überlegungen das Quadratische Sieb, welches schneller war als alle bis dahin bekannten Faktorisierungsverfahren.
Kurz darauf fanden Jim Davis und Diane Holdridge bzw. Peter Montgomery unabhängig voneinander eine Variante des Quadratischen Siebs mit mehrfachen Polynomen (genannt MPQS). Eine andere Verbesserung, das so genannte spezielle quadratische Sieb, stammt von M. Zhang, welches aber nur auf spezielle Zahlen angewandt werden kann.
1994 gelang es, mit Hilfe des Quadratischen Siebs die berühmte 129-stellige Zahl RSA-129 zu faktorisieren.
Mehr zur Geschichte des Quadratischen Siebs findet sich im Artikel Geschichte der Faktorisierungsverfahren.
Funktionsweise
Gesucht ist eine Zerlegung einer natürlichen Zahl in Faktoren. Die Idee des Quadratischen Siebs besteht darin, Zahlen und zu finden, so dass die Kongruenz gültig ist.
Denn daraus folgt
Falls 1 < ggT (,n) < n und damit auch 1 < ggT( , n) < n, liefern der ggT() und der ggT() zwei der gesuchten Faktoren.
Bei der Faktorisierungsmethode von Fermat versucht man eine solche quadratische Kongruenz durch Durchlaufen der Werte von x zu erzeugen. Beim Quadratischen Sieb betrachtet man mehrere Kongruenz der Form x^2 = k (mod n) und versucht dann, möglichst effizient aus diesen eine quadratische Kongruenz zu erzeugen.
Sei die zu faktorisierede Zahl 1649. Schauen wir uns folgende Kongruenzen an: 412 mod 1649 = 32, 422 mod 1649 = 115 und 432 mod 1649 = 200. Keine dieser Zahlen ist ein Quadrat. Das Produkt 32 * 200 = 6400 = 802 der rechten Seite der ersten und der letzen Kongruenz jedoch sehr wohl. Damit haben wir die folgende quadratische Kongruenz gefunden. ((41)(43))2 = 802. Da (41)(43) mod 1649 = 114, lautet diese Kongruenz: 1142 ≡ 802 (mod 1649). Da ggT() = 17 (und ggT() = 97) haben wir 1649 = 17 * 97 in seine Faktoren zerlegt.
Der Algorithmus lässt sich in zwei Schritte aufteilen:
- Der Siebschritt, bei dem Kongruenzen der Form x^2 = k (mod n) gesucht werden, und
- Der Auswahlschritt, bei dem aus diesen Kongruenzen geeignete ausgewählt werden, aus denen sich durch Multiplikation eine quadratische Kongruenz ergibt.
Siebschritt
Im Siebschritt werden Kongruenzen der Form
- x2 ≡ k (mod n)
gesucht, wobei die Primfaktorzerlegung von k bekannt ist und nur aus kleinen Primzahlen besteht (in anderen Worten: k soll bezüglich einer festen Schranke glatt sein). Wählt man die Zahlen x in der Nähe der Wurzel von n, so sind die Werte Q(x):=x2-n in der Größenordnung von [√n]. Das Bestimmen der Primfaktorzerlegung durch Probedivision ist zeitintensiv. Um effizient zu Überprüfen ob eine Zahl glatt ist benutzt man folgende Eigenschaft:
Wenn man die Lösungen der Quadratischen Gleichung Q(x)=x^2-n gefunden hat kann man eine ganze Sequenz von Q(x) bestimmen, die durch p teilbar sind. Das Bestimmen einer Quadratischen Wurzel modulo einer Primzahl ist effizient (etwa mittels des Shanks-Tonelli Algorithmus) lösbar. Die Sequenz der ebenfalls durch p teilbaren Zahlen wird mit einen Siebverfahrens ähnlich dem des Sieb des Eratosthenes bestimmt. Das Quadratische Sieb leiten seinen Namen vom Lösen der 'Quadratischen' Gleichung und dem 'Sieben' der Teiler ab.
Im Detail geht man dabei wie folgt vor: Schritt 1: Wahl einer Faktorbasis. Nimm alle Primzahlen p bis zu einer Schranke S, für die n quadratischer Rest ist, d.h. die Gleichung x2 = n (mod p) ist lösbar. Zahlen, die quadratische Nichtreste enthalten, können a priori ausgeschlossen werden, da solche Zahlen niemals zu einer gewünschten Kongruenz führen. Die Schranke S wählt man in der Größenordnung von
Für die Zahlen x mit |x - √n| < L fertige eine Liste mit den Werten Q(x):=x2-n an. Bestimme die (zwei) Lösungen von Q(x)=x2-n mod p für alle Faktoren p der Faktorbasis (sowie deren Exponenten). Teile alle Zahlen Q (x+k*p) innerhalb eines gewählten Siebintervalls durch p. Die Zahlen, bei denen am Ende eine 1 übrig bleibt, sind glatt bezüglich der Faktorbasis und damit die gesuchten Werte. Divisionen bei großen Zahlen Q(x) sind sehr langsam, daher modifiziert man diesen Schritt. Man speichert nicht die Zahlen Q(x) selbst, sondern deren auf ganze Zahlen gerundete Logarithmen, die viel kleiner sind. Im Siebschritt kann man dann die Division durch eine Subtraktion mit den ebenfalls gerundeten Logarithmen der Zahlen p ersetzen. Aus Geschwindigkeitsgründen verzichtet man in der Praxis auch auf das Sieben mit Potenzen der Faktoren. Durch diese Modifikationen sind nicht alle gefundenen Zahlen notwendiger Weise glatt. Schritt 3: Bestimmung der Primfaktorzerlegung der glatten Zahlen. Bestimme eine Schranke T. Die Zahlen aus der Liste, die nach dem Sieben (in der Variante mit Logarithmen) kleiner als T sind, sind mit hoher Wahrscheinlichkeit glatt. Für diese Zahlen berechnet man nun die Primfaktorzerlegung; dabei bemerkt man auch Zahlen, die doch nicht glatt sind. Das Bestimmen der Primfaktorzerlegung könnte kann man (wieder) mit der Probedivision erledigen. Schneller geht es wenn man Schritt 2 (modifiziert) noch einmal anwendet. Man bestimmt mit dem Sieb wieder alle Positionen x+kp die durch p teilbar sind. Nur die Zahlen Q(x+kp) die mit hoher Wahrscheinlichkeit glatt sind werden durch p geteilt. |
Auswahlschritt
Hat man im Siebschritt genügend Kongruenzen gefunden, wird von diesen eine Teilmenge bestimmt, die eine Kongruenz der Form
- .
ergibt. Es wird also eine Teilmenge von Kongruenzen gesucht, die miteinander multipliziert, auch auf der rechten Seite ein Quadrat ergeben. Zu einer (glatten) Kongruenz x^2 = k (mod n) besteht k nur aus Faktoren der Faktorbasis. k kann vollständig als Vektor der Exponenten seiner bekannten Primzahlzerlegung beschreiben werden. Zu den Exponentenvektoren der Kongruenzen stellt man ein lineares Gleichungssystem über dem endlichen Körper F2 auf, bei dem jede Zeile aus dem Exponentenvektor einer Kongruenz modulo 2 besteht. Eine Zahl ist genau dann ein Quadrat, wenn alle Exponenten seiner Primzahlzerlegung gerade sind. Falls man also eine nichttriviale Linearkombination von Zeilen findet, die den Nullvektor ergeben, hat man auch ein quadratische Kongruenz gefunden. Diese liefert durch Berechnung von ggT(u-v,n) einen Faktor von n, der in mindestens der Hälfte aller Fälle weder 1 noch n ist. Zur Lösung dieses Schrittes verwendet man Verfahren der linearen Algebra, wie das Gauß'sche Eliminationsverfahren, das Verfahren der konjugierten Gradienten oder das Lanczos-Verfahren. Das Block Lanczos-Verfahren, eine Erweiterung des Lanczos-Verfahrens kann solche große - aber sehr dünn besetzte Matrizen - in einem Bruchteil des Siebschritts Platz sparend (linear in der Anzahl der Zeilen) lösen.
Beispiel
Gesucht ist die Primfaktorzerlegung von 1909. Die Quadratwurzel aus 1909 ist ungefähr 43,6921. Die erste zu prüfende Zahl muß also die nächst höhere natürliche Zahl nach der 43, also die 44 sein. Im Siebschritt berechnet man der Reihe nach:
- 442 ≡ 3·3·3 (mod 1909)
- 452 ≡ 2·2·29 (mod 1909)
- 462 ≡ 3·3·23 (mod 1909)
- 472 ≡ 2·2·3·5·5 (mod 1909)
Fasst man die erste und die vierte Kongruenz zusammen, d.h. multipliziert man jeweils die linke und rechte Seite der Kongruenz, so erhält man:
- (44·47)2 ≡ 3·3·3·2·2·3·5·5 ≡ 902 (mod 1909)
und mit ggT(44·47-90,1909) = 23 einen Teiler von 1909 und damit die Zerlegung 1909=23·83. Da sowohl 23 als auch 83 Primzahlen sind, ist gleichzeitig auch schon die Primfaktorzerlegung gefunden.
Verbesserung des Verfahrens
Das Multiple Polynomial Quadratic Sieve beruht auf der Idee nur Werte Q(x) zu erzeugen, die einen Faktor a als Teiler enthalten. Dazu betrachtet man anstelle der Gleichungen Q(x) = x^2 - n nun
Dabei wird b so gewählt dass b^2 - n durch a teilbar ist (b^2 - n = ac). Damit gilt
und der hiermit erzeugte Wert Q(x) enthält a als Teiler. Beim Multiple Polynomial Quadratic Sieve (MPQS) wählt man a = d^2. Damit enthält Q(x) ein Quadrat und die Wahrscheinlichkeit dass die erzeugten Zahlen Q(x) glatt sind steigt. Das Verfahren wurde 1983 von J.A.Davis und D.B.Holdridge entwickelt.
Beim Self Initializing Quadratic Sieve (SIQS) wird a als Produkt von Faktoren der Faktorbasis gewählt. Auch hier steigt die Wahrscheinlichkeit dass Q(x) glatt ist. Im Gegensatz zum MPQS existieren zu einem a viele Werte für b. Da sich das Wechseln des Faktors a der Polynome (im Gegensatz zum Wechseln von b) ungünstig auf die Laufzeit auswirkt, ist das SIQS schneller als das MPQS. Dieses Verfahren wurde von René Peralta sowie W.R.Alford und Carl Pomerance 1995 entdeckt.
Einsatzbereich
Das Quadratische Sieb eignet sich für große Zahlen bis etwa 110 Dezimal-Stellen, die keine Primpotenz sind. Für größere Zahlen ist das Zahlkörpersieb besser geeignet.
Am 2. April 2004 wurde die Zahl RSA-129 mit dem Multiple Polynomial Quadratic Sieve faktorisiert. Diese Zahl mit 129 Dezimal-Stellen wurde in ihre zwei Teiler (einer mit 64, der andere mit 65 Dezimal-Stellen) zerlegt. Der Siebschritt wurde verteilt von 600 Freiwilligen ausgeführt. Diese sammelten 8 Monate lange Kongruenzen, die per email (oder ftp) an den zentralen Rechner übermittelt wurden. Der Auswahlschritt auf den 298 GB Daten wurde in 45 Stunden auf einem Supercomputer ausgeführt. Die Faktorbasis umfasste 524338 Primzahlen, die Matrix hatte eine Größe von 569466 Zeilen und 524338 Spalten.
Alle weiteren Faktorisierungsrekorde wurden mit dem Zahlkörpersieb aufgestellt.
Literatur
- Carl Pomerance: A Tale of Two Sieves, Notices of the AMS, 43 (1996) 1473-1485 (Webversion: http://www.ams.org/notices/199612/pomerance.pdf )
- Richard Crandall, Carl Pomerance: Prime Numbers, A Computational Perspective, Springer, 2001, ISBN 0-387-94777-9
Weblinks
- http://www.thorstenreinecke.de/qsieve/ - Eine Implementierung des Quadratischen Siebs unter GPL
- http://www.crypto-world.com/documents/siqs.ps.gz - Beschreibung des Self Initializing Quadratic Sieves von Scott Patrick Contini.
- http://www.informatik.tu-darmstadt.de/ftp/pub/TI/reports/gross.diplom.ps.gz - Der Block Lanczos Algorithmus über GF(2) von Olaf Gross