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 Performanz 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

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

Wiktionary: Primzahltest – Bedeutungserklärungen, Wortherkunft, Synonyme, Übersetzungen

Einzelnachweise

  1. Vgl. Henri Cohen; Hendrik W. Lenstra, Jr.: Primality testing and Jacobi sums. In: Mathematics of Computation 42 (1984), Nr. 165, S. 297–330.
  2. Manindra Agrawal, Neeraj Kayal, Nitin Saxena: PRIMES is in P. In: Annals of Mathematics. 160. Jahrgang, Nr. 2, 2004, S. 781–793, doi:10.4007/annals.2004.160.781 (iitk.ac.in [PDF]).
  3. 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.