2.4.2 (p-1)-Faktorisierung von Pollard


Der (p-1)-Faktorisierungsalgorithmus wurde entworfen um effizient Primfaktoren p einer nichtprimen Zahl n, für welche p-1 in Bezug zu einer relativ kleinen Schranke B glatt ist, zu finden. Dazu folgende

Definition:
Sei 0 > B ∈ Z. Ein n ∈ Z heißt B-glatt oder glatt bezüglich B, falls alle Primfaktoren ≤ B sind.

Die Idee zum (p-1)-Algorithmus ist folgende:
Sei B eine Glattheitsschranke. Sei Q das kleinste gemeinsame Vielfache aller Potenzen von Primzahlen ≤ B, welche ≤ n sind. Falls gl ≤ n, so ist l⋅ln q ≤ ln n und damit l ≤ ⌊ ln n / ln q ⌋. Daher ist Q = ∏q ≤ b q⌊ ln n / ln q ⌋ wobei das Produkt über alle verschiedenen q ≤ B läuft. Falls p ein Primfaktor von n ist, so dass p-1 B-glatt ist, dann gilt p-1|Q und folglich für jedes a, für das gilt ggT(a, p) = 1, impliziert der kleine Fermatsche Satz aQ ≡ 1 (mod p). Also gilt: falls d = ggT(aQ - 1, n ), dann gilt p|d.

Es ist möglich, dass d = n ist. In diesem Fall scheitert der Algorithmus. Jedoch ist das unwahrscheinlich falls n mindestens zwei große unterschiedliche Primfaktoren hat.

Beispiel

Sei n = 27869. Man wähle nun eine Glattheitsschranke B, etwa B = 8 und wähle eine weitere Zahl a0, wobei 2 ≤ a0 ≤ n-1, in diesem Fall etwa a = 3.
Als ersten Schritt berechne man den ggT(a0 , n) = ggT(3, 27869) = 1. (Hätten wir hier ein d ≠ 1 so hätten wir bereits unseren nicht-trivialen Faktor).
Nun berechnet man für jeden Primfaktor qi ≤ B:
1. li = ⌊ ln n / ln qi
2. ai+1 = aiqli mod n
Also ist:
a0 = 3,
q1 = 2, l1 = ⌊ ln n / ln q1 ⌋ = ⌊ 10,23527 / 0.69315 ⌋ = 14, a1 = 14465
q2 = 3, l2 = 9, a2 = 17337
q3 = 5, l3 = 6, a3 = 18787
q4 = 7, l4 = 5, a4 = 3597
ggT(a4 - 1, n) = ggT(3596, 27869) = 899.

Im Beispielprogramm wurde der Algorithmus so implementiert, dass nach jedem Schritt der Berechnung von a, der kleinste gemeinsame Teiler berechnet wird. Es gibt aber noch zahlreiche andere praktische Verbesserungen dieser Methode. Der Algorithmus ist in erster Linie für Zahlen gedacht, die aus einem Produkt von genau zwei großen Primzahlen bestehen. Bei solchen Zahlen ist ein Scheitern des Algorithmuses sehr unwahrscheinlich.

Applet (p-1)-Algorithmus:

Quellcode:
PmeAlgSF.java - Appletoberfläche
PmeAlg.java - Algorithmenklasse

2.4.3 RSA-Faktorisierung