-
Hintergrund
-
Die vorliegende Erfindung betrifft allgemein integrierte Schaltungen und insbesondere programmierbare integrierte Schaltungen, die dafür ausgelegt sind, modulare Potenzierung zu unterstützen.
-
Integrierte Schaltungen, die zur Implementierung von intelligenten Netzwerkschnittstellensteuerungen (NIC) zur Verbindung einer Datenverarbeitungsvorrichtung mit einem Netzwerk verwendet werden, umfassen oft Schaltkreise zur Implementierung von Datenverschlüsselungsmethoden, wie etwa des Verschlüsselungsalgorithmus von Rivest-Shamir-Adleman (RSA). Solche Verschlüsselungsschaltkreise müssen viele modulare Potenzierungsoperationen ausführen, die auf vielen modularen Multiplikationen aufgebaut sind. Der Algorithmus von Barrett ist ein übliches Verfahren zum Ausführen einer modularen Multiplizieroperation. Der Algorithmus von Barrett erfordert jedoch eine genaue Schätzung des Moduls, was wiederum genaue Versuchsmultiplikationen oder komplexe Vorberechnungen erfordert. Die Versuchsmultiplikationen/Vorberechnungen sind sowohl im Hinblick auf Fläche als auch Energie kostspielig, insbesondere für Eingangswortgrößen mit hunderten oder tausenden Bit.
-
Innerhalb dieses Kontexts entstehen die hier beschriebenen Ausführungsformen.
-
Figurenliste
-
- 1 ist eine Darstellung einer beispielhaften integrierten Schaltung, die Verschlüsselungsschaltkreise umfasst, gemäß einer Ausführungsform.
- 2 ist eine Darstellung einer beispielhaften modularen Multiplikationsschaltung gemäß einer Ausführungsform.
- 3 ist eine Darstellung einer geeigneten Implementierung einer Reduktionsschaltung innerhalb einer modularen Multiplikationsschaltung.
- 4 ist eine Darstellung einer modularen Multiplikationsschaltung, die unter Verwendung von partiellen/abgeschnittenen Multiplizierern implementiert wird.
- 5A und 5B sind Darstellungen, die zeigen, wie spärliche Multiplikationen implementiert werden können, indem Partialprodukte summiert werden, gemäß einer Ausführungsform.
- 6 ist eine Darstellung einer beispielhaften modularen Multiplikationsschaltung, die eine Einzelschritt-Fehlerkorrekturschaltung umfasst, gemäß einer Ausführungsform.
- 7 ist eine Darstellung einer beispielhaften Geschätzter-Quotient-Nachschlagetabelle für einen einzelnen Wert des Moduls M gemäß einer Ausführungsform.
- 8 ist eine Darstellung einer beispielhaften Geschätzter-Quotient-Nachschlagetabelle für mehrere Werte des Moduls M gemäß einer Ausführungsform.
- 9 ist ein Flussdiagramm von beispielhaften Schritten zum Betrieb der in Verbindung mit 6-8 beschriebenen Schaltkreise gemäß einer Ausführungsform.
-
Ausführliche Beschreibung
-
Die vorliegenden Ausführungsformen betreffen eine integrierte Schaltung, die dafür ausgelegt ist, modulare Multiplikationen zu implementieren. Eine modulare Multiplizierschaltung kann eine Eingangsmultiplikationsschaltung zum Berechnen des Produkts zweier Eingaben und eine Reduktionsschaltung, die das Produkt und eine Moduleingabe empfängt, umfassen. Die Reduktionsschaltung kann dafür ausgelegt sein, unter Verwendung von Partialmultiplizierern mit großen LSB-Fehlern (niedrigstwertiges Bit) eine anfängliche Schätzung zu berechnen. Durch Beobachten nur eines kleinen MSB-Bereichs (höchstwertiges Bit) nachfolgender Versuchssubtraktionen kann dann eine nachfolgende Konversionsschätzung erfolgen, um auf den korrekten Wert zu konvergieren. Kleine Versuchssubtraktionen sind um Größenordnungen kleiner als Versuchsmultiplikationen, was Fläche sparen und den Energieverbrauch reduzieren kann.
-
Für Fachleute ist erkennbar, dass die vorliegenden beispielhaften Ausführungsformen ohne einige oder alle dieser spezifischen Einzelheiten praktiziert werden können. In anderen Fällen wurden wohlbekannte Operationen nicht im Detail beschrieben, um die vorliegenden Ausführungsformen nicht unnötigerweise zu verschleiern.
-
1 ist eine Darstellung eines beispielhaften integrierten Schaltungschips 10, der Verschlüsselungsschaltkreise umfasst. Die integrierte Schaltungsvorrichtung 10 kann zum Beispiel eine CPU (Zentralverarbeitungseinheit), eine programmierbare integrierte Schaltung, eine GPU (Grafikverarbeitungseinheit), ein ASIC (anwendungsspezifische integrierte Schaltung), ein ASSP (anwendungsspezifisches Standardprodukt), ein Mikrocontroller, ein Mikroprozessor usw. sein. Beispiele für programmierbare integrierte Schaltungen wären PLD (programmierbare Logikvorrichtungen), FPGA (Field Programmable Gate Arrays), PAL (programmierbare Arrays-Logik), PLA (programmierbare Logikarrays), FPLA (Field Programmable Logic Arrays), EPLD (Electrically Programmable Logic Devices), EEPLD (Electrically Erasable Programmable Logic Devices), LCA (logische Zellenarrays) und CPLD (komplexe programmierbare Logikvorrichtungen), um nur einige wenige zu nennen.
-
Wie in 1 gezeigt, kann die integrierte Schaltung Verschlüsselungsschaltkreise umfassen, wie etwa Verschlüsselungsschaltkreise 12. Die Verschlüsselungsschaltkreise 12 können verwendet werden, um Daten in der Vorrichtung 10 zu verschlüsseln und/oder zu entschlüsseln. Die Verschlüsselungsschaltkreise 12 können verwendet werden, um Verschlüsselungsmethoden zu implementieren, wie etwa den RSA-Verschlüsselungsalgorithmus (Rivest-Shamir-Adleman), den AES-Algorithmus (Advanced Encryption Standard), den Blowfish-Verschlüsselungsalgorithmus, den Twofish-Verschlüsselungsalgorithmus, den Triple-DES-Algorithmus (Data Encryption Standard), den IDEA-Algorithmus (International Data Encryption Algorithm), SHA (Secure Hash Algorithm) und/oder andere Datenverschlüsselungsverfahren.
-
Die verschiedenen obigen Verschlüsselungsprozesse beruhen auf modularen Potenzierungsoperationen, die auf modularen Multiplikationen aufgebaut werden können. Somit können die Verschlüsselungsschaltkreise 12 eine oder mehrere modulare Multiplikationsschaltungen 14 umfassen, die dafür ausgelegt sind, modulare Multiplikation zu implementieren. Obwohl in dem Beispiel von 1 nur eine repräsentative modulare Multiplikationsschaltung 14 gezeigt ist, können die Verschlüsselungsschaltkreise 14 im Allgemeinen eine beliebige geeignete Anzahl modularer Multiplikationsschaltungen umfassen.
-
2 ist eine Darstellung einer beispielhaften modularen Multiplikationsschaltung 14 gemäß einer Ausführungsform. Wie in 2 gezeigt, kann die modulare Multiplikationsschaltung 14 einen zum Empfangen eines ersten Eingangssignals A ausgelegten ersten Eingangsport, einen zum Empfangen eines zweiten Eingangssignals B ausgelegten zweiten Eingangsport und einen zum Empfangen eines Modulwerts M ausgelegten dritten Eingangsport aufweisen. Die Eingangssignale A, B und M können jeweils k Bit aufweisen, wobei k im Bereich von 1-10, 10-100, 100-1000, 1000+, 2000+, 5000+ oder einer beliebigen geeigneten ganzen Zahl liegen könnte.
-
Die modulare Multiplikationsschaltung
14 kann ferner eine Breiteingangs-Multiplikationsschaltung
202 umfassen, die dafür ausgelegt ist, A und B zu multiplizieren, um das entsprechende Produkt N zu berechnen. Das Produkt N kann 2k Bit breit sein. Der Eingangsmultiplikationsschaltung
202 kann eine modulare Reduktionsschaltung
204 folgen. Es können eine oder mehrere zusätzliche Multiplikationen (effektiv) in der modularen Reduktionsschaltung
204 ausgeführt werden, um ein Endergebnis R zu erhalten, wobei
ist, wobei N gleich A*B ist und wobei R auch ein k-Bit-Ergebnis ist, das kleiner als M ist. Das Endergebnis R wird manchmal auch als der „Rest“ der modulo-Operation bezeichnet.
-
Eine Art der Implementierung der modularen Reduktion in der Schaltung 204 ist Verwendung des Reduktionsverfahrens von Barrett. Die Reduktionsmethode von Barrett erhält das letztendliche R-Ergebnis durch Subtrahieren eines ganzzahligen Vielfachen von M von N. Das ganzzahlige Vielfache wird über Multiplizieren von N mit dem Inversen des Modulwerts und dann Abrunden dieses Ergebnisses auf die nächste ganze Zahl erhalten. 3 ist eine Darstellung einer geeigneten Implementierung einer modularen Multiplikationsschaltung 300, die dafür ausgelegt ist, die Reduktion von Barrett zu implementieren.
-
Wie in 3 gezeigt, umfasst die Schaltung 300 einen Breiteingangs-Multiplizierer 302, der dafür ausgelegt ist, k-Bit-Eingangssignale A und B zu empfangen und ein entsprechendes 2k-Bit-Produkt N auszugeben, wobei N gleich A*B ist. Die übrigen Schaltungskomponenten gehören als Teil der modularen Reduktionsschaltung, wie durch den Teil 304 gezeigt.
-
Eine erste Schaltung 312 ist dafür ausgelegt, eine invertierte Version von M (oder „IM“) durch Dividieren von 2^(2k) durch M und dann Abrunden durch Nehmen des Grundwerts des Ergebnisses zu berechnen. Das invertierte Modul IM hat (k+1) Bit. Eine zweite Schaltung 310 ist dafür ausgelegt, effektiv die k unteren Bit von N abzuwerfen, indem N durch 2^k dividiert und dann die Grundwertoperation verwendet wird, um alle fraktionalen Bit abzuwerfen. Diese Operation kann durch ein Rechtsschieben der k Bitpositionen implementiert werden, während alle Bit, die herausgeschoben werden, ignoriert werden.
-
Eine erste Reduktionsmultipliziererschaltung 314 ist dafür ausgelegt, die Ausgabe der Schaltung 310 mit dem durch die Schaltung 312 erzeugten invertierten Modul IM zu multiplizieren, um einen Wert U zu erhalten, der (2k+1) Bit aufweist. Eine dritte Schaltung 316 ist dafür ausgelegt, effektiv die k unteren Bit von U abzuwerfen, indem U durch 2^k dividiert und dann die Grundwertoperation verwendet wird, um alle fraktionalen Bit abzuwerfen. Diese Operation kann durch ein Rechtsschieben der k Bitpositionen implementiert werden, während alle Bit, die herausgeschoben werden, ignoriert werden. Die Ausgabe der Schaltung 316 ist gleich dem Wert E, der auch (k+1) ganzzahlige Bit aufweist. Der Wert E liegt innerhalb von 1 Einheit der Anzahl von Malen, wie oft M in N passt, und kann eine Unterschätzung sein. Eine zweite Reduktionsmultipliziererschaltung 318 ist dafür ausgelegt, E mit dem Modulwert M zu multiplizieren, um einen entsprechenden Wert P zu erzeugen, der (2k+1) Bit aufweist.
-
Eine vierte Schaltung 320 ist dafür ausgelegt, die oberen k Bit von N (z.B. durch Berechnen von N mod 2^(k+2)) abzuwerfen, während eine fünfte Schaltung 322 dafür ausgelegt ist, die oberen k+1 Bit von P (z.B. durch Berechnen von P mod 2^(k+2)) abzuwerfen. Eine Subtraktionsschaltung 324 ist dafür ausgelegt, die Differenz der von den Schaltungen 320 und 322 empfangenen Werte zu berechnen, um T zu erzeugen (d.h. T ist gleich N minus P). Der Wert P repräsentiert ein ganzzahliges Vielfaches von M, wobei T dem tatsächlichen Modul M nahe sein sollte. Wenn T kleiner als M ist, ist das Endergebnis R gleich T. Wenn T größer oder gleich M ist, wird R gleich T minus M sein (d.h. es ist eine weitere Subtraktion am Ende erforderlich).
-
Das folgende numerische Beispiel hilft dabei, die Funktionsweise der Schaltung 300 zu veranschaulichen. Man betrachte zum Beispiel ein Szenario mit k=8, A=174 (d.h. „10101110“ im Binärformat), B=201 (d.h. „11001001“ binär) und M=205 (d.h. „11001101“). Der Eingangsmultiplizierer 302 wird dann durch Berechnen von A*B ein Produkt N ausgeben, das gleich 34974 (oder „1000100010011110“ binär) sein wird.
-
Der Kehrwert von M (d.h. 1/M) ist gleich „0.0000000100111111101100000001001 ...“, und die (k+1) oder 9 Bit des Kehrwerts, die als IM gespeichert werden, beginnen am 8. fraktionalen Bit (siehe die obige hervorgehobene Bitkette). Anders ausgedrückt, wird 2^(2k) dividiert durch M der obige Kehrwert sein, um k Bitpositionen nach links verschoben, um „100111111.101100000001001 ...“ zu ergeben. Die fraktionalen Bit rechts des binären Radexpunkts werden durch die Grundwertfunktion abgeworfen, und der resultierende IM-Wert wird gleich „100111111“ in binär oder 319 im Dezimalformat sein.
-
Die Schaltung 310 berechnet grundwert(N/2^k), was in diesem Beispiel gleich „10001000“ ist. Der Reduktionsmultiplizierer 314 berechnet U durch Multiplizieren des Ergebnisses der Schaltung 310 mit IM. Somit wird U gleich „10001000“, multipliziert mit „100111111“ sein, was gleich „1010100101111000“ in binär oder 43384 dezimal ist. Die Schaltung 316 erzeugt E durch berechnen von grundwert(U/2^k), was in diesem Beispiel gleich „010101001“ in binär oder 169 dezimal ist.
-
Der Reduktionsmultiplizierer 318 berechnet P durch Multiplizieren von E und M, was in diesem Fall 34645 ergibt. Als letztes berechnet die Subtraktionsschaltung 324 T durch Subtrahieren von P von N, was gleich (34974 minus 34645) oder 329 ist. Diese Subtraktionsoperation muss nicht die gesamte Länge 2*k von N überspannen, da man weiß, dass T größer oder gleich null und kleiner als 2*M ist. Anders ausgedrückt, kann die Subtraktion nur an den unteren (k+1) Bit von N und P ausgeführt werden, während die übrigen oberen Bit ignoriert werden. Da T von 329 größer als M gleich 205 ist, wird hier eine weitere Subtraktion benötigt, so dass der letztendliche Restwert R gleich (329-205) oder 124 ist.
-
In der Anordnung von 3 erfordert die Berechnung von N=A*B in dem Eingangsmultiplizierer 302 einen vollen Ausgangsvektor. Die Berechnung von U in dem ersten Reduktionsmultiplizierer 314 ergibt (2k+1) Bit, aber nur die oberen (k+1) Bit werden für den Wert E benutzt. Ähnlich ergibt die Berechnung von P in dem zweiten Multiplizierer 318 (2k+1) Bit, aber nur die unteren (k+1) Bit werden zur Berechnung von T in der Subtraktionsschaltung 324 benutzt. In beiden diesen Fällen kann ein „partieller“ oder „abgeschnittener“ Multiplizierer den Multiplizierer 314 und/oder den Multiplizierer 318 ersetzen, um Hardwarekosten drastisch zu verringern, während der Energieverbrauch minimiert wird. Ein partieller oder abgeschnittener Multiplizierer ist ein Multiplizierer, der nur einen Teil des vollen resultierenden Produkts berechnet.
-
4 ist eine Darstellung einer modularen Multiplikationsschaltung 300', die unter Verwendung von partiellen/abgeschnittenen Multiplizierern implementiert wird. Wie in 4 gezeigt, wird der erste Reduktionsmultiplizierer 314' als ein abgeschnittener Multiplizierer implementiert, der nur partiell die oberen (k+2) Bit berechnet und deshalb direkt einen Wert E' ausgibt (während die übrigen LSB-Bit nicht einmal berechnet werden). Der Wert E' repräsentiert eine ungefähre Anzahl von Malen, wie oft M in N passt. Der zweite Reduktionsmultiplizierer 318' wird als ein abgeschnittener Multiplizierer implementiert, der nur partiell die unteren (k+2) Bit berechnet und einen Wert P' ausgibt (während die übrigen MSB-Bit nicht einmal berechnet werden).
-
Aggressives Abschneiden der Reduktionsmultiplizierer auf diese Weise kann dabei helfen, die Hardwarekomplexität der modularen Multiplikationsschaltung 300' zu verringern, geht aber das Risiko ein, einen Mehrbitfehler in den LSB der abgeschnittenen Multiplizierer zu erzeugen. Anders ausgedrückt, ist es möglich, dass das in der abgeschnittenen Anordnung von 4 erzeugte E' weniger genau als das in der nicht abgeschnittenen Anordnung von 3 erzeugte E ist (d.h. kann E' mehrere ganze Zahlen danebenliegen), was zu einer Differenz T' führt, die mehr als einmal von M entfernt sein könnte (d.h. T' kann größer als 2M sein). Als Ergebnis kann mehr als eine iterative Subtraktion in der letztendlichen Verfeinerungsstufe 326 (siehe unten in 3) notwendig sein, um die letztendliche Restausgabe R zu erzeugen. Iterieren durch mehrere Subtraktionen kann kostspielig sein und würde die Komplexität der letztendlichen Verfeinerungsstufe 326 vergrößern. Außerdem können große K-Bit-Subtraktionen im Hinblick auf Fläche und Latenz sehr kostspielig sein. In einigen Szenarien kann die Gesamtzunahme im Addierer der Addierer-Übertragskette, die in der komplexen Verfeinerungsstufe 326 erforderlich ist, sogar größer sein als die Flächenabnahme in den partiellen Multiplizierern.
-
Eine andere Technik zum Verringern der Kosten der Reduktionsmultiplizierer besteht darin, sicherzustellen, dass der Modulwert M sorgfältig gewählt wird, so dass sowohl M als auch seine Inverse „spärlich“ sind. In der Regel weist der Modulwert M für beliebte Verschlüsselungsalgorithmen eine führende Eins auf, ist ungerade und wird oft als spärlich betrachtet.
-
Man betrachte zum Beispiel ein Szenario, in dem M ein 256-Bit-Wert ist, der im Hexadezimalformat gleich
„fffffffeffffffffffffffffffffffffffffffff00000000fffffffffff fffff“ ist. Obwohl dies anfänglich nicht spärlich erscheint, können die langen Läufe von Einsen mit einer Addition und einer Subtraktion ersetzt werden. Zum Beispiel ist sieben („0111“) gleich acht minus eins („1000“ minus „0001“) . Ein Polynom, das zur Implementierung des obigen 256-Bit-Werts M verwendet werden kann, ist somit [2^(256)*x + 2^(224)*x + 2^(96)*x + 2^(64)*x - x]. Die Inverse dieses Polynoms ist
„0x1.000000010000000100000001000000010000000
2000000020000000200000003“, was auch sehr spärlich ist.
-
5A und 5B sind Darstellungen, wie spärliche Multiplikationen durch Summieren von partiellen Produkten implementiert werden können. 5A zeigt, wie der abgeschnittene Reduktionsmultiplizierer 314', der ein spärliches IM empfängt, nur den oberen MSB-Teil 504 der verschiedenen verschobenen Instanzen von IM berechnen und miteinander summieren muss (während der untere LSB-Teil 502 komplett ignoriert wird). Ähnlich zeigt 5B, wie der abgeschnittene Reduktionsmultiplizierer 318', der ein spärliches M empfängt, nur den unteren LSB-Teil 508 der verschiedenen verschobenen Instanzen von M berechnen und miteinander summieren muss (während der obere MSB-Teil 506 komplett ignoriert wird). Die Addition der verschiedenen verschobenen Werte kann unter Verwendung eines Übertrags-Propagationsaddierers, eines Übertrags-Abspeicheraddierers, einer Kombination verschiedener Addiererarchitekturen oder anderer geeigneter Addiererstrukturen implementiert werden.
-
Gemäß einer Ausführungsform wird eine modulare Multiplikationsschaltung 600 bereitgestellt, die eine einschrittige Fehlerkorrekturschaltung umfasst, die die möglichen Fehler, die sich aus Multipliziererabschneidung ergeben, in einem einzigen Schritt entfernt (siehe z.B. 6). Wie in 6 gezeigt, kann die Schaltung 600 einen Breiteingangs-Multiplizierer 602 umfassen, der dafür ausgelegt ist, k-Bit-Eingangssignale A und B zu empfangen und ein entsprechendes 2k-Bit-Produkt N auszugeben, wobei N gleich A*B ist. Die übrigen Schaltungskomponenten können als Teil der modularen Reduktionsschaltung angehören, wie durch den Teil 680 gezeigt.
-
Eine erste Schaltung 612 kann dafür ausgelegt sein, den invertierten Wert IM durch Dividieren von 2^(2k) durch M und dann Nehmen des Grundwerts zu berechnen. Das invertierte Modul IM kann (k+1) Bit aufweisen. Eine zweite Schaltung 610 kann dafür ausgelegt sein, effektiv die k unteren Bit von N abzuwerfen, indem N durch 2^k dividiert und das Ergebnis dann grundgewertet wird, um alle fraktionalen Bit abzuwerfen. Diese Operation kann durch ein Rechtsverschieben von k Bit implementiert werden, während alle Bit, die herausgeschoben werden, ignoriert werden.
-
Der erste Reduktionsmultiplizierer 614 kann eine abgeschnittene/partielle Multipliziererschaltung sein, die nur partiell die oberen (k+2) Bit berechnet und den Wert E' ausgibt. Der Wert E' repräsentiert eine ungefähre Anzahl von Malen, wie oft M in N passen könnte. Der zweite Reduktionsmultiplizierer 618 kann eine abgeschnittene/partielle Multipliziererschaltung sein, die nur partiell die unteren (k+2) Bit berechnet und einen Wert P' ausgibt. Die Subtraktionsschaltung 624 kann dafür ausgelegt sein, die Differenz T' durch Subtrahieren von P' von dem Produkt N zu erzeugen.
-
Wie oben in Verbindung mit dem Beispiel von 4 beschrieben, ist der Nutzen abgeschnittener Multiplizierer, dass das geschätzte Vielfache E' mehrere ganze Zahlen danebenliegen kann. Unter der Annahme, dass der Fehler bei T' mehrere ganzzahlige Vielfache des Modulwerts M beträgt, kann die Gesamtdifferenz T' gleich (Y*M + R) sein, wobei R kleiner als M ist. Wenn Y gleich eins ist, liegt T' somit zwischen M und (2*M-1). Wenn in einem anderen Beispiel Y gleich zwei ist, beträgt T' von 2*M bis (3*M-1). In noch einem Beispiel liegt, wenn Y gleich drei ist, T' dann in dem Bereich von 3*M bis (4*M-1) und so weiter. Deshalb besteht keine Überlappung zwischen Fehlern.
-
Die Schaltkreise 650 signalabwärts der Substraktionsschaltung 624 berechnen (T' minus Y*M) in einem einzigen Schritt, um ein Versuchsergebnis R' zu erhalten. Die Schaltkreise 650 werden deshalb manchmal als eine einschrittige Fehlerkorrekturschaltung bezeichnet. Eine End-Justierungsstufe 662 kann höchstens eine End-Subtraktionsoperation ausführen, um den End-Restwert R auszugeben.
-
Um den Fehlerbereich zu bestimmen, können die oberen MSB von T' verwendet werden, um eine Geschätzter-Quotient-Nachschlagetabelle 652 nachzuschlagen, um einen geschätzten Quotienten Y zu bestimmen (der manchmal auch als „Fehlervielfaches“ bezeichnet wird). Zum Beispiel könnten nur die oberen acht Bit von T' verwendet werden, um die Tabelle 652 mit einer relativ kleinen Chance von Fehlvorhersage nachzuschlagen. Jeder potentielle Restfehler kann mit einer einzigen Addition (z.B. zur Implementierung von Subtraktion in Zweierkomplementform) in der End-Justierungsstufe 662 aufgelöst werden. Dieses Beispiel, in dem die oberen 8 MSB von T' zum Nachschlagen der Tabelle 652 verwendet werden, ist lediglich eine Veranschaulichung. Falls erwünscht, können die oberen 4 Bit von T' verwendet, die oberen 5 Bit von T' verwendet, die oberen 6 Bit von T' verwendet oder eine andere geeignete Teilmenge von T' verwendet werden, um die Tabelle 652 nachzuschlagen.
-
Das geschätzte Vielfache Y kann kleiner als das tatsächliche Vielfache von M sein, aber niemals mehr. Die Korrekturschaltung 650 kann deshalb eine Versuchssubtraktion von (T' - Y*M) durchführen, die in Addition redundanter Form durchgeführt werden kann, statt einen tatsächlichen Multiplizierer zu erfordern. Unter der Annahme, dass Y 0-6 sein kann, kann die Versuchssubtraktion durch ein erstes Verschieben von M um 0, 1 oder 2 Bit und durch ein zweites Verschieben von M um 0 oder 1 Bit erzielt werden (da ein Maximalwert von 6 höchstens zwei hohe Bit erfordert). Eine oder beide Verschiebungen können optional ausgenullt werden, wie etwa wenn Y=0 ist.
-
In dem Beispiel von 6 wird die erste Verschiebung unter Verwendung der Auswahlschaltung 654-1 implementiert. Wenn der „0“-Eingang der Schaltung 654-1 ausgewählt wird, wird eine nichtverschobene Version von M durchgelassen. Wenn der „1“-Eingang der Schaltung 654-1 ausgewählt wird, kann M, verschoben um ein Bit nach links, durchgeroutet werden. Wenn der „2“-Eingang der Schaltung 654-1 ausgewählt wird, kann M, verschoben um zwei Bit nach links, durchgeroutet werden. Ähnlich wird die zweite Verschiebung unter Verwendung der Auswahlschaltung 654-2 implementiert. Die Negationskomponente 655-1 implementiert eine Einerkomplement-Konversion für die erste Auswahlschaltung 654-1, während die Negationskomponente 655-2 eine Einerkomplement-Konversion für die zweite Auswahlschaltung 654-2 implementiert.
-
Zusammen mit einer 3:2-Addiererkompressorschaltung 656 und einem Übertrags-Propagationsaddierer (CPA) 658, der mehrere Übertrags-Eingänge von „1“ über dem Pfad 660 zur Implementierung der vollen Zweierkomplement-Subtraktion empfangen kann, kann der Addierer 658 ein vorletztes oder Versuchs-Restergebnis R' erzeugen, das gleich (T'- Y*M) ist. Die Anzahl der Übertrags-Eingänge, die benötigt wird, kann von der Anzahl aktiver Schaltungen 654 abhängen. Das Produkt Y*M wird manchmal als ein geschätztes ganzzahliges Vielfaches des Modulwerts M bezeichnet. Berechnen von R' auf diese Weise zur Entfernung des geschätzten ganzzahligen Vielfachenbetrags Y*M in einem einzigen Schritt unter Verwendung von Tabellennachschlag von Y und Addition redundanter Form zur Imitierung eines Multiplizierens kann Verwendung der modularen Multiplikationsschaltung 600 mit abgeschnittenen Multiplizierern erlauben, ohne dass man sich über die Möglichkeit Sorgen machen muss, am Ende des Reduktionsprozesses mehrere Iterationen großer Subtraktionen durchführen zu müssen, wodurch die Größe verringert wird, während die maximale Leistungsfähigkeit der insgesamten Verschlüsselungsschaltkreise verbessert wird.
-
Es besteht eine kleine Chance, dass das Einzelschritt-Versuchs-Subtraktionsergebnis R' immer noch M enthält, wobei in diesem Fall die End-Justierungsstufe 662 eine einzige Subtraktion durchführt. Als Alternative kann die gesamte Pipeline für einen Zyklus angehalten werden, um es dem CPA 658 zu erlauben, eine weitere Subtraktion durchzuführen, wodurch das Bilden der End-Justierungsstufe 662 überflüssig wird. Die Anhalte-Steuerlogik ist in 6 nicht gezeigt, um die vorliegenden Ausführungsformen nicht zu verschleiern. Unter der Annahme, dass Y auf einen kleinen Wert begrenzt ist (z.B. wenn Y kleiner als 10 ist), ist die Wahrscheinlichkeit einer Fehlvorhersage, wo die End-Justierung nötig ist, sehr klein. In solchen Szenarien kann Anhalten der Pipeline in mehreren tausend Operationen nur einmal erforderlich sein, was bezüglich Leistungsfähigkeitsauswirkung im Gegensatz zu Flächenersparnis einen guten Kompromiss gewährleistet. Gegebenenfalls könnten zusätzliche Schiebe-/Auswahlschaltungen 654 und ein breiterer Kompressor 656 verwendet werden, wenn erwartet wird, dass Y einen größeren Wert größer als sechs, größer als acht, größer als 10, größer als 20 usw. hat.
-
7 ist eine Darstellung einer beispielhaften Geschätzter-Quotient-Nachschlagetabelle 700 für einen einzigen Wert des Moduls M. In dem Beispiel von 7 bleibt der Modulwert M fest bei 205, und die Tabelle 700 listet den geschätzten Quotientenwert Y als Funktion von T' in verschiedenen Bereichen unter Annahme einer 8-Bit-Eingabe auf. Die verschiedenen Bereiche sind auf den Umstand zurückzuführen, dass die Tabelle nur die oberen 6 MSB von T' eingibt. Spalte 702 repräsentiert mögliche Y-Werte, wenn die übrigen LSB von T' alle Nullen sind. Die Werte in Spalte 702 können deshalb durch Berechnen des Grundwerts des kleinsten Werts von T' in diesem Bereich (z.B. des ersten T'-Werts in jeder Zeile), dividiert durch M, erzeugt werden. Spalte 704 repräsentiert mögliche Y-Werte, wenn die übrigen LSB von T' alle Einsen sind. Die Werte in Spalte 704 können deshalb durch Berechnen des Grundwerts des größten Werts von T' in diesem Bereich (z.B. des zweiten T'-Werts in jeder Zeile), dividiert durch M, erzeugt werden. Der letztendliche geschätzte Quotient (oder das geschätzte Vielfache) Y kann vorsichtig gleich dem Minimum der zwei entsprechenden Werte in Spalte 702 und 704 gesetzt werden.
-
Wie in 7 gezeigt, ist Y für T'-Werte im Bereich von [0, 223] ungültig. Zeile 708 in Tabelle 700 ist die erste Zeile, die einen Wert Y von 1 ausgibt. Zeile 710 ist die erste Zeile, bei der der entsprechende Wert in Spalte 704 zu 2 wechselt (da der Grundwert von 415/205 sich auf 2 abrundet). Y bleibt jedoch immer noch bei 1, da der kleinere der zwei Spaltenwerte verwendet wird. Zeile 711 ist die erste Zeile, bei der beide Werte in Spalte 702 und 704 gleich 2 sind. Folglich wird Y nun gleich 2 sein.
-
In diesem 8-Bit-Beispiel kann Y theoretisch bis zu einem Wert von 9 heraufkommen. In der Praxis kann jedoch, wenn bekannt ist, dass Y auf einen Maximalwert von 6 begrenzt ist, der Teil 716 in der Nachschlagetabelle gespeichert werden, aber unbenutzt bleiben. Wie oben in Verbindung mit 6 beschrieben, kann ein Max-Y-Wert von 6 Implementierung eines Multiplizierens über Addition redundanter Form unter Verwendung von nur zwei Schiebeschaltungen erlauben.
-
In 7 ist der maximale Schätzungsfehler (d.h. die maximale Differenz zwischen den Werten in Spalte 702 und 704 in jeder Zeile) gleich 1. Diese Instanzen sind in mindestens Zeile 710, 712 und 714 dargestellt, wobei die Werte in Spalte 702 und 704 sich um höchstens eins unterscheiden. In diesen konkreten Situationen muss die End-Justierungsstufe 662 (siehe 6) möglicherweise eine zusätzliche Subtraktion von M anwenden, um die End-Restausgabe R zu erhalten.
-
Wenn sich der Modulwert M selten oder äußerst wenig häufig ändert, kann die Geschätzter-Quotient-Nachschlagetabelle immer dann, wenn neue Werte benötigt werden, aus einer externen Quelle nachgeladen werden. Während modularen Potenzierungsoperationen, bei denen jede Potenzierung tausende modulare Multiplikationen durchführen kann, ändert sich der Wert von M nur zwischen sukzessiven modularen Potenzierungen. Verglichen mit der Komplexität modularer Potenzierung ist Neuberechnung der Geschätzter-Quotient-Nachschlagetabelle für ein neues M relativ unkompliziert.
-
Bei einer anderen geeigneten Anordnung könnte sich der Modulwert M häufiger ändern. Wenn sich zum Beispiel M in jedem Zyklus ändert, kann die Geschätzter-Quotient-Tabelle durch Aufnahme von Bereichen für M generischer gemacht werden. Der sich dynamisch ändernde Wert M kann der Nachschlagetabelle 652 über den Pfad 690 (siehe z.B. 6) zugeführt werden. 8 ist eine Darstellung einer beispielhaften Geschätzter-Quotient-Nachschlagetabelle 800 für mehrere Werte des Moduls. In dem Beispiel von 8 listet Tabelle 800 den geschätzten Quotientenwert Y als Funktion sowohl von M als auch von T' in verschiedenen Bereichen unter der Annahme einer 8-Bit-Eingabe auf. Die verschiedenen Bereiche von M sind auf den Umstand zurückzuführen, dass die Tabelle nur die oberen 3 Bit von M eingibt, während die verschiedenen Bereiche an T' auf den Umstand zurückzuführen sind, dass die Tabelle nur die oberen 6 MSB von T' eingibt.
-
Spalte 802 repräsentiert die kleinsten (bestenfalls) möglichen Y-Werte, die berechnet werden, indem der untere Bereich von T' genommen wird, dies durch den oberen Bereich von M dividiert wird und dann das Ergebnis gegrundwertet wird, um auf die nächste ganze Zahl abzurunden. Spalte 804 repräsentiert die maximalen (im ungünstigsten Fall) möglichen Y-Werte, die berechnet werden, indem der obere Wert von T' genommen wird, dies durch den unteren Bereich von M dividiert wird und dann das Ergebnis gegrundwertet wird, um auf die nächste ganze Zahl abzurunden. Das letztendliche geschätzte Vielfache Y kann vorsichtig gleich dem Minimum der zwei entsprechenden Werte in Spalte 802 und 804 gesetzt werden.
-
Wie in 8 gezeigt, kann Y für niedrige Werte von M und T' ungültig sein. Zeile 810 in Tabelle 800 ist die erste Zeile, die einen Wert Y von 1 ausgibt. Zeile 812 ist die erste Zeile, die einen Wert Y von 2 ausgibt, und so weiter. In diesem 8-Bit-Beispiel kann Y theoretisch bis zu einem Wert von 9 heraufkommen. In 8 ist der maximale Schätzungsfehler (d.h. die maximale Differenz zwischen den Werten in Spalte 802 und 804 in jeder Zeile) gleich 3. Zum Beispiel zeigen die Zeilen 814 Fälle, in denen der Schätzungsfehler gleich 1 (z.B. 3 minus 2) ist; die Zeilen 816 zeigen Fälle, in denen der Schätzungsfehler gleich 2 (z.B. 7 minus 5) ist; und die Zeilen 818 zeigen Fälle, bei denen der Schätzungsfehler gleich 3 (z.B. 13 minus 10) ist. In diesen konkreten Situationen ist es möglich, dass die End-Justierungsstufe 662 (siehe 6) bis zu drei zusätzliche Subtraktionen von M anwenden muss, um die End-Restausgabe R zu erhalten.
-
9 ist ein Flussdiagramm beispielhafter Schritte zum Betrieb der in Verbindung mit 6-8 beschriebenen Schaltkreise. In Schritt 902 kann der Eingangsmultiplizierer 602 verwendet werden, um Eingangssignale A und B zu multiplizieren, um ein entsprechendes Produkt N zu erhalten. In Schritt 904 können die abgeschnittenen/partiellen Multiplizierer 614 und 618 verwendet werden, um auf der Basis von N und des Eingangsmodulwerts M P' zu berechnen.
-
In Schritt 906 kann die Subtraktionsschaltung 624 verwendet werden, um P' von dem Produkt N zu subtrahieren, um die Differenz T' zu erhalten. In Schritt 908 kann ein Teil der MSB von T' verwendet werden, um einen geschätzten Quotientenwert Y aus einer vorbestimmten Nachschlagetabelle zu identifizieren. Diese Nachschlagetabelle kann zeitlich im Voraus berechnet und zum schnellen Abruf auf der integrierten Schaltungsvorrichtung gespeichert werden. Auf der Basis des aus der Nachschlagetabelle abgerufenen Werts von Y kann die Fehlerkorrekturschaltung 650 eine einschrittige Fehlerkorrektur durch Subtrahieren von M*Y von T' durchführen (z.B. durch Durchführen von Subtraktion redundanter Form nur unter Verwendung von Schiebe- und Addieroperationen ohne Verwendung irgendwelcher Multiplizierschaltungen) .
-
In Schritt 912 kann die End-Justierungsstufe 662 optional verwendet werden, um einen etwaigen Restfehler zu entfernen (z.B. um einen etwaigen verbleibenden Schätzungsfehler zu entfernen, wenn R' immer noch größer oder gleich M ist. Die obere Schranke für die Anzahl von Subtraktionen, die in der End-Justierungsstufe benötigt werden, ist bekannt, da die Nachschlagetabelle den maximal möglichen Schätzungsfehler zeigen kann.
-
Obwohl die Verfahren von Operationen in einer spezifischen Reihenfolge beschrieben werden, versteht sich, dass zwischen beschriebenen Operationen andere Operationen ausgeführt werden können, beschriebene Operationen justiert werden können, so dass sie zu etwas verschiedenen Zeitpunkten auftreten, oder beschriebene Operationen in einem System verteilt werden können, das das Auftreten der Verarbeitungsoperationen in verschiedenen Intervallen erlaubt, die der Verarbeitung zugeordnet sind, solange die Verarbeitung der überlagerten Operationen auf eine gewünschte Weise ausgeführt wird.
-
Die Schaltungstechniken und Betriebsverfahren, die oben zur Verbesserung einer modularen Multiplikationsschaltung beschrieben werden, die die Reduktionsmethode von Barrett verwendet, ist lediglich beispielhaft und soll die vorliegenden Ausführungsformen nicht begrenzen. Gegebenenfalls können diese Techniken und Verfahren auch auf den Reduktionsalgorithmus von Montgomery, den klassischen modularen Reduktionsalgorithmus, den Algorithmus des GCD (größten gemeinsamen Nenners) von Lehmer und andere geeignete arithmetische modulare Reduktionsprozesse angewandt werden.
-
Beispiele:
-
Die folgenden Beispiele betreffen weitere Ausführungsformen.
-
Beispiel 1 ist eine integrierte Schaltung, umfassend: einen zum Empfangen eines ersten Eingangssignals ausgelegten ersten Eingangsport; einen zum Empfangen eines zweiten Eingangssignals ausgelegten zweiten Eingangsport; einen zum Empfangen eines Modulwerts ausgelegten dritten Eingangsport; einen Eingangsmultiplizierer, ausgelegt zum Multiplizieren des ersten Eingangssignals mit dem zweiten Eingangssignal, um ein entsprechendes erstes Produkt zu erzeugen; mehrere Reduktionsmultiplizierer, ausgelegt zum Erzeugen eines zweiten Produkts unter Verwendung des ersten Produkts und des Modulwerts; eine Subtraktionsschaltung, ausgelegt zum Berechnen einer Differenz zwischen dem ersten und zweiten Produkt; und eine Fehlerkorrekturschaltung, ausgelegt zum Entfernen eines geschätzten ganzzahligen Vielfachen des Modulwerts von der Differenz in einem einzigen Schritt.
-
Beispiel 2 ist die integrierte Schaltung nach Beispiel 1, wobei die mehreren Reduktionsmultiplizierer optional einen ersten abgeschnittenen Multiplizierer umfassen, der nur partiell eine Anzahl von höchstwertigen Bit (MSB) berechnet.
-
Beispiel 3 ist die integrierte Schaltung nach Beispiel 2, wobei die mehreren Reduktionsmultiplizierer ferner optional einen zweiten abgeschnittenen Multiplizierer umfassen, der nur partiell eine Anzahl von niedrigstwertigen Bit (LSB) berechnet.
-
Beispiel 4 ist die integrierte Schaltung nach einem der Beispiele 2-3, wobei der erste abgeschnittene Multiplizierer optional einen ersten Eingangsanschluss aufweist, der dafür ausgelegt ist, nur obere Bit des ersten Produkts zu empfangen.
-
Beispiel 5 ist die integrierte Schaltung nach Beispiel 4, wobei der zweite abgeschnittene Multiplizierer optional einen zweiten Eingangsanschluss aufweist, der dafür ausgelegt ist, eine invertierte Version des Modulwerts zu empfangen.
-
Beispiel 6 ist die integrierte Schaltung nach einem der Beispiele 1-5, wobei die Fehlerkorrekturschaltung optional dafür ausgelegt ist, die Differenz zum Erhalten eines geschätzten Quotientenwerts aus einer Nachlagetabelle zu verwenden.
-
Beispiel 7 ist die integrierte Schaltung nach Beispiel 6, wobei die Fehlerkorrekturschaltung ferner optional dafür ausgelegt ist, nur obere Bit der Differenz zu verwenden, um den geschätzten Quotientenwert aus der Nachschlagetabelle zu erhalten.
-
Beispiel 8 ist die integrierte Schaltung nach einem der Beispiele 6-7, wobei die Nachschlagetabelle optional eine Funktion nur eines einzigen Modulwerts ist.
-
Beispiel 9 ist die integrierte Schaltung nach einem der Beispiele 6-7, wobei die Nachschlagetabelle optional eine Funktion mehrerer verschiedener Modulwerte ist.
-
Beispiel 10 ist die integrierte Schaltung nach einem der Beispiele 6-9, wobei das geschätzte ganzzahlige Vielfache des Modulwerts optional gleich dem Modulwert mal dem aus der Nachschlagetabelle erhaltenen geschätzten Quotientenwert ist.
-
Beispiel 11 ist die integrierte Schaltung nach Beispiel 10, wobei die Fehlerkorrekturschaltung optional dafür ausgelegt ist, das geschätzte ganzzahlige Vielfache des Modulwerts ohne eine Multipliziererschaltung zu berechnen.
-
Beispiel 12 ist die integrierte Schaltung nach Beispiel 11, wobei die Fehlerkorrekturschaltung ferner optional ausgelegt ist zum Berechnen des geschätzten ganzzahligen Vielfachen unter Verwendung von Redundante-Form-Addition.
-
Beispiel 13 ist die integrierte Schaltung nach einem der Beispiele 10-12, wobei die Fehlerkorrekturschaltung ferner optional zusätzliche Schaltungen zum selektiven Verschieben des Modulwerts auf der Basis des geschätzten Quotientenwerts umfasst.
-
Beispiel 14 ist die integrierte Schaltung nach Beispiel 13, wobei die Fehlerkorrekturschaltung ferner optional eine Kompressorschaltung umfasst, die dafür ausgelegt ist, die Differenz von der Subtraktionsschaltung zu empfangen und Signale von den zusätzlichen Schaltungen zu empfangen.
-
Beispiel 15 ist die integrierte Schaltung nach Beispiel 14, wobei die Fehlerkorrekturschaltung ferner optional einen Addierer umfasst, der dafür ausgelegt ist, Signale von der Kompressorschaltung und ein Übertrags-Eingangssignal zu empfangen und einen entsprechenden Versuchsrestwert zu erzeugen.
-
Beispiel 16 ist die integrierte Schaltung nach Beispiel 15, die ferner optional eine End-Justierungsstufe zum selektiven Subtrahieren eines oder mehrerer Modulwerte von dem Versuchsrestwert umfasst.
-
Beispiel 17 ist ein Verfahren zum Betrieb einer integrierten Schaltung, wobei das Verfahren Folgendes umfasst: mit einem ersten Multiplizierer ein erstes und zweites Eingangssignal empfangen und durch Multiplizieren des ersten Eingangssignals mit dem zweiten Eingangssignal ein erstes Produkt berechnen; mit einem zweiten Multiplizierer einen Modulwert empfangen und auf der Basis des empfangenen Modulwerts und des ersten Produkts ein zweites Produkt berechnen; mit einer Subtraktionsschaltung eine Differenz zwischen dem ersten und zweiten Produkt berechnen; und mit einer Fehlerkorrekturschaltung ein geschätztes ganzzahliges Vielfaches des Modulwerts von der Differenz in einem einzigen Schritt subtrahieren.
-
Beispiel 18 ist das Verfahren nach Beispiel 17, ferner optional umfassend: Verwenden nur einer Teilmenge von Bit in der Differenz zum Nachschlagen eines geschätzten Vielfachenwerts aus einer vorbestimmten Nachschlagetabelle in der Fehlerkorrekturschaltung; und Berechnen des geschätzten ganzzahligen Vielfachen unter Verwendung des geschätzten Vielfachenwerts.
-
Beispiel 19 ist das Verfahren nach einem der Beispiele 17-18, ferner optional umfassend: Anhalten der Fehlerkorrekturschaltung zur Entfernung eines Restfehlers nach dem Subtrahieren des geschätzten ganzzahligen Vielfachen des Modulwerts von der Differenz.
-
Beispiel 20 ist eine modulare Multiplikationsschaltung, umfassend: einen Eingangsmultiplizierer, ausgelegt zum Berechnen eines ersten Produkts durch Multiplizieren eines ersten Eingangssignals mit einem zweiten Eingangssignal; einen abgeschnittenen Multiplizierer, ausgelegt zum Berechnen eines zweiten Produkts auf der Basis eines Eingangsmodulwerts und des ersten Produkts; eine Subtraktionsschaltung, ausgelegt zum Berechnen einer Differenz zwischen dem ersten und zweiten Produkt; und eine Fehlerkorrekturschaltung, ausgelegt zum Empfangen der Differenz von der Subtraktionsschaltung, zum Berechnen eines geschätzten Fehlervielfachen unter Verwendung der empfangenen Differenz und zum Erzeugen eines entsprechenden Versuchs-Restausgangswerts durch Subtrahieren des geschätzten Fehlervielfachen von der Differenz.
-
Zum Beispiel können alle optionalen Merkmale der oben beschriebenen Vorrichtung auch mit Bezug auf das hier beschriebene Verfahren oder den hier beschriebenen Prozess implementiert werden. Das Obige veranschaulicht lediglich die Prinzipien der vorliegenden Offenbarung, und Fachleute können verschiedene Modifikationen vornehmen. Die obigen Ausführungsformen können einzeln oder in beliebiger Kombination implementiert werden.