Faktorisierung von Polynomen f ∈ Z[X] mit der Gittermethode (Lenstra-Lenstra-Lovasz) Factorize(f ) • input: quadratfreies Polynom f ∈ Z[X] • output: Liste der Faktoren von f – bestimme eine Primzahl p mit deg(f mod p) = deg f und p 6 | discrf – berechne Faktorisierung von f mod p in Zp [X]: Findfactor(f, h, p) • input: sei f ∈ Z[X] mit deg f = n, sei p Primzahl, sei h ∈ Z[X] ein normiertes Polynom mit deg h = l ≤ n, und es gelte: - (h mod p)|(f mod p), (h mod p) irreduzibel, (h mod p)2 6 |(f mod p) Koeffizienten von h sind reduziert mod p f = h(1) · h(2) · . . . · h(t) Liste 1 := {h(1) , h(2) , . . . , h(t) }; – f1 := 1; f2 := f ; Liste 2 := ∅; – solange f2 6= ±1 : wähle h ∈ Liste 1; h0 := Findfactor(f2 , h, p); Liste 2 := Liste 2 ∪ {h0 }; f1 := f1 · h0 ; f2 := f2 /h0 ; für h(i) ∈ Liste 1 : falls h(i) |h0 in Zp [X]: Liste 1 := Liste 1 \ (i) {h }; – Return(Liste 2) 1 • output: der eindeutig bestimmte irreduzible Faktor h0 |f in Z[X] mit (h mod p)|(h0 mod p) – falls l = n : Return(f ) – bestimme kleinstes k mit pkl > κ(f, n − 1) = 2n(n−1)/2 2(n−1) n/2 kf k2n−1 n−1 – bestimme mittels Hensel-Lifting h̃ ∈ Zpk [X] mit h̃|f in Zpk [X] und h̃ ≡ h mod p – u := max{v ; l ≤ (n − 1)/2v } – versuche, für m = b(n−1)/2u c, b(n−1)/2u−1 c, . . . , b(n− 1)/2c, n − 1 mittels Searchfactor(f, h̃, p, k, m) das gesuchte h0 zu bestimmen — liefert echten Faktor h0 oder, falls erfolglos, h0 = f ) 2 Searchfactor(f, h, p, k, m) • input: sei f ∈ Z[X] mit deg f = n, sei p Primzahl, k, m ∈ N+ , sei h ∈ Z[X] ein normiertes Polynom mit deg h = l ≤ m, und es gelte: (h mod pk )|(f mod pk ), (h mod p) irreduzibel, (h mod p)2 6 |(f mod p) Koeffizienten von h sind reduziert mod pk (also khk2 ≤ 1 + l · p2k ) n/2 - pkl > κ(f, m) := 2mn/2 2m · kf km+n m - Zur Begründung des Faktorisierungssalgorithmus mittels der Gittermethode – Notation: generell ist nachfolgend f ∈ Z[X] mit deg f = n, h ∈ Z[X] normiertes Polynom mit deg h = l(≤ n) p eine Primzahl, k, m ∈ Z+ mit m ≥ l h|f in Zpk [X] h irreduzibel in Zp [X] h2 6 |f in Zp [X] – Gitterdefinition: in Rm+1 ' R + R · X + . . . + R · X m wird ein Gitter definiert Lh,m := {g ∈ Z[X] ; deg g ≤ m , h|g in Zpk [X]} • output: sei h0 ∈ Z[X] der bis auf Vorzeichen eindeutig bestimmte Faktor von f in Z[X] mit (h mod p)|(h0 mod p) Es wird entschieden, ob deg h0 ≤ m gilt oder nicht; wenn“ja”, wird h0 berechnet Dieses Gitter hat als Basis – konstruiere Gitter L ⊆ Rm+1 mit der Basis und es ist {pk X i ; 0 ≤ i < l} ∪ {hX j ; 0 ≤ j ≤ m − l} {pk X i ; 0 ≤ i < l} ∪ {h · X j ; 0 ≤ j ≤ m − l} det Lh,m = pkl – berechne mittels Reduce eine reduzierte Gitterbasis hb1 , . . . , bm+1 i von L – falls kb1 k < (pkl /kf km )1/n : berechne t := max{j ≤ m+1 ; kbj k < (pkl /kf km )1/n } Return(gcd(b1 , . . . , bt )) ansonsten Fehlanzeige 3 4 – Lemma 1: Es gibt einen irreduziblen Faktor h0 ∈ Z[X] von f mit h|h0 in Zp [X]. h0 ist bis auf Vorzeichen eindeutig bestimmt. – Lemma 2: Mit h0 wie in L1 sind für g ∈ Z[X] mit g|f in Z[X] äquivalent 1. h|g in Zp [X] 2. h|g in Zpk [X] 3. h0 |g in Z[X] – Erinnerung: gilt g|f in Z[X] und deg g ≤ m, so gilt 1/2 2m kf k kgk ≤ m – Lemma 4: Ist hb1 , . . . , bm+1 i eine LLL-reduzierte Basis für Lh,m und gilt 1/2 2m kf k · 2m/2 · <η m so gilt deg h0 ≤ m ⇐⇒ kb1 k < η – Bem: insbesondere h|h0 in Zpk [X], also h0 ∈ Lh,m falls deg h0 ≤ m. – Lemma 5: Unter den Voraussetzungen von L4 sei – Lemma 3: Ist b ∈ Lh,m mit kl 1/n p kbk < =: η ( = η(f, p, k, l, m) ) kf km t := max{j ≤ m + 1 ; kbj k < η} Dann gilt deg h0 = m + 1 − t und h0 = gcd(b1 , . . . , bt ) so gilt h0 |b in Z[X], also insbesondere gcd(f, b) 6= 1. 5 6 Zur Komplexität der LLL-Faktorisierungsmethode • Komplexität der Gitterreduktion Reduce(bi , . . . , bn ), wobei kbi k2 ≤ B (1 ≤ i ≤ n): – Anzahl der arithmetischen Operationen: O(n4 · log B) – Grösse der beteiligten Zahlen: O(n · log B) • Komplexität von Searchfactor(f, h, p, k, m) – Anzahl der arithmetischen Operationen: O(m4 · k · log p) – Grösse der beteiligten Zahlen: O(m · k · log p) Kommentar: wesentlich ist der Aufwand für die Gitterreduktion, bei der B = 1 + l · p2k (wegen khk2 ≤ 1 + l · p2k ) und n = m + 1 angesetzt werden muss. Die Ungleichung pkl > κ(f, m) führt auf m = O(k · log p) und wegen log l < l ≤ m ist dann auch log B ∈ O(k · log p). Die Koeffizienten der Gittervektoren bj , die zur Berechnung von p h0 mittels ggT herangezogen werden, sind durch n pkl /kf km beschränkt, wodurch man mittels bekannter Abschätzungen für den Aufwand von ggTBerechnungen auf O(m3 ) arithmetische Operationen von Zahlen der Grösse O(log B) kommt. 7 • Komplexität von Findfactor(f, h, p) (dabei sei n = deg f und m0 = deg h0 ) – Anzahl der arithmetischen Operationen: O(m0 · (n5 + n4 · log kf k + n3 · log p)) – Grösse der beteiligten Zahlen: O(n3 · n2 · log kf k + n · log p) Kommentar: aus der Bestimmung pk−1 < κ(f, n − 1) folgt k · log p ∈ O(n2 + n · log kf k + log p). Searchfactor wird aufgerufen für m = b(n−1)/2u c, b(n−1)/2u−1 c, . . . , b(n−1)/2u1 c =: m1 wobei m1 < 2m0 ist. Wegen m 4 m 4 1 1 m41 + + + . . . = O(m40 ) 2 4 hat man insgesamt in den Aufrufen von Searchfactor O(m40 · k · log p) ∈ O(m40 · (n2 + n · log kf k + · log p) arithmetische Operationen von Zahlen der Grösse O(m1 · k · log p) ∈ O(m0 · (n2 + n · log kf k + · log p) und es ist m0 ≤ n. Wenn man so abschätzt, fallen Kosten für Hensel-Lifting nicht ins Gewicht. 8 • Komplexität von Factorize(f ) (dabei sei f ∈ Z[X], quadratfrei, primitiv, mit deg f = n) – Anzahl der arithmetischen Operationen: O(n6 + n5 · log kf k) • Zusammenfassung: mit den ”klassischen” Algorithmen für Addition, Subtraktion, Multiplikation, ... ergibt sich für die LLL-Methode ein Aufwand von O(n12 + n9 · (log kf k)3 ) gemessen in Bit-Operationen. – Grösse der beteiligten Zahlen: O(n3 + n2 log kf k) Kommentar: zunächst muss man sich um die Grösse der Primzahl p Gedanken machen. Sei p die kleinste Primzahl mit p 6 |res(f, f 0 ), so kann man aus |res(f, f 0 )| ≤ nn · kf k2n−1 ein Abschätzung n · log n + (2n − 1) log(kf k) A mit A = 0.84 gewinnen. D.h., (log p)-Terme fallen weiter nicht ins Gewicht und können unterdrückt werden. Ein Aufruf von Findfactor(f2 , h, p) kostet O(m0 · (n5 + n4 · log kf k)) arithmetische Operationen. Aus Landau-Mignotte folgt leicht log kf2 k ∈ O(n+log kf k). Die m0 als Grade der verschiedenen irreduziblen Faktoren von f summieren sich zu n, sodass man die arithmetischen Operationen mit O(n6 + n5 · log kf k) abschätzen kann. Die beteiligten Zahlen haben eine Grösse p< O(n3 + n2 · log kf2 k) ∈ O(n3 + n2 · log kf k) Der Aufwand für Resultantenberechnung, Finden einer geeigneten Primzahl, Berlekamp-Faktorisierung geht in dieser Abschätzung auf. 9 10