DE69506675T2 - Verfahren zur Ausführung von modularen Reduktion nach der Montgomery-Methode - Google Patents
Verfahren zur Ausführung von modularen Reduktion nach der Montgomery-MethodeInfo
- Publication number
- DE69506675T2 DE69506675T2 DE69506675T DE69506675T DE69506675T2 DE 69506675 T2 DE69506675 T2 DE 69506675T2 DE 69506675 T DE69506675 T DE 69506675T DE 69506675 T DE69506675 T DE 69506675T DE 69506675 T2 DE69506675 T2 DE 69506675T2
- Authority
- DE
- Germany
- Prior art keywords
- register
- bit
- mod
- bits
- generate
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Lifetime
Links
- 238000000034 method Methods 0.000 title claims description 63
- 230000009467 reduction Effects 0.000 title claims description 16
- 230000008569 process Effects 0.000 title description 3
- 230000003111 delayed effect Effects 0.000 claims description 14
- 238000004364 calculation method Methods 0.000 description 18
- 238000012545 processing Methods 0.000 description 11
- 238000012937 correction Methods 0.000 description 6
- 230000006870 function Effects 0.000 description 4
- 238000011946 reduction process Methods 0.000 description 2
- 230000008901 benefit Effects 0.000 description 1
- 230000001427 coherent effect Effects 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 238000004377 microelectronic Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/60—Methods or arrangements for performing computations using a digital non-denominational number representation, i.e. number representation without radix; Computing devices using combinations of denominational and non-denominational quantity representations, e.g. using difunction pulse trains, STEELE computers, phase computers
- G06F7/72—Methods or arrangements for performing computations using a digital non-denominational number representation, i.e. number representation without radix; Computing devices using combinations of denominational and non-denominational quantity representations, e.g. using difunction pulse trains, STEELE computers, phase computers using residue arithmetic
- G06F7/728—Methods or arrangements for performing computations using a digital non-denominational number representation, i.e. number representation without radix; Computing devices using combinations of denominational and non-denominational quantity representations, e.g. using difunction pulse trains, STEELE computers, phase computers using residue arithmetic using Montgomery reduction
Landscapes
- Physics & Mathematics (AREA)
- Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Computational Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- General Engineering & Computer Science (AREA)
- Error Detection And Correction (AREA)
- Complex Calculations (AREA)
- Detection And Correction Of Errors (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Description
- Die Erfindung betrifft ein Verfahren zur Durchführung einer modularen Reduktion nach dem Verfahren von Montgomery. Dieses Verfahren ermöglicht es, modulare Operationen auf einem endlichen Körper GF(2n) (Galois-Körper) ohne Divisionen durchführen zu können.
- Üblicherweise werden modulare Operationen auf GF(2n) in der Kryptographie für Anwendungen wie Authentifizierung von Nachrichten, Identifizierung eines Anwenders und Austausch von Schlüsseln verwendet. Derartige Anwendungsbeispiele sind z. B. in der französischen Patentanmeldung beschrieben, die unter der Nummer 2 679 054 veröffentlicht wurde.
- Kommerziell erhältlich sind integrierte Schaltkreise für diese Anwendungen, z. B. von SGS-THOMSON MICROELECTRONICS S. A. mit der Bezeichnung ST16CF54, der um eine Einheit aus Zentraleinheit- arithmetischer Coprozessor aufgebaut ist und für die Verarbeitung von Modulo-Operationen ausgelegt ist. Der verwendete Coprozessor erlaubt die Durchführung von modularen Operationen mit binären Datenwerten, die in m Worten à k Bits codiert sind, wobei k = 32 und m = 8 oder 16, wobei auf das Verfahren von Montgomery zurückgegriffen wird. Er ist Gegenstand einer europäischen Patentanmeldung mit der Veröffentlichungsnummer 0 601 907 A2 und ist in Fig. 1 dargestellt (diese Figur entspricht der Fig. 2 der genannten europäischen Patentanmeldung).
- Die Basisoperation, Pfield genannt, besteht darin, aus drei binären Datenwerten A (Multiplikand), B (Multiplikator) und N (Modul), die in einer ganzen Zahl n Bits codiert sind, durchzuführen, so daß P(A, B)N = A · B · I mod N gilt, wobei I ein binärer Datenwert, der in n Bits codiert ist, ist, so daß I = 2-n mod N. Selbstverständlich gilt n = m · k.
- Der Schaltkreis ermöglicht außerdem bei Erweiterung eine modulare Reduktion durchzuführen, d. h. C mod N zu berechnen, wobei C ein binärer Datenwert ist, der in m Worten à k Bits codiert ist.
- Das durchgeführte Verfahren ist das folgende:
- - Erzeugen von H = 2n mod N,
- - Erzeugen von P(C, H)N.
- Das Verfahren zur modularen Reduktion, das durch den in Fig. 1 dargestellten Schaltkreis abgearbeitet wird, umfaßt die folgenden Schritte:
- 1. Berechnen eines Parameters H (H = 2m·k mod N) und eines Parameters J&sub0;, codiert in k Bits, wobei J&sub0; = -N&sub0;&supmin;¹ mod 2k gilt und N&sub0; das Wort mit dem geringsten Gewicht von Modulo N ist, und Abspeichern von J&sub0; in einem Register 17 mit k Bits,
- 2. Laden des Parameters H und von Modulo N in die jeweiligen Register 10 und 12 mit n Bits, wobei n = m · k, und Initialisieren eines Registers 11 mit n Bits auf Null, wobei der Inhalt dieses Registers mit S bezeichnet wird und S ein binärer variabler Datenwert ist, der in n Bits codiert ist,
- 3. Abarbeiten einer Schleife, die mit i indiziert ist, wobei i zwischen 1 und m liegt, wobei jede i-te Iteration die folgenden Operationen umfaßt:
- a) Übertragen des i-ten Wortes Ci-1 des Datenwertes M aus einem Register 16 an eine Speicherkippstufe 21,
- b) Erzeugen eines Wertes I(i) - S(i-1) + H · Ci-1 mit S(0) = 0 und S(i-1) der aktualisiert genannte Wert von S, der im folgenden definiert wird durch:
- I - Verschieben nach rechts des Inhalts des Registers 10 zum Eingang eines ersten seriell- parallelen Multiplikatorschaltkreises 19 mit Rückschleifen des Ausgangs des Registers 10 an seinen Eingang,
- II - Multiplizieren der Bits von H mit Ci-1,
- III - Verschieben nach rechts des Inhalts des Registers 12 mit Rückschleifen des Ausgangs an den Eingang,
- IV - Bestimmen des aktualisierten Wertes von S(i-1) als Wert, der in dem Register 11 nach der (i- 1)-ten Iteration abgespeichert wird, wenn dieser kleiner als N ist, und, wenn dieser größer ist, indem seriell N von diesem in einem ersten seriellen Subtraktionsschaltkreis 28 abgezogen wird, wobei der sich dabei ergebende Wert der aktualisierte Wert von S(i-1) wird, und
- V - Verschieben nach rechts des Inhalts des Registers 11 und Bit für-Bit-Addieren des Wertes der Multiplikation H · Ci-1 zu dem aktualisierten Wert von S(i-1) in einem ersten seriellen Additionsschaltkreis 30;
- c) Multiplizieren des Wortes mit dem geringsten Gewicht von X(i), X&sub0;(i), mit J&sub0; in einem zweiten seriell-parallelen Multiplikationsschaltkreis 20 und Eintrag des Wertes X&sub0;(i) · J&sub0; mod 2k = Y&sub0;(i) in ein Register 18 und gleichzeitiges Verzögern von N und X(i) um k Zyklen in Verzögerungsschaltkreisen 32 und 34;
- d) Berechnen eines Wertes Z(i) = X(i) + Y&sub0;(i) · N durch:
- I - Multiplizieren von Y&sub0;(i) mit N, verzögert um k Zyklen, in dem zweiten Multiplikatorschaltkreis 20 und
- II - Addieren von X(i) zu dem Wert Y&sub0;(i) · N in einem zweiten seriellen Additionsschaltkreis 31,
- e) Verwerfen des Wortes mit dem geringsten Gewicht von Z(i) und Speichern der restlichen Worte, d. h. Z(i)/2k, in dem Register 11,
- f) Bit für-Bit-Vergleichen von Z(i)/2k mit N mit dem Ziel, den aktualisierten Wert von S(i) der folgenden Iteration zu bestimmen, wie es oben beschrieben wurde, wobei dieser Vergleich durchgeführt wird durch Bit für-Bit-Subtraktion von Z(i)/2k und N in einem zweiten seriellen Subtraktionsschaltkreis 29, wobei N um zusätzliche k Zyklen verzögert wird,
- g) wobei das i-te Wort des Multiplikanden C in das Register 16 zu irgendeinem Zeitpunkt während der obigen Operationen geladen wird;
- 4. Verwerfen bei der m-ten Iteration des Wortes mit dem geringsten Gewicht von Z(m) und Eintragen der übrigen Worte, d. h. Z(m)/2k, in das Register 10,
- 5. Ausgeben des in dem Register 10 abgespeicherten Ergebnisses bei der letzten Iteration, unter Umständen unter Subtraktion von N durch einen dritten seriellen Subtraktionsschaltkreis 27, wenn Z(m)/2k ≥ N.
- Allgemein nennt man Zyklusdauer oder Zyklus die Periode des Taktsignals, das die Funktion des Schaltkreises nach Fig. 1 synchronisiert, wobei man die notwendige Zeit für die Verarbeitung einer modularen Reduzierung grundsätzlich aufteilen kann in:
- - n · (n + 1) Zyklen für die Berechnung von H,
- - n Zyklen für den Schritt 2,
- - m · (n + 2 · k + x) Zyklen für die Schritte 3 und 4 zusammen, wobei x eine ganze Zahl ist,
- - n Zyklen für den Schritt 5.
- In der Praxis hängt x von der Initialisierung des Schaltkreises ab, d. h. grundsätzlich von der Einrichtung von Steuersignalen (für Multiplexer zum Beispiel), um eine kohärente Funktion des Schaltkreises zu gewährleisten. In der Praxis kann man z. B. von x = 7 ausgehen.
- Was den ersten Schritt betrifft, so wird die Berechnung des Parameters J&sub0; durch die Zentraleinheit durchgeführt (Software-Verfahren).
- Man hat H · I² = 1 mod N, was ein exaktes Ergebnis zuläßt, d. h. gleich C mod N bei dem Schritt S des modularen Multiplikationsverfahrens, das oben beschrieben wurde.
- Im übrigen wird die Berechnung von H mit Hilfe des Coprozessors nach dem folgenden Verfahren durchgeführt, bei dessen Beschreibung auf Fig. 2 Bezug genommen wird, wobei diese Fig. 2 der Fig. 9 in der genannten europäischen Patentanmeldung entspricht.
- Um H zu berechnen, geht man wie folgt vor (siehe auch die Beschreibung auf Seite 20, Zeile 47 bis Seite 25, Zeile 52 der genannten europäischen Patentanmeldung):
- 1. Laden von N in das Register 12 und Initialisieren des Registers 10 auf B(0) = 0,
- 2. gleichzeitig:
- - Verschieben nach rechts und Bit für-Bit-Subtraktion von B(0) und N in einem seriellen Subtrahierer 27 mit Verschieben nach links um eine Einheit des Ergebnisses R(0) = B(0) - N mod 2m·k, wobei das Verschieben in dem Subtrahierer erfolgt, indem ein erstes Bit auf 0 ausgegeben wird,
- - Laden von B(1) = 2 · R(0) in das Register 10,
- - Bit für-Bit-Subtraktion von 2 · R(0) und N, um festzustellen, ob B(1) ≥ oder < N, wobei diese Subtraktion in einem zweiten Subtrahierer 40 einschließlich eines Tests des Ergebnisses der Subtraktion in einem Schaltkreis 44 erfolgt,
- - wenn B(1) ≥ N, Laden von B(2) = B(1) - N und anderenfalls von B (2) = B (1) in das Register 10.
- Es ergibt sich B(2) = H = 2n mod N.
- Man kennt außerdem andere Verfahren, die das Verfahren von Montgomery verwenden. In IEE PROCEEDING E COMPUTERS & DIGITAL TECHNIQUES, Band 141, Nr. 5, September 1994, STEVENAGE GB, Seite 314-316, KOC "Montgomery reduction with even modules" wird ein Verfahren vorgestellt, das bei Rechnern eingesetzt werden kann, das aber nicht auf integrierte Schaltkreise umsetzbar ist.
- Der Erfinder hat versucht, das Verfahren zur modularen Reduktion aus EP-601 907 zu verbessern.
- Tatsächlich unterliegt der Coprozessor, so wie er momentan verwendet wird, Einschränkungen in bezug auf die Funktion, nämlich:
- - es ist nicht möglich, binäre Datenwerte mit anderen Größen als n Bits zu verarbeiten, d. h. in der Praxis wird nicht die übliche Größe von Datenwerten berücksichtigt, und
- - eine Durchführung modularer Operationen ist mit geraden Modulen nicht möglich, d. h. die Berechnung von J&sub0; ist nur möglich, wenn N&sub0; ungerade ist.
- Die Erfindung schlägt die Verwendung der Einheit aus Zentraleinheit und Coprozessor in der Form vor, daß sich diese Einschränkungen überwinden lassen.
- Das Verfahren, das zur modularen Reduktion nach dem Verfahren von Montgomery durchgeführt wird, bei welchem:
- - ein binärer Datenwert C in c Bits codiert ist, die aufgeteilt sind auf m' Worte mit k Bits, wobei m' und k ganze Zahlen sind und für m' gilt
- m' · k ≥ c > (m' - 1) · k,
- - ein binärer Datenwert N, der von Null verschieden ist, auf n Bits codiert ist,
- ist dadurch gekennzeichnet, daß zum Erzeugen von C mod N die Schritte Erzeugen eines binären Datenwertes J&sub0;(N'), wobei N' ein binärer Datenwert ist, der auf n Bit codiert ist, so daß N' ein Bit mit geringstem Gewicht hat, das 1 ist, und N = N' · , wobei a eine ganze Zahl ≥ 0 ist, Erzeugen wenigstens eines binären Datenwertes H der Form 2f(C, N), wobei f(C, N) eine ganze Zahl ist, die die Größe von C und die Zahl an Bits mit geringstem Gewicht von N darstellt, die 0 sind, und Ausgeben einerseits von C am parallelen Eingang eines Multiplikationsschaltkreises (19) mit einem seriellen Eingang, einem parallelen Eingang und einem seriellen Ausgang, und andererseits von H am seriellen Eingang des gleichen Multiplikationsschaltkreises durchgeführt werden.
- Erfindungsgemäß wird außerdem vorgeschlagen, um C mod N zu erzeugen, wobei das Bit von N mit dem geringsten Gewicht 0 ist, die folgenden Schritte durchzuführen:
- E1 - Erzeugen eines binären Datenwertes H = 2m'·k-a mod N',
- E3 - Ausgeben von C, codiert in m' · k Bits, an den Paralleleingang des Multiplikationsschaltkreises (19) und von H, codiert in n Bits, an den seriellen Eingang des gleichen Multiplikationsschaltkreises, um einen Datenwert P(C, H)N' = C · 2-a mod N' zu erhalten,
- E4 - Erzeugen von 2a · P(C, H)N' = C mod N.
- Mit diesem Verfahren ist es möglich, modulare Reduktionen mit einem geraden Modul und einer beliebigen Größe des Datenwertes C durchzuführen.
- Erfindungsgemäß wird außerdem zum Erzeugen C mod N vorgeschlagen, die folgenden Schritte durchzuführen:
- E1 - Erzeugen eines binären Datenwertes H = 2m'·k-a mod N',
- E3 - Ausgeben von C, codiert in m' · k Bits, an den Paralleleingang des Multiplikationsschaltkreises (19) und von H, codiert in n Bits, an den seriellen Eingang des gleichen Multiplikationsschaltkreises, um eine Dateneinheit P(C, H)N' = C · 2-a mod N' zu erhalten.
- Mit diesen Verfahren ist es möglich, eine modulare Reduktion für ein ungerades Modul und eine beliebige Größe von C durchzuführen.
- Die Erfindung ergibt sich neben weiteren Einzelheiten und Vorteilen in der folgenden Beschreibung von bevorzugten Ausführungsformen der Erfindung, die lediglich als Beispiel dienen und nicht einschränkend gemeint sind, wobei Bezug genommen wird auf die beigefügten Zeichnungen, bei denen:
- Fig. 1 ein Schaltschema zeigt, das die Umsetzung von modularen Operationen nach dem Verfahren von Montgomery ermöglicht,
- Fig. 2 einen Schaltkreis zeigt, der die Berechnung eines Fehlerkorrekturparameters gemäß der Erfindung ermöglicht.
- Fig. 1 zeigt einen Logikschaltkreis 1 zur modularen Verarbeitung.
- In der Praxis ist dieser Schaltkreis 1 mit einer (nicht dargestellten) Zentraleinheit verbunden, die seine Steuerung über einen (nicht dargestellten) Sequenziererschaltkreis ermöglicht.
- Er umfaßt:
- - drei Schieberegister 10, 11 und 12 mit seriellem Eingang und Ausgang. Diese Register umfassen jeweils eine gleiche Zahl n an Zellen, wobei n = m · k. Diese Register können unterteilbar sein, z. B. in Register mit n/2 Zellen und in Register mit k Bits bei den Registern 10 und 12.
- - Multiplexer 13, 14 und 15, die jeweils vor den Registern 10, 11 und 12 angeordnet sind. Man wird ebenfalls Multiplexer vor die Unterteilungen positionieren, wenn diese existieren,
- - drei Register 16, 17 und 18, die jeweils k Zellen enthalten. Diese Register 16 und 17 und 18 sind Register mit parallelem Ausgang und seriellem Eingang,
- - zwei Multiplikationsschaltkreise 19 und 20, die jeweils einen seriellen Eingang, einen parallelen Eingang und einen seriellen Ausgang haben. Der parallele Eingang des Multiplikationsschaltkreises 19 ist mit dem Ausgang des Registers 16 über eine Speicherkippstufe 21 mit k Zellen verbunden. Der parallele Eingang des Multiplikationsschaltkreises 20 ist mit einem der Ausgänge der Register 17 oder 18 über eine Speicherkippstufe 22 mit k Zellen verbunden. Diese Kippstufe 22 ist ihrerseits mit einem der Ausgänge der Register 17 und 18 über einen Multiplexer mit zwei parallelen Eingängen und einem parallelen Ausgang verbunden.
- - Multiplexer 24, 25, 25', 26, 36 und 38,
- - einen Demultiplexer 39,
- - serielle Subtraktionsschaltkreise 27, 28 und 29,
- - serielle Additionsschaltkreise 30 und 31.
- - Verzögerungsschaltkreise 32, 33 und 34 zum Verzögern bei der Weiterleitung von binären Datenwerten um k Zyklen,
- - einen Schaltkreis 35 zum Speichern des Vergleichsergebnisses.
- Weitere Einzelheiten findet man in der genannten europäischen Patentanmeldung (EP-0 601 907 A2) und insbesondere in Fig. 3 dieser Anmeldung sowie in den Abschnitten der Beschreibung, die sich darauf beziehen: Seite 15, Zeile 54 bis Seite 16, Zeile 13 und Seite 17, Zeile 50 bis Seite 18, Teile 55.
- Der Schaltkreis nach Fig. 1 erlaubt die Umsetzung der Erfindung.
- Fig. 2 zeigt einen Schaltkreis, der umfaßt:
- - die zwei Schieberegister 10 und 12, den Subtraktionsschaltkreis 27, den Multiplexer 36,
- - zwei Multiplexer mit zwei Eingängen 41 und 42, deren jeweilige Ausgänge jeweils mit den Eingängen der Register 10 und 12 verbunden sind,
- - einen seriellen Subtraktionsschaltkreis 40,
- - ein NICHT-UND-Gatter 43 mit zwei Eingängen,
- - einen Schaltkreis 44 zum Speichern des Vergleichsergebnisses.
- Die Subtraktionsschaltkreise 27 und 40 haben zwei serielle Eingänge und einen seriellen Ausgang.
- Der Subtraktionsschaltkreis 27 hat einen ersten Eingang, der mit dem Ausgang des Registers 10 verbunden ist, und sein Ausgang ist mit einem ersten Eingang des Subtraktionsschaltkreises 40 verbunden. Der Subtraktionsschaltkreis 40 ist über seinen zweiten Eingang mit dem Ausgang des Registers 12 verbunden und über seinen Ausgang mit einem invertierenden Eingang des Gatters 43 verbunden.
- Der andere (nicht invertierende) Eingang des Gatters 43 ist mit dem Ausgang des Subtraktionsschaltkreises 27 verbunden. Sein Ausgang ist mit einem Eingang des Schaltkreises 44 verbunden. Dieser Schaltkreis 44 hat einen weiteren Eingang, um ein Reinitialisierungssignal RES zu empfangen.
- Der Multiplexer 36 hat zwei Eingänge und einen Ausgang. Sein Ausgang ist mit dem zweiten Eingang des Subtraktionsschaltkreises 28 verbunden. Seine Eingänge sind jeweils mit dem Ausgang des Registers 12 und Masse (Potential, das logisch 0 entspricht) verbunden. Der Multiplexer 36 verbindet selektiv je nach Zustand eines Auswahlsignals SC, das vom Schaltkreis 44 ausgegeben wird (z. B. mit dem ersten Eingang, wenn SC = 0, und mit dem zweiten Eingang, wenn SC = 1), seinen Ausgang mit seinem ersten oder seinem zweiten Eingang.
- Der Multiplexer 41 ist über seine Eingänge jeweils mit dem Ausgang des Subtraktionschaltkreises 27 und mit Masse verbunden.
- Der Multiplexer 42 ist über seine Eingänge jeweils mit dem Ausgang des Registers 12 und mit einem Eingangsanschluß verbunden, um seriell einen binären Datenwert zu empfangen (in der Praxis Modulo N).
- Der Schaltkreis nach Fig. 2 wird verwendet, um einen Fehlerkorrekturparameter H zu erzeugen, der einen binären Datenwert darstellt.
- Man möchte eine Operation der modularen Reduktion durchführen, genannt C mod N, d. h. einen binären Datenwert aus der Manipulation von zwei anderen binären Datenwerten erzeugen.
- Mehrere verfahren sind denkbar.
- Es sei angenommen, daß zu einem ersten Zeitpunkt gilt:
- - C und N sind binär codierte Datenwerte,
- - N = N' · 2a, wobei
- - N gerade (das Bit mit dem geringsten Gewicht ist Null),
- - N', das ein binär codierter Datenwert ist, ist ungerade (das Bit mit dem geringsten Gewicht ist eins), und
- - a ist eine ganze Zahl größer oder gleich 1,
- - N ist in l verwertbaren Bits codiert, wobei 1 eine ganze Zahl ist, die nicht Null ist, und u · k ≥ l > (u - 1) · k gilt und u eine ganze Zahl ungleich Null ist, so daß u ≥ m. N' ist daher in l - a verwertbaren Bits codiert.
- - C ist in c verwertbaren Bits und m' Worten codiert, wobei:
- - c irgendeine ganze Zahl ist,
- - m' irgendeine ganze Zahl ist, so daß m' · k ≥ c > (m' - 1) · k,
- - m" eine ganze Zahl ist, so daß m" · m ≥ m' > (m" - 1) · m,
- - v eine ganze Zahl ungleich Null ist, so daß v - u ≥ m' > (v - 1) · u,
- - w eine ganze Zahl ist, so daß w · l ≥ c > (w - 1) · l.
- Unter verwertbarer Größe oder Zahl von verwertbaren Bits eines binären Datenwertes versteht man die minimale Anzahl von Bits, die notwendig und ausreichend ist, um einen Datenwert darzustellen, d. h. die minimale Zahl von Bits, so daß das Bit mit dem größten Gewicht gleich 1 ist.
- Üblicherweise bestimmt man a, l, u v, c, m', m" und w mit Hilfe der Zentraleinheit, die mit dem Coprozessor zusammenhängt, und dem sie die binären Daten zur Verarbeitung weitergibt.
- Ein erstes Verfahren besteht darin, davon auszugehen, daß C in einer ganzen Zahl von Bits codiert ist, die ein Vielfaches von n sei, und daß N' in n Bits codiert ist.
- Wenn m' > m (d. h. m" > 1), so kann man schreiben:
- C = Σi Ci · 2i·n, wobei i als Index zwischen 0 und m" - 1 liegt und Ci ein binärer Datenwert ist, der in n Bits codiert ist.
- Man stellt fest, daß bei Cm"-1 die (m" · n - c) Bits mit dem größten Gewicht Null sind.
- Man leitet aus der obigen Definition von C ab:
- C mod N = (Σi Ci · 2i·n) mod N = (Σi (Ci · 2i·n mod N)) mod N = [(Σi (Ci · 2i·n-a mod N')) mod N'] · 2a.
- Es reicht, die folgenden Schritte abzuarbeiten:
- E0 - Erzeugung von J&sub0;(N'), ein Datenwert, der binär in k Bits codiert ist,
- E1 - für i zwischen 1 und m" - 1 Durchführen der folgenden Operationen:
- - Erzeugen eines binären Datenwertes Hi = 2(i+1)·n-a mod N' - 2f(C, N) mod N' mit f(C, N) = (i + 1) · n - a,
- - Ausgeben von Hi codiert in n Bits am seriellen Eingang des Multiplikationsschaltkreises 19, und von Ci , codiert in n Bits am parallelen Eingang des gleichen Multiplikationsschaltkreises, so daß sich ergibt:
- P(Ci, Hi)N' = Ci · 2i·n-a mod N',
- - Verschieben des Ergebnisses nach links um a Bits, um Ci · 2i·n mod N zu erhalten, und Abspeichern dieses Ergebnisses,
- E2 - bei i = 0 Abspeichern von C&sub0;, wenn C&sub0; < N, oder von C&sub0; - N, wenn C&sub0; ≥ N,
- E3 - Durchführen einer modularen Addition der abgespeicherten Ci und von C&sub0; oder C&sub0; - N, um C mod N zu erhalten.
- Üblicherweise werden die Schritte E0, E2 und E3 durch die Zentraleinheit durchgeführt (Software-Verfahren). Bei dem Schritt E1 werden die Schaltkreise verwendet, die in den Fig. 1 und 2 dargestellt sind, um Hi und Ci · 2i·n-a mod N', zu berechnen.
- Das Verschieben nach links von P(Ci, Hi)N', das auf das Erzeugen von 2a · P(Ci, Hi)N' hinausläuft, kann entweder reell in einem Register oder fiktiv in der Zentraleinheit durchgeführt werden.
- Man kann einen speziell verdrahteten Schaltkreis verwenden, der zur Durchführung von den Schritten E2 und E3 entwickelt wurde. Nichtsdestotrotz wird die Oberfläche der Gruppe aus Zentraleinheit und Coprozessor besser genutzt.
- Wenn c ≥ n, wird selbstverständlich nur der Schritt E2 ausgeführt.
- Um Ci · 2i·n-a mod N' zu erzeugen, arbeitet man die folgenden Schritte ab:
- Bei i zwischen 1 und m" - 1:
- R1 - Laden des Parameters Hi in das Register 10 und von Modulo N' in das Register 12 und Initialisieren des Registers 11 auf Null, wobei der Inhalt dieses Registers 11 mit S bezeichnet wird und S ein variabler binärer Datenwert ist, der in n Bits codiert ist,
- R2 - Abarbeiten einer Schleife, die mit s indiziert ist, wobei s zwischen 1 und m' variiert, wobei jede s-te Iteration die folgenden Operationen beinhaltet:
- a) Übertragen des s-ten Wortes Ci,s-1 von Ci in dem Register 16 zu einer Speicherkippstufe 2',
- b) Erzeugen eines Wertes X(s) = S(s-1) + H -Ci,s-1, wobei S(0) = 0 (n Bits auf Null) und S(s-1) der aktualisiert genannte Wert von S ist, der nachfolgend definiert wird durch:
- I - Verschieben nach rechts des Inhalts des Registers 10 zum Eingang des seriell-parallelen Multiplikationsschaltkreises 19 mit Rückschleifen des Ausgangs des Registers 10 an seinen Eingang,
- II - Multiplizieren der Bits von Hi mit Ci,s-1,
- III - Verschieben nach rechts des Inhalts des Registers 12 mit Rückschleifen des Ausgangs dieses Registers an seinen Eingang,
- IV - Bestimmen des aktualisierten Wertes von S(s- 1) als der Wert, der in dem Register 11 nach der (s-1)-ten Iteration abgelegt wird, wenn dieser kleiner als N' ist, und wenn er größer ist, durch serielles Subtrahieren von N' von diesem in dem Subtraktionsschaltkreis z. B., wobei der Ergebniswert der aktualisierte Wert von S(s-1) ist, und
- V - Verschieben nach rechts des Inhalts des Registers 11 und Bit für-Bit-Addieren des Multiplikationswertes Hi · Ci,s-1 zu dem aktualisierten Wert von S(s-1) in dem Additionsschaltkreis 30,
- c) Multiplizieren des Wortes mit dem geringsten Gewicht von X(s), X&sub0;(s) mit J&sub0; zu dem Multiplikationsschaltkreis 20 und Eintragen des Wertes X&sub0;(s) · J&sub0; mod 2k = Y&sub0;(s) in das Register 18 und gleichzeitiges Verzögern von N' und X(s) um k Zyklen in den Verzögerungsschaltkreisen 32 und 34,
- d) Berechnen eines Wertes Z(s) = X'(s) + Y&sub0;(s) · N' durch:
- I - Multiplizieren von Y&sub0;(s) mit N', verzögert um k Zyklen, in dem Multiplikationsschaltkreis 20 und,
- II - Bit für-Bit-Addieren von X(s) zu dem Wert Y&sub0;(s) · N' in dem Additionsschaltkreis 31,
- e) Verwerfen des Wortes, das das geringste Gewicht von Z(s) hat und Abspeichern der übrigen Worte, d. h. T(s)/2k in dem Register 11,
- f) Bit für-Bit-Vergleichen von Z(s)/2k mit N', um den aktualisierten Wert S(s) der folgenden Iteration zu bestimmen, wie es oben beschrieben wurde, wobei dieser Vergleich durchgeführt wird durch Bit für- Bit-Subtraktion von Z(s)/2k und N' in dem Subtraktionsschaltkreis 29, wobei N' um zusätzliche k Zyklen in dem Verzögerungsschaltkreis 33 verzögert wurde,
- g) wobei das s-te Wort von C in das Register 16 zu irgendeinem Zeitpunkt während der obigen Operationen geladen wird;
- R3 - Ignorieren des Wortes mit dem geringsten Gewicht von Z(m) und Eintragen der übrigen Worte, d. h. Z(m)/2k in das Register 10 bei der m-ten Iteration,
- R4 - Ausgeben des Ergebnisses, das in dem Register 10 bei der letzten Iteration abgelegt wurde, eventuell unter Subtraktion von N' in dem Subtraktionsschaltkreis 27, falls notwendig,
- Um Hi = 2(i+1)·n-a mod N' zu erzeugen, kann man das bereits existierende Verfahren verwenden (d. h. auf der Grundlage nur von Subtraktionen), indem (i + 1) · n - 1 + 1 Subtraktionen nacheinander durchgeführt werden.
- Man geht wie folgt vor:
- H1 - Laden von Modulo N' in das Register 12 und Initialisieren des Registers 10 auf B(0) = 0 (in Bits auf 0),
- H2 - Ausgeben von N' des Registers 12 durch Verschieben nach rechts mit Rückschleifen an seinen Eingang um 1 - a Bits, um ein Bit mit höchstem Gewicht gleich 1 in dem Register 12 zu erhalten,
- H3 - Erzeugen und Abspeichern eines Datenwertes B(1) = 2 · (B(0) - N"), codiert in n Bits mit N" = N'· 2n-1+a, wobei N" dem im Register 12 gespeicherten Datenwert entspricht, durch
- - Ausgeben von N" und B(0) durch Verschieben nach rechts in den Registern 10 und 12 des Inhalts dieser Register, wobei der Eingang des Registers 10 mit dem Ausgang des Subtraktionsschaltkreises 27 verbunden ist und der Eingang des Registers 12 mit seinem Ausgang verbunden ist,
- - Bit für-Bit-Subtraktion von Bits von N" und B(0) in dem Subtraktionsschaltkreis 27 je nach ihrem Ausgang mit Verschieben nach links um eine Einheit des Ergebnisses, das mit R(0) = B(0) - N" bezeichnet wird, wobei das Verschieben in dem Subtrahierer erfolgt, in dem ein erstes Bit auf 0 ausgegeben wird,
- - Ablegen des Ergebnisses der Subtraktion nach Verschieben, mit B(1) = 2 · R(0) bezeichnet, in das Register 10
- - Bit für-Bit-Subtraktion von B(1) und N" in dem Subtraktionsschaltkreis 40, um zu bestimmen, ob B(1) ≥ oder < N", und Erzeugen von SC = 0 für B(1) ≥ N" bzw. SC = 1 für B(1) < N" durch den Schaltkreis 44,
- H4 - Abarbeiten einer Schleife, die mit dem Index s indiziert ist, wobei s eine ganze Zahl zwischen 1 und (i + 1) · n-l ist, wobei jede Iteration die folgenden Operationen umfaßt:
- - wenn B(i) < N", dann Laden in das Register 10 von B(s + 1) = 2 · (B(s) - 0) = 2 · B(s) nach Verschieben nach links um eine Einheit und Bit für-Bit-Vergleichen von B(s + 1) und N",
- - andernfalls Bit für-Bit-Subtraktion von N" und B(s) mit Verschieben nach links um eine Einheit des Ergebnisses und Laden in das Register 10 von B (s + 1) = 2 · (B (s) - N") und-Bit für-Bit-Vergleichen von B(s + 1) und N",
- H5 - wenn B((i + 1) · n - l + 1) ≥ N": Bit für-Bit-Subtraktion von B((i + 1) · n - l + 1) und N" und Laden des Ergebnisses in das Register 10 mit Verschieben nach rechts um eine Einheit des Resultats.
- Man hat 2n+(i+1)·n-l mod N" in dem Register 10.
- H6 - Verschieben nach rechts um n - l + a Bits in den Registern 10 und 12. Diese Register enthalten dann jeweils 2n+i·n-a mod N' und N'.
- Man sieht, daß je größer m" ist, desto größer ist die Zahl der Subtraktionen. In dieser Sicht verschlechtert sich die Rechenzeit, wobei jede Subtraktion n Zyklen benötigt, um die n Bits zu verschieben, die in den Registern 10 und 12 abgelegt sind.
- Eine Variante ist denkbar, die darin besteht, die Subtraktionen nur für den Fehlerkorrekturparameter H&sub1; in Zusammenhang mit i = 1 durchzuführen, dann die Fehlerkorrekturparameter Hi, die mit den größeren Indizes zusammenhängen, zu erhalten, indem die Operationen Pfield durchgeführt werden.
- Man geht wie folgt vor:
- - Erzeugen von H&sub1; = 22·n-a mod N' (2 · n - l + 1 Subtraktionen),
- - bei i > 1:
- - Berechnen von p (i) = Ent [log&sub2; (i · n/ (n - a))] + 1 in der Zentraleinheit (Software-Verfahren), wobei Ent den Operator "ganzzahliger Anteil" bezeichnet,
- - Abarbeiten von p(i) Operationen Pfield mit Hilfe des Schaltkreises nach Fig. 1 (es sei auf die Beschreibung Seite 19, Zeile 50 bis Seite 20, Zeile 45 der genannten europäischen Patentanmeldung verwiesen):
- Hi,t = P(Hi, t-1, Hi, t-1)N' = 2n+2exp(t)·(n-a)mod N',
- wobei t der Index zwischen 1 und p (i) ist und Hi,0 = H&sub1; gilt.
- Man erhält:
- Hi,p(i) 2n+2exp(p(i))·(n-a) mod N', wobei exp die Exponentialfunktion bedeutet,
- - Berechnen von r = 2p(i) · (n - a) - i · n + a in der Zentraleinheit (Software-Verfahren), wenn r > n, Abspeichern von Hi,p(i), dann Berechnen von 2n-r mod N' durch adäquate Kombination von Pfield Operationen.
- Die Berechnung von 2n-r mod N' erfolgt auf die folgende Art und Weise:
- - adäquate Auswahl von binären Datenwerten Di = 2-x(i)·n+y(i)·a mod N', die zusammengehörige Paare aus ganzen Zahlen (x(i), y(i)) bilden,
- - Abarbeiten von Operationen P(Di, Dj)N' = 2-(x(i)+x(j)+1)·n+(y(i)+y(1))·a mod N' zum Bestimmen von 2n-r mod N' = 2-x-n+y·a mod N'.
- - Ausgeben des Datenwertes Hi, p(i), wenn n - r ≥ 0 (oder von 2n-r mod N', wenn n - r < 0), codiert in n Bits, an den seriellen Ausgang des Multiplikationsschaltkreises 19 und paralleles Ausgeben von 2n-r (oder von Hi, p(i), wenn n - r < 0), codiert in n Bits, an den parallelen Eingang des gleichen Multiplikationsschaltkreises, um Hi zu erhalten.
- Man hat so Hi - 2(i+1)·n-a mod N'.
- Ein weiteres Verfahren besteht darin, C in eine ganze Zahl von Bits zu unterteilen, die ein Vielfaches von 1 sei.
- Wenn w > 1, kann man schreiben C = Σi Ci · 2i·l, wobei i zwischen 0 und w - 1 variiert wird.
- Man folgert daraus:
- C mod N = (Σi Ci · 2i·1) mod N
- = (Σi(Ci · 2i·l mod N)) mod N
- = [(Σi(Ci · 2i·l-a mOd N')) mod N'] · 2a.
- Es reicht, die folgenden Schritte abzuarbeiten:
- E0 - Erzeugen von J&sub0;(N'), wobei der Datenwert binär in k Bits codiert ist,
- E1 - für i zwischen 1 und w - 1 Durchführen der folgenden Operationen:
- - Erzeugen von Hi = 2n+i·l-a mod N' = 2f(C, N) mod N' mit f(C, N) = n + i · l - a,
- - Ausgeben von Ci, codiert in n Bits, am parallelen Eingang des Multiplikationsschaltkreises 19 und von H&sub1;, codiert in n Bits, am seriellen Eingang desselben Multiplikationsschaltkreises, um Ci · 2i·l-a mod N' zu erhalten,
- - Verschieben des Ergebnisses nach links um a Bits, um Ci · 2i·l mod N zu erhalten, und Abspeichern des Ergebnisses,
- E2 - bei i = 0 Abspeichern von C&sub0;, wenn C&sub0; < N, und von C&sub0; - N, wenn C&sub0; ≥ N,
- E3 - Durchführen einer modularen Addition der gespeicherten Ci und C&sub0; oder C&sub0; - N, um C mod N zu erhalten.
- Zum Durchführen der Berechnung von Hi und Ci · 2i·l-a mod N' verfährt man analog wie bei dem vorherigen Verfahren.
- Zum Berechnen von den Werten Ci · 2i·l-a mod N' geht man nach den folgenden Schritten vor:
- Bei i zwischen 1 und w - 1:
- R1 - Laden des Parameters Hi = 2n+i·l-a mod N' in das Register 10 und von Modulo N' in das Register 12 und Initialisieren des Registers 11 mit n Bits auf Null, wobei der Inhalt dieses Registers 11 mit S bezeichnet wird, wobei S ein variabler binärer Datenwert ist, der in n Bits codiert ist,
- R2 - Durchführen einer Schleife, die mit s indiziert ist, wobei s zwischen 1 und m variiert, wobei jede s-te Iteration die folgenden Schritte umfaßt:
- a) Übertragen des s-ten Wortes Ci, s-1 des Datenwertes Ci des Registers 16 an die Speicherkippstufe 21,
- b) Erzeugen eines Wertes X(s) = S(s - 1) + Hi · Ci, s-1 mit S(0) = 0 (n Bits auf Null) und S (s - 1) als aktualisiert genanntem Wert von S, der im folgenden definiert wird durch:
- I - Verschieben nach rechts des Inhalts des Registers 10 zum Eingang des seriell-parallelen Multiplikationsschaltkreises 19 mit Rückschleifen des Ausgangs des Registers 10 an seinen Eingang,
- II - Multiplizieren der Bits von Hi mit Ci, s-1,
- III - Verschieben nach rechts des Inhalts des Registers 12 mit Rückschleifen des Ausgangs dieses Registers an seinen Eingang,
- IV - Bestimmen des aktualisierten Wertes von S(s - 1) als der Wert, der in dem Register 11 nach der (s-1)-ten Iteration abgelegt ist, wenn dieser kleiner als N' ist, und wenn er größer ist, durch serielle Subtraktion von N' davon in dem Subtraktionsschaltkreis 28, wobei der sich ergebende Wert der aktualisierte Wert von S(s - 1) ist, und
- V - Verschieben nach rechts des Inhalts des Registers 11 und Bit für-Bit-Addieren des Wertes der Multiplikation Hi · Ci, s-1 mit dem aktualisierten Wert von S(s - 1) in dem Additionsschaltkreis 30,
- c) Multiplizieren in dem Multiplikationsschaltkreis 20 des Wortes mit dem geringsten Gewicht von X(s), X&sub0;(s), mit J&sub0; und Eintragen des Wertes X&sub0;(s) · J&sub0; mod 2k = Y&sub0;(s) in dem Register 18 und gleichzeitiges Verzögern von N' und X(s) um k Zyklen in den Verzögerungsschaltkreisen 32 und 34,
- d) Berechnen eines Wertes Z(s) = X(s) + Y&sub0;(s) · N' durch:
- I - Multiplizieren von Y&sub0;(s) mit N', das um k Zyklen verzögert ist, in dem Multiplikationsschaltkreis 20, und
- II - Bit für-Bit-Addieren von X(s) zu dem Wert Y&sub0;(s) · N' in dem Additionsschaltkreis 31,
- e) Verwerfen des Wortes mit dem geringsten Gewicht von Z(s) und Abspeichern der restlichen Worte, d. h. Z(s)/2k, in dem Register 11,
- f) Bit für-Bit-Vergleichen von Z(s)/2k mit N' mit dem Ziel, den aktualisierten Wert S(s) der folgenden Iteration auf die oben beschriebene Art und Weise zu bestimmen, wobei dieser Vergleich durch Bit für- Bit-Subtraktion von Z(s)/2k und N' in den Subtraktionsschaltkreis 29 erfolgt, wobei N' um zusätzliche k Zyklen in dem Verzögerungsschaltkreis 33 verzögert wurde,
- g) wobei das s-te Wort von Ci in das Register 16 zu irgendeinem Zeitpunkt während der obigen Operationen abgelegt wird;
- R3 - bei der m-ten Iteration Verwerfen des Wortes mit dem geringsten Gewicht von Z(m) und Eintragen der restlichen Worte, d. h. Z(m)/2k, in dem Register 10,
- R4 - Ausgeben des in dem Register 10 gespeicherten Ergebnisses bei der letzten Iteration, u. U. nach Abzug von N', falls nötig, mittels Subtraktionsschaltkreis 27.
- Um Hi = 22+i·l-a mod N' zu erzeugen, kann man das bereits existierende Verfahren verwenden (d. h. auf der Basis lediglich von Subtraktionen), indem man nacheinander i · l + n - l + 1 Subtraktionen durchführt.
- Man geht auf die folgende Art und Weise vor:
- H1 - Laden von Modulo N' in das Register 12 und Initialisieren des Registers 10 auf B(0) = 0 (n Bits auf 0),
- H2 - Ausgeben von N, des Registers 12 durch Verschieben nach rechts mit Rückschleifen an seinen Eingang um 1 - a Bits, um ein Bit mit höchstem Gewicht in dem Register 12 zu haben, das 1 ist,
- H3 - Erzeugen und Abspeichern eines Datenwertes B(1) = 2 · (B(0) - N"), codiert in n Bits mit N" = N' · 2n-1+a, was dem binären Datenwert in dem Register 12 entspricht, durch
- - Ausgeben von N" und B(0) durch Verschieben nach rechts in den Registern 10 und 12 des Inhalts dieser Register, wobei der Eingang des Registers 10 mit dem Ausgang des Subtraktionsschaltkreises 27 und der Eingang des Registers 12 mit seinem Ausgang verbunden ist,
- - Bit für-Bit-Subtraktion je nach ihrem Ausgang von Bits von N" und B(0) in dem Subtraktionsschaltkreis 27 mit Verschieben nach links um eine Einheit des Ergebnisses, das mit R(0) = B(0) - N" bezeichnet wird, wobei das Verschieben in dem Subtrahierer unter Ausgabe eines ersten Bits auf 0 erfolgt,
- - Ablegen des Ergebnisses der Subtraktion nach Verschieben, mit B(1) = 2 · R(0) bezeichnet, in das Register 10,
- - Bit für-Bit-Subtraktion von B(1) und N" in dem Subtraktionsschaltkreis 40, um zu bestimmen, ob B(1) ≥ oder < N" und Erzeugen von SC = 0 für B(1) ≥ N" bzw. SC = 1 für B(1) < N" in dem Schaltkreis 44,
- H4 - Durchführen einer Schleife, die mit dem Index i indiziert ist, wobei i eine ganze Zahl zwischen 1 und n + i · 1 - 1 ist, wobei jede i-te Iteration die folgenden Operationen umfaßt:
- - wenn B(i) < N", dann Laden in das Register 10 von B (s + 1) = 2 · (B(s) - 0) = 2 · B (s) nach Verschieben nach links um eine Einheit und Bit für-Bit-Vergleichen von B(s + 1) und N",
- - andernfalls Bit für-Bit-Subtraktion von N" und B(s) mit Verschieben nach links um eine Einheit und Laden in das Register 10 von B (s + 1) = 2 · (B (s) - N") und Bit für-Bit-Vergleichen von B(s + 1) und N",
- H5 - wenn B(n + i · l - l + 1) ≥ N": Bit für-Bit-Subtraktion von B(n + i · l - l + 1) und N" und Laden des Ergebnisses in das Register 10 mit Verschieben nach rechts um eine Einheit des Ergebnisses.
- Man hat 22·n+i·l-1 mod N" in dem Register 10.
- H6 - Verschieben nach rechts um n - l + a Bits in den Registern 10 und 12. Diese Register enthalten dann jeweils 2n+i·l-a mod N' und N'.
- Eine Variante ist denkbar, die analog zu der bereits beschriebenen ist:
- - Erzeugen von H&sub1; = 2n+l-a mod N' (n + 1 Subtraktionen),
- - bei i > 1:
- - Berechnen von p(i) = Ent[log&sub2;(i · l/(l - a))] + 1
- - Durchführen von p(i) Operationen Pfield mit Hilfe des Schaltkreises nach Fig. 1:
- Hi, t = P(Hi, t-1, Hi, t-1)N' = 2n+2exp(t)·(l-a) mod N' wobei t ein Index zwischen 1 und p (i) ist und Hi, &sub0; = H&sub1;.
- Man erhält:
- Hi, p(i) = 2n+2exp(p(i))·(l-a) mod N', wobei exp die Exponentialfunktion ist,
- - Berechnen von r = 2p(i) · (l - a) - i · l + a in einer Zentraleinheit (Software-Verfahren), wenn r > m, Abspeichern von Hi, p(i), dann Berechnen von 2n-r mod N' durch adäquate Kombinationen von Pfield- Multiplikationen.
- Die Berechnung von 2n-r mod N' erfolgt auf die folgende Art und Weise:
- - adäquate Auswahl von Di = 2-x(i)·n+y(i)·a mod N', die zu den Paaren ganzer Zahlen (x(i), y(i)) gehören,
- - Folge von Berechnungen von P(Di, Dj)N' = 2-(x(i)+x(j)+1)·n+(y(i)+y(j))·a mod N' zum Erhalten von 2n-r mod N' = 2-x·n+y·a mod N'
- - Ausgeben von Hi, p(i), wenn n - r ≥ 0 (oder von 2n-r mod N', wenn n - r < 0), codiert in n Bits, an den seriellen Eingang des Multiplikationsschaltkreises 19 und Parallelausgeben von 2n-r (oder von Hi, p(i) wenn n - r < 0), codiert in n Bits, an den parallelen Eingang desselben Multiplikationsschaltkreises, um Hi zu erhalten.
- Man hat somit Hi = 2n+i·1-a mod N'.
- Es sei:
- - N codiert in u · k Bits, wobei u · k - l Bits mit dem höchsten Gewicht auf Null sind, und
- - C in m' · k Bits codiert, wobei m' · k - c Bits mit dem größten Gewicht Null sind.
- Tatsächlich reichen u Worte mit k Bits, um N sicher zu bestimmen. Desgleichen reichen m' Worte mit k Bits, um C sicher zu bestimmen.
- Der Erfinder schlägt zwei Arten der Modifikation vor:
- - Das Register 16 m'-mal zu verwenden, d. h. nur eine einzige Operation Pfield durchzuführen, indem nacheinander alle Worte von C ausgegeben werden,
- - Berechnen des Fehlerkorrekturparameters H in Zusammenhang mit dieser Operation.
- Es reicht, die folgenden Schritte auszuführen:
- E0 - Erzeugen von J&sub0;(N') mit Hilfe der Zentraleinheit,
- E1 - Erzeugen von H = 2m'·k-a mod N' = 2f(C, N) mod N', wobei f(C, N) = m' · k - a, unter Verwendung des Coprozessors,
- E3 - Ausgeben von C, codiert in m' · k Bits, an den seriellen Eingang des Multiplikationsschaltkreises 19 und von H, codiert in m Bits, an den parallelen Eingang desselben Multiplikationsschaltkreises, um P (C, H)N' = C · 2-a mod N' zu erhalten,
- E4 - Verschieben des Resultates nach links um a Bits, um 2a · P(C, H)N' = C mod N zu erhalten (wobei dieser Schritt in der Zentraleinheit durchgeführt werden kann).
- In der Praxis ist die verwendbare Größe von H kleiner oder gleich der verwendbaren Größe von N', d. h. kleiner oder gleich der Größe von N und daher kleiner oder gleich n.
- Man geht auf die folgende Art vor:
- R1 - Laden des Parameters H in das Register 10 und von Modulo N' in das Register 12 und Initialisieren des Registers 11 mit n Bits auf Null, wobei der Inhalt dieses Registers 11 mit S bezeichnet wird, wobei S ein variabler binärer Datenwert ist, der in n Bits codiert ist,
- R2 - Durchführen einer Schleife, die mit s indiziert ist und bei der s zwischen 1 und m' variiert, wobei jede s-te Iteration die folgenden Operationen umfaßt:
- a) Übertragen des s-ten Wortes Cs-1 von C in dem Register 16 an die Speicherkippstufe 21,
- b) Erzeugen eines Wertes X(s) = S(s - 1) + H · Ss-1 mit S(O) = 0 (n Bits auf Null) und S(s-1) als aktualisiert genanntem Wert von S, das im Nachfolgenden definiert wird durch:
- I - Verschieben nach rechts des Inhalts des Registers 10 zum Eingang des seriell-parallelen Multiplikationsschaltkreises 19 mit Rückschleifen des Ausgangs des Registers 10 an seinen Eingang,
- II - Multiplizieren der Bits von H mit Cs-1,
- III - Verschieben nach rechts des Inhalts des Registers 12 mit Rückschleifen des Ausgangs dieses Registers an seinen Eingang,
- IV - Bestimmen des aktualisierten Wertes von S(s - 1) als derjenige Wert, der in dem Register 11 nach der (s-1)-ten Iteration abgelegt wird, wenn dieser kleiner als N ist, und wenn er größer ist, indem seriell N von diesem in dem Subtraktionsschaltkreis 28 abgezogen wird, wobei der Ergebniswert der aktualisierte Wert von S(s - 1) ist, und
- V - Verschieben nach rechts des Inhalts des Registers 11 und Bit für-Bit-Addieren des Wertes der Multiplikation H · Cs-1 zu dem aktualisierten Wert von S(s - 1) in dem Additionsschaltkreis 30.
- c) Multiplizieren des Wortes mit dem geringsten Gewicht von X(s), X&sub0;(s), mit J&sub0; in dem Multiplikationsschaltkreis 20 und Eingeben des Wertes X&sub0;(s) · J&sub0; mod 2k = Y&sub0;(s) in das Register 18 und gleichzeitiges Verzögern von N' und X(s) um k Zyklen in den Verzögerungsschaltkreisen 32 und 34,
- d) Berechnen eines Wertes Z(s) = X(s) + Y&sub0;(s) · N' durch:
- I - Multiplizieren von Y&sub0;(s) mit N', verzögert um k Zyklen, in dem Multiplikationsschaltkreis 20 und
- II - Bit für-Bit-Addieren von X(s) zu dem Wert Y&sub0;(s) · N' in dem Additionsschaltkreis 32,
- e) Verwerfen des Wortes mit dem geringsten Gewicht von Z(s) und Abspeichern der übrigen Worte, d. h. Z(s)/2k, in das dritte Register 11,
- f) Bit für-Bit-Vergleichen von Z(s)/2k mit N', um den aktualisierten Wert S(s) der folgenden Iteration zu bestimmen, wie es oben beschrieben wurde, wobei dieser Vergleich durch Bit für-Bit-Subtraktion von Z(s)/2k und N' erfolgt, wobei N' um zusätzliche k Zyklen in dem Verzögerungsschaltkreis 33 verzögert ist,
- g) wobei das s-te Wort von C in dem Register 16 zu irgendeinem Zeitpunkt während der obigen Operationen abgelegt worden ist;
- R3 - Ignorieren des Wortes mit dem geringsten Gewicht von Z(m') und Eintragen der übrigen Worte, d. h. Z(m')/2k, in das Register 10 bei der m'-ten Iteration,
- R4 - Ausgeben des Ergebnisses, das in dem Register 10 bei der letzten Iteration abgelegt worden ist, eventuell mit Subtraktion von N', falls notwendig.
- R5 - Verschieben des Ergebnisses um a Bits nach links.
- Das oben beschriebene Verfahren erlaubt es, die Zahl von notwendigen Schritten für die Erzeugung von C mod N zu minimieren.
- Man verringert somit in hohem Maße die Rechenzeit.
- Es sei angenommen, daß die nutzbare Größe von N' u Worte mit k Bits sei.
- Die Zahl der verwendbaren Bits von N' ist l' = l - a.
- Man geht auf die folgende Art und Weise vor:
- H1 - Laden von Modulo N' in das Register 12 und Initialisieren des Registers 10, wobei der Inhalt des Registers B(0) (n Bits auf 0) genannt wird, und Initialisieren des Registers 44 (d. h. Erzeugen eines Signals RES, so daß SC = 0),
- H2 - Ausgeben von N' des Registers 12 durch Verschieben nach rechts mit Rückschleifen an seinen Eingang um 1 - a Bits, wobei 1 - a die Zahl der verwendbaren Bits von N' ist, um ein Bit mit höchstem Gewicht gleich 1 im Register 12 zu haben,
- H3 - Erzeugen und Abspeichern eines Datenwertes B(1) = 2 · (B(0) - N"), codiert in n Bits mit N" = N' · 2n-1+a, wobei N" dem binären Datenwert im Register 22 entspricht, durch
- - Ausgeben von N" und B(0) durch Verschieben nach rechts in den Registern 10 und 12 des Inhalts dieser Register, wobei der Eingang des Registers 10 mit dem Ausgang des Subtraktionsschaltkreises 27 und der Eingang des Registers 12 mit seinem Ausgang verbunden ist,
- - Bit für-Bit-Subtraktion von Bits von N" und B(0) je nach ihrem Ausgang in dem Subtraktionsschaltkreis 27 mit Verschieben nach links um eine Einheit des Ergebnisses, das mit R(0) = B(0) - N" bezeichnet wird,
- - Ablegen des Ergebnisses der Subtraktion nach Verschieben, mit B(1) = 2 · R(0) bezeichnet, in das Register 10,
- - Bit für-Bit-Subtraktion von B(1) und N" in dem Subtraktionsschaltkreis 40, um zu bestimmen, ob B(1) ≥ oder < N", und Erzeugen von SC = 0 bei B (1) ≥ N" und SC = 1 bei B(1) < N" in dem Schaltkreis 44,
- H4 - Erzeugen eines Datenwertes Hint = 2t mod N" mit t = n - 1 + a + u · k + (m' - u) - k/2r, wobei r eine ganze Zahl ist, so daß k/2r eine ganze Zahl ist, durch:
- Durchführen einer Schleife, die mit dem Index i indiziert ist, wobei i eine ganze Zahl zwischen 1 und t - n ist, wobei jede i-te Iteration die folgenden Operationen umfaßt:
- - wenn B(i) < N", dann Laden in das Register 10 von B(i + 1) = 2 · (B(i) - 0) = 2 · B(i) nach Verschieben nach links von B(i) um eine Einheit und Bit für- Bit-Vergleichen von B(i + 1) und N",
- - andernfalls Bit für-Bit-Subtraktion von N" und B(i) mit Verschieben nach links um eine Einheit des Ergebnisses und Laden in das zweite Register von B(i + 1) = 2 - (B(i) - N") und-Bit für-Bit-Vergleichen von B(i + 1) und N",
- H5 - wenn B(t - n + 1) ≥ N": Bit für-Bit-Subtraktion von B(t - n + 1) und N" in dem Subtraktionsschaltkreis 27, was 2 · (B(t - n + 1) - N") ergibt und Laden in das Register 10 von B(t - n + 1) - N", was ein Verschieben nach rechts um eine Einheit erfordert,
- H6 - Verschieben nach rechts um n - l + a Bits in den Registern 10 und 12.
- Man hat damit N' in dem Register 12.
- H7 - Erzeugen des Parameters H durch Durchführen von r Pfield-Operationen
- Hint(j) = P(Hint(j - 1), Hint (j - 1))N' mit j als Index zwischen 1 und r, und Hint (0) = B(t - n + 1) · 2l-n-a oder (B(t - n + 1) - N") · 2l-n-a,
- Hint(0) befindet sich in dem Register 10 nach dem Verschieben in dem Schritt H6.
- Man hat somit Hint(r) = 2m'·k mod N'.
- H8 - Erzeugen des Parameters H durch Durchführen einer Pfield-Operation:
- H = P(Hint(r), 2u·k-a)N', wobei Hint(r) an einen seriellen Eingang des Multiplikationsschaltkreises 19 ausgegeben wird und 2u·k-a an den parallelen Eingang desselben Multiplikationsschaltkreises ausgegeben wird.
- Man erhält so H = 2m'·k-a mod N'.
- Man hat selbstverständlich davon auszugehen, daß die r + 1 Operationen Pfield in demselben Sinne wie bei dem oben beschriebenen Verfahren durchgeführt werden. Das bedeutet, daß man an den parallelen Eingang des Multiplikationsschaltkreises 19 bei jeder Operation u Worte mit k Bis ausgibt.
- Man adaptiert die oben beschriebenen Verfahren in dem Abschnitt III.
- Es reicht, auf die folgende Art und Weise vorzugehen:
- - Berechnen von J&sub0;(N) mit Hilfe der Zentraleinheit,
- - Berechnen von H = 2m'·k mod N = 2f(C, N) mod N mit f(C, N) = m' · k unter Verwendung des Coprozessors,
- - Ausgeben von C, codiert in m' · k Bits, an den seriellen Eingang des Multiplikationsschaltkreises 19 und von H, codiert in n Bits, an den parallelen Eingang desselben Multiplikationsschaltkreises, um P(C, H)N = C mod N zu erhalten.
- In der Praxis ist die verwendbare Größe von H kleiner oder gleich der verwendbaren Größe von N, d. h. kleiner oder gleich der Größe von N und daher kleiner oder gleich n.
- Man geht auf die folgende Art und Weise vor:
- R1 - Laden des Parameters H in das Register 10 und von Modulo N in das Register 12 und Initialisieren des Registers 11 mit n Bits auf Null, wobei der Inhalt des Registers 11 mit S bezeichnet wird, wobei S ein variabler binärer Datenwert ist, der in n Bit codiert ist,
- R2 - Durchführen einer Schleife, der mit s indiziert ist und bei der s zwischen 1 und m' variiert, wobei jede s-te Iteration die folgenden Operationen umfaßt:
- a) Übertragen des s-ten Wortes Cs-l von C in dem Register 16 an eine Speicherkippstufe,
- b) Erzeugen eines Wertes X(s) = S(s-1) + H · Cs-1 mit S(0) = 0 (n Bits auf Null) und S(s - 1) als aktualisiert genanntem Wert von 5, das im folgenden definiert wird durch:
- I - Verschieben nach rechts des Inhalts des Registers 10 zum Eingang des seriell-parallelen Multiplikationsschaltkreises 19 mit Rück schleifen des Ausgangs des Registers 10 an seinen Eingang,
- II - Multiplizieren der Bits von H mit Cs-1,
- III - Verschieben nach rechts des Inhalts des Registers 12 mit Rückschleifen des Ausgangs dieses Registers an seinen Eingang,
- IV - Bestimmen des aktualisierten Wertes von S(s - 1) als derjenige Wert, der in dem Register 11 nach der (s-1)-ten Iteration abgelegt wird, wenn dieser kleiner als N ist, und wenn er größer ist, indem seriell N von diesem in dem Subtraktionsschaltkreis 28 abgezogen wird, wobei der Ergebniswert der aktualisierte Wert von S(s - 1) ist, und
- V - Verschieben nach rechts des Inhalts des Registers 11 und Bit für-Bit-Addieren des Wertes der Multiplikation H · Cs-1 zu dem aktualisierten Wert von S(s - 1) in dem Additionsschaltkreis 30,
- c) Multiplizieren des Wortes mit dem geringsten Gewicht von X(s), X&sub0;(s), mit J&sub0; in dem Multiplikationsschaltkreis 20 und Eingeben des Wertes X&sub0;(s) · J&sub0; mod 2k = Y&sub0;(s) in das Register 18 und gleichzeitiges Verzögern von N und X(s) um k Zyklen in den Verzögerungsschaltkreisen 32 und 34,
- d) Berechnen eines Wertes Z(s) = X(s) + Y&sub0;(s) · N durch:
- I - Multiplizieren von Y&sub0;(s) mit N, verzögert um k Zyklen, in dem Multiplikationsschaltkreis 20 und
- II - Bit für-Bit-Addieren von X(s) zu dem Wert Y&sub0;(s) · N in dem Additionsschaltkreis 31,
- e) Verwerfen des Wortes mit dem geringsten Gewicht von Z(s) und Abspeichern der übrigen Worte, d. h. Z(s)/2k, in dem dritten Register 11,
- f) Bit für-Bit-Vergleichen von Z(s)/2k mit N, um den aktualisierten Wert S(s) der folgenden Iteration zu bestimmen, wie es oben beschrieben wurde, wobei dieser Vergleich durch Bit für-Bit-Subtraktion von Z(s)/2k und N in dem Subtraktionsschaltkreis 29 erfolgt, wobei N um zusätzliche k Zyklen in dem Verzögerungsschaltkreis 33 verzögert ist,
- g) wobei das s-te Wort von C in dem Register 16 zu irgendeinem Zeitpunkt während der obigen Operationen abgelegt worden ist;
- R3 - Ignorieren des Wortes mit dem geringsten Gewicht von Z(m') und Eintragen der übrigen Worte, d. h. Z(m')/2k, in das Register 10 bei der m'-ten Iteration,
- R4 - Ausgeben des Ergebnisses, das in dem Register 10 bei der letzten Iteration abgelegt worden ist, eventuell mit Subtraktion von N mittels Subtraktionsschaltkreis 27 falls notwendig.
- Man geht davon aus, daß die verwendbare Größe von N u Worte mit k Bits ist.
- Die Zahl der verwendbaren Bits von N ist 1.
- Man geht auf die folgende Art und Weise vor:
- H1 - Laden von Modulo N in das Register 12 und Initialisieren des Registers 10, wobei der Inhalt des zweiten Registers B(0) (n Bits auf o) genannt wird, und Initialisieren des Registers 44 (d. h. Erzeugen eines Signals RES, so daß SC = 0),
- H2 - Ausgeben von N des Registers 12 durch Verschieben nach rechts mit Rückschleifen an seinen Eingang um 1 Bits, wobei 1 die Zahl der verwendbaren Bits von Modulo N ist, um ein Bit mit dem höchsten Gewicht auf 1 in dem Register 12 zu haben,
- H3 - Erzeugen und Abspeichern eines Datenwertes B(1) = 2 · (B(0) - N'), codiert in n Bits mit N' = N · 2n-1, wobei N' dem binären Datenwert in dem Register 12 entspricht, durch
- - Ausgeben von N' und B(0) durch Verschieben nach rechts in den Registern 10 und 12 des Inhalts dieser Register, wobei der Eingang des Registers 10 mit dem Ausgang des Subtraktionsschaltkreises 27 und der Eingang des Registers 12 mit seinem Ausgang verbunden ist,
- - Bit für-Bit-Subtraktion von Bits von N' und B(0) je nach ihrem Ausgang in dem Subtraktionsschaltkreis 27 mit Verschieben nach links um eine Einheit des Ergebnisses, das mit R(0) = B(0) - N' bezeichnet wird,
- - Ablegen des Ergebnisses der Subtraktion nach Verschieben, mit B(1) = 2 · R(0) bezeichnet, in das Register 10,
- - Bit für-Bit-Subtraktion von B(1) und N' in dem Subtraktionsschaltkreis 40, um zu bestimmen, ob B(1) ≥ oder < N', und Erzeugen von SC = 0 bei B(1) ≥ N' und SC = 1 bei B(1) < N' durch den Schaltkreis 44,
- H4 - Erzeugen eines Datenwertes Hint = 2t mod N' mit t = n - l + u · k + (m' - u) · k/2r, wobei r eine ganze Zahl ist, so daß k/2r eine ganze Zahl ist, durch:
- Durchführen einer Schleife, die mit dem Index i indiziert ist, wobei i eine ganze Zahl zwischen 1 und t - n ist, wobei jede i-te Iteration die folgenden Operationen umfaßt:
- - wenn B(i) < N', dann Laden in das Register 10 von B(i + 1) = 2 · (B(i) - 0) = 2 · B(i) nach Verschieben nach links von B(i) um eine Einheit und Bit für- Bit-Vergleichen von B(i + 1) und N',
- - andernfalls Bit für-Bit-Subtraktion von N' und B(i) mit Verschieben nach links um eine Einheit des Ergebnisses und Laden in das Register 10 von B(i + 1) = 2 · (B(i) - N') und Bit für-Bit-Vergleichen von B(i + 1) und N',
- H5 - wenn B(t - n + 1) ≥ N': Bit für-Bit-Subtraktion von B(t - n + 1) und N' in dem Subtraktionsschaltkreis 27, was 2 · (B(t - n + 1) - N' ergibt und Laden in das Register 10 von B(t - n + 1) - N', was ein Verschieben nach rechts um eine Einheit erfordert,
- H6 - Verschieben nach rechts um n - 1 Bits in den Registern 10 und 12.
- Man hat daher N in dem Register 12.
- H7 - Erzeugen des Parameters H durch Durchführen von r Pfield-Operationen:
- Hint(j) = P(Hint(j - 1), Hint (j - 1))N mit j als Index zwischen 1 und r, und Hint(0) = B(t - n + 1) · 21-n oder (B(t - n + 1) - N") · 2l-n, wobei Hint(0) = 2t' mod N mit t' = u · k + (m' - u) · k/2r.
- Hint(0) befindet sich in dem Register 10 nach dem Verschieben in Schritt H6.
- Man erhält so Hint(r) = H = 2m'·k mod N.
- Man muß selbstverständlich davon ausgehen, daß die r Operationen Pfield in demselben Sinne durchgeführt werden wie bei dem oben beschriebenen Verfahren. Das bedeutet, daß man an dem parallelen Eingang des Multiplikationsschaltkreises 19 bei jeder Operation u Worte mit k Bits ausgibt.
- In bezug auf den Schaltkreis, wie er beim Stand der Technik existiert, muß man selbstverständlich den Sequenzierer schaltkreis modifizieren, der notwendige Steuersignale für die Funktion des in Fig. 1 dargestellten Schaltkreises erzeugt. So muß man insbesondere bei dem letzten beschriebenen Verfahren einen programmierbaren Zähler verwenden, um einerseits die Verwendung des Registers 16, damit man die variable Anzahl der Verwendungen dieses Registers benutzen kann, und andererseits die Verschiebungen in den Registern beim Erzeugen von H in Abhängigkeit von der Zahl von verwendbaren Bits von Modulo N (oder von N', wenn N gerade ist) zu verwalten.
- In dem Schaltkreis, wie er im Stand der Technik existiert, verwendet man die Register 10, 11 und 12, die in Register mit 8 oder 16 Worten à 32 Bit konfigurierbar sind. Wenn man die Rechenzeit noch weiter verringern möchte, die für eine modulare Operation benötigt wird, kann man Register, die zwischen 1 und 16 Worten à 32 Bit konfigurierbar sind, verwenden, d. h. in der Praxis m = u wählen. Dazu reicht es, zusätzliche Multiplexer in dem Rechenschaltkreis auf Höhe der Register 10, 11 und 12 hinzuzufügen. Dadurch wird es möglich, daß allerdings auf Kosten des Umfangs die notwendige Zeit für die Verschiebungen in den Registern 10, 11 und 12 verringert wird.
- Ein Vorteil der Möglichkeit der modularen Reduktion mit geradem oder ungeradem Modul ist die Anwendung, die besonders beim Durchführen der Verschlüsselung nach dem RSA-Verfahren vorteilhaft ist.
- Bei dem RSA-Verschlüsselungsverfahren müssen Berechnungen vom Typ C = MD mod N durchgeführt werden, wobei M eine zu verschlüsselnde oder entschlüsselnde Nachricht ist, N ein Modul, so daß N = P · Q, mit P und Q als Primzahlen, und D die Bedingung erfüllt D · E = 1 mod ((P - 1) · (Q - 1)), wobei E bekannt ist.
- Ein Algorithmus zum Durchführen der Berechnung ist der folgende:
- A = (M mod p) D mod (P &supmin; 1) mod P
- B = (M mod Q) D mod (Q &supmin; 1) mod Q
- U = Q&supmin;¹ mod P
- Wenn A < B mod P, dann gilt:
- C = (((A + P - (B mod P) · U) mod P) · Q + B.
- Andernfalls gilt:
- C = (((A - (B mod P)) · U) mod P) · Q + B.
- Dieser Algorithmus beinhaltet also:
- - 2 modulare Reduktionen,
- - 2 modulare Potenzierungen,
- - 1 modulare Multiplikation.
- Man kann die Erfindung einsetzen, um zu berechnen:
- - D mod (P - 1) und D mod (Q - 1), wobei P - 1 und Q - 1 gerade Zahlen sind,
- - M mod P und M mod Q, wobei P und Q ungerade Zahlen sind.
- Das RSA-Verfahren, das oben beschrieben wurde, erfordert es, zwei Primzahlen P und Q festzulegen. Um eine zu einfache a posteriori-Bestimmung dieser Zahlen zu verhindern, ist es wünschenswert, sehr große Zahlen zu suchen, z. B. codiert in 256 Bits.
- Eine bekannte Technik zum Auswählen von Primzahlen, die sehr groß sind, besteht darin, eine Zufallszahl zu suchen und den größten gemeinsamen Teiler pgcd (plus grand diviseur commun) dieser Zahl und des Ergebnisses der Multiplikation einer großen Zahl (z. B. 100) mit den ersten Primzahlen zu suchen. Diese Technik erfordert die Durchführung von Divisionen, und der Schaltkreis 1 ist daher nicht für diese Durchführung geeignet.
- Der Erfinder schlägt ein anderes Verfahren vor. Es wird nicht mehr das pgcd der gewählten Zufallszahl und des Produkts von 100 (zum Beispiel) mit den ersten Primzahlen berechnet, sondern es wird nacheinander die modulare Reduktion der Zufallszahl mit jeder der 100 ersten Primzahlen durchgeführt.
- Dieses Verfahren ist in der Praxis nur denkbar, wenn die notwendige Zeit zum Durchführen einer modularen Reduktion reduziert wird. Die Erfindung erlaubt es, an die Durchführung dieses Verfahrens zu denken, da mit den neuen Verfahren zur Berechnung der Fehlerkorrektur und der modularen Reduktion, wie sie in Abschnitt III entwickelt wurden, Zeitgewinne ermöglicht werden; es ist nützlich hier, die Register als 1 Wort mit k Bits (z. B. k = 32) zu konfigurieren.
- Im übrigen verwendet man beim Stand der Technik nur Register mit 256 oder 512 Bits. In der Praxis bedeutet dies bei der Durchführung von Operationen in vernünftiger Zeit, daß man Primzahlen wählen muß, die in der gleichen Zahl an Bits codiert sind. Das stellt jedoch ein Problem der Sicherheit gegenüber versuchsweiser Bestimmung von diesen Zahlen durch nicht autorisierte Personen dar.
- Der Erfinder schlägt daher vor, die verwendeten Register zu modifizieren, z. B. indem modulare Register verwendet werden, die wahlweise 32, 256, (256 + n), 384, (384 + n), 512 oder (512 + n) Zellen haben, wobei n eine ganze Zahl ist. Man nimmt z. B. n = 32.
- Man orientiert sich bei der Wahl an dem Modul, das in 512, 768 und 1024 Bits codiert ist.
- Die Wahl der modularen Register, wie sie oben definiert ist, ermöglicht:
- - in dem allgemeinen Rahmen der modularen Operationen die Zahl der Verschiebungen in den Registern zu minimieren, indem sehr flexibel eine Anpassung an die verwendbaren Größen der verarbeiteten Datenwerte erfolgt,
- - in dem speziellen Rahmen der Durchführung von der RSA- Codierung unterschiedliche Größen für P und Q wählen zu können. Zum Beispiel kann man, wenn man ein Modulo N = P · Q in 512 Bit codiert haben möchte, P in 254 Bits und Q in 258 Bits wählen. Man wird ein Register mit 256 Zellen für die Berechnungen mit P und von 256 + n = 288 Zellen für die Berechnungen mit Q wählen. Mit dem Schaltkreis nach dem Stand der Technik wäre man genötigt, ein Register mit 512 Zellen für die Berechnungen mit Q zu verwenden, was die Dauer der Berechnungen festlegt.
- Die Erfindung ist besonders vorteilhaft, sobald man sie durchführen kann (was die Verfahren betrifft), ohne daß man die existierenden Schaltkreise, die in Fig. 1 und 2 dargestellt sind, modifizieren muß. Man modifiziert lediglich den Sequenziererschaltkreis, der es ermöglicht, die unter schiedlichen Steuersignale zu erzeugen, die für die Funktion dieser Schaltkreise notwendig sind. Insbesondere kann man die verwendbaren Größen von Modulo N und der Operanden berücksichtigen. Es ist von Vorteil, wenn man zur Verwendung der Verfahren gemäß der Erfindung, wie es oben angedeutet wurde, den Schaltkreis 1 modifiziert.
- In Fig. 2 ist vorgeschlagen worden, daß man die Ressourcen des Schaltkreises in Fig. 2 nutzt. Das erlaubt es, die Gesamtgröße des Coprozessors zu minimieren. Selbstverständlich kann man einen Schaltkreis verwenden, der lediglich für die Berechnung von H dient.
- Auch wenn die Erfindung in bezug auf ein bevorzugtes Ausführungsbeispiel beschrieben wurde, versteht es sich von selbst, daß verschiedene Varianten möglich sind, ohne daß man den Rahmen der Erfindung, der durch die Ansprüche gesteckt ist, verläßt.
Claims (11)
1. Verfahren zum Durchführen einer modularen Reduktion nach
dem Montgomery-Verfahren mit einem integrierten
Schaltkreis, bei welchem:
- eine binäre Dateneinheit C codiert ist in c Bits, die
aufgeteilt sind auf m' Worte mit k Bits, wobei m' und
k ganze Zahlen sind und für m' gilt
m' · k ≥ c > (m' - 1) · k,
- eine binäre Dateneinheit N, die von Null verschieden
ist, die codiert ist auf n Bits, ·
dadurch gekennzeichnet, daß
zum Erzeugen von C mod N man die Schritte zum Erzeugen
einer binären Dateneinheit J&sub0;(N') = -N'&sub0;&supmin;¹ mod 2k
durchführt, wobei N' eine binäre Dateneinheit ist, die auf n
Bit codiert ist, so daß N' ein Bit mit geringstem
Gewicht 1 hat und N = N' · 2a, wobei a eine ganze Zahl ≥ 0
ist, zum Erzeugen wenigstens einer binären Dateneinheit
H der Form 2f(C, N), wobei f(C, N) eine ganze Zahl ist,
die die Größe von C und die Zahl an Bits mit geringem
Gewicht von N darstellt, die 0 sind, und zum Ausgeben
einerseits von C am parallelen Eingang eines
Multiplikationsschaltkreises (19) mit einem seriellen Eingang,
einem parallelen Eingang und einem seriellen Ausgang, und
andererseits von H am seriellen Eingang des gleichen
Multiplikationsschaltkreises.
2. Verfahren nach Anspruch 1, dadurch gekennzeichnet, daß
man zum Erzeugen von C mod N, wobei das Bit mit dem
geringsten Gewicht von N gleich 0 ist, die folgenden
Schritte durchführt:
E1 - Erzeugen einer binären Dateneinheit H = 2m' · k &supmin; a
mod N',
E3 - Ausgeben von C, codiert auf m' · k Bits, an den
Paralleleingang des Multiplikationsschaltkreises
(19) und von H, codiert auf n Bits, an den
seriellen Eingang des gleichen
Multiplikationsschaltkreises, um eine Dateneinheit P(C, H)N' = C · 2-a mod N'
zu erhalten,
E4 - Erzeugen von 2a · P(C, H)N' = C mod N.
3. Verfahren nach Anspruch 2, dadurch gekennzeichnet, daß
man zum Erzeugen von P(C, H)N' = C · 2-a mod N' die
folgenden Schritte durchführt:
R1 - Laden des Parameters H in ein erstes Register (10)
und von Modulo N' in ein zweites Register (12) und
Initialisieren eines dritten Registers (11) auf
Null, wobei der Inhalt dieses dritten Registers
(11) mit S bezeichnet wird und S eine variable
binäre Dateneinheit ist, die auf n Bits codiert ist,
R2 - Durchführen einer Schleife, die mit s indiziert
ist, wobei s zwischen 1 und m' variiert, wobei jede
s-te Iteration die folgenden Operationen
beinhaltet:
a) Übertragen des s-ten Wortes Cs-1 von C in einem
vierten Register (16) zu einem parallelen
Eingang des Multiplikationsschaltkreises,
b) Erzeugen eines Wertes X(s) = S(s-1) + H · Cs-1,
wobei S(0) = 0 und S(s-1) der aktualisiert
genannte Wert von S ist, der nachfolgend definiert
wird durch:
I - Verschieben nach rechts des Inhalts des
ersten Registers (10) zum seriellen
Eingang des Multiplikationsschaltkreises (19)
mit Rückschleifen des Ausgangs dieses
Registers an seinen Eingang,
II - Multiplizieren der Bits von H mit Cs-1,
III - Verschieben nach rechts des Inhalts des
zweiten Registers (12) mit Rückschleifen
des Ausgangs dieses Registers an seinen
Eingang,
IV - Bestimmen des aktualisierten Wertes von
S(s-1) als der Wert, der in dem dritten
Register (11) nach der (s-1)-ten Iteration
abgelegt wurde, wenn dieser kleiner als N'
ist, und wenn er größer ist, durch
serielles Subtrahieren von N' von diesem, wobei
der Ergebniswert der aktualisierte Wert
von S(s-1) ist, und
V - Verschieben nach rechts des Inhalts des
dritten Registers (11) und Bit für-Bit-
Addieren des Multiplikationswertes H · Cs-1
zu dem aktualisierten Wert von S(s-1),
c) Multiplizieren des Wortes mit dem geringsten
Gewicht von X(s), X&sub0;(s) mit J&sub0; und Eintragen des
Wertes X&sub0;(s) · J&sub0; mod 2k = Y&sub0;(s) in ein viertes
Register (18) und gleichzeitiges Verzögern von
N' und X(s) um k Zyklen,
d) Berechnen eines Wertes Z(s) = X(s) + Y&sub0;(s) · N'
durch:
I - Multiplizieren von Y&sub0;(s) mit N', verzögert
um k Zyklen, und
II - Bit für-Bit-Addieren von X(s) zu dem Wert
Y&sub0;(s) · N',
e) Verwerfen des Wortes, das das geringste Gewicht
hat von Z(s) und Abspeichern der übrigen Worte,
d. h. T(s)/2k in dem dritten Register (11),
f) Bit für-Bit-Vergleichen von Z(s)/2k mit N', um
den aktualisierten Wert S(s) der folgenden
Iteration zu bestimmen, wie es oben beschrieben
wurde, wobei dieser Vergleich durchgeführt wird
durch Bit für-Bit-Subtraktion von Z(s)/2k und
N', wobei N' um zusätzliche k Zyklen verzögert
wurde,
g) wobei das s-te Wort von C in das vierte Register
(16) zu irgendeinem Zeitpunkt während der obigen
Operationen geladen wird;
R3 - Ignorieren des Wortes mit dem geringsten Gewicht
von Z(m') und eintragen der übrigen Worte, d. h.
Z(m')/2k in das erste Register (10) bei der m'-ten
Iteration,
R4 - Ausgeben des Ergebnisses, das in dem ersten
Register (19) bei der letzten Iteration abgelegt wurde,
eventuell unter Subtraktion von N', falls
notwendig,
R5 - Verschieben des Ergebnisses um a Bits nach links.
4. Verfahren nach einem der Ansprüche 2 oder 3, dadurch
gekennzeichnet, daß man zum Erzeugen von H die folgenden
Schritte durchführt:
H1 - Laden von Modulo N' in ein erstes Register (12) und
Initialisieren eines zweiten Registers (10), wobei
der Inhalt des zweiten Registers B(0) genannt wird,
H2 - Ausgeben von N' des ersten Registers (12) durch
Verschieben nach rechts mit Rückschleifen an seinen
Eingang um 1 - a Bits, wobei 1 die Zahl der
verwendbaren Bits von N ist,
H3 - Erzeugen und Abspeichern einer Dateneinheit
B(1) = 2 · (B(0) - N"), codiert auf n Bits mit
N" - N' · 2n-1+a durch
- Ausgeben von N" und B(0) durch Verschieben nach
rechts in dem ersten und zweiten Register (10,
12) des Inhalts dieser Register, wobei der
Eingang des ersten Registers (12) mit seinem Ausgang
verbunden ist,
- Bit für-Bit-Subtraktion von Bits von N" und B(0)
mit Verschieben nach links um eine Einheit des
Ergebnisses, das mit R(0) = B(0) - N" bezeichnet
wird,
- Ablegen des Ergebnisses der Subtraktion nach
Verschieben, mit B(1) = 2 · R(0) bezeichnet, in das
zweite Register (10),
- Bit für-Bit-Subtraktion von B(1) und N", um zu
bestimmen, ob B(1) ≥ oder < N",
H4 - Erzeugen einer Dateneinheit Hint = 2t mod N" mit
t = n - l + a + u · k + (m' - u) · k/2r, wobei r
eine ganze Zahl ist, so daß k/2r eine ganze Zahl
ist, und u eine ganze Zahl ungleich Null ist, so
daß u · k ≥ l > (u - 1) · k durch:
Durchführen einer Schleife, die mit dem Index i
indiziert ist, wobei i eine ganze Zahl zwischen 1 und
t - n ist, wobei jede i-te Iteration die folgenden
Operationen umfaßt:
- wenn B(i) < N", dann Laden in das zweite Register
(10) von B(i + 1) = 2 · (B(i) - 0) = 2 · B(i)
nach Verschieben nach links von B(i) um eine
Einheit und Bit für-Bit-Vergleichen von B(i+1) und
N",
- andernfalls Bit für-Bit-Subtraktion von N" und
B(i) mit Verschieben nach links um eine Einheit
des Ergebnisses und Laden in das zweite Register
von B(i+1) = 2 · (B(i) - N") und-Bit
für-Bit-Vergleichen von B(i+1) und N",
H5 - wenn B(t-n+1) ≥ N": Bit für-Bit-Subtraktion von
B(t-n+1) und N" und Laden in das Register (10) von
B (t-n+1) - N",
H6 - Verschieben nach rechts um n - l + a Bits in dem
ersten und zweiten Register (10, 12)
H7 - Durchführen von r Pfield-Operationen:
Hint(j) = P(Hint(j - 1), Hint(j - 1))N' mit j als Index
zwischen 1 und r, und Hint(0) = B(t - n + 1) · 21-n-a H8
oder (B(t - n + 1) - N") · 2l-n-a,
H8 - Erzeugen des Parameters H durch Durchführen einer
Pfield-Operation:
H = P(Hint(r), 2u·k-a)N'.
5. Verfahren nach Anspruch 1, bei welchem N' = N, dadurch
gekennzeichnet, daß man zum Erzeugen von C mod N die
folgenden Schritte durchführt:
E1 - Erzeugen einer binären Dateneinheit N = 2m'·k mod N,
E3 - Ausgeben von C, codiert in m' · k Bits, an den
seriellen Eingang des Multiplikationsschaltkreises
(19) und von H, codiert in n Bits, an den
parallelen Eingang desselben Multiplikationsschaltkreises,
um P(C, H)N = C mod N zu erhalten.
6. Verfahren nach Anspruch 5, dadurch gekennzeichnet, daß
man zum Erzeugen von P(C, H)N = C mod N die folgenden
Schritte durchführt:
R1 - Laden des Parameters H in ein erstes Register (10)
und von Modulo N in ein zweites Register (12) und
Initialisieren eines dritten Registers (11) auf
Null, wobei der Inhalt dieses dritten Registers
(11) mit S bezeichnet wird, wobei 5 eine variable
binäre Dateneinheit ist, die auf n Bit codiert ist,
R2 - Durchführen einer Schleife, die mit s indiziert ist
und bei der s zwischen 1 und m' variiert, wobei
jede s-te Iteration die folgenden Operationen umfaßt:
a) Übertragen des s-ten Wortes Cs-1 von C in einem
vierten Register (16) an einen parallelen
Eingang des Multiplikationsschaltkreises,
b) Erzeugen eines Wertes X(s) = S(s-1) + H · Ss-1
mit S&sub0; = 0 und S(s-1) als aktualisiert genannten
Wert von S, das im Nachfolgenden definiert wird
durch:
I - Verschieben nach rechts des Inhalts des
ersten Registers (10) zum seriellen
Eingang des Multiplikationsschaltkreises (19)
mit Rückschleifen des Ausgangs dieses
Registers an seinen Eingang,
II - Multiplizieren der Bits von H mit Cs-1,
III - Verschieben nach rechts des Inhalts des
zweiten Registers (12) mit Rückschleifen
des Ausgangs dieses Registers an seinen
Eingang,
IV - Bestimmen des aktualisierten Wertes von
S(s-1) als derjenige Wert, der in dem
dritten Register (11) nach der (s-1)-ten
Iteration abgelegt wurde, wenn dieser
kleiner als N ist, und wenn er größer ist,
indem seriell N von diesem abgezogen wird,
wobei der Ergebniswert der aktualisierte
Wert von S(s-1) ist, und
V - Verschieben nach rechts des Inhalts des
dritten Registers (11) und Bit für Bit
Addieren des Wertes der Multiplikation
H · Cs-1 mit dem aktualisierten Wert von
S(s-1),
c) Multiplizieren des Wortes mit dem geringsten
Gewicht von X(s), X&sub0;(s) mit J&sub0; und Eingeben des
Wertes X&sub0;(s) · J&sub0; mod 2k = Y&sub0;(s) in ein viertes
Register (18) und gleichzeitiges Verzögern von N
und X(s) um k Zyklen,
d) Berechnen eines Wertes Z(s) = X(s) + Y&sub0;(s) · N
durch:
I - Multiplizieren von Y&sub0;(s) mit N, verzögert
um k Zyklen, und
II - Bit für-Bit-Addieren von X(s) zu dem Wert
Y&sub0;(s) · N,
e) Verwerfen des Wortes mit dem geringsten Gewicht
von Z(s) und Abspeichern der übrigen Worte, d. h.
Z(s)/2k in einem dritten Register (11),
f) Bit für-Bit-Vergleichen von Z(s)/2k mit N, um
den aktualisierten Wert S(s) der folgenden
Iteration zu bestimmen, wie es oben beschrieben
wurde, wobei dieser Vergleich durch Bit für-Bit-
Subtraktion von Z(s)/2k und N erfolgt, wobei N
um zusätzliche k Zyklen verzögert ist,
g) wobei das s-te Wort von C in dem vierten
Register (16) zu irgendeinem Zeitpunkt während der
obigen Operationen abgelegt worden ist;
R3 - Ignorieren des Wortes mit dem geringsten Gewicht
von Z(m') und Eintragen der übrigen Worte, d. h.
Z(m')/2k in das erste Register (10) bei der m'-ten
Iteration,
R4 - Ausgeben des Ergebnisses, das in dem ersten
Register (10) bei der letzten Iteration abgelegt worden
ist, eventuell mit Subtraktion von N, falls
notwendig.
7. Verfahren nach einem der Ansprüche 5 oder 6, dadurch
gekennzeichnet, daß zum Erzeugen von H die folgenden
Schritte durchgeführt werden:
H1 - Laden von Modulo N in ein erstes Register (12) und
Initialisieren eines zweiten Registers (10), wobei
der Inhalt des zweiten Registers B(0) genannt wird,
H2 - Ausgeben von N des ersten Registers (12) durch
Verschieben nach rechts mit Rückschleifen an seinen
Eingang um 1 Bits, wobei 1 die Zahl der
verwendbaren Bits von N ist,
H3 - Erzeugen und Abspeichern einer Dateneinheit
B(1) = 2 · (B(0) - N'), codiert auf n Bits mit
N' = N
· 2n-1 durch
- Ausgeben von N' und B(0) durch Verschieben nach
rechts in dem ersten und zweiten Register (10,
12) des Inhalts dieser Register, wobei der
Eingang des ersten Registers (12) mit seinem Ausgang
verbunden ist,
- Bit für-Bit-Subtraktion von Bits von N' und B(0)
mit Verschieben nach links um eine Einheit des
Ergebnisses, das mit R(0) = B(0) - N' bezeichnet
wird,
- Ablegen des Ergebnisses der Subtraktion nach
Verschieben, mit B(1) = 2 · R(0) bezeichnet, in das
zweite Register (10),
- Bit für-Bit-Subtraktion von B(1) und N', um zu
bestimmen, ob B(1) ≥ oder < N',
H4 - Erzeugen einer Dateneinheit Hint = 2t mod N' mit
t = n - l + u · k + (m' - u) · k/2r, wobei r eine
ganze Zahl ist, so daß k/2r eine ganze Zahl ist,
und u eine ganze Zahl ungleich Null ist, so daß
u · k ≥ l > (u - 1) · k durch:
Durchführen einer Schleife, die mit dem Index i
indiziert ist, wobei i eine ganze Zahl zwischen 1 und
t - n ist, wobei jede i-te Iteration die folgenden
Operationen umfaßt:
- wenn B(i) < N', dann Laden in das zweite Register
(10) von B(i + 1) = 2 · (B(i) - 0) = 2 · B(i)
nach Verschieben nach links von B(i) um eine
Einheit und Bit für-Bit-Vergleichen von B(i+1) und
N',
- andernfalls Bit für-Bit-Subtraktion von N' und
B(i) mit Verschieben nach links um eine Einheit
des Ergebnisses und Laden in das zweite Register
von B(i+1) = 2 · (B(i) - N') und Bit
für-Bit-Vergleichen von B(i+1) und N',
H5 - wenn B(t-n+1) ≥ N': Bit für-Bit-Subtraktion von
B(t-n+l) und N' und Laden in das Register (10) von
B (t-n+l) - N',
H6 - Verschieben nach rechts um n - l Bits in dem ersten
und zweiten Register (10, 12)
H7 - Erzeugen des Parameters H durch Durchführen von
r Pfield-OPerationen:
Hint(j) = P(Hint(j-1), Hint(j-1))N mit j als Index
zwischen 1 und r, und Hint (0) = B(t-n+1) · 2l-n oder
(B(t-n+1) - N') · 2l-n.
8. Verfahren nach Anspruch 1, dadurch gekennzeichnet, daß
zum Erzeugen von C mod N, wobei das Bit mit dem
geringsten Gewicht von N gleich 0 ist, die folgenden Schritte
durchgeführt werden:
E1 - Durchführen einer Schleife, die mit i indiziert
wird, wobei i zwischen 1 und m" - 1 variiert und m"
eine ganze Zahl ist, so daß
m" · m ≥ m' > (m" - 1) · m, und m die Bedingung
erfüllt n = m · k, wobei jede i-te Iteration die
folgenden Operationen umfaßt:
- Erzeugen einer binären Dateneinheit Hi = 2(i+1) · n-a
mod N', codiert auf n Bits,
- Ausgeben von Hi am seriellen Eingang des
Multiplikationsschaltkreises (19) und Ausgeben einer
Dateneinheit Ci, so daß C = Σi Ci · 2i·n am
parallelen Eingang dieses gleichen
Multiplikationsschaltkreises gilt, um
P(Ci, Hi)N' = Ci · 2i·n-a mod N' zu erhalten,
- Verschieben des Ergebnisses, um Ci · 2i·n mod N zu
erhalten und Abspeichern dieses Ergebnisses,
E2 - Abspeichern von C&sub0;, wenn C&sub0; < N, und von C&sub0; - N,
wenn C&sub0; ≥ N, für i = 0,
E3 - Erzeugen des gewünschten Ergebnisses durch modulare
Addition der gespeicherten Ci und C&sub0; oder C&sub0; - N.
9. Verfahren nach Anspruch 8, dadurch gekennzeichnet, daß
zum Erzeugen von Hi = 2(i+1)·n-a mod N' die folgenden
Schritte durchgeführt werden:
- Erzeugen von H&sub1; = 22·n-a mod N',
- bei i > 1:
- Erzeugen von Hi, p(i) = 2n+2exp(p(i)) · (n-a) mod N mit
p(i) = Ent [log&sub2;(i·n/(n-a))] + 1, wobei Ent den
Operator "ganzzahliger Anteil" bezeichnet,
- bei r > n Erzeugen von 2n-r mod N',
- Ausgeben von Hi,p(i), wenn n - r ≥ 0 (oder von 2n-r mod
N', wenn n - r < 0), in n Bits codiert, an den
seriellen Eingang des Multiplikationsschaltkreises (19)
und paralleles Ausgeben von 2n-r (oder von Hi,p(i),
wenn n - r < 0), codiert in n Bits, an den
parallelen Ausgang des gleichen
Multiplikationsschaltkreises.
10. Verfahren nach Anspruch 1, dadurch gekennzeichnet, daß
zum Erzeugen von C mod N, wobei das Bit mit dem
geringsten Gewicht von N gleich 0 ist, die folgenden Schritte
durchgeführt werden:
E1 - Durchführen einer Schleife, die mit i indiziert
ist, wobei i zwischen 1 und w - 1 variiert, wobei
w eine ganze Zahl ist, so daß
w · l ≥ c > (w - 1) · l und l die Zahl der
verwendbaren Bits von N ist, wobei jede i-te
Iteration die folgenden Operationen umfaßt:
- Erzeugen einer binären Dateneinheit Hi = 2n+i·l-a
mod N', codiert in n Bits,
- Ausgeben von Hi am seriellen Eingang des
Multiplikationsschaltkreises (19) und Ausgeben einer
Dateneinheit Ci, so daß C = Σi Ci
· 2i·l, an den
parallelen Eingang des gleichen
Multiplikationsschaltkreises, um P (Ci, Hi)N' = Ci · 2i·l-a mod N'
zu erhalten,
- Verschieben des Ergebnisses, um Ci · 2i·l mod N zu
erhalten, und Abspeichern dieses Ergebnisses,
E2 - bei i = 0 Abspeichern von C&sub0;, wenn C&sub0; < N, und von
C&sub0; - N, wenn C&sub0; ≥ N,
E3 - Erzeugen des gewünschten Ergebnisses durch
modulare Addition von Ci, die abgespeichert sind, und C&sub0;
oder C&sub0; - N.
11. Verfahren nach Anspruch 10, dadurch gekennzeichnet, daß
zum Erzeugen von Hi = 2n+i·l-a mod N' die folgenden
Schritte durchgeführt werden:
- Erzeugen von H&sub1; = 2n+l-a mod N',
- bei i > 1:
- Erzeugen von Hi,p(i) = 2n+2exp(p(i)) · (l-a) mod N' mit
p(i) = Ent[log&sub2;(i·l/(l-a))] + 1, wobei Ent den
Operator "ganzzahliger Teil" bezeichnet,
- bei r > n Erzeugen von 2n-r mod N',
- Ausgeben von Hi,p(i) bei n - r ≥ 0 (oder von 2n-r mod
N', wenn n - r < 0), codiert in n Bits, an den
seriellen Eingang des Multiplikationsschaltkreises
(19) und parallel Ausgeben von 2n-r (oder von Hi,p(i),
wenn n - r < 0), codiert in n Bits, an den
parallelen Eingang des gleichen
Multiplikationsschaltkreises.
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
FR9413595A FR2726668B1 (fr) | 1994-11-08 | 1994-11-08 | Procede de mise en oeuvre de reduction modulaire selon la methode de montgomery |
Publications (2)
Publication Number | Publication Date |
---|---|
DE69506675D1 DE69506675D1 (de) | 1999-01-28 |
DE69506675T2 true DE69506675T2 (de) | 1999-07-22 |
Family
ID=9468765
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
DE69506675T Expired - Lifetime DE69506675T2 (de) | 1994-11-08 | 1995-10-26 | Verfahren zur Ausführung von modularen Reduktion nach der Montgomery-Methode |
Country Status (5)
Country | Link |
---|---|
US (1) | US5764554A (de) |
EP (1) | EP0712072B1 (de) |
JP (1) | JP2722411B2 (de) |
DE (1) | DE69506675T2 (de) |
FR (1) | FR2726668B1 (de) |
Families Citing this family (45)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
FR2740330B1 (fr) * | 1995-10-27 | 1997-12-05 | Oreal | Composition comprenant un systeme polymerique et utilisation dudit systeme |
FR2740336B1 (fr) * | 1995-10-27 | 1997-12-05 | Oreal | Composition comprenant un melange polymerique et utilisation dudit melange dans une composition notamment cosmetique |
FR2741973B1 (fr) * | 1995-12-04 | 1998-01-02 | Sgs Thomson Microelectronics | Procede de production d'un parametre jo associe a la mise en oeuvre d'operation modulaire selon la methode de montgomery |
FR2743645B1 (fr) * | 1996-01-15 | 1998-02-27 | Sgs Thomson Microelectronics | Dispositif ameliorant la vitesse de traitement d'un coprocesseur d'arithmetique modulaire |
FR2743907B1 (fr) * | 1996-01-18 | 1998-02-27 | Sgs Thomson Microelectronics | Procede de production d'un parametre de correction d'erreur associe a la mise en oeuvre d'operation modulaire selon la methode de montgomery |
KR100218683B1 (ko) * | 1996-12-04 | 1999-09-01 | 정선종 | 정보 보호용 모듈러 승산 장치 |
GB2321979B (en) * | 1997-01-30 | 2002-11-13 | Motorola Ltd | Modular multiplication circuit |
DE69826963T2 (de) | 1997-11-04 | 2005-11-17 | Nippon Telegraph And Telephone Corp. | Gerät für die modulare Inversion zur Sicherung von Information |
FR2771525B1 (fr) * | 1997-11-24 | 2002-10-11 | Sgs Thomson Microelectronics | Procede de production d'un parametre de correction d'erreur associe a la mise en oeuvre d'operation modulaire selon la methode de montgomery |
FR2773231B1 (fr) * | 1997-12-31 | 2000-02-25 | Sgs Thomson Microelectronics | Procede de production ameliore d'un parametre jo associe a la mise en oeuvre d'operations modulaires selon la methode de montgomery |
US6466668B1 (en) * | 1998-01-28 | 2002-10-15 | Hitachi, Ltd. | IC card equipped with elliptical curve encryption processing facility |
FR2774783B1 (fr) * | 1998-02-09 | 2000-04-14 | Sgs Thomson Microelectronics | Procede de mise en oeuvre d'une operation modulaire elementaire selon la methode de montgomery |
JP3542278B2 (ja) * | 1998-06-25 | 2004-07-14 | 株式会社東芝 | モンゴメリ・リダクション装置及び記録媒体 |
US6182104B1 (en) * | 1998-07-22 | 2001-01-30 | Motorola, Inc. | Circuit and method of modulo multiplication |
JP2000132376A (ja) * | 1998-10-27 | 2000-05-12 | Fujitsu Ltd | 剰余演算方法,乗算剰余演算方法,剰余演算装置,乗算剰余演算装置及び記録媒体 |
FR2791156B1 (fr) * | 1999-03-17 | 2001-05-11 | St Microelectronics Sa | Dispositif et procede de mise en oeuvre d'une operation modulaire elementaire selon la methode de montgomery |
FR2791155B1 (fr) * | 1999-03-17 | 2001-05-11 | St Microelectronics Sa | Dispositif et procede de mise en oeuvre d'une operation modulaire elementaire selon la methode de montgomery |
US6963645B2 (en) | 2000-12-19 | 2005-11-08 | International Business Machines Corporation | Method for implementing the chinese remainder theorem |
US6763365B2 (en) * | 2000-12-19 | 2004-07-13 | International Business Machines Corporation | Hardware implementation for modular multiplication using a plurality of almost entirely identical processor elements |
US6914983B2 (en) | 2000-12-19 | 2005-07-05 | International Business Machines Corporation | Method for checking modular multiplication |
US6978016B2 (en) * | 2000-12-19 | 2005-12-20 | International Business Machines Corporation | Circuits for calculating modular multiplicative inverse |
US6804696B2 (en) | 2000-12-19 | 2004-10-12 | International Business Machines Corporation | Pipelining operations in a system for performing modular multiplication |
US6963977B2 (en) * | 2000-12-19 | 2005-11-08 | International Business Machines Corporation | Circuits and methods for modular exponentiation |
JP3950638B2 (ja) * | 2001-03-05 | 2007-08-01 | 株式会社日立製作所 | 耐タンパーモジュラ演算処理方法 |
US7218734B2 (en) * | 2001-05-02 | 2007-05-15 | Nciper Corporation Limited | Ring arithmetic method, system, and apparatus |
US6910095B2 (en) * | 2001-10-01 | 2005-06-21 | Britestream Networks, Inc. | Memory request handling method for small discontiguous accesses to high-density memory devices |
US7913261B2 (en) * | 2001-05-02 | 2011-03-22 | nCipher Corporation, Ltd. | Application-specific information-processing method, system, and apparatus |
US7233970B2 (en) * | 2001-05-02 | 2007-06-19 | Cipher Corporation Limited | Computational method, system, and apparatus |
US6738874B2 (en) | 2001-05-02 | 2004-05-18 | Layer N Networks, Inc. | Controller architecture and strategy for small discontiguous accesses to high-density memory devices |
US7233663B2 (en) * | 2001-10-29 | 2007-06-19 | Safenet, Inc. | Key generation performance improvement |
US8024392B2 (en) * | 2002-02-16 | 2011-09-20 | Ncipher Corporation Limited | Computational method, system, and apparatus |
US7043515B2 (en) * | 2002-12-10 | 2006-05-09 | Isic Corporation | Methods and apparatus for modular reduction circuits |
US20040120516A1 (en) * | 2002-12-23 | 2004-06-24 | International Business Machines Corporation | Modular reduction method which recognizes special conditions |
JP2004226674A (ja) * | 2003-01-23 | 2004-08-12 | Renesas Technology Corp | 情報処理方法 |
EP1650727B1 (de) * | 2003-07-31 | 2010-06-02 | Fujitsu Limited | Verfahren zum errechnen eines konvertierungsparameters aus dem montgomery-multiplikations-divisionsrest |
FR2862454A1 (fr) * | 2003-11-18 | 2005-05-20 | Atmel Corp | Methode de reduction modulaire aleatoire et equipement associe |
FR2885711B1 (fr) * | 2005-05-12 | 2007-07-06 | Atmel Corp | Procede et materiel modulaire et aleatoire pour la reduction polynomiale |
US7873830B2 (en) * | 2006-01-13 | 2011-01-18 | International Business Machines Corporation | Methods for coordinating access to memory from at least two cryptography secure processing units |
CN100435091C (zh) * | 2006-03-01 | 2008-11-19 | 成都卫士通信息产业股份有限公司 | 大数模幂系统的硬件高基实现方法 |
US7870395B2 (en) * | 2006-10-20 | 2011-01-11 | International Business Machines Corporation | Load balancing for a system of cryptographic processors |
US8532288B2 (en) | 2006-12-01 | 2013-09-10 | International Business Machines Corporation | Selectively isolating processor elements into subsets of processor elements |
US7890559B2 (en) * | 2006-12-22 | 2011-02-15 | International Business Machines Corporation | Forward shifting of processor element processing for load balancing |
KR101326078B1 (ko) | 2007-10-11 | 2013-11-08 | 삼성전자주식회사 | 모듈러 곱셈 방법, 모듈러 곱셈기 및 모듈러 곱셈기를구비하는 암호 연산 시스템 |
US8862651B2 (en) * | 2008-10-30 | 2014-10-14 | Certicom Corp. | Method and apparatus for modulus reduction |
CN106681690B (zh) * | 2015-11-07 | 2019-02-26 | 上海复旦微电子集团股份有限公司 | 基于蒙哥马利模乘的数据处理方法、模乘运算方法及装置 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5144574A (en) * | 1989-01-30 | 1992-09-01 | Nippon Telegraph And Telephone Corporation | Modular multiplication method and the system for processing data |
FR2679054A1 (fr) | 1991-07-10 | 1993-01-15 | Fortress U T 2000 Ltd | Procede et appareil d'exponentiation sur gf(2n). |
US5513133A (en) * | 1992-11-30 | 1996-04-30 | Fortress U&T Ltd. | Compact microelectronic device for performing modular multiplication and exponentiation over large numbers |
KR950015177B1 (ko) * | 1993-12-06 | 1995-12-23 | 한국전기통신공사 | 사전 계산 테이블을 이용한 모듈로 리덕션 방법 |
-
1994
- 1994-11-08 FR FR9413595A patent/FR2726668B1/fr not_active Expired - Fee Related
-
1995
- 1995-10-26 EP EP95470039A patent/EP0712072B1/de not_active Expired - Lifetime
- 1995-10-26 DE DE69506675T patent/DE69506675T2/de not_active Expired - Lifetime
- 1995-11-07 US US08/554,781 patent/US5764554A/en not_active Expired - Lifetime
- 1995-11-08 JP JP7314752A patent/JP2722411B2/ja not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
FR2726668A1 (fr) | 1996-05-10 |
US5764554A (en) | 1998-06-09 |
DE69506675D1 (de) | 1999-01-28 |
JP2722411B2 (ja) | 1998-03-04 |
EP0712072A1 (de) | 1996-05-15 |
FR2726668B1 (fr) | 1997-01-10 |
EP0712072B1 (de) | 1998-12-16 |
JPH08263315A (ja) | 1996-10-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
DE69506675T2 (de) | Verfahren zur Ausführung von modularen Reduktion nach der Montgomery-Methode | |
DE69716331T2 (de) | Schaltung für Modulo-Multiplikations- und Exponentiationsarithmetik | |
DE69506674T2 (de) | Verfahren zur Verwendung der modularen Multiplikation nach der Montgomery-Methode | |
DE69330848T2 (de) | Einrichtung und Verfahren zur digitalen Unterschrift | |
DE69130581T2 (de) | Verfahren zur Berechnung einer Operation des Typus A.X modulo N, in einem Kodierverfahren gemäss der RSA-Methode | |
DE3650335T2 (de) | Rechenverfahren und -gerät für endlichfeldmultiplikation. | |
DE69826963T2 (de) | Gerät für die modulare Inversion zur Sicherung von Information | |
DE69703085T2 (de) | Koprozessor mit zwei parallel arbeitenden Multiplizierschaltungen | |
DE19758079A1 (de) | Verfahren und Vorrichtung zur Galoisfeld-Multiplikation | |
DE69324730T2 (de) | Multiplizier-Akkumulator | |
DE10107376A1 (de) | Verfahren und Vorrichtung zum modularen Multiplizieren und Rechenwerk zum modularen Multiplizieren | |
DE69227348T2 (de) | DIVIDIERSCHALTUNG FüR GLEITKOMMAZAHLEN | |
DE69501581T2 (de) | Verfahren zum Erzeugen eines Fehlerkorrekturparameters in Verbindung mit der Verwendung von modularen Operationen nach der Montgomery-Methode | |
DE10357661B4 (de) | Modularer Montgomery-Multiplizierer und zugehöriges Multiplikationsverfahren | |
WO2004059463A1 (de) | Vorrichtung und verfahren zum berechnen einer multiplikation mit einer verschiebung des multiplikanden | |
DE10219158B4 (de) | Vorrichtung und Verfahren zum Berechnen eines Ergebnisses einer modularen Multiplikation | |
DE60320016T2 (de) | Verfahren zur ganzzahldivision gegen angriffe an versteckten kanälen | |
DE69700018T2 (de) | Koprozessor für moduläre Arithmetik mit einer schnellen Ausführung von nicht-modulären Operationen | |
DE69707717T2 (de) | Modulo-arithmetischer koprozessor mit einer schaltung für die division ganzer zahlen | |
DE69900142T2 (de) | Verfahren zur Ausführung der modularen Multiplikation nach der Montgomery-Methode | |
DE10164416A1 (de) | Verfahren zum Multiplizieren zweier Faktoren aus dem Galois-Feld sowie Multiplizierer zum Durchführen des Verfahrens | |
EP1576463A2 (de) | Modulare multiplikation mit paralleler berechnung der vorausschau-parameter | |
DE69600394T2 (de) | Verfahren zum Erzeugen eines Fehlerkorrekturparameters bezüglich der Verwendung von modularen Operationen nach der Montgomery-Methode | |
DE69606273T2 (de) | Verfahren zum Erzeugen eines Parameters J0 bezüglich der Verwendung von modularen Operationen nach der Montgomery-Methode | |
EP1478999B1 (de) | Vorrichtung und verfahren zum umrechnen eines terms |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
8364 | No opposition during term of opposition |