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