2.4.4 Quadratische Siebfaktorisierung


Folgende Idee steckt hinter der quadratischen Faktoriasierung:
Seien x, y ∈ Z, mit x2 ≡ y2 (mod n), aber x ≠ y (mod n). Dann teilt n: x2 - y2 = (x - y) ⋅(x + y) aber n teilt weder (x - y) noch (x + y). Daher muss ggT(x - y, n) ein nicht- trivialer Faktor von n sein. Eine gewöhnliche Strategie, um x und y zu finden ist Folgende:
Sei S = {p1, p2, ..., pt } die Menge der ersten t Primzahlen (= Faktor- Basis). Finde Paare (ai , bi ) mit:
(i) ai2 ≡ bi (mod n) und
(ii) bi = ∏tj=1 pje ij , eij ≥ 0, d.h. bi ist pt - glatt.

Als nächstes finde eine Untermenge, so dass bi eine perfekte Quadratzahl ist. D.h. die Hochzahlen der pj müssen alle gerade sein. Zur Vereinfachung identifiziere den binären Vektor vi = (v i1 , vi2 , ..., vit ) mit dem Exponenten- Vektor (ei1 , ei2 , ..., eit ), so dass v ij = eij mod 2 ist. Falls t + 1 Paare (ai ,bi ) auftauchen, sind die t- dimensionalen Vektoren v1 ,v 2 , ..., vt+1 linear abhängig über Z2. ⇒ ∃ eine Untermenge T ⊆ {1, 2, ..., t + 1} mit ∑ i ∈ T vi = 0 über Z2. Damit ist ∏ i ∈ T bi eine Quadratzahl. Klar ist, dass ∏ i ∈ T ai2 ebenfalls eine Quadratzahl ist. Damit kann man x = ∏ i ∈ T ai setzen und y als Quadratwurzel von ∏ i ∈ T bi. Dies liefert uns ein Paar (x, y) mit x2 ≡ y2 (mod n). Falls für dieses Paar auch gilt x ≠ y (mod n), so liefert uns ggT(x - y, n) einen nicht- trivialen Faktor von n. Sonst kann man einige der Paare (ai , bi ) durch neue Paare ersetzen.

Definition: (Legendre- Symbol)
Das Legendre- Symbol (a/b) für a, b ∈ Z ist wie folgt definiert:
(a/b) = 0, falls p | a,
(a/b) = 1, falls a quadratischer Rest modulo p
(a/p) = -1, falls a Rest modulo p aber nicht quadratischer Rest.

Die Quadratische Siebfaktorisierung verwendet nun eine effiziente Methode um solche Paare (ai , bi ) zu finden:
Sei dazu m = ⌊ √n ⌋ , und betrachte q(x) = x2 + 2mx + m2 - n ≈ x2 + 2mx welches klein (bezüglich n) ist, falls x klein ist. Der Siebalgorithmus wählt ai = (x + m) und testet ob bi = (x + m)2 - n pt - glatt ist . Merke: ai2 = (x + m)2 ≡ bi (mod n). Außerdem sei noch gesagt, dass falls eine Primzahl p bi teilt, dann ist (x + m)2 ≡ n (mod p) und damit ist n ein quadratrischer Rest modulo p. Folglich muss die Faktor- Basis nur solche Primzahlen p beinhalten, für welche das Legendre- Symbol (n/p) = 1 ist. Ferner sollte, wegen negativen bi's, "-1" in der Faktor- Basis beinhaltet sein.

Beispiel:
1. Man wähle als Mächtigkeit der Faktor- Basis t = 6 um nicht- triviale Faktoren von n = 24961 zu finden.
Damit ist S = {-1, 2, 3, 5, 13, 23} (Für 7, 11, 17, 19 ist (n/p) = -1)
2. Man berechne m = ⌊ √24961 ⌊ = 157.
3. Nun berechne man 7 ai's und bi's mit verschiedenen x in q(x) = (x + m)2 - n, so dass q(x) 23- glatt ist.
Das führt zu folgenden Werten:
x1 = 0, q(x1 )= -312 = -23⋅3⋅13, a1 = 157, v1 = (1, 1, 1, 0, 1, 0)
x2 = 1, q(x2 )= 3, a2 = 158, v2 = (0, 0, 1, 0, 0, 0)
x3 = -1, q(x3 )= -625 = -54, a3 = 156, v3 = (1, 0, 0, 0, 0, 0)
x4 = 2, q(x4 )= 320 = 26⋅5, a4 = 159, v4 = (0, 0, 0, 1, 0, 0)
x5 = -2, q(x5 )= -936 = -23⋅32 ⋅13, a5 = 155, v1 = (1, 1, 0, 0, 1, 0)
x6 = 4, q(x6 )= 960 = 26⋅3⋅5, a6 = 161, v6 = (0, 0, 1, 1, 0, 0)
x7 = -6, q(x7 )= -2160 = -24⋅33 ⋅5, a7 = 151, v7 = (1, 0, 1, 1, 0, 0)
4. Für T = {1, 2, 5} ist z.B. v1 + v2 + v5 = 0
5. x = (a1 ⋅a2 ⋅a5 mod n) = 936
6. l1 = 1, l2 = 3, l3 = 2, l4 = 0, l5 = 1, l6 = 0
7. y = -23 ⋅ 32 ⋅ 13 mod n = 24025 8. Da 936 ≡ -24025 (mod n), muss ein anderes T gefunden werden 9 Für T = {3, 6, 7} ist jetzt v3 + v6 + v7 = 0
10. x = (a3 ⋅a6 ⋅a7 mod n) = 23045
11. l1 = 1, l2 = 5, l3 = 2, l4 = 3 , l5 = 0, l6 = 0
12. y = -25 ⋅ 32 ⋅ 53 mod n = 13922 13. Nun ist 23405 ≠ 13922 (mod n), damit ist ggT(x - y, n) = ggT(9483, 24961) = 109.
Damit sind zwei nicht triviale Faktoren von 24961 109 und 229.

Applet quadratische Siebfaktorisierung

Quellcode:
QuadAlgSF.java - Appletoberfläche
QuadAlg.java - Algorithmenklasse
Matrix.java - Matrixklasse

2.5 Shanks Algorithmus