Faktorisierung Sebastian Roekens

Werbung
Westfälische Wilhelms-Universität Münster
Ausarbeitung
Faktorisierung
im Rahmen des Seminars Multimedia
Sebastian Roekens
Themensteller: Prof. Dr. Herbert Kuchen
Betreuer: Dipl.-Wirt.Inform. Michael Poldner
Institut für Wirtschaftsinformatik
Praktische Informatik in der Wirtschaft
Inhaltsverzeichnis
1 Einleitung
1
2 Theoretische Grundlagen der Faktorisierung
2
2.1
Sieb des Eratosthenes . . . . . . . . . . . . . . . . . . . . . . . . . . .
2
2.2
Quadratische Reste und das Legendre-Symbol . . . . . . . . . . . . .
3
3 Faktorisierungsalgorithmen
4
3.1
Probedivision . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4
3.2
Faktorisierungsmethode von Fermat . . . . . . . . . . . . . . . . . . .
6
3.3
Pollard p-1 Methode . . . . . . . . . . . . . . . . . . . . . . . . . . .
8
3.4
Quadratisches Sieb . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
4 Zusammenfassung und Ausblick
17
Literaturverzeichnis
18
i
Kapitel 1: Einleitung
1
Einleitung
Als Faktorisierung (genauer Primfaktorzerlegung) wird der Vorgang bezeichnet eine
natürliche Zahl als Produkt von Primzahlen darzustellen. Nach dem Fundamentalsatz der Arithmetik ist dies für jede natürliche Zahl möglich. (Vgl. [Sc07, S. 26].)
Wie sich natürliche Zahlen zerlegen lassen war Thema vieler Forschungsarbeiten,
so dass sowohl durch immer fortschrittlichere Algorithmen, als auch durch die verbesserte Computertechnik die Faktorisierung von immer größeren Zahlen möglich
wurde. Interessant wurde das Thema der Faktorisierung vor allem dadurch, dass
es verschiedene Verschlüsselungsalgorithmen gibt, deren Sicherheit auf der Komplexität der Faktorisierung eines Produktes sehr großer Primzahlen basiert. (Vgl. hierzu
das RSA Kryptosystem [Na00, S. 77-81], sowie das Rabin Kryptosystem [Ra79].)
Um die Sicherheit des RSA Kryptosystems zu prüfen wurde von dem Unternehmen RSA Security die RSA Factoring Challenge“ gestartet. Bei diesem Wettbewerb
”
war das Ziel Zahlen unterschiedlicher Größenordnungen zu faktorisieren. Dabei waren die einzelnen Zahlen mit Preisgeldern von insgesamt weit über 600.000 US Dollar
dotiert. (Vgl. [Rs91].)
Durch die weite Verbreitung von RSA und dadurch, dass Faktorisierungsalgorithmen als Angriffsmethoden auf das RSA Kryptosystem verwendet werden können,
wird die Relevanz der Entwicklung schneller Faktorisierungsmethoden deutlich. Diese Ausarbeitung liefert einen Überblick über verschiedene Faktorisierungsverfahren
und gibt einen Ausblick auf mögliche Anwendungsbereiche der Algorithmen. Dazu
ist die Ausarbeitung in 3 Inhaltskapitel unterteilt. (Vgl. Abbildung 1.)
Im Kapitel 2 werden Grundlagen aus dem Bereich der Faktorisierung erläutert,
auf die in späteren Kapiteln zurückgegriffen wird. Die Ermittlung von Primzahlen
in einem Intervallbereich mittels des Siebs des Eratosthenes wird beschrieben, sowie
quadratische Reste und das Legendre-Symbol.
Das Kapitel 3 gibt einen Überblick über verschiedene Faktorisierungsalgorithmen. Dabei werden für jeden Algorithmus zunächst allgemeine Informationen gegeben, dann wird der Algorithmus erläutert. Für jedes Verfahren wird entweder eine
beispielhafte Implementierung in Java gegeben, die einen weiteren Einblick in die
Funktionsweise des Verfahrens liefern soll, jedoch nur für kleine zu faktorisierende Zahlen anwendbar ist (Für größere Zahlen bietet sich in Java eine Verwendung
der BigInteger -Klasse an, die Verfahrensweise der Algorithmen bleibt analog), oder
der Algorithmus wird grafisch dargestellt. Abschließend wird das Verfahren noch an
einem Beispiel angewandt. Zuletzt werden noch für jedes Verfahren Erweiterungsund Verbesserungspotentiale aufgezeigt.
1
Kapitel 2: Theoretische Grundlagen der Faktorisierung
Zusammenfassend wird im Kapitel 4 ein Überblick über die Faktorisierungsalgorithmen gegeben und ein kurzer Ausblick auf die weitere Entwicklung der Faktorisierung gegeben.
Einleitung
Theoretische Grundlagen
Sieb des Eratosthenes
Quadratische Reste und das Legendre-Symbol
Faktorisierungsalgorithmen
Probedivision
Faktorisierungsmethode von Fermat
Pollard p-1 Methode
Quadratisches Sieb
Zusammenfassung und Ausblick
Abbildung 1: Gliederung der Ausarbeitung
2
Theoretische Grundlagen der Faktorisierung
2.1
Sieb des Eratosthenes
Das Sieb des Eratosthenes (Vgl. [Re07, S. 96-97].) ist ein Verfahren, das in einem
Intervall von 2 bis zu einer oberen Grenze n alle Primzahlen ermittelt. Zunächst wird
eine Liste mit allen Zahlen von 2 bis n erzeugt. In dieser Liste gelten am Anfang des
Verfahrens alle Zahlen als Primzahlen. Dann beginnt das Verfahren mit der Zahl 2,
die eine Primzahl ist. Es werden alle Vielfachen von 2 aus der Liste als nicht prim
markiert und das Verfahren fährt analog mit der nächsten als Primzahl markierten
Zahl im Intervall fort. So werden nach und nach alle Vielfachen aller im Intervall
enthaltenen Primzahlen herausgefiltert. Das Verfahren bricht ab, sobald die erste
Zahl erreicht wurde die größer oder gleich der Wurzel aus n ist. Primzahlen die
größer sind als die Wurzel aus n haben keine zu markierenden Vielfache im oben
beschriebenen Intervall, da diese entweder schon markiert wurden, oder nicht mehr
im Intervall liegen.
Eine mögliche Implementierung in Java ist:
p u b l i c b o o l e a n [ ] e r a t o s t h e n e s ( i n t n ){
// check parameter n
i f ( n<2) {
return null ;
}
// primes a r e computed from 1 t o n
2
Kapitel 2: Theoretische Grundlagen der Faktorisierung
// prime [ i ] = t r u e , when i i s a prime
b o o l e a n [ ] prime = new b o o l e a n [ n + 1 ] ;
// i n i t i a l i z e Array −> a l l numbers prime
f o r ( i n t i = 2 ; i <= n ; i ++){
prime [ i ] = t r u e ;
}
// f o r e v e r y prime from 2 t o s q r t ( n )
// s e t a l l m u l t i p l e s o f t h a t primes t o f a l s e
f o r ( i n t i = 2 ; i ∗ i <= n ; i ++){
i f ( prime [ i ] ) {
f o r ( i n t j = i ∗ i ; j <= n ; j+=i ){
prime [ j ] = f a l s e ;
}
}
}
r e t u r n prime ;
}
Die Methode erzeugt ein Feld von boolean-Werten der Größe n. Für jede Zahl im
Intervall wird in diesem Feld gespeichert, ob sie eine Primzahl ist (wahr ) oder nicht
(falsch). Dann werden nach und nach alle Vielfachen der Primzahlen (beginnend bei
2) wie zuvor beschrieben als nicht prim markiert, bis im Feld nur noch die Primzahlen als wahr markiert sind. Das Feld mit den Wahrheitswerten wird abschließend
zurückgegeben.
Verbesserungen dieser Vorgehensweise sind möglich. Mithilfe zusätzlicher Felder
kann leicht die Faktorisierung zusammengesetzter Zahlen im Intervall mit abgespeichert werden. Auch Verbesserungen bezüglich des Speicherplatzbedarfs sind möglich.
Indem auf die Betrachtung der geraden Zahlen verzichtet wird, kann der Speicherbedarf des Verfahrens schon halbiert werden.
2.2
Quadratische Reste und das Legendre-Symbol
Thema dieses Kapitels sind quadratische Kongruenzen der Form:
x2 ≡ a(mod m), mit a ∈ Z, m ∈ N und gcd (a, m) = 1.
(1)
Existiert eine Lösung dieser Kongruenz, nennt man in diesem Fall a den quadratischen Rest modulo m. Existiert diese Lösung nicht, heißt a nicht-quadratischer
Rest. (Vgl. [Re07, S. 214-224].)
3
Kapitel 3: Faktorisierungsalgorithmen
Am Beispiel für m = 7 wird diese Definition deutlich:
12 ≡ a(mod 7) ⇒ a = 1
(2)
22 ≡ a(mod 7) ⇒ a = 4
(3)
32 ≡ a(mod 7) ⇒ a = 2
(4)
42 ≡ a(mod 7) ⇒ a = 2
(5)
52 ≡ a(mod 7) ⇒ a = 4
(6)
62 ≡ a(mod 7) ⇒ a = 1
(7)
Es sind 1, 2 und 4 quadratische Reste modulo 7 und 3, 5 und 6 nicht-quadratische
Reste.
Euler entwarf hierzu ein Theorem, welche die Frage, ob a ein quadratischer
Rest ist effizient beantworten kann. Nach Euler ist a genau dann ein quadratischer
Rest modulo p (p sei eine ungerade Primzahl), falls
a
p−1
2
≡ 1(mod p).
(8)
Aufbauend darauf wurde das Legendre Symbol für ungerade Primzahlen definiert
als:


0,



a
( ) = 1,

p


−1,
wenn a ≡ 0(mod p)
wenn a quadratischer Rest modulo p
(9)
wenn a nicht-quadratischer Rest modulo p
Am Beispiel m = 7:
3
3.1
a=1⇒1
7−1
2
≡ 1(mod 7)
a=2⇒2
7−1
2
≡ 1(mod 7)
a=3⇒3
7−1
2
≡ 6(mod 7)
a=4⇒4
7−1
2
≡ 1(mod 7)
a=5⇒5
7−1
2
≡ 6(mod 7)
a=6⇒6
7−1
2
≡ 6(mod 7)
1
⇒( )=1
7
2
⇒ quad. Rest modulo 7
⇒( )=1
7
3
⇒ nicht-quad. Rest modulo 7 ⇒ ( ) = −1
7
4
⇒ quad. Rest modulo 7
⇒( )=1
7
5
⇒ nicht-quad. Rest modulo 7 ⇒ ( ) = −1
7
6
⇒ nicht-quad. Rest modulo 7 ⇒ ( ) = −1
7
⇒ quad. Rest modulo 7
(10)
(11)
(12)
(13)
(14)
(15)
Faktorisierungsalgorithmen
Probedivision
Sind die ganzzahligen Faktoren einer Zahl n zu finden, ist das naheliegenste Verfahren die Probedivision. (Vgl. [Le00, S. 7].) Bei der Probedivision wird die Zahl
4
Kapitel 3: Faktorisierungsalgorithmen
n beginnend bei 2 durch jede Primzahl bis zu einer zuvor festgelegten Grenze B
dividiert. Wenn das Ergebnis eine ganze Zahl ist, ist ein Teiler gefunden. Ist B min√
destens so groß wie b nc wird definitiv ein Teiler von n gefunden, sofern n keine
Primzahl ist. Wird kein Teiler gefunden, ist n eine Primzahl, so dass die Probedivision auch als Primzahltest genutzt werden kann. Je größer n ist, und je näher Teiler
√
an n liegen, desto mehr Primzahlen müssen als mögliche Teiler betrachtet werden,
um alle Teiler von n zu finden.
Um das Verfahren durchführen zu können, müssen alle Primzahlen bis zur festgelegten Schranke B bekannt sein. Diese lassen sich beispielsweise über das Sieb des
Eratosthenes ermitteln. (Vgl. Kapitel 2.1.)
Eine mögliche Implementierung in Java ist:
p u b l i c i n t p r o b e d i v i s i o n ( i n t n ){
// check parameter
i f ( n < 2){
return 0;
}
// g e t a l l primes from 2 t o s q r t ( n )
i n t b = ( i n t ) Math . f l o o r ( Math . s q r t ( n ) ) ;
i n t [ ] primes = g e t P r i m e s ( b ) ;
// t r y d i v i d i n g n by e v e r y prime i n a r r a y
f o r ( i n t i = 0 ; i < primes . l e n g t h ; i ++){
i f ( ( n%primes [ i ])==0) {
// i f n mod prime = 0 , r e t u r n prime
r e t u r n primes [ i ] ;
}
}
//n i s prime
return n ;
}
Die Funktion getPrimes gibt ein Feld zurück, dass alle Primzahlen des Intervalls
√
von 2 bis zur oberen Grenze b nc enthält, so dass in jedem Fall vorhandene Teiler
gefunden werden. Für jede dieser Primzahlen wird geprüft, ob sie ein Teiler von n
ist. Sobald ein Teiler gefunden wurde, wird dieser zuückgegeben. Wird kein Teiler
gefunden, wird die Zahl selbst zurückgegeben. In diesem Fall ist n eine Primzahl.
Um am Beispiel der Zahl n = 7597 – hier und im folgenden sei bekannt, dass n
zusammengesetzt ist und zwei Faktoren besitzt – die Probedivision durchzuführen
5
Kapitel 3: Faktorisierungsalgorithmen
muss zunächst die obere Grenze B der zu testenden Primzahlen ermittelt werden:
√
√
B = b nc = b 7597c = 87
(16)
Zu prüfen sind die Primzahlen 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47,
53, 59, 61, 67, 71, 73, 79, 83. Beginnend bei 2 wird überprüft, ob eine Zahl dieser
Liste ein Teiler von n ist. Bei der Zahl 71 stellt sich heraus, dass diese Zahl ein
Teiler von n ist. Aufgrund der bekannten Annahmen ergibt sich der zweite Faktor
als 7597/71 = 107.
Durch den hohen nötigen Speicher- und Berechnungsaufwand durch die Ermitt√
lung der Primzahlen von 2 bis n eignet sich das Verfahren nicht für die Faktorisierung sehr großer Zahlen. Es kann dort jedoch eingesetzt werden, um kleine Faktoren
bis zu einer festgelegten oberen Grenze B zu finden. Sind kleine Faktoren ermittelt
bzw. ausgeschlossen, kann die (Rest-)Faktorisierung durch andere Verfahren vorgenommen werden.
3.2
Faktorisierungsmethode von Fermat
Das Faktorisierungsverfahren nach Fermat (Vgl. [Ma05, S. 84-85].) basiert darauf
quadratische Kongruenz zu finden und basierend darauf vorhandene Faktoren zu
ermitteln. Fermat beschrieb diese Methode 1643 in einem Brief beispielhaft an der
Faktorisierung der Zahl 2027651281. (Vgl. [Ma94, S. 326].) Fermats Verfahren ist
Grundlage für viele weitere Verfahren, wie beispielsweise dem quadratischen Sieb.
Ein Ziel des Verfahrens ist es Werte für a und b zu finden, so dass folgende
Kongruenzen erfüllt sind:
a2 ≡ b2 (mod n)
(17)
a 6≡ b(mod n)
(18)
a2 − b2 ≡ 0(mod n)
(19)
Zusätzlich muss gelten:
Es ergibt sich aus (17):
⇔ (a − b)(a + b) ≡ 0(mod n)
(20)
Es gilt n|(a − b)(a + b) und damit, dass(a − b) und (a + b) aus Vielfachen der
Teiler von n zusammengesetzt sein müssen bzw. Teiler von n sind. Die gesuchten
Teiler von n ergeben sich so als gcd(a − b, n) und
6
n
.
gcd(a−b,n)
So verlagert sich das
Kapitel 3: Faktorisierungsalgorithmen
Problem Teiler von n zu finden, darauf Werte für a und b zu ermitteln, welche die
Kongruenzbedingungen erfüllen.
Es sei n = cd und d > c > 1. Mit n = (a − b)(a + b) und c = (a − b), d = (a + b)
folgt a =
d+c
2
und b =
d−c
.
2
Nun ist zu bestimmen, in welchem Intervall mögliche
√
Werte für a liegen. Die Werte c und d können übereinstimmen, falls c = d = n
gilt. In diesem Fall ist
amin
√
√
n+ n √
= n.
=
2
Die Faktoren c und d liegen am weitesten auseinander, wenn c = 3 und d =
(21)
n
3
gilt.
(Die 2 wird als einzige gerade Primzahl nicht berücksichtigt, es wird vorausgesetzt,
dass 2 kein Teiler von n ist.) Es folgt
amax =
3+
2
n
3
=
n+9
.
6
(22)
√
] annehDer Parameter a kann ganzzahlige Werte aus dem Intervall [ n, . . . , n+9
6
√
men. Es werden zur Faktorisierung von n beginnend bei n alle Werte für a dieses
Intervalls getestet, wobei geprüft wird, ob a2 − n eine Quadratzahl ist. Ist dies der
Fall, sind die Faktoren c = (a − b) und d = (a + b) mit b2 = a2 − n gefunden.
Das Verfahren findet am schnellsten die Teiler von n, die am nächsten an der
Quadratwurzel von n liegen (im Gegensatz zur Probedivision). Je größer der Abstand
der Teiler voneinander ist, desto mehr Werte für a müssen überprüft werden.
Eine mögliche Implementierung in Java ist:
p u b l i c s t a t i c i n t f e r m a t ( i n t n ){
// o n l y f a c t o r i z e numbers>2
i f ( n<2){
return 0;
}
// b e g i n n i n g o f l o o p
i n t m = ( i n t ) Math . c e i l ( Math . s q r t ( n ) ) ;
// end o f l o o p
i n t o = ( n +9)/6;
int b;
f o r ( i n t a = m; a <= o ; a++){
// t e s t i f c o n g r u e n c e i s found
b = ( i n t ) Math . c e i l ( Math . s q r t ( a∗a−n ) ) ;
i f ( ( b∗b)==(a∗a − n ) ) {
r e t u r n a−b ;
7
Kapitel 3: Faktorisierungsalgorithmen
}
}
return 0;
}
In der Beispielimplementierung werden zunächst die Intervallgrenzen für den Parameter a ermittelt. Danach werden iterativ die möglichen Werte für a eingesetzt und
es wird geprüft, ob a2 −n eine Quadratzahl ist. Ist dies der Fall wird c zurückgegeben.
Wird keine passende Kongruenz ermittelt, wird 0 zurückgegeben. In diesem Fall ist
die zu prüfende Zahl eine Primzahl.
Um mit der Faktorisierungsmethode von Fermat die Zahl n = 7597 zu faktorisieren sind die Grenzen des Intervalls für den Wert a zu berechnen:
√
√
m = d ne = d 7597e = 88
7597 + 9
c = 1267
o=b
6
(23)
(24)
Danach ist zu prüfen ob a2 − n eine Quadratzahl ist:
882 − 7597 = 147 ⇒ keine Quadratzahl
(25)
892 − 7597 = 324 ⇒ Quadratzahl!
√
⇒ c = 89 − 324 = 71 und d = 89 + 18 = 107
(26)
(27)
Die ermittelten Werte c und d teilen n und sind die gesuchten Faktoren.
Am Beispiel wird deutlich, wie schnell das Verfahren für n Faktoren findet, wenn
die Faktoren annähernd gleich groß sind. Je weiter die Faktoren auseinander liegen,
desto mehr Schritte sind nötig, um einen Wert für a zu finden, so dass a2 − n eine
Quadratzahl ist. Hier wurden im Laufe der Zeit viele Verbesserungsmöglichkeiten
gefunden. Lehman entwickelte 1974 eine Faktorisierungsmethode, die darauf basiert, das Verfahren von Fermat für k ∗ n anstatt n anzuwenden, so dass weniger
Schritte notwendig sind. Für die genaue Ermittlung des Wertes k und die genaue
Funktionsweise der Faktorisierungsmethode von Lehmann siehe [Le74]. Viele weitere
Verfahren wie auch das quadratische Sieb basieren auf Fermats Methode, wenden
jedoch andere Vorgehensweisen an, um Werte für a und b zu ermitteln.
3.3
Pollard p-1 Methode
Die Pollard p-1 Methode wurde 1974 von Pollard veröffentlicht und basiert auf
dem kleinen Satz von Fermat. (Vgl. [Po74].) Während die Probedivision kleine Fak√
toren schnell findet, die Faktorisierungsmethode von Fermat große Faktore nahe n
8
Kapitel 3: Faktorisierungsalgorithmen
schnell findet, ist die Pollard p-1 Methode gut dazu geeignet Zahlen zu zerlegen,
welche einen Primfaktor p haben, für den p − 1 nur kleine Faktoren hat.
Nach dem kleinen Satz von Fermat gilt:
ap−1 ≡ 1(mod p),
(28)
wenn p eine Primzahl ist und a eine Zahl, die nicht von p geteilt wird. Definiert man
m als ein Vielfaches von p − 1 gilt auch:
am ≡ 1(mod p)
(29)
Aus (29) folgt, dass am − 1 ein Vielfaches von p ist. Für alle ganzen Zahlen a, die
nicht durch p teilbar sind, ist dann am − 1 durch p teilbar. Wenn am − 1 nicht durch
n teilbar ist, ist gcd (am − 1, n) ein echter Teiler von n. (Vgl. Abbildung 2.)
Um m zu ermitteln, werden Primzahlpotenzen gesucht, die kleiner sind als eine
zuvor festgelegte Grenze B. Es gilt:
m=
Y
qe.
(30)
q∈P P ,q e ≤B
Für das Beispiel n = 7597 mit B = 7 ergeben sich die Primzahlpotenzen 4, 3, 5,
7 und damit m = 4 ∗ 3 ∗ 5 ∗ 7 = 420. Es folgt:
gcd (2420 − 1, 7597) = 71
(31)
Am Beispiel fällt auf, dass schon für kleine zu faktorisierende Zahlen sehr große
Potenzen auftauchen können. Das Verfahren ist umso effektiver, je kleiner die spezifizierte Grenze B sein darf. Dies ist jedoch unbekannt, da vor Beginn des Verfahrens
nicht bekannt ist, wie groß die Faktoren von p − 1 sind.
Initialisierung
·
·
Setzen der oberen Schranke B für die Primzahlpotenzen
Ermitteln der Primzahlpotenzen
Hauptphase
·
·
·
Bestimmung von m
Bestimmung von am-1
Bestimmung des größten gemeinsamen Teilers von am-1
und n
Testphase
·
Gilt 1 < ggT < n ist mit dem ggT ein Teiler gefunden
Abbildung 2: Ablauf der Pollard p-1 Methode
Eine Weiterentwicklung der p-1-Methode ist die Elliptic Curve Method, welche
von Lenstra entwickelt wurde und zur Lösung der Faktorisierung elliptische Kurven verwendet und für beliebige n anwendbar ist. (Vgl. [Po01].)
9
Kapitel 3: Faktorisierungsalgorithmen
3.4
Quadratisches Sieb
Das quadratische Sieb wurde 1982 von Pomerance vorgestellt und ist bis heute
einer der schnellsten Faktorisierungsalgorithmen. Für Zahlen mit bis zu ca. 110
Stellen ist es schneller als alle bisher bekannten Verfahren. (Vgl. [Po85], sowie [Bu03,
S. 164-168].)
Ziel ist es weiterhin, die ganzzahligen Faktoren einer zusammengesetzten Zahl n
zu finden. Es wird weiterhin davon ausgegangen, dass n genau zwei Primfaktoren
besitzt. Für Zahlen mit mehr Primfaktoren wäre zu prüfen, ob die im folgenden
ermittelten Faktoren prim sind. Wäre ein Faktor keine Primzahl, müsste das Verfahren iterativ weiter angewandt werden, um alle Primfaktoren zu ermitteln.
Zunächst sind analog zum Verfahren von Fermat die ganzen Zahlen x und y zu
bestimmen, so dass die beiden folgenden Bedingungen erfüllt sind:
x2 ≡ y 2 (mod n)
x 6≡ ±y(mod n).
(32)
(33)
Sind beide Bedingungen erfüllt, dann ist n ein Teiler von x2 − y 2 = (x − y)(x + y),
aber nicht von (x − y) und (x + y). Daraus folgt, dass g ein Teiler von n ist, mit
g = gcd (x − y, n). Im Falle von zwei existierenden Teilern wird nach der Ermittlung
eines Teilers die Berechnung des zweiten Teilers trivial.
Für die Ermittlung von x und y gibt es unterschiedliche Möglichkeiten. Beim Verfahren des quadratischen Siebs wird nachfolgendes Vorgehen angewandt. Es wird
definiert:
√
m = b nc
(34)
f (X) = (X + m)2 − n.
(35)
Gesucht sind X, so dass f (X) nur kleine Primfaktoren hat. Es gilt:
(s + m)2
≡ f (s)mod n
(s1 + m)2 ∗ (s2 + m)2 ≡ (f (s1 )mod n) ∗ (f (s2 )mod n).
(36)
(37)
Aus der Menge der s sind Kombinationen von s zu wählen, für die in (37) gilt, dass
auf beiden Seiten ein Quadratzahl steht (Hier beispielhaft für zwei s). Da auf der
linken Seite immer eine Quadratzahl zu finden ist, ist zu klären in welchem Fall auf
der rechten Seite eine Quadratzahl zu finden ist. Dies ist genau dann der Fall, wenn
die Exponenten aller Primfaktoren von f (s1 )mod n und f (s2 )mod n zusammen gerade sind und die Rechte Seite positiv ist.
10
Kapitel 3: Faktorisierungsalgorithmen
Beispiel mit n = 7597:
√
m = b 7597c = 87
Um ein geeignetes Paar s1 und s2 zu finden, werden f (s) berechnet, hier beispielhaft
beginnend mit s = −2.
f (−2) = (−2 + 87)2 − 7597 = −372 = −1 ∗ 22 ∗ 3 ∗ 31
(38)
f (−1) = (−1 + 87)2 − 7597 = −201 = −1 ∗ 3 ∗ 67
(39)
f (0)
= (0 + 87)2 − 7597 = −28
= −1 ∗ 22 ∗ 7
(40)
f (1)
= (1 + 87)2 − 7597 = 147
= 3 ∗ 72
(41)
f (2)
= (2 + 87)2 − 7597 = 324
= 22 ∗ 34
(42)
f (3)
= (3 + 87)2 − 7597 = 503
= 503
(43)
f (4)
= (4 + 87)2 − 7597 = 684
= 22 ∗ 32 ∗ 19
(44)
f (5)
= (5 + 87)2 − 7597 = 867
= 3 ∗ 172
(45)
Hier fällt auf, dass s1 = 1 und s2 = 5 ein gesuchtes Paar sind. Auf der rechten
Seite von (37) ergeben sich die Primfaktoren: 32 , 72 , 172 , so dass wie gefordert die
Exponenten aller Primfaktoren gerade sind. Es folgt:
882
≡ 3 ∗ 72 (mod 7597)
(46)
922
≡ 3 ∗ 172 (mod 7597)
(47)
⇔ (88 ∗ 92)2 ≡ (3 ∗ 7 ∗ 17)2 (mod 7597)
(48)
Diese Kongruenzen lassen sich nicht immer so einfach ermitteln, wie hier am Beispiel.
Je größer n wird, desto mehr mögliche Kongruenzen müssen betrachtet werden, womit auch die Zahl der möglichen Gruppierungen von f (s) steigt sehr schnell an. Eine
mögliche Vorgehensweise die gesuchten Kongruenzen zu finden ist die Umformung
des Problems in ein lineares Gleichungssystem, die im Folgenden an obigem Beispiel
demonstriert wird.
Gesucht ist – sofern eine Lösung existiert – eine Kombination aus f (s), so dass das
Produkt der gewählten f (s) eine Quadratzahl ist. Dazu müssen alle Exponenten der
Primfaktoren des Produkts gerade sein. Sei eine Matrix definiert, die eine Übersicht
der Exponenten der Primfaktoren der f (s) des oben betrachteten Beispiels darstellt.
Es werden nur f (s) betrachtet, deren Primfaktoren alle eine zuvor definierte Grenze B nicht überschreiten. D.h. es muss jeder Primfaktor der Basis muss Teil der
folgenden Menge sein:
{p ∈ P|p ≤ B} ∪ {−1}
11
(49)
Kapitel 3: Faktorisierungsalgorithmen
Die Werte, die (49) erfüllen werden B-glatt genannt. Im Beispiel sei B = 17 und
damit die Matrix A:

1

0
A=
0

0
2 0 0 1 0 0 0


0 1 0 2 0 0 0

2 4 0 0 0 0 0

0 1 0 0 0 0 2
(50)
Die Zeilen stellen f (0), f (1), f (2) und f (5) dar, da nur diese Werte B-glatt sind. Die
erste Spalte steht für den Faktor −1, die nachfolgenden Spalten aufsteigend für die
Primfaktoren 2 bis 17. Diese Matrix lässt sich weiter vereinfachen. Zunächst können
nicht benötigte Spalten für die Primfaktoren 5, 11 und 13 weggelassen werden. Weiterhin ist nur interessant ob die vorhandenen Exponenten gerade oder ungerade
sind. Es ist ausreichend für gerade Exponenten den Wert 0 zu verwenden, und für
ungerade den Wert 1. Es ergibt sich:

1 0 0 1 0



0 0 1 0 0 


A =

0 0 0 0 0 
∗
(51)
0 0 1 0 0
Um die gesuchte Kombination zu finden, sind nun die Zeilenvektoren zu addieren
mod 2. Ergibt sich als Ergebnis der 0-Vektor, ist eine mögliche Kombination gefunden. Dieses Vorgehen ist gleichbedeutend damit, die Matrix A∗ zu transponieren
und den Kern der transponierten Matrix A∗T zu bestimmen. Transponiert man die
Matrix, ergibt sich:

1 0 0 0


0 0 0 0




= 0 1 0 1


1 0 0 0


0 0 0 0

A∗T
(52)
Es ergibt sich x1 = 0 und x2 = −x4 . Setzen wir x4 = 1 ergibt sich x1 = 0, x2 = 1
und x4 = 1 (x3 kann beliebig 0 oder 1 sein). Eine mögliche Kombination ist f (1)
und f (5).
Multipliziert man die beiden gefundenen Kongruenzen ergibt sich:
(88 ∗ 92)2
⇒x
≡ (3 ∗ 7 ∗ 17)2 (mod 7597)
(53)
= 88 ∗ 92(mod 7597) = 499
(54)
und y = 3 ∗ 7 ∗ 17(mod 7597) = 357
(55)
Es gilt, dass gcd (x − y, n) ein echter Teiler von n ist:
gcd (499 − 357, 7597) = 71
12
(56)
Kapitel 3: Faktorisierungsalgorithmen
Damit ist der erste Primfaktor von n gefunden. Per Division ergibt sich der zweite
Primfaktor 7597/71 = 107.
Um festzustellen, welche der f (s) B-glatt sind, können per Probedivision die
Primfaktoren der Werte ermittelt werden. Dies ist jedoch aufwendig und bei sehr
großen n ineffizient, so dass hier ein Siebalgorithmus angewandt wird.
Sei n = 7597 gegeben mit B = 17. Gesucht sind Kongruenzen der Form (s +
m)2 ≡ f (s)mod n (Vgl. (37).). Es gilt:
= (s + m)2 − n
(57)
f (s + kp)
= (s + m + kp)2 − n
(58)
f (s + kp)
= (s + m + kp)2 − n
(59)
f (s)
f (s + kp) = s2 + 2sm + 2skp + m2 + 2mkp + (kp)2 − n
(60)
f (s + kp)
= (s + m)2 + 2skp + 2mkp + (kp)2 − n
(61)
f (s + kp)
= f (s) + 2skp + 2mkp + (kp)2
(62)
f (s + kp)
≡ f (s)(mod p)
(63)
So lassen sich, sobald eine f (s) gefunden wurde, dass durch p teilbar ist, eine Reihe
von f (s+kp) bestimmen, die ebenfalls durch p teilbar sind. p teilt f (s) = (s+m)2 −n
genau dann, wenn gilt (s+m)2 = n(mod p) (d.h. wenn n quadratischer Rest modulo
p ist, vgl. Kapitel 2.2). Alle weiteren f (s + kp) werden durch ein Siebverfahren
bestimmt, ähnlich dem Sieb des Eratosthenes.
Zunächst ist dazu die Faktorbasis zu bestimmen. Für die Schranke B = 17 sind
die zu betrachtenden Primzahlen damit: 2, 3, 5, 7, 11, 13 und 17. Nach Eulers Satz
(Vgl. Kapitel 2.2) ergibt sich:
= 3 ⇒ 7597
3−1
2
≡ 1mod 3
(64)
p
= 5 ⇒ 7597
5−1
2
≡ 4mod 5
(65)
p
= 7 ⇒ 7597
7−1
2
≡ 1mod 7
(66)
p = 11 ⇒ 7597
11−1
2
≡ 10mod 11
(67)
p = 13 ⇒ 7597
13−1
2
≡ 12mod 13
(68)
p = 17 ⇒ 7597
17−1
2
≡ 1mod 17
(69)
p
Somit haben nur die Legendre-Symbole von 3, 7 und 17 den Wert 1. Zusätzlich
geht per Definition noch die 2 mit in die Faktorbasis ein. Damit ist die Faktorbasis
gefunden, und das Siebintervall muss definiert werden. Um lineare Abhängigkeiten
bestimmen zu können sind mindestens K + 1 B-glatte Werte notwendig. Damit
zusätzlich auch negative f (s) verwendet werden können, sollten K + 2 B-glatte
13
Kapitel 3: Faktorisierungsalgorithmen
Werte bestimmt werden, und die −1 in die Primzahlbasis eingehen. (K bezeichnet
die Größe der Primzahlbasis.)
Zu den ermittelten Werten der Faktorbasis sind zusätzlich noch die Werte a zu
bestimmen, bei denen der quadratische Rest modulo p mit dem quadratischen Rest
von n modulo p übereinstimmt. Es muss a2 ≡ n2 (mod p) gelten. Dies ist für p = 2
in einem Fall gegeben und aufgrund der quadratischen Struktur der Kongruenz für
alle anderen Primzahlen der Faktorbasis in 2 Fällen:
für p = 2:a2
≡ 75972 (mod 2)
⇒a=1
(70)
für p = 3:a2
≡ 75972 (mod 3)
⇒ a = 1 oder a = 2
(71)
für p = 7:a2
≡ 75972 (mod 7)
⇒ a = 2 oder a = 5
(72)
für p = 17:a2 ≡ 75972 (mod 17) ⇒ a = 2 oder a = 15
(73)
Diese Werte werden benötigt, um initiale Werte f (ip ) zu finden, für die gilt p|f (ip ).
Sind die initialen Werte (bzw. der initiale Wert, falls p = 2 ist) gefunden, können
alle Vielfachen f (ip + k ∗ p) bestimmt werden, und für jedes f (ip + k ∗ p) ist sicher,
dass es durch p teilbar ist. Dann sind die f (ip + k ∗ p) durch p bzw. die größtmögliche
Potenz von p zu teilen. Ist dies mit allen p der Faktorbasis durchgeführt worden,
sind genau die f (s) B-glatt, die nach den Divisionen gleich 1 sind.
Die initialen Werte werden bestimmt, indem geprüft wird, ob (s + m)mod p den
zuvor bestimmten Wert a annimmt. Dies ist im Beispiel der Fall für p = 2 bei
f (−20), für p = 3 bei f (−20) und f (−19), für p = 7 bei f (−20) und f (−14) und
für p = 17 bei f (−12) und f (−9). Wird damit das Sieben gestartet, ergibt sich die
Tabelle 1.
Jedes X“ steht für einen durch Sieben gefundenen Faktor der Primzahlbasis.
”
Die in der Spalte f (s) berechneten Werte wurden, wenn bei einem Faktor ein X“
”
auftaucht, so oft durch den Faktor geteilt, wie es ohne Rest möglich ist. Wurde
dadurch der Wert −1 erreicht, wurde noch durch −1 dividiert, und die vollständige
Faktorisierung angegeben. Diese Werte sind B-glatt. In einem Intervall der Größe
C = 20 um m ([−C + m, . . . , m, . . . , C + m]) wurden so 6 B-glatte Werte gefunden.
Nach der Ermittlung der B-glatten Werte ist wie zuvor durch Lösung eines linearen Gleichungssystems modulo 2 der Kern der Matrix A∗T zu ermitteln, um die
Faktorisierung zu komplettieren.
Zusammenfassend lässt sich feststellen, dass das quadratische Sieb in 4 groben
Schritten abläuft. (Vgl. Abbildung 3.)
Zunächst sind initiale Informationen zu bestimmen. Die obere Grenze der Faktorbasis ist zu bestimmen, und damit die Faktorbasis selbst. Dazu werden Legendre14
Kapitel 3: Faktorisierungsalgorithmen
s+m
2
3
7
67
X
X
X
68
69
f(s)
Nach Division
-3108
-37
-2973
-991
-2836
-709
X
-2697
-899
X
-2556
-71
-2413
-2413
X
X
70
71
17
X
72
73
X
74
75
77
X
X
-2268
1
X
X
-2121
-101
-1972
-29
X
-1821
-607
X
-1668
-139
-1513
-89
-1356
-113
X
-1197
-19
X
-1036
-37
X
-873
-97
X
-708
-59
-541
-541
X
-372
-31
X
-201
-67
X
-28
1
−1 ∗ 22 ∗ 7
X
147
1
3 ∗ 72
324
1
22 ∗ 34
503
503
684
19
867
1
1052
263
1239
59
1428
1
1619
1619
1812
151
X
78
79
X
X
80
81
83
X
X
X
82
X
84
85
X
86
87
X
88
89
X
X
X
90
91
X
92
93
95
X
X
X
X
94
X
X
X
X
X
X
96
97
X
−1 ∗ 22 ∗ 34 ∗ 7
X
X
76
Zerlegung
X
3 ∗ 172
22 ∗ 3 ∗ 7 ∗ 17
Tabelle 1: Siebevorgang für die Faktorisierung von n = 7597 mit B = 17 und C = 20
mittels des quadratischen Siebs
15
Kapitel 3: Faktorisierungsalgorithmen
Initialisierung
·
·
Setzen der oberen Schranke B der Faktorbasis
Erstellung der Faktorbasis über Legendre-Symbole
Sieben
·
·
·
Bestimmung des Intervalls der f(s)
Ermittlung B-glatter f(s)
Falls nicht genug B-glatte f(s) gefunden werden à
Intervallerweiterung
Finden von Abhängigkeiten
·
·
Erstellung einer Matrix der Primfaktoren der f(s)
Ermittlung des Kerns der Matrix über das Gaußsche
Eliminationsverfahren
Ermittlung der Primfaktoren
·
·
Berechnung der Werte x und y
Berechnung der Faktoren
Abbildung 3: Ablauf des quadratischen Siebs
Symbole genutzt, so dass nur Primzahlen in die Faktorbasis eingehen, die auch
Faktoren der f (s) sein können.
Danach findet der Vorgang des Siebens statt. Hier wird ein Intervall ermittelt,
in dem nach B-glatten f (s) gesucht wird. Das Intervall sollte groß genug sein, dass
K + 2 B-glatte f (s) gefunden werden können, damit im nächsten Schritt das finden
der Abhängigkeiten möglich ist. Werden nicht ausreichen Werte gefunden, so ist das
Intervall zu erweitern.
Mit den gefundenen f (s) ist dann ein lineares Gleichungssystem aufzustellen,
so dass es möglich ist Werte für x und y zu finden, die die eingangs im Kapitel
beschriebene quadratische Kongruenz erfüllen. Bei großer Faktorbasis können diese
Gleichungssysteme sehr groß werden, sie lassen sich dennoch effizient lösen, da nur
binäre Informationen im Gleichungssystem enthalten sind. (Vgl. Matrix A∗T ) Sind
die Werte für x und y bestimmt, so lässt sich ein Faktor von n als gcd (x − y, n)
bestimmen.
Für das quadratische Sieb sind viele Verbesserungen entwickelt worden. Eine der
bekanntesten ist die large prime variation“. Diese versucht die Problematik der
”
Wahl des Parameters B zu vereinfachen. Bei der Standardvorgehensweise gibt es
zwei Probleme bei der Definition des Parameters B. Wird B zu klein gewählt, so
treten B-glatte Werte nur sehr selten, oder eventuell gar nicht auf. Wählt man B zu
groß, werden dafür mehr B-glatte Kongruenzen benötigt, und sowohl der Speicherals auch der Rechenaufwand steigt stark an. Hier soll die large prime variation
16
Kapitel 4: Zusammenfassung und Ausblick
Abhilfe schaffen. Wie in Tabelle 1 deutlich wird, bleiben nach der Division während
des Siebvorgangs für die nicht B-glatten Kongruenzen Reste über. Diese sind bei
einigen Kongruenzen gleich, jedoch nicht mehr in der Faktorbasis, wie im Beispiel:
19, 37, 59. Die large prime variation bezieht bestimmte dieser Faktoren mit in die
Faktorisierung ein.
4
Zusammenfassung und Ausblick
Das Kapitel 3 macht deutlich, dass es eine Vielzahl von verschiedenen Verfahren zur
Faktorisierung gibt. Viele der Verfahren haben für bestimmte Größenbereiche von
Faktoren Vorteile, oder eignen sich besonders gut, falls Faktoren mit bestimmten Eigenschaften gegeben sind. Die Vielzahl der unterschiedlichen Vorgehensweisen macht
auch deutlich, dass bisher noch kein allgemeingültig optimales Verfahren gefunden
wurde.
Das naheliegenste Verfahren, die Probedivision, wird auch heute noch eingesetzt, um kleine Zahlen zu Faktorisieren bzw. kleine Faktoren zu ermitteln (meist in
Bereichen bis zu 106 . Die Faktorisierungsmethode von Fermat wird eingesetzt um
Faktoren zu ermitteln, welche sich betragsmäßig kaum von der Wurzel der zu faktorisierenden Zahl unterscheiden. Für sehr große Zahlen mit 50 bis 100 Stellen sind
beide Verfahren jedoch meist sehr ineffizient. Für Zahlen mit bis zu ca. 100 Stellen
gilt immer noch das quadratische Sieb, als das schnellste bekannte Verfahren. Für
noch größere Zahlen hat sich mittlerweile das Number Field Sieve durchgesetzt, und
ist schneller als das quadratische Sieb. (Vgl. [Po96].)
Mit dem General Number Field Sieve wurde im Mai 2007 an der Universität
Bonn eine Zahl mit 307 Dezimalstellen und 1017 Bit faktorisiert. (Vgl. [Pr07].)
Kurz darauf wurde die eingangs beschriebene RSA Factoring Challenge beendet.
Preisgelder für Zahlen dieser Größenordnung waren zu dem Zeitpunkt noch zu gewinnen. Das Verfahren welches in Bonn angewandt wurde, eignet sich nicht für die
Faktorisierung aller möglichen Zahlen dieser Größenordnung, macht aber dennoch
deutlich, dass die Entwicklung sowohl der Algorithmen, als auch der Rechentechnik
so schnell voranschreitet, dass schon in wenigen Jahren Schlüssel mit heute üblichen
Schlüssellängen von 1024 Bit als unsicher gelten können.
17
Literaturverzeichnis
Literatur
[Bu03] Buchmann, J.: Einführung in die Kryptographie, 3. erweiterte Auflage, 2003.
[Le74] Lehman, R. S.: Factoring Large Integers, Mathematics of Computation, S.
637-646, 1974.
[Le00] Lenstra, A. L.: Integer Factoring, Designs, Codes and Cryptography, 19, S.
101-128, 2000.
[Ma94] Mahoney, M. S.: The Mathematical Careerof Pierre de Fermat, 2nd Ed.,
Princeton University Press, 1994.
[Ma05] Manin, Y. I., Panchishkin, A. A.: Introduction to Modern Number Theory,
Encyclopaedia of Mathematical Sciences, Volume 49, 2nd Ed., Springer, 2005.
[Na00] Nathanson, M. B.: Elementary Methods in Number Theory, Springer, 2000.
[Po74] Pollard, J.M.: Theorems on Factorization and Primality Testing, Proc.
Camb. Phil. Soc., Volume 76, S. 521-528, 1974.
[Po85] Pomerance, C.: The quadratic sieve factoring algorithm, In Advances in cryptology, Proc. Eurocrypt 84, Vol. 209 of Lecture Notes in Computer Science, S.
169-182, Springer, 1985.
[Po96] Pomerance, C.: A Tale of two Sieves, Notices of the AMS, S. 1473-1485,
Dezember 1996.
[Po01] Pomerance, C., Crandall, R.: Elliptic curve method, Prime Numbers: A Computational Perspective, 1st edition, Springer, S. 301-313, 2001.
[Ra79] Rabin, M. O.: Digitalized Signatures and Public Key Functions as Intractable as Factorization, Massachusetts Institute of Technology, Laboratory for
Computer Science, 1979.
[Pr07] Pressemitteilung Universität Bonn: Weltrekord: Mathematiker knacken
riesige Zahl, URL: http://www1.uni-bonn.de/pressDB/jsp/
pressemitteilungsdetails.jsp?detailjahr=2007&detail=160,
Abrufda-
tum: 13. Dezember 2007.
[Re07] Reiss, K., Schmieder, G.: Basiswissen Zahlentheorie, 2. Auflage, Springer,
2007.
18
Literaturverzeichnis
[Rs91] RSA
Security:
Webseite
der
RSA
Factoring
Challenge,
URL:
http://www.rsa.com/rsalabs/node.asp?id=2092, Abrufdatum: 13. Dezember 2007.
[Sc07] Schulze-Pillot, R.: Elementare Algebra und Zahlentheorie, Springer, 2007.
19
Herunterladen