-
Die vorliegende Offenbarung bezieht sich auf Kryptographieverarbeitungsvorrichtungen und -verfahren zum kryptographischen Verarbeiten von Daten.
-
Bei der kryptographischen Verarbeitung von Daten wie z. B. Berechnung einer Signatur, Verschlüsselung oder Entschlüsselung von Daten sind die Multiplikation und Addition großer Ganzzahlen typische Operationen, die sehr häufig ausgeführt werden müssen. Das ist insbesondere bei asymmetrischer Kryptographie basierend auf ECC (Elliptische-Kurven-Kryptographie) oder RSA (Rivest, Shamir, Adleman) der Fall. Deshalb definiert insbesondere die Multiplikation mit ihrer quadratischen Komplexität normalerweise den größten Teil der Laufzeit der kryptographischen Verarbeitung von Daten. Dementsprechend sind Herangehensweisen zum Optimieren der Multiplikation großer Ganzzahlen für die kryptographische Verarbeitungsleistung wünschenswert.
-
Gemäß verschiedenen Ausführungsformen wird eine Kryptographieverarbeitungsvorrichtung bereitgestellt, die einen Speicher, der konfiguriert ist, einen ersten Operanden und einen zweiten Operanden, die durch Daten, die kryptographisch verarbeitet werden sollen, repräsentiert sind, zu speichern, wobei der erste Operand und der zweite Operand jeweils einem indexierten Array von Datenwörtern entsprechen, und einen Kryptographieprozessor, der konfiguriert ist, zur kryptographischen Verarbeitung der Daten das Produkt des ersten Operanden mit dem zweiten Operanden durch Akkumulieren der Ergebnisse partieller Multiplikationen zu bestimmen, enthält, wobei jede partielle Multiplikation die Multiplikation eines Datenworts des ersten Operanden mit einem Datenwort des zweiten Operanden enthält, wobei der Kryptographieprozessor konfiguriert ist, die partiellen Multiplikationen in aufeinanderfolgenden Blöcken partieller Multiplikationen auszuführen, wobei jeder Block einem Ergebnisindexbereich und einem ersten Operandenindexbereich zugeordnet ist und jeder Block alle partiellen Multiplikationen zwischen Datenwörtern des ersten Operanden innerhalb des ersten Operandenindexbereichs mit Datenwörtern des zweiten Operanden enthält, so dass die Summe von Indizes des Datenworts des ersten Operanden und des Datenworts des zweiten Operanden innerhalb des Ergebnisindexbereichs ist.
-
Gemäß einer weiteren Ausführungsform ist ein Verfahren zum kryptographischen Verarbeiten von Daten gemäß der vorstehenden Kryptographieverarbeitungsvorrichtung bereitgestellt.
-
In den Zeichnungen beziehen sich gleiche Bezugszeichen durchgehend durch die unterschiedlichen Ansichten allgemein auf die gleichen Teile. Die Zeichnungen sind nicht notwendigerweise maßstabsgerecht, vielmehr ist das Darstellen der Prinzipien der Erfindung im Allgemeinen hervorgehoben. In der folgenden Beschreibung sind verschiedene Aspekte mit Bezug auf die folgenden Zeichnungen beschrieben; es zeigen:
- 1 ein Beispiel einer Datenverarbeitungsvorrichtung;
- 2 vier Diagramme, wovon jedes eine Herangehensweise zur Multiplikation von zwei Operanden darstellt;
- 3 ein Diagramm, das ein Multiplikationsverfahren gemäß einer Ausführungsform darstellt;
- 4 ein Diagramm, das ein Beispiel zur Handhabung einer Multiplikation für einen Spezialfall von Parametern darstellt;
- 5 ein Diagramm, das ein Beispiel für eine Schleifenimplementierung darstellt;
- 6 eine Kryptographieverarbeitungsvorrichtung gemäß einer Ausführungsform; und
- 7 ein Ablaufdiagramm, das ein Verfahren zum kryptographischen Verarbeiten von Daten einer Nachricht gemäß einer Ausführungsform darstellt.
-
Die folgende ausführliche Beschreibung bezieht sich auf die begleitenden Zeichnungen, die durch Darstellung spezifische Einzelheiten und Aspekte dieser Offenbarung, in denen die Erfindung praktiziert werden kann, zeigen. Andere Aspekte können genutzt werden, und strukturelle, logische und elektrische Änderungen können vorgenommen werden, ohne von dem Schutzbereich der Erfindung abzuweichen. Die verschiedenen Aspekte dieser Offenbarung sind nicht notwendigerweise gegenseitig ausschließend, da einige Aspekte dieser Offenbarung mit einem oder mehreren anderen Aspekten dieser Offenbarung kombiniert sein können, um neue Aspekte zu bilden.
-
1 zeigt ein Beispiel einer Datenverarbeitungsvorrichtung 100.
-
Die Datenverarbeitungsvorrichtung 100 kann ein Computer oder eine Steuerung oder eine Mikrosteuerung sein, z. B. ein einem Fahrzeug, z. B. eine ECU (elektronische Steuereinheit) in einem Auto. Sie kann auch eine integrierte Schaltung (IC) auf einer Chipkarte einer Smartcard sein wie z. B. einer Smartcard von irgendeinem Formfaktor, z. B. für einen Pass oder für ein SIM („Subscriber Identity Module“).
-
Die Datenverarbeitungsvorrichtung 100 weist eine integrierte Schaltung in der Form eines Chips 101 auf. Der Chip 101 kann ein Steuerungschip sein und einen Prozessor 102 und einen Speicher 103, z. B. einen RAM (Direktzugriffsspeicher) implementieren. Es wird darauf hingewiesen, dass der Prozessor 102 und der Speicher 103 auch auf separaten Chips implementiert sein können. Der Chip 101 kann beispielsweise auch ein RFID- (Hochfrequenzidentifikations-) Chip sein oder ein SIM („Subscriber Identity Module“) für ein Mobiltelefon implementieren. Der Chip 101 kann für eine Sicherheitsanwendung vorgesehen sein, d. h. er kann ein Sicherheitschip sein. Beispielsweise speichert der Speicher 103 Daten, die für eine kryptographische Operation verwendet werden, z. B. um einen Anwender zu authentifizieren oder um Daten zu verschlüsseln/entschlüsseln oder zu signieren, beispielsweise gemäß einem asymmetrischen Kryptographieschema.
-
Asymmetrische Kryptographie basierend auf ECC (Elliptische-Kurven-Kryptographie) oder RSA (Rivest, Shamir, Adleman) erfordert die Addition und Multiplikation langer Ganzzahlen (typischerweise mit einer Länge von 256 Bits bis 4096 Bits). Beispielsweise erfordert das auch der Isogenie-basierte Post-Quantum-Algorithmus SIKE. Insbesondere die Multiplikation, mit ihrer quadratischen Komplexität, definiert gewöhnlich den größten Teil der Laufzeit dieser Anwendungen. Um diese Algorithmen auf einem Prozessor 102 (oder Coprozessor) effizient zu berechnen, können die langen Ganzzahlen in Wörter von 32 Bit oder 64 Bit Länge aufgeteilt werden. Eine Hardware-Implementierung kann einer ähnlichen Herangehensweise folgen.
-
Im Folgenden sind Beispiele beschrieben, in denen zwei Operanden A und B, die in den Arrays 104, 105 in dem Speicher 103 als A[] und B[] gespeichert sind, verarbeitet werden, d. h. multipliziert werden. Beide Operanden sind n-Wörter groß (d. h. sind Vektoren aus n Wörtern). Das Produkt C[] = A[] * B[] ist als 2n-Wort großes Array 106 gespeichert.
-
Der Prozessor 102 enthält eine Registermenge 107, in der er Daten, mit denen er arbeitet, speichert, z. B. ein oder mehrere Register 108 zum Speichern von Daten (z. B. eines oder mehrerer Wörter) von A, ein oder mehrere Register 109 zum Speichern von Daten (z. B. eines oder mehrerer Wörter) von B und ein oder mehrere Ergebnisregister (z. B. Akkumulatoren) 110 zum Speichern und Akkumulieren von Ergebnissen der partiellen Multiplikationen.
-
2 zeigt vier Diagramme 201, 202, 203, 204, von denen jedes eine Herangehensweise zur Multiplikation von zwei Operanden darstellt.
-
Die Diagramme 201 bis 204 stellen die Herangehensweisen für die Multiplikation für n = 8 dar. Jeder Punkt in den Diagrammen 201 bis 204 repräsentiert eine Multiplikation von Wörtern der Operanden A und B. Pfeile geben die Reihenfolge an, in denen der Prozessor 102 die partiellen Multiplikationen eine nach der anderen ausführt.
-
Das erste Diagramm 201 stellt das Operandenabtast- oder Lehrbuch-Multiplikationsverfahren dar. Gemäß dieser Herangehensweise für die Multiplikation lädt der Prozessor 102 ein Operandenwort A[i] (in die Registermenge 107, z. B. ein Register 108) und multipliziert A[i] mit allen B[j] (die nacheinander in ein Register 109 geladen werden), bevor er zu dem nächsten Operanden A[i+1] weiter geht. Das resultierende Produkt (für jedes A[i]) wird zu dem Zwischenprodukt C[] im Speicher 103 addiert.
-
Das zweite Diagramm 202 stellt Produktabtast- oder spaltenweises Multiplikationsverfahren dar. Gemäß dieser Herangehensweise für die Multiplikation werden alle A[i] mit B[j] multipliziert, wobei die Summe von i+j konstant gehalten wird. Nach dem Aufsummieren aller Zwischenprodukte (für konstante i+j, z. B. in einem Akkumulator 110) wird das resultierende C[i+j] zurück in den Speicher 103 gespeichert. Dann wird die nächste Spalte i+j+1 verarbeitet.
-
Das dritte Diagramm 203 stellt das Hybrid-Multiplikationsverfahren dar, das so gesehen werden kann, dass es das Operandenabtastverfahren und das Produktabtastverfahren kombiniert. Global führt es Produktabtasten aus. Lokal führt es Operandenabtasten aus. Während das Produktabtasten die Anzahl notwendiger Ladeanweisungen (d. h. Ladevorgänge in die Registermenge 107 aus dem Speicher 103) reduziert, wird das lokale Operandenabtasten auf den lokalen Registern 107 des Prozessors 102 ausgeführt. Die Registermenge 107 speichert einen 2d+2 Wörter großen Akkumulator und einen Operanden der Größe d. Der andere Operand kann in die Registermenge 107 geladen und iterativ verarbeitet werden.
-
Das vierte Diagramm 204 stellt das Operanden-Caching-Multiplikationsverfahren dar. Dieses Verfahren führt lokal Produktabtasten und global Operandenabtasten aus. Es tauscht zusätzliche Lade/Speichern- (LD/ST-) Anweisungen gegen die effizientere Verwendung der lokalen Registergruppe 107 ein. Nur 3 Wörter werden für den Akkumulator 110 benötigt, und 2e Wörter werden benötigt, um die verarbeiteten Operanden zwischenzuspeichern (wobei e ein Entwurfsparameter ist).
-
Die in 2 dargestellten Verfahren wurden entworfen, um eine verfügbare Registermenge 107 eines Prozessors 102 in Software effizient zu verwenden. In der Hardware ist ein ähnliches Problem vorhanden. Das Problem ist, die Anzahl von Speicherzugriffen mit Registern zu reduzieren und infolgedessen die beste Leistung zu erreichen, mit einer minimalen Anzahl hinzugefügter Register.
-
3 zeigt ein Diagramm 300, das ein Multiplikationsverfahren gemäß einer Ausführungsform darstellt.
-
Ähnlich dem Diagramm von 2 stellt das Diagramm 300 die Herangehensweisen für die Multiplikation für n = 8 dar, jeder Punkt 301 repräsentiert eine Multiplikation von Wörtern der Operanden A und B, und Pfeile geben die Reihenfolge an, in der partielle Multiplikationen eine nach der anderen ausgeführt werden.
-
In der Form in der zweidimensionalen Repräsentation der gesamten Multiplikation von 3 entspricht jede „Zeile“ 302 (von oben rechts nach unten links) einem A[i], jede „Diagonale“ 304 entspricht einem B[j], und jede „Spalte“ 304 entspricht einem C[i+j].
-
Das Multiplikationsverfahren von 3 ist als Parallel-Produktabtasten bezeichnet. Das Parallel-Produktabtasten führt globales Produktabtasten und lokales Operandenabtasten aus. In der lokalen Registerdatei 107 hält es 2+f Akkumulatorregister 110 und f Operandenregister 108, 109. Es ist angenommen, dass jedes Operandenregister 108, 109 und jedes Akkumulatorregister 110 ein Wort speichert.
-
Aus einem verarbeiteten Operanden A[i] bis A[i+1] können f-1 lokale Register des Operanden B[] wiederverwendet werden (und müssen nicht erneut aus dem Speicher 103 geholt werden).
-
In 3 sind Blöcke von Wortmultiplikationen 301 drei unterschiedlicher Basistypen gezeigt: die Blocktypen 1 (mit Varianten 1a und 1b), 2 und 3. Der Blocktyp 1a tritt zweimal auf (eine große und eine kleine Version), und der Blocktyp 2 tritt zweimal auf. Die anderen Blocktypen treten nur einmal auf. Es wird darauf hingewiesen, dass 3 ein einfaches Beispiel mit n=8 ist. Für größere n können die verschiedenen Blocktypen häufiger auftreten.
-
Es wird darauf hingewiesen, dass die Blöcke, von links nach rechts, Blockspalten
bilden. Blockspalten sind im Fall höherer Dimensionen ähnlich gebildet.
-
Die Blocktypen unterscheiden sich in ihrer Form der zweidimensionalen Repräsentation der gesamten Multiplikation von 3. Dementsprechend können in einer Implementierung von Parallel-Produktabtasten gemäß einer Ausführungsform basierend auf den Blöcken die ausgeführten Operationen für unterschiedliche Blöcke unterschiedlich sein.
-
Die Blöcke mit dem größten Einfluss auf die Leistung sind die Blöcke 1a und 1b. Sie weisen in dem Beispiel von 3 eine Breite von f= 4 Spalten auf.
-
Für jede der f Spalten wird ein A[i] (der aktuellen Zeile 302) mit dem lokalen B[j] (der aktuellen Diagonale 303) multipliziert und zu dem lokalen Akkumulator 110 (für die aktuelle Spalte 304) addiert. Mit anderen Worten werden die Ergebnisse partieller Multiplikationen unter Berücksichtigung der Indizes der Datenwörter des Operanden akkumuliert. Das bedeutet, dass A[i] * B[j] für alle Paare aus i, j, wobei i + j konstant ist, für das Ergebnisdatenwort C[i+j] akkumuliert werden müssen. Falls der Maximalwert des Datenworts C[i+j] überschritten wird, wird der überschreitende Betrag zu den nächsten Datenwörtern C[i+j+1] und (möglicherweise) C[i+j+2] übertragen.
-
Gemäß einer Ausführungsform verarbeitet der Prozessor 102 die Blöcke von rechts nach links und von unten nach oben, d. h. den (kleinen) Block 1a, den (rechten) Block 2, den (großen) Block 1a, den (linken) Block 2, den Block 3, den Block 1b, den Block 4. Der Prozessor 102 verarbeitet jeden der Blöcke zeilenweise von unten nach oben. Von einer Zeile 302 zu der nächsten können f-1 Wörter von B[] wiederverwendet werden. Siehe beispielsweise den (großen) Block 1a: in der untersten Zeile kann das B am weitesten links (das B[7] ist) nicht für die Zeile darüber wiederverwendet werden, während das für die anderen (B[6], B[5], B[4]) möglich ist. B[3] muss geladen werden. Mit anderen Worten wird B[7] durch B[3] ersetzt.
-
Der Unterschied zwischen den Blöcken 1a und 1b ist, dass der Prozessor, während er das Verarbeiten von Block 1b mit bereits zwischengespeicherten (d. h. geladenen) Wörtern von B[] starten kann, er das Verarbeiten der Blöcke 1a mit Laden aller notwendigen Wörter von B[] starten muss. Der Prozessor 102 beendet wiederum das Verarbeiten von Block 1b durch Speichern der akkumulierten Multiplikationen in C[] in dem Speicher 103 in dem Ergebnis-Array 106.
-
Bei dem Verarbeiten der Blöcke 2 speichert der Prozessor 102 die akkumulierten Register in das Ziel-Speicher-Array für C[] 106. Wenn der Prozessor die Blöcke 2 verarbeitet, führt er immer noch lokales Operandenabtasten aus und verarbeitet nur kürzere Zeilen (z. B. im Vergleich zu Block 1a). Da alle notwendigen Wörter von B[] bereits aus dem entsprechenden vorhergehenden Block 1a verfügbar sind, muss er keine weiteren Wörter von B[] holen. Nur zusätzliche Wörter von A[] müssen geholt werden. Am Ende sind nur zwei Akkumulatorregister 110 übrig, d. h. noch zugewiesen, und zwar diejenigen, die die zwei höchstwertigen Wörter des Ergebnisses der Verarbeitung von Block 2 speichern. Diese beiden werden zu der folgenden Blockspalte (als die zwei niedrigstwertigen Akkumulatorwörter) weitergeleitet (übertragen).
Am Beginn von Block 3 sind nur die zwei Akkumulatorregister 110, die die übertragenen Wörter speichern, zugewiesen. An diesem Punkt sind, gemäß einer Ausführungsform, ausreichende Register verfügbar, um alle A[i] und B[j], die in Block 3 benötigt werden, zu laden. Sobald der Prozessor 102 eine Zeile mit einem A[i] verarbeitet hat, kann er das Register 108, das das A[i] speichert, einem neuen Zweck als ein zusätzliches Akkumulatorregister 110 zuführen. Von einer Zeile 302 zur nächsten nimmt der Akkumulator um ein Wortregister 110 zu, bis der Akkumulator schließlich f+2 Wörter erfordert, d. h. f+2 Akkumulatorregister 110 mit jeweils einem Wort enthält.
-
Im Folgenden sind mögliche Einzelheiten der Implementierung („Feinheiten“) beschrieben, die sowohl für Software- als auch für Hardware-Implementierungen angewandt werden können. Sie enthalten insbesondere Herangehensweisen zum effizienten Verarbeiten einer einzelnen Zeile.
-
Reduzieren der notwendigen Additionen
-
Während die Repräsentation von 3 so gesehen werden kann, dass sie inkrementelles Verarbeiten des lokalen B[i] vorschlägt, ist es typischerweise effizienter, die geradzahligen und ungeradzahligen B[i] separat zu iterieren. Auf diese Weise kann die Anzahl notwendiger ADC- (Addieren mit Übertrag) Operationen reduziert werden.
-
Der folgende Beispielcode (modifizierter ARM-Code zur besseren Lesbarkeit) ist für f=4. B[j+1...j+3] werden aus der vorhergehenden Zeile wiederverwendet. B[j...j+2] werden in der nachfolgenden Zeile wiederverwendet.
-
-
Verwenden eines zweiten Acc(f)-Registers
-
Wenn die geradzahligen und ungeradzahligen Operanden B[j] separat verarbeitet werden, gibt es einen Punkt, an dem der Übertrag über zwei Register weitergegeben werden muss. Dadurch, dass man zwei zusätzliche Register diesen Übertrag separat akkumulieren lässt, kann die Anzahl der Additionen reduziert werden. Nur am Ende einer Spalte müssen die besonders akkumulierten Übertragbits zu dem anderen Akkumulatorregister addiert werden.
-
Separates Laden von A[i] und B[j]
-
Das vorstehende Codebeispiel lädt A[i] und B[j] nacheinander. Dann werden f Register benötigt, um den Operanden B[j..j+f-1] zu speichern, und ein Register wird benötigt, um A[i] zu speichern; insgesamt f+1. Es ist jedoch möglich, durch separates Laden von A[i] und B[j] die Anzahl notwendiger Register auf f Register zu reduzieren. Zuerst wird A[i] geladen und multiplizierend akkumuliert mit B[j+1], B[j+3], ..., B[j+f-1]. An diesem Punkt kann das Register B[j+f-1] wiederverwendet werden, um das zu ladende B[j] zu halten. Erst dann wird A[i] mit B[j], B[j+2], ... , B[j+f-2] kombiniert. Das spart ein Register ein. Es wird darauf hingewiesen, dass das Einsparen von zwei Registern bedeutet, dass der Parameter f um eins erhöht werden kann (wenn angenommen wird, dass eine feste Anzahl von Registern in der Registermenge 102 ist).
-
Das folgende Beispiel lädt A[i] und B[j] separat und verwendet ein zweites Acc4X-Register zum Akkumulieren der Überträge. Acc4X muss am Ende der verarbeiteten Spalte zu (Acc5, Acc4) addiert werden.
-
-
Behandlung des Falls von n mod f ≠0
-
Das Parallel-Produktabtasten kann auch angepasst werden, um den Fall von n mod f ≠ 0 zu behandeln.
-
4 zeigt ein Diagramm 400, das ein Beispiel dafür darstellt, wie dieser Fall effizient behandelt werden kann. Die mittlere Blockspalte 401 kann als Spalte gesehen werden, die (unten) mit einer modifizierten Version von Block 3 startet, einen Block 1 in der Mitte aufweist und (oben) mit einer modifizierten Version von Block 2 endet.
-
Durchlaufen einer Schleife für Produktabtasten
-
Für eine höhere Leistung kann die gesamte mehrfach genaue Multiplikation entrollt werden. Das kann jedoch nur bis zu einer speziellen Größe des Codes sinnvoll sein. Spezielle Systeme mit Anweisungs-Caches können mit einer Schleifen-Implementierung tatsächlich schneller sein, da weniger Code aus dem Speicher geholt werden muss.
-
Für eine vollständige Schleifen-Implementierung iteriert die äußere Schleife durch alle Blockspalten. Die innere Schleife führt die entrollten Blöcke 2 und 3 und eine Schleifen-Version von Block 1 aus. Der Block 1 wird in Teilblöcke der Größe f aufgeteilt, die f Zeilen behandeln. Nach f Zeilen kann sichergestellt sein, dass die Cache-Register B[j] wieder die gleiche logische Reihenfolge aufweisen.
-
5 zeigt ein Diagramm 500, das ein Beispiel für eine Schleifen-Implementierung mit n=16 und f=4 darstellt.
-
Wie zu sehen ist, enthält es die Blöcke 501 vom Typ 1, die Blöcke 502 vom Typ 2 und die Blöcke 503 vom Typ 3, ähnlich dem Beispiel von 3, jedoch in größerer Anzahl.
-
Freimachen lokaler Register
-
Drei Zeigerregister sind notwendig um die Arrays A[], B[], C[] im Speicher 103 zu adressieren (typischerweise ihre Startadressen). Durch die Annahme, dass die Operanden-Arrays in Beziehung zu dem Stack-Zeiger gespeichert sind, können die entsprechenden Zeigerregister einem neuen Zweck zugeführt werden, um den Entwurfsparameter f zu erhöhen. Ein größerer Entwurfsparameter reduziert wiederum die Anzahl notwendiger Speicherzugriffe und Additionen. Für die erreichte Leistung kann es auch zulässig sein, A[] und B[] am Beginn der Multiplikation in den Stack und das gestackte C[] am Ende der mehrfach genauen Multiplikation zurück in seinen Zielspeicher 106 zu kopieren. Insbesondere in eingebetteten Prozessoren von ARM kann dieses Feinheit der Implementierung einen Unterschied ausmachen, um die Leistung zu verbessern.
-
Wiederverwendung von Operanden zwischen verarbeiteten Mengen von Spalten
-
Zur Vereinfachung der Implementierung können die Blockspalten nur von oben nach unten oder von unten nach oben verarbeitet werden. Durch Verändern der Reihenfolge ist es jedoch möglich, die verbleibenden Operanden von einer Spalte zur nächsten wiederzuverwenden. Diese Form von Produktabtasten kann als „Zickzack“ bezeichnet sein.
-
Es wird darauf hingewiesen, dass sowohl das Hybridabtasten als auch das Parallel-Produktabtasten so gesehen werden können, dass sie global eine Variante des Produktabtastens ausführen. Der Unterschied zwischen den zwei Herangehensweisen für Abtasten ist lokal: das Hybridverfahren teilt die Multiplikation in diamantartige Formen auf (siehe das dritte Diagramm 203 von 2) und benötigt einen 2d+2 (Wort) großen Akkumulator. Das Parallel-Produktabtasten kann so gesehen werden, dass es viele Spalten parallel verarbeitet. Es reduziert dadurch den notwendigen Akkumulator auf f+2 Wörter.
-
Ähnlich zum Operanden-Zwischenspeichern verwendet das Parallel-Produktabtasten die Registerdatei 107 als Cache von Operanden von einer Iteration (Zeile) zur nächsten. Wie vorstehend erläutert können f-1 Wörter des Operanden B[] von Zeile zu Zeile wiederverwendet werden. Das Operanden-Zwischenspeichern (siehe viertes Diagramm 204 von 2) kann so gesehen werden, dass es global eine Herangehensweise ähnlich dem Operandenabtasten ausführt. Das Parallel-Produktabtasten kann so gesehen werden, dass es global eine dem Produktabtasten ähnliche Herangehensweise ausführt. Deshalb beseitigt es die zusätzliche Lade/Speicher-Operation, die von einer Zeile von Operanden zur nächsten erforderlich ist.
-
Tabelle 1 gibt einen Vergleich der Komplexität für die unterschiedlichen Multiplikationsverfahren. In Bezug auf die notwendigen Speicherzugriffe ist es knapp zwischen dem Hybrid- und dem Operanden-Caching-Multiplikationsverfahren. Das Hybridverfahren benötigt ~2n
2/d Speicherzugriffe unter Verwendung von ~3d Registern. Das Operanden-Zwischenspeicher-Verfahren benötigt mehr Speicherzugriffe (~3n
2/e), benötigt jedoch weniger Register (~2e).
Tabelle 1
| Ladeanweisungen | Speicheranweisungen | Speicherzugriffe | benötigte Register (#regs) | Speicherzugriffe pro Register |
Operandenabtasten | 2n2+n | n2+n | 3n2+2n | | |
Produktabtasten | 2n2 | 2n | 2n2+2n | | |
Hybrid | 2[n2/d] | 2n | 2[n2/d] + 2n | 3d+2 | ~6n2/#regs |
Operanden-Zwischenspeicher n | 2n2/e | n2/e+n | 3n2/e+n | 2e+3 | ~6n2/#regs |
Parallel-Produktabtasten | 2n(n-I)/f+2n | 2n | 2n2/f+4n-2n/f | 2f+2 | ~4n2/#regs |
-
Das Verfahren mit Parallel-Produktabtasten kann so gesehen werden, dass es die Vorteile sowohl der Hybrid- als auch der Operanden-Zwischenspeicher-Multiplikation vereinigt. Es benötigt nur 2n2/f Speicherzugriffe und benötigt nur ~2f lokale Register. Das ist sogar noch offensichtlicher, wenn die Anzahl von Speicherzugriffen pro verwendeten Register verglichen wird. Während das Hybrid und Operanden-Zwischenspeichern ~6n2/#regs Speicherzugriffe benötigen, erfordert das Parallel-Produktabtasten nur ~4n2/#regs Register (wobei #regs die Anzahl verfügbarer Register in der Registermenge ist).
-
Obwohl die Speicheroperationen normalerweise mit großen Leistungseinbußen einhergehen, kann auch die Anzahl notwendiger Additionen einen Unterschied ausmachen. Beispielsweise kann in Baugruppenimplementierungen, die das Hybridverfahren ausführen, ein Schwerpunkt auf dem Reduzieren der Anzahl von Additionen liegen, um die Multiplikationsleistung zu verbessern.
-
Sowohl das Produktabtasten als auch das Operanden-Zwischenspeichern erfordern ungefähr 3n2 Additionen (drei Additionen pro Multiplizieren-Akkumulieren). Hier besitzen das Hybrid und das Parallel-Produktabtasten einen Vorteil. Je größer die Akkumulatoren sind (2*d+2 bei Hybrid, f+2 bei Parallel-Produktabtasten), desto näher ist die Leistung an dem theoretischen Minimum von 2n2 Additionen. Das Parallel-Produktabtasten erfordert (2+2/f)n2 Additionen.
-
Das Parallel-Produktabtasten kann sowohl in Software als auch in Hardware angewandt werden. Parallel-Produktabtasten in Software ermöglicht eine effiziente Verwendung der verfügbaren Registermenge 107 und mit einer geringen Anzahl notwendiger Lade-, Speicher- und Additionsoperationen. Gemäß einer Ausführungsform ist Parallel-Produktabtasten auf einer RISC-CPU („Reduced Instruction Set Computer Central Processing Unit“) implementiert.
-
In Hardware kann Parallel-Produktabtasten angewandt werden, um die Anzahl notwendiger Ladeoperationen durch Hinzufügen einer begrenzten Menge lokaler Register zu minimieren.
-
Zusammengefasst ist gemäß verschiedenen Ausführungsformen eine Kryptographieverarbeitungsvorrichtung wie in 6 dargestellt bereitgestellt.
-
6 zeigt eine Kryptographieverarbeitungsvorrichtung 600 gemäß einer Ausführungsform.
-
Die Kryptographieverarbeitungsvorrichtung 600 enthält einen Speicher 601, der konfiguriert ist, einen ersten Operanden und einen zweiten Operanden, die durch Daten repräsentiert sind, die kryptographisch verarbeitet werden sollen, zu speichern, wobei der erste Operand und der zweite Operand jeweils einem indexierten Array von Datenwörtern entsprechen.
-
Ferner enthält die Kryptographieverarbeitungsvorrichtung 600 einen Kryptographieprozessor 602, der konfiguriert ist, zum kryptographischen Verarbeiten der Daten das Produkt des ersten Operanden mit dem zweiten Operand durch Akkumulieren der Ergebnisse partieller Multiplikationen zu bestimmen, wobei jede partielle Multiplikation die Multiplikation eines Datenworts des ersten Operanden mit einem Datenwort des zweiten Operand enthält.
-
Der Kryptographieprozessor 602 ist konfiguriert, die partiellen Multiplikationen in aufeinanderfolgenden Blöcken partieller Multiplikationen auszuführen, wobei jeder Block einem Ergebnisindexbereich und einem ersten Operandenindexbereich (der z. B. mehrere erste Operandenindizes enthält und beispielsweise einem Wertebereich des Index j des Operanden B in dem Beispiel von 3 entspricht) zugeordnet ist und jeder Block alle partiellen Multiplikationen zwischen Datenwörtern des ersten Operanden innerhalb des ersten Operandenindexbereichs mit Datenwörtern des zweiten Operanden enthält, so dass die Summe der Indizes des Datenworts des ersten Operanden und des Datenworts des zweiten Operanden innerhalb des Ergebnisindexbereichs ist.
-
Gemäß verschiedenen Ausführungsformen gruppiert, mit anderen Worten, der Kryptographieprozessor partielle Multiplikationen (d. h. Kombinationen eines Datenworts des ersten Operanden mit einem Datenwort des zweiten Operanden) in Gruppe (oder Blöcke), so dass, falls die Ziffern des ersten Operanden fortlaufend durch Indizes nummeriert sind und die Ziffern des zweiten Operanden fortlaufend durch Indizes nummeriert sind, die Gruppe Kombinationen von Ziffern des ersten Operanden mit Ziffern des zweiten Operanden enthält, so dass die Summe der Indizes der Ziffer des ersten Operanden und der Ziffer des zweiten Operanden innerhalb eines vorbestimmten ersten Bereichs (der Größe f in den vorstehend beschriebenen Beispielen) ist und die Indizes der Ziffern des ersten Operanden innerhalb eines vorbestimmten zweiten Bereichs (Höhe der Blöcke in den vorstehenden beschriebenen Beispielen, z. B. der Bereich des Index j von B[j] für einen Block in dem Beispiel von 3) sind.
-
Der Ergebnisindexbereich (oder erste Bereich) und der erste Operandenindexbereich (oder zweite Bereich) sind größer als 1. Beispielsweise ist der Ergebnisindexbereich 2 oder 4 wie in den vorstehenden Beispielen (oder eine andere Ganzzahl wie 5, 8 usw.). Der erste Operandenindexbereich hängt von dem Ort des Blocks in der zweidimensionalen Repräsentation ab und kann maximal so sein, dass der Block noch in das Raster der partiellen Multiplikationen, das durch die zweidimensionale Repräsentation dargestellt ist, passt.
-
Anschaulich sind, wenn eine zweidimensionale Repräsentation der partiellen Multiplikationen wie in den vorstehend beschriebenen Figuren (z. B. 3) dargestellt, berücksichtigt wird, die Gruppen Abschnitte von Blockspalten, die von einer ersten Zeile zu einer zweiten Zeile reichen. Die Breite der Blockspalten entspricht dem Ergebnisindexbereich, und die Höhe einer Gruppe entspricht dem ersten Operandenindexbereich.
-
Die Blöcke können insbesondere „Parallelogramm“-Blöcke wie z. B. die Blöcke 1a und 1b enthalten, d. h. Blöcke, für die die Anzahl von Datenwörtern des zweiten Operanden multipliziert mit jedem Datenwort des ersten Operanden konstant ist. Für einen solchen Block verarbeitet der Kryptographieprozessor den Block durch Vorangehen über die Datenwörter des ersten Operanden, wobei von Datenwort zu Datenwort des ersten Operanden alle Datenwörter außer einem des zweiten Operanden beibehalten werden und ein zusätzliches Datenwort des zweiten Operanden geladen wird (d. h. ein Datenwort ersetzt wird). Es wird darauf hingewiesen, dass außerdem von Block zu Block Operanden in Registern gehalten werden können.
-
Die Höhe der Parallelogrammblöcke (erster Operandenindexbereich) kann basierend auf dem vorbestimmten Ergebnisindexbereich maximal sein. Das bedeutet, dass dann, wenn die Blockbreite f gegeben ist, die Höhe des Blocks so groß wie möglich sein kann, so dass der resultierende Block immer noch eine Parallelogrammform aufweist.
-
Es wird darauf hingewiesen, dass die Datenwörter der Operanden und das Ergebnis als Ziffern gesehen werden können. Die Datenwörter können beispielsweise 16 Bit, 32 Bit oder 64 Bit enthalten, es sind jedoch auch andere Werte möglich. Die Operanden können Ganzzahlen sein, beispielsweise von einer Größe von 256 Bits bis 4096 Bits.
-
Die Kryptographieverarbeitungsvorrichtung oder wenigstens der Kryptographieprozessor kann ein sicheres Element sein, kann z. B. einem Hardware-Sicherheitsmodul (HSM) entsprechen oder ein Teil davon sein.
-
Die Kryptographieverarbeitungsvorrichtung kann wenigstens einen Teil der Daten, die kryptographisch verarbeitet werden sollen, über eine Kommunikationsnetzverbindung empfangen, die eine drahtgebundene oder drahtlose Kommunikationsverbindung enthält, z.B. eine Funkkommunikationsnetzverbindung wie z. B. eine RFID-Verbindung.
-
Die Kryptographieverarbeitungsvorrichtung kann beispielsweise der Datenverarbeitungsvorrichtung 100 von 1 entsprechen, die konfiguriert ist, (mehrfach genaue) Multiplikation mit Parallel-Produktabtasten auszuführen.
-
Gemäß verschiedenen Ausführungsformen führt eine Vorrichtung ein Verfahren aus wie in 7 dargestellt.
-
7 zeigt ein Ablaufdiagramm 700, das ein Verfahren zum kryptographischen Verarbeiten von Daten gemäß einer Ausführungsform darstellt.
-
In 701 speichert die Vorrichtung einen ersten Operanden und einen zweiten Operanden, die durch Daten repräsentiert sind, um kryptographisch verarbeitet zu werden, wobei der erste Operand und der zweite Operand jeweils einem indexierten Array von Datenwörtern entsprechen.
-
In 702 führt die Vorrichtung partielle Multiplikationen, wobei jede partielle Multiplikation die Multiplikation eines Datenworts des ersten Operanden mit einem Datenwort des zweiten Operanden entspricht, in aufeinanderfolgenden Blöcken partieller Multiplikationen aus, wobei jeder Block einem Ergebnisindexbereich und einem ersten Operandenindexbereich zugeordnet ist und jeder Block alle partiellen Multiplikationen zwischen Datenwörtern des ersten Operanden innerhalb des ersten Operandenindexbereichs mit Datenwörtern des zweiten Operanden enthält, so dass die Summe der Indizes des Datenworts des ersten Operanden und des Datenworts des zweiten Operanden innerhalb des Ergebnisindexbereichs ist.
-
In 703 bestimmt die Vorrichtung das Produkt des ersten Operanden mit dem zweiten Operanden durch Akkumulieren der Ergebnissee der partiellen Multiplikationen.
-
Verschiedene Beispiele sind im Folgenden beschrieben:
- Beispiel 1 ist eine Kryptographieverarbeitungsvorrichtung, wie sie in 6 dargestellt ist.
- Beispiel 2 ist die Kryptographieverarbeitungsvorrichtung nach Beispiel 1, wobei der Kryptographieprozessor konfiguriert ist, die partiellen Multiplikationen, die in dem Block enthalten sind, gemäß einer Sequenz der Datenwörter des ersten Operanden auszuführen.
- Beispiel 3 ist die Kryptographieverarbeitungsvorrichtung nach Beispiel 2, wobei das Ausführen der partiellen Multiplikationen gemäß der Sequenz von Datenwörtern des ersten Operanden das Ausführen, beginnend ab einem ersten Datenwort der Sequenz der Datenwörter des ersten Operanden, aller partiellen Multiplikationen für ein aktuelles Datenwort des ersten Operanden, die in dem Block enthalten sind, und dann Weitergehen zu dem nächsten Datenwort der Sequenz der Datenwörter des ersten Operanden enthält.
- Beispiel 4 ist die Kryptographieverarbeitungsvorrichtung nach Beispiel 3, wobei der Kryptographieprozessor konfiguriert ist, wenn er von einem aktuellen Datenwort der Sequenz von Datenwörtern des ersten Operanden zu einem nächsten Datenwort der Sequenz von Datenwörtern des ersten Operanden weiter geht, wenigstens alle Datenwörter außer einem des zweiten Operanden, die in Registern gespeichert sind, beizubehalten, um sie mit dem nächsten Datenwort der Sequenz von Datenwörtern des ersten Operanden zu multiplizieren.
- Beispiel 5 ist die Kryptographieverarbeitungsvorrichtung nach Beispiel 3 oder 4, wobei der Kryptographieprozessor konfiguriert ist, wenn er von einem aktuellen Datenwort der Sequenz von Datenwörtern des ersten Operanden zu einem nächsten Datenwort der Sequenz von Datenwörtern des ersten Operanden weiter geht, abhängig von den partiellen Multiplikationen, die in dem Block enthalten sind, alle Datenwörter des zweiten Operanden, die in Registern gespeichert sind, beizubehalten, um sie mit dem nächsten Datenwort der Sequenz von Datenwörtern des ersten Operanden zu multiplizieren, alle Datenwörter außer einem des zweiten Operanden, die in Registern gespeichert sind, beizubehalten, um sie mit dem nächsten Datenwort der Sequenz von Datenwörtern des ersten Operanden zu multiplizieren, ein zusätzliches Datenwort des zweiten Operanden aus dem Speicher zu laden oder ein Datenwort des zweiten Operanden, das in Registern gespeichert ist, durch ein weiteres Datenwort des zweiten Operanden, das in dem Speicher gespeichert ist, auszutauschen.
- Beispiel 6 ist die Kryptographieverarbeitungsvorrichtung nach einem der Beispiele 1 bis 5, wobei der Kryptographieprozessor konfiguriert ist, wenn er einen Block verarbeitet, aufeinanderfolgende Datenwörter des ersten Operanden in einem ersten Operandenregister zu speichern und für jedes Datenwort des ersten Operanden, das in dem ersten Operandenregister gespeichert ist, eine entsprechende Menge von Datenwörtern des zweiten Operanden in zweiten Operandenregistern zu speichern.
- Beispiel 7 ist die Kryptographieverarbeitungsvorrichtung nach einem der Beispiele 1 bis 6, wobei die Daten Daten, die verschlüsselt oder entschlüsselt werden sollen, einen kryptographischen Schlüssel, Daten für einen Austausch des kryptographischen Schlüssels und/oder eine kryptographische Signatur enthalten.
- Beispiel 8 ist die Kryptographieverarbeitungsvorrichtung nach einem der Beispiele 1 bis 7, wobei die Kryptographieverarbeitungsvorrichtung konfiguriert ist, den ersten Operanden und den zweiten Operanden aus den Daten, die kryptographisch verarbeitet werden sollen, abzuleiten.
- Beispiel 9 ist die Kryptographieverarbeitungsvorrichtung nach einem der Beispiele 1 bis 8, die ferner einen Eingang enthält, der konfiguriert ist, wenigstens einen Teil der Daten, die kryptographisch verarbeitet werden sollen, zu empfangen.
- Beispiel 10 ist die Kryptographieverarbeitungsvorrichtung nach Beispiel 9, wobei der Eingang konfiguriert ist, wenigstens einen Teil der Daten über eine Kommunikationsnetzverbindung zu empfangen.
- Beispiel 11 ist die Kryptographieverarbeitungsvorrichtung nach einem der Beispiele 1 bis 10, wobei der Kryptographieprozessor konfiguriert ist, das Produkt in dem Speicher entsprechend einem indexierten Ergebnis-Array von Datenwörtern zu speichern.
- Beispiel 12 ist die Kryptographieverarbeitungsvorrichtung nach einem der Beispiele 1 bis 11, wobei der Kryptographieprozessor konfiguriert ist, für einen Index des Ergebnis-Arrays die partiellen Multiplikationen eines Datenworts des ersten Operanden, das einen ersten Index aufweist, mit einem Datenwort des zweiten Operanden, das einen zweiten Index aufweist, zu akkumulieren, wobei die Summe aus dem ersten Index und dem zweiten Index der Index des Ergebnis-Arrays ist.
- Beispiel 13 ist die Kryptographieverarbeitungsvorrichtung nach einem der Beispiele 1 bis 12, wobei die partiellen Multiplikationen alle Kombinationen von Datenwörtern des ersten Operanden mit Datenwörtern des zweiten Operanden enthalten.
- Beispiel 14 ist ein Verfahren zum kryptographischen Verarbeiten von Daten wie in 7 dargestellt.
- Beispiel 15 ist das Verfahren nach Beispiel 14, das Ausführen der partiellen Multiplikationen, die in dem Block enthalten sind, gemäß einer Sequenz der Datenwörter des ersten Operand enthält.
- Beispiel 16 ist das Verfahren nach Beispiel 15, wobei das Ausführen der partiellen Multiplikationen gemäß der Sequenz der Datenwörter des ersten Operand das Ausführen, beginnend ab einem ersten Datenwort der Sequenz der Datenwörter des ersten Operanden, aller partiellen Multiplikationen für ein aktuelles Datenwort des ersten Operanden, die in dem Block enthalten sind, und dann Weitergehen zu dem nächsten Datenwort der Sequenz der Datenwörter des ersten Operanden enthält.
- Beispiel 17 ist das Verfahren nach Beispiel 16, das bei dem Weitergehen von einem aktuellen Datenwort der Sequenz von Datenwörtern des ersten Operanden zu einem nächsten Datenwort der Sequenz von Datenwörtern des ersten Operanden Beibehalten wenigstens aller Datenwörter außer einem des zweiten Operanden, die in Registern gespeichert sind, um sie mit dem nächsten Datenwort der Sequenz von Datenwörtern des ersten Operanden zu multiplizieren, enthält.
- Beispiel 18 ist das Verfahren nach Beispiel 16 oder 17, das bei dem Weitergehen von einem aktuellen Datenwort der Sequenz von Datenwörtern des ersten Operanden zu einem nächsten Datenwort der Sequenz von Datenwörtern des ersten Operanden, abhängig von den partiellen Multiplikationen, die in dem Block enthalten sind, Beibehalten aller Datenwörter des zweiten Operanden, die in Registern gespeichert sind, um sie mit dem nächsten Datenwort der Sequenz von Datenwörtern des ersten Operanden zu multiplizieren, Beibehalten aller Datenwörter außer einem des zweiten Operanden, die in Registern gespeichert sind, um sie mit dem nächsten Datenwort der Sequenz von Datenwörtern des ersten Operanden zu multiplizieren, Laden eines zusätzlichen Datenworts des zweiten Operanden aus dem Speicher oder Austauschen eines Datenworts des zweiten Operanden, das in Registern gespeichert ist, durch ein weiteres Datenwort des zweiten Operanden, das in dem Speicher gespeichert ist, enthält.
- Beispiel 19 ist das Verfahren nach einem der Beispiele 14 bis 18, das beim Verarbeiten eines Blocks Speichern aufeinanderfolgender Datenwörter des ersten Operanden in einem ersten Operandenregister und Speichern, für jedes Datenwort des ersten Operanden, das in dem ersten Operandenregister gespeichert ist, einer entsprechenden Menge von Datenwörtern des zweiten Operanden in zweiten Operandenregistern enthält.
- Beispiel 20 ist das Verfahren nach einem der Beispiele 14 bis 19, wobei die Daten Daten, die verschlüsselt oder entschlüsselt werden sollen, einen kryptographischen Schlüssel, Daten für einen Austausch des kryptographischen Schlüssels und/oder eine kryptographische Signatur enthalten.
- Beispiel 21 ist das Verfahren nach einem der Beispiele 14 bis 20, das Ableiten des ersten Operanden und des zweiten Operanden aus den Daten, die kryptographisch verarbeitet werden sollen, enthält.
- Beispiel 22 ist das Verfahren nach einem der Beispiele 14 bis 21, das ferner das Empfangen wenigstens eines Teils der Daten, die kryptographisch verarbeitet werden sollen, enthält.
- Beispiel 23 ist das Verfahren nach Beispiel 22, das Empfangen wenigstens eines Teils der Daten über eine Kommunikationsnetzverbindung enthält.
- Beispiel 24 ist das Verfahren nach einem der Beispiele 14 bis 23, das Speichern des Produkts in dem Speicher entsprechend einem indexierten Ergebnis-Array von Datenwörtern enthält.
- Beispiel 25 ist das Verfahren nach einem der Beispiele 14 bis 24, das für einen Index des Ergebnis-Arrays Akkumulieren der partiellen Multiplikationen eines Datenworts des ersten Operanden, das einen ersten Index aufweist, mit einem Datenwort des zweiten Operanden, das einen zweiten Index aufweist, enthält, wobei die Summe aus dem ersten Index und dem zweiten Index der Index des Ergebnis-Arrays ist.
- Beispiel 26 ist das Verfahren nach einem der Beispiele 14 bis 25, wobei die partiellen Multiplikationen alle Kombinationen von Datenwörtern des ersten Operanden mit Datenwörtern des zweiten Operanden enthalten.
-
Gemäß einem weiteren Beispiel ist eine Kryptographieverarbeitungsvorrichtung bereitgestellt, die einen Eingang, der konfiguriert ist, Daten, die kryptographisch verarbeitet werden sollen, zu empfangen, einen Speicher, der konfiguriert ist, einen ersten Operanden und einen zweiten Operanden, die (wenigstens teilweise) durch Daten repräsentiert sind, zu speichern, enthält, wobei der erste Operand und der zweite Operand jeweils mehrere Ziffern enthalten (wobei jede Ziffer durch ein Datenwort gegeben ist). Die Kryptographieverarbeitungsvorrichtung enthält ferner einen Kryptographieprozessor, der konfiguriert ist, den ersten Operanden mit dem zweiten Operanden zu multiplizieren, um ein Ergebnis zu erzeugen, durch Multiplizieren jeder Ziffer des ersten Operanden mit jeder Ziffer des zweiten Operanden und Akkumulieren der Ergebnisse in einer Reihenfolge aufeinanderfolgender Gruppen (oder Blöcke), wobei jede Gruppe einer Menge von Ziffern des Ergebnisses zugeordnet ist und Kombinationen aus Ziffern einer Teilmenge von Ziffern des ersten Operanden und für jede Ziffer der Teilmenge von Ziffern des ersten Operanden diejenigen Ziffern des zweiten Operanden, die dann, wenn sie mit der Ziffer der Teilmenge von Ziffern des ersten Operanden kombiniert werden, einen Beitrag zu einer Ziffer aus der Menge von Ziffern des Ergebnisses ergeben (wobei der Beitrag einen „direkten Beitrag“ bedeutet, d. h. keinen Beitrag durch einen Übertrag), enthält.
-
Die Kryptographieverarbeitungsvorrichtung nach einem der vorstehend beschriebenen Beispielen kann in Software (d. h. mit Hilfe eines Prozessors, der eine Software ausführt) oder in Hardware (d. h. durch eine fest verdrahtete Hardware-Schaltung, möglicherweise durch Firmware oder dergleichen gesteuert) implementiert sein.
-
Insbesondere kann die Kryptographieverarbeitungsvorrichtung durch eine oder mehrere Schaltungen implementiert sein, wobei „eine Schaltung“ als irgendeine Art einer Logik implementierenden Entität verstanden werden kann, die Hardware, Software, Firmware oder irgendeine Kombination daraus sein kann. Somit kann in einer Ausführungsform eine „Schaltung“ eine fest verdrahtete Logikschaltung oder eine programmierbare Logikschaltung sein, wie z. B. ein programmierbarer Prozessor, z. B. ein Mikroprozessor (z. B. ein Prozessor für „Complex Instruction Set Computer“ (CISC-Prozessor) oder ein Prozessor für „Reduced Instruction Set Computer“ (RISC-Prozessor)). Eine „Schaltung“ kann auch Software sein, die durch einen Prozessor implementiert oder ausgeführt wird, z. B. irgendeine Art eines Computerprogramms. Irgendeine andere Art der Implementierung der entsprechenden Funktionen, die hier beschrieben sind, kann ebenfalls als eine „Schaltung“ in Übereinstimmung mit einer alternativen Ausführungsform verstanden werden.
-
Obwohl spezifische Ausführungsformen hier dargestellt und beschrieben worden sind, ist durch normale Fachleute zu erkennen, dass die spezifischen gezeigten und beschriebenen Ausführungsformen durch eine Vielzahl alternativer und/oder äquivalenter Implementierungen ersetzt werden können, ohne von dem Schutzbereich der vorliegenden Erfindung abzuweichen. Diese Anmeldung ist dafür vorgesehen, alle Anpassungen oder Variationen der hier diskutierten spezifischen Ausführungsformen abzudecken. Deshalb ist vorgesehen, dass diese Erfindung nur durch die Ansprüche und ihre Äquivalente eingeschränkt ist.
-
Bezugszeichenliste
-
- 101
- Chip
- 102
- Prozessor
- 103
- Speicher
- 104-106
- Arrays
- 107
- Registermenge
- 108-110
- Register
- 201-204
- Multiplikationsdiagramme
- 300
- Multiplikationsdiagramm
- 301
- Partielle Multiplikation
- 302
- Zeile
- 303
- Diagonale
- 304
- Spalte
- 400
- Multiplikationsdiagramm
- 401
- Blockspalte
- 500
- Multiplikationsdiagramm
- 501-503
- Multiplikationsblöcke
- 600
- Kryptographieverarbeitungsvorrichtung
- 601
- Speicher
- 602
- Kryptographieprozessor
- 700
- Ablaufdiagramm
- 701-702
- Prozessoperationen