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