DE102006025569A1 - Vorrichtung und Verfahren zum Berechnen einer Multiplikations-Additions-Operation und zum Berechnen eines Ergebnisses einer modularen Multiplikation - Google Patents

Vorrichtung und Verfahren zum Berechnen einer Multiplikations-Additions-Operation und zum Berechnen eines Ergebnisses einer modularen Multiplikation Download PDF

Info

Publication number
DE102006025569A1
DE102006025569A1 DE102006025569A DE102006025569A DE102006025569A1 DE 102006025569 A1 DE102006025569 A1 DE 102006025569A1 DE 102006025569 A DE102006025569 A DE 102006025569A DE 102006025569 A DE102006025569 A DE 102006025569A DE 102006025569 A1 DE102006025569 A1 DE 102006025569A1
Authority
DE
Germany
Prior art keywords
result
operand
multiplicand
register
sections
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.)
Withdrawn
Application number
DE102006025569A
Other languages
English (en)
Inventor
Wieland Fischer
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Infineon Technologies AG
Original Assignee
Infineon Technologies AG
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Infineon Technologies AG filed Critical Infineon Technologies AG
Priority to DE102006025569A priority Critical patent/DE102006025569A1/de
Priority to US11/554,174 priority patent/US8417760B2/en
Publication of DE102006025569A1 publication Critical patent/DE102006025569A1/de
Withdrawn legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/60Methods 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/72Methods 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/722Modular multiplication
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/52Multiplying; Dividing
    • G06F7/523Multiplying only
    • G06F7/53Multiplying only in parallel-parallel fashion, i.e. both operands being entered in parallel
    • G06F7/5324Multiplying only in parallel-parallel fashion, i.e. both operands being entered in parallel partitioned, i.e. using repetitively a smaller parallel parallel multiplier or using an array of such smaller multipliers

Abstract

Zum Berechnen eines Ergebnisses einer modularen Multiplikation mit langen Operanden wird zumindest der Multiplikand in wenigstens drei kürzere Abschnitte aufgeteilt. Unter Verwendung der drei kürzeren Abschnitte des Multiplikanden, des Multiplikators und des Moduls wird eine modulare Multiplikation innerhalb einer kryptographischen Berechnung durchgeführt, wobei die Abschnitte des Multiplikanden, des Multiplikators und des Moduls Parameter der kryptographischen Berechnung sind. Die Berechnung wird sequentiell unter Verwendung der Abschnitte des Multiplikanden und unter Verwendung eines bei einer vorherigen Berechnung erhaltenen Zwischenergebnisses durchgeführt, bis alls Abschnitte des Multiplikanden abgearbeitet sind, um das Endergebnis der modularen Multiplikation zu erhalten. Die Berechnung eines Zwischenergebnisses wird unter Verwendung einer Multiplikations-Additions-Operation durchgeführt, in der sequentiell MMD-Operationen (810) und Aktualisierungsoperationen (813) durchgeführt werden und kurze Hilfsregister (812a, 812b) und kurze Ergebnisregister (802) eingesetzt werden.

Description

  • Die vorliegende Erfindung bezieht sich auf die Berechnung der modularen Multiplikation, wie sie insbesondere in kryptographischen Anwendungen erforderlich ist, und insbesondere auf eine Berechnung der modularen Multiplikation mit Operanden, die eine größere Anzahl von Stellen haben als in einem Langzahlrechenwerk Bit-Slices vorhanden sind.
  • Die modulare Multiplikation ist eine zentrale Operation, die in einer modularen Exponentiation eingesetzt wird, wie sie üblicherweise in der Kryptographie benutzt wird. So wird, wie es in 2a gezeigt ist, in der Public-Key-Kryptographie, also in der asymmetrischen Kryptographie, wie beispielsweise beim RSA-Verfahren, ein Schlüsselpaar erzeugt. Das Schlüsselpaar besteht aus einem öffentlichen Schlüssel e und einem privaten Schlüssel d. Der private Schlüssel ist nur einer Entität bekannt. Der öffentliche Schlüssel dient dieser Entität wird jedoch einer anderen Entität bereitgestellt, die z. B. verschlüsselte Daten zu der einen Entität schicken möchte, der der private Schlüssel gehört. Wie es in 2a gezeigt wird, findet eine Verschlüsselung einer unverschlüsselten Nachricht M in eine verschlüsselte Nachricht C dadurch statt, dass eine sogenannte modulare Exponentiation berechnet wird, bei der also die Nachricht mit dem öffentlichen Schlüssel potenziert wird, um dann bezüglich des Moduls N, der ebenfalls öffentlich bekannt ist, eine modulare Reduktion durchzuführen. Zur Entschlüsselung wird dieselbe Operation durchgeführt, nun jedoch mit dem privaten Schlüssel als Exponent, so dass die eine Entität, der der private Schlüssel gehört, und von der der öffentliche Schlüssel ursprünglich an die andere Entität verbreitet worden ist, wieder die Klartext-Nachricht M erhält.
  • Diese Public-Key-Verfahren können auch als Signatur/Verifikationsverfahren eingesetzt werden. Eine digitale Signatur erzeugt eine Entität dadurch, dass die zu signierende Nachricht M mit dem privaten Schlüssel dieser Entität verschlüsselt wird, um die Signatur S zu erzeugen, wie es ebenfalls in 2a dargestellt ist. Die Verifikation findet dann dadurch statt, dass die verifizierende Entität die Signatur mit dem öffentlichen Schlüssel e der signierenden Entität einer modularen Exponentiation unterzieht, um dann eine Klartextnachricht M zu erhalten, die mit der Klartextnachricht M verglichen werden kann, der die Signatur beigefügt ist. Stimmt die bei der Verifikation erhaltene Klartextnachricht mit der Klartextnachricht überein, der die Signatur beigefügt ist, so kann davon ausgegangen werden, dass das signierte Dokument authentisch ist.
  • Wie es bereits ausgeführt worden ist, wird eine kryptographische Berechnung, die eine modulare Exponentiation umfasst, wie es in 2b dargestellt ist, in mehrere modulare Multiplikationen zerlegt. So wird es üblicherweise bevorzugt, eine modulare Exponentiation zu berechnen, indem modulare Multiplikationen aufeinander folgend angewendet werden. Insbesondere aufgrund der erhöhten Sicherheitsanforderungen an den RSA-Algorithmus besteht ein Interesse dahingehend, dass eine modulare Multiplikation mit einer Breite von 2.048 Bits, also mit Schlüssellängen bzw. Modullängen von 2.048 Bits ausgeführt wird.
  • Generell stellen bei einer modularen Multiplikation im Rahmen einer kryptographischen Berechnung sowohl der Multiplikator A als auch der Multiplikand B sowie der Modul N Parameter der kryptographischen Berechnung dar, da von diesen Parametern die Endergebnisse wie Klartextnachricht, verschlüsselte Nachricht, Signatur etc. abhängen.
  • Wie es bereits ausgeführt worden ist, besteht ein Interesse dahingehend, die Schlüssellängen der Public-Key-Kryptographie stetig zu erhöhen, da damit sogenannte Brute-Force-Attacken mit immer schnelleren Prozessoren nach wie vor abgefangen werden können. So ist der Aufwand einer Brute-Force-Attacke mit der Schlüssellänge korreliert, so dass immer längere Schlüssel auch immer aufwendigere Brute-Force-Attacken bedingen, die mit derzeit verfügbaren Rechnern derart lang brauchen, dass ein kryptographischer Algorithmus als sicher betrachtet werden kann. Problematisch an immer größer werdenden Schlüssellängen ist jedoch, dass die Schlüssellänge, die ein Kryptocoprozessor in einer Chipkarte oder einem Computer (beispielsweise in einem TPM-Modul) hat, durch das Langzahlrechenwerk, das in diesem Kryptocoprozessor enthalten ist, begrenzt ist. Ein solches Langzahlrechenwerk ist beispielsweise in 4c gezeigt, wo eine sogenannte Bit-Slice-Struktur eines Langzahlrechenwerks dargestellt ist.
  • Bei dem in 4c gezeigten Ausführungsbeispiel umfasst jede Bit-Slice eine arithmetische Einheit, die beispielsweise ein Ein-Bit-Volladdierer sein kann, der einen Übertrag von einer niedrigeren Bit-Slice erhalten kann, und der einen Übertrag an eine höhere Bit-Slice ausgeben kann. Ferner ist einer solchen Bit-Slice wenigstens ein Register zugeordnet. Es wird jedoch bevorzugt, eine bestimmte Anzahl von Registern zuzuordnen, wie beispielsweise zwei oder noch besser z. B. fünf Register. Bei einem derzeit existierenden Kryptocoprozessor mit einer Bit-Slice-Anzahl von 1.408 Slices umfasst eine Bit-Slice fünf Register, nämlich das Register Z, das Register C, das Register N, das Register CR0 und das Register CR4, wie es in 4a im linken Teilbild angedeutet ist. Dann arbeitet dieser Prozessor im Langmodus. Mit dieser Anzahl von Bit-Slices ist der Prozessor gut geeignet, um RSA-Berechnungen mit Schlüssellängen von 1.024 Bits durchzuführen, da für eine Berechnung mit 1.024 Bits Schlüssellänge ein Rechenwerk, das ebenfalls nur 1.024 Bit-Slices hätte, nicht ganz ausreichen würde. So können in dem Rechenwerk mit 1.408 Bit-Slices auch etwas längere Schlüssellängen berechnet werden, es sollten jedoch immer etwas mehr Bit-Slices als Schlüsselbits vorhanden sein, um bestimmte Overflow- oder Underflow-Situationen abfangen zu können.
  • Das Rechenwerk 40, das in 4b gezeigt ist, kann durch eine Steuerung 41 mit Daten bzw. Ablaufsequenzen versorgt bzw. gesteuert werden. Ferner ist eine Registerkonfigurationseinrichtung 42 vorhanden, die die Register des Rechenwerks, also die fünf Register im Langmodus bei diesem Ausführungsbeispiel, auf zehn Register im Kurzmodus konfigurieren kann. Aus jedem Lang-Modus-Register einer bestimmten Länge werden somit bei diesem Ausführungsbeispiel zwei kurze Register der jeweils halben Länge, so dass zwei N-Register, zwei C-Register, zwei Z-Register und ein CR0-Register, ein CR2-Register, ein CR4-Register und ein CR6-Register entstehen. Nach wie vor hat jede Bit-Slice eine arithmetische Einheit, nämlich z. B. einen Ein-Bit-Volladdierer, der nun jedoch im Gegensatz zu der Situation in 4c, die den Lang-Modus darstellt, die verdoppelte Anzahl von Registern im Kurz-Modus hat.
  • Wenn der Kryptocoprozessor mit 1.408 Bits nun RSA-Schlüssellängen von z. B. 2.048 Bits berechnen soll, so wird dies nicht mehr ohne weiteres gehen, da zu wenig Bit-Slices vorhanden sind.
  • Daraus wird ersichtlich, dass eine Erhöhung der Schlüssellängen zwar von der Sicherheit her sehr wünschenswert ist, dass jedoch mit jeder Erhöhung der Schlüssellängen bereits existierende Coprozessoren nicht mehr ohne weiteres verwendungsfähig sind. Es müssten daher immer neue längere Rechenwerke entwickelt werden, was Entwicklungszeit und Kosten in Anspruch nimmt.
  • Um dies zu umgehen, wurden Methoden entwickelt, mit denen man auf kleineren Rechenwerken größere Zahlen verarbeiten kann. So existieren allgemein Verfahren zur Aufdopplung eines Re chenwerks in Software. Ein solches Verfahren ist beispielsweise die Berechnung der modularen Multiplikation unter Verwendung des chinesischen Restsatzes (CRT), wie er im Abschnitt 14.5 auf den Seiten 610–613 des „Handbook of Applied Cryptography", A. Menezes, P. van Oorschot, S. Vanstone, 1996, beschrieben ist. Allgemein wird unter Verwendung des chinesischen Restsatzes eine modulare Exponentiation mit einem langen Modul in zwei modulare Exponentiationen mit einem kurzen Modul aufgesplittet, wobei diese Ergebnisse dann zusammengefasst werden. Damit kann ein Rechenwerk gewissermaßen „softwaremäßig" aufgedoppelt werden.
  • Dieses Konzept ermöglicht jedoch nur die Aufdopplung, was für Situationen ungünstig ist, bei denen nicht unbedingt eine Aufdopplung der Schlüssellängen benötigt wird, sondern bei denen Schlüssellängen benutzt werden sollen, die vielleicht nur 50 % größer sind als die architektonische Rechenwerkslänge, also die Anzahl von Bit-Slices. Benutzt man solche 100%-Aufdopplungsalgorithmen, so wird das Rechenwerk dann, wenn nur vielleicht um 50 % größere Schlüssellängen verarbeitet werden sollen, jeweils nur zu (100 + 50) %/2 = 75 % benutzt. Prinzipiell werden somit Hardware-Ressourcen verschenkt.
  • Zusätzlich zu der CRT-Aufdopplungsmethode existieren auch weitere Rechenwerk-Aufdopplungsalgorithmen, wie beispielsweise die Montgomery-Multiplikation, eine Multiplikation mit Karatsuba-Offman und nachfolgende Reduktion mittels beispielsweise der Barrett-Reduktion oder die Aufdopplungsmethode unter Verwendung der MultModDiv-Operation, wie sie beispielsweise in dem deutschen Patent DE 10219158 B4 dargestellt ist.
  • Wenn beispielsweise 4d betrachtet wird, so ist ein Rechenwerk für eine 1.024-Bit-Schlüssellänge bei 43 angedeutet. Eine Software-Aufdopplung unter Verwendung z. B. des chinesischen Restsatzes oder unter Verwendung einer der vorher genannten weiteren Methoden ist dann, wenn 2.048 Bits benötigt werden, wie es im Block 44 in 4d dargestellt ist, sinn voll. So wird das ganze Rechenwerk ausgenutzt, es bleiben also keine unbenutzten Bit-Slices zurück. Soll jedoch eine Schlüssellänge mit z. B. 1.536 Bits genügen, so wird eine Software-Aufdopplung unter Verwendung z. B. des chinesischen Restsatzes (CRT) dazu führen, dass 2 × 768 Bits benötigt werden. Die restlichen 2 × 256 Bits würden in diesem Fall unbenutzt bleiben.
  • Im Stand der Technik fehlt somit ein alternatives Rechenwerk-Erweiterungskonzept, durch das flexiblere Schlüssellängen und damit eine flexiblere Rechenwerksausnutzung erreicht werden kann.
  • Die vorliegende Erfindung schafft unter anderem ein Verfahren bzw. eine Vorrichtung zum Berechnen des Ergebnisses einer Multiplikations-Additions-Operation zwischen einem ersten Operanden, einem zweiten Operanden, einem dritten Operanden und einem vierten Operanden, wobei der erste und der dritte Operand länger als der zweite Operand oder der vierte Operand sind, und wobei Abschnitte des ersten Operanden gleich oder kürzer als der vierte Operand sind, mit einer Einrichtung zum Berechnen von Ergebnissen einer MMD-Operation unter Verwendung des zweiten Operanden, eines höherwertigen Abschnitts des ersten Operanden und des vierten Operanden als Modul, und zum Speichern eines DIV-Ergebnisses in einem ersten Hilfsregister und eines MOD-Ergebnisses in einem zweiten Hilfsregister; einer Einrichtung zum Aktualisieren des DIV-Ergebnisses und des MOD-Ergebnisses unter Verwendung einer Addition von wenigstens einem Abschnitt des dritten Operanden und zum Speichern von aktualisierten Ergebnissen in einem vierten Ergebnisregister und einem dritten Ergebnisregister; und einer Einrichtung zum erneuten Ausführen der MMD-Operation und des Aktualisierens unter Verwendung eines anderen Abschnitts des ersten Operanden, bis alle Abschnitte des ersten Operanden abgearbeitet sind, wobei Ergebnisregister, in denen aktualisierte Ergebnisse einer MMD-Operation gespeichert sind, und ein Register, in dem ein MOD-Ergebnis einer letzten MMD- Operation gespeichert ist, zusammen das Ergebnis (802) darstellen.
  • Der vorliegenden Erfindung liegt die Erkenntnis zugrunde, dass wenigstens der Multiplikand in zumindest drei Abschnitte aufgeteilt wird, wobei jeder Abschnitt eine Anzahl von Stellen aufweist, die kleiner als eine halbe Anzahl von Stellen ist, wobei die wenigstens drei Abschnitte des Multiplikanden sämtliche Stellen des Multiplikanden umfassen. Ferner wird eine Einrichtung zum sequentiellen Berechnen vorgesehen, um sequentiell für jeden Abschnitt des Multiplikanden ein Zwischenergebnis zu berechnen, und um dann unter Verwendung dieser Zwischenergebnisse ein Ergebnis der modularen Multiplikation zu erhalten.
  • Durch Aufsplittung des Multiplikanden in wenigstens drei Abschnitte kann vorzugsweise ein teilbares Rechenwerk verwendet werden, bei dem der Multiplikand und vorzugsweise auch der Multiplikator und der Modul in drei oder mehr Teile aufgeteilt wird, so dass jedes Drittel der Zahl in der Hälfte des Coprozessors Platz hat. Somit kann auch das Rechenwerk selbst zur vollen Länge ausgenutzt werden, und es werden keine Hardware-Ressourcen verschwendet.
  • Bei bevorzugten Ausführungsbeispielen findet eine Teilung sämtlicher Register des Rechenwerks statt, und zwar in Register gleicher Länge, und werden ferner sämtliche Operanden, also sowohl der Multiplikator als auch der Multiplikand als auch der Modul in ebenfalls drei oder mehr Teile aufgeteilt, so dass am Ende zur Berechnung der (langen) modularen Multiplikation lediglich logische und arithmetische Operationen benötigt werden, die mit Zahlen stattfinden, deren Länge, also deren Anzahl von Stellen, höchstens gleich der Anzahl von Stellen eines Abschnitts der Zahlen ist. Vorzugsweise wird, um eine optimale Ausnutzung eines Rechenwerks zu erhalten, der Abschnitt, in den eine Zahl aufgeteilt wird, also die Anzahl von Bit-Slices des Rechenwerks, das diese Operationen mit einer kleineren Anzahl von Stellen durchführen muss, derart gewählt, dass sie der Hälfte des teilbaren Rechenwerks entsprechen.
  • Erfindungsgemäß wird ein Rechenverfahren unter Verwendung der MultModDiv-Operation eingesetzt, bei der vorzugsweise niemals mehr als zehn kurze Register des Rechenwerks verwendet werden, wobei zwei kurze Register des Rechenwerks im Kurz-Modus einem Register des Rechenwerks im Lang-Modus entsprechen.
  • Insbesondere wird bei der vorliegenden Erfindung, um die modulare Multiplikation zu berechen, die gesamte Aufgabe in drei sequentiell durchzuführende Multiplikations-Modul-Additions-Operationen aufgeteilt, wobei für jede dieser einzelnen Operationen ein anderer Abschnitt des Multiplikanden B verwendet wird. Jede solche Multiplikations-Modul-Additions-Operation wird wiederum in eine Multiplikations-Additions-Operation und eine anschließende Reduktions-Operation aufgeteilt, wobei in der Multiplikations-Additions-Operation immer der gerade betrachtete Abschnitt des Multiplikanden B verwendet wird und in einzelnen Iterationsschritten entsprechende Abschnitte des aus dem vorhergehenden Schritt vorliegenden Zwischenergebnisses C und des Multiplikators A eingesetzt werden.
  • Erfindungsgemäß wird nunmehr diese Multiplikations-Additions-Operation in mehrere MultModDiv-Operationen aufgeteilt also in modulare Multiplikationen, die jeweils den ganzzahligen Quotienten, also das DIV-Ergebnis, und den Rest, also das MOD-Ergebnis, liefern. Sowohl das DIV-Ergebnis als auch das MOD-Ergebnis sind kurze Zahlen, die in kurzen Registern abgespeichert werden können. Die kurzen Register, in denen Ergebnisse der MMD-Operation abgespeichert werden, werden auch als Hilfsregister bezeichnet, da sie im Verlauf der iterativen Abarbeitung der Multiplikations-Additions-Operation mehrmals beschrieben werden. In anderen Worten ausgedrückt, werden die Ergebnisse einer MMD-Operation nur für die nachfolgende Aktu alisierungsoperation benötigt, in der sukzessive ein Stück der Ergebniszahl, nämlich ein Abschnitt der Ergebniszahl, der in ein kurzes Register passt, berechnet wird. Insbesondere wird beim Aktualisieren das Ergebnis der vorherigen MMD-Operation unter Verwendung einer Addition von Abschnitten des dritten Operanden C, also des Zwischenergebnisses eines vorherigen Schritts, aktualisiert.
  • Erfindungsgemäß liefert jeder Aktualisierungsschritt zwei Einträge in ein Ergebnisregister, wobei der höherwertige Eintrag in das Ergebnisregister bereits ein nicht mehr verändertes Endergebnis darstellt, während der niederwertige Eintrag der zwei erhaltenen Ergebnisse je nach vorliegender Zahlensituation durch ein Ergebnis eines Aktualisierungsschritts noch verändert wird.
  • Für die vorliegende Erfindung wird somit für eine Multiplikations-Additions-Operation nur ein Rechenwerk benötigt, das eine Wortbreite gleich der Länge nur eines Abschnitts und nicht der ganzen Länge eines Operanden ist, das also eine kurze Wortbreite hat. Anders ausgedrückt benötigt ein solches Rechenwerk nur innere Register der kurzen Länge und nicht der langen Länge. Darüber hinaus werden lediglich bei einem bevorzugten Ausführungsbeispiel der vorliegenden Erfindung lediglich zwei Hilfsregister und – für eine Aufteilung in drei Abschnitte – vier kurze Ergebnisregister benötigt. Die Multiplikations-Additions-Operation kann somit mit lediglich sechs kurzen Registern berechnet werden. In diesem Fall ist das Rechenwerk ein Bit-Slice-Stapel, wobei jeder Bit-Slice ein Volladdiererfunktion hat, also einen Übertrag von einem niedrigerem Bit-Slice erhält und einen Übertrag an einen höheren Bit-Slice weitergibt, wobei sich „höher" und „niedriger" auf die Wertigkeit der verarbeiteten Binärstellen bezieht. Wenn lediglich ein Rechenwerk mit sechs internen Registern zur Verfügung steht, so muss das Rechenwerk in der Lage sein, von einem äußeren Speicher noch die zusätzlichen Operanden zu erhalten, nämlich die Abschnitte des Zwischener gebnisses aus einem vorherigen Iterationsschritt und die benötigten Abschnitte des Multiplikators A und gegebenenfalls den aktuellen Abschnitt des Multiplikanden B.
  • Beim bevorzugten Ausführungsbeispiel der vorliegenden Erfindung genügt zur Berechnung der Multiplikations-Additions-Operation eine Anzahl von 10 oder 12 kurzen Registern, die durch Halbierung von fünf oder sechs langen Registern erhalten werden können, wobei ferner eine Arbeitsspeicher, der typischerweise „XDATA" genannt wird, zur Verfügung steht, in dem weitere Abschnitte gespeichert sind. Auf diesen Arbeitsspeicher muss jedoch in jedem Zyklus nur im Hinblick auf einen einzigen Abschnitt eines einzigen Operanden zugegriffen werden, so dass effizient und mit einer geringen Anzahl von Arbeitsspeicherzugriffen, aber mit einer maximalen Ausnutzung der inneren Register gearbeitet werden kann. Es sei darauf hingewiesen, dass das erfindungsgemäße Konzept des Berechnens des Ergebnisses einer Multiplikations-Additions-Operation nicht nur im Rahmen einer modularen Multiplikation eingesetzt werden kann, sondern überall dort, wo unter Verwendung eines Prozessors, der nur kurze Wortlängen aufgrund seiner Konstruktion erlaubt, eine Multiplikations-Additions-Operation berechnet werden soll, die lange Operanden umfasst, also Operanden, die eine Wortlänge haben, die durch das Rechenwerk in einem Schlag nicht verarbeitet werden können.
  • Nachfolgend wird Bezug nehmend auf die beiliegenden Zeichnungen eine detaillierte Beschreibung der bevorzugten Ausführungsbeispiele der vorliegenden Erfindung gegeben. Es zeigen:
  • 1a eine schematische Darstellung der Vorrichtung zum Berechnen eines Ergebnisses einer modularen Multiplikation gemäß einem bevorzugten Ausführungsbeispiel der vorliegenden Erfindung;
  • 1b eine Registerdarstellung der Operanden A, B, N von 1a und der Aufteilung der Operanden in Abschnitte;
  • 1c eine schematische Darstellung der Funktionalität der erfindungsgemäßen Vorrichtung zum Zusammenfassen der Zwischenergebnisse;
  • 1d eine Darstellung der modularen Multiplikationsoperation;
  • 1e eine Darstellung der modularen Multiplikation mit Addition;
  • 1f eine schematische Darstellung der Multiplikation mit Addition;
  • 1g eine schematische Darstellung der Reduktionsoperation;
  • 1h eine schematische Darstellung der sequentiellen Berechnung der Zwischenergebnisse;
  • 2a eine allgemeine Darstellung des Einsatzgebiets der modularen Exponentiation;
  • 2b eine schematische Darstellung der Zerlegung einer modularen Exponentiation in modulare Multiplikationen;
  • 2c eine schematische Darstellung der Multiplikationsoperation;
  • 2d eine spezielle Darstellung der erfindungsgemäßen MultAdd-Operation;
  • 2e eine spezielle Darstellung der MultModAdd-Operation;
  • 2f eine spezielle Darstellung der modularen Multiplikationsoperation;
  • 2g eine schematische Darstellung der MultModDiv-Operation, die bei der vorliegenden Erfindung sequentiell verwendet wird;
  • 3a eine allgemeine Darstellung der erfindungsgemäßen MultAdd-Operation;
  • 3b eine Basisversion der Reduktionsoperation;
  • 3c eine erste bevorzugte Version der Reduktionsoperation;
  • 3d eine zweite bevorzugte Version der Reduktionsoperation;
  • 3e eine dritte bevorzugte Version der Reduktionsoperation;
  • 3f eine vierte bevorzugte Version der Reduktionsoperation;
  • 4a eine Darstellung der Registersituation eines Rechenwerks im Lang-Modus und im Kurz-Modus;
  • 4b eine schematische Darstellung eines konfigurierbaren Rechenwerks;
  • 4c eine schematische Darstellung einer Bit-Slice-Struktur eines Rechenwerks;
  • 4d eine schematische Darstellung der verschiedenen Möglichkeiten der Software-Aufdopplung im Vergleich zur erfindungsgemäßen Software-Erweiterung durch drei oder mehr Aufsplittungen;
  • 4e ein tabellarischer Vergleich verschiedener Algorithmen;
  • 5 ein Ablaufdiagramm der erfindungsgemäßen Berechnung;
  • 6a eine bevorzugte Implementierung des modularen Multiplikationsalgorithmus;
  • 6b eine bevorzugte Registerimplementierung des Algorithmus von 6a;
  • 7a eine bevorzugte Implementierung der MMA-Operation;
  • 7b eine alternative Implementierung der MMA-Operation;
  • 7c eine Registerimplementierung der MMA-Operation;
  • 8a eine bevorzugte Implementierung der MMA-Operation;
  • 8b eine bevorzugte Registerimplementierung der MMA-Operation von 8a;
  • 8c eine schematische Darstellung der Eingangs- und Ausgangsoperanden bei der vorliegenden Erfindung;
  • 8d ein schematisches Blockschaltbild des Verfahrens und der Vorrichtung der vorliegenden Erfindung;
  • 8e ein Rechenbeispiel für die vorliegende Erfindung, das die Registerbelegung der kurzen Hilfs- und Er gebnis-Register für jeden Zwischenschritt darstellt;
  • 9a eine bevorzugte Implementierung der TC-Operation (TC = treat carry);
  • 9b eine bevorzugte Implementierung der TB-Operation (TB = treat borrow);
  • 9c eine bevorzugte Implementierung der Reduktionsoperation;
  • 9d eine bevorzugte Implementierung auf Registerebene der Reduktionsoperation von 9c;
  • 10a eine Darstellung der MMD-Operation;
  • 10b eine bevorzugte Registerimplementierung der MMD-Operation;
  • 11a eine Implementierung der MMD-Operation;
  • 11b eine Registerimplementierung der MMD-Operation von 11a;
  • 12 eine Registerimplementierung der Berechnung (Estimation) von ε bzw. e;
  • 13a eine Implementierung einer Transformationsvorschrift für den Modul;
  • 13b eine Implementierung der DIV-Operation; und
  • 13c eine schematische Darstellung eines Reduktionsalgorithmus für die abschließende Reduktion.
  • Bevorzugte Ausführungsbeispiel der vorliegenden Erfindung nutzten aus, dass wenigstens der Multiplikand in zumindest drei Abschnitte aufgeteilt wird, wobei jeder Abschnitt eine Anzahl von Stellen aufweist, die kleiner als eine halbe Anzahl von Stellen ist, wobei die wenigstens drei Abschnitte des Multiplikanden sämtliche Stellen des Multiplikanden umfassen. Ferner wird eine Einrichtung zum sequentiellen Berechnen vorgesehen, um sequentiell für jeden Abschnitt des Multiplikanden ein Zwischenergebnis zu berechnen, und um dann unter Verwendung dieser Zwischenergebnisse ein Ergebnis der modularen Multiplikation zu erhalten.
  • Durch Aufsplittung des Multiplikanden in wenigstens drei Abschnitte kann vorzugsweise ein teilbares Rechenwerk verwendet werden, bei dem der Multiplikand und vorzugsweise auch der Multiplikator und der Modul in drei oder mehr Teile aufgeteilt wird, so dass jedes Drittel der Zahl in der Hälfte des Coprozessors Platz hat. Somit kann auch das Rechenwerk selbst zur vollen Länge ausgenutzt werden, und es werden keine Hardware-Ressourcen verschwendet.
  • Bei bevorzugten Ausführungsbeispielen findet eine Teilung sämtlicher Register des Rechenwerks statt, und zwar in Register gleicher Länge, und werden ferner sämtliche Operanden, also sowohl der Multiplikator als auch der Multiplikand als auch der Modul in ebenfalls drei oder mehr Teile aufgeteilt, so dass am Ende zur Berechnung der (langen) modularen Multiplikation lediglich logische und arithmetische Operationen benötigt werden, die mit Zahlen stattfinden, deren Länge, also deren Anzahl von Stellen, höchstens gleich der Anzahl von Stellen eines Abschnitts der Zahlen ist. Vorzugsweise wird, um eine optimale Ausnutzung eines Rechenwerks zu erhalten, der Abschnitt, in den eine Zahl aufgeteilt wird, also die Anzahl von Bit-Slices des Rechenwerks, das diese Operationen mit einer kleineren Anzahl von Stellen durchführen muss, derart gewählt, dass sie der Hälfte des teilbaren Rechenwerks entsprechen.
  • Erfindungsgemäß wird ein Rechenverfahren unter Verwendung der MultModDiv-Operation eingesetzt, bei der vorzugsweise niemals mehr als zehn kurze Register des Rechenwerks verwendet werden, wobei zwei kurze Register des Rechenwerks im Kurz-Modus einem Register des Rechenwerks im Lang-Modus entsprechen.
  • Insbesondere wird bei der vorliegenden Erfindung, um die modulare Multiplikation zu berechen, die gesamte Aufgabe in drei sequentiell durchzuführende Multiplikations-Modul-Additions-Operationen aufgeteilt, wobei für jede dieser einzelnen Operationen ein anderer Abschnitt des Multiplikanden B verwendet wird. Jede solche Multiplikations-Modul-Additions-Operation wird wiederum in eine Multiplikations-Additions-Operation und eine anschließende Reduktions-Operation aufgeteilt, wobei in der Multiplikations-Additions-Operation immer der gerade betrachtete Abschnitt des Multiplikanden B verwendet wird und in einzelnen Iterationsschritten entsprechende Abschnitte des aus dem vorhergehenden Schritt vorliegenden Zwischenergebnisses C und des Multiplikators A eingesetzt werden.
  • Erfindungsgemäß wird nunmehr diese Multiplikations-Additions-Operation in mehrere MultModDiv-Operationen aufgeteilt also in modulare Multiplikationen, die jeweils den ganzzahligen Quotienten, also das DIV-Ergebnis, und den Rest, also das MOD-Ergebnis, liefern. Sowohl das DIV-Ergebnis als auch das MOD-Ergebnis sind kurze Zahlen, die in kurzen Registern abgespeichert werden können. Die kurzen Register, in denen Ergebnisse der MMD-Operation abgespeichert werden, werden auch als Hilfsregister bezeichnet, da sie im Verlauf der iterativen Abarbeitung der Multiplikations-Additions-Operation mehrmals beschrieben werden. In anderen Worten ausgedrückt, werden die Ergebnisse einer MMD-Operation nur für die nachfolgende Aktualisierungsoperation benötigt, in der sukzessive ein Stück der Ergebniszahl, nämlich ein Abschnitt der Ergebniszahl, der in ein kurzes Register passt, berechnet wird. Insbesondere wird beim Aktualisieren das Ergebnis der vorherigen MMD-Operation unter Verwendung einer Addition von Abschnitten des dritten Operanden C, also des Zwischenergebnisses eines vorherigen Schritts, aktualisiert.
  • Erfindungsgemäß liefert jeder Aktualisierungsschritt zwei Einträge in ein Ergebnisregister, wobei der höherwertige Eintrag in das Ergebnisregister bereits ein nicht mehr verändertes Endergebnis darstellt, während der niederwertige Eintrag der zwei erhaltenen Ergebnisse je nach vorliegender Zahlensituation durch ein Ergebnis eines Aktualisierungsschritts noch verändert wird.
  • Für die vorliegende Erfindung wird somit für eine Multiplikations-Additions-Operation nur ein Rechenwerk benötigt, das eine Wortbreite gleich der Länge nur eines Abschnitts und nicht der ganzen Länge eines Operanden ist, das also eine kurze Wortbreite hat. Anders ausgedrückt benötigt ein solches Rechenwerk nur innere Register der kurzen Länge und nicht der langen Länge. Darüber hinaus werden lediglich bei einem bevorzugten Ausführungsbeispiel der vorliegenden Erfindung lediglich zwei Hilfsregister und – für eine Aufteilung in drei Abschnitte – vier kurze Ergebnisregister benötigt. Die Multiplikations-Additions-Operation kann somit mit lediglich sechs kurzen Registern berechnet werden. In diesem Fall ist das Rechenwerk ein Bit-Slice-Stapel, wobei jeder Bit-Slice ein Volladdiererfunktion hat, also einen Übertrag von einem niedrigerem Bit-Slice erhält und einen Übertrag an einen höheren Bit-Slice weitergibt, wobei sich „höher" und „niedriger" auf die Wertigkeit der verarbeiteten Binärstellen bezieht. Wenn lediglich ein Rechenwerk mit sechs internen Registern zur Verfügung steht, so muss das Rechenwerk in der Lage sein, von einem äußeren Speicher noch die zusätzlichen Operanden zu erhalten, nämlich die Abschnitte des Zwischenergebnisses aus einem vorherigen Iterationsschritt und die benötigten Abschnitte des Multiplikators A und gegebenenfalls den aktuellen Abschnitt des Multiplikanden B.
  • Beim bevorzugten Ausführungsbeispiel der vorliegenden Erfindung genügt zur Berechnung der Multiplikations-Additions-Operation eine Anzahl von 10 oder 12 kurzen Registern, die durch Halbierung von fünf oder sechs langen Registern erhalten werden können, wobei ferner eine Arbeitsspeicher, der typischerweise „XDATA" genannt wird, zur Verfügung steht, in dem weitere Abschnitte gespeichert sind. Auf diesen Arbeitsspeicher muss jedoch in jedem Zyklus nur im Hinblick auf einen einzigen Abschnitt eines einzigen Operanden zugegriffen werden, so dass effizient und mit einer geringen Anzahl von Arbeitsspeicherzugriffen, aber mit einer maximalen Ausnutzung der inneren Register gearbeitet werden kann. Es sei darauf hingewiesen, dass das erfindungsgemäße Konzept des Berechnens des Ergebnisses einer Multiplikations-Additions-Operation nicht nur im Rahmen einer modularen Multiplikation eingesetzt werden kann, sondern überall dort, wo unter Verwendung eines Prozessors, der nur kurze Wortlängen aufgrund seiner Konstruktion erlaubt, eine Multiplikations-Additions-Operation berechnet werden soll, die lange Operanden umfasst, also Operanden, die eine Wortlänge haben, die durch das Rechenwerk in einem Schlag nicht verarbeitet werden können.
  • 1a zeigt eine schematische Darstellung einer erfindungsgemäßen Vorrichtung zum Berechnen eines Ergebnisses einer modularen Multiplikation mit einem Multiplikator A, einem Multiplikanden B und einem Modul N. Ursprünglich sind der Multiplikator A, der Multiplikand B und der Modul jeweils Zahlen, die sich von einer niederstwertigen Stelle (im Binärfall dem LSB) zu einer höchstwertigen Stelle (im Binärfall dem MSB) erstrecken. Die Operanden A, B, N haben eine Länge kleiner oder gleich einer gewissen Anzahl von Bits, wie beispielsweise 1.536 Bits bei dem in 4d beschriebenen Szenario im Block 46.
  • Jeder Abschnitt des Multiplikanden B, der durch eine Einrichtung 10 zum Bereitstellen der Abschnitte geliefert wird, hat bei dem in 1b gezeigten Ausführungsbeispiel eine Länge von 512 Bits, also eine Länge gleich einem Drittel der ursprünglichen Länge des Multiplikanden B. Damit sind alle Abschnitte gleich lang. Die Zahl B kann dann so geschrieben werden, wie sie in 1b dargestellt ist. Die Zahl Z stellt die „Registerverschiebungszahl" oder den entsprechenden Multiplikator dar, der an den zweiten bzw. in quadrierter Form an den dritten Abschnitt zu multiplizieren ist, um die Zahl B aus den Abschnitten B0, B1, B2 wieder zusammenzusetzen. i bedeutet direkt die Anzahl von Stellen bzw. Anzahl von Bits, die ein Abschnitt hat. Es sei darauf hingewiesen, dass das in 1b gezeigte Ausführungsbeispiel für eine gleichmäßige Aufteilung einer Zahl in drei Abschnitte beispielhaft ist. Erfindungsgemäß können jedoch auch mehr als drei Abschnitte und vorzugsweise eine ungerade Anzahl von Abschnitten erzeugt werden, und können auch Abschnitte erzeugt werden, die ungleiche Längen haben, dass also z. B. der erste Abschnitt etwas kürzer als ein Drittel und der zweite Abschnitt dafür etwas länger als ein Drittel etc. ist. Es werden jedoch im Hinblick auf eine optimale Anpassung der Aufteilung in Abschnitte durch die Einrichtung 10 von 1a an das Rechenwerk gleich lange Abschnitte bevorzugt.
  • Die Abschnitte einer Zahl können somit die Zahl direkt darstellen, so dass die Abschnitte direkt die Stellen der Zahl haben und die Zahl ergeben, wenn sie gewissermaßen ausgeschnitten und zusammengestückelt werden. Alternativ und manchmal sogar bevorzugt wird die Zahl aus den Abschnitten unter Verwendung der Aufteilungszahl Z berechnet, so dass auch hier die Abschnitte die Zahl darstellen, die Darstellung aber nicht über ein direktes Zusammenstückeln erfolgt sondern über eine Berechnung mit der Aufteilungszahl Z, wie es in 1b unter „allgemein" angedeutet ist.
  • Die Einrichtung 10 zum Bereitstellen des Multiplikanden in wenigstens zwei Abschnitten empfängt somit eingangsseitig die Zahl B und liefert ausgangsseitig die drei oder mehr Ab schnitte B0, B1, B2, wobei jeder Abschnitt eine Anzahl von Stellen aufweist, die kleiner als eine halbe Anzahl von Stellen ist, und wobei Einrichtung 10 zum Bereitstellen ferner ausgewählt ist, um die Abschnittsaufteilung so durchzuführen, dass die erzeugten Abschnitte zusammengenommen sämtliche Stellen des Multiplikanden umfassen.
  • Die Einrichtung 10 liefert die Abschnitte zu einer Einrichtung 12 zum sequentiellen Berechnen einer Sequenz von Schritten. Insbesondere ist die Einrichtung 12 zum sequentiellen Berechnen einer Sequenz von Schritten ausgebildet, um zur Verwendung eines höherwertigen Abschnitts des Multiplikanden ein erstes Zwischenergebnis zu berechnen, wie es in 1h bei 14 dargestellt ist. Dieses erste Zwischenergebnis wird dann dazu verwendet, um ebenfalls unter Verwendung eines niedrigerwertigen Abschnitts B1 ein zweites Zwischenergebnis zu berechnen. Dieses zweite Zwischenergebnis wird dann unter Verwendung eines wieder niedrigerwertigen Abschnitts B0 des Multiplikanden dazu verwendet, um ein drittes Zwischenergebnis zu berechnen. Das dritte Zwischenergebnis kann bereits das Ergebnis der modularen Multiplikation sein, wenn nur drei Abschnitte für den Multiplikanden verwendet worden sind. Das dritte Zwischenergebnis kann dann gemäß dem Prozedere, das in 1h gezeigt worden ist, weiter verarbeitet werden, wenn weitere Abschnittsaufteilungen vorgenommen worden sind, um dann schließlich das Endergebnis der modularen Multiplikation zu erhalten.
  • Obgleich bei bevorzugten Ausführungsbeispielen die Einrichtung 10 zum Bereitstellen ausgebildet ist, um nicht nur den Multiplikanden, sondern auch den Multiplikator und den Modul in einzelne Abschnitte bereitzustellen, bringt bereits das in 1a gezeigte Ausführungsbeispiel, bei dem lediglich ein Operand der Multiplikation aufgeteilt wird, einen Vorteil dahingehend, dass für den Multiplikanden selbst kein langes Register benötigt wird, sondern dass dort ein kurzes Register ausreicht, da aufgrund der sequentiellen Berechnungsnatur der Einrichtung 12 nie der gesamte Multiplikand benötigt wird, sondern immer nur ein Abschnitt des Multiplikanden.
  • Für Rechenwerke in Bit-Slice-Architektur wird jedoch, wie es nachfolgend noch dargelegt wird, eine Aufteilung in Abschnitte sämtlicher Operanden und des Moduls bevorzugt, um nur Register verwenden zu müssen, die die gleiche (kurze) Länge haben. In diesem Zusammenhang wird auch eine Aufteilung sämtlicher Parameter der modularen Multiplikation in gleich lange Abschnitte bevorzugt, da die beste Rechenwerksausnutzung erreicht wird, wenn gleich lange (kurze) Register eingesetzt werden.
  • Erfindungsgemäß wird es bevorzugt, dass ein Rechenwerk zum Durchführen der modularen Multiplikation eingesetzt wird, das wenigstens ein Register hat, das eine Länge hat, die kleiner als eine Länge des Multiplikanden ist, die aber größer oder gleich einem Abschnitt des Multiplikanden ist, wobei die Einrichtung zum Berechnen ausgebildet ist, um sequentiell einen Abschnitt des Multiplikanden in das Register zu laden oder von dem Register zu lesen.
  • Bei einem weiteren bevorzugten Ausführungsbeispiel wird eine Aufteilung der Zahlen in genau drei Abschnitte vorgenommen, und wird ein Rechenwerk verwendet, das in einem Kurz-Modus betrieben wird, das also in zwei Rechenwerkshälften aufgeteilt wird, in denen die drei Abschnitte der jeweiligen Zahlen verarbeitet werden.
  • Nachfolgend wird ein bevorzugtes Ausführungsbeispiel der vorliegenden Erfindung gegeben, bei dem eine 2.048-Bit-Multiplikation implementiert wird. Zunächst wird jedoch eine Übersicht über bestimmte verwendete Notationen und Operationen gegeben. Grundsätzlich geht es um die Berechnung der modularen Multiplikation, wie sie in 2f dargestellt ist.
    • • #N ist definiert, die Bitlänge von N zu sein, d. h. falls n = #N, dann N ∊ [2n-1, 2n[.
    • • A mod N bezeichnet den üblichen Rest von A modulo N, d. h. A mod N ∊ [0, N[.
    • • A mod' N bezeichnet den negativen Rest von A modulo N, d. h. A mod'N ∊ ]–N,0], d.h. A mod' N = A mod N – N, falls A mod N > 0 ist.
    • • Es werden mehrere Notationen für Ganzzahlen verwendet: Es sei Z ≥ 2 irgendeine Ganzzahl, dann wird für die Ganzzahl N ≥ 0 N = (N2|N1|N0)Z geschrieben, wobei N0 := N mod Z, N1 := (N div Z) mod Z, N2 := N div Z2.Obwohl die Notation N = N2·Z2 + N1·Z + N0 = (N2, N1, N0)Z verwendet werden kann, impliziert diese letztere Notation nicht, dass N1 und N0 modulo Z reduziert werden, während die erste Notation (N2|N1|N0)Z dies impliziert: Bei dieser Notation sind N1 und N0 in [0,Z[. N2 kann aber größer als Z sein, und zwar in dem Fall von N ≥ Z3. Äquivalent dazu kann N2 in dem Fall von N < 0 negativ sein.
    • • Außerdem werden die Verallgemeinerungen (Nm-1 |...|N0)Z sowie (Nm-1, ..., N0)Z analog auf die offensichtliche Weise verwendet.
    • • Es sei Z als eine Potenz von zwei angenommen, z. B. Z = 21024. Es ist jedoch nicht nötig, dass Z eine Potenz von zwei ist und auch keine nicht-triviale Potenz einer Ganzzahl!
  • Die folgenden Grundalgorithmen sind grundlegend und werden immer verwendet. Ihre Implementierung wird im Folgenden erörtert. Es sei K ∊ N.
  • Die übliche Multiplikation: A·B
  • Die modulare Multiplikation von Bitlänge K: A·B mod N
  • Die MultModDiv-Operation (2g) von Bitlänge K: (A·B div N, A·B mod N)
  • Außerdem wird der MultAdd-Algorithmus (2d) benötigt: A·B + C·2K sowie der MultModAdd (2e): A·B + C·2Kmod N
  • Es wird oft geschrieben: MK(A, B) = A·B, MMK(A, B; N) = A·B mod N, MMDK(A, B; N) = (A·B div N, A·B mod N).
  • Die Performance bzw. Geschwindigkeit dieser Algorithmen, die an dieser Stelle nicht weiter klassifiziert wird, hängt von ihrer Implementierung ab. Somit wird sie im Folgenden durch mK, mmK, mmdK usw. bezeichnet.
  • Es sei darauf hingewiesen, dass der Index auf eine sehr freie Weise verwendet wird, manchmal, wenn das exakte K nicht wich tig ist, wird der Index weggelassen, manchmal wird K durch die tatsächliche Zahlenbasis 2K ersetzt. Es werden sogar andere Basen verwendet. Mehr darüber ist in den folgenden Abschnitten ausgeführt.
  • Anmerkung 1: Es sei auf die sehr wichtige Tatsache hingewiesen, dass für (Q, R) := MMDK (A, B; N) folgende Identität vorliegt A·B = Q·N + R.
  • Dies ist ein grundlegendes Faktum für viele folgende Implementierungen.
  • In diesem Abschnitt werden einige Hinweise darauf gegeben, wie die Grundalgorithmen bei Crypto@1408 implementiert werden – wenn sie auf eine direkte Weise implementiert werden können. Außerdem werden einige sehr grundlegende und allgemeine Verfahren erörtert, um eine lange Ganzzahlarithmetik in kleinere Teile zu zerlegen.
  • Multiplikation
  • Bei Crypto@1408 sind Multiplikationen einer Länge von bis zu 1400 Bits (einschließlich Vorzeichenbits) möglich, d. h. A B für #A + #B ≤ 1400. Die Durchschnittsperformance bei Crypto@1408 für diese Operation ist gegeben durch
    Figure 00240001
  • Für mehr zu diesem Multiplikationsalgorithmus sei auf [5, 6, 8] verwiesen. Normalerweise wird, um eine lange Multiplikation in kleinere Teile zu zerlegen, die bekannte Schulmethode verwendet: Es sei z. B. Z := 2k für irgendein geeignetes k gesetzt und A = (Am-1, ..., A0)Z sowie B = (Bm-1, ..., B0)Z geschrieben, dann kann das Verfahren grob beschrieben werden, wie es in 2c gezeigt ist.
  • Die Zeile in der Schleife wird auf folgende Weise gelesen werden: Der alte Wert der Partialganzzahl (Ci+j+1, Ci+j)Z = Ci+j+1·Z + Ci+j wird zu dem Partialprodukt Mk(Ai, Bj) addiert, was das Ergebnis X ergibt. Dann wird Ci+j+1 := X div Z und Ci+j := X mod Z gesetzt. Natürlich sind in diesen Anweisungen Behandlungen von Überträgen versteckt, die hier nicht näher erörtert werden.
  • Es gibt schnellere Möglichkeiten, eine Multiplikation zu implementieren, z. B. mit KARATSUBA-OFFMANN, vgl. [9]. Aber obwohl diese Algorithmen in der theoretischen Performance sehr gut sind, fehlt ihnen oft, dass sie nicht optimal für die Implementierung sind, z. B. benötigen sie sehr viele Ressourcen, wie z. B. Speicher.
  • Modulare Multiplikation
  • Bei Crypto@1408 sind modulare Multiplikationen einer Länge von bis zu 1400 Bits möglich, d. h. A·B mod N für LR := #N + 1 ≤ 1400. Die Realisierung erfolgt über den sogenannten ZDN-Algorithmus – [11]. Die Durchschnittsperformance bei Crypto@1408 für diese Operation ist gegeben durch
    Figure 00250001
  • Der Faktor α = αLR ist ein Parameter, der von den statistischen Eigenschaften des ZDN-Algorithmus abhängt. Für αLR hat man gewöhnlich Werte zwischen 2,5 und 2,7.
  • Eine Art, die Multiplikation für längere Bitlängen zu implementieren, besteht darin, sie in kleinere Stücke zu zerlegen. Wird die Gleichung für m = 3 betrachtet
    Figure 00260001
    so ist zu erkennen, dass eine modulare Multiplikation A·B mod Nwie in 1d realisiert werden kann, wobei die Operation MMA in 1e gezeigt ist.
  • Natürlich ist dies nur eine Möglichkeit. Einige abgeleitete Versionen davon sind in dieser Schrift präsentiert.
  • Die MultModDiv-Operation
  • Die MultModDiv-Operation ist eine kürzlich eingeführte Operation, vgl. [7], die etwas mehr macht als eine modulare Multiplikation: Sie berechnet nicht nur das modulare Produkt (A·B mod N), sondern auch den Quotienten (A·B div N). In HW implementiert ist der zusätzliche Implementierungsmehraufwand gering, da diese letzte Ganzzahl nur ein Protokoll davon ist, was die modulare Reduktion während der modularen Multiplikation gemacht hat. In SW ist der Mehraufwand erheblich, überraschenderweise jedoch nur 100 %! Der Algorithmus kann implementiert werden, wie in 10a gezeigt ist.
  • Es sei darauf hingewiesen, dass dieser Algorithmus nur für positive und reduzierte A und B funktioniert. Er wird später auch für einen (reduzierten) negativen Multiplikanden benötigt, aber in diesem Fall wird nur die negative Ganzzahl invertiert, der letztere Algorithmus angewandt und schließlich die Ausgabe invertiert. Auch ist es möglich, die zwei modularen Multiplikationen parallel (Modus) auszuführen, falls der Modul klein genug ist. Dies bedeutet erneut ein Verdoppeln der Performance. Näheres dazu bezugnehmend auf die 11a und 11b. Wie es dort ersichtlich ist, ist die Performance für MMDk gegeben durch:
    Figure 00270001
  • In den Algorithmusdarstellungen steht, gemäß üblicher Pseudo-Code-Notation der Ausdruck „Input" für die Algorithmus-Eingangsparameter. Der Ausdruck „Output" steht für die Algorithmus-Ausgabe. Der Ausdruck „Return" steht für „Rücksprung bzw. Rückgabe des entsprechenden Werts zu einem hierarchisch höherstehenden Programm, das den Algorithmus aufgerufen hatte. Das Argument von „Return" ist somit das eigentliche Ergebnis des Algorithmus, das ausgerechnet worden ist. Ferner steht „for" für eine Wiederholungsschleife, die ausgehend von einem Startparameter bis („to") zu einem Endparameter etwas ausführen soll, was durch den Ausdruck „do" angegeben wird. „End" steht für das Ende einer Schleife. Ferner steht „if" für ein „wenn", also eine bedingte Schleife, wobei „then" angibt, was zu tun ist, wenn die Bedingung der If-Schleife erfüllt ist. Entsprechend gibt „else if" eine weitere Bedingung an, die statt einer ersten Bedingung erfüllt sein muss, um eine bestimmte Berechnung, die durch „then" eingeleitet wird, durchzuführen. Der Ausdruck „treat carry" steht für Behandeln eines Übertrags, wobei Borrow für einen negativen Übertrag, also gewissermaßen einen „Vortrag" steht.
  • Nachfolgend werden ferner einige Registerimplementierungen angegeben, wie sie z. B. in 6b zu sehen sind. Unter „Crypto@1408" finden sich die Register des vorzugsweise verwendeten Kryptocoprozessors mit 1.408 Bit-Slices, die jedoch aufgrund der Teilung in der Mitte im Kurz-Modus betrieben werden. Die Register-Notation ist in allen Registerimplementierungen so, wie sie in 4a im rechten Teilbild dargestellt ist. So bedeutet beispielsweise das zweite Feld in der rechten Spalte das Register CR0 des Prozessors. Ferner bedeuten die in den Feldern stehenden Zahlen die entsprechenden Werte, die in das entsprechende Register eingespeichert werden. Befinden sich „Sterne" in einem Register, so bedeutet dies, dass das Register unbenutzt ist, d. h. das Register kann mit unbestimmten Zahlen belegt sein, die aber keine weitere Rolle spielen. Ferner steht die senkrechte Spalte von Feldern, die mit „XDATA" beschrieben ist, für einen externen Speicher, also bezieht sich auf einen RAM-Arbeitsspeicher des Prozessors, während die zwölf Register die internen Register des Speichers sind. Sollen also Daten vom externen RAM-Speicher in die Register des Coprozessors geladen werden, so sind Datenbewegungsbefehle (Move-Befehle) nötig.
  • Registerarchitektur von Crypto@1408
  • Im Folgenden werden die Implementierungen der Algorithmen mit den Zuweisungen der Krypto-Register mit den Zwischenergebnissen dargestellt. Dort wird Crypto@1408 in den zwei Modi gezeigt, nämlich dem langen Modus und dem parallelen Modus (4a).
    • • Bei dem langen Modus gibt es 5 Register der Länge 1.408 Bit: Z, C, N, CR0 und CR4.
    • • Bei dem parallelen Modus gibt es 10 Register der Länge 704 Bit: CR0, CR2, CR4 und CR6 sowie drei Register Z, C, N für jede Seite.
  • Die Grundkonfigurationen sind dargestellt, wie es in 4a gezeigt ist:
  • Bewegen von Daten
  • Abhängig davon, dass die Daten in dem Cachespeicher oder in dem XRAM (externen Speicher) liegen können, kann es mehr oder weniger lang dauern, eine Ganzzahl in Crypto@xxxx hinein oder aus demselben heraus zu bewegen. Für das Folgende wird ein durchschnittlicher Wert für die Performance movk, um eine k-Bit-Ganzzahl in Crypto hinein oder aus demselben heraus zu bewegen. Einige Beispiele zeigen, dass die Bewegungen eine erhebliche Zeit benötigen, die mit Multiplikationen vergleichbar ist.
  • Die Modularmultiplikationsalgorithmen
  • Es gibt mehrere Algorithmen zum Implementieren einer modularen Multiplikation auf der Basis von einfacheren Elementen, wie z. B. (kleinen) Multiplikationen oder einer kleineren modularen Multiplikation. Aufgrund von diesen Algorithmen ist es möglich, eine modulare Exponentiation durch „quadrieren und multiplizieren" oder Lucas-Kettenverfahren (Montgomery-Leiter) zu implementieren. Es wird nicht der Weg eines Auffindens optimaler Performancealgorithmen für Quadrieren bzw. Multiplizieren beschritten, da dies die Möglichkeit einer sicheren Implementierung von RSR ausschließt, falls dies nötig ist.
  • Obwohl das Interesse eigentlich auf dem Algorithmus MM2048 liegt, ist ersichtlich, dass A·B mod N = A(B2Z2 + B1Z + B0) mod N, oder dieser Ausdruck kann äquivalent geschrieben werden als ((A·B2 mod N)Z + A·B1 mod N)Z + A·B0 mod N. Deshalb kann die Implementierung von MMK manchmal in einige „kleinere" Algorithmen, wie z. B. MMAk, für einige k < K, zerlegt werden.
  • Obwohl diese Algorithmen bisweilen zusätzliche Daten benötigen (deshalb können einige Vorberechnungen nötig sein), wird dies nicht berücksichtigt und dieselben werden nicht gezählt. Normalerweise haben sie keine Auswirkung auf die Performance der vollen RSA-Berechnung. Sie können jedoch eine Wirkung auf die Performance einer „kurzen" RSA haben, wie z. B. eine Verifizierung mit einem kleinen Exponenten F4 = 216 + 1.
  • Montgomery-Multiplikation
  • Ohne Zweifel ist der berühmteste Algorithmus zum Implementieren einer modularen Multiplikation die Montgomery-Multiplikation [10]. Dieser Multiplikationsalgorithmus implementiert eigentlich nicht den Algorithmus MMK(A, B; N) = AB mod N, sondern vielmehr A·B·2–K mod N
  • Ohne ins Detail zu gehen, kann mit dieser seltsamen Art von modifizierter Multiplikation eine K-Bit-RSA-Berechnung mit der gleichen Anzahl von Multiplikationen wie bei den gewöhnlichen Implementierungen, die MMK verwenden, implementiert werden.
  • Multiplikation mit Barrett-Reduktion
  • Momentan wird auf eine Erörterung dieses Verfahrens verzichtet, da die Barrett-Reduktion normalerweise die gleiche Performance wie das letzte Verfahren aufweist. Es wird nicht erwartet, dass es in diesem Zusammenhang eine sehr viel bessere Implementierung gibt als diejenige im letzten Abschnitt.
  • Algorithmus von Fischer-Sedlak-Seifert mit MMD
  • Dieser Algorithmus wurde konzipiert, um einen 1k-Bit-RSA-Coprozessor zu 2k-Bit-Operationen zu befähigen, wobei nur ein geringfügiger Hardwarezusatz erforderlich ist. Der Algorithmus, der in [7,2] beschrieben ist, wird speziell zum Verdop peln der Bitlänge verwendet. Er verwendet den MultModDiv-Algorithmus, der in die Hardware eingebaut werden muss, vgl. [4], oder in Software emuliert werden kann, vgl. [3], mit zwei modularen Multiplikationen.
  • Erfindungsgemäßer bevorzugter Algorithmus mit MMD
  • Dieser Algorithmus implementiert die modulare Multiplikation auf die klassische Weise durch ein Berechnen von
    Figure 00310001
  • Aus praktischen Gründen und aufgrund von Architekturbeschränkungen erfolgt dies jedoch in drei Schritten – wie im Vorhergehenden beschrieben – durch ein Implementieren für K = m·k mit m = 3 und k = ⎡K/3⎤. Somit wird MMK implementiert wie in 1d.
  • Nun ist MMAZ der Algorithmus, der gegeben ist (1e).
  • N2 liegt sehr nahe an Z. Momentan werden aber keine Einschränkungen bezüglich der Ganzzahl Z gemacht, außer dass Z in etwa die richtige Größe von k Bits aufweisen muss. Mehr dazu wird später ausgeführt.
  • Erneut wird dieser letzte Algorithmus in zwei Schritten implementiert, nämlich: Zuerst wird die Multiplikation durchgeführt, die in 1f gezeigt ist.
  • Es wird auf die folgende Schätzung verwiesen.
  • Anmerkung 5: Für die Ausgabe von MAZ ergibt sich
    Figure 00310002
    Figure 00320001
    und insbesondere für D = (D3|...|D0)Z
    Figure 00320002
  • Nach dem Multiplikationsschritt kommt die Reduktion aus 1g.
  • Nachfolgend wird zunächst die mathematische Beschreibung von MAZ und RedZ mit etwas Theorie präsentiert, was für die Implementierung wichtig sein wird.
  • Beschreibung des Algorithmus
  • Von nun an werden jegliche Algorithmen für den Fall von m = 3 gegeben. Denn das ist der bevorzugte Fall. k wird noch nicht festgelegt.
  • Die Multiplikationsoperation MAZ (3a), d. h. (A2|A1|A0)Z·Bi + (C2|C1|C0)Z·Zoder äquivalent dazu (A2|A1|A0)Z·Bi + (C2|C1|C0|0)Z wird auf die einfache Weise implementiert: ABi + CZ = A0Bi + (A1Bi + C0)Z + (A2Bi + C1)Z2 + (A2Bi + C2)Z3 + C3Z3
  • Da Aj·Bi eine 2k-Ganzzahl ist, wird dieses Produkt geschrieben als Aj·Bi = (BAij)1·Z + (BAij)0 und deshalb ergibt sich für das Ergebnis (BAi0)0 + ((BAi0)1 + (BAi1)0 + C0)Z + ((BAi1)1 + (BAi2)0 + C1)Z2 + ((BAi2)1 + C2)Z3
  • Es sei darauf hingewiesen, dass die großen Klammern immer noch ≥ Z sein können!
  • Die Reduktionsoperation RedZ (3b), d. h. E:= D mod N wird implementiert als E := D – [D div N]·N.
  • Hier
    Figure 00330001
  • Da jedoch Q0 := D div N nicht direkt berechnet werden kann, besteht die Strategie darin, sich zuerst Q0 durch Q ∼0 zu approximieren, wobei Q ∼0 := D3·Z div N2.
  • Daher kann Q0 = Q ∼0 + ε geschrieben werden. Eine Berechnung zeigt, dass ε ∊ {–2, –1, ..., 4}, und in diesem Kontext gilt sogar ε ∊ {–2, –1, 0, 1, 2, 3}.
  • Anmerkung 6: Tatsächlich wird ε = –2, 3 fast nie auftreten und ε = 2 nur sehr selten.
  • Somit gilt, dass die erste Version des schlichten (Basis-) Algorithmus aus 3b wie in 3c sein wird.
  • Anmerkung 7: Der Bereich von Q0 ist gegeben durch:
    Figure 00340001
  • Leider wurde das Problem der genauen Berechnung der Division D/N nur aufgeschoben. Aber da dies sehr gut funktioniert hat, wird es ein zweites Mal durchgeführt: Es wird sich ε durch ε ∼ genähert, derart, dass δ := ε – ε ∼ ∊ {–1, 0, 1}. (2)
  • Dann sieht die Reduktion wie in 3d aus.
  • Wie approximiert man nun ε? Es sei folgende Gleichung betrachtet: (D – Q ∼0N)mod N = D mod N = (D – Q ∼0N) – εN
  • Dies ergibt ε = (D – Q ∼0N)div N, und deshalb wird berechnet D – Q ∼0N: Es sei gesetzt Q ∼0 := D3Z div N2 und R ∼0 := D3Z mod N2,so dass D3Z = Q ∼0N2 + R ∼0. Nun
    Figure 00350001
  • Hier wurde die Notation (Q ∼0Ni)1 = Q ∼0Ni div Z und (Q ∼0Ni)0 := Q ∼0Ni mod Z verwendet, so dass Q0Ni = (Q ∼0Ni)1Z + (Q ∼0Ni)0. Daraus kann nun eine Näherung für ε gegeben werden durch ein Berechnen von ε ∼ := (D2 + R ∼ – (Q ∼0N1)1)div N2.
  • Tatsächlich approximiert man sich die Operanden durch ihre obersten (z. B.) 16 Bits. Es bleibt noch die Arbeit zu beweisen, dass δ := ε – ε ∼ ∊ {–1, 0, 1} gilt.
  • Dies wird später gezeigt. Nun ist es möglich, die folgende Version von RedZ zu geben, die in 3e gezeigt ist.
  • Es sei die folgende Berechnung betrachtet:
    Figure 00360001
  • Aufgrund dieser Berechnung kann die Endversion des Algorithmus gegeben werden, wie in 3f gezeigt ist.
  • Anmerkung 8: Es sei auf den kleinen Unterschied in den ersten Zeilen hingewiesen: (Q ~0, R ~0) := MMD(D3, Z; N2) wurde ersetzt durch (Q ~0, R ~0 := MMD(D3, Z – N2; N2) Q0 := Q0 + D3
  • Zunächst ist einfach zu prüfen, dass diese neue Gleichung immer noch gilt! Diese Veränderung wurde vorgenommen, da nicht gewünscht wird, dass Operanden größer sind als der Modul, und in diesem Fall Z > N. Da jedoch
    Figure 00360002
    oder genauer
    Figure 00360003
    ist sicher, dass
    Figure 00360004
    Aufgrund von Gleichung 1 liegt jedoch der erste Operand in [–Z, Z[, es wird aber ersichtlich, dass dies kein Problem ist, da
    Figure 00360005
  • Es sei ferner auf Folgendes hingewiesen:
  • Anmerkung 9: Aufgrund von Anmerkung 7 und Gleichung (2) ergibt sich Q'0 ∊ [–Z –1, Z]. (3)
  • Mathematische Performance
  • Für den ersten Teil MAk werden 3mmdk benötigt, für den zweiten Teil Redk werden ebenfalls 3mmdk benötigt. Da diese Berechnung drei Mal durchgeführt werden muss, ergibt sich mmK = 18·mmdk.
  • Implementierung für (m, k) = (3, k)
  • Die Implementierung des Algorithmus ist ab 5 gezeigt.
  • Systemperformance für (m, k) = (3, k)
  • Es ist ersichtlich, dass die Implementierung des Algorithmus MAk 3mmdk + movk benötigt und die Implementierung von Redk 3mmdk benötigt. Dies wird drei Mal verwendet, und danach muss das Ergebnis außerhalb des Krypto bewegt werden, so dass die Performance ist: 3(6mmdk + movk) + movK, d. h.
  • Figure 00370001
  • Der Bereich von ε
  • Der Parameter ε wurde definiert, um
    Figure 00370002
    zu sein, wobei D ∊ [–NZ, NZ[, insbesondere D3 ∊ [–Z, Z[. Um eine Schätzung von ε zu geben, wird zunächst die reelle Zahl
    Figure 00380001
    berechnet und dann das folgende Lemma verwendet.
  • Lemma 1 Für r, s ∊ R, gilt immer
    Figure 00380002
  • Nun wird
    Figure 00380003
    gesetzt und es ergibt sich
    Figure 00380004
  • Deshalb wird ⌊ε⌋ ∊ {–2, ..., 3} erhalten und aufgrund des Lemmas ε ∊ {–2, ..., 4}. Trotzdem, falls angenommen wird, dass
    Figure 00380005
    dann
    Figure 00390001
  • So ist ersichtlich, dass in diesem Fall ⌊ε⌋ ∊ {–2, –1, 0, 1, 2} und ε ∊ {–2, –1, 0, 1, 2, 3}.
  • Wie ε zu schätzen ist
  • Es wurde ersichtlich, dass ε = aZ2 + bZ + c, wobei a = (D2 + R ∼0 – (Q ∼0N1)1), b = (D1 – (Q ∼0N1)0 – (Q ∼0N0)1), c = (D0 – (Q ∼0N0)0), und es wurde definiert ε ∼ := a div N2. Nun sei gesetzt:
    Figure 00390002
    Figure 00400001
  • Es zeigt sich, dass x = r – s tatsächlich sehr klein ist, da Z in dem Bereich von 2700 ist! So ergibt sich praktisch nie der Fall dass ε ≠⁣ ε ~ (für allgemeine Ganzzahlen).
  • Die tatsächliche Näherung erfolgt durch ein Berechnen von s nur unter Verwendung der obersten (z. B.) 16 Bits der beteiligten Ganzzahlen, deshalb wird ein Fehler von etwa der Größe 2–16 gemacht. Dies ist immer noch sehr klein, und nur bei wenigen Fällen wird die Schätzung von ε ~ um 1 inkorrekt sein. Aus diesem Grund wird ein Endreduktionsschritt am Ende von Red benötigt.
  • Analyse des Algorithmus
  • In diesem Abschnitt werden die drei Algorithmen verglichen, die in den vorstehenden Abschnitten beschrieben wurden. Diese Multiplikationsverfahren werden als Algorithmus I, Algorithmus II bzw. Algorithmus III bezeichnet.
  • Vergleich der Algorithmen
  • Performancewerte – nur für die zeitaufwändigen Teile der Algorithmen – sind in 4e gegeben. Natürlich braucht eine reale Implementierung etwa 10 %–20 % länger für all den Softwaremehraufwand, der hier nicht beschrieben ist.
  • Vorteile/Nachteile
    • • Unter 2.064 Bit ist die schnellste Multiplikation der Algorithmus III.
    • • Über 2.065 Bit ist der einzige funktionierende Algorithmus der Algorithmus II.
    • • Algorithmus III benötigt am wenigsten externen Speicher.
  • Implementierungsaspekte
  • In diesem Abschnitt wird die 2.048-Bit-RSA-Implementierung bei Crypto@1408 im Detail beschrieben. Natürlich liegt das Hauptaugenmerk auf der Implementierung der modularen Multiplikation. Es ist klar, wie die Multiplikation in dem Rahmen einer Exponentiation zu setzen ist. Dies wird deshalb nur sehr kurz beschrieben. Die modulare Multiplikation A·B mod N, die hier präsentiert ist, hat eine gewisse Einschränkung: Die Ganzzahlen A, B und N müssen in eine spezielle Form umgewandelt werden, es hat nämlich von der binären Form in die Z-äre Form gebracht, z. B. (A2, A1, A0)Z mit drei „Stellen". A und B müssen natürlich reduziert werden. Die Vorberechnung entscheidet zuerst die Länge k des Basisparameters Z, wandelt die Eingangswerte A, B und N in die richtige Form um, derart, dass sie für den Modularmultiplikationsalgorithmus verwendbar ist. Hier werden A und B nur von der binären Form in die Z-äre gebracht. Der Modul N wird – wie es für die übliche Implementierung von RSA bei Crypto@xxxx bekannt ist – mit einer bestimmten Ganzzahl multipliziert, und die Exponentiation wird mit diesem Vielfachen von N durchgeführt. Nach der Exponentiation ist es nötig, die Endreduktion modulo das ursprüngliche N vorzunehmen. Und das Ergebnis in Z-ärer Form wird zurück in die alte binäre Form berechnet.
  • Es ist überflüssig zu erwähnen, dass dieser Algorithmus mit der Vor- und Nachberechnung nicht gut für eine einzige modulare Multiplikation geeignet ist, obwohl es möglich ist. An dererseits benötigen alle anderen Multiplikationsalgorithmen, z. B. die hier vorgestellten, normalerweise irgendeine Art von Vor- und Nachberechnung, und tatsächlich gibt es keine wirklich bessere Möglichkeit, eine einfache modulare Multiplikation vorzunehmen.
  • Struktur der RSA-Implementierung
  • Der Rahmen der RSA-Implementierung ist gleich jeder beliebigen anderen Implementierung. Zuerst gibt es die Vorberechnung, ein Umwandeln der Eingangparameter baseB* und modulus N* in die richtige Form B und N. Dann beginnt die eigentliche RSA-Implementierung: Es wird entschieden, ob ein Quadrieren oder die Multiplikation mit der Basis vorgenommen wird. Aufgrund dieser Entscheidung wird entweder die Operation A MM(A, A, N) oder A ← MM(A, B, N) ausgeführt. Es wird nicht beschrieben, wie diese Entscheidung getroffen wird – dabei handelt es sich um einen Standard für eine RSA-Implementierung. Am Ende, in der Nachberechnung, wird das Ergebnis A modulo den Eingangsmodul N* reduziert und zurück in die binäre Form umgewandelt, die für die Ausgabe nötig ist.
  • Im Folgenden wird die Implementierung von A ← MM(A, B, N) beschrieben. Für das Quadrieren, d. h. A ← MM(A, A, N), kann A für den Parameter B verwendet werden. Es kann sogar den gleichen zugeteilten Speicher aufweisen, da das Ergebnis ganz am Ende in den Container von A kopiert wird.
  • Es sei darauf hingewiesen, dass die Exponentiation/modulare Multiplikation nur einen externen Speicher für A2, A1, A0, B2, B1, B0, N1 und N0 benötigt, also maximal
    Figure 00420001
  • Ein Überblick über den Algorithmus ist in 5 gegeben.
  • 5 zeigt also gewissermaßen ein Ablaufdiagramm des erfindungsgemäßen modularen Multiplikationsalgorithmus für drei Abschnitte. Die Verarbeitungsrichtung bzw. Zeitrichtung ist in 5 mit einem Pfeil 50 dargestellt. Um eine modulare Multiplikation durchzuführen, sind also, wie es z. B. anhand von 1d dargestellt worden ist, drei aufeinander folgend durchzuführende MMA-Operationen gezeigt, die in 5 mit 51, 52 und 53 bezeichnet sind. Für die MMA-Operation 51 wird der höchstwertige Abschnitt B2 des Multiplikanden verwendet. Für die zweite MMA-Operation 52 wird das Ergebnis der ersten MMA-Operation sowie der nächstniederwertige Abschnitt B1 des Multiplikanden verwendet. Das Ergebnis der zweiten MMA-Operation wird schließlich zusammen mit dem niedrigstwertigen Abschnitt B0 des Multiplikanden verwendet, um das Endergebnis der modularen Multiplikation zu, erhalten. Hierauf werden mittels eines Move-Befehls 54 das Ergebnis aus den internen Registern, also E2, E1 und E0, ausgelesen, um die internen Register für eine neue modulare Multiplikation freizumachen.
  • Jede MMA-Operation, beispielsweise die MMA-Operation 51, teilt sich in eine MA-Operation 55a und eine Reduktionsoperation 55b auf, wobei die MA-Operation ihrerseits wieder in verschiedene Operationen, die in 5 dargestellt sind, aufgeteilt wird, während die Reduktionsoperation ebenfalls entsprechend aufgeteilt wird.
  • Der Modularmultiplikationsalgorithmus
  • Die Eingabe für diese modulare Multiplikation ist der Modul N, der Multiplikand A ∊ [0, N[ und der Multiplizierer B ∊ [0, N[. Formell gibt es einen Eingangsparameter k, der die Länge der Berechnung definiert. Die Ausgabe ist A·B mod N, die an der Stelle von A gespeichert wird, das sich in dem externen Speicher befindet.
  • Die Eingabebedingungen für diesen Algorithmus, die bereits im Vorhergehenden erörtert wurden, sind
    N ist in drei Ganzzahlen N2, N1 und N0 codiert, derart, dass Ni ∊ [0, Z[ und N = N2·Z2 + N1·Z + N0, kurz geschrieben als N = (N2, N1, N0)Z.
  • Außerdem N2 ∊ [0, Z[, derart, dass N2 gemäß der Crypto@xxxx-Architektur umgewandelt wird.
  • A ist als drei Ganzzahlen A2, A1 und A0 codiert, derart, dass Ai ∊ [0, Z[ und A = A2·Z2 + A1·Z + A0, kurz geschrieben als A = (A2, A1, A0)Z.
  • B ist in drei Ganzzahlen B2, B1 und B0 codiert, derart, dass Bi ∊ [0, Z[ und B = B2·Z2 + B1·Z + B0, kurz geschrieben als B = (B2, B1, B0)Z.
  • Der Modularmultiplikationsalgorithmus ist in 6a gezeigt.
  • Er ist in der 6b veranschaulicht.
  • Im externen Speicher XDATA befinden sich jeweils die Abschnitte des Multiplikators A und des Multiplikanden B sowie der niederstwertige und der nächst höherwertige Abschnitt N1 und N0, während der höchstwertige Abschnitt N2 des Moduls bereits im CR6-Register des Kryptocoprozessors, der im Kurz-Modus betrieben wird, sitzt. Die anderen drei Register CR4, CR2 und CR0 sind zu Null gesetzt. Das Zwischenergebnis der ersten MMA'-Operation, also E1', E2', E0', ersetzt dann die Nullen in den entsprechenden Registern vor dem ersten MMA'-Schritt. Der zweite MMA'-Schritt führt dazu, dass die Werte E0', E1' und E2' durch E0'', E1'' und E2'' ersetzt werden. Durch die nächste MMA-Operation findet wiederum ein Ersetzen statt, so dass dann, nach der dritten MMA-Operation, das Endergebnis der modularen Multiplikation in Form des niedrigsten Abschnitts E0, des nächst höheren Abschnitts E1 und des höchsten Abschnitts E2 vorliegt. Dieses Ergebnis E wird also durch den Algorithmus in 6a erhalten, und zwar ebenfalls abschnittsweise.
  • Die Ergebnis-Abschnitte E2, E1 und E0 ersetzen im Arbeitsspeicher A2, A1 und A0, so dass das Ergebnis eines vorherigen modularen Multiplikationsschritts nunmehr den neuen Multiplikator A für den nächsten modularen Multiplikationsschritt liefert, der wieder genauso ablaufen wird, wobei nun jedoch der ursprüngliche Operand A durch den neu berechneten Operanden E ersetzt ist.
  • Bei diesem Algorithmus wird neben dem bereits bekannten MMA-Algorithmus eine Variation desselben, nämlich MMA' verwendet. Grob ist der Unterschied zwischen den beiden Algorithmen in der Formel MMA' = MMA – N gegeben. Sie sind definiert wie in 7a und 7b gezeigt.
  • Die Registerimplementierung ist in 7c veranschaulicht.
  • Beide Variationen verwenden die Algorithmen MAZ und RedZ, wobei der letzte wieder zwei Varianten hat, nämlich RedZ selbst und Red'Z. Grob ist der Unterschied zwischen den beiden Algorithmen in der Formel Red' = Red – N gegeben.
  • Es wird zuerst der Algorithmus MAZ erörtert. Der Algorithmus ist in 8a dargestellt.
  • Die Registerimplementierung des Algorithmus von 8a ist in 8b dargestellt. Eine bevorzugte Implementierung des erfindungsgemäßen Konzepts, das in 8a algorithmisch dargestellt ist, ist in 8d gezeigt, wobei die Registerbewegungen, auf die in 8d Bezug genommen wird, in 8c zusammengefasst sind, und wobei in 8e ein Beispiel für den erfindungsgemäßen Multiplikations-Additions-Algorithmus und die Verwendung der zwei Hilfsregister und der vier Ergebnisregister gegeben ist. Bevor detailliert auf den Algorith mus eingegangen wird, wird zunächst anhand von 8c die Bedeutung des Ausdrucks „kurze Registerlänge" und „lange Zahlenlänge" dargestellt. Hierzu ist ein Registerblock 800 dargestellt, der lediglich aus Übersichtlichkeitsgründen neun Register umfasst. Jedes Register dieser neun Register hat eine bestimmte Zahlenlänge bzw. eine Anzahl von Binärstellen und kann somit höchstens einen Abschnitt Ai, Bi, Ci des Operanden A, des Operanden B und des Operanden C speichern. Bei dem hier gezeigten Beispiel wird jeder Operand in drei Abschnitte aufgeteilt. Der Index i hat somit die Werte 0,1, 2.
  • Wenn man jedes Register für sich auffassen möchte, so hat jedes Register eine Zahl zwischen Null und 2k-1. Wenn jedoch per Konvention, was in der Rechenwerkstechnik üblich ist, dem niederstwertigen Bit eines Registers eine bestimmte Anfangswertigkeit gegeben wird, so kann man durch entsprechendes Interpretieren der Zahlen in Registern aus diesen kleinen Registern gewissermaßen ein großes Register nachbilden. Genauso könnte nämlich eine Zeile des Registerblocks bei 800 in 8c als ein einziges großes Register umfassen, das eine Länge hat, die gleich dem dreifachen einer kurzen Registerlänge ist. In diesem Fall müsste z.B. dem mittleren kurzen Register, in dem A1 oder B1 oder C1 gespeichert ist, eine Anfangswertigkeit von 2k bzw. allgemein gesagt eine Anfangswertigkeit einer Zahl Z (dem vierten Operanden) gegeben werden, während die Anfangswertigkeit des entsprechenden niederstwertigen Registers, in dem A0, B0, C0 gespeichert ist, gleich 20 betragen würde. Entsprechend würde die Anfangswertigkeit eines Registers, in dem A2, B2 oder C2 gespeichert ist, gleich 22k oder Z2 betragen.
  • Entsprechend sind auch die Konventionen bei den einzelnen Ausgabe- oder Ergebnisregistern 802. Hier handelt es sich wieder um vier Register mit kurzer Registerlänge, in denen jeweils ein Abschnitt D0, D1, D2 oder D3 des Ergebniswerts gespeichert ist, wobei je nach Position bzw. Identifikation eines kurzen Registers eine Anfangswertigkeit von 20, Z, Z2 o der Z3 vorliegt, die einem Registerinhalt dann gegeben werden muss, wenn es auf die insgesamte (absolute) Zahl und nicht nur auf eine Zahl innerhalb eines Registers ankommt.
  • Bei 804 ist ein Beispiel für eine Multiplikations-Additions-Operation gezeigt, also eine Operation zwischen einem ersten Operanden A, einem zweiten Operanden Bi, einem dritten Operanden C und einem vierten Operanden Z, wobei der erste Operand A und der dritte Operand C länger als der zweite Operand Bi oder der vierte Operand Z sind, und wobei Abschnitte des ersten Operanden A oder des dritten Operanden C kürzer als der erste Operand oder der dritte Operand an sich sind. In den einzelnen Ergebnisregistern 802a, 802b, 802c, 802d sind iterativ berechnete Ergebnisse gespeichert, wobei in den Registern 802a bis 802c aktualisierte MOD- bzw. DIV-Ergebnisse von 3 MMD-Operationen gespeichert sind, und wobei im niederstwertigen kurzen Register 802d das MOD-Ergebnis der letzten (dritten) MMD-Operation gespeichert ist.
  • Es sei darauf hingewiesen, dass eine beliebige Anzahl von Iterationen verwendet werden kann, dass also die langen Operanden nicht notwendiger in drei Abschnitte aufgeteilt werden müssen, sondern auch in zwei Abschnitte oder in mehr als 3 Abschnitte, wie beispielweise 4 oder 5 Abschnitte aufgeteilt werden könnten. Entsprechend würde dann die Anzahl der Iterationen steigen. Es wird jedoch nicht die Anzahl der Hilfsregister steigen. Die Anzahl der benötigten Ergebnisregister würde sich jedoch gemäß der Anzahl der Abschnitte (+1) erhöhen. Dennoch wird im nachfolgendem ein Ausführungsbeispiel diskutiert, bei dem die langen Operanden in drei Abschnitte gleicher Länge aufgeteilt werden, obgleich auch die Aufteilung in gleiche Länge nicht unbedingt nötig ist. Es führt zwar zu einer gleichmäßigen und gut handhabbaren Wertsituation der Anfangswertigkeiten der einzelnen Register, ist jedoch nicht unbedingt Voraussetzung. Werden Abschnitte ungleicher Länge gewählt, so werden die Anfangswertigkeiten der einzelnen kurzen Register entsprechend eingestellt, damit das „Zu sammensetzen" der Ergebniszahl aus den einzelnen Abschnitten richtig vonstatten geht.
  • 8d veranschaulicht das erfindungsgemäße Konzept anhand einer Vorrichtung bzw. eines Verfahrens zum Berechnen des Ergebnisses 802 eine Multiplikations-Additions-Operation 804 zwischen einem ersten Operanden A, einem zweiten Operanden Bi, einem dritten Operanden C und einem vierten Operanden Z, wobei der erste und der dritte Operand länger als der zweite oder der vierte Operand sind, und wobei Abschnitte des ersten oder dritten Operanden kürzer als der vierte Operand, also gewissermaßen die Zahl, die die Anfangswertigkeit angibt, sind.
  • Die erfindungsgemäße Vorrichtung umfasst eine Einrichtung 810 zum Berechnen von Ergebnissen einer MMD-Operation unter Verwendung des zweiten Operanden, eines höherwertigen Abschnitts A2 des ersten Operanden und des vierten Operanden als Modul. Diese Ergebnisse umfassen ein DIV-Ergebnis, das den ganzzahligen Quotienten der Operation liefert, und ein MOD-Ergebnis, das den Rest der ganzzahligen Division ergibt. Diese beiden Ergebnisse werden, wie es in 8d gezeigt ist, einer Einrichtung 811 zum Speichern der Ergebnisse zugeführt. Die Einrichtung 811 ist ausgebildet, um die Ergebnisse in Form von U1 und U0 in zwei kurzen Hilfsregistern 812a, 812b zu speichern. Die in den kurzen Hilfsregistern gespeicherten Werte, also die Ergebnisse der ersten MMD-Operation werden dann an eine Einrichtung 813 zum Aktualisieren des DIV-Ergebnisses und des MOD-Ergebnisses zugeführt, wobei die Aktualisierung unter Verwendung einer Addition von Abschnitten des dritten Operanden durchgeführt wird. Diese Aktualisierung berücksichtig somit den Additions-Term der Multiplikations-Additions-Operation, wie sie bei 804 in 8c gezeigt ist. Die Einrichtung 813 zum Aktualisieren ist ferner ausgebildet, um Aktualisierte Ergebnisse in einem vierten Ergebnisregister 814a und einem dritten Ergebnisregister 814b zu speichern. Der Speicherinhalt des Ergebnisregisters 814a wird als D3' be zeichnet, während der Abschnitt des Ergebnisses im dritten Ergebnisregister als D2' bezeichnet wird.
  • Je nach Aussehen der Abschnitte des dritten Operanden C führt die Aktualisierung in der Einrichtung 813 zum Aktualisieren zu einer Veränderung des eingespeisten DIV-Ergebnisses oder des eingespeisten MOD-Ergebnisses oder nicht. Ist die gesamte Situation des dritten Operanden beispielsweise so, dass das DIV-Ergebnis oder das MOD-Ergebnis der ersten MMD-Operation nicht verändert wird, so kann der entsprechende Wert U1 oder U0 in dem Hilfsregister 812a, 812b direkt in ein Ergebnisregister 814a, 814b eingetragen werden. In diesem Fall bedeutet das „Aktualisieren" also, dass keine Veränderung des Ergebnisses der MMD-Operation stattgefunden hat. Wenn jedoch der dritte Operand derart ist, dass die Ergebnisse der MMD-Operation, die bei 810 ausgeführt wird, verändert werden, so führt dies zu einer Änderung der Hilfsregister-Werte und dazu, dass die geänderten Hilfsregister-Werte in entsprechende Ergebnis-Register, wie beispielsweise 814a, 814b, eingespeist werden.
  • Die vorliegende Erfindung umfasst ferner eine Einrichtung 815 zum erneuten Ausführen der MMD-Operation und der Aktualisierung unter Verwendung eines anderen Abschnitts des ersten Operanden, bis alle Abschnitte des ersten Operanden abgearbeitet sind. Die Register, in denen aktualisierte Ergebnisse gespeichert sind, und ein Register, in dem ein MOD-Ergebnis einer letzten MMD-Operation gespeichert ist, liefern dann zusammen gemäß der den Registern zugeordneten Anfangswertigkeit das Ergebnis der Multiplikations-Additions-Operation, wie es bei 802 gezeigt ist.
  • Die Einrichtung 815 zum erneuten Ausführen kann als Iterationseinrichtung ausgebildet sein, die die Einrichtungen 810, 811, 813 in einer zyklischen Verarbeitung erneut aktiviert, jedoch mit den entsprechenden anderen Abschnitten der Operanden versorgt. Alternativ kann dann, wenn keine iterative Ab arbeitung gewünscht ist, die Einrichtung 815 zum erneuten Ausführen auch als einfache Verdoppelung bzw. Verdreifachung der Elemente 810, 811, 813 ausgebildet sein, die jedoch mit entsprechend anderen Werten gespeist werden. Aus Effizienzgründen wird jedoch das Ausführungsbeispiel bevorzugt, bei dem die Einrichtung 815 zum erneuten Ausführen die vorhandenen Einrichtungen 810, 811, 813 erneut, jedoch mit anderen Eingangsoperanden ansteuert, bis sämtliche Abschnitte des ersten Operanden A abgearbeitet sind.
  • Im ersten Schritt werden als Eingangsoperanden Aj, Bi und Z sowie Cj, Cj-i benötigt.
  • Im zweiten Schritt werden als Eingangsoperanden Aj-1, Z und Cj-2 benötigt.
  • Im dritten Schritt werden als Eingangsoperanden Aj-1, Bi und Z benötigt.
  • Wird eine Aufteilung in nur 2 Abschnitte vorgenommen, so ist die Berechnung bereits nach 2 Schritten fertig.
  • Sollte jedoch eine Aufteilung in mehr als 3 Abschnitte vorgenommen, so wird im zweiten Schritt neben Cj-2 auch Cj-3 verwendet werden und wird im dritten Schritt Aj-3 sowie Cj-4 verwendet werden, und würde es einen vierten und letzten Schritt geben, in dem Aj-4 verwendet werden würde.
  • In diesem Fall hätte auch das Ergebnisregister fünf einzelne kurze Ergebnisregister anstatt der für den Fall von 3 Abschnitten verwendeten vier einzelnen Ergebnisregister, in denen die Ergebniswerte D3', D2'' und D0 gespeichert sind, wobei W0 das MOD-Ergebnis der letzten MMD-Operation darstellt, während die anderen drei Einträge in das gesamte Ergebnisregister 802 aktualisierte MMD-Ergebnisse sein werden.
  • In 8e ist zu Illustrationszwecken ein Beispiel dargestellt sowie die drei Iterationsschritte zum Berechnen des Ergebnisses der Multiplikations-Additions-Operation anhand eines beliebig gewählten Beispiels dargestellt.
  • Für jeden Schritt ist die Belegung der beiden Hilfsregister 812a, 812b sowie der in diesen Schritten erhaltenen Inhalte der Ergebnisregister 802a bis 802d dargestellt. Bei dem in 8e gezeigten Ausführungsbeispiel werden immer nur Register benötigt, die eine einzige Zehnerstelle speichern können, es werden nie Register benötigt, die zwei Zehnerstellen speichern müssen.
  • Die Registerimplementierung ist in 8b veranschaulicht.
  • Der Hauptteil des Algorithmus besteht also aus den MMD-Operationen. Ihre Implementierung wird in einem folgenden Abschnitt erörtert. Neben diesen gibt es eine Elementaroperation, nämlich ein Addieren von Komponenten von Ganzzahlen und ein Behandeln eines möglichen Übertrags.
    Figure 00510001
    Figure 00520001
  • Hier wurde die letzte Aktion in Klammern gesetzt, da dies nicht wirklich nötig ist: Falls es nötig wäre, würde der Übertrag in dem letzten Schritt aufgelöst. Da nämlich D''2 ≤ 2(Z – 1), ist es trotzdem möglich, den Übertrag von dem nächsten Schritt zurückzuhalten, und er kann ohne zusätzliche Probleme aufgelöst werden. Schließlich kann (D''1 |D0)Z := (D'1 + W1, W0)Z implementiert werden als
    Figure 00520002
  • Der Algorithmus TC ist nichts anderes als ein einfaches Behandeln eines Übertrags in der Z-ären Ganzzahldarstellung, wie in 9a gezeigt ist.
  • Bei dem bevorzugten Ausführungsbeispiel der vorliegenden Erfindung wird der Algorithmus TC im Rahmen des Aktualisierungs-Schritts durchgeführt, also nach der erfolgten Addition und vor der Belegung der Ergebnisregister 814a, 814b in 8d. Der Algorithmus für TC in 9a gezeigt. Der Algorithmus TC greift erst dann ein, wenn der zweite Input X, also bei dem in 8a gezeigten Algorithmus der Wert aus (C1 + U0) größer als Z ist. Ist dieser Wert kleiner als Z, so gibt es keinen Übertrag, um die Funktion TC aus 9a ist transparent. Ist jedoch die Bedingung X größer als Z oder gleich Z der Fall, so wird Z von X abgezogen, und wird, um den Über trag zu berücksichtigen Y um „+1" implementiert. Der Wert Y stellt dann den Inhalt des vierten Registers D3' dar, während der Wert X den Inhalt D2' des dritten Registers 814b in 8d darstellt.
  • Es sei darauf hingewiesen, dass dann, wenn solche Zahlen berechnet werden, bei denen niemals ein Übertrag auftritt, die TC-Funktion nicht benötigt wird. Im Sinne einer universellen Anwendbarkeit wird diese Funktion jedoch bevorzugt und im Rahmen der Einrichtung zum Aktualisieren nach der Addition von Abschnitten des dritten Operanden C eingesetzt.
  • Nachfolgend wird ein Ablauf des erfindungsgemäßen Verfahrens anhand einer bevorzugten Registerimplementierung detaillierter dargestellt. Ausgegangen wird von der Registersituation eines Rechenwerks mit 5 langen Registern, die in zehn kurze Register aufgeteilt sind. Die Registerbelegung beim Start des Algorithmus ist in 8b bei 840 dargestellt. Es ist zu sehen, dass nur die oberen vier Register mit N2, C1, C2 und C0 belegt sind. N2 ist der oberste Abschnitt des transformierten Moduls, der für die Multiplikations-Additions-Berechnung an sich nicht benötigt wird, der jedoch aufgrund den vorherigen bzw. nachfolgenden Berechnungen bereits im Register steht. Prinzipiell wird er jedoch für die Ausführung der Multiplikations-Additions-Operation nicht benötigt.
  • Ferner ist in 8b der Zustand des externen Speichers bzw. Arbeitsspeichers XDATA 850 gezeigt. Der externe Speicher 850 umfasst drei Abschnitte des ersten Operanden A, drei Abschnitte des zweiten Operanden Bund den mittleren und den untersten Abschnitt des transformierten Moduls N, welche jedoch für die Multiplikations-Additions-Operation ebenfalls nicht benötigt werden.
  • In einem Speicherbelegungsschritt Movk wird nunmehr der interne Registerspeicher geladen, und zwar mit dem vierten Operanden Z in der vierten Zeile und der linken Spalte bei 840' gezeigt. Die Zahlen Z+1 sowie die erneute Ladung von Bi in einen weiteren kurzen Speicher werden für die Multiplikations-Additions-Operation in ihrer prinzipiellen Ausführung nicht benötigt. Hierauf wird durch die Einrichtung 810 die erste MMD-Operation durchgeführt. Die Ergebnisse U0, U1 werden in die beiden noch freien Registerspeicher eingespeist, wie es bei 841 dargestellt ist. Nunmehr wird aktualisiert, was durch eine Additions-Funktion und eine TC-Funktion in 8b dargestellt ist. Hierbei werden die Register C2 und C1 mit den Werten D3' und D2' überschrieben. Dies ist möglich, da die Werte C2 und C1 nicht mehr benötigt werden, wie es aus 8a ersichtlich ist. Ferner ist in 8b dann, nach dem ersten Aktualisierungsschritt (Add, TC) die Speicherbelegung derart dargestellt, dass die beiden Hilfsregister, in denen U0, U1 gespeichert waren, wieder gelöscht sind, wie es bei 841' dargestellt ist.
  • Dann wird die zweite MMD-Operation durchgeführt, und die Ergebnisse V0, V1 werden wieder in die beiden Hilfsregister gespeichert, wie es bei 842 zu sehen ist. Dann wird aktualisiert, es wird also eine Additions-Operation und eine TC-Operation ausgeführt, um zu einer Speicherbelegung 842' zu kommen. Es ist zu sehen, dass der Registerspeicher, in dem C0 stand, durch D1' überschrieben worden ist, da C0 nach der zweiten Aktualisierung (Add, TC) nicht mehr benötigt wird.
  • Ferner wird die dritte und letzte MMD-Operation durchgeführt, um eine Belegung des Registerspeichers zu erhalten, wie sie bei 843 gezeigt ist. Wieder wird eine Belegung der beiden Hilfsregister durch Wo und W1, also die Ergebnisse der MMD-Operation erreicht, wobei dann ein letztes Mal aktualisiert wird, um eine Speicherbelegung zu erhalten, wie sie bei 843' dargestellt ist. Bei dem in 8b gezeigten Ausführungsbeispiel wurde der Wert N2 verschoben, und wurde Wo als niederstwertiger Ergebnis-Registerwert eingetragen.
  • Ein abschließender Treat-Carry-Schritt zur Verwendung des Inhalts des Speichers, wie er bei 843' gezeigt ist, führt zum letztendlichen Output-Zustand, der bei 844 dargestellt ist.
  • Es sei darauf hingewiesen, dass die interne Speicherbelegung so gewählt worden ist, dass der Prozessor, also die Einrichtung zum Berechnen der MMD-Operation 810 oder die Einrichtung 813 zum Aktualisieren, die ein und das selbe Rechenwerk sein können, oder die getrennte Rechenwerke sein können, immer nur auf einen einzigen Wert im externen Speicher zugreifen muss. Im ersten MMD-Schritt ist dies der Wert A2. Im zweiten MMD-Schritt ist dies der Wert A1, und im dritten MMD-Schritt ist dies der Wert A0.
  • Im Falle eines Prozessors, der keinen externen Zugriff ausführt, sondern der nur mit seinen internen Registern arbeiten soll, müsst der Wert für A2, A1 bzw. A0 vor jeder Ausführung der MMD-Operation in ein zur Verfügung stehendes kurzes Register eingespeichert werden, oder könnten alle drei Werte im #Rahmen von Movk am Anfang geladen werden.
  • Später wird der zu TC analoge Algorithmus zum Behandeln eines negativen Übertrags (Borrow) nach einer Subtraktion verwendet. Er ist in 9b gezeigt.
  • Der abschließende Reduktionsschritt muss nur die oberen zwei Teile von D berücksichtigen, da die unteren zwei Teile in dem letzten Schritt behandelt wurden, also wird (D3|D2|D1|D0)Z := (D'3 , D''2 , D''1 , D0)Z (auch mit TC bezeichnet) tatsächlich implementiert als D1 := D''1 (D3, D2) := TC(D''3 , D''2 )
  • Es sei daran erinnert, dass D3 positiv oder negativ werden kann, so dass es „frei floatend" ist.
  • Schließlich ist ein weiterer Teil des ganzen Algorithmus der Modularreduktionsschritt. Er hat zwei Versionen, eine, die den gewöhnlichen Rest ∊ [0, N[ berechnet, und eine, die den Rest berechnet, der durch N dekrementiert ist, d. h. ∊ [–N, 0]. Die zwei Algorithmen werden in einem Schritt gezeigt, da die Unterschiede nur in der Berechnung von ε ∼ und in der Endreduktion liegen (9c).
  • Die Registerimplementierung ist in 9d dargestellt.
  • Erneut besteht der Hauptteil der Algorithmus aus den drei MMD-Operationen. Ihre Implementierung wird in einem folgenden Abschnitt erörtert. Der verbleibende Teil besteht aus der Schätzung von ε, die in einem späteren Abschnitt erörtert wird, und einigen Elementaroperationen von Addition oder Subtraktion von Komponenten und dem Behandeln von möglichen Überträgen oder negativen Überträgen.
  • Die ersten zwei Additionen Q'0 := Q0 + D3 und D'2 := D2 + R0 werden keiner Übertragbehandlung unterzogen. In jedem Fall wurde in Anmerkung 7 ersichtlich, dass Q0 nicht viel größer als Z wird. Andererseits kann D ' / 0 so groß wie 2Z werden, aber es ist nicht negativ und deshalb muss diese Ganzzahl als eine Ganzzahl ohne Vorzeichen interpretiert werden!
  • Bezugnehmend auf 12 wird gezeigt, wie die nächsten drei Zeilen zusammen zu implementieren sind:
    Figure 00560001
  • Die Subtraktion (D'1 |D'0 )Z := (D1 – U1, D0 – U0)Z erfolgt auf eine ähnliche Weise wie bei dem MAZ-Algorithmus, mit dem Unterschied, dass negative Überträge anstelle von Überträgen behandelt werden müssen. Es sei jedoch darauf hingewiesen, dass, falls Q''0 < 0, dann auch U1 und U0 negativ sind, somit ist die Subtraktion eigentlich eine Addition und man muss wieder Überträge behandeln:
    Figure 00570001
  • Natürlich besteht eine Möglichkeit, die Reihenfolge der Operationen zu ändern. Auf die gleiche Weise wird die andere Subtraktion (D'''2 |D''1 )Z := (D''2 – V1, D'1 – V0)Z behandelt als:
    Figure 00570002
  • Es sei daran erinnert, dass D ''' / 2 noch nicht aufgelöst wird. Dies erfolgt in dem Endreduktionsschritt, der nun folgt:
    Bei RedZ ist es erwünscht, ein Ergebnis E ∊ [0, N[ zu erhalten. Manchmal ist das Ergebnis aber etwas größer als N oder kleiner als 0. In diesem Fall muss N einmal subtrahiert oder addiert werden. Um zu prüfen, ob E > N, muss E von N subtrahiert werden. Aber leider liegt N nicht voll in Crypto@1408. So wird E2 – N2 berechnet und geprüft, ob diese Differenz ≥ 0 ist. Falls E > N, ist dies sicher der Fall. Es sei darauf hingewiesen, dass auch E2 – N2 = 0 ein Hinweis darauf sein kann, dass E > N, da es immer noch möglich ist, dass E1 > N1. Dies kann jedoch nicht sofort geprüft werden, da zuerst das volle N in Crypto@1408 geladen werden muss. Nur in sehr wenigen Fällen passiert es, dass E2 = N2, während E ≤ N. Da all dies sehr selten auftritt, wird die Zeit aufgebracht und das komplette N in den Crypto@1408. geladen und die Endreduktion durchgeführt: N wird von E subtrahiert. Falls dann die neue Ganzzahl E2 ≥ 0, ist das der Abschluss. Falls E2 negativ wird, muss erneut N addiert werden. Falls E2 von Anfang an negativ war – was ebenfalls sehr selten vorkommt – dann wird auch N in den Crypto@1408 geladen und zu E addiert. Dieser Algorithmus ist formell gegeben durch
    Figure 00580001
  • Es sei darauf hingewiesen, dass normalerweise, in 99,9 % aller Fälle, beide falls- bzw. if-Bedingungen nicht erfüllt sein werden. Also soll die Implementierung diese Tatsache berücksichtigen. Es soll vermieden werden, das volle N in den Crypto@1408 zu laden, wenn nicht eine der Bedingungen wahr ist, da dies viel Zeit beansprucht! Für Red'Z ist die Endreduktion ziemlich ähnlich
    Figure 00590001
  • In beiden Fällen muss man sich immer Überträgen und negativer Überträge bewusst sein und sie wie bei den früher in diesem Abschnitt beschriebenen Additionen und Subtraktionen auflösen. Schließlich sei auf die folgende wichtige Anmerkung verwiesen.
  • Anmerkung 11: Aufgrund der Gleichung (3) gilt Q''0 ∊ [– Z – 1, Z]. Da bei der zweiten und dritten MMD-Operation der zweite Faktor definitiv mod Z reduziert wird, hat das Produkt Q''0 ·Ni immer einen Absolutwert ≤ (Z + 1)(Z – 1) = Z2 – 1.
  • Implementierung von MMDk
  • Eingabe für den MMD-Algorithmus ist ein umgewandelter Modul N (in diesem Fall ist dies N2 oder Z), der Multiplikand X (in diesem Fall Bi, D3, Q '' / 0) und der Multiplizierer Y (Ai, Z, Z – N2 und Ni), die in den meisten, aber nicht in allen Fällen außerhalb von Crypto@1408 liegen werden.
    • 1. Falls #N =: k > 704 – 8 – 1 = 695 (Vorzeichenbit, nicht gezählt), muss die MMD-Operation in dem langen Modus von Crypto@1408 berechnet werden. Ansonsten kann der parallele Modus verwendet werden, der im Folgenden erörtert ist. In dem langen Modus ist der Algorithmus in 10a angegeben. Für den Crypto@1408 ist der Algorithmus in der folgenden 10b veranschaulicht.
    • 2. Zumindest in einem Fall wird der Algorithmus für einen negativen Multiplikanden benötigt. Dies ist jedoch kein Problem, solange X ∊ ]–N, 0]: In diesem Fall wird (Q, R) := MMD(–X, Y; N) berechnet und (–Q + 1, N – R) zurückgegeben, falls R > 0, und (–Q, –R), falls R = 0. Dies ist legitim durch die folgende Beobachtung: Falls –X·Y = Q·N + R, mit R ∊ [0, N[,dann X·Y = –Q·N – R = (–Q + 1)·N + (N – R). Tatsächlich reicht es in diesem Fall aus, nur (–Q, –R) zurückzugeben, da dieser Algorithmus in diesem Teil mit einem negativen Rest R wirksam ist.
    • 3. Es ist sogar nicht wirklich notwendig, dass X und Y ∊ [0, N[ (oder allgemeiner in ]–N, N[). Es genügt, dass das Produkt X·Y in [0, N2[ liegt. Deshalb kann es zulässig sein, dass X oder Y etwas größer als N ist, solange • der Crypto@1408 die Ganzzahl nicht auf eine falsche Weise interpretiert (Vorzeichenbit). • das Produkt X·Y nicht zu groß ist, d. h. in [0, N2[ liegt. In 11a ist der Algorithmus in der Weise gegeben, in der er vorzugsweise verwendet wird. Der Algorithmus, der bei Crypto@1408 implementiert ist, ist in 11b veranschaulicht.
  • Vornehmen der Seitenberechnung
  • In diesem Abschnitt wird eine Implementierung der drei Zeilen
    Figure 00610001
    von Red gegeben.
  • Der Hauptpunkt bei dieser Implementierung ist die Schätzung von D'2 – (Q'0 N1)1 div N2. Durch die gleiche Technik, die bereits mehrere Male verwendet wurde, kann eine Näherung einer Division erhalten werden, indem nur die obersten Bits eines Dividenden und eines Divisors verwendet werden. In diesem Fall werden die 16 obersten (top) Bits (einschließlich Vorzeichenbits) verwendet, d. h. es wird verwendet:
    Figure 00610002
  • Da (...)1 bei (Q'0 N1)1 eine Division durch Z bedeutet, wird der Bruch mit Z multipliziert und es erfolgt somit eine Näherung auf die folgende Weise: ε := (ZtopD'top2 – Q'top0 Ntop1 )div Ntop2
  • D 'top / 2 und Q 'top / 0 werden durch ein Lesen des höchstwertigen Wortes von D2 und Q ' / 0 erhalten. Die obersten zwei Bytes – erweitertes Vorzeichen – werden in irgendein CPU-Register geladen. Auch N top / 1 wird auf die gleiche Weise vorbereitet, aber in diesem Fall muss dies nur einmal während der gesamten Expo nentiation erfolgen. (Vorberechnung!) Dann wird das Produkt Q'top0 Ntop1 berechnet. Es ist ein 32-Bit-Wort und wird von Ztop D'top2 subtrahiert. Das Ergebnis sei X genannt. Dieses Ergebnis wird mit N top / 2 verglichen, das auf die gleiche Weise vorbereitet wird wie N top / 1, aber mit einem zusätzlichen Faktor von Ztop. Der Rest ist offensichtlich und in der 11 gezeigt.
  • Anmerkung 12: Es sei darauf hingewiesen, dass für Red' in jedem Fall ein zusätzlicher Block D'2 := D'2 – N2 Q'0 := Q'0 + 1hinzugefügt werden muss.
  • Vorberechnung
  • Die Vorberechnung erhält die Basis B* und den Modul N* für die Exponentiation. N* hat eine Bitlänge K, d. h. N* ∊ [2k-1, 2k[. (N'2 |N'1 |N'0 )Z := N* B2|B1|B0)Z := B*
  • Da die Vorberechnung für die Performance nicht relevant ist, werden die Implementierungsaspekte nicht zu detailliert behandelt. Nur einige Hinweise und Anmerkungen zu diesen Punkten:
  • Umwandeln von N* zu (N2|N1|N0):
  • Nun sei W := 2k-1 die größte Zweierpotenz kleiner Z gesetzt und geschrieben N* = (N'2 |N'1 |N'0 )W, d. h. N* sei in drei (k-1)-Bit-Blöcke geteilt. Die Transformation in eine Z-äre Darstellung (N2|N1|N0) := N* ist in 13a gegeben:
  • Es sei darauf hingewiesen, dass Z umgewandelt wird, so dass wirklich die MMD-Implementierung von 11a und 11b verwendet werden kann. Die zwei Additionsteile werden genau wie bei der Hauptimplementierung, die ab 6 vorgestellt ist, vorgenommen: Die Addition wird komponentenweise durchgeführt und der Übertrag behandelt!
  • Umwandeln von B* zu (B2|B1|B0)Z:
  • Dies funktioniert auf genau die gleiche Weise wie bei dem letzten Punkt.
  • Durchführen der Endreduktion (Nachberechnung)
  • Die Endreduktion nimmt die Ausgabe (A2|A1|A0)Z der letzten modularen Multiplikation der reinen Exponentiation, reduziert diese Zahl modulo N* = (N'2 |N'1 |N'0 )Z := N* und wandelt sie zurück in die binäre Darstellung A* um. So ergibt sich
    • 1. (A ' / 2|A ' / 1|A ' / 0)Z := (A2|A1|A0)Z mod (N ' / 2|N ' / 1|N ' / 0)Z
    • 2. A* := (A ' / 2|A ' / 1|A ' / 0)Z
    wobei (N'2 |N'1 |N'0 )Z aus Abschnitt 5.5 bekannt ist.
  • Zu 1. Die Reduktion
  • wird auf die bereits bekannte Weise durchgeführt: A:= A – [A div N]·N, so dass der Algorithmus gegeben werden kann, wie es in 13c gezeigt ist.
  • Die Division ist diejenige aus dem letzten Abschnitt und es wird die gesamte bereits bekannte Technik verwendet.
  • Zu 2. Umwandeln in binäre Form
  • Dies ist eigentlich nur die Berechnung A:= A'2 ·Z2 + A'1 ·Z + A'0
  • Es wurden drei unterschiedliche Verfahren beschrieben, um eine 2.048-Bit-RSA-Berechnung zu implementieren. Außerdem wurde die Performance einer derartigen Implementierung des Algorithmus bewertet, wobei einige Systemaspekte, die performancedominierend sind, berücksichtigt wurden, wie z. B. ein Bewegen von Ganzzahlen in Crypto@1408 hinein und aus demselben heraus. Es stellte sich heraus, dass der erfindungsgemäße bevorzugte Algorithmus hinsichtlich Geschwindigkeit und Verwendung von externem Speicher der beste ist. Obwohl er für m = 3 nur geeignet ist, um RSA bis zu 2048 Bits (+ 16 zur Randomisierung) zu implementieren. Falls ein Bedarf an längeren Bitlängen besteht, dann scheint der Algorithmus II (Fischer-Sedlak-Seifert mit MMD) das beste angemessene Verfahren zu sein. Alternativ kann auch m = 4, 5, ... gewählt werden.
  • Abhängig von den Gegebenheiten kann das erfindungsgemäße Verfahren zum Berechnen eines Ergebnisses in Hardware oder in Software implementiert werden. Die Implementierung 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 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 eines 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.
    • [1] W. Fischer, „Vorrichtung und Verfahren zum Berechnen eines Ergebnisses aus einer Division", DE Patent #102,05,713, 7. Aug. 2003.
    • [2] W. Fischer, H. Sedlak, J.-P. Seifert, „Vorrichtung und Verfahren zum Berechnen eines Ergebnisses einer modularen Multiplikation", DE Patent #102,19,158, 9. Dez. 2004
    • [3] W. Fischer, J.-P. Seifert, „Vorrichtung und Verfahren zum Umrechnen eines Termes", DE Patentanmeldung #102,19,161,A1, 20. Nov. 2003.
    • [4] W. Fischer, H. Sedlak, J.-P. Seifert, „Vorrichtung und Verfahren zum Berechnen eines ganzzahligen Quotienten", DE Patent #102,19,164, 2. Dez. 2004.
    • [5] W. Fischer, H. Sedlak, J.-P. Seifert, „Vorrichtung und Verfahren zum Berechnen einer Multiplikation mit der Verschiebung des Multiplikanden, insbesondere bei der kryptographischen Berechnung", DE Patent #102,60,655, 24. Jun. 2004.
    • [6] W. Fischer, H. Sedlak, J.-P. Seifert, „Modulare Multiplikation mit paralleler Berechnung der Look-Ahead-Parameter u.s. bei der kryptographischen Berechnung", DE Patent #102,60,660, 9. Jun. 2004.
    • [7] W. Fischer, J.-P. Seifert, „Increasing the bitlength of a crypto-coprocessor", Proc. of CHES '02, Springer LNCS, Bd. 2523, S. 71–81, 2002.
    • [8] W. Fischer, J.-P. Seifert, „Unfolded modular multiplication", Proc. of ISAAC '03, Springer LNCS, 2003.
    • [9] A. Menezes, P. van Oorschot, S. Vanstone, „Handbook of Applied Cryptography", CRC Press, 1997.
    • [10] P. L. Montgomery, „Modular multiplication without trial division", Math. of Computation, 44:519-521, 1985.
    • [11] H. Sedlak, „The RSA cryptographic Processor: The first High Speed One-Chip Solution", Proc. of EUROCRYPT '87, Springer LNCS, Bd. 293, S. 95–105, 198.

Claims (28)

  1. Vorrichtung zum Berechnen des Ergebnisses einer Multiplikations-Additions-Operation zwischen einem ersten Operanden (A), einem zweiten Operanden (B), einem dritten Operanden (C) und einem vierten Operanden (Z), wobei der erste und der dritte Operand länger als der zweite Operand oder der vierte Operand sind, und wobei Abschnitte (A0, A1, A2) des ersten Operanden gleich oder kürzer als der vierte Operand (Z) sind, mit folgenden Merkmalen: einer Einrichtung zum Berechnen von Ergebnissen von MMD-Operationen unter Verwendung des zweiten Operanden, der Abschnitte (A2, A1, A0) des ersten Operanden und des vierten Operanden (Z) als Modul, um das Ergebnis (802) der Multiplikations-Additions-Operation zu erhalten.
  2. Vorrichtung nach Anspruch 1, bei der die Einrichtung zum Berechnen folgendes Merkmalen aufweist: eine Einrichtung (810) zum Berechnen von Ergebnissen einer MMD-Operation unter Verwendung des zweiten Operanden, eines höherwertigen Abschnitts (A2) des ersten Operanden und des vierten Operanden (Z) als Modul, und zum Speichern (811) eines DIV-Ergebnisses in einem ersten Hilfsregister (812a) und eines MOD-Ergebnisses in einem zweiten Hilfsregister (812b), wobei die Vorrichtung ferner folgendes Merkmal aufweist: eine Einrichtung (813) zum Aktualisieren des DIV-Ergebnisses und des MOD-Ergebnisses unter Verwendung einer Addition von wenigstens einem Abschnitt (C2) des dritten Operanden (C) und zum Speichern von aktualisierten Ergebnissen in einem vierten Ergebnisregister (814a) und einem dritten Ergebnisregister (814b); und bei der die Einrichtung zum Berechnen ferner folgendes Merkmalen aufweist: eine Einrichtung (815) zum erneuten Ausführen der MMD-Operation und des Aktualisierens unter Verwendung eines anderen Abschnitts (A1, A0) des ersten Operanden (A), bis alle Abschnitte des ersten Operanden abgearbeitet sind, wobei Ergebnisregister, in denen aktualisierte Ergebnisse einer MMD-Operation gespeichert sind, und ein Register, in dem ein MOD-Ergebnis einer letzten MMD-Operation gespeichert ist, zusammen das Ergebnis (802) darstellen.
  3. Vorrichtung nach Anspruch 2, bei der die Ergebnisregister (802a, 802b, 802c, 802d) jeweils weniger Registerstellen haben als der erste Operand (A) oder der dritte Operand (C) Stellen haben.
  4. Vorrichtung nach Anspruch 2 oder 3, bei der der erste Operand (A) oder der dritte Operand (C) in eine Mehrzahl von Abschnitten (A2, A1, A0, C2, C1, C0) aufgeteilt sind, die jeweils eine Anzahl von Stellen haben, die kleiner oder gleich einer Anzahl von Stellen des vierten Operanden (Z) ist, und bei der die Ergebnisregister (802a, 802b, 802c, 802d) weniger Registerstellen haben als benötigt werden, um zwei Abschnitte in einem Register zu speichern.
  5. Vorrichtung nach einem der vorhergehenden Ansprüche, bei der die Einrichtung (810) zum Berechnen der MMD-Operation ausgebildet ist, um als DIV-Ergebnis eine ganze Zahl zu liefern, die aussagt, wie oft ein Produkt aus dem höherwertigen Abschnitt des ersten Operanden und des zweiten Operanden durch den vierten Operanden ganzzahlig teilbar ist, und bei der die MOD-Operation angibt, wie groß der Rest ist, der bei der ganzzahligen Division übrig bleibt.
  6. Vorrichtung nach einem der vorhergehenden Ansprüche, bei der die Einrichtung zum Aktualisieren ausgebildet ist, um die Summe aus dem höchstwertigen Abschnitt eines dritten Operanden und dem DIV-Ergebnis zu berechnen, und um die Summe aus dem niederwertigen Abschnitt (C1) und dem MOD-Ergebnis (U0) zu berechnen, und um aus erhaltenen Summenwerten aktualisierte Ergebnisse zu erhalten, wobei die Einrichtung (815) zum erneuten Ausführen ausgebildet ist, um in einem erneuten Ausführen des Aktualisierens eine Summe aus einem Inhalt des dritten Ergebnisregisters (D2') und einem DIV-Ergebnis einer zweiten MMD-Operation (V1) zu berechnen, und eine Summe aus einem niedrigstwertigen Abschnitt (C0) des dritten Operanden und einem MOD-Ergebnis (V0) der zweiten MMD-Operation zu berechnen und um aus erhaltenen Ergebnissen die aktualisierten Ergebnisse für das dritte Ergebnisregister und ein zweites Ergebnisregister zu erhalten, und bei der die Einrichtung (815) zum erneuten Ausführen ausgebildet ist, um eine Summe aus dem Wert des zweiten Ergebnisregisters (D1') und einem DIV-Ergebnis einer dritten MMD-Operation sowie ein MOD-Ergebnis der dritten MMD-Operation zu erhalten und um hieraus wenigstens ein aktualisiertes Ergebnis (D1'') für das zweite Ergebnisregister zu erhalten.
  7. Vorrichtung nach einem der vorhergehenden Ansprüche, bei der die Einrichtung zum (813) zum Aktualisieren ausgebildet ist, um eine Treat-Carry-Funktion durchzuführen, die ausgebildet ist, um dann, wenn ein erster Eingangswert größer als der vierte Operand ist, den vierten Operand von dem ersten Eingangwert zu subtrahieren, um einen ersten Ausgangswert zu erhalten, und um in diesem Fall einen zweiten Eingangswert um 1 zu implementieren, um einen zweiten Ausgangswert (Y) zu erhalten, wobei der zweite Ausgangswert (Y) ein höherwertiges aktualisiertes Ergebnis und der erste Ausgangswert (X) ein niederwertiges aktualisiertes Ergebnis darstellen.
  8. Vorrichtung nach einem der vorhergehenden Ansprüche, bei der die Vorrichtung ausgebildet ist, um als dritten Operanden einen Wert zu verwenden, der kleiner als 0 ist.
  9. Vorrichtung nach einem der vorhergehenden Ansprüche, die ausgebildet ist, um Operanden in Abschnitte gleicher Länge aufzuteilen, so dass alle Abschnitte dieselbe Anzahl von Stellen aufweisen.
  10. Vorrichtung nach einem der vorhergehenden Ansprüche, bei der die Einrichtung (815) zum erneuten Ausführen ausgebildet ist, um Werte in dem ersten Hilfsregister (812a) und dem zweiten Hilfsregister (812b) durch Ergebnisse einer erneuten MMD-Operation zu überschreiben.
  11. Vorrichtung nach einem der vorhergehenden Ansprüche, die ausgebildet ist, um den Abschnitt (A2, A1, A0) des ersten Operanden (A) aus einem externen Speicher (850) zu laden, während andere Operanden, die für eine Rechenoperation nötig sind, von einem Prozessor-internen Register erhalten werden.
  12. Vorrichtung nach einem der vorhergehenden Ansprüche, bei der die Einrichtung (810) zum Berechnen, die Einrichtung (813) zum Aktualisieren und die Einrichtung (815) zum erneuten Ausführen ausgebildet sind, um die Multiplikations-Additions-Operation (MAz) folgendermaßen auszuführen:
    Figure 00700001
    Figure 00710001
    wobei A der Multiplikator ist, wobei Bi ein Abschnitt des Multiplikanden ist, wobei C ein Zwischenergebnis eines vorherigen Schritts ist, wobei N der Modul ist, wobei Z = 2i ist wobei i eine Anzahl von Stellen des Abschnitts darstellt, wobei D ein Ergebnis der Multiplikation-Addition ist, wobei i und j Laufindizes sind, wobei MMD eine MultModDiv-Operation darstellt, und wobei treat carry eine Übertragbehandlungsfunktion ist.
  13. Vorrichtung zum Berechnen eines Ergebnisses einer modularen Multiplikation mit einem Multiplikator (A), einem Multiplikanden (B) und einem Modul (N), mit folgenden Merkmalen: einer Einrichtung (10) zum Bereitstellen des Multiplikanden (B) in wenigstens drei Abschnitten (B0, B1, B2), wobei jeder Abschnitt eine Anzahl von Stellen aufweist, die kleiner als eine halbe Anzahl von Stellen des Multiplikanden ist, und wobei die wenigstens drei Abschnitte sämtliche Stellen des Multiplikanden umfassen; und einer Einrichtung (12) zum sequentiellen Berechnen, wobei die Einrichtung (12) zum sequentiellen Berechnen ausgebildet ist, um unter Verwendung eines höherwertigen Abschnitts (B2) des Multiplikanden (B) ein erstes Zwischenergebnis zu berechnen (14), um unter Verwendung eines niedrigerwertigen Abschnitts (B1) des Multiplikanden (B) und des ersten Zwischenergebnisses ein zweites Zwischenergebnis zu berechnen (16), und um unter Verwendung eines noch niedrigerwertigen Abschnitts (B0) des Multiplikanden (B) und des zweiten Zwischenergebnisses ein drittes Zwischenergebnis zu berechnen und zu speichern, wobei das dritte Zwischenergebnis das Ergebnis der modularen Multiplikation darstellt, wenn der Multiplikand in genau drei Abschnitte aufgeteilt ist, oder wobei das Ergebnis der modularen Multiplikation von dem dritten Zwischenergebnis durch eine weitere sequentielle Berechnung ableitbar ist, wenn der Multiplikand in mehr als drei Abschnitte aufgeteilt ist, wobei die Einrichtung (12) zum sequentiellen Berechnen eine Vorrichtung zum Berechnen des Ergebnisses einer Multiplikations-Additions-Operation gemäß einem der Ansprüche 1 bis 12 aufweist, wobei der erste Operand den Multiplikator (A) entspricht, wobei der zweite Operand den Abschnitt (B2, B1 oder B0) des Multiplikanden (B) ist, wobei der dritte Operand C ein Zwischen ergebnis einer zeitlich vorausgehenden sequentiellen Berechnung ist, und wobei der vierte Operand an der Anzahl von Stellen abgeleitet ist, die ein Abschnitt aufweist.
  14. Vorrichtung nach Anspruch 12, bei der die Einrichtung zum Berechnen ausgebildet ist, um folgende Berechnung auszuführen: C1 := MMAZ(A, B2, 0; N) – N C2 := MMAZ(A, B1, C1; N) – N C3 := MMAZ(A, B0, C2; N),wobei N der Modul ist, wobei A der Multiplikator ist, wobei B2 der höchstwertige Abschnitt des Multiplikanden ist, wobei B1 ein niedrigerwertiger Abschnitt des Multiplikanden ist und wobei B0 ein niedrigstwertiger Abschnitt des Multiplikanden ist, wobei C1 das erste Zwischenergebnis ist, wobei C2 das zweite Zwischenergebnis ist, und wobei C3 das dritte Zwischenergebnis ist, und wobei MMAz eine MultModAdd-Operation mit einem jeweiligen Abschnitt des Multiplikanden darstellt.
  15. Vorrichtung nach Anspruch 14, bei der die MMA-Operation neben der Multiplikations-Additions-Operation (55a) eine Reduktionsoperation (55b) aufweist.
  16. Vorrichtung nach Anspruch 13, bei der die Einrichtung (10) zum Bereitstellen ausgebildet ist, um wenigstens ein Register zu haben, das eine Länge hat, die kleiner als eine Länge des gesamten Multiplikanden (B) ist, die aber größer oder gleich einem Abschnitt des Multiplikanden ist, und wobei die Einrichtung (12) zum Berechnen ausgebildet ist, um einen Abschnitt des Multiplikanden in das Register während einer Berechnung zu laden.
  17. Vorrichtung nach Anspruch 13 oder 16, bei der die Einrichtung (10) zum Bereitstellen ausgebildet ist, um auch den Multiplikator (A) und den Modul (N) in jeweils wenigstens drei Abschnitte aufzuteilen, und wobei die Einrichtung (12) zum Berechnen ausgebildet ist, um sowohl die Abschnitte des Multiplikators (A) als auch des Moduls (N) für eine oder mehrere Berechnungen zu verwenden.
  18. Vorrichtung nach Anspruch 13, bei der die Einrichtung (12) zum sequentiellen Berechnen ausgebildet ist, um zehn oder weniger Register mit einer Länge aufzuweisen, die wenigstens so groß ist wie eine Länge eines Abschnitts, und die kleiner als eine gesamte Länge des Moduls (N) ist.
  19. Vorrichtung nach Anspruch 13, bei der die Einrichtung (12) zum sequentiellen Berechnen ausgebildet ist, um folgende Gleichung auszuführen: C = [(A·B2 mod N)·Z + A·B1 mod N]·Z + A·B0 mod N,wobei C das dritte Zwischenergebnis ist, wobei A der Multiplikator ist, wobei Z = 21 ist, wobei i eine Anzahl von Stellen der Abschnitte ist, wobei B2 der höchstwertige Abschnitt des Multiplikanden ist, wobei B1 ein niedrigerwertiger Abschnitt des Multiplikanden ist, wobei B0 der niederstwertige Abschnitt des Multiplikanden ist, wobei N der Modul ist, und wobei mod eine modulare Reduktionsoperation anzeigt.
  20. Vorrichtung nach Anspruch 13, die als konfigurierbares Rechenwerk (40) ausgebildet ist, wobei das Rechenwerk eine Bit-Slice-Struktur aufweist, wobei jeder Bit-Slice einen Rechenwerkteil und einen Registerteil aufweist, wobei das konfigurierbare Rechenwerk ferner eine Registerkonfigurationseinrichtung (42) aufweist, die ausgebildet ist, um das Rechenwerk (40) in einen Lang-Modus oder einen Kurz-Modus zu konfigurieren, wobei das Rechenwerk (40) im Lang-Modus eine bestimmte erste Anzahl von langen Registern hat, wobei das Rechenwerk (40) im Kurz-Modus eine zweite Anzahl von kurzen Registern hat, wobei die zweite Anzahl größer als die erste Anzahl ist, und wobei eine Länge eines kurzen Registers derart ist, dass ein Abschnitt des Multiplikanden in dem kurzen Register speicherbar ist.
  21. Vorrichtung nach Anspruch 13, die ausgebildet ist, um die modulare Multiplikation innerhalb einer kryptographischen Berechnung durchzuführen, wobei der Multiplikator (A), der Multiplikand (B) und der Modul (N) Parameter der kryptographischen Berechnung sind.
  22. Vorrichtung nach Anspruch 21, bei der die kryptographische Berechnung eine Verschlüsselung, eine Entschlüsselung, eine Signaturerzeugung oder eine Signaturverifikation ist.
  23. Vorrichtung nach Anspruch 13, bei der alle Abschnitte des Multiplikanden dieselbe Anzahl von Stellen aufweisen.
  24. Vorrichtung nach Anspruch 13, bei der die Einrichtung (12) zum Berechnen ausgebildet ist, um nur eine Multiplikation von Zahlen eine Länge durchzuführen, die kleiner oder gleich der Anzahl von Stellen in einem Abschnitt ist.
  25. Verfahren zum Berechnen des Ergebnisses einer Multiplikations-Additions-Operation zwischen einem ersten Operanden (A), einem zweiten Operanden (B), einem dritten Operanden (C) und einem vierten Operanden (Z), wobei der erste und der dritte Operand länger als der zweite Operand oder der vierte Operand sind, und wobei Abschnitte (A0, A1, A2) des ersten Operanden gleich oder kürzer als der vierte Operand (Z) sind, mit folgendem Schritt: Berechnen von Ergebnissen von MMD-Operationen unter Verwendung des zweiten Operanden, der Abschnitte (A2, A1, A0) des ersten Operanden und des vierten Operanden (Z) als Modul, um das Ergebnis (802) der Multiplikations-Additions-Operation zu erhalten.
  26. Verfahren nach Anspruch 25, bei dem der Schritt des Berechnens folgenden Schritt aufweist: Berechnen (810) von Ergebnissen einer MMD-Operation unter Verwendung des zweiten Operanden, eines höherwertigen Abschnitts (A2) des ersten Operanden und des vierten Operanden (Z) als Modul; das ferner folgenden Schritt aufweist: Speichern (811) eines DIV-Ergebnisses in einem ersten Hilfsregister (812a) und eines MOD-Ergebnisses in einem zweiten Hilfsregister (812b); bei dem der Schritt des Berechnens ferner folgenden Schritt aufweist: Aktualisieren (813) des DIV-Ergebnisses und des MOD-Ergebnisses unter Verwendung einer Addition von wenigstens einem Abschnitt (C2) des dritten Operanden (C), das ferner folgenden Schritt aufweist: Speichern von aktualisierten Ergebnissen in einem vierten Ergebnisregister (814a) und einem dritten Ergebnisregister (814b); und bei dem der Schritt des Berechnens ferner folgenden Schritt aufweist: erneutes Ausführen (815) der MMD-Operation und des Aktualisierens unter Verwendung eines anderen Abschnitts (A1, A0) des ersten Operanden (A), bis alle Abschnitte des ersten Operanden abgearbeitet sind, wobei Ergebnisregister, in denen aktualisierte Ergebnisse einer MMD-Operation gespeichert sind, und ein Register, in dem ein MOD-Ergebnis einer letzten MMD-Operation gespeichert ist, zusammen das Ergebnis (802) darstellen.
  27. Verfahren zum Berechnen eines Ergebnisses einer modularen Multiplikation mit einem Multiplikator (A), einem Multiplikanden (B) und einem Modul (N), mit folgenden Schritten: Bereitstellen (10) des Multiplikanden (B) in wenigstens drei Abschnitten (B0, B1, B2), wobei jeder Abschnitt eine Anzahl von Stellen aufweist, die kleiner als eine halbe Anzahl von Stellen des Multiplikanden ist, und wobei die wenigstens drei Abschnitte sämtliche Stellen des Multiplikanden umfassen; und Berechnen eines ersten Zwischenergebnisses unter Verwendung eines höherwertigen Abschnitts (B2) des Multiplikanden (B), Berechnen eines zweiten Zwischenergebnisses unter Verwendung eines niedrigerwertigen Abschnitts (B1) des Multiplikanden (B) und des ersten Zwischenergebnisses, und Berechnen eines dritten Zwischenergebnisses unter Verwendung eines noch niedrigerwertigen Abschnitts (B0) des Multiplikanden (B) und des zweiten Zwischenergebnisses und Speichern des dritten Zwischenergebnisses, wobei das dritte Zwischenergebnis das Ergebnis der modularen Multiplikation darstellt, wenn der Multiplikand in genau drei Abschnitte aufgeteilt ist, oder wobei das Ergebnis der modularen Multiplikation von dem dritten Zwischenergebnis durch eine weiteres sequentielles Berechnung ableitbar ist, wenn der Multiplikand in mehr als drei Abschnitte aufgeteilt ist, wobei in jedem Schritt des Berechnens ein Verfahren zum Berechnen des Ergebnisses einer Multiplikations-Additions-Operation gemäß Anspruch 25 oder 26 ausgeführt wird, wobei der erste Operand den Multiplikator (A) entspricht, wobei der zweite Operand den Abschnitt (B2, B1 oder B0) des Multiplikanden (B) ist, wobei der dritte Operand C ein Zwischenergebnis einer zeitlich vorausgehenden sequentiellen Berechnung ist, und wobei der vierte Operand an der Anzahl von Stellen abgeleitet ist, die ein Abschnitt aufweist.
  28. Computer-Programm mit einem Programmcode zum Durchführen des Verfahrens gemäß Patentanspruch 25 oder 27, wenn das Computer-Programm auf einem Computer abläuft.
DE102006025569A 2005-10-28 2006-06-01 Vorrichtung und Verfahren zum Berechnen einer Multiplikations-Additions-Operation und zum Berechnen eines Ergebnisses einer modularen Multiplikation Withdrawn DE102006025569A1 (de)

Priority Applications (2)

Application Number Priority Date Filing Date Title
DE102006025569A DE102006025569A1 (de) 2005-10-28 2006-06-01 Vorrichtung und Verfahren zum Berechnen einer Multiplikations-Additions-Operation und zum Berechnen eines Ergebnisses einer modularen Multiplikation
US11/554,174 US8417760B2 (en) 2005-10-28 2006-10-30 Device and method for calculating a multiplication addition operation and for calculating a result of a modular multiplication

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
DE102005051772 2005-10-28
DE102005051772.2 2005-10-28
DE102006025569A DE102006025569A1 (de) 2005-10-28 2006-06-01 Vorrichtung und Verfahren zum Berechnen einer Multiplikations-Additions-Operation und zum Berechnen eines Ergebnisses einer modularen Multiplikation

Publications (1)

Publication Number Publication Date
DE102006025569A1 true DE102006025569A1 (de) 2007-05-03

Family

ID=37912948

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102006025569A Withdrawn DE102006025569A1 (de) 2005-10-28 2006-06-01 Vorrichtung und Verfahren zum Berechnen einer Multiplikations-Additions-Operation und zum Berechnen eines Ergebnisses einer modularen Multiplikation

Country Status (2)

Country Link
US (1) US8417760B2 (de)
DE (1) DE102006025569A1 (de)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2011007820A (ja) * 2007-09-14 2011-01-13 Hitachi Ltd 剰余乗算処理装置
US20100088526A1 (en) * 2008-10-02 2010-04-08 Mcm Portfolio Llc System and Method for Modular Exponentiation
DE102017117899A1 (de) * 2017-08-07 2019-02-07 Infineon Technologies Ag Durchführen einer kryptografischen Operation
CN109710308B (zh) * 2017-10-25 2023-03-31 阿里巴巴集团控股有限公司 任务的处理方法、装置和系统
US10505712B2 (en) * 2017-11-30 2019-12-10 Stmicroelectronics S.R.L. Protection of a modular reduction calculation
JP6926042B2 (ja) * 2018-09-19 2021-08-25 株式会社東芝 鍵生成装置、鍵生成方法及びプログラム
CN110399117B (zh) * 2019-07-31 2021-05-28 上海燧原智能科技有限公司 一种混合乘法加法处理方法及装置
RU2739338C1 (ru) * 2020-05-15 2020-12-23 федеральное государственное автономное образовательное учреждение высшего образования "Северо-Кавказский федеральный университет" Вычислительное устройство

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4281391A (en) * 1979-01-15 1981-07-28 Leland Stanford Junior University Number theoretic processor
ATE55033T1 (de) * 1986-03-05 1990-08-15 Holger Sedlak Kryptographie-verfahren und kryptographieprozessor zur durchfuehrung des verfahrens.
DE3631992A1 (de) 1986-03-05 1987-11-05 Holger Sedlak Kryptographie-verfahren und kryptographie-prozessor zur durchfuehrung des verfahrens
CA2008774C (en) * 1989-01-30 1999-10-05 Hikaru Morita Modular multiplication method and the system for processing data
ES2293677T3 (es) * 1997-05-04 2008-03-16 Sandisk Il Ltd Aparato y metodo mejorados para la multiplicacion y exponenciacion modulares basadas en la multiplicacion de montgomery.
US6182104B1 (en) * 1998-07-22 2001-01-30 Motorola, Inc. Circuit and method of modulo multiplication
DE10205713C1 (de) * 2002-02-12 2003-08-07 Infineon Technologies Ag Vorrichtung und Verfahren zum Berechnen eines Ergebnisses aus einer Division
DE10219161A1 (de) 2002-04-29 2003-11-20 Infineon Technologies Ag Vorrichtung und Verfahren zum Umrechnen eines Terms
DE10219158B4 (de) 2002-04-29 2004-12-09 Infineon Technologies Ag Vorrichtung und Verfahren zum Berechnen eines Ergebnisses einer modularen Multiplikation
DE10219164B4 (de) 2002-04-29 2004-12-02 Infineon Technologies Ag Vorrichtung und Verfahren zum Berechnen eines ganzzahligen Quotienten
US7558817B2 (en) * 2002-04-29 2009-07-07 Infineon Technologies Ag Apparatus and method for calculating a result of a modular multiplication
DE10260660B3 (de) 2002-12-23 2004-06-09 Infineon Technologies Ag Modulare Multiplikation mit paralleler Berechnung der Look-Ahead-Parameter u.a. bei der kryptographischen Berechnung
DE10260655B3 (de) 2002-12-23 2004-06-24 Infineon Technologies Ag Vorrichtung und Verfahren zum Berechnen einer Multiplikation mit einer Verschiebung des Multiplikanden, insbesondere bei der kryptographischen Berechnung
US7185039B2 (en) * 2003-05-19 2007-02-27 Lsi Logic Corporation Multiplier for modular exponentiation
GB0317570D0 (en) 2003-07-26 2003-08-27 Koninkl Philips Electronics Nv Long-integer multiplier
DE10341803A1 (de) 2003-09-10 2005-04-21 Giesecke & Devrient Gmbh Modulare Multiplikation

Also Published As

Publication number Publication date
US20070100926A1 (en) 2007-05-03
US8417760B2 (en) 2013-04-09

Similar Documents

Publication Publication Date Title
DE102006025673B4 (de) Rechenwerk zum Reduzieren einer Eingabe-Zahl bezüglich eines Moduls
DE69838390T2 (de) Verbessertes gerät und verfahren für modulare multiplikation und exponentation basierend auf montgomerymultiplikation
DE102006025569A1 (de) Vorrichtung und Verfahren zum Berechnen einer Multiplikations-Additions-Operation und zum Berechnen eines Ergebnisses einer modularen Multiplikation
DE69826963T2 (de) Gerät für die modulare Inversion zur Sicherung von Information
DE10107376A1 (de) Verfahren und Vorrichtung zum modularen Multiplizieren und Rechenwerk zum modularen Multiplizieren
EP2771782B1 (de) Effiziente primzahlprüfung
DE102006025713B9 (de) Kryptographie-Vorrichtung und Kryptographie-Verfahren zum Berechnen eines Ergebnisses einer modularen Multiplikation
DE102006025677B4 (de) Vorrichtung und Verfahren zum Berechnen eines Ergebnisses einer Summe mit einem Rechenwerk mit begrenzter Wortlänge
DE10219158B4 (de) Vorrichtung und Verfahren zum Berechnen eines Ergebnisses einer modularen Multiplikation
DE10357661B4 (de) Modularer Montgomery-Multiplizierer und zugehöriges Multiplikationsverfahren
EP2641241B1 (de) Verfahren zur langzahldivision oder modulare reduktion
EP1428112B1 (de) Verfahren und vorrichtung zum berechnen eines ergebnisses einer exponentiation
EP1999571B1 (de) Verfahren und vorrichtung zur reduktion eines polynoms in einem binären finiten feld, insbesondere im rahmen einer kryptographischen anwendung
DE10219164B4 (de) Vorrichtung und Verfahren zum Berechnen eines ganzzahligen Quotienten
EP1515226B1 (de) Modulare Multiplikation
EP1504337B1 (de) Berechnung des modularen inversen eines wertes
DE602004006126T2 (de) Verbesserte inversionsberechnungen
DE10156708A1 (de) Verfahren und Vorrichtung zum Multiplizieren und Verfahren und Vorrichtung zum Addieren auf einer elliptischen Kurve
DE102022201745A1 (de) Schnelle vorberechnung für montgomery- multiplikator
DE102011100390A1 (de) Beschleunigte kryptographische Berechnung, insbesondere ECC-Berechnung, in Prozessor mit Montgomery-Koprozessor
EP1536320B1 (de) Montgomery-Multiplikation mit vergrösserter Operandenlänge
EP2455852B1 (de) Verfahren zur Langzahldivision
DE102016115609A1 (de) Modul und Verfahren zur abgesicherten Berechnung von mathematischen Operationen

Legal Events

Date Code Title Description
OP8 Request for examination as to paragraph 44 patent law
R016 Response to examination communication
R016 Response to examination communication
R016 Response to examination communication
R119 Application deemed withdrawn, or ip right lapsed, due to non-payment of renewal fee