Primzahltest nach Solovay-Strassen 1 Motivation 2 Fortgeschrittene

Werbung
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
Herunterladen