Faktorisierung

Werbung
Die Umkehrung der Multiplikation: Faktorisierung
Euklid: Es gibt unendlich viele Primzahlen
Gauss: Jede natürliche Zahl ist in eindeutiger Weise ein
Produkt von Primzahlen
Aber:
• Wie kann man von einer natürlichen Zahl entscheiden, ob sie eine Primzahl
ist oder nicht?
• Wie kann man die Primfaktorisierung einer natürlichen Zahl berechnen?
Dass das Problem, die Primzahlen von den zusammengesetzten zu unterscheiden
und letztere in ihre Primfaktoren zu zerlegen zu den wichtigsten und nützlichsten
der ganzen Arithmetik gehört und den Fleiss und die Weisheit der Geometer der
Antike und der Neuzeit beschäftigt hat, ist so bekannt, dass es überflüssig ist, viel
darüber zu sagen.
Carl Friedrich Gauss
Disquisitiones Arithmeticae (1801)
Art. 329
Diese Fragen haben mehr als nur “akademische” Bedeutung!
• Kryptosysteme (wie z.B. RSA) benötigen sehr grosse Primzahlen
• Die Sicherheit von solchen Systemen beruht auf der (bis heute
unbewiesenen!) Annahme, dass das Faktorisieren von natürlichen Zahlen ein
algorithmisch schwieriges Problem ist
2
1
Einige Informationen:
• Kriterium
n ∈ Prim ⇔
∀d <
√
n : d ∈ Prim → d 6 |n
• Unter der Annahme, dass man pro Sekunde 106 Divisionen ausführen kann,
benötigt ein Primzahltest per Probedivision für eine Zahl mit k
Dezimalstellen etwa
• Wieviele Primzahlen gibt es bis zu einer gegebene Grösse?
]{p ∈ Prim; p ≤ n} ∼
n
log n
• Konsequenz:
10k/2
Probedivisionen
das Testen einer Zahl n ∼ 10 erfordert etwa
(k/2) log 10
k
3
(k/2) log 10 ×
10k/2
10k/2
=
× 2.75 × 10−14 Jahre
× 60 × 60 × 24 × 356
k
106
Einige Zahlenbeispiele
k=30
⇒
11 Monate
k=50
⇒
5.5 × 109 Jahre
k=100
⇒
2.75 × 1034 Jahre
4
• Es gibt bessere Primzahltests:
– der beste deterministische Primzahltest (Adleman et al.) hat eine
Komplexität von
O (log n)c·log n·log log n
– ein deterministischer Test von Miller hat ein Laufzeitverhalten von
O (log n)5
Zahlenbeispiele zum Miller-Rabin-Test:
für k-stellige Dezimalzahlen mit Fehlerwahrscheinlichkeit = 10−100 bei 106
Operationen pro Sekunde
– sog. probabilistische Primzahltests (Miller-Rabin,
Solovay-Strassen) sind sehr effizient
1
O log · (log n)3
k=30
⇒
1 sec
k=50
⇒
12.5 sec
k=100
⇒
100 sec
wobei man eine Fehlerwahrscheinlichkeit in Kauf nehmen muss
6
5
• Faktorisieren ist mutmasslich ein sehr viel härteres Problem als “nur” auf
Primheit testen
Wichtige Neuigkeit im August 2002:
die drei indischen Mathematiker M. Agrawal, N. Kayal und N. Saxena,
haben ein Verfahren gefunden, um das Entscheidungsproblem der
Erkennung von Primzahlen effizient (d.h. mit einem Aufwand, der
polynomial in log N wächst, wenn N die zu untersuchende Zahl ist) zu
lösen.
• die besten bekannten Faktorisierungsalgorithmen (“Quadratisches Sieb”)
haben ein Laufzeitverhalten von
√
O e 2 log n log log n
Tabelle
Internet-Seiten zu diesem Thema:
http://www.cse.iitk.ac.in/news/primality.pdf
http://www.cse.iitk.ac.in/users/manindra/primality.ps
http://mathworld.wolfram.com/news/
http://www.utm.edu/research/primes/references/refs.cgi/AKS2002
http://www.utm.edu/research/primes/prove/prove4 3.html
7
105
1010
1020
1030
1050
10100
10200
10500
1809 16581 1.4 · 108 3.2 · 1010 2.3 · 1014 5.4 · 1021 4.4 · 1032 2.1 · 1055
8
101000
1082
• Die Sicherheit des RSA-Schemas beruht auf der Schwierigkeit des
Faktorisierens
– Die Erfinder von RSA (Rivest, Shamir, Adleman) propagierten 1977
die Herausforderung, eine gewisse 129-stellige Dezimalzahl RSA-129 zu
faktorisieren. Mit der Technologie und dem Wissen von 1977 schätzen sie
den Aufwand auf ca. 40 Quadrillionen Jahre.
– RSA-129 wurde 1994 faktorisiert: acht Monate Rechenzeit auf einigen
hundert workstations (und neue Methoden!)
– Trotzdem:
der relative Aufwand für das Brechen des RSA-Codes wächst schnell an
(129 Dezimalstellen = 429 bit)
429
1
512
1024
2048
7.67 105473 2.97 · 1010
4096
8192
16384
4.28 · 1017
1.03 · 1027
1.91 · 1039
Eine weitere Funktion mit wichtigen Anwendungen: Exponentiation
(a, e) 7→ ae
(a ∈ Zn , e ∈ N)
und ihre Umkehrung: diskreter Logarithmus
(a, ae ) 7→ e
(a ∈ Zn , e ∈ N)
Exponentiation ist effizient berechenbar — diskreter Logarithmus (nach heutigem
Kenntnisstand) nicht!
Viele kryptographische Verfahren beruhen auf dieser vermuteten (aber nicht
bewiesenen) Diskrepanz
9
10
Berechnung versus Verifikation
Die Komplexitätsklassen P und NP
• Die Klasse P umfasst alle Probleme, die effizient entscheidbar sind.
67
2
− 1 ∈ Prim ?
128
2
+ 1 ∈ Prim ?
2
858433
− 1 ∈ Prim ?
• Wie kann man jemanden effizient davon überzeugen, dass eine vorgelegte
(sehr grosse) Zahl N keine Primzahl ist? Man nimmt zwei geeignete Zahlen
P, Q, multipliziert sie und überprüft:
?
N =P ×Q
Teiler einer Zahl sind “Zeugen” dafür, dass die Zahl nicht Primzahl ist.
Es wird nicht verlangt, dass Zeugen leicht zu finden sind!
• Wie kann man jemanden effizient davon überzeugen, dass eine vorgelegte
(sehr grosse) Zahl N eine Primzahl ist? Gibt es “Zeugen” dafür, dass eine
Zahl keine echten Teiler besitzt?
Ja! Aber das ist keineswegs offensichtlich (Pratt, 1975).
11
Beispiele
– Hat ein Graph einen Eulerschen Kreis?
– Sind zwei natürliche Zahlen teilerfremd?
– Ist eine aussagenlogische Formel in DNF erfüllbar?
• Die Klasse NP umfasst alle Probleme, die effizient verifizierbar sind.
Beispiele
– Hat ein Graph einen Hamiltonschen Kreis?
– Ist eine natürliche Zahl eine Primzahl?
– Ist eine aussagenlogische Formel in KNF erfüllbar?
?
• Es gilt P ⊆ NP, aber die Frage P = NP,
(“lassen sich effizient verifizierbare Problem auch effizient entscheiden ?”)
ist bislang ungeklärt — dies ist das (oder eines der) fundamentale(n)
ungelöste(n) Probleme der Informatik.
12
Herunterladen