Primzahltest nach Solovay-Strassen von Andreas Wortmann 1 Motivation Primzahltests wie der Solovay-Strassen-Algorithmus (SSA) werden heute vor allem im Rahmen der Kryptographie eingesetzt. Hierbei wird eine günstige große Zahl geraten und dann auf Primalität überprüft. Da bis 2002 jedoch kein Algorithmus bekannt war welcher in der Lage ist die Primalität einer Zahl deterministisch mit polynominellem Zeitaufwand zu bestimmen, erfreuen sich probabilistische (ratende) Algorithmen wie der Solovay-Strassen Algorithmus aufgrund ihres Geschwindigkeitsvorteils großer Beliebtheit. 1.1 Was ist ein Primzahltest? Ein Primzahltest ist ein Entscheidungsverfahren, welches zu einer gegebenen Binärzahl ermittelt, ob diese prim oder zusammengesetzt ist. Obwohl das Format der Eingabe als Binärzahl zur Bestimmung der Zeitkomplexität wichtig ist, lässt es sich vernachlässigen, da die Transformation zu einer anderen Basis effizient berechenbar ist. 1.2 Probabilistische und Monte-Carlo-Algorithmen Wir bezeichnen einen Algorithmus als probabilistisch, wenn wir diesem es erlauben, in einem gewissen Rahmen und in Abhängigkeit von einer Zufallszahl falsche Ergebnisse zu liefern. Erlauben wir nur für eine der beiden möglichen Ausgaben falsche Ergebnisse, so lassen wir einen einseitigen Fehler“ zu und bezeichnen diesen Al” gorithmus als Monte-Carlo-Algorithmus mit einseitigem Fehler. 2 Fortgeschrittene Primzahltests 2.1 Kongruenz modulo n Zwei ganze Zahlen a, b heißen kongruent modulo einer natürlichen Zahl n > 0 ⇔ a mod n = b mod n. In Zeichen a ≡ b (mod n) bzw. a ≡m b. Hierbei gelten verschiedene Rechenregeln wie Reflexivität, Symmetrie oder Transitivität natürlich weiterhin. 2.2 Kleiner Fermatscher Satz Sei a eine ganze Zahl und n eine Primzahl, dann gilt: an−1 ≡ 1 (mod n) 2.3 Satz von Euler-Fermat Sei n eine natürliche ungerade Zahl, dann gilt: n prim ⇒ a n−1 2 mod n ∈ {−1, 1} ∀a ∈ {1, . . . , n − 1} n−1 Wir bezeichnen eine Zahl a nun als Zeugen für die Zusammengesetztheit von n, falls a 2 mod n 6∈ {−1, 1}. n−1 Gilt für eine Zahl n, dass a 2 mod n ∈ {−1, 1} für ein a, so kann man mit einer gewissen Wahrscheinlichkeit davon ausgehen, dass n prim ist. Um diese Wahrscheinlichkeit zu bestimmen hilft uns folgender Satz: n prim n komposit ⇒ a ⇒ a n−1 2 n−1 2 mod n ∈ {−1, 1} ∀a ∈ {1, . . . , n − 1} (1) mod n 6∈ {−1, 1} für mindestens die Hälfte der a aus {1, . . . , n − 1} (2) D.h. falls wir eine Zahl n mit diesen Gleichungen für ein a prüfen und ein Ergebnis 6∈ {−1, 1} erhalten, wissen wir mit Sicherheit, dass n zusammengesetzt ist und nennen a einen Zeugen. Sonst ist n mit einer Wahrscheinlichkeit ≥ 21 vielleicht prim. 1 2.4 Anwendung des Satzes von Euler-Fermat Für jedes ungerade n ≥ 2 mit n−1 2 ebenfalls ungerade gilt: n−1 2 mod n ∈ {−1, 1} ∀a ∈ {1, ..., n − 1} (a) Ist n prim ⇒ a n−1 (b) Ist n zusammengesetzt ⇒ a 2 mod n 6∈ {−1, 1} für mindestens die Hälfte der a aus {1, 2, ..., n − 1} Wir müssen uns hier auf n ≥ 2 mit n−1 ungerade beschränken, da sonst (b) nicht gewährleistet ist. Das 2 heißt also, dass wir mindestens genau so viele richtige wie falsche Zeugen für die Zusammengesetztheit der Eingabe n in {1, 2, ..., n − 1} haben. Also erkennen wir Primzahlen immer und zusammengesetzte Zahlen mit eine Wahrscheinlichkeit von p ≥ korrekt als solche. 1 2 2.5 Vereinfachter Solovay-Strassen-Algorithmus Wir können nun aufgrund des Mangels an Zeugen für die Zusammengesetztheit einer Zahl n mit ungeradem n−1 2 diese mit einer gewissen Wahrscheinlichkeit korrekt als prim oder zusammengesetzt identifizieren: Algorithmus Vereinfachter Solovay-Strassen Algorithmus Eingabe: n ≥ 2 eine ungerade, natürliche Zahl mit n−1 2 ungerade Schritt 1: Wähle zufällig ein a ∈ {1, 2, ..., n − 1} n−1 Schritt 2: Berechne A = a 2 mod n Schritt 3: Ist A ∈ {−1, 1}, gib prim“ zurück, sonst zusammengesetzt“ ” ” Nach obigem Satz gilt, dass der Vereinfachte Solovay-Strassen-Algorithmus (SSSA von Simplified Solovay” Strassen Algorithm“) eine Primzahl immer als solche erkennt und die Wahrscheinlichkeit, dass der SSSA zusammengesetze Zahlen nicht korrekt erkennt ist ≤ 12 . Eine k-fache Wiederholung des SSSA führt zu k voneinander unabhängigen Ergebnissen und der Abschätzung 1−2−k als Wahrscheinlichkeit für ein korrektes Ergebnis. Die einzelnen Berechnungen können durch wiederholtes Quadrieren effizient berechnet werden, d.h., dass der SSSA ein polynomialzeit-beschränkter Monte-Carlo-Algorithmus ist, welcher in der Lage ist ungerade, zusam−k mengesetzte Zahlen mit ungeradem n−1 als prim zu erkennen. 2 mit einer Fehlerwahrscheinlichkeit von 1 − 2 2.6 Pseudoprimzahlen Pseudoprimzahlen sind natürliche, zusammengesetzte Zahlen, die bestimmte Eigenschaften von Primzahlen imitieren. Am bedeutendsten sind die Fermatschen Pseudoprimzahlen (zur Basis a) welche für ein bestimmtes a den Kleinen Fermatschen Satz erfüllen (z.B. 21, denn 1321−1 ≡ 1 mod 21) und die Carmichael-Zahlen (z.B. 561 = 3 · 11 · 17) mit an−1 ≡ 1 (mod n) ∀a ∈ {1, ..., n − 1} mit ggT(a,n)=1 Dadurch, dass unendlich viele Carmichael-Zahlen existieren, funktioniert der Kleine Fermatsche Satz für unendlich viele Zahlen nicht. Obwohl das Primalitätskriterium des SSSA viel filigraner definiert ist, scheitert der Versuch den SSSA auf Eingaben mit geradem n−1 2 zu verallgemeinern ebenfalls an den Carmichael-Zahlen. 3 Weitere mathematische Grundlagen Quadratischer Rest Für y, z ∈ Z, z ≥ 2 und y und z teilerfremd heißt y quadratischer Rest modulo z, wenn ein x existiert, mit y ≡ x2 (mod z). Existiert kein x mit y ≡ x2 (mod z), so ist y ein quadratischer Nicht-Rest modulo z und ist ggT(y,z)6=1 so ist y weder quadratischer Rest noch quadratischer Nicht-Rest modulo z. 2 3.1 Legendre-Symbol Für eine natürliche Zahl a und p eine Primzahl ist das Legendre-Symbol wie folgt definiert: wenn a ein quadratischer Rest zu p ist 1 a = −1 wenn a ein quadratischer Nicht-Rest zu p ist p 0 wenn a ein Vielfaches von p ist 3.2 Eulersches Kriterium Euler zeigte, dass für alle a ∈ {1, . . . , p − 1} mit p prim: wenn a ein quadratischer Rest zu p ist 1 p−1 2 mod p = −1 wenn a ein quadratischer Nicht-Rest zu p ist a 0 wenn a ein Vielfaches von p ist Da es sich hierbei genau um die gewünschten Funktionswerte des Legendre-Symbols handelt, können wir dieses nun durch wiederholtes Quadrieren effizient berechnen: Satz 4.3.1 Eulersches Kriterium p−1 a = a 2 mod p p D.h. um zu prüfen ob eine Eingabe p prim ist, berechnen wir für alle 0 ≤ a < p a Ergebnis jeweils in {−1, 1} ist. p−1 2 mod p und prüfen ob das 3.3 Jacobi-Symbol Da das Legendre-Symbol für p nur Primzahlen zulässt, wurde es zum Jacobi-Symbol erweitert. Hierbei werden auch zusammengesetzte Zahlen zugelassen. Für eine natürliche Zahl a und eine ungerade, natürliche Zahl n ist das Jacobi-Symbol na wie folgt definiert: a) Ist n eine Primzahl, verhält sich das Jacobi-Symbol genau wie das Legendre-Symbol. b) Ist n hingegen keine Primzahl, so existiert eine Primfaktorzerlegung n = pq11 · . . . · pqnn und man definiert: qn a a q1 a = · ... · n p1 pn Da jedoch i.A. die Primfaktorzerlegung von n nicht zur Verfügung steht, müssen wir auf rekursive Rechenregeln zuückgreifen um na (in polynomiellem Zeitaufwand) zu berechnen. 3.4 Angewandtes Eulersches Kriterium Für alle ungeraden n gilt: a n ≡a n−1 2 mod n, ∀a ∈ {1, ..., n − 1}, n−1 2. Falls n zusammengesetzt ist, so ist na 6≡ a 2 mod n, für mindestens die Hälfte der a mit ggT(a,n) = 1. 1. Falls n prim ist, so ist 4 Primzahltest nach Solovay-Strassen Der Solovay-Strassen-Algorithmus (SSA) versucht aus dem Mangel an Zeugen für die Zusammengesetztheit einer ungeraden Zahl auf deren Primalität zu schließen. Erhalten wir für eine Eingabe n die Ausgabe Zu” sammengesetzt“, so wissen wir, dass diese Entscheidung definitiv korrekt ist. Lautet die Ausgabe hingegen Prim“ so wissen wir, dass diese Entscheidung mit einer Wahrscheinlichkeit von mindestens 21 korrekt ist. Da ” dieses allerdings noch nicht zufriedenstellend ist, werden wir die Wahrscheinlichkeit einer falschen Ausgabe mit 3 dem Prinzip der Probability Amplification“ unter eine gewisse Schranke senken. ” Algorithmus Solovay-Strassen Algorithmus Eingabe: Eine ungerade Zahl n 1. Wähle zufälig ein a ∈ {1, ..., n − 1} 2. Berechne x := ggT(a,n). 3. Ist x 6= 1 gebe Zusammengesetzt“ zurück. ” n−1 4. Berechne y := na und z := a 2 mod n. 5. Ist y ≡ z (mod n), gebe Prim“ aus, ” sonst gebe Zusammengesetzt“ aus. ” Der SSA ist ebenfalls ein Monte-Carlo Primzahltest mit einseitigem Fehler und unter der Abschätzung obere Schranke für einen Fehler, erhalten die Wahrscheinlichkeit für eine korrekte Ausgabe: P(SSA arbeitet korrekt) = 1 - P(SSA macht Fehler) = 1 − 1 2 also 1 2 Da sowohl das Jacobi-Symbol, als auch die Potenzen effizient berechenbar sind folgt, dass der SSA ebenfalls effizient berechenbar ist. 5 Verwendete Literatur [AKS] Manindra Agrawal, Neeraj Kayal and Nitin Saxena: PRIMES is in P Department of Computer Science and Engineering Indian Institute of Technology Kanpur Kanpur-208016, INDIA http://www.cse.iitk.ac.in/primality.pdf [FIT] P. Fittkau: Solovay-Strassen-test Institut für Informatik und praktische Mathematik Christian-Albrechts-Universität zu Kiel [FOR] O. Forster: Einführung in die Zahlentheorie http://www.mathematik.uni-muenchen.de/ forster/v/zth/inzth-15.pdf [FRO] Jana Fröschler: Probabilistische Algorithmen für PRIMES http://tal.cs.tu-berlin.de/lv/ws0405/komplexitaet/ausarb-froeschler.pdf [GRA] Hans-Gert Gräbe: Primzahl-Testverfahren http://www.informatik.uni-leipzig.de/ graebe [HRO] Hromkovic: Algorithmics for Hard Problems Springer Verlag 2003 [KLU] Albert Klugs: Primzahlen-Test nach dem ’Sieb des Eratosthenes’ in Java http://www.jjam.de/Java/Applets/Primzahlen/Eratosthenes.html 4 [LER] Jürgen Lerner: Primtests und der Satz von Ankeny Fachbereich für Mathematik und Statistik Universität Konstanz www.inf.uni-konstanz.de/lerner/dipl.pdf [NIS] Nationa Institute Of Standards And Techonology Binary GCD algorithm http://www.nist.gov/dads/HTML/binaryGCD.html [RAC] Nicolas Rachinsky: Probabilistische Primzahltests http://www.tcs.informatik.uni-muenchen.de/lehre/WS03-04/APA/primzahlen.pdf [STE] Angelika Steger: Diskrete Strukturen Springer Verlag, 2002 [WIK] Wikipedia http://de.wikipedia.org 5