Primzahltest
Ein Primzahltest ist ein mathematisches Verfahren, um festzustellen, ob eine gegebene Zahl eine Primzahl ist oder nicht.
Praktische Anwendung
In der Praxis werden Primzahltests insbesondere bei asymmetrischen Verschlüsselungsverfahren in der Kryptographie eingesetzt. Algorithmen wie RSA benötigen Primzahlen in einer Größenordnung von etwa 1000 Stellen in dualer Darstellung. Es ist also unmöglich, diese alle zu berechnen und in einer Liste zu speichern, um bei Bedarf einfach darauf zuzugreifen. Auch die Vorausberechnung einer Teilmenge ist aus sicherheitstechnischen Gründen fragwürdig, da die Liste Angreifern in die Hände fallen könnte. Statt der Verwendung einer bekannten Primzahl rät der Algorithmus (mit ein paar Tricks) eine „beliebige“ Zahl und stellt mit Hilfe eines Primzahltests möglichst schnell fest, ob diese tatsächlich prim ist.
Da „echte“ Primzahltests bei Zahlen dieser Größe zu lange dauern, wird meist ein Monte-Carlo-Algorithmus verwendet, mit dem in Wirklichkeit gar nicht mit absoluter Sicherheit festgestellt werden kann, ob die gegebene Zahl eine Primzahl ist (man spricht auch von probabilistischen Primzahltests). Es kann dabei aber die Wahrscheinlichkeit, eine zusammengesetzte Zahl fälschlicherweise für eine Primzahl zu halten, beliebig klein gemacht werden. Zwar würde die Verwendung einer Nicht-Primzahl als kryptographischer Schlüssel eine unsichere Verschlüsselung bedeuten, doch wenn die Wahrscheinlichkeit dafür milliardenmal geringer ist als die, dass Absender und Empfänger der Nachricht gleichzeitig vom Blitz getroffen werden, wird dieses Risiko in Kauf genommen, um das ansonsten sehr sichere Verschlüsselungsverfahren verwenden zu können.
Bekannte Primzahltest-Verfahren
Es gibt zahlreiche Ansätze für Primzahltests:
Probedivision
Der einfachste Primzahltest ist die Probedivision. Dabei probiert man nacheinander, ob die Zahl durch eine der Primzahlen mit teilbar ist. Wenn nicht, dann ist eine Primzahl. In der Praxis wird die Probedivision nur für kleine bis etwa eine Million eingesetzt. Für größere sind andere Verfahren effizienter.
Sieb des Eratosthenes
Das Sieb des Eratosthenes ist ein Algorithmus, der eine Liste von Primzahlen erzeugt. Da diese Liste bis zu einer frei wählbaren Grenze alle Primzahlen enthält, kann sie für einen Primzahltest verwendet werden. Man überprüft dazu, ob die übergebene Zahl in der Liste ist. Auch dieses Verfahren ist für große Zahlen zu aufwendig und kann daher nicht als Primzahltest verwendet werden.
Sieb von Atkin
Das Sieb von Atkin ist ein schneller, moderner Algorithmus zur Bestimmung aller Primzahlen bis zu einer vorgegebenen Grenze. Es ist eine optimierte Version des antiken Sieb des Eratosthenes. Die Performance ist bei einem kleinen Limit von z. B. 100 noch etwas langsamer als bei dem Sieb des Eratosthenes, aber je größer das Limit, desto größer ist der Zeitvorteil gegenüber der alten Siebmethode.
Probabilistische Primzahltests
Die folgenden – in aufsteigender Stärke sortierten – Primzahltests beruhen auf dem kleinen fermatschen Satz und Folgerungen daraus:
Primzahltest | beruht auf | Art der auftretenden Pseudoprimzahlen |
Fermatscher Primzahltest | kleiner fermatscher Satz | Fermatsche Pseudoprimzahlen |
Solovay-Strassen-Test | Satz von Euler und Jacobi-Symbol | Eulersche Pseudoprimzahlen |
Miller-Rabin-Test | Satz nach Miller | starke Pseudoprimzahlen |
Der Miller-Rabin-Test ist ein probabilistischer Primzahltest mit akzeptabler Laufzeit. Für gewisse Bereiche natürlicher Zahlen ist bekannt, wie viele der ersten Primzahlen als Basen benutzt werden müssen, um sogar eine sichere Aussage zu machen, den Algorithmus also deterministisch benutzen zu können (siehe Folge A014233 in OEIS).
Weitere Primzahltests, die auf dem kleinen fermatschen Satz beruhen
- Lucas-Test und der speziellere Pépin-Test zum Prüfen von Fermat-Zahlen
- Lucas-Lehmer-Test zum Prüfen von Mersenne-Primzahlen
- Der APRCL-Test, der 1980 von den Mathematikern Leonard Adleman, Carl Pomerance, Robert Rumely, Henri Cohen und Hendrik W. Lenstra Jr. entwickelt und nach den Initialen der Erfinder benannt wurde, stellt durch Ausschalten der Fermatschen Pseudoprimzahlen eine wesentliche Verbesserung des fermatschen Primzahltests dar.[1]
AKS-Methode
Die AKS-Methode ist ein Primzahltest in Polynomialzeit, der im Jahr 2002 von Manindra Agrawal, Neeraj Kayal und Nitin Saxena gefunden und nach ihnen benannt wurde.[2] Damit ist geklärt, dass PRIMES in der Komplexitätsklasse P liegt.
Die Rolle von PRIMES in der Komplexitätstheorie
Als PRIMES bezeichnet man in der Informatik das Problem der Feststellung, ob eine Zahl prim ist. Bis ins Jahr 2002 erhoffte man sich in der Komplexitätstheorie von ihr neue Erkenntnisse in Bezug auf das P-NP-Problem. Falls P≠NP gilt, muss nach dem Satz von Ladner ein Problem in NP\P existieren, welches nicht NP-vollständig ist.[3] PRIMES galt als ein potenzieller Kandidat für ein solches Problem.
Dies lag daran, dass PRIMES sowohl in der Komplexitätsklasse NP als auch in der Komplexitätsklasse co-NP liegt, und demnach nicht NP-vollständig sein konnte (unter der gängigen Annahme, dass P≠NP). Man kannte vor 2002 jedoch keinen nicht-probabilistischen Lösungsalgorithmus mit polynomieller Laufzeit.
Siehe auch
Weblinks
- D. J. Bernstein: Distinguishing prime numbers from composite numbers. Ein Überblick über verschiedene Primzahltestverfahren.
- Online Primzahl Prüfer. Testet Zahlen mit bis zu 15 Dezimalstellen (serverseitig).
Einzelnachweise
- Vgl. Henri Cohen; Hendrik W. Lenstra, Jr.: Primality testing and Jacobi sums. In: Mathematics of Computation 42 (1984), Nr. 165, S. 297–330.
- Manindra Agrawal, Neeraj Kayal, Nitin Saxena: PRIMES is in P. In: Annals of Mathematics. 160, Nr. 2, 2004, S. 781–793. doi:10.4007/annals.2004.160.781.
- Richard E. Ladner: On the structure of polynomial time reducibility. In: Journal of the ACM. Bd. 22, Nr. 1, 1975, S. 151–171, Corollary 1.1., ACM-Eintrag.