Effiziente Primzahlverfahren 230402

Werbung
TU Chemnitz
Fachbereich Informatik
Proseminar Effiziente Algorithmen
Leitender:
Herr Dr. Ulrich Tamm
Thema:
Effiziente Primzahlverfahren
Bearbeitet von:
Jens Kürsten
Matrikelnummer: 24538
Datum: 15. März 2002
Inhaltsverzeichnis
1. Primzahlen – Von der Antike bis heute ................................................................ 2
2. Verschlüsselung mit Primzahlen .......................................................................... 3
3. Primzahlverfahren................................................................................................ 4
3.1 Primzahlen für kryptologische Anwendungen .................................................... 4
3.2 Primzahlrekorde................................................................................................. 4
3.3 Verfahren für kleine Primzahlen......................................................................... 4
3.4 Primzahlverfahren ohne Faktorenzerlegung (Fermattest).................................. 5
3.5 Pseudoprimzahlen – Carmichael-Zahlen – (Strong) Probable Prime Tests ....... 5
4. Deterministische Primzahlverfahren .................................................................... 7
5. Übersicht über die Dauer einiger Primzahlverfahren ........................................... 8
6. Quellenangabe..................................................................................................... 8
2
1. Primzahlen – Von der Antike bis heute
Die alten Griechen waren die Ersten, die sich für die Primzahlen interessierten. Um 500 - 300 v. Chr.
befassten sie sich mit der Zahlentheorie und entdeckten und erforschten perfekte und befreundete
Zahlen. Euklid gelang es, mit Hilfe seiner Theorie der "Elemente" nachzuweisen, dass es unendlich
viele Primzahlen geben muss. Dies war übrigens auch der erste Widerspruchsbeweis. Euklid konnte
des weiteren zeigen, dass wenn es ein n gibt, mit dem 2n -1 eine Primzahl ist, (2n -1) x 2(n - 1) eine
perfekte Zahl ergibt. Erst 2000 Jahre später gelang es dem Mathematiker Euler die Umkehrung dieses
Satzes zu beweisen, also dass alle geraden perfekten Zahlen genau diese Form haben müssen. Ob
es ungerade perfekte Zahlen gibt, ist noch bis heute unbekannt. Um 200 v. Chr. stellte Eratosthenes
den ersten Algorithmus zum Berechnen von Primzahlen auf (Sieb des Eratosthenes).
In der Renaissance standen Zahlen der Form 2n -1 im Vordergrund, und 1588 bewies Cataldi, dass
219 -1 eine Primzahl ist. Diese war 200 Jahre als größte Primzahl bekannt. Die nächste bedeutende
Entdeckung machte im 17. Jhd. der Mathematiker Fermat. Er konnte nachweisen, dass wenn p eine
Primzahl ist, für jede ganze Zahl a dann gilt: ap = a mod p. Dieses Theorem ist die Basis für viele
weitere Erkenntnisse in der Zahlentheorie und wird bei den meisten der von modernen Computern
genutzten Verfahren zum Prüfen von Primzahlen eingesetzt. Mersenne konnte nachweisen, dass eine
Zahl 2n -1 nur dann eine Primzahl sein kann, wenn auch n eine Primzahl ist. Allerdings gilt in keiner
Weise, dass jede Zahl 2n -1, bei der n eine Primzahl ist, auch automatisch Primzahl ist. Aufgrund
seiner Entdeckung werden die Primzahlen dieser Form Mersennesche Primzahlen genannt. Sämtliche
Primzahlrekorde der heutigen Zeit haben diese Form.
In der heutigen Zeit trägt die Entwicklung des Computers dazu bei, dass immer größere Primzahlen
gefunden werden können, da dieser die enorm aufwendige Rechnung zur Überprüfung einer Zahl auf
die Primzahleigenschaft übernimmt. Die derzeit größte Primzahl wurde am 14.11.2001 von dem 20jährigen Kanadier Michael Cameron oder besser gesagt von seinem PC nachgewiesen. Sie lautet
213466917 -1 und hat vier Millionen Stellen. Sie wurde im Rahmen der GIMPS (Great Internet Mersenne
Prime Search) gefunden. Dies ist eine Organisation, bei der jedes Mitglied einen bestimmten
Zahlenraum zugewiesen bekommt, um dann mit vorgegebenen Algorithmen nach Mersenneschen
Primzahlen zu suchen.
In der heutigen Zeit gibt es trotz aller Entwicklungen immer noch sehr viele ungelöste Probleme, die
direkt oder indirekt mit Primzahlen zu tun haben, so z.B. die Frage, ob es unendlich viele
Primzahlzwillinge gibt. Es bleibt also auch heute noch genügend Raum für Forschung im Bereich der
Primzahlen.
2. Verschlüsselung mit Primzahlen
Die Entdeckung immer größerer Primzahlen und die Entwicklung immer schnellerer
Rechenmaschinen hat zur Folge, dass die Primzahlen sehr gut in der Kryptographie zur
Verschlüsselung von Daten angewendet werden können. Der RSA-Algorithmus, der 1977 von Ron
Rivest, Adi Shamir und Leonard Adleman entwickelt wurde, hat sich weltweit als wichtigstes
Instrument zur Verschlüsselung und Authentifikation durchgesetzt.
Das Verfahren basiert auf der Tatsache, dass es ohne Probleme möglich ist, aus zwei sehr großen
Primzahlen p und q ihr Produkt n zu berechnen, aber kein effizienter Algorithmus existiert, der aus
dem Produkt n wieder die beiden Primzahlen p und q liefern kann, der also n faktorisiert.
Dem RSA-Algorithmus liegt folgendes zugrunde:
Eine als öffentlicher Schlüssel fungierende Zahl k und eine als privater Schlüssel fungierende Zahl l
stehen sowohl zueinander in Abhängigkeit als auch zu den Primzahlen p und q nämlich: k * l ≡ 1 mod
(p – 1)(q – 1). Die Schlüssel werden unter Kenntnis von p und q bestimmt. Die Nachricht m wird nun
durch die Berechnung des Chiffrats c = mk mod n verschlüsselt, was nichts anderes bedeutet, als
k
dass der Rest errechnet wird, der sich bei Division von m durch n ergibt. Die Abhängigkeit von k und l
zueinander bedeutet, dass die Dechiffrierung durch Berechnung von cl mod n erfolgen kann, was
dann natürlich gerade die Nachricht m ergibt.
Öffentlich bekannt zu geben sind dabei nur die Zahl n und der öffentliche Schlüssel k. Da aufgrund der
derzeitigen Unmöglichkeit, die Zahl n in die beiden Primzahlen einfach zu faktorisieren (bei
hinreichend großen Primzahlen dauert simples Durchprobieren selbst bei heutiger Rechentechnik
Ewigkeiten – und wesentlich effizientere Verfahren zum Faktorisieren sind bisher nicht bekannt),
niemand in der Lage ist, aus dem öffentlichen Schlüssel k den geheimen Schlüssel l zu berechnen
(was ja nur unter Kenntnis der Primzahlen p und q machbar ist), und man deswegen auch aus dem
Chiffrat weder die Originalnachricht noch den geheimen Schlüssel einfach berechnen kann, ist RSA
ein bis heute sicheres kryptographisches Verfahren.
3
Trotzdem muss hervorgehoben werden, dass seine kryptographische Sicherheit nicht bewiesen
wurde. Das bedeutet, dass es durchaus möglich ist, dass RSA gebrochen werden kann, nämlich
indem jemand entweder einen schnellen Faktorisierungsalgorithmus oder aber auf andere Weise
einen Weg findet, die Nachricht und/oder den geheimen Schlüssel zu berechnen. Die Tatsache, dass
das seit mehr als 20 Jahren niemand geschafft hat, kann jedenfalls nicht als Beweis angesehen
werden, dass es unmöglich ist.
3. Primzahlverfahren
3.1 Primzahlen für kryptographische Anwendungen
Nun stellt man sich die Frage, ob es für den Datenschutz wichtig ist, immer weiter nach neuen und
immer größer werdenden Primzahlen zu suchen. Um diese Frage zu beantworten, braucht man sich
nur vor Augen zu halten, wie schnell die technische Entwicklung vorangeht. So wird es wohl in 10 bis
20 Jahren auch möglich sein, mit eher uneffizienten Algorithmen Rechenprobleme zu lösen, die ein
guter Algorithmus auf einer heutzutage schnellen Maschine nicht in vernünftiger Zeit berechnen
könnte. Damit besteht also die Notwendigkeit, größere Primzahlen zu finden, die dann in ähnlichen
Verschlüsselungsalgorithmen, wie dem RSA, zur Anwendung kommen können.
3.2 Primzahlrekorde
Es sind tatsächlich schon Algorithmen entwickelt worden, mit denen man heute Primzahlen mit
mehreren Millionen Stellen nachweisen kann. Dafür hat man sich das Ergebnis von Mersenne zu
nutzen gemacht, denn er konnte nachweisen, dass eine Zahl 2n –1 nur dann eine Primzahl sein kann,
wenn auch n eine Primzahl ist. Somit hat man also ein Verdachtskriterium für die Suche im
unendlichen Bereich der natürlichen Zahlen. Ein Verfahren, was hierzu genutzt wird, ist der
sogenannte Lucas-Lehmer-Test aus dem Jahr 1930. Dieser ist außerordentlich schnell auf
Computern, weil dabei keine Division durchgeführt werden muss. Dieser Algorithmus hat folgende
Form:
Sei M(n) die nte Mersenne Zahl (also M(n) = 2n-1). Dann gilt: M(n) ist prim dann und nur dann, wenn
S(n-2) = 0 (mod M(n)),
wobei S(0) = 4 und S(k+1) = S(k)2-2 für k ≥ 1.
Nun jedoch erst einmal zu den allgemeinen Verfahren zur Bestimmung von Primzahlen. Die Effizienz
eines zum Primzahlnachweis angewendeten Algorithmus, hängt davon ab, wie groß die Primzahlen
(Anzahl der Stellen) sind und in welchem Zahlenbereich gesucht wird. Wenn wir in der Geschichte der
Mathematik wieder etwas zurückgehen, stellen wir fest, dass eigentlich schon lange nach effizienten
Verfahren zur Bestimmung möglichst großer Primzahlen gesucht wurde.
3.3 Verfahren für kleine Primzahlen
Sehr erstaunlich ist, dass der Algorithmus des griechischen Mathematikers Eratosthenes, der auch als
Sieb des Eratosthenes bekannt ist, heutzutage noch genutzt werden kann, um die Primzahlen
10
zwischen 1 und sagen wir 10 schnell und effizient zu berechnen. Man kann sich den Algorithmus
sehr leicht selbst erklären, indem man versucht nach diesem Schema die Primzahlen zwischen 1 und
n, mit n=100, zu bestimmen. Man schreibt alle ungeraden Zahlen zwischen 1 und n ab der 2 auf und
streicht dann nacheinander die durch die erste noch vorhandene Primzahl teilbaren Zahlen aus der
Liste heraus. Man beginnt also mit den durch 3 teilbaren Zahlen, dann kommen die durch 5 teilbaren
Zahlen und dann diejenigen, die durch 7 teilbar sind. Jetzt ist man fertig, da man nur von 3 bis zur
Quadratwurzel von n so vorgehen muss.
Um eine kleine Zahl auf die Primzahleigenschaft zu überprüfen, bietet sich die Umkehrung des
Algorithmus des Eratosthenes an. Um nachzuweisen, dass 211 eine Primzahl ist, teilt man
nacheinander durch 2, 3, 5, 7, 11 und schließlich durch 13. Wenn man sich dieses Verfahren genauer
anschaut, werden schnell die Probleme dieses Verfahrens klar. Denn wenn ich zur Feststellung, ob
eine Zahl Primzahl ist oder nicht eine Menge von Primfaktoren benötige, dann kann ich dieses
Verfahren nur soweit anwenden, bis ich keine Möglichkeit mehr habe, die Primfaktoren zu speichern
bzw. bis die Größe des Speichers der Primfaktoren zur Ineffizienz des Algorithmus führt.
4
3.4 Primzahlverfahren ohne Faktorenzerlegung (Fermattest)
Um auch größere Primzahlen nachweisen zu können, braucht man also eine Möglichkeit, die nicht auf
der Faktorenzerlegung basiert. Alle heute bekannten Primzahltests, die eine Alternative zur
Faktorenzerlegung darstellen, lassen sich auf einen Satz von Pierre de Fermat zurückführen, den er
im Jahr 1640 niederschrieb. Dieses sogenannte kleine Fermatsche Theorem besagt, dass für jede
Primzahl n und für jede natürliche Zahl b der Ausdruck bn – b ein Vielfaches von n ist. Beispielsweise
erhält man für n = 7 und b = 2 die Zahl 27 – 2 (126), also das 18fache von 7. Für Primzahltests bietet
sich die Umkehrung dieses Satzes an: Wenn bn – b kein Vielfaches von n ist, dann kann n keine
Primzahl sein. Angenommen, n sei gleich 4 und b gleich 3, dann entspricht 34 – 3 der Zahl 78. Da sich
78 aber nicht ohne Rest durch 4 teilen lässt, folgt aus dem Satz von Fermat, dass 4 keine Primzahl
sein kann.
Wie bedeutend dieses „kleine“ Theorem aber für Primzahltests mit großen Zahlen ist, merkt man,
wenn man es auf Zahlen anwendet, die sich Im Speicher eines Rechners nur äußerst schwer oder
überhaupt nicht darstellen lassen. Wenn man beispielsweise weiß, dass 244497 –1 prim ist, dann kann
man aus dem Satz schließen, dass 3 hoch (244497 –1) – 3 durch die Primzahl 244497 –1 teilbar ist. Die
Potenz 3 hoch (244497 –1) besitzt derart viele Dezimalstellen, dass sie sich gar nicht alle in vorstellbarer
Zeit aufschreiben lassen – und kaum ein Computer ist in der Lage, die Division Zahlen dieser
Größenordnung in für den Mensch vorstellbaren Zeiträumen auszuführen.
Aber dennoch ist es nicht unmöglich, in solche Größenordnungen des Zahlenraumes vorzudringen.
Schon Gauß entwickelte das Zahlenrad, bei dem es nicht auf die absolute Größe einer Zahl n,
sondern auf den Rest, der beim Dividieren derselben durch eine Zahl m übrig bleibt. Diesen Rest
bezeichnet man in der sogenannten Kongruenzrechnung als Modulus. Viele der Rechenregeln für die
normale Arithmetik gelten auch für die der Kongruenzrechnung. So ist 6 + 7 normalerweise gleich 13.
In der Kongruenzrechnung für den Modulus 5 ist es ähnlich: 6 (mod 5) + 7 (mod 5) ≡ 1 (mod 5) + 2
(mod 5) ≡ 3 (mod 5) und 13 ≡ 3 (mod 5). Analog ist es auch bei der Multiplikation.
Wenn man nun das Prinzip der Kongruenzrechnung auf das Fermatsche Theorem anwendet, ergibt
sich folgende Theorie: Für eine Primzahl n und eine natürliche Zahl b ist die Zahl bn – b kongruent zu
0 (mod n), weil bn – b ein Vielfaches von n ist. Diese Schreibweise bietet den enormen Vorteil, dass
man den Ausdruck (bn – b) (mod n) berechnen kann, ohne bn – b durch n teilen zu müssen. Dies
macht sich natürlich bei den Zahlen in den kaum vorstellbaren Größenordnungen bemerkbar und führt
dazu, dass man das Fermatsche Theorem jetzt für Primzahltests in diesen besagten Zahlenräumen
anwenden kann.
Kleines Fermatsches Theorem: Für eine Primzahl n und eine beliebige natürliche Zahl b gilt:
(bn – b) (mod n)
≡ 0 (mod n)
Zum Beweis betrachte man eine Zahlenfolge b, 2b, 3b, ..., (n – 1)b, nb
Die Reste (mod n) der einzelnen Folgenglieder durchlaufen dann – in teilweise veränderter
Reihenfolge – die Zahlen 1 bis n.
Daher gilt:
und folglich ist:
Da aber gilt:
folgt:
b x 2b x ... x (n – 1) b (mod n) ≡ 1 x 2 x ... x (n–1)(mod n)
[b x 2b x ... x (n – 1)b] – [1 x 2 x ... x (n – 1)] ≡ 0 (mod n).
b x 2b x ... x (n – 1)b = bn-1(n – 1)! und 1 x 2 x ... x (n – 1) = (n – 1)!
[b x 2b x ... x (n – 1)b] – [1 x 2 x ... x (n – 1)] =
[bn-1(n – 1)!] – [(n – 1)!] = (bn-1 –1)(n – 1)! ≡ 0 (mod n).
Damit ist gezeigt, dass (bn-1)(n – 1)! ein ganzzahliges Vielfaches von n ist – und das kleine
Fermatsche Theorem bewiesen.
Haben wir damit jetzt eine Möglichkeit zur Bestimmung von großen Primzahlen gefunden?
3.5 Pseudoprimzahlen – Carmichael-Zahlen – (Strong) Probable Prime Tests
Nein, denn aus der Tatsache, dass das kleine Fermatsche Theorem bewiesen ist, folgt nicht, dass
auch automatisch die Umkehrung immer gelten muss. Schon im Jahr 1819 deckte der französische
Mathematiker Pièrre Frédéric Sarrus diesen Irrtum auf, als er feststellte, dass 2341 – 2 ein Vielfaches
5
der aus 31 und 11 zusammengesetzten Zahl 341 ist. Im Laufe der Zeit wurden immer mehr solcher
Gegenbeispiele gefunden, die auch andere Werte für b haben, wie z. B. 391 – 3 oder 415 – 4. Eine Zahl
n, die den Fermattest für b passiert, obwohl sie zusammengesetzt ist, nennt man Pseudoprimzahl zur
Basis b. Auf die eben genannten Beispiele bezogen, ist also 341 pseudoprim zur Basis 2, 91
pseudoprim zur Basis 3 usw. Es gibt zu jeder Basis unendlich viele Pseudoprimzahlen. Manche
zusammengesetzte Zahlen sind sogar zu jeder beliebigen Basis b pseudoprim. Diese nennt man
Carmichael-Zahlen zu Ehren des amerikanischen Mathematikers, der diese merkwürdigen
Eigenschaften im Jahre 1909 entdeckte. Damit waren alle Hoffnungen beseitigt, dass man mit dem
herkömmlichen Fermattest, die Primzahlen eindeutig von den zusammengesetzten Zahlen
aussondern könnte. Die Tatsache, dass Pseudoprimzahlen und Carmichael-Zahlen äußerst selten
vorkommen, legt allerdings den Verdacht nahe, dass beispielsweise jede Zahl unter 20 Milliarden, die
den Fermattest zur Basis 2 besteht, mit sehr hoher Wahrscheinlichkeit auch prim ist. Um dennoch ein
effizientes Primzahlverfahren zu erstellen, müssen also noch die Pseudoprimzahlen aus der
Ergebnismenge des Fermattests ausgeschlossen werden. Die oben genannten Pseudoprimzahlen
werden auch als „wahrscheinliche Primzahlen“ (Probable Primes à PRP) bezeichnet. Es gibt auch
noch die „sehr wahrscheinlichen Primzahlen“ (Strong Probable Primes à SPRP), die auch mit
anderen Verfahren nachgewiesen werden, die auf dem kleinen Fermatschen Theorem beruhen.
Sie stützen sich unter anderem auf die Tatsache, dass, wenn eine ungerade Primzahl n ist, die Zahl 1
genau zwei Quadratwurzeln mod n besitzt, nämlich 1 und –1. Dieses Verfahren geht auf Miller zurück
und lautet wie folgt: Man geht davon aus, dass die Zahl n sehr wahrscheinlich prim zur Basis a (aSPRP) sei.
n – 1 = 2sd, wobei d ungerade und s nicht-negativ ist, dann ist n eine a – SPRP, wenn
entweder ad = 1 (mod n)
oder (ad)2r = -1 (mod n)
für jedes nicht-negative r kleiner als s.
Dies wird bei dem probabilistischen Test von Miller angewendet, indem man ihn einfach für
hinreichend viele Basen a wiederholt. Ein Analogon zu Carmichael-Zahlen gibt es nämlich beim MillerTest nicht, da n zu mindestens 75% der Basen a nicht a-SPRP ist, wenn n keine Primzahl ist. Aber
auch dieses Verfahren allein ist absolut nicht geeignet, Primzahlen definitiv zu bestimmen. Wenn man
es aber beispielsweise mit dem Fermattest kombiniert, kann man folgende Theoreme für kleinere
Primzahlen (noch darstellbar) aufstellen:
Wenn n < 1.373.653 und sowohl 2 als auch 3-SPRP ist, dann ist n prim.
Wenn n < 25,326,001 und eine 2, 3 und 5-SPRP ist, dann ist n prim.
Wenn n < 25,000,000,000 und eine 2, 3, 5 und 7-SPRP ist, dann ist entweder
n = 3,215,031,751 oder n ist prim. (zur Zeit nachgewiesen für n < 118,670,087,467).
Wenn n < 2,152,302,898,747 und eine 2, 3, 5, 7 und 11-SPRP ist, dann ist n prim.
Wenn n < 3,474,749,660,383 und eine 2, 3, 5, 7, 11 und 13-SPRP ist, dann ist n prim.
Wenn n < 341,550,071,728,321 und eine 2, 3, 5, 7, 11, 13 und 17-SPRP ist, dann ist n prim.
Diese Ergebnisse wurden unter anderem von Pomerance, Selfridge und Wagstaff erhalten. Ähnliche
Formulierungen gibt es auch von Jaeschke in folgender Gestalt:
Wenn n < 9,080,191 und eine 31 und 73-SPRP ist, dann ist n prim.
Wenn n < 4,759,123,141 und eine 2, 7 und 61-SPRP ist, dann ist n prim.
Wenn n < 1,000,000,000,000 und eine 2, 13, 23, und 1662803-SPRP ist, dann ist n prim.
Die folgende Weiterentwicklung des Miller-Tests stützt sich auf eine Verallgemeinerung der Hypothese
von Riemann, die jedoch noch nicht bewiesen wurde.
Wenn n eine a-SPRP für alle Zahlen a mit 1 < a < 2(log n)2 ist, dann ist n prim.
Dies wäre dann sogar ein deterministisches Verfahren, bei dem einfach alle Basen 1 < a < 2(log n)2
mit dem Miller-Verfahren getestet werden müssten. Aufgrund der Tatsache, dass der Aufwand dann
nur noch polynomiell in log n wäre (zum Vergleich: Probedivision hat mit Wurzel n eine deutlich
höhere Komplexität), kann man sagen dass dies dann ein sehr effizientes Primzahlverfahren sein
würde.
Ein weiteres probabilistisches Primzahlverfahren ist der Solovay-Strassen-Test. Dabei wird eine
zufällig gewählte Zahl p geprüft. Man sucht sich eine weitere Zufallszahl a, die kleiner als p ist.
6
Wenn ggT(a,p) ≠ 1, ist p keine Primzahl.
Wenn j ≠ J(a,p), so ist p definitiv nicht prim, sonst liegt die Wahrscheinlichkeit, daß p nicht prim
ist, bei höchstens 50 Prozent.
Man muss für den Test das Jacobi-Symbol für a und p (J(a,p)) und j = a(p – 1)/2 mod p berechnen.
Durch mehrfache Anwendung des Algorithmus für eine Zahl p ist es möglich die Wahrscheinlichkeit
von 50% immer weiter zu verringern (gilt auch für den Test von Miller).
Beim Miller-Test und beim Solovay-Strassen-Test gibt es keine wirklich hundertprozentige Garantie
dafür, dass die gefundenen Zahlen wirklich prim sind. Die Wahrscheinlichkeit liegt aber bei über
99,99% und bei der Größe dieser Zahlen kann man davon ausgehen, da es in der Praxis unmöglich
ist eindeutig nachzuweisen, dass es keine Primzahl ist und das deshalb für die praktische Anwendung
zum Beispiel in Verschlüsselungssystemen vernachlässigbar ist.
4. Deterministische Primzahlverfahren
Jetzt möchte ich zu den deterministischen Verfahren kommen, die heute zur Bestimmung von sehr
großen Primzahlen genutzt werden.
Schon im Jahr 1876 veröffentlichte der Mathematiker Edouard A. Lucas einen strengen Primzahltest
in der folgenden Form: Nehmen wir an, für zwei Zahlen b und n gilt: bn-1 ist kongruent zu 1 (mod n),
aber für jeden Primfaktor p von n – 1 ist b(n-1)/p nicht kongruent zu 1 (mod n). Dann muss n eine
Primzahl sein. Nachteil dieser Methode ist, dass es unter Umständen sehr schwierig sein kann, eine
geeignete Zahl b zu finden. Ein weiterer Nachteil ist, dass man zum Anwenden des Tests alle
Primfaktoren n – 1 bekannt sein müssen. Es gibt aber auch einen anderen Test von Lucas, der 1930
von Lehmer weiterentwickelt wurde. Dieses Verfahren lässt sich auf die Mersenneschen Zahlen
anwenden, weil bei denen sofort alle Primfaktoren n + 1 angegeben werden können. Sie sind alle
gleich 2 (aufgrund der Form der Zahlen: 2p – 1).
Primzahltests, für die nicht alle Primfaktoren n + 1 bzw. n – 1 bekannt sein müssen, wurden Ende der
70er Jahre von Lehmer, Brillhart und Williams entwickelt. Dabei braucht man nur einige Primfaktoren
der Zahlen n² + 1, n² – n + 1 oder n² + n + 1 zu kennen, um nachzuweisen, dass eine Zahl prim ist.
Aber auch dieser Test scheitert bei einigen hartnäckigen Zahlen, die sich nicht in wenigstens einen
Teil dieser Primfaktoren zerlegen lassen.
Im Jahr 1980 haben Adleman und Robert S. Rumely einen Test entwickelt, der für beliebige 50 bis
100-stellige Zahlen in einem ertragbaren Zeitrahmen nachweisen konnte, ob diese prim sind oder
nicht. Dieser Test wurde später von Henri Cohen und Hendrik W. Lenstra verbessert, sodass jetzt nur
noch 40 Sekunden nötig waren, um nachzuweisen, ob eine beliebige 100-stellige Zahl prim ist oder
nicht. Dieser Adleman-Rumely-Test ähnelt in groben Zügen dem Fermattest. Man konstruiert zwei
Hilfsgrößen, die Anfangszahl I und die Euklidische Zahl E. Dabei entspricht die Zahl I, dem Produkt
mehrerer Primzahlen, etwa 2 x 3 x 5 x 7 = 210. Die Zahl E ist definiert als Produkt all der Primzahlen
p, q, r usw., für die gilt: p – 1, q – 1, r – 1 sind Faktoren von I. Bezogen auf unsere Anfangszahl I = 210
ergeben sich also die Zahlen 2, 3, 7, 11, 31, 43, 71, 211 aus denen sich 9.225.988.926 als Produkt für
E ergibt. Einerseits muss die Zahl E größer sein als die Quadratwurzel der Zahl n. Aber andererseits
muss die Anfangszahl I so klein wie möglich sein, weil die Rechenzeit proportional zu einer Potenz
von I ist. Daher sind die Zahlen E und I für jede Zahl neu abzuschätzen. Für den Fall, dass die beiden
Zahlen festgelegt sind, haben Andrew M. Odlyzko und Carl Pomerance das Verfahren noch etwas
verfeinert. Dabei werden paarweise Primzahlen p und q ähnlich geprüft, wie beim Fermattest. Der
erste „Partner“ p eines solchen Paares ist ein Faktor von E, die zweite Zahl q dagegen ein Faktor von
p – 1. Der eigentliche Test arbeitet mit ganzen algebraischen Zahlen, die sich aus p und q
zusammensetzen. Diese Zahlen sind komplexe Zahlen, die sich als Nullstelle(n) eines Polynoms mit
ganzzahligen Koeffizienten und höchstem Koeffizienten 1 ergeben. So z. B. die Zahlen sqrt(2) und i
sowie (-1 + i sqrt(3))/2, denn sie sind Nullstellen der algebraischen Gleichungen x² - 2 = 0, x² + 1 = 0
und schließlich x3 – 1 = 0. Wenn der Primzahlkandidat bei einem Paar p und q versagt, dann bedeutet
dies, dass n zusammengesetzt ist. Wenn n jedoch alle Tests besteht, heißt das nicht, dass es sicher
eine Primzahl ist. Aber diese noch vorhandene Beweislücke kann endgültig geschlossen werden.
Denn Adleman und Rumely haben gezeigt, dass die Primfaktoren für eine zusammengesetzte Zahl,
die alle Tests vom Fermattyp übersteht, in einer Menge von genau I Elementen enthalten sind. Und
Lenstra wies nach, dass die Elemente dieser Menge gerade den Resten von n, n², n3 ... nI (mod E)
entsprechen. Nun kann man für den endgültigen Nachweis der Primzahl das Probedividieren durch
die Elemente der eben genannten Menge, durchführen. Die Effizienz dieses Verfahren liegt darin,
dass nur die Pseudoprimzahlen und die echten Primzahlen mit Probedividieren getestet werden
müssen. So ist es möglich Zahlen aus ganz neuen Zahlenbereichen zu testen und immer größere
Primzahlen zu finden.
7
In letzter Zeit sind weitere Primzahlverfahren entwickelt worden, die auf elliptischen Kurven beruhen
und ebenfalls sehr effizient sind (siehe Quelle 2). Diese werden hier nicht näher behandelt, weil sie auf
sehr komplizierten mathematischen Grundlagen beruhen.
5. Übersicht über die Dauer einiger Primzahlverfahren (aus Quelle 1)
Test für Zahlen mit:
20 Stellen
50 Stellen
100 Stellen
200 Stellen
1000 Stellen
Probedividieren
2 Stunden
1011 Jahre
1036 Jahre
1086 Jahre
10486 Jahre
109 Jahre
1044 Jahre
10 Minuten
1 Woche
Verfahren von Lucas,
Brillhart-Lehmer-Selfridge, 5 Sekunden
10 Stunden
100 Jahre
Williams
Verfahren von Adleman10 Sekunden 15 Sekunden 40 Sekunden
Rumely, Cohen-Lenstra
6. Quellenangabe
1
Spektrum der Wissenschaft, Ausgabe 02/1983:
„Primzahlen im Schnelltest“ von Carl Pomerance
2
http://www.utm.edu/research/primes/prove/index.htm (University of Tennessee at Martin)
3
Carl Pomerance, Cryptology and Computational Number Theory, AMS, 1990
8
Herunterladen