2.4.3 RSA-Faktorisierung bei bekanntem Secret-Key
Die Faktorisierung einer Zahl n = p ⋅ q, wobei p,q prim ist äußerst schwierig. Handelt es sich dabei um das RSA-Problem könnte man bei bekanntem a dieses Problem deutlich vereinfachen.
kurze Benennung der relevanten Zahlen des RSA-Verfahrens:
n = p ⋅ q
Φ(n) = (p-1) ⋅ (q-1)
a ⋅ b ≡ 1 (mod Φ(n))
Öffentlich sind nun n und b, während p, q und a geheim sind.
Bei folgendem Algorithmus geht man davon aus, dass der geheime Schlüssel a
gegeben sei, oder durch einen anderen Algorithmus vorher ermittelt wurde:
Man wähle ein w mit 1 ≤ w ≤ n-1, beliebig. Hat man Glück und wählt ein w
mit ggT(w, n) > 1, so hat man bereits einen Faktor von n. Falls nicht, so
kann man falls w bezüglich n prim ist, w solange quadrieren bis wr
, w2r , w4r,..., w2t r ≡ 1
(mod n) für ein t ist. Da a⋅b - 1 = 2s ⋅ r ≡ 0
(mod Φ(n)) wissen wir, dass w2s r ≡ 1 (mod n)
ist. Dadurch finden wir einen Wert v0 mit v02
≡ 1 (mod n) aber v0 ≠ 1 (mod n). Falls v0
≡ -1 (mod n) so scheitert der Algorithmus. Sonst ist v0 eine
nicht-triviale Wurzel von 1 modulo n und wir können n Faktorisieren.
Beispiel
Sei n = 29329 und b = 1859. Man wisse, dass a = 15059 ist. Nun wähle man
ein w, etwa w = 21.
1. Man berechne ggT(w, n) = ggT(21, 29329) = 1
2. Es ist a⋅b - 1 = 2s ⋅ r = 8 ⋅ 3499335
3. v = wr mod n = 2134499335 mod 29329 = 5698
4. v2 = 1 mod n
5. p = ggT(v + 1, n) = 139 und damit q = 29329 / 139 = 211
Applet RSA-Faktorisierung
Quellcode:
RSAFacSF.java - Appletoberfläche
RSAFac.java - Algorithmenklasse
2.4.4 Quadratisches Sieb |