-
Die
vorliegende Erfindung betrifft eine Vorrichtung und ein Verfahren
zum Bereitstellen einer Testzahl und insbesondere betrifft die vorliegende
Erfindung eine Vorrichtung und ein Verfahren zum Bereitstellen einer Testzahl,
die auf Primalität überprüfbar ist,
um zur Generierung eines Schlüssels
eines Verschlüsselungsalgorithmus
verwendet zu werden.
-
Für die elektronische
Signaturerstellung wird weltweit fast ausschließlich der RSA-Algorithmus verwendet
(Rivest, Shamir, Adleman, 1978). Dieser (asymmetrische) RSA-Verschlüsselungsalgorithmus
verwendet einen öffentlichen
und einen geheimen Schlüssel,
wobei der geheime Schlüssel
beim RSA-Algorithmus aus zwei großen Primzahlen besteht. Die
Primzahlen sind zur Zeit 512 bis 1024 Bit groß. Der öffentliche RSA-Schlüssel besteht
aus dem Produkt der beiden Primzahlen und ist daher doppelt so lang,
d. h. hat zur Zeit zwischen 1024 und 2048 Bit. Aus Sicherheitsgründen müssen die
dem RSA-Schlüssel
zugrundeliegenden Primzahlen im Chip selbst generiert werden.
-
Das
Grundprinzip aller bislang bekannten Verfahren zur Generierung großer Primzahlen
besteht darin, dass man gewisse Kandidatenzahlen einem sogenannten
probabilistischen Primzahltest unterzieht. Hierfür kann der Miller-Rabin-Test
aus dem Jahr 1976 verwendet werden, der auch „starker" Pseudo-Primzahltest genannt wird. Der Rechenaufwand
beim Miller-Rabin-Test
ist in etwa gleich hoch wie beim Fermat-Test, jedoch hat der Miller-Rabin-Test
eine höhere
Aussagekraft.
-
Wenn
die zu testende Zahl den Miller-Rabin-Test besteht, wird der Test
noch einige wenige Male (etwa 2 bis 5 mal, das hängt ab von der Größe der zu
testenden Zahl) mit einem geänderten
Parameter wiederholt, der sogenannten Basis b. Wenn die Zahl auch
diese Kontrolltests besteht, darf man annehmen, dass es sich bei
der Zahl um eine echte Primzahl handelt. Primzahlen der geforderten
Größe von 512
bis 1024 Bits sind aber relativ dünn gesät. Aus dem Primzahlsatz weiß man, dass
der Anteil der Primzahlen dieser Bitlänge unter den gesamten ganzen
Zahlen dieser Bitlänge
im unteren Promille-Bereich liegt (1,4–3 Promille). Würde man Zahlen
der gewünschten
Bitlänge
frei wählen
und sofort dem Miller-Rabin-Test unterziehen, dann würde man im
Durchschnitt mehrere 100 Miller-Rabin-Tests durchführen müssen bis
man endlich eine erste Primzahl gefunden hätte.
-
Um
die Trefferwahrscheinlichkeit zu erhöhen, werden die Kandidatenzahlen
deshalb in allen gängigen Verfahren
vorbehandelt. Dabei werden jene Kandidatenzahlen, die kleine Primfaktoren
enthalten, ausgesiebt. Wenn man alle Zahlen ausscheidet, die durch
die ersten n Primzahlen teilbar sind, dann erhöht sich dadurch die Trefferwahrscheinlichkeit
um einen Faktor F(n), der um so größer wird, je größer n ist,
der mit wachsendem n aber immer langsamer ansteigt. Für n = 100
beträgt
dieser Faktor etwa 11,3. Für
n = 1000 beträgt
der Faktor etwa 16,0. Für
n = 5000 beträgt
der Faktor etwa 19,2. Für
n = 10.000 beträgt
der Faktor ca. 20,6. Für
n = 20.000 beträgt
der Faktor ca. 22.
-
Bei
den bisher bekannten Verfahren werden, wie vorstehend ausgeführt, die
Kandidatenzahlen vorbehandelt. Das Vorbehandeln erfolgt meist dadurch,
dass die Kandidatenzahlen durch eine vorgegebene Anzahl von Primzahlen
dividiert werden. Ergibt diese Division einer Kandidatenzahl mit
einer der Primzahlen ein ganzzahliges Ergebnis, muss geschlossen
werden, dass die Kandidatenzahl keine Primzahl ist. In diesem Fall
wird eine nächste
Kandidatenzahl getestet, indem wiederum ein Dividieren der nächsten Kandidatenzahl
durch eine vordefinierte Anzahl von Primzahlen durchgeführt wird.
Insbesondere für
den Fall, dass die Kandidatenzahl durch eine sehr große Primzahl
zu dividieren ist, ergibt sich somit zunächst ein hoher numerischer
Aufwand, um überhaupt
die Primzahl bereit zustellen. Zusätzlich ergibt sich durch das
Dividieren der Kandidatenzahl durch die Primzahlen wiederum ein
hoher numerischer Aufwand. Zudem ist nicht sichergestellt, dass
sich dieser doppelte hohe numerische Aufwand auch auszahlt. Wird
beispielsweise eine erste Kandidatenzahl durch ein solches Verfahren
auf Primalität überprüft, kann
sich (hypothetisch) ergeben, dass die Kandidatenzahl sich ganzzahlig
durch beispielsweise die elfte Primzahl aus einer vorgegebenen Menge
von Primzahlen teilen lässt.
Die Kandidatenzahl ist somit keine Primzahl mehr. Wird als zweite
Kandidatenzahl nunmehr die beispielsweise zur ersten Kandidatenzahl
nächstgrößere ungerade
Zahl gewählt,
ist wiederum das vorstehend beschriebene Dividieren notwendig, um
die zweite Kandidatenzahl auf Primalität zu überprüfen. Bei einem derartigen Dividieren
kann sich jedoch (wiederum hypothetisch) ergeben, dass die zweite
Kandidatenzahl bereits durch die fünfte Primzahl der vorgegebenen
Menge von Primzahlen ganzzahlig teilbar ist, und somit wiederum nicht
mehr teilerfremd in bezug auf die vorgegebene Menge von Primzahlen
ist. Ein solches Suchverfahren erfordert jedoch einen hohen numerischen
Aufwand, bis eine Kandidatenzahl gefunden wird, die teilerfremd zu
der vorgegebenen Menge von Primzahlen ist.
-
Hiervon
ausgehend liegt der vorliegenden Erfindung die Aufgabe zugrunde,
eine Möglichkeit
zu schaffen, um eine Kandidatenzahl schneller und numerisch effektiver
bereitstellen zu können.
-
Diese
Aufgabe wird durch eine Vorrichtung gemäß Anspruch 1 sowie ein Verfahren
gemäß Anspruch 20
gelöst.
-
Der
vorliegenden Erfindung liegt die Erkenntnis zugrunde, dass eine
Test- oder Kandidatenzahl unter Verwendung einer Prüffolge schnell
und numerisch effektiv bereitgestellt werden kann. Hierzu ist zunächst eine Ausgangszahl
zu liefern, worauf eine Prüffolge
mit einer Mehrzahl von ungekennzeichneten Folgegliedern bereitzustellen
ist, wobei jedes Folgeglied unter Berücksichtigung der Ausgangszahl
einer ganzen Zahl entspricht. Weiterhin ist eine Primzahl bereitzustellen,
die größer oder
kleiner als 3 ist. Durch den erfindungsgemäßen Ansatz ist es nunmehr möglich, ein
Folgeglied zu kennzeichnen, das einer ganzzahlig durch die Primzahl
teilbaren Zahl entspricht. Als Testzahl kann nun eine Zahl bereitgestellt
werden, die einem ungekennzeichneten Folgeglied entspricht. Eine
Zahl, die einem gekennzeichneten Folgeglied entspricht, wird nicht
als Testzahl bereitgestellt.
-
Gegenüber den
herkömmlichen
Ansätzen
zum Ermitteln einer Kandidatenzahl (oder Testzahl) wird nunmehr
nicht allein die betrachtete Kandidatenzahl durch die vorgegebenen
Primzahlen dividiert, um eine Teilerfreiheit der Kandidatenzahl
in bezug auf die vorgegebene Anzahl von Primzahlen zu ermitteln.
Vielmehr werden vorzugsweise mehrere Zahlen, denen Folgeglieder
der Prüffolge
entsprechen nacheinander durch eine der vorgegebenen Primzahlen
dividiert. Ist die Primzahl ein Teiler einer Zahl, der ein Folgeglied
entspricht, wird das Folgeglied gekennzeichnet. Erst wenn sichergestellt
ist, dass keine Zahl, der ein Folgeglied der Prüffolge entspricht, ganzzahlig
durch die betrachtete Primzahl teilbar ist, wird die Teilerfreiheit
von Zahlen, denen ein Folgeglied der Prüffolge entspricht, in bezug
auf eine weitere Primzahl untersucht. Gegenüber den Ansätzen gemäß dem Stand der Technik wird
somit zuerst eine Primzahl bereitgestellt und alle Folgeglieder
der Prüffolge,
die ganzzahlig durch die Primzahl teilbare Zahlen entsprechen gekennzeichnet.
Erst hieran anschließend wird
eine nächste
Primzahl bereitgestellt, worauf wiederum alle Folgeglieder der Prüffolge,
denen ganzzahlig durch die nächste
Primzahl teilbare Zahlen entspreche, gekennzeichnet. Ist ein Folgeglied
der Prüffolge
nicht gekennzeichnet worden, bedeutet dies, dass die dem Folgeglied
entsprechende Zahl nicht ganzzahlig durch eine bereitgestellte Primzahl
teilbar ist. Eine solche Zahl stellt somit eine bessere Kandidatenzahl
dar, als eine Zahl der ein gekennzeichnetes Folgeglied ent spricht,
da eine Zahl, der ein gekennzeichnetes Folgeglied entspricht, definitiv
keine Primzahl ist.
-
Gegenüber herkömmlichen
Ansätzen
bietet der erfindungsgemäße Ansatz
den Vorteil, schneller eine Kandidatenzahl zu finden, die teilerfremd
zu einer bereitgestellten Primzahl ist. Es wird somit nicht eine
einzelne Kandidatenzahl herausgegriffen, und durch eine vorbestimmte
Anzahl von Primzahlen geteilt, sondern vielmehr eine Mehrzahl von
potentiellen Kandidatenzahlen auf Teilerfreiheit in bezug auf eine
einzelne bereitgestellte Primzahl überprüft. Wird festgestellt, dass
eine erste betrachtete Kandidatenzahl nicht teilerfrei in bezug auf
eine bereitgestellte Primzahl ist, lässt sich beispielsweise durch
die Wahl einer nächsten
Kandidatenzahl, der ein ungekennzeichnetes Folgeglied entspricht,
sicherstellen, dass die nächste
Kandidatenzahl teilerfremd zu der einzelnen bereitgestellten Primzahl
ist, die bereits zum Bestimmen der Teilerfreiheit der ersten Kandidatenzahl
verwendet wurde. Der erfindungsgemäße Ansatz bietet somit den
Vorteil, dass beispielsweise zum Überprüfen von mehreren potentiellen
Kandidatenzahlen, eine einmal bereitgestellte Primzahl nicht mehrfach zum Überprüfen von
weiteren Kandidatenzahlen erneut bereitzustellen ist. Hierdurch
lässt sich
der numerischer Aufwand zum mehrfachen Bereitstellen der gleichen
Primzahl einsparen. Außerdem
lässt sich
der notwendige numerische Aufwand zum Ermitteln der nächsten Kandidatenzahl
optimieren, da lediglich Zahlen als Kandidatenzahlen zu wählen sind,
die nicht durch die bereitgestellte Primzahl teilbar sind.
-
Vorzugsweise
können
die einzelnen Folgeglieder der Prüffolge Bits sein. Gegenüber einer
Prüffolge, deren
Folgeglieder ganze Zahlen sind, kann nunmehr die Prüffolge mit
einem geringen Speicherbedarf realisiert und das Kennzeichnen der
Folgeglieder durch ein „Kippen" des entsprechenden
Bits durchgeführt
werden.
-
Weiterhin
bietet der erfindungsgemäße Ansatz
den Vorteil, dass Kennzeichnen von beispielsweise mehreren Folgegliedern
der Prüffolge,
die einer durch die Primzahl teilbaren Zahl entsprechen, numerisch
effizient durchzuführen.
Hierzu lassen sich beispielsweise alle diejenigen Folgeglieder der
Prüffolge
kennzeichnen, die in der Prüffolge
in einem vorbestimmten Abstand voneinander angeordnet sind, wobei
der Abstand von der bereitgestellten Primzahl abhängt. Durch
ein solches Vorgehen kann somit ein numerisch aufwendiges Dividieren
der potentiellen Kandidatenzahlen durch die bereitgestellte Primzahl
vermieden werden. Mit anderen Worten ausgedrückt, lassen sich ausgehend
von einem Folgeglied, das einer ganzzahlig durch die Primzahl teilbaren
Zahl entspricht, diejenigen Folgeglieder kennzeichnen, die durch
einen „Sprung" (oder mehrere „Sprünge") in der Prüffolge erreichbar
sind, wobei eine Sprungweite der Sprünge von der bereitgestellten
Primzahl abhängt.
Ein derartiges Kennzeichnen von Folgegliedern, die einer ganzzahlig
durch die Primzahl teilbaren Zahl entsprechen, trägt somit
zu einer Erhöhung
der numerischen Effizienz des erfindungsgemäßen Ansatzes gegenüber herkömmlichen
Ansätzen
bei.
-
Vorzugsweise
lassen sich auch beim Bereitstellen der Prüffolge bereits gekennzeichnete
Folgeglieder bereitstellen, die Zahlen entsprechen, die ganzzahlig
durch eine erste Primzahl teilbar sind. Hierbei kann die erste Primzahl
vorzugsweise kleiner als eine vordefinierte Grenze sein. Durch einen
derartigen Ansatz kann somit bereits ein Kennzeichnen von Folgegliedern
vermieden werden, die einer ganzzahlig durch die erste Primzahl
teilbar sind. Insbesondere für
kleine Primzahlen (d. h. Primzahlen, die kleiner als die vorbestimmte Grenze
sind) kann somit ein häufige
durchzuführendes
Kennzeichnen der entsprechenden Folgeglieder vermieden werden.
-
Weiterhin
kann das Kennzeichnen eines Folgegliedes lediglich das Kennzeichnen
eines ungekennzeichnenden Folgegliedes umfassen. Hierdurch lässt sich
numerischer Aufwand einsparen, indem bereits gekennzeichnete Folgeglieder
nicht nochmals zu bearbeiten (d. h. zu kennzeichnen) sind. Da gekennzeichnete Folgeglieder
bereits nicht mehr teilerfremd zu einer Primzahl sind, kommen Zahlen,
die bereits einmal gekennzeichneten Folgegliedern entsprechen, nicht
als Testzahl in Betracht.
-
Für den Fall,
dass eine Anzahl von ungekennzeichneten Folgegliedern der Prüffolge kleiner
als eine Anzahl von gekennzeichneten Folgeglieder der Prüffolge ist,
kann ein Speichern eines Positionswertes aller ungekennzeichneten
Prüffolgeglieder
erfolgen. Hieraus ergibt sich die Möglichkeit, nicht mehr die komplette Prüffolge abzuspeichern,
sondern lediglich einen Positionswert eines ungekennzeichneten Folgegliedes.
Dies bietet den Vorteil, den gegenüber einem Abspeichern der kompletten
Prüffolge
notwendigen Speicherbedarf reduzieren zu können.
-
Ferner
kann eine Testzahl bereitgestellt werden, während eine Prüfzahl mit
einem Primzahlüberprüfungsalgorithmus
auf Primalität
getestet wird. Resultiert aus dem Testen der Prüfzahl auf Primalität mit dem Primzahlüberprüfungsalgorithmus,
dass die Prüfzahl
keine Primzahl ist, kann durch den erfindungsgemäßen Ansatz somit vorteilhaft
eine weitere Prüfzahl
(d. h. weitere Testzahl) bereitgestellt werden. Da die bereitgestellte
weitere Testzahl bereits teilerfremd zu einer Primzahl (oder vorzugsweise
zu mehreren Primzahlen) ist, weist die bereitgestellte Testzahl
eine höhere
Wahrscheinlichkeit zum Bestehen des Primzahlüberprüfungsalgorithmus auf, als eine
Testzahl, die gemäß einem
herkömmlichen
Verfahren bereitgestellt wird. Der erfindungsgemäße Ansatz bietet somit den
Vorteil einer schnelleren und numerisch effektiveren Bereitstellung
einer Testzahl.
-
Bevorzugte
Ausführungsbeispiele
der vorliegenden Erfindung werden nachfolgend anhand der beiliegenden
Zeichnungen näher
erläutert.
Es zeigen:
-
1 ein
Blockschaltbild einer Vorrichtung zur Generierung von Primzahlen;
-
2 ein
Blockschaltbild einer Einrichtung zum Ermitteln, ob eine Testzahl
eine Primzahl ist oder ob mit einer vorbestimmten Wahrscheinlichkeit
gesagt werden kann, dass die Testzahl eine Primzahl ist gemäß 1;
-
3 ein
Blockschaltbild einer Einrichtung zum Überprüfen einer Aktuell-Testzahl
oder zum Bereitstellen einer Zukunftstestzahl gemäß 2;
-
4 ein
Blockschaltbild einer Einrichtung zum Überprüfen einer Aktuell-Testzahl
gemäß 3;
-
5 ein
Blockschaltbild einer Einrichtung zum Prüfen der Aktuell-Testzahl auf
Teilerfreiheit in Bezug auf Primzahlen bj gemäß 4;
-
6 ein
Blockschaltbild einer Einrichtung zum Bereitstellen einer Zukunftstestzahl
gemäß 3;
-
7 ein
Blockschaltbild einer Einrichtung zum Auswählen einer Zukunftstestzahl
aus einer Ausgangszahlenfolge gemäß 6;
-
8 eine
tabellarische Darstellung von Zwischenergebnissen eines Verfahrens
zum Bereitstellen einer Zukunftstestzahl;
-
9 eine
tabellarische Darstellung der Anzahl von Miller-Rabin-Tests in Abhängigkeit
einer Vorverarbeitung der durch den Miller-Rabin-Test zu testenden
Testzahl;
-
10 eine
tabellarische Darstellung der ersten 56 aufeinanderfolgenden Primzahlen;
und
-
11A–11D ein Flussdiagramm eines bevorzugten Ausführungsbeispiels
des erfindungsgemäßen Verfahrens,
das in mehreren Teildiagrammen dargestellt ist.
-
1 zeigt
ein bevorzugtes Ausführungsbeispiel
einer Vorrichtung 100 zum Ermitteln von Primzahlen. Die
Vorrichtung 100 umfasst hierbei eine Einrichtung 102 zum
Bestimmen einer Ausgangszahl AZ, die einen Ausgang aufweist, über den
die Ausgangszahl AZ ausgebbar ist. Ferner umfasst die Vorrichtung 100 eine
Einrichtung 104 zum Ermitteln, ob eine Testzahl TZ eine
Primzahl PZ ist oder mit einer vorbestimmten Wahrscheinlichkeit
gesagt werden kann, dass die Testzahl eine Primzahl ist. Die Einrichtung 104 zum
Ermitteln weist einen Eingang und einen Ausgang auf, wobei der Einrichtung 104 zum
Ermitteln über
den Eingang die Ausgangszahl AZ der Einrichtung 102 zum
Bestimmen einer Ausgangszahl AZ zuführbar ist. Vorzugsweise ist die
Einrichtung 104 zum Ermitteln ausgebildet, um über den
Ausgang PZout eine ermittelte Primzahl auszugeben.
-
Um
eine Ausgangszahl AZ zu bestimmen, umfasst die Einrichtung 102 zum
Bestimmen einer Ausgangszahl beispielsweise einen Zufallszahlengenerator,
durch den eine Zufallszahl erzeugbar ist, die als Ausgangszahl AZ über den
Ausgang der Einrichtung 102 ausgebbar ist. Die Einrichtung 104 zum
Ermitteln empfängt
die von der Einrichtung 102 zum Bestimmen ausgegebene Ausgangszahl
AZ und verarbeitet diese Ausgangszahl AZ mit einem nachfolgend beschriebenen
Algorithmus, so dass eine Primzahl oder eine Zahl, die mit einer
vorbestimmten Wahrscheinlichkeit eine Primzahl ist, ermittelt wird,
die über
den Ausgang PZout der Einrichtung 104 zum Ermitteln ausgegeben
wird. Um die an dem Ausgang PZout der Einrichtung 104 zum
Ermitteln ausgegebene Zahl zu ermitteln, wird durch die Einrichtung 104 zum
Ermitteln die empfangene Ausgangszahl AZ in eine Testzahl TZ umgewandelt,
wie nachfolgend detaillierter beschrieben wird.
-
2 zeigt
ein detaillierteres Blockschaltbild der in 1 dargestellten
Einrichtung 104 zum Ermitteln, ob eine Testzahl eine Primzahl
ist oder mit einer vorbestimmten Wahrscheinlichkeit gesagt werden
kann, dass die Testzahl eine Primzahl ist. Die Einrichtung 104 zum
Ermitteln umfasst eine Einrichtung 202 zum Überprüfen einer
Aktuell-Testzahl oder zum Bereitstellen einer Zukunftstestzahl,
eine Einrichtung 204 zum Testen sowie eine Einrichtung 206 zum
Erkennen. Die Einrichtung 202 zum Überprüfen einer Aktuell-Testzahl
oder zum Bereitstellen einer Zukunftstestzahl umfasst einen ersten
Eingang zum Empfangen der extern zuführbaren Ausgangszahl AZ, einen
zweiten Eingang zum Empfangen eines ersten Haltesignals STOP1, das
von der Einrichtung 206 zum Erkennen ausgebbar ist, einen
ersten Ausgang zum Ausgeben einer zu testenden Zahl (Testzahl TZ)
sowie einen zweiten Ausgang zum Ausgeben eines ersten Statussignals
PZ1. Die Einrichtung 204 zum Testen umfasst einen ersten
Eingang zum Empfangen der von der Einrichtung 202 zum Überprüfen oder
Bereitstellen ausgegebenen Testzahl TZ, einen zweiten Eingang zum
Empfangen des von der Einrichtung 202 zum Überprüfen oder
zum Bereitstellen ausgegebenen ersten Statussignals PZ1, einen dritten
Eingang zum Empfangen eines zweiten Haltesignals STOP2 von der Einrichtung 206 zum
Erkennen sowie einen Ausgang zum Ausgeben eines zweiten Statussignals
PZ2. Die Einrichtung 206 zum Erkennen umfasst einen ersten
Eingang zum Empfangen des von der Einrichtung 202 zum Überprüfen oder
zum Bereitstellen ausgegebenen ersten Statussignals PZ1, einen zweiten
Eingang zum Empfangen der von der Einrichtung 202 zum Überprüfen oder
Bereitstellen ausgegebenen Testzahl TZ, einen dritten Eingang zum
Empfangen des von der Einrichtung 204 zum Testen ausgegebenen
zweiten Statussignals PZ2, einen ersten Ausgang zum Ausgeben des
ersten Haltesignals STOP1 an die Einrichtung 202 zum Überprüfen oder
zum Bereitstellen, einen zweiten Ausgang zum Ausgeben der ermittelten
Primzahl sowie einen dritten Ausgang zum Ausgeben des zweiten Haltesignals STOP2
an die Einrichtung 204 zum Testen. Der zweite Ausgang der
Einrichtung 206 zum Erkennen ist ferner mit dem externen
Ausgang PZout der Einrichtung 104 zum Ermitteln verbunden.
-
Um
eine Primzahl zu ermitteln, wird zunächst in der Einrichtung 202 zum Überprüfen oder
zum Bereitstellen aus der empfangenen Ausgangszahl AZ durch den
nachfolgend detaillierter beschriebenen Algorithmus eine Aktuell-Testzahl
in eine Zukunftstestzahl umgewandelt und vorzugsweise durch einen
deterministischen ersten Primzahlüberprüfungsalgorithmus überprüft. Bei
Vorliegen einer nachfolgend näher
spezifizierten Bedingung kann die Aktuell-Testzahl über den
ersten Ausgang als Testzahl TZ an die Einrichtung 204 zum Testen übermittelt
werden. Ferner wird in der Einrichtung 204 zum Testen vorzugsweise
ein Miller-Rabin-Test mit der Testzahl TZ durch das von der Einrichtung 202 zum Überprüfen oder
zum Bereitstellen ausgegebene erste Statussignal PZ1 gestartet.
Das Ergebnis des Miller-Rabin-Tests kann von der Einrichtung 204 zum
Testen über
dessen Ausgang, d. h. als zweites Statussignal PZ2, an die Einrichtung 206 zum
Erkennen übertragen werden.
-
Ansprechend
auf das erste Statussignal PZ1 oder das zweite Statussignal PZ2
unterbricht die Einrichtung 206 zum Erkennen entweder über das
zweite Haltesignal STOP2 eine Signalverarbeitung in der Einrichtung 204 zum
Testen, über
das erste Haltesignal STOP1 eine Signalverarbeitung in der Einrichtung 202 zum Überprüfen oder
zum Bereitstellen oder gibt ansprechend auf das zweite Statussignal
PZ2 die Testzahl TZ als ermittelte Primzahl über den externen Ausgang PZout
aus, für
die durch die Einrichtung 204 zum Testen der Einrichtung 206 zum
Erkennen übermittelt
wurde, dass die Testzahl TZ als Primzahl anzusehen ist.
-
3 zeigt
ein detaillierteres Blockschaltbild der in 2 dargestellten
Einrichtung 202 zum Überprüfen oder
zum Bereitstellen. Die Einrichtung 202 zum Überprüfen oder
zum Be reitstellen umfasst demgemäß eine Einrichtung 302 zum Überprüfen einer
Aktuell-Testzahl sowie eine Einrichtung 304 zum Bereitstellen
einer Zukunftstestzahl. Die Einrichtung 302 zum Überprüfen einer
Aktuell-Testzahl umfasst einen ersten Eingang zum Empfangen der
Ausgangszahl AZ, einen zweiten Eingang zum Empfangen einer durch
die Einrichtung 304 zum Bereitstellen einer Zukunftstestzahl
ausgegebenen Zukunftstestzahl ZTZ und einen dritten Eingang zum
Empfangen des ersten Haltesignals STOP1. Ferner umfasst die Einrichtung 302 zum Überprüfen einer Aktuell-Testzahl
einen ersten Ausgang zum Ausgeben der Aktuell-Testzahl als Testzahl
TZ, einen zweiten Ausgang zum Ausgeben des ersten Statussignals
PZ1, einen dritten Ausgang zum Ausgeben einer Primzahl pi sowie einen vierten Ausgang zum Ausgeben
einer Variable αi. Die Einrichtung 304 zum Bereitstellen
der Zukunftstestzahl umfasst einen ersten Eingang zum Empfangen
der Ausgangszahl AZ, einen zweiten Eingang zum Empfangen des ersten
Haltesignals STOP1, einen dritten Eingang zum Empfangen der von
der Einrichtung 302 zum Überprüfen einer Aktuell-Testzahl
ausgegebenen Primzahl pi sowie einen vierten
Eingang zum Empfangen der von der Einrichtung 302 zum Überprüfen einer
Aktuell-Testzahl ausgegebenen Variable αi. Ferner
umfasst die Einrichtung 304 zum Bereitstellen der Zukunftstestzahl
einen Ausgang zum Ausgeben der bereitgestellten Zukunftstestzahl
ZTZ.
-
Die
Einrichtung 302 zum Überprüfen einer
Aktuell-Testzahl wandelt die Ausgangszahl AZ oder die Zukunftstestzahl
ZTZ gemäß dem nachfolgend
näher beschriebenen
Algorithmus in die Aktuell-Testzahl um und überprüft die Aktuell-Testzahl ebenfalls
gemäß dem nachfolgend
näher beschriebenen
Algorithmus, wobei die bei dem Überprüfen ermittelte
Primzahl pi und die Variable αi über den
dritten bzw. vierten Ausgang der Einrichtung 302 zum Überprüfen einer
Aktuell-Testzahl ausgegeben werden. In den 1 bis 7 wird
das Wort „Primzahl" auch abgekürzt mit „PZ" sowie das Wort „Testzahl" mit „TZ" gekennzeichnet. Über den
ersten Ausgang wird, wie beschrieben, die Aktuell-Testzahl als Testzahl
TZ ausgegeben. Über
den zweiten Ausgang wird, wie ebenfalls beschrieben, das erste Statussignal
PZ1 ausgegeben, das beispielsweise ein dreistufiges Signal ist, über das
mitteilbar ist, ob die Testzahl keine Primzahl ist (PZ1 = –1), ob
ungewiss ist, ob die Testzahl TZ eine Primzahl ist (PZ1 = 0) oder
ob die Testzahl teilerfremd zu einer vorgegebenen Menge von Primzahlen
ist (PZ1 = 1). Ferner wird durch die Einrichtung 304 zum
Bereitstellen einer Zukunftstestzahl aus der empfangenen Ausgangszahl
AZ unter Verwendung der Primzahl pi und
der Variable αi mit dem nachfolgend näher beschriebenen Algorithmus
eine neue Zahl ermittelt und diese neue Zahl über den Ausgang der Einrichtung 304 zum
Bereitstellen einer Zukunftstestzahl als Zukunftstestzahl ZTZ ausgegeben.
Das erste Haltesignal STOP1 ermöglicht
ein Abbrechen einer Signalverarbeitung in der Einrichtung 302 zum Überprüfen einer
Aktuell-Testzahl sowie der Einrichtung 304 zum Bereitstellen
einer Zukunftstestzahl.
-
4 zeigt
eine detailliertere Darstellung der in 3 dargestellten
Einrichtung 302 zum Überprüfen einer
Aktuell-Testzahl.
Die Einrichtung 302 zum Überprüfen einer Aktuell-Testzahl umfasst
eine Einrichtung 402 zum Bestimmen einer Aktuell-Testzahl,
eine Einrichtung 404 zum Bereitstellen von (vorzugsweise
mehreren) Primzahlen pj sowie eine Einrichtung 406 zum
Prüfen
der Aktuell-Testzahl auf Teilerfreiheit in Bezug auf die Primzahlen
pj. Die Einrichtung 402 zum Bestimmen
einer Aktuell-Testzahl umfasst einen ersten Eingang zum Empfangen
der Ausgangszahl AZ, einen zweiten Eingang zum Empfangen der Zukunftstestzahl
ZTZ, einen dritten Eingang zum Empfangen des ersten Statussignals
PZ1 sowie einen Ausgang zum Ausgeben der Aktuell-Testzahl als Testzahl
TZ. Die Einrichtung 404 zum Bereitstellen der Primzahlen
pj umfasst einen ersten Eingang zum Empfangen
des ersten Statussignals PZ1, einen zweiten Eingang zum Empfangen
des ersten Haltesignals STOP1 sowie einen Ausgang zum Ausgeben von
Primzahlen pj. Die Einrichtung 406 zum
Prüfen der
Aktuell-Testzahl auf Teilerfreiheit in Bezug auf die Primzahlen
pj umfasst einen ersten Eingang zum Empfangen
der Testzahl TZ von der Einrichtung 402 zum Bestimmen einer
Aktuell-Testzahl, einen zweiten Eingang zum Empfangen von Primzahlen
pj von der Einrichtung 404 zum
Bereitstellen von Primzahlen pj, einen dritten Eingang
zum Empfangen des ersten Haltesignals STOP1, einen ersten Ausgang
zum Ausgeben des ersten Statussignals PZ1, einen zweiten Ausgang
zum Ausgeben von einzelnen Primzahlen pi sowie
einen dritten Ausgang zum Ausgeben der Variablen αi.
-
Durch
die Einrichtung 402 zum Bestimmen einer Aktuell-Testzahl wird zunächst die
Ausgangszahl AZ als Aktuell-Testzahl
bestimmt, wobei nach einem erstmaligen Auftreten eines Wertes des
ersten Statussignals PZ1, der angibt, dass die Testzahl keine Primzahl
ist (d. h. PZ1 = –1)
im folgenden allein die Zukunftstestzahl ZTZ als Aktuell-Testzahl
bestimmt wird. Durch die Einrichtung 404 zum Bereitstellen
von Primzahlen pj wird eine in dem nachfolgend
näher beschriebenen
Algorithmus vordefinierte Anzahl von Primzahlen pj bereitgestellt.
Dies kann beispielsweise durch einen Algorithmus erfolgen, der als „Sieb des
Eratosthenes" bezeichnet wird.
Hierbei wird ansprechend auf einen positiven Wert des ersten Statussignals
PZ1 (PZ1 = 1), d. h. einer Mitteilung, dass die Testzahl teilerfremd
zu den Primzahlen pj ist, ein neuer Satz
von Primzahlen pj gemäß dem nachfolgend beschriebenen
Algorithmus bereitgestellt. Die Einrichtung 406 zum Prüfen der
Aktuell-Testzahl auf Teilerfreiheit in Bezug auf die Primzahlen
pj prüft,
ob die Aktuell-Testzahl TZ ganzzahlig durch jede einzelne Primzahl
pi der Primzahlen pj teilbar
ist. Die während
dem Prüfen
mit dem nachfolgend beschriebenen Algorithmus erhaltene Primzahl
pi und die Variable αi werden über den
zweiten und dritten Ausgang der Einrichtung 406 zum Prüfen der
Aktuell-Testzahl auf Teilerfreiheit in Bezug auf die Primzahlen
pj ausgegeben. Ausgehend von einem Initialzustand
des ersten Statussignals PZ1 der einen „unbestimmten" Zustand kennzeichnet
(d. h. PZ1 = 0) wird das erste Statussignal PZ1 auf einen negativen
Wert gesetzt (d. h. PZ1 = –1),
wenn die Aktuell-Testzahl ganzzahlig durch eine der Primzahlen pj teilbar. Ist die Aktuell-Testzahl durch
keine der Primzahlen pj ganzzahlig teilbar,
wird das erste Statussignal PZ1 auf den positiven Zustand (d. h.
PZ1 = 1) gesetzt, wodurch in der Einrichtung 404 zum Bereitstellen
von Primzahlen pj ein neuer Satz von Primzahlen
gemäß dem nachfolgend
beschriebenen Algorithmus bereitgestellt wird. Empfängt die
Einrichtung 406 zum Prüfen
der Aktuell-Testzahl auf Teilerfreiheit in Bezug auf die Primzahlen
pj einen neuen Satz von Primzahlen pj oder eine neue Testzahl TZ wird der Zustand
des ersten Statussignals PZ1 auf den „unbestimmten" Zustand (d. h. PZ1 =
0) zurückgesetzt.
Durch das Haltesignal STOP1 lässt
sich eine Signalverarbeitung der Einrichtung 404 zum Bereitstellen
von Primzahlen pj sowie der Einrichtung 406 zum
Prüfen
der Aktuell-Testzahl
auf Teilerfreiheit in Bezug auf die Primzahlen pj anhalten.
-
Die 5 zeigt
ein detaillierteres Blockschaltbild der in 4 dargestellten
Einrichtung 406 zum Prüfen
der Aktuell-Testzahl
auf Teilerfreiheit in Bezug auf die Primzahlen pj.
Die Einrichtung 406 zum Prüfen der Aktuell-Testzahl auf
Teilerfreiheit in Bezug auf die Primzahlen pj umfasst
eine Einrichtung 502 zum Auswählen einer Anzahl von Primzahlen
pi aus den Primzahlen pj,
eine Einrichtung 504 zum Bestimmen eines Produktes q aus
den ausgewählten
Primzahlen pi, eine Einrichtung 506 zum
Reduzieren einer Testzahl unter Verwendung des Produktes q, um eine
Variable β zu
erhalten, eine Einrichtung 508 zum Reduzieren von β unter Verwendung
eine der Primzahlen pi, um eine Variable αi zu
erhalten, eine Einrichtung 510 zum Prüfen, ob pi ein
Teiler der Testzahl TZ ist unter Verwendung von αi und
eine Einrichtung 512 zum Zählen. Die Einrichtung 502 zum Auswählen einer
Anzahl von Primzahlen pi aus den Primzahlen
pj umfasst einen ersten Eingang zum Empfangen
der Primzahlen pj, einen zweiten Eingang
zum Empfangen des ersten Haltesignals STOP1 sowie einen dritten
Eingang zum Empfangen eines Zählsignals 514 von
der Einrichtung 512 zum Zählen sowie einen Ausgang zum
Ausgeben der ausgewählten
Anzahl von Primzahlen pi der mit dem zweiten
Ausgang der Einrichtung 406 zum Prüfen der Aktuell-Testzahl auf
Teilerfreiheit in Bezug auf die Primzahlen pj verbunden
ist. Die Einrichtung 504 zum Bestimmen eines Produktes
q aus den ausgewählten
Primzahlen pi umfasst einen ersten Eingang
zum Empfangen der ausgewählten
Primzahlen pi, einen zweiten Eingang zum
Empfangen des ersten Haltesignals STOP1 sowie einen Ausgang zum
Ausgeben des bestimmten Produktes q. Die Einrichtung 506 zum
Reduzieren der Testzahl TZ unter Verwendung des Produktes q, um
eine Variable β zu
erhalten umfasst einen ersten Eingang zum Empfangen der extern zuführbaren
Testzahl TZ, einen zweiten Eingang zum Empfangen des Produktes q,
einen dritten Eingang zum Empfangen des ersten Haltesignals STOP1
und einen Ausgang zum Ausgeben der durch den nachfolgend beschriebenen
Algorithmus erhaltenen Variablen β.
Die Einrichtung 508 zum Reduzieren von β unter Verwendung der Primzahlen
pi, um eine Variable αi zu
erhalten umfasst einen ersten Eingang zum Empfangen der ausgewählten Primzahlen
pi, einen zweiten Eingang zum Empfangen
der Variable β,
einen dritten Eingang zum Empfangen des ersten Haltesignals STOP1
sowie einen Ausgang zum Ausgeben der durch den nachfolgend beschriebenen
Algorithmus erhaltenen Variable αi. Der Ausgang der Einrichtung 508 zum
Reduzieren von β unter
Verwendung der Primzahlen pi ist ferner
mit dem dritten Ausgang der Einrichtung 406 zum Prüfen der
Aktuell-Testzahl auf Teilerfreiheit in Bezug auf die Primzahlen
pj verbunden. Die Einrichtung 510 zum
Prüfen,
ob pi ein Teiler der Testzahl TZ ist unter
Verwendung von αi umfasst einen ersten Eingang zum Empfangen
der Variable αi, einen zweiten Eingang zum Empfangen des
ersten Haltesignals STOP1 sowie einen Ausgang zum Ausgeben des ersten
Statussignals PZ1, wobei der Ausgang der Einrichtung 510 zum
Prüfen,
ob pi ein Teiler der Testzahl TZ ist mit
dem ersten Ausgang der Einrichtung 406 zum Prüfen der
Aktuell-Testzahl auf Teilerfreiheit in Bezug auf die Primzahlen
pj verbunden ist. Die Einrichtung 512 zum
Zählen
umfasst einen ersten Eingang zum Empfangen der Variablen αi,
einen zweiten Eingang zum Empfangen des ersten Haltesignals STOP1,
einen dritten Eingang zum Empfangen des ersten Statussignals PZ1
sowie einen Ausgang zum Ausgeben des Zählsignals 514.
-
Gemäß dem nachfolgend
beschriebenen Algorithmus wird in der Einrichtung 502 zum
Auswählen
einer Anzahl von Primzahlen pi aus den Primzahlen
pj eine Anzahl von Primzahlen ausgewählt, wobei
diese Anzahl von Primzahlen pi in die Einrichtung 504 zum
Bestimmen eines Produktes q aus den ausgewählten Primzahlen pi übertragen
wird, die hieraus das Produkt q bildet. Alternativ kann auch eine
Gruppierung aller extern zugeführten
Primzahlen pj und einer Produktbildung aus
den einzelnen Gruppen der Primzahlen erfolgen, wobei die gebildeten
Produkte entsprechend zwischenzuspeichern sind. Gemäß einer
Berechnungsvorschrift des nachfolgend beschriebenen Algorithmus
wird in der Einrichtung 506 zum Reduzieren der Testzahl
TZ unter Verwendung des Produktes q, um eine Variable β zu erhalten,
die Variable β berechnet.
Hieran anschließend wird
die Variable β unter
Verwendung der ausgewählten
Primzahlen pi gemäß dem nachfolgend beschriebenen
Algorithmus reduziert, um zumindest eine Variable αi zu
erhalten. Gemäß dem nachfolgend
beschriebenen Algorithmus erfolgt hieran anschließend ein
Prüfen,
ob eine der Primzahlen pi ein Teiler der
Testzahlen TZ ist unter Verwendung der Variablen αi.
Hierbei wird das erste Statussignal PZ1 gemäß den Ausführungen zu 4 gesetzt.
Durch die Einrichtung 512 zum Zählen wird bestimmt, welche
Anzahl von Primzahlen pi bereits verarbeitet
wurde, wobei über
das Zählsignal 514 die
Einrichtung 502 zum Auswählen einer Anzahl von Primzahlen
pi aus den Primzahlen pj derart
gesteuert werden kann, dass durch die Einrichtung 502 zum
Auswählen eine
neue Anzahl bzw. Gruppe von Primzahlen pi aus
den Primzahlen pj ausgewählt wird. Ferner ist die Einrichtung 512 zum
Zählen
beispielsweise durch das erste Statussignal PZ1 bei einem positiven
Wert (d. h. PZ1 = 1) rücksetzbar,
wodurch gemäß den Ausführungen
zu 4 ein neuer Satz von Primzahlen pj bereitgestellt wird.
Ferner ist eine Signalverarbeitung der in 5 dargestellten
Einrichtungen durch das erste Haltesignal STOP1 unterbrechbar.
-
6 zeigt
ein detaillierteres Blockschaltbild der in 3 dargestellten
Einrichtung 304 zum Bereitstellen einer Zukunftstestzahl.
Die Einrichtung 304 zum Bereitstellen einer Zukunftstestzahl
umfasst eine Einrichtung 602 zum Bereitstellen einer Ausgangszahlenfolge
(AZ-Folge) sowie eine Einrichtung 604 zum Auswählen einer
Zukunftstestzahl ZTZ aus der Ausgangszahlenfolge. Die Einrichtung 602 zum
Bereitstellen einer Ausgangszahlenfolge umfasst einen ersten Eingang
zum Empfangen der Ausgangszahl AZ, einen zweiten Eingang zum Empfangen
des ersten Haltesignals STOP1 und einen Ausgang zum Ausgeben der
bereitgestellten Ausgangszahlenfolge. Die Einrichtung 604 zum
Auswählen
einer Zukunftstestzahl ZTZ aus der Ausgangszahlenfolge umfasst einen
ersten Eingang zum Empfangen der Ausgangszahlenfolge von der Einrichtung 602 zum
Bereitstellen einer Ausgangszahlenfolge, einen zweiten Eingang zum
Empfangen des ersten Haltesignals STOP1, einen dritten Eingang zum
Empfangen von Primzahlen pi, einen vierten
Eingang zum Empfangen der Variablen αi sowie
einen Ausgang zum Ausgeben der ausgewählten Zukunftstestzahl ZTZ.
-
Die
Einrichtung 602 zum Bereitstellen einer Ausgangszahlenfolge
stellt gemäß dem nachfolgend
beschriebenen Algorithmus aus der Ausgangszahl AZ die Ausgangszahlenfolge
AZ-Folge bereit, aus der die Einrichtung 604 zum Auswählen einer
Zukunftstestzahl ZTZ ebenfalls gemäß dem nachfolgend beschriebenen Algorithmus
unter Verwendung der Primzahlen pi und der
Variablen αi die Zukunftstestzahl ZTZ ermittelt, die über den
Ausgang der Einrichtung 604 zum Auswählen einer Zukunftstestzahl
ausgegeben wird. Mittels des ersten Haltesignals STOP1 kann ein
Betrieb der in 6 dargestellten Einrichtungen
angehalten werden.
-
7 zeigt
ein detaillierteres Blockschaltbild der in 6 dargestellten
Einrichtung 604 zum Auswählen einer Zukunftstestzahl
ZTZ aus der Ausgangszahlenfolge. Die Einrichtung 604 zum
Auswählen
einer Zukunftstestzahl ZTZ umfasst eine Einrichtung 702 zum
Bestimmen einer charakteristischen Bitfolge σ, eine Einrichtung 704 zum
Berechnen einer Variablen ki, eine Einrichtung 706 zum Überprüfen und
Modifizieren der charakteristischen Bitfolge σ sowie eine Einrichtung 708 zum
Bestimmen einer Zukunftstestzahl aus der überprüften und modifizierten Bitfolge σ'. Die Einrichtung 702 zum
Bestimmen einer charakteristischen Bitfolge σ umfasst einen ersten Eingang
zum Empfangen der Ausgangszahlenfolge, einen zweiten Eingang zum
Empfangen der überprüften und
modifizierten Bitfolge σ', einen dritten Eingang
zum Empfangen des ersten Haltesignals STOP1 sowie einen Ausgang
zum Ausgeben der bestimmten charakteristischen Bitfolge σ. Die Einrichtung 704 zum
Berechnen einer Variablen ki umfasst einen
ersten Eingang zum Empfangen von Primzahlen pi,
einen zweiten Eingang zum Empfangen der Variablen αi,
einen dritten Eingang zum Empfangen des ersten Haltesignals STOP1
sowie einen Ausgang zum Ausgeben der berechneten Variablen ki. Die Einrichtung 706 zum Überprüfen und
Modifizieren der charakteristischen Bitfolge σ umfasst einen ersten Eingang
zum Empfangen der charakteristischen Bitfolge σ von der Einrichtung 702 zum
Bestimmen einer charakteristischen Bitfolge σ, einen zweiten Eingang zum
Empfangen von Primzahlen pi, einen dritten
Eingang zum Empfangen der Variablen ki von
der Einrichtung 704 zum Berechnen einer Variablen ki, einen vierten Eingang zum Empfangen des
ersten Haltesignals STOP1 sowie einen Ausgang zum Ausgeben der überprüften und
modifizierten charakteristischen Bitfolge σ'. Die Einrichtung 708 zum Bestimmen
einer Zukunftstestzahl ZTZ aus der überprüften und modifizierten Bitfolge σ' umfasst einen ersten
Eingang zum Empfangen der überprüften und
modifizierten charakteristischen Bitfolge σ', einen zweiten Eingang zum Empfangen
des ersten Haltesignals STOP1 sowie einen Ausgang zum Ausgeben der
bestimmten Zukunftstestzahl ZTZ.
-
Die
Einrichtung 702 zum Bestimmen einer charakteristischen
Bitfolge σ bestimmt
gemäß dem nachfolgend
beschriebenen Algorithmus aus der Ausgangszahlenfolge eine charakteristische
Bitfolge σ oder
setzt die charakteristische Bitfolge σ gleich der empfangenen überprüften und
modifizierten charakteristi schen Bitfolge σ'. Die Einrichtung 704 zum Berechnen
einer Variable ki berechnet gemäß dem nachfolgend
beschriebenen Algorithmus aus den Werten einer Primzahl pi und der Variablen αi die
Variable ki und stellt diese der Einrichtung 706 zum Überprüfen und
Modifizieren der charakteristischen Bitfolge σ bereit. Die Einrichtung 706 zum Überprüfen und
Modifizieren der charakteristischen Bitfolge σ überprüft und modifiziert die charakteristische
Bitfolge σ gemäß dem nachfolgend
beschriebenen Algorithmus unter Verwendung der Variablen ki sowie der Primzahl pi und
gibt die überprüfte und
modifizierte charakteristische Bitfolge σ' über
den Ausgang der Einrichtung 706 zum Überprüfen und Modifizieren der charakteristischen
Bitfolge σ aus.
Gemäß dem nachfolgend beschriebenen
Algorithmus bestimmt die Einrichtung 708 aus der überprüften und
modifizierten charakteristischen Bitfolge σ' eine Zukunftstestzahl und gibt diese
aus. Alternativ kann auch als weitere Bedingung gesetzt werden,
dass die Zukunftstestzahl mindestens um 20 Stellen größer sein
soll, als die Aktuell-Testzahl.
Mittels des ersten Haltesignals STOP1 kann ein Betrieb der in 7 dargestellten
Einrichtungen angehalten werden.
-
Als
besonders vorteilhaft erweist sich ein derartiges Vorgehen dadurch,
dass es durch den nachfolgend beschriebenen Algorithmus möglich ist,
sehr schnell eine Zukunftstestzahl ZTZ zu finden, die teilerfremd zu
den vorausgehend getesteten Primzahlen ist. Gegenüber den
Verfahren gemäß dem Stand
der Technik ermöglicht
ein derartiges Vorgehen somit ein deutlich schnelleres Auffinden
von Testkandidaten, die eine hohe Wahrscheinlichkeit zum Bestehen
des vorzugsweise einzusetzenden Miller-Rabin-Tests in der Einrichtung 204 zum
Testen aufweisen. Hieraus resultiert ein beschleunigtes Auffinden
einer großen
Primzahl.
-
Nachfolgend
wird ein Ausführungsbeispiel
der vorliegenden Erfindung beschrieben, das einen Hardware-optimierten
Algorithmus zur schnellen Primzahlgenerierung aufweist.
-
Einleitend
zur Beschreibung des erfindungsgemäßen Algorithmus ist zu sagen,
dass die meisten Verfahren zur Berechnung großer Primzahlen aus zwei Teilaufgaben
bestehen:
- 1. Der Erzeugung geeigneter Testkandidaten;
und
- 2. der Anwendung eines schnellen Primzahltests auf die Testkandidaten.
-
Um
den Prozess der Primzahlerzeugung zu beschleunigen, bieten sich
daher drei Strategien an:
Strategie A: einen schnelleren Primzahltest
zu finden;
Strategie B: eine Qualität der Testkandidaten zu verbessern;
und
Strategie C: die oben genannten beiden Teilaufgaben (1)
und (2) parallel auszuführen.
-
Der
erfindungsgemäße Ansatz
der Primzahlermittlung verfolgt die Strategien B und C.
-
Zu
Strategie A: Primzahltests können
in zwei Gruppen eingeteilt werden, in deterministische und probabilistische.
Die probabilistischen Tests sind effizienter und daher für praktische
Zwecke geeigneter. Sie haben aber gegenüber deterministischen Tests
den Nachteil, dass sie nicht nur von Primzahlen, sondern auch von
einigen wenigen zusammengesetzten Zahlen bestanden werden. Eine
zusammengesetzte Zahl, die einen probabilistischen Primzahltest
besteht, heißt
Pseudoprimzahl (in Bezug auf den jeweiligen Test). Der schnellste
zur Zeit bekannte probabilistische Primzahltest ist der Miller-Rabin-Test. Er wurde
in den 70er Jahren des 20. Jahrhunderts von Selfridge, Miller und
Rabin entwickelt. Seither ist das Interesse der Mathematiker an
der Entwicklung neuer Primzahl tests stark angestiegen. Das steht
im Zusammenhang mit der Entdeckung asymmetrischer Chiffriersysteme
in den letzten 25 Jahren, ihrem weltweiten Einsatz und einem damit
einhergehenden zunehmenden Bedarf an großen Primzahlen. Trotzdem wurde
bisher kein schnellerer Primzahltest als der Miller-Rabin-Test gefunden.
-
Der
wesentliche Rechenaufwand beim Miller-Rabin-Test (wie auch beim
Fermat-Test) besteht darin eine sehr hohe Potenz einer relativ kleinen
Basis b modulo z zu berechnen, wobei z die zu testenden Kandidatenzahl
ist, also eine sehr große
Zahl. Der vorzugsweise einzusetzende Coprozessor ist eigens so konstruiert,
dass er modulare Multiplikationen mit langen Zahlen schnell durchführen kann – zum Unterschied
von einem vorzugsweise einzusetzenden Hauptprozessor. Aus diesem
Grund werden die Miller-Rabin-Tests im Coprozessor durchgeführt.
-
Einer
groben Einschätzung
nach wäre
es nicht zielführend,
den Prozeß der
Primzahlgenerierung durch Verfolgen von Strategie A vorantreiben
zu wollen.
-
Zu
Strategie B: Die meisten Verfahren zur Primzahlgenerierung sind
ihrem Wesen nach Suchverfahren. Es werden so lange gewisse Zahlen
mit Hilfe eines Primzahltests überprüft bis man
eine Primzahl gefunden hat. Die Kunst besteht darin, den Suchprozeß möglichst
kurz zu gestalten.
-
Der
Anteil der Primzahlen unter großen
natürlichen
Zahlen mit einer Länge
von 1024 Bit beträgt
ungefähr
0,14%. Statistisch betrachtet ist also etwa jede 710te ganze Zahl
zwischen 21023 und 21024 eine
Primzahl. Daraus folgt, dass die Wahrscheinlichkeit, dass eine zufällig gewählte 1024
Bit große
ungerade natürliche
Zahl eine Primzahl ist, etwa 1/355 beträgt.
-
Sei
p
1 = 2, p
2 = 3,
p
3 = 5, ... die Folge der Primzahlen. Dann
gilt allgemeiner: Die Wahrscheinlichkeit, dass eine zufällig gewählte 1024
Bit große
natürliche
Zahl, die durch keine der ersten r Primzahlen p
1,
..., p
r teilbar ist, eine Primzahl ist,
ungefähr
beträgt,
wobei ln N der natürliche Logarithmus
von N = 2
1024 ist. Es ist ersichtlich, dass
die Wahrscheinlichkeit mit wachsendem r zunimmt. Für r = 1000
ergibt die Auswertung des Ausdrucks (1) ca. 2,26%, also in etwa
1/44. Die Strategie B besteht darin, den Parameter r so groß wie möglich werden
zu lassen.
-
Zu
Strategie C: Bei vielen Verfahren der Primzahlgenerierung stellt
sich die folgende Problematik: zu um so mehr kleinen Primzahlen
die Testzahl teilerfremd ist, um so weniger Primzahltests sind zwar
im Durchschnitt erforderlich aber um so aufwendiger ist dafür die Kandidatenberechnung.
Das erfindungsgemäße Verfahren
ist so konzipiert, dass es eine vorhandene Hardware eines für kryptographische
Operationen ausgelegten Halbleiterchips optimal ausnutzt. Der Halbleiterchip
umfasst hierbei vorzugsweise einen Hauptprozessor und einen kryptographischen
Coprozessor. Sowohl der Hauptprozessor als auch der kryptographische
Coprozessor sind hierbei an dem Prozess der Primzahlengenerierung
beteiligt, und zwar in einer Weise in der beide Prozessoren ständig voll
ausgelastet sind, was sich somit deutlich vorteilhaft gegenüber den
herkömmlichen Ansätzen ausweist.
Die Berechnung der Testkandidaten (Testzahlen TZ) übernimmt
im wesentlichen der Hauptprozessor (HP), während die vorzugsweise einzusetzenden
Miller-Rabin-Tests
(d. h. dem zweiten Primzahlüberprüfungsalgorithmus
in der Einrichtung 204 zum Testen) von dem Coprozessor
abgearbeitet werden können.
-
Für ein besseres
Verständnis
des eigentlichen erfindungsgemäßen Algorithmus
soll zunächst
eine Vorversion (im folgenden als Voralgorithmus bezeichnet) beschrieben
werden. Ein Ausführungsbeispiel
des eigentlich zu realisierenden erfindungsgemäßen Algorithmus wird nachfolgend
Bezug nehmend auf die Schritte des Voralgorithmus in späteren Ausführungen
beschrieben. Das Ausführungsbeispiel
des eigentlich zu realisierenden erfindungsgemäßen Algorithmus kann dabei
als eine ausgebaute und verfeinerte Version des Voralgorithmus aufgefaßt werden.
-
Um
eine l Bit große
Zahl zu berechnen, wird zu Beginn mit Hilfe eines Zufallszahlengenerators
eine l Bit große
ungerade Zufallszahl z (= Ausgangszahl AZ) erzeugt. Von Interesse
ist insbesondere der Fall l = 1024, da eine Primzahl der Länge 1024
Bit gemäß dem Stand
der Technik für
einen RSA-Schlüssel
benötigt wird.
Für zukünftige Anwendungen
sind jedoch auch größere Werte
von l interessant. Die von dem Voralgorithmus (bzw. dem eigentlichen
Algorithmus) schließlich
ausgegebene Primzahl ist die kleinste Primzahl in der Folge
-
Wie
bereits ausgeführt,
werden bei der Abarbeitung des Voralgorithmus oder des zu realisierenden
Algorithmus die Testkandidaten (Testzahlen TZ) im Hauptprozessor
berechnet. Die auszuführenden
Miller-Rabin-Tests werden von dem kryptographischen Coprozessor
ausgeführt.
-
Zunächst erfolgt
die Bestimmung des ersten Testkandidaten. Es werden zunächst die
r – l
Primzahlen p
2, ..., p
r betrachtet.
Die Zufallszahl z wird modulo jeder einzelnen dieser Primzahlen
reduziert. Sei
-
Für x, y ∊ Z
und n ∊ N bedeutet x = y mod n, dass x ≡ y mod n und 0 ≤ x ≤ n – 1 gilt.
Es wird ferner der Ringhomomorphismus
betrachtet.
-
Mit
Hilfe der Abbildung ψ kann
(2) auch durch die kompaktere Form
ausgedrückt werden. Wenn alle α
i ≠ 0 sind, dann
ist z teilerfremd zu jeder der r – 1 Primzahlen p
2,
..., p
r. Da z ungerade ist, ist z dann teilerfremd
zu den ersten r Primzahlen p
1, ..., p
r. In diesem Fall ist das Element ψ(z) eine
Einheit im Ring R.
-
Wenn
dagegen ein j ∊ {2, ..., r} existiert mit α
j =
0, dann ist p
j ein Teiler von z. In diesem
Fall ist ψ(z)
ein Nullteiler im Ring R. wenn ψ(z)
= (α
2, ..., α
r) ∊ R eine Einheit ist, dann ist
z der erste Testkandidat. Andernfalls berechnet man ψ (z + 2)
= (β
2, ..., β
r) durch
-
Wenn
alle Elemente β
2, ..., β
r von Null verschieden sind, mit anderen
Worten wenn ψ(z
+ 2) ∊ R eine Einheit ist, dann ist z + 2 der erste Testkandidat.
Andernfalls berechnet man aus den Elementen β
i, 2 ≤ β
i ≤ r, gemäß der Vorschriften
in (4)
-
Das
Verfahren wird so lange fortgesetzt bis man ein j ∊ N gefunden
hat, für
das ψ(z
+ 2j) ∊ R eine Einheit ist. Die Zahl z + 2j ist dann der
erste Testkandidat. Die Zahl z + 2j, die vorzugsweise im Hauptprozessor berechnet
wurde, wird nun in den kryptographischer Coprozessor übertragen.
Dort wird z + 2j mit Hilfe des einzusetzenden Miller-Rabin-Tests
auf Primalität
hin geprüft.
-
Während der
Coprozessor für
den Testkandidaten z + 2j den Miller-Rabin-Test durchführt, wird
im Hauptprozessor schon der nächste
Testkandidat berechnet. Dazu wird z + 2j umbenannt zu z (beispielsweise durch
die Einrichtung 402 zum Bestimmen einer Aktuell-Testzahl,
wobei z + 2j die Zukunftstestzahl ZTZ ist und z die Aktuell-Testzahl
TZ ist). Dann wird das oben beschrieben Verfahren zur Berechnung
des ersten Testkandidaten wiederholt.
-
Grob
gesagt, sollte r so gewählt
werden, dass die Zeit, die der Hauptprozessor für die Berechnung eines Testkandidaten
benötigt,
in etwa die gleiche ist, die der Coprozessor für die Ausführung eines Miller-Rabin-Tests
braucht.
-
Die
Größe von r
wird bei dem Voralgorithmus durch zwei Umstände begrenzt:
-
- (i) Durch die Rechenzeit, die der Hauptprozessor
zur Bestimmung des nächsten
Testkandidaten (d. h. der Zufallszahl ZTZ) benötigt. Diese Zeit darf nicht
länger
sein als die Zeit, die der Coprozessor für die Ausführung eines Miller-Rabin-Tests
benötigt.
- (ii) Durch den Speicherbedarf der Primzahlen p2,
..., pr und den zugehörigen Resten von z modulo pi, 2 ≤ i ≤ r. Die Beschränkung (ii)
wird durch den im folgenden beschriebenen eigentlich zu realisierenden
Algorithmus beseitigt.
-
Ein
weiterer Nachteil des Voralgorithmus besteht darin, dass die Reduktionen
von z modulo der Primzahlen pi im Hauptprozessor
ausgeführt
werden. Die Zahl z (d. h. die Testzahl TZ) hat aber beispielsweise
1024 Binärstellen
und der Hauptprozessor ist im allgemeinen nicht ausgelegt für das Rechnen
mit derart großen Zahlen.
Operationen mit großen
Zahlen kann jedoch der Coprozessor viel schneller durchführen. Dieser
Umstand wird bei dem zu realisierenden Algorithmus ebenfalls berücksichtigt.
-
Nach
diesen Vorüberlegungen
unter Zuhilfenahme des Voralgorithmus soll nun der zu realisierende Algorithmus
als ein Ausführungsbeispiel
der vorliegenden Erfindung näher
erläutert
werden.
-
Sei
z eine ungerade natürliche
Zahl (etwa die 1024 Bit große
Zufallszahl aus dem Voralgorithmus), und sei p ≥ 3 eine Primzahl. Man betrachte
die arithmetische Folge
-
Es
ist durch den Algorithmus zu bestimmen, welche Glieder dieser Folge
durch p teilbar sind.
-
Die
lineare Kongruenz
ist äquivalent zu
mit α = z mod p ∊ {0, ...,
p – 1}.
Die Kongruenzen (5) und (6) haben genau eine Lösung n = k in der Menge {0, ...,
p – 1}.
Dabei kann k folgendermaßen
berechnet werden:
-
Die
sämtlichen
Lösungen
von (5) sind dann gegeben durch n = k + jp, j = 0, 1, .... Diese
elementaren aber wichtigen Fakten lassen sich in dem folgenden mathematischen
Lemma zusammenfassen:
Lemma 1: Sie z eine ungerade natürliche Zahl
und sei p ≥ 3
eine Primzahl. Sei α =
z mod p. Die durch p teilbaren Folgeglieder von
sind gegeben durch
wobei k ∊ {0, ...,
p – 1}
gegeben ist durch (7).
-
Zum
Erzeugen ist nun zu der vorgegebenen ungeraden Zufallszahl z eine
Folge von endlichen Bitfolgen σ1, σ2, ... der Länge L. Ein möglicher
Wert für
L wäre
2048. Die Folge σr heißt
rte charakteristische Bitfolge zur Zahl z. Die erste charakteristische
Bitfolge σl ist die konstante Folge, deren sämtliche
Glieder gleich 1 sind. Die weiteren charakteristischen Bitfolgen
werden rekursiv definiert.
-
Sei
r ≥ 2 und
sei
die (r – l)te charakteristische Bitfolge.
Zur Bestimmung von σ
r wird die rte Primzahl p
r benötigt. Sei α
r =
z mod p
r und sei k
r die
eindeutige Lösung
der linearen Kongruenz α
r + 2k
r ≡ 0 mod
p
r mit 0 ≤ k
r ≤ p
r – 1.
(Die Zahl k
r kann durch (7) effizient berechnet
werden.) Die Glieder der Folge
sind dann
-
Für x ∊ R
ist [x] die größte ganze
Zahl ≤ x.
Der folgende Satz 1 ist eine direkte Konsequenz aus dem genannten
Lemma 1.
-
Satz
1. Sei
die r-te charakteristische
Bitfolge zur ungeraden Zahl z ∊ N. Dann gilt für n ∊ {0,
..., L – 1}:
Die Zahl z + 2n ist genau dann teilerfremd zu dem Produkt der ersten
r Primzahlen, wenn b
n = 1 ist.
-
Die
folgende Definition 1 vereinfacht die weiteren Erörterungen.
-
Definition
1. Eine natürliche
Zahl n ≥ 2
heißt
Kandidat der Qualität
r ≥ 1, wenn
n teilerfremd ist zu dem Produkt der ersten r Primzahlen.
-
Somit
sind ungerade Zahlen Testkandidaten der Qualität 1. Die nte Primzahl pn ist ein Kandidat der Qualität r für l ≤ r ≤ n – 1. Die
Zahl 55 ist ein Kandidat der Qualität 1 und 2, aber kein Kandidat
der Qualität
r ≥ 3. Dies
resultiert daher, dass die Zahl 55 nicht teilerfremd zur Primzahl
p3 = 5 ist.
-
Das
Konzept der charakteristischen Bitfolge ermöglicht es, Testkandidaten der
Qualität
r zu erzeugen, ohne dass deswegen alle Primzahlen p2,
..., pr in einem Halbleiterchip gespeichert
werden müssen.
Es muss nur jede einzelne dieser Primzahlen kurzzeitig zur Verfügung stehen.
Ein derartiges Vorgehen bedeutet insbesondere, dass zur Primzahlenberechnung
gemäß dem erfindungsgemäßen Ansatz
ein deutlich geringerer Speicher zur Verfügung stehen kann. Das Verändern der
Glieder der Bitfolge erfolgt hierbei vorzugsweise in der Einrichtung 706 zum Überprüfen und
Modifizieren der charakteristischen Bitfolge σ.
-
Zur
Berechnung der charakteristischen Bitfolge σ ist zu sagen, dass die Berechnung
der r-ten charakteristischen Bitfolge vereinfacht werden kann, wenn
p
r größer wird
als L. Tatsächlich
tritt die Situation bei dem hier vorgestellten Algorithmus schon
sehr bald ein. Sei
die (r – 1)-te und
die r-te charakteristische
Bitfolge. Insbesondere sind die beiden folgenden Fälle hier
von Interesse.
Fall 1
: p
r ≥ L und α
r =
0.
Dann ist b
0 = 0 und b
n =
a
n für
n = 1, 2, ..., L – 1.
Fall
2: p
r ≥ 2L – 1 und α
r ≥ 1 gerade.
Dann
ist b
n = a
n für n = 0,
1, ..., L – 1.
-
Beweis:
-
- Ad Fall 1: Nach (7) impliziert αr =
0, dass kr = 0 ist. Somit folgt die Behauptung
aus (8).
- Ad Fall 2: Aus (7) und αr ≤ pr – 1
folgt so dass die Behauptung aus
(8) folgt.
-
Ende des Beweises
-
Für L = 2048
ist p310 = 2053 die erste Primzahl, die
größer oder
gleich L ist. Die erste Primzahl pr mit pr ≥ 2L – 1 ist
pr = p565 = 4099.
-
Das
in den vorausgehenden Ausführungen
beschriebenen Siebverfahren (d. h. das Verfahren zum Überprüfen einer
Aktuell-Testzahl
und zum Bereitstellen einer Zukunftstestzahl) wird vorzugsweise
in der Einrichtung 302 zum Überprüfen einer Aktuell-Testzahl
und der Einrichtung 304 zum Bereitstellen einer Zukunftstestzahl
ausgeführt.
Nachfolgend wird das Siebverfahren anhand eines Beispiels näher erläutert.
-
Gegeben
sei die (Zufalls-)Zahl z = 81783 (die als Ausgangszahl AZ verwendet
wird). Gesucht sind die Testkandidaten der Qualität 8 unter
den Elementen z + 2j, 0 ≤ j ≤ 9.
-
Unter
Rückgriff
auf die in 8 dargestellte tabellarische
Darstellung von Zwischenergebnissen des Verfahrens zum Überprüfen einer
Aktuell-Testzahl und zum Bereitstellen einer Zukunftstestzahl ZTZ
soll in den nachfolgenden Ausführungen
das genannte Verfahren näher
beschrieben werden. Zur Initialisie rung werden in jeder der Zellen
bj, 0 ≤ j ≤ 9, der Zeile
n = 1 in der 8 der Wert „1" eingetragen.
-
Berechnung von Zeile 2:
-
- p2 = 3, α2 =
z mod p2 = 0 und (7) liefert k2 =
0.
- Aus (8) folgt b0 = b3 =
b6 = b9 = 0.
-
Berechnung von Zeile n
= 3:
-
- p3 = 5, α3 =
z mod p3 = 3 und (7) liefert
- Aus (8) folgt b1 = b6 =
0.
-
Berechnung von Zeile n
= 4:
-
- p4 = 7, α4 =
z mod p4 = 2 und (7) liefert
- Aus (8) folgt b6 = 0.
-
Das
Verfahren kann beliebig fortgesetzt werden. Zur Beantwortung der
eingangs gestellten Frage (d. h. zur Suche der Testkandidaten der
Qualität
8 unter dem Element z + 2j) braucht es an dieser Stelle aber nur bis
zur Zeile n = 8 fortgeführt
werden. Ein Blick auf die achte Zeile aus 8 zeigt,
dass die Zellen b4, b5,
b7 und b8 den Wert
1 enthalten. Daraus folgt, dass z + 8, z + 10, z + 14 und z + 16
Testkandidaten der Qualität
8 sind. Tatsächlich
ist z + 16 = 81799 eine Primzahl.
-
Man
betrachte, dass zur Berechnung der nten Zeile aus 8 nur
die Zahl z, die nte Primzahl pn und die
Einträge
pj, 0 ≤ j ≤ 9, der (n – 1)ten
Zeile erforderlich sind. Weitere Daten (insbesondere die Daten,
die zur Berechnung von vorangehenden Zeilen benötigt wurden) können gelöscht werden.
Man beachte auch, dass eine Primzahl pn,
die einmal bearbeitet wurde, in der Folge nicht mehr benötigt wird.
Hierdurch ergibt sich wiederum eine Einsparmöglichkeit des zur Primzahlenberechnung
notwendigen Speichers, was sich in einem geringeren notwendigen
Hardwareaufwand zur Primzahlgenerierung gemäß dem erfindungsgemäßen Ansatz vorteilhaft
auswirkt.
-
Aus 8 ist
somit zu entnehmen, dass unter Verwendung des erfindungsgemäßen Ansatzes
auf schnelle und numerisch effektive Weise eine Testzahl bereitgestellt
werden kann. Dies resultiert daraus, dass im erfindungsgemäßen Ansatz
bereits mehrere potentielle Testzahlen auf Teilerfreiheit in bezug
auf eine Primzahl untersucht werden. Demgegenüber wird im Stand der Technik
jeweils eine Testzahl auf Teilerfreiheit in bezug auf mehrere Primzahlen überprüft. Anhand
der Tabelle aus 8 lässt sich somit vereinfachend
sagen, dass im erfindungsgemäßen Ansatz
zeilenweise (d. h. eine Untersuchung von mehreren potentiellen Kandidatenzahlen
mit einer einzelnen Primzahl) vorgegangen wird. Demgegenüber wird
im Stand der Technik spaltenweise vorgegangen, d. h. eine einzelne
Kandidatenzahl wird unter Berücksichtigung
von mehreren Primzahlen überprüft.
-
Der
Aufbau der charakteristischen Bitfolge σ kann dabei vorzugsweise dadurch
erfolgen, dass (wie beschrieben) zunächst eine Ausgangszahl z geliefert
wird. Ausgehend von dieser Ausgangszahl z wird beispielsweise eine
Zahlenfolge z' angenommen,
wobei die einzelnen Glieder der Zahlenfolge z' voneinander einen vorbestimmten Abstand
aufweisen. In dem hier beschriebenen Ausführungsbeispiel ist die Ausgangszahl
z mit einem Wert von 81783 vorgegeben. Um die charakteristische
Bitfolge aufzubauen, werden nun Zahlen angenommen, die größer als
die Ausgangszahl z sind und voneinander einen Abstand von 2 umfassen
(d. h. der rekursiven Gleichung z' = z + 2j mit j = 0, 1, ..., 9 folgen).
Hieraus resultiert eine Zahlenfolge z', die die nächsten (d. h. auf die Ausgangszahl
z folgenden) neun ungeraden Zahlen umfasst.
-
Eine
derartige aufgebaute Zahlenfolge z' ist jedoch nicht zwingend notwendig,
um den erfindungsgemäßen Ansatz
durchführen
zu können.
Es ist alternativ auch denkbar, dass die Ausgangszahl z beispielsweise nicht
die kleinste Zahl in der Zahlenfolge z' ist. Die Ausgangszahl z kann beispielsweise
auch die größte Zahl oder
eine Zahl innerhalb der Zahlenfolge z' sein. Weiterhin ist es nicht notwendig,
dass sich zwei benachbarte Zahlen der Zahlenfolge um den Wert 2
unterscheiden. Es ist auch denkbar, dass sich zwei benachbarte Zahlen der
Zahlenfolge um einen größeren Wert
als 2 unterscheiden, wobei jedoch vorzugsweise zu beachten ist, dass
die Zahlen der Zahlenfolge z' ungerade
sind. Auf diese Weise lässt
sich vermeiden, bereits bei dem Bilden der Zahlenfolge z' = z + 2j Zahlen
zu erhalten, die durch 2 teilbar und somit keine Primzahlen sind.
-
Da
die bereitgestellten Testzahlen beispielsweise zur Schlüsselerzeugung
eines Schlüssels
eines Verschlüsselungsalgorithmus
verwendet werden sollen, sollten die Testzahlen möglichst
groß sein.
Dies lässt
sich beispielsweise dadurch realisieren, dass als Ausgangszahl z
eine Zahl gewählt
wird, die durch mindestens 256 Bit binär darstellbar ist. Um eine
möglichst
hohe Sicherheit zu erreichen, sollte die bereitgestellte Testzahl
möglichst
zufallsbasiert ausgewählt
werden. Hierzu kann als Ausgangszahl z eine ungerade Zufallszahl
verwendet werden, wodurch die durch den erfindungsgemäßen Ansatz
bereitgestellte Testzahl durch das Bilden der Zahlenfolge z' = z + 2j keine Zufallszahl
im engeren Sinne mehr ist. Eine auf der Basis des erfindungsgemäßen Ansatzes
bereitgestellte Testzahl ist jedoch für die Schlüsselerzeugung als ausreichend
zufällig
anzusehen.
-
Die
Länge der
Zahlenfolge z' =
z + 2j (d. h. ein maximaler Wert von j), die der charakteristischen
Bitfolge in der Tabelle aus 8 zugrunde
liegt, weist einen Wert von jmax = 9 auf.
Der Wert von j kann jedoch auch ein beliebiger positiver ganzzahliger
Wert sein, (beispielsweise jm = 2047), wodurch
die Länge
der Zahlenfolge z' variierbar
ist.
-
Um
die charakteristische Bitfolge σ bereitzustellen,
wird nun eine Bitfolge der Länge
jm + 1 erzeugt, wobei die einzelnen Bits
der Bitfolge σ den
Wert „l" aufweisen und somit
die Folgeglieder der charakteristischen Bitfolge σ als ungekennzeichnet
zu betrachten sind. Dadurch, dass die Länge der charakteristischen
Bitfolge σ gleich
der Länge
der Zahlenfolge z + 2j ist, kann jedem Folgeglied (d. h. jedem Bit)
der charakteristischen Bitfolge σ (=
der Prüffolge)
eine andere Zahl der Zahlenfolge z' = z + 2j zugeordnet werden. Jeder der
Zahlen der Zahlenfolge z' =
z + 2j entspricht somit einem anderen Folgeglied bj der
Prüffolge.
Das Kennzeichnen eines Folgegliedes der Prüffolge lässt sich somit auf einfache
Weise realisieren, indem lediglich der binäre Wert von „1" (d. h. der ungekennzeichnete
Zustand des Folgegliedes) auf einen Wert „0" gekippt wird. Hierdurch wird das zu
kennzeichnende Folgeglied gekennzeichnet. Alternativ kann auch der
ungekennzeichnete Zustand durch einen binären Wert „0" angenommen werden, wobei das Kennzeichnen
des Folgegliedes durch ein Setzen des binären Wertes auf „1" erfolgt.
-
Durch
das Überprüfen von
mehreren Zahlen auf Teilerfreiheit in bezug auf eine einzelne Primzahl
lässt sich
ein weiterer vorteilhafter Aspekt des erfindungsgemäßen Ansatzes
umsetzen. Dieser Aspekt besteht insbesondere darin, dass eine einzige
Zahl der Zahlenfolge z' durch
eine Primzahl dividiert werden braucht. Dies soll an den Zeilen
n = 2 und n = 3 der Tabelle in 8 näher erläutert werden.
Für die
Berechnung der charakteristischen Bitfolge σ2 (in
Zeile n = 2) sei auf die obigen Ausführungen verwiesen. In diesen
Ausführungen wird
festgestellt, dass die Zahl z (81783 durch die Primzahl p2 = 3) ganzzahlig teilbar ist und somit die
Variable α2 = 0 ist. Dies resultiert darin, dass das
Bit b0 = 0 gesetzt wird. Weiterhin sind
auch alle Bits auf „0" zu setzen, die durch
einen Sprung (oder hiervon ausgehend weiteren Sprüngen) mit
einer Sprungweite von p2 = 3 erreichbar
sind. D. h. mit anderen Worten ausgedrückt, die Bits b3,
b6 und b9 sind auf „0" zu setzen. Durch
ein solches Setzen von Folgegliedern der Prüffolge σ2 unter
Verwendung der von der Primzahl p2 = 3 abhängigen Sprungweite
lässt sich
bezogen auf die Tabelle aus 8 eine Division
von 81789 (= 81783 + 2 × 3),
81795 (= 81783 + 2 × 6)
sowie 81801 (= 81783 + 2 × 9)
durch die Primzahl p2 = 3 vermeiden. Hierdurch
lässt sich
gegenüber herkömmlichen
Ansätzen
ein erheblicher Rechenaufwand einsparen.
-
Die
Zeile n = 3 lässt
sich analog hierzu berechnen. Wie oben bereits ausgeführt wurde,
ist die Zufallszahl z = 81783 mit einem ganzzahligen Rest von 3
durch die Primzahl p3 = 5 teilbar. Hieraus
lässt sich
ein Wert k3 = 1 errechnen, der angibt, dass
die Zahl 81785 (= z + 2 × 1)
durch die Primzahl p3 = 5 ganzzahlig teilbar
ist und somit das Folgeglied b1 zu kennzeichnen
ist. Analog zu dem Kennzeichnen von Folgegliedern gemäß dem Vorgehen
in Zeile n = 2 können
nun diejenigen Folgeglieder b der Prüffolge σ3 gekennzeichnet
werden, die von dem ersten zu kennzeichnenden Folgeglied (d. h.
b1) mit einem Sprung der Sprungweite p3 = 5 erreichbar sind. Dies wäre das Folgeglied
b6. Das Folgeglied b6 ist
jedoch bereits in Zeile n = 2 gekennzeichnet worden, wodurch ein
weiteres Kennzeichnen nicht notwendig ist, da die dem Folgeglied
b6 entsprechende Zahl (81795) bereits keine
Primzahl mehr ist. Mit anderen Worten ausgedrückt wird im erfindungsgemäßen Ansatz
somit ein erstes Folgeglied b1 an einer
ersten Position j = 1 in der Prüffolge σ und ein
zweites Folgeglied b6 an einer zweiten Position
j = 6 in der Prüffolge σ gekennzeichnet,
wobei ein Abstand der ersten Position j = 1 von der zweiten Position
j = 6 in der Prüffolge σ von einem
vorbestimmten Wert der Primzahl p3 = 5 abhängt.
-
Vorzugsweise
kann daher überprüft werden,
ob ein zu kennzeichnendes Folgeglied bereits gekennzeichnet ist.
Ein Kennzeichnen eines bereits gekennzeichneten Folgeglieds kann
so mit entfallen, wodurch sich weiterhin der numerische Aufwand des
erfindungsgemäßen Verfahren
reduzieren lässt.
-
Eine
weitere Optimierung des numerischen Aufwandes lässt sich dadurch erreichen,
dass bereits beim Bereitstellen der charakteristischen Prüffolge σ gekennzeichnete
Prüffolgeglieder
b bereitgestellt werden. Hierdurch lässt sich beispielsweise bereits
beim Erzeugen der Prüffolge σ vorab diejenigen
Folgeglieder kennzeichnen, die Zahlen entsprechen, die ganzzahlig
durch eine vorbestimmte Primzahl teilbar sind. Diese vorbestimmte
Primzahl kann beispielsweise eine Primzahl sein, die kleiner als
eine vorbestimmte Grenze ist. Durch ein derartiges Vorgehen ist
es nunmehr möglich,
diejenigen Folgeglieder der charakteristischen Bitfolge zu kennzeichnen,
die beispielsweise Zahlen entsprechen, die ganzzahlig durch die
ersten zehn Primzahlen teilbar sind. Insbesondere das Kennzeichnen
von Folgegliedern, die Zahlen entsprechen, die ganzzahlig teilbar
durch eine der ersten zehn Primzahlen sind, würde einen hohen numerischen
Aufwand durch eine häufig
auftretenden Kennzeichnungsoperation beim Überprüfen der Zahlen auf Teilerfreiheit
in bezug auf die ersten 10 Primzahlen erfordern. Die gekennzeichneten
Folgeglieder und deren Position in der Prüffolge können beispielsweise aus einem
Speicher ausgelesen werden, in dem zu jeder möglichen Anfangszahl z bereits
eine charakteristische Bitfolge abgespeichert ist, in der diejenigen
Folgeglieder der charakteristischen Bitfolge σ bereits gekennzeichnet sind,
die Zahlen entsprechen, die ganzzahlig durch eine der ersten zehn
Primzahlen teilbar sind.
-
Weiterhin
kann durch das Kennzeichnen der Prüffolge eine Prüffolge resultieren,
in der eine größere Anzahl
von gekennzeichneten Folgegliedern als ungekennzeichnete Folgeglieder
enthalten ist. In einem derartigen Fall kann vorzugsweise die Position
der ungekennzeichneten Folgeglieder in der Prüffolge in einem Speicher abgespeichert
werden. Das Kennzeichnen der Prüffolge
kann in diesem Fall dadurch erfolgen, dass der Positionswert eines
ungekennzeichneten Folgegliedes in dem Speicher gelöscht wird,
wodurch das dem gelöschten
Positionswert entsprechende Folgeglied als gekennzeichnet zu betrachten
ist.
-
Hierdurch
ist es möglich,
eine Reduktion des Speicherbedarfs zur Speicherung der Prüffolge bzw.
eines Inhalts der Prüffolge
vorzunehmen. In einem solchen Fall ist weiterhin das Kennzeichnen
der ungekennzeichneten Folgeglieder nicht mehr durch das vorstehend
beschriebene Verfahren unter Ausnutzung eines Sprunges mit der vordefinierten
Sprungweite möglich;
vielmehr lassen sich nunmehr die in dem Speicher gespeicherten Positionswerte
direkt zum Feststellen einer notwendigen Kennzeichnung eines ungekennzeichneten
Folgegliedes verwenden.
-
Nach
einem Kennzeichnen von Folgegliedern der Prüffolge sind oftmals mehrere
ungekennzeichnete Folgeglieder in der Prüffolge enthalten. Diesen ungekennzeichneten
Folgeglieder entsprechen Zahlen, die teilerfremd zu der überprüften Primzahl
sind. Bei einer rekursiven Verwendung des erfindungsgemäßen Verfahrens
werden beispielsweise die den Folgegliedern entsprechenden Kandidatenzahlen
auf Teilerfreiheit in bezug auf mehrere Primzahlen überprüft. Hierbei
wird das Überprüfen analog
dem in 8 dargestellten Verfahren vorgenommen. Insbesondere
erfolgt nach einem Beenden einer Kennzeichnung von Folgegliedern
der charakteristischen Bitfolge in bezug auf eine Primzahl ein weiteres
Kennzeichnen von Folgegliedern in bezug auf die nächstgrößere Primzahl.
Durch ein derartiges Vorgehen lässt
sich ferner aus der Prüffolge
erkennen, dass beispielsweise das ungekennzeichnete Folgeglied b4 teilerfremd zu den ersten acht Primzahl
ist (siehe Zeile n = 8 aus 8). Ebenfalls
ist die dem ungekennzeichneten Folgeglied b5 entsprechende
Zahl (81793), die dem ungekennzeichneten Folgeglied b7 (=
81797) sowie die dem ungekennzeichneten Folgeglied b8 (= 81799)
entsprechende Zahl teilerfremd zu den ersten acht Primzahlen. Dem
erfindungsgemäßen Ansatz
entsprechen kann nun eine Zahl als Testzahl bereitgestellt werden,
der ein beliebiges ungekennzeichnetes Folgeglied der Prüffol ge entspricht.
Enthält
die Prüffolge
zwei oder mehr ungekennzeichnete Folgeglieder, besteht eine Wahlmöglichkeit,
welche der den ungekennzeichneten Folgegliedern entsprechende Zahl
als Testzahl bereitgestellt wird. Der Einfachheit halber kann jedoch
vorzugsweise diejenige Zahl als Testzahl bereitgestellt werden,
der das erste ungekennzeichnete Folgeglied der Prüffolge entspricht.
Es ist jedoch auch möglich,
eine einem ungekennzeichneten Folgeglied entsprechende Zahl als
Testzahl zu wählen,
die einen geringeren Differenzbetrag zu der Ausgangszahl z aufweist,
als eine Zahl, die einem weiteren ungekennzeichneten Folgeglied
entspricht.
-
Ferner
ist es möglich,
unter Verwendung der Prüffolge
eine Prüfzahl
zu überprüfen, wobei
der Prüfzahl ein
Folgeglied der Prüffolge
entspricht. Hierbei kann die Prüfzahl
beispielsweise extern vorgegeben werden. Unter Verwendung der Prüffolge kann
nunmehr überprüft werden,
ob das der Prüfzahl
entsprechende Folgeglied ungekennzeichnet ist. Ist das der Prüfzahl entsprechende
Folgeglied gekennzeichnet, ist zu schließen, dass die Prüfzahl keine
Primzahl ist. Ein derartiges Prüfen
einer Prüfzahl
gewinnt insbesondere dann an Gewicht, wenn das Überprüfen der Prüfzahl während eines Testens der Prüfzahl auf
Primalität
mit einem Primzahlüberprüfungsalgorithmus
wie beispielsweise dem Miller-Rabin-Test erfolgt. Im erfindungsgemäßen Ansatz kann
somit deterministisch erkannt werden, dass die Prüfzahl bereits
keine Primzahl mehr ist, wenn das der Prüfzahl entsprechende Folgeglied
gekennzeichnet ist. In einem derartigen Fall lässt sich vorzugsweise der Primzahlüberprüfungsalgorithmus
(d. h. der Miller-Rabin-Test für
die Prüfzahl)
abbrechen. Durch ein derartiges Vorgehen muss somit nicht mehr das
Ergebnis des (numerisch aufwendigen) Miller-Rabin-Tests abgewartet werden. Vielmehr
kann eine neue Testzahl unter Verwendung der Prüffolge σ bereitgestellt werden, für die ein Testen
mit dem Primzahlüberprüfungsalgorithmus
erneut begonnen wird. Gegenüber
herkömmlichen
Ansätzen
bietet der erfindungsgemäße Ansatz
jedoch den Vorteil, dass die bereitgestellte Testzahl (d. h. die
neue Kandidatenzahl für
das Testen mit dem Miller-Rabin-Test) für das Testen mit dem Primzahlüberprüfungsalgorithmus
bereits teilerfremd zu einer (vorzugsweise) größeren Anzahl von Primzahlen
ist, als die Prüfzahl,
für die
das Testen mit dem Primzahlüberprüfungsalgorithmus
abgebrochen wurde.
-
Im
folgenden soll näher
auf die Häufigkeit
der Primzahlen unter Testkandidaten der Qualität r eingegangen werden. Sei
das Produkt der ersten r
Primzahlen und sei
. Angenommen es wird zufällig eine
ganze Zahl aus dem Intervall [0, N] oder [N/2, N] gewählt. Dann
beträgt die
Wahrscheinlichkeit, eine Primzahl zu erhalten etwa 1/ln N, wenn
N groß ist.
Wenn man sich bei der Wahl auf Testkandidaten der Qualität r beschränkt, steigt
die Wahrscheinlichkeit aus den Kandidaten eine Primzahl zu finden
in etwa um den Faktor d
r/φ(d
r) an. Die Wahrscheinlichkeit, dass eine
zufällig
gewählte
1024 Bit große natürliche Zahl
der Qualität
r eine Primzahl ist, beträgt
somit ungefähr
-
Der
reziproke Wert W(r, 1024)–1 entspricht der durchschnittlichen
Anzahl von Miller-Rabin-Tests, die ausgeführt werden müssen bis
man eine Primzahl gefunden hat, vorausgesetzt man testet Testkandidaten
der Qualität
r, die zufällig
gewählt
wurden. Letzteres trifft streng genommen auf den hier dargestellten
Algorithmus nicht zu. Nur z ist eine echte Zufallszahl. Andere potentielle
Testkandidaten wie z + 2, z + 4 usw. sind es nicht. Dennoch stellen
die in 9 tabellarisch dargestellten Werte einen guten
Anhaltspunkt für
dr/φ(dr), W(r, 1024) und der Anzahl von notwendigen
Miller-Rabin-Tests dar.
-
Die
Einträge
in der letzten Spalte der in 9 dargestellten
Tabelle beschreiben die Anzahl der im Durchschnitt erforderlichen
Miller-Rabin-Tests mit einer kleinen Basis b, die durchgeführt werden
müssen,
bis eine Zahl gefunden würde,
die den Test besteht. Für
diese Zahl müssen
dann noch zwei Miller-Rabin-Kontrolltests mit einer jeweils unterschiedlichen
zufälligen
Basis b' durchgeführt werden.
Diese beiden zusätzlichen Miller-Rabin-Tests
sind in der Tabelle aus 9 nicht berücksichtigt.
-
Im
folgenden Abschnitt soll näher
auf die Erzeugung der Primzahlen p2, ...,
pr eingegangen werden. Um die Testkandidaten
der Qualität
r mit dem vorstehend skizzierten Siebverfahren unter Verwendung
der charakteristischen Bitfolge σ zu
ermitteln, müssen
die r – 1
Primzahlen p2, ..., pr zur
Verfügung
stehen. Je größer r ist,
um so weniger Miller-Rabin-Tests sind im Durchschnitt erforderlich,
wie aus der Tabelle in 9 ersichtlich ist. Wie groß r bei
dem erfindungsgemäßen Ansatz
tatsächlich
werden kann, lässt
sich durch Simulationen herausfinden. Ein in diesem Zusammenhang
sinnvoller Wert, dessen Erreichen auch für realistisch gehalten werden
kann, wäre
r = 6543.
-
Das
Besondere an dem Wert r = 6543 ist die Tatsache, dass die Zahl r
= 6543 die größte natürliche Zahl
ist, für
die ein Produkt von Primzahlen p6542 = 65521
und p6543 = 65543 noch kleiner als 232 ist. Das heißt, das Produkt p6542p6543 hat vier Byte, während das Produkt p6543p6544 bereits
eine Länge
von mehr als vier Byte hat.
-
Die
ersten 6543 (oder noch mehr) Primzahlen können aufgrund des hierzu notwendigen
Speicherbedarfs auf dem Halbleiterchip nicht permanent gespeichert
werden. Das müssen
sie aber gemäß dem erfindungsgemäßen Ansatz
auch nicht. Es genügt
die ersten 55 Primzahlen permanent vorrätig zu haben. Streng genommen
genügt
es, die ersten 54 Primzahlen p2, ..., p55, zu speichern. Die erste Primzahl p1 = 2 wird nicht benötigt. Es ist jedoch vorteilhaft
auch die 56-te Primzahl p56 abzuspeichern,
was in den nachfolgenden Ausführungen
noch deutlich wird. Aus der in 10 abgebildeten
tabellarischen Darstellung sind die ersten 56 Primzahlen zu entnehmen.
-
Mit
dem sogenannten „Sieb
des Eratosthenes" können aus
den ersten 55 Primzahlen die ersten 653 Primzahlen berechnet werden.
Dies geschieht vorzugsweise im Hauptprozessor, wobei beispielsweise
immer nur 100 bis 500 Primzahlen auf einmal berechnet werden. Diese
Primzahlen werden dann dazu benutzt, um die Qualität der Testkandidaten
zu erhöhen.
Danach werden sie nicht mehr benötigt
und gelöscht,
wodurch sich die bereits genannte Einsparmöglichkeit an Speicherbedarf
ergibt.
-
Um
z. B. alle Primzahlen zwischen p
56 = 263
und 2000 zu berechnen, wird folgenderweise vorgegangen. Man betrachte
die ungeraden Zahlen
-
Man
entferne aus der Liste (9) alle Vielfachen von p2 =
3, p3 = 5, ..., p14 =
43. Die zurückbleibenden Zahlen
sind alle Primzahlen zwischen 264 und 2000. Das sind die 247 Primzahlen
p57, ..., p303.
Eine derartige Vorgehensweise wird als „Sieb des Eratosthenes" bezeichnet.
-
Abschließend sei
noch bemerkt, dass die
die dritte Fermatzahl und
die vierte Fermatzahl ist.
-
Im
folgenden soll näher
auf eine Hardware-optimierte und somit schnelle Reduktion von z
modulo pi eingegangen werden. Da die vorgegebene
Zufallszahl z mit 1024 Binärstellen
sehr groß ist,
ist der Hauptprozessor oftmals für
die Berechnung der Elemente αi = z mod pi nicht
prädestiniert.
Hierfür
ist meist der eigens für
kryptographische Rechenschritte ausgelegte Coprozessor besser geeignet.
-
Die
Elemente αi = z mod pi werden
jedoch nicht ausschließlich
im Coprozessor berechnet. Der Reduktionsprozeß z mod pi geschieht
vorzugsweise in zwei Arbeitsgängen.
Der erste Arbeitsgang findet vorzugsweise im Coprozessor statt,
der zweite Arbeitsgang findet vorzugsweise im Hauptprozessor statt.
Die Vorgehensweise stützt
sich hierbei auf ein folgendes Lemma 2, auf dessen elementaren Beweis
an dieser Stelle verzichtet wird.
-
Lemma
2. Sei z ∊ Z und seien a, b ∊ N mit a|b (d. h.
a teilt b). Dann gilt
-
Das
Lemma 2 besagt, dass z mod a in zwei Schritten berechnet werden
kann. Zuerst wird ρ =
z mod b berechnet. Das Ergebnis ρ ist
eine ganze Zahl zwischen 0 und b – 1. Dann wird σ = ρ mod a berechnet.
Man stelle sich vor, dass z eine 1024-Bit-Zahl (128 Byte) ist, dass b höchstens
4 Byte und a höchstens
2 Byte hat. Eine erste Reduktion ρ =
z mod b würde
man dann beispielsweise im Coprozessor ausführen, während eine zweite Reduktion σ = ρ mod a im
Hauptprozessor ausgeführt
werden kann.
-
Um
dieses Prinzip für
die Berechnung der αi = z mod pi anwenden
zu können,
werden die Primzahlen p2, p3,
..., p6543 in Produkte qj zu
je vier Byte zusammengefaßt.
Es gilt also qj < 232 für alle j.
-
Dabei
ist q
1 = p
2p
3 ... p
10 das Produkt
aus den ersten neun ungeraden Primzahlen,
-
Für n = 5,
6, ..., 11 besteht q
n aus vier Primfaktoren:
-
Für n = 12,
13, ..., 79 besteht q
n aus drei Primfaktoren:
-
Für n = 80,
81, ..., 3222 besteht q
n aus zwei Primfaktoren:
-
Eine
Berechnung von αi = z mod pi geschieht
dann beispielsweise wie folgt:
- 1. Bestimme
dasjenige j mit pi|qj;
- 2. Berechne im Coprozessor βj = z mod qj;
- 3. Berechne im Hauptprozessor αi = βj mod
pi.
-
Nachfolgend
wird das erfindungsgemäße Verfahren
an Hand eines bevorzugten Ausführungsbeispiels des
zu realisierenden Algorithmus näher
beschrieben. Hierzu wird auf die Schritte des in den 11A bis 11D dargestellten
Ablaufdiagramms Bezug genommen. Der Algorithmus kann in drei Phasen
eingeteilt werden. In der ersten Phase wird ein Testkandidat der
Qualität
56 erzeugt und dieser dann einem Miller-Rabin-Test (abgekürzt als
M-R-Test bezeichnet) unterworfen. In der zweiten Phase werden Testkandidaten
der Qualität
57 bis 257 erzeugt. In der dritten Phase werden Testkandidaten der
Qualität
258 bis 6543 erzeugt. Ferner werden in der Beschreibung des Algorithmus
sowie in den 11A bis 11D die
Abkürzungen
HP für
den Hauptprozessor und die Abkürzung
CP für
den Coprozessor im folgenden verwendet.
-
Zunächst wird
die erste Phase des Algorithmus näher beschrieben. In einem ersten
Schritt 1102, der in 11A dargestellt
ist, erzeugt ein Zufallszahlengenerator eine große un gerade Zufallszahl z,
die eine Länge
von größer als
200 Bit, beispielsweise 1024 Bit umfasst. Hierbei kann
beispielsweise die Einrichtung 102 zum Bestimmen einer
Ausgangszahl AZ aus 1 den Zufallszahlengenerator
umfassen, wobei die 1024 Bit große ungerade Zufallszahl z der
Ausgangszahl AZ entspricht.
-
In
einem hieran anschließenden
zweiten Schritt 1104 werden beispielsweise im Hauptprozessor
(HP) aus den permanent gespeicherten 55 Primzahlen p2 =
3, p3 = 5, ..., p56 =
263 wie vorstehend beschrieben 12 Produkte q1,
q2, ..., q12 berechnet.
Die Berechnung der Primzahlen kann beispielsweise in der Einrichtung 504 zum
Bestimmen eines Produktes erfolgen.
-
Hieran
anschließend
werden in einem dritten Schritt 1106 des in 11A dargestellten Diagramms vorzugsweise im Coprozessor
(CP) die Elemente βj = z mod qj, 1 ≤ j ≤ 12, berechnet,
was beispielsweise in der Einrichtung 506 zum Reduzieren
der TZ erfolgen kann. Hierbei ist anzumerken, dass wie zuvor beschrieben
wurde, alle βj und qj vorzugsweise
höchstens
vier Byte haben und somit eine Länge
haben, durch die eine Verarbeitung von βj und
qi im Hauptprozessor numerisch effizient
möglich
ist.
-
In
einem hieran anschließenden
vierten Schritt
1108 des in
11A dargestellten
Diagramms werden vorzugsweise im Hauptprozessor Elemente α
i =
z mod p
i, 2 ≤ i ≤ 56, folgendermaßen berechnet:
-
Dieses
Berechnen kann vorzugsweise in der Einrichtung 508 zum
Reduzieren der Variablen β erfolgen.
-
In
einem hieran anschließenden
fünften
Schritt 1110 des in 11A dargestellten
Diagramms werden vorzugsweise im Hauptprozessor aus den Elementen αi und
pi gemäß der Vorschrift
(7) die zugehörigen
Elemente ki berechnet für i = 2, 3, ..., 56. Eine derartige
Berechnung der Elemente ki erfolgt vorzugsweise
in der in 7 dargestellten Einrichtung 704 zum
Berechnen einer Variablen ki.
-
In
einem hieran anschließenden
sechsten Schritt
1112 wird mit Hilfe von k
i und
p
i gemäß (8) die
charakteristische Bitfolge
bestimmt. Dieses Bestimmen
der charakteristischen Bitfolge wird vorzugsweise in der in
7 dargestellten Einrichtung
706 zum Überprüfen und
Modifizieren der charakteristischen Bitfolge σ durchgeführt.
-
Aus
den bisher ausgeführten
Schritten ergeben sich Berechnungsergebnisse, die, wie in 11A dargestellt, als Datensatz 1 bezeichnet
werden können.
-
In
einem hieran anschließenden
siebten Schritt
1114 des in
11B dargestellten
Diagramms werden die Berechnungsergebnisse des Datensatzes
1 weiter
verarbeitet, wobei ein Bestimmen des kleinsten Indexes j erfolgt,
für den
b
j = 1 ist mit j ∊ {0, 1, ...,
L – 1}.
Mit anderen Worten ausgedrückt
ist das Element b
j das erste von 0 verschiedene
Element in der Folge
-
Der
siebte Schritt 1114 des Bestimmen des kleinsten Indexes
für den
bj = 1 gilt, erfolgt vorzugsweise in der
in 7 dargestellten Einrichtung 708 zum Bestimmen
einer Zukunftstestzahl aus der überprüften und modifizierten
Bitfolge σ'.
-
In
einem nachfolgenden achten Schritt 1116 des in 11B dargestellten Diagramms erfolgt ein Berechnen
der Zahl z + 2j für
das aus dem siebten Schritt 1114 bestimmte j. Diese Zahl
ist teilerfremd zu den ersten 56 Primzahlen. Der achte Schritt 1116 kann
wiederum in der Einrichtung zum Bestimmen einer Zukunftstestzahl 708 aus
der überprüften und
modifizierten Bitfolge σ' erfolgen wobei die
Zahl z + 2j nunmehr der Zukunftstestzahl ZTZ entspricht.
-
In
einem hieran anschließenden
neunten Schritt 1118 des in 11B dargestellten
Diagramms erfolgt ein Starten eines Miller-Rabin-Tests mit kleiner
Basis b in dem Coprozessor für
die Zahl z + 2j. Hierbei wird die Zahl z + 2j als Testzahl gemäß der Darstellung
in 2 von der Einrichtung 202 zum Überprüfen einer
Aktuell-Testzahl oder zum Bereitstellen einer Zukunftstestzahl zu
der Einrichtung 204 zum Testen übertragen, in welcher der Miller-Rabin-Test
durchgeführt
wird. Ferner kann durch das geeignete Setzen des ersten Statussignals
PZ1 der Miller-Rabin-Test in der Einrichtung 204 zum Testen
gestartet werden.
-
Mit
einer Abarbeitung des neunten Schrittes 1118 ist die erste
Phase des zu realisierenden Algorithmus beendet und die zweite Phase
des Algorithmus wird gestartet.
-
In
einem 10. Schritt 1120 des in 11B dargestellten
Diagramms werden vorzugsweise im Hauptprozessor mit dem Sieb des
Eratosthenes die nächsten
201 Primzahlen p57, p58,
..., p257 berechnet und in 67 Tripel {p57, p58, p59}, ..., {p60, p61, p62}, ..., {p255, p256, p257} unterteilt. Diesen Tripeln sind die
Produkte q13, q14,
..., q79 zugeordnet. Hierbei erfolgt das
Berechnen der nächsten
Primzahlen vorzugsweise in der in 4 dargestellten
Einrichtung 404 zum Bereitstellen von Primzahlen pj sowie das Unterteilen der Primzahl in die
64 Tripel vorzugsweise in der in 5 dargestellten
Einrichtung 502 zum Auswählen einer Anzahl von Primzahlen
pi aus den Primzahlen pj.
-
In
einem 11. Schritt 1122 des in 11B dargestellten
Diagramms werden im Hauptprozessor die Primzahlen des ersten Tripels
miteinander multipliziert so dass eine Variable q13 =
p57p58p59 erhalten
wird. Dieses Multiplizieren erfolgt vorzugsweise in der in 5 dargestellten
Einrichtung 504 zum Bestimmen eines Produktes q aus den
ausgewählten
Primzahlen pi.
-
In
einem an den 11. Schritt 1122 anschließenden 12. Schritt 1124 des
in 11B dargestellten Diagramms erfolgt ein Berechnen
von β13 = z mod q13 im
Coprozessor. Dieses Berechnen erfolgt vorzugsweise in der in 5 dargestellten
Einrichtung 506 zum Reduzieren der Testzahl TZ unter Verwendung
des Produktes q. Hierbei wird zugleich ausgenutzt, dass die große Testzahl
TZ (die der Zahl z entspricht) numerisch effizient reduziert werden
kann, da der Coprozessor für
die Berechnung mit großen
Zahlen (insbesondere ein modulares Reduzieren von großen Zahlen)
besonders ausgebildet ist.
-
In
einem an den 12. Schritt
1124 anschließenden 13. Schritt
1126 des
in
11B dargestellten Diagramms werden im Hauptprozessor
die Elemente α
i = z mod p
i, i =
57, 58, 59, durch folgende Berechnungsvorschrift berechnet:
-
Das
Berechnen der Elemente αi erfolgt hierbei vorzugsweise in der in 5 dargestellten
Einrichtung 508 zum Reduzieren von β unter Verwendung der Primzahlen
pi, um eine Variable αi zu
erhalten.
-
In
einem an den 13. Schritt 1126 anschließenden 14. Schritt 1128 des
in 11B dargestellten Diagramms werden im Hauptprozessor
aus den Elementen αi und pi, i = 57,
58, 59 gemäß den Vorschriften
(7) die Variablen k57, k58 und
k59 berechnet. Dieses Berechnen erfolgt
vorzugsweise in der in 7 dargestellten Einrichtung 704 zum
Berechnen einer Variablen ki.
-
In
einem an den 14. Schritt
1128 anschließenden 15. Schritt
1130 des
in
11B dargestellten Diagramms wird im Hauptprozessor
mit Hilfe der k
i und p
i,
i = 57, 58, 59, gemäß (8) die
charakteristische Bitfolge
bestimmt. Dieses Bestimmen
erfolgt vorzugsweise in der in
7 dargestellten
Einrichtung
706 zum Überprüfen und
Modifizieren der charakteristischen Bitfolge σ.
-
Aus
den bereits ausgeführten
Schritten ergeben sich Berechnungsergebnisse, die als Datensatz 2 bezeichnet
werden können,
so wie es in 11B dargestellt ist.
-
In
einem an den 15. Schritt
1130 anschließenden 16. Schritt
1132,
der in dem Diagramm aus
11C dargestellt
ist, werden die Berechnungsergebnisse aus dem Datensatz
2 weiter
verarbeitet, wobei j der im siebten Schritt
1114 bestimmte
Index sei. Betrachtet werde ein Folgeglied c
j von
. In einem ersten Fall sei
c
j gleich 0. In diesem ersten Fall sei das
kleinste j' ∊ {0,
1, ..., L – 1}
mit c
j' =
1 zu bestimmen, wobei klarerweise gilt, dass j' > j
ist. Weiterhin ist eine neue Testzahl z + 2j' zu berechnen. Außerdem ist der im Coprozessor
laufende Miller-Rabin-Test abzubrechen und für die neue Testzahl z + 2j' ein neuer Miller-Rabin-Test
zu starten. Diese neue Testzahl ist in diesem ersten Fall ein Testkandidat
der Qualität
59. In einem zweiten Fall ist c
j gleich
1. In diesem zweiten Fall soll mit einem nachfolgend dargestellten
17. Schritt
1134 fortgefahren werden.
-
Der
16. Schritt 1132 wird vorzugsweise in der in 7 dargestellten
Einrichtung 708 zum Bestimmen einer Zukunftstestzahl ZTZ
aus der überprüften und
modifizierten Bitfolge σ' durchgeführt, wobei
die Zukunftstestzahl gleich der neuen Testzahl z + 2j' ist. Die neue Testzahl
liegt damit größenordnungsmäßig im Bereich der
ursprünglichen
Testzahl, da lediglich eine zur Aktuell-Testzahl im wesentlichen
benachbarte Zukunftstestzahl gewählt
wird, für
die eine Teilerfreiheit zu bereits vorausgehend ermittelten Primzahlen
sichergestellt ist. Ferner wird über
das erste Statussignal PZ1 ausgegeben, das die ursprüngliche
Testzahl, für
die in der in 2 dargestellten Einrichtung 204 zum
Testen ein Miller-Rabin-Test läuft
keine Primzahl ist (PZ1 = –1)
(Fall 1) wobei die Einrichtung 206 zum Erkennen ausgebildet
ist, ansprechend auf das erste Statussignal PZ1 ein zweites Haltesignal
STOP2 auszugeben, um den in der Einrichtung 204 zum Testen
laufenden Miller-Rabin-Test zu stoppen. Durch die Einrichtung 202 zum Überprüfen einer
Aktuell-Testzahl oder zum Bereitstellen einer Zukunftstestzahl wird
bereits die Zukunftstestzahl ZTZ (d. h. die neue Testzahl z + 2j') über den
ersten Ausgang des Signals TZ der Einrichtung 204 zum Testen übermittelt,
wobei über
das erste Statussignal PZ1 (beispielsweise bei dem Übergang
von einem negativen Status PZ1 = –1 in einen „undefinierten" Status PZ1 = 0)
ein neuer Miller-Rabin-Test gestartet werden kann.
-
In
einem an den 16. Schritt 1132 anschließenden 17. Schritt 1134 erfolgt
ein Wiederholen der Schritte 11 bis 16 für jedes der restlichen 66 Tripel
aus dem 10. Schritt 1120, wobei die Einrichtung 512 zum
Zählen
die Abarbeitung der Schritte 11 bis 16 überwacht.
-
Sobald
ein Miller-Rabin-Test im Coprozessor beendet ist, wird verfahren,
wie im an den 17. Schritt anschließenden 18. Schritt 1136 des
in 11C dargestellten Diagramms beschrieben ist:
-
Fall
1: Die getestete Zahl (Testzahl) hat den Miller-Rabin-Test bestanden.
-
Es
werden zwei weitere Miller-Rabin-Tests für diese Testzahl durchgeführt. Während der
Miller-Rabin-Test, den die Testzahl bereits bestanden hat, mit einer
kleinen Basis b durchgeführt
wurde, werden diese beide Miller-Rabin-Tests mit unterschiedlichen
Zufallsbasen b' durchgeführt. Wenn
die Testzahl die zwei zusätzlichen
Miller-Rabin-Tests besteht, wird sie als Primzahl erkannt und ausgegeben
und der Algorithmus an dieser Stelle gestoppt. Andernfalls so vor
gegangen wie in einem zweiten Fall des 18. Schrittes 1136 beschrieben
wird.
-
Fall
2: Die getestete Zahl (Testzahl) hat den Miller-Rabin-Test nicht bestanden.
-
Man
betrachte im Hauptprozessor die aktuelle charakteristische Bitfolge
. Sei j der Index des ersten
von 0 verschiedenen Folgengliedes d
j. Berechne
z + 2j und starte im Coprozessor einen neuen Miller-Rabin-Test für die Testzahl
z + 2j.
-
Der
erste Fall des 18. Schrittes 1136 kann beispielsweise in
der Einrichtung 204 zum Testen durchgeführt werden. Hierzu kann die
Einrichtung 204 zum Testen durch das zweite Statussignal
PZ2 der Einrichtung 206 zum Erkennen signalisieren, dass
die Testzahl TZ den Miller-Rabin-Test sowie die zwei weiteren Miller-Rabin-Tests
bestanden hat und somit als Primzahl (oder als Zahl, die mit einer
hohen Wahrscheinlichkeit eine Primzahl ist) anzusehen ist. Die Einrichtung 206 zum
Erkennen kann weiterhin über
das erste Haltesignal STOP1 und das zweite Haltesignal STOP2 einen
Betrieb der Einrichtung 202 zum Überprüfen einer Aktuell-Testzahl
oder zum Bereitstellen einer Zukunftstestzahl sowie der Einrichtung 204 zum
Testen beenden und die Testzahl als Primzahl über den zweiten Ausgang PZout
ausgeben.
-
Der
zweite Fall kann in der Einrichtung 204 zum Testen, der
Einrichtung 206 zum Erkennen sowie der Einrichtung 202 zum Überprüfen einer
Aktuell-Testzahl oder zum Bereitstellen einer Zukunftstestzahl abgearbeitet
werden. Hierzu wird über
das zweite Statussignal PZ2 von der Einrichtung zum Testen 204 der
Einrichtung 206 zum Erkennen signalisiert, dass die Testzahl
TZ den Miller-Rabin-Test nicht bestanden hat und über das
erste Haltesignal STOP1 somit der Einrichtung zum Überprüfen 202 einer
Aktuell-Testzahl oder zum Bereitstellen einer Zukunftstestzahl signalisiert,
dass eine Zukunftstestzahl z + 2j zu berechnen ist und im Coprozessor
ein neuer Miller-Rabin-Test für
diese neue Zukunftstestzahl z + 2j zu starten ist.
-
Mit
einer Abarbeitung des 18. Schrittes 1136 ist die zweite
Phase des Algorithmus beendet und die dritte Phase wird gestartet.
-
Die
dritte Phase des als bevorzugtes Ausführungsbeispiel gewählten Algorithmus,
die nach dem 18. Schritt
1136 beginnt, besteht aus sieben
identischen Teilphasen. Zu Beginn jeder Teilphase werden zunächst mit
dem „Sieb
des Eratosthenes" die
nächsten
898 Primzahlen erzeugt. Dabei werden in der jeweiligen Teilphase
die folgenden Primzahlen erzeugt:
-
Im
folgenden werden die Schritte der ersten Teilphase näher beschrieben.
Die weiteren Teilphasen verlaufen zur ersten Teilphase analog.
-
Im
19. Schritt
1138 (d. h. im ersten Schritt der Teilphase
1) des in
11C dargestellten Diagramms werden
mit dem Sieb des Eratosthenes die 898 Primzahlen p
258,
p
259, ..., p
1155 erzeugt
und in 449 Paare
zusammengefasst. Diesen Paaren
sind die 449 Produkte q
80, q
81,
..., q
528 zugeordnet. Der 19. Schritt
1138 erfolgt
hierbei analog zu den obigen Ausführungen in der in
4 dargestellten
Einrichtung
404 zum Bereitstellen der Primzahlen p
j sowie der in
5 dargestellten
Einrichtung
502 zum Auswählen einer Primzahl von Primzahlen
p
i aus den Primzahlen p
j.
-
In
einem an den 19. Schritt 1138 folgenden 20. Schritt 1140 werden
dem Hauptprozessor die Primzahlen des ersten Paares miteinander
multipliziert: q80 = p258p259. Analog zu den obigen Ausführungen
erfolgt dieses Multiplizieren in der in 5 dargestellten
Einrichtung 504 zum Bestimmen eines Produktes q aus den ausgewählten Primzahlen
pi.
-
Aus
den bisher ausgeführten
Schritten ergeben sich Berechnungsergebnisse, die als Datensatz 3 bezeichnet
werden können,
wie in 11C dargestellt ist.
-
In
einem an den 20. Schritt 1140 anschließenden 21. Schritt 1142,
des in 11D dargestellten Diagramms,
werden die Berechnungsergebnisse des Datensatzes 3 weiter
verarbeitet, wobei im Coprozessor die Variable β80 =
z mod q80 berechnet wird. Analog zu den
obigen Ausführungen
erfolgt dieses Berechnen in der in 5 dargestellten
Einrichtung 506 zum Reduzieren der Testzahl unter Verwendung
des Produktes q, um eine Variable β zu erhalten, wobei die Testzahl
TZ nunmehr der Zahl z entspricht.
-
In
einem an den 21. Schritt
1142 anschließenden 22. Schritt
1144 des
in
11D dargestellten Diagramms werden im Hauptprozessor
wiederum die Elemente α
i = z mod p
i, i =
258, 259 berechnet durch die folgende Berechnungsvorschrift:
-
Analog
zu den obigen Ausführungen
erfolgt das Berechnen der Elemente αi in
der in 5 dargestellten Einrichtung 508 zum Reduzieren
von β unter
Verwendung der Primzahlen pi, um eine Variable αi zu
erhalten.
-
In
einem an den 22. Schritt 1144 anschließenden 23. Schritt 1146 des
in 11D dargestellten Diagramms werden aus den Elementen αi und
pi im Hauptprozessor i = 258, 259, gemäß der Vorschrift
(7) die Variablen (Zahlen) k258 und k259 berechnet. Analog zu den obigen Ausführungen
erfolgt dieses Berechnen in der in 7 dargestellten
Einrichtung 704 zum Berechnen einer Variablen ki.
-
In
einem an den 23. Schritt
1146 anschließenden 24. Schritt
1148 des
in
11D dargestellten Teildiagramms wird im Hauptprozessor
mit Hilfe der k
i und p
i,
i = 258, 259, gemäß der Vorschrift
(8) die charakteristische Bitfolge
bestimmt. Dieses Bestimmen
erfolgt analog zu den vorherigen Ausführungen in der in
7 dargestellten
Einrichtung
706 zum Überprüfen und
Modifizieren der charakteristischen Bitfolge σ.
-
In
einem an den 24. Schritt 1148 anschließenden 25. Schritt 1150 des
in 11D dargestellten Teildiagramms sei j ∊ {0,
1, ..., L – 1}
der kleinste Index für
den ej = 1 ist. Betrachte den Testkandidaten
z + 2j. Sei z + 2j0 der Testkandidat für den im
Coprozessor gerade ein Miller-Rabin-Test durchgeführt wird.
Fall
1: j ≠ j0
Stoppe den im Coprozessor laufenden
Miller-Rabin-Test und starte einen neuen Miller-Rabin-Test für z + 2j.
Fall
2: j = j0
Gehe zu einem im folgenden
beschrieben 26. Schritt 1152.
-
Ein
Teil des 25. Schritt 1150 wird vorzugsweise in der in 7 dargestellten
Einrichtung 708 zum Bestimmen einer Zukunftstestzahl ZTZ
aus der überprüften und
modifizierten Bitfolge σ' ausgeführt. Weiterhin wird
gemäß den obigen
Ausführungen
der in der Einrichtung 204 zum Testen laufenden Miller-Rabin-Test
beispielsweise ansprechend auf das zweite Haltesignal STOP2 oder
einen Zustandswechsel des ersten Statussignals PZ1 abgebrochen und
gemäß den obigen
Ausführungen
durch eine neue Testzahl TZ (in diesem Fall durch die Testzahl z
+ 2j), die die Zukunftstestzahl darstellt) gestartet.
-
In
einem an den 25. Schritt 1150 anschließenden 26. Schritt 1152 erfolgt
ein Wiederholen der Schritte 20 bis 25 für jedes der übrigen 448
Paare aus dem 19. Schritt 1138. Das Zählen der jeweils abgearbeiteten Paare
kann hierbei durch die in 5 dargestellte
Einrichtung 512 zum Zählen
erfolgen, die über
das Zählsignal 514 die
Einrichtung 502 zum Auswählen einer Anzahl von Primzahlen
pi aus den Primzahlen pj steuert.
-
Immer
dann, wenn ein Miller-Rabin-Test im Coprozessor beendet ist, ist
gemäß einem
27. Schritt 1154 so zu verfahren, wie im 18. Schritt 1136 beschrieben
ist.
-
Nachdem
die erste Teilphase nach dem 27. Schritt 1154 beendet ist,
ist gemäß einem
28. Schritt 1156 das in den Schritten 19 bis 27 beschriebene
Verfahren analog für
die Teilphasen 2 bis 7 durchzuführen.
In jeder einzelnen dieser Teilphasen wiederholen sich somit die
Schritte 19 bis 27, wobei die im Schritt 19 jeweils zu erzeugenden
Primzahlen der oben ange führten
Liste zu entnehmen sind.
-
Abhängig von
den Gegebenheiten kann das erfindungsgemäße Verfahren zum Ermitteln,
ob eine Testzahl eine Primzahl ist, oder ob über die Testzahl mit einer
vorbestimmten Wahrscheinlichkeit gesagt werden kann, dass sie eine
Primzahl ist, in Hardware oder in Software implementiert werden.
Die Implementation kann auf einem digitalen Speichermedium, insbesondere
einer Diskette oder CD mit elektronisch auslesbaren Steuersignalen
erfolgen, die so mit einem programmierbaren Computersystem zusammenwirken
können,
dass das entsprechende Verfahren ausgeführt wird. Allgemein besteht
die Erfindung somit auch in einem Computer-Programm-Produkt mit
einem auf einem maschinenlesbaren Träger gespeicherten Programmcode
zur Durchführung
des erfindungsgemäßen Verfahrens,
wenn das Computer-Programm-Produkt auf einem Rechner abläuft. In
anderen Worten ausgedrückt
kann die Erfindung somit als ein Computer-Programm mit einem Programmcode zur
Durchführung
des Verfahrens realisiert werden, wenn das Computer-Programm auf
einem Computer abläuft.
-
Abschließend ist
anzumerken, dass das beschriebene Verfahren der Primzahlgenerierung
ein statistisches Verfahren ist. Der Algorithmus liefert mit hoher
Wahrscheinlichkeit einen Output, der mit hoher Wahrscheinlichkeit
eine Primzahl ist. Das liegt einerseits daran, dass in der vorliegenden
Erfindung vorzugsweise der (probabilistische) Miller-Rabin-Test
benutzt wird und es Miller-Rabin-Pseudozufallszahlen gibt. Wenn
eine 1024 Bit große
natürliche
Zahl allerdings den Miller-Rabin-Test
für drei
verschiedene Zufallsbasen bestanden hat (was bei dem erfindungsgemäßen Verfahren
auch gefordert wird), dann ist die Wahrscheinlichkeit dass es sich
bei dieser Zahl um keine echte Primzahl handelt kleiner als 2–80.
Ein so kleiner Wert ist für
die Praxis ohne Bedeutung.
-
Der
andere Fall, dass der Algorithmus in der ihm zugestandenen Zeit
gar keinen Output produziert ist, ist ebenfalls von untergeordneter
Bedeutung. Theoretisch kann dieser Fall jedoch eintreten. Das liegt
an der Tatsache, dass es auf der Zahlengeraden beliebig große primzahlfreie
Abschnitte gibt.
-
Es
stellt sich daher die Frage, wie groß der Abstand zwischen zwei
benachbarten Primzahlen höchstens
sein kann. Im Jahre 1985 bewiesen Lou und Yao, dass für alle hinreichen
großen
n ∊ N
gilt, wobei C eine positive
Konstante ist. Zahlentheoretiker vermuten, dass die obere Schranke
in (10) durch
ersetzt
werden kann. Dies ist definitiv der Fall, wenn die sogenannte „Riemannsche
Vermutung" wahr
ist.
-
Eine
Auswertung umfangreicher empirischer Daten betreffend den Abstand
zwischen benachbarten Primzahlen legt jedoch nahe, dass selbst die
Schranke
viel
zu groß ist.
Es scheint, dass p
n – p
n–1 niemals viel
größer ist
als (log n)
2.
-
Der
zur Zeit größte bekannte
Wert von pn – pn–1 beträgt 778.
-
Er
tritt auf bei pn = 42 842 283 926 129. Für diesen
Wert pn gilt [(log n)2]
= 783.
-
Es
gibt eine Vermutung von H. Cramér, die lautet,
-
Nach
dieser Vermutung kann der Abstand zweier benachbarter 1024 Bit großer Primzahlen
den Wert 500.000 nicht wesentlich überschreiten.
-
Zusammenfassend
lässt sich
somit feststellen, dass in der vorliegenden Erfindung gleichzeitig
eine Testzahl (Aktuell-Testzahl)
mit einem ersten Primzahlüberprüfungsalgorithmus überprüft wird
und die Testzahl mit einem zweiten Primzahlüberprüfungsalgorithmus auf Primalität getestet
wird. Ein Vorteil bei dieser Vorgehensweise besteht einerseits darin,
dass schon zu Beginn der Ermittlung, ob eine Testzahl eine Primzahl
ist, mit dem Testen unter Verwendung des zweiten Primzahlüberprüfungsalgorithmus
begonnen werden kann. Ein weiterer Vorteil besteht weiterhin darin,
dass der Siebprozess (d. h. das Überprüfen der
Testzahl mit dem ersten Primzahlüberprüfungsalgorithmus) über das
im Stand der Technik bekannte Überprüfen bis
zu dem vorbestimmten Abbruchkriterium hinaus fortgesetzt werden
kann. Auf diese Weise kann sichergestellt werden, dass die Testzahlen
(Testkandidaten), die den ersten Primzahlüberprüfungsalgorithmus bestehen,
eine höhere Wahrscheinlichkeit
auf Primalität
haben, und somit auch größere Chancen
haben, das Testen auf Primalität durch
den zweiten Primzahlüberprüfungsalgorithmus
(vorzugsweise einen Miller-Rabin-Test) zu bestehen. Während bei
den bisherigen Verfahren der Siebprozess typischerweise bis zu dem
vorbestimmten Abbruchkriterium getrieben wird, so dass sichergestellt
ist, dass die Kandidatenzahl (Testzahl) teilerfremd zu den ersten (beispielsweise)
100 bis 200 Primzahlen ist, wird im erfindungsgemäßen Ansatz
der Siebprozess (d. h. das Überprüfen der
Testzahl) so lange fortgesetzt, bis die Testzahl entweder durch
den ersten Primzahlüberprüfungsalgorithmus
oder den zweiten Primzahlüberprüfungsalgorithmus
als NICHT-Primzahl
erkannt wird oder die Testzahl durch den zweiten Primzahlüberprüfungsalgorithmus
als Primzahl oder als Zahl, die mit hoher Wahrscheinlichkeit eine
Primzahl ist, erkannt wird. Durch das Ausführen des Testens der Testzahl
auf Primalität
mit dem zweiten Primzahlüberprüfungsalgorithmus
während
dem Überprüfen der
Testzahl auf Primalität mit
dem ersten Primzahlüberprüfungsalgorithmus
ist es daher möglich,
sicherzustellen, dass die Kandidatenzahlen (Testzahlen) beispielsweise
teilerfremd zu den ersten 1000 bis 10.000 (oder mehr) Primzahlen
sind. Hierdurch wird im erfindungsgemäßen Ansatz wesentlich früher eine
Primzahl (vorzugsweise mit der gewünschten großen Bitlänge) gefunden.
-
Ferner
kann bei dem erfindungsgemäßen Prozess
der Primzahlenermittlung die vorhandene Hardware optimal ausgenutzt
werden, d. h. sowohl die Kapazitäten
eines vorzugsweise einzusetzenden Coprozessors als auch die Kapazitäten eines
Hauptprozessors voll genutzt werden können. Der Siebprozess findet
hierbei in der CPU (d. h. im Hauptprozessor) statt, während gleichzeitig
die vorzugsweise einzusetzenden Miller-Rabin-Tests im kryptographischen (mathematischen)
Coprozessor ablaufen. Während
der gesamten Dauer der Primzahlsuche, wird somit im Hauptprozessor
das Siebverfahren vorangetrieben und im Coprozessor werden die einzusetzenden
Miller-Rabin-Tests durchgeführt.
-
Bei
dem Siebverfahren werden dabei vorwiegend Operationen mit kleinen
Zahlen benutzt. Diese Zahlen sind so klein, dass sie im allgemeinen
nur 1 bis 4 Byte für
ihre Darstellung beanspruchen. Deshalb ist der Hauptprozessor geeignet,
das Siebverfahren durchzuführen.
Es gibt nur eine Operation im Siebverfahren, die modulare Reduktionen
einer großen
Zahl N modu-lo einer
kleinen Primzahl p, die die CPU nicht schnell ausführen kann.
Diese Operation wird daher vorzugsweise in den Coprozessor verlegt.
Alle anderen Operationen des Siebverfahrens werden gemäß dem oben
beschriebenen Ausführungsbeispiel
in der CPU ausgeführt.
Die Zeit zum Ermitteln einer großen Primzahl, wie sie beispielsweise
für eine
RSA-Schlüssel-Generierung benötigt wird,
kann daher durch den erfindungsgemäßen Ansatz schätzungsweise
um ca. 50% verkürzt
werden.
-
Obwohl
oben ein bevorzugtes Ausführungsbeispiel
der vorliegenden Erfindung näher
erläutert
wurde, ist offensichtlich, dass die vorliegende Erfindung nicht
auf dieses Ausführungsbeispiel
beschränkt
ist. Insbesondere findet die vorliegende Erfindung auch Anwendung
auf eine weitere mögliche
Aufteilung der Schritte zwischen dem Coprozessor und dem Hauptprozessor.
-
- 100
- Vorrichtung
zur Erzeugung einer Primzahl
- 102
- Einrichtung
zum Bestimmen einer Ausgangszahl AZ
- 104
- Einrichtung
zum Ermitteln, ob eine Testzahl TZ eine Primzahl ist oder mit einer
vorbestimmten Wahrscheinlichkeit gesagt werden kann, dass die Testzahl
TZ eine Primzahl ist
- 202
- Einrichtung
zum Überprüfen einer
Aktuell-Testzahl oder zum Bereitstellen einer Zukunftstestzahl
- 204
- Einrichtung
zum Testen
- 206
- Einrichtung
zum Erkennen
- 302
- Einrichtung
zum Überprüfen einer
Aktuell-Testzahl
- 304
- Einrichtung
zum Bereitstellen einer Zukunftstestzahl
- 402
- Einrichtung
zum Bestimmen einer Aktuell-Testzahl
-
-
- 404
- Einrichtung
zum Bereitstellen der Primzahlen pj
- 406
- Einrichtung
zum Prüfen
der Aktuell-Testzahl auf Teilerfreiheit in Bezug auf die Primzahlen
pj
- 502
- Einrichtung
zum Auswählen
einer Anzahl von Primzahlen pi aus den Primzahlen
pj
- 504
- Einrichtung
zum Bestimmen eines Produktes q aus den ausgewählten Primzahlen pi
- 506
- Einrichtung
zum Reduzieren der Testzahl unter Verwendung des Produktes q, um
eine Variable β zu erhalten
- 508
- Einrichtung
zum Reduzieren von β unter
Verwendung der Primzahlen pi, um eine Variable αi zu
erhalten
- 510
- Einrichtung
zum Prüfen,
ob pi ein Teiler der Testzahl ist unter
Verwendung von αi
- 512
- Einrichtung
zum Zählen
- 602
- Einrichtung
zum Bereitstellen einer Ausgangszahlenfolge
- 604
- Einrichtung
zum Auswählen
einer Zukunftstestzahl aus der Ausgangszahlenfolge
- 702
- Einrichtung
zum Bestimmen einer charakteristischen Bitfolge σ
- 704
- Einrichtung
zum Berechnen einer Variablen ki
- 706
- Einrichtung
zum Überprüfen und
Modifizieren der charakteristischen Bitfolge σ
- 708
- Einrichtung
zum Bestimmen einer Zukunftstestzahl aus der überprüften und modifizierten Bitfolge σ'
- 1102
- erster
Schritt des erfindungsgemäßen Algorithmus
- 1104
- zweiter
Schritt des erfindungsgemäßen Algorithmus
- 1106
- dritten
Schritt des erfindungsgemäßen Algorithmus
- 1108
- vierter
Schritt des erfindungsgemäßen Algorithmus
- 1110
- fünfter Schritt
des erfindungsgemäßen Algorithmus
- 1112
- sechster
Schritt des erfindungsgemäßen Algorithmus
- 1114
- siebter
Schritt des erfindungsgemäßen Algorithmus
- 1116
- achter
Schritt des erfindungsgemäßen Algorithmus
- 1118
- neunter
Schritt des erfindungsgemäßen Algorithmus
- 1120
- zehnter
Schritt des erfindungsgemäßen Algorithmus
- 1122
- 11.
Schritt des erfindungsgemäßen Algorithmus
- 1124
- 12.
Schritt des erfindungsgemäßen Algorithmus
- 1126
- 13.
Schritt des erfindungsgemäßen Algorithmus
- 1128
- 14.
Schritt des erfindungsgemäßen Algorithmus
- 1130
- 15.
Schritt des erfindungsgemäßen Algorithmus
- 1132
- 16.
Schritt des erfindungsgemäßen Algorithmus
- 1134
- 17.
Schritt des erfindungsgemäßen Algorithmus
- 1136
- 18.
Schritt des erfindungsgemäßen Algorithmus
- 1138
- 19.
Schritt des erfindungsgemäßen Algorithmus
- 1140
- 20.
Schritt des erfindungsgemäßen Algorithmus
- 1142
- 21.
Schritt des erfindungsgemäßen Algorithmus
- 1144
- 22.
Schritt des erfindungsgemäßen Algorithmus
- 1146
- 23.
Schritt des erfindungsgemäßen Algorithmus
- 1148
- 24.
Schritt des erfindungsgemäßen Algorithmus
- 1150
- 25.
Schritt des erfindungsgemäßen Algorithmus
- 1152
- 26.
Schritt des erfindungsgemäßen Algorithmus
- 1154
- 27.
Schritt des erfindungsgemäßen Algorithmus
- 1156
- 28.
Schritt des erfindungsgemäßen Algorithmus