-
HINTERGRUND
-
Da Rechenvorrichtungen und elektronische Kommunikationsnetze sich weiterhin auf vielfache Weise verbreiten, ist Informationssicherheit nach wie vor ein wichtiges Anliegen. Kryptographische Techniken werden häufig verwendet, um zu gewährleisten, dass elektronische Informationen sicher zum vorgesehenen Empfänger gelangen, und um festzustellen, ob Vorrichtungen und/oder Prozessen, die Zugriff auf Informationen oder sonstige Vorrichtungen anfordern, Zugriff gewährt werden soll. Öffentliche-Schlüssel-Kryptographie ist eine Technik, die typischerweise zwei Schlüssel nutzt: einen privaten Schlüssel, der geheim bleibt; und einen öffentlichen Schlüssel, der frei offenbart sein kann, um eine Mitgliedschaft in einer Gruppe von vertrauenswürdigen Rechenvorrichtungen zu definieren. Während der öffentliche und der private Schlüssel miteinander in Beziehung stehen, lässt sich der private Schlüssel nicht ohne weiteres anhand des öffentlichen Schlüssels bestimmen.
-
Elliptische-Kurven-Kryptographie (ECC) ist eine Klasse von Öffentlicher-Schlüssel-Kryptographie, die auf kryptographischen Vorgängen unter Verwendung von elliptischen Kurven oder endlichen Feldern basiert. ECC-Vorgänge können eingesetzt werden, um herkömmliche kryptographische Vorgänge, einschließlich Schlüsselaustausch- und Digitale-Signatur-Vorgänge, auszuführen. Beispielsweise umfassen übliche kryptographische Algorithmen, die ECC-Vorgänge verwenden, Elliptic-Curve-Diffie-Hellman (ECDH) zum Schlüsselaustausch, Elliptic-Curve-Digital-Signature-Algorithmus (ECDSA) für Unterzeichnungs-/Überprüfungsvorgänge bei digitaler Unterschrift, Enhanced-Privacy-ID (EPID) zur Attestierung sowie sonstige kryptographische Algorithmen.
-
Figurenliste
-
Die hier beschriebenen Konzepte sind durch Beispiele in den beigefügten Zeichnungen veranschaulicht und stellen keine Einschränkung dar. Der Einfachheit und Klarheit halber sind in den Zeichnungen dargestellte Elemente nicht notwendigerweise maßstabsgetreu. Wo es angebracht erschien, wurden Bezugszeichen in den Zeichnungen wiederholt, um übereinstimmende oder analoge Elemente zu kennzeichnen.
- 1 ist ein vereinfachtes Blockdiagramm von mindestens einer Ausführungsform einer Rechenvorrichtung zur Beschleunigung von Elliptische-Kurven-Kryptographie- (ECC-) Hardware;
- 2 ist ein vereinfachtes Blockdiagramm von mindestens einer Ausführungsform einer Umgebung, die durch eine Rechenvorrichtung von 1 eingerichtet werden kann;
- 3 ist ein vereinfachtes Blockdiagramm von mindestens einer Ausführungsform der ECC-Engine von 1-2;
- 4 ist ein vereinfachtes Pinbelegungsdiagramm von mindestens einer Ausführungsform der ECC-Engine von 1-3;
- 5 ist ein vereinfachtes Flussdiagramm von mindestens einer Ausführungsform eines Verfahrens zum Antreiben einer ECC-Engine, die durch die Rechenvorrichtung von 1-4 ausgeführt werden kann;
- 6 ist ein vereinfachtes Flussdiagramm von mindestens einer Ausführungsform eines Verfahrens zur ECC-Hardware-Beschleunigung, die durch die Rechenvorrichtung von 1-4 ausgeführt werden kann; und
- 7 ist ein vereinfachtes Flussdiagramm von mindestens einer Ausführungsform eines Verfahrens zur Durchführung eines ECC-Vorgangs, der durch die Rechenvorrichtung von 1-4 ausgeführt werden kann.
-
DETAILLIERTE BESCHREIBUNG DER ZEICHNUNGEN
-
Wenngleich die Konzepte der vorliegenden Offenbarung verschiedenen Modifikationen unterzogen und in alternativen Formen vorliegen können, sind bestimmte Ausführungsformen davon als Beispiele in den Zeichnungen dargestellt und werden hierin ausführlich beschrieben. Es ist jedoch klar, dass die Konzepte der vorliegenden Offenbarung nicht auf die speziellen offenbarten Formen eingeschränkt werden sollen, sondern im Gegenteil alle Modifikationen, Äquivalente und Alternativen, die der vorliegenden Offenbarung und den beigefügten Ansprüchen entsprechen, abgedeckt sein sollen.
-
Bezugnahmen in der Beschreibung auf „eine Ausführungsform“, „eine veranschaulichende Ausführungsform“ usw. geben an, dass die beschriebene Ausführungsform ein bestimmtes Merkmal, eine bestimmte Struktur oder eine bestimmte Eigenschaft umfassen kann, aber dass jede Ausführungsform dieses bestimmte Merkmal, diese bestimmte Struktur oder diese bestimmte Eigenschaft aufweisen kann oder nicht notwendigerweise aufweisen muss. Außerdem beziehen sich diese Sätze nicht unbedingt auf dieselbe Ausführungsform. Wenn ein bestimmtes Merkmal, eine bestimmte Struktur oder eine bestimmte Eigenschaft in Verbindung mit einer Ausführungsform beschrieben wird, wird davon ausgegangen, dass Fachleute auf dem Gebiet der Erfindung in der Lage sind, ein solches Merkmal, eine solche Struktur oder Eigenschaft in Verbindung mit anderen Ausführungsform umzusetzen, unabhängig davon ob das explizit beschrieben ist oder nicht. Zusätzlich dazu sollte klar sein, dass die Angabe von Elementen einer Liste in der Form „zumindest eines aus A, B und C“ Folgendes bedeuten kann: (A); (B); (C): (A und B); (A und C); (B und C) oder (A, B, und C). Auf ähnliche Weise kann die Angabe von Elementen in der Form „zumindest eines aus A, B oder C“ Folgendes bedeuten: (A); (B); (C): (A und B); (A und C); (B und C) oder (A, B, und C).
-
Die offenbarten Ausführungsformen können in manchen Fällen in Hardware, Firmware, Software oder einer beliebigen Kombination davon umgesetzt werden. Die offenbarten Ausführungsformen können auch als Befehle umgesetzt werden, die auf einem oder mehreren flüchtigen oder nicht-flüchtigen maschinenlesbaren (z.B. computerlesbaren) Speichermedien getragen werden oder gespeichert sind, die dann durch einen oder mehrere Prozessoren gelesen und ausgeführt werden können. Ein maschinenlesbares Speichermedium kann als beliebige/r Speichervorrichtung, -mechanismus oder andere physische Struktur zum Speichern oder Übertragen von Informationen in einer durch eine Maschine lesbaren Form ausgeführt sein (z.B. als flüchtiger oder nicht-flüchtiger Speicher, als Medien-Disc oder als andere Medienvorrichtung).
-
In den Zeichnungen können manche strukturelle oder Verfahrensmerkmale in bestimmten Anordnungen und/oder Ordnungen dargestellt sein. Es sollte jedoch klar sein, dass solche bestimmten Anordnungen und/oder Ordnungen nicht erforderlich sein müssen. In manchen Ausführungsformen können solche Merkmale anders und/oder in einer anderen Ordnung angeordnet sein als in den veranschaulichenden Zeichnungen dargestellt. Zusätzlich dazu soll das Einschließen eines strukturellen oder Verfahrensmerkmals in einer bestimmten Zeichnung nicht implizieren, dass dieses Merkmal in allen Ausführungsformen erforderlich ist, und in manchen Ausführungsformen kann es nicht eingeschlossen oder mit anderen Merkmalen kombiniert sein.
-
Unter Bezugnahme auf 1 umfasst eine Rechenvorrichtung 100 zur Beschleunigung von Elliptische-Kurven-Kryptographie- (ECC-) Hardware in einer veranschaulichenden Ausführungsform einen Prozessor 120 und eine ECC-Engine 122. Wie weiter unten beschrieben, kann durch den Prozessor ausgeführte Software und/oder Firmware 120 Elliptische-Kurven-Kryptographie-Vorgänge auf die ECC-Engine 122 entladen. Der Prozessor 120 stellt eine Datenpfadauswahlleitung der ECC-Engine 122 ein, um zu spezifizieren, ob ein kryptographischer Vorgang auf 256-Bit-Daten oder 384-Bit-Daten durchgeführt werden soll. Der Prozessor 120 lädt ein oder mehrere Register der ECC-Engine 122 mit geeigneten Parametern und/oder Operanden, befiehlt der ECC-Engine 122, einen kryptographischen Vorgang durchzuführen, und liest dann Ergebnisdaten aus der ECC-Engine 122. Der Prozessor 120 kann auch ein bestimmtes, durch die ECC-Engine 122 zu verwendendes Ausmaß an Seitenkanal-Angriffsschutz spezifizieren. Die ECC-Engine 122 kann eine rasche, leistungseffiziente Berechnung von ECC-Vorgängen bereitstellen, mit verbesserter Leistungsfähigkeit und/oder Leistungsverbrauch im Vergleich zur Durchführung desselben Vorgangs unter Verwendung eines Prozessorkerns für allgemeine Zwecke. Beispielsweise wurde eine potenzielle Ausführungsform der ECC-Engine 122 in etwa 65.000 logischen Gates implementiert, und es wurde simuliert, dass sie etwa 30mal schneller als äquivalente Softwarelösungen ist. Darüber hinaus kann die ECC-Engine 122, indem sie 384-Bit-Daten und assoziierte ECC-Vorgänge (d.h. ECC-384) unterstützt, 192-Bit-Sicherheitsausmaß unterstützen. Indem sie einen niedrigeren Leistungsverbrauch und ein relativ hohes Sicherheitsausmaß bereitstellt, kann die ECC-Engine 122 für Intemet-der-Dinge-Vorrichtungen oder andere energieeffiziente Vorrichtungen mit langen Verwendungszyklen (z.B. 15-20 Jahre) geeignet sein.
-
Die Rechenvorrichtung 100 kann als jegliche Art von Rechen- oder Rechnervorrichtung ausgeführt sein, die die hier beschriebenen Funktionen auszuführen in der Lage ist, einschließlich, ohne Beschränkung, einen Computer, eine mobile Rechenvorrichtung, eine Intemet-der-Dinge-Vorrichtung, eine Netzwerkanwendung, eine Webapplikation, eine tragbare Rechenvorrichtung, einen Laptop-Computer, einen Notebook-Computer, einen Tablet-Computer, einen Desktop-Computer, eine Arbeitsstation, einen Server, ein verteiltes Rechensystem, ein prozessorbasiertes System und/oder eine elektronische Benutzervorrichtung. Wie in 1 gezeigt, umfasst die Rechenvorrichtung 100 veranschaulichenderweise einen Prozessor 120, ein Eingabe/Ausgabe-Subsystem 124, einen Speicher 126, eine Datenspeichervorrichtung 128 und ein Kommunikationssubsystem 130 und/oder andere Bestandteile und Vorrichtungen, die sich üblicherweise in einer Intemet-der-Dinge-Vorrichtung oder ähnlichen Rechenvorrichtung befinden. Natürlich kann eine Rechenvorrichtung 100 in anderen Ausführungsformen andere oder zusätzliche Bestandteile umfassen, wie solche, die sich üblicherweise in einer mobilen Rechenvorrichtung (z.B. verschiedene Eingabe/AusgabeVorrichtungen) befinden. Darüber hinaus können in manchen Ausführungsformen einer oder mehrere der veranschaulichenden Bestandteile in einem anderen Bestandteil eingebaut sein oder auf sonstige Weise einen Teil davon ausbilden. Beispielsweise können in manchen Ausführungsformen der Speicher 126 oder Abschnitte davon im Prozessor 120 eingebaut sein.
-
Der Prozessor 120 kann als jegliche Art von Prozessor ausgeführt sein, der in der Lage ist, die hier beschriebenen Funktionen durchzuführen. Der Prozessor 120 kann als Single- oder Multi-Core-Prozessor(en), digitaler Signalprozessor, Mikrosteuerung oder sonstige(r) Prozessor oder Prozessor-/Steuerschaltung ausgeführt sein. Wie gezeigt, umfasst der Prozessor 120 die ECC-Engine 122. Die ECC-Engine 122 kann ausgeführt sein als ein(e) jeglicher/jegliche funktioneller Block, IP-Kern, eingebettete Steuerung, logische Schaltung, logisches Gate und/oder sonstiger Bestandteil des Prozessors 120, der in der Lage ist, die beschriebenen Funktionen durchzuführen. Darüber hinaus ist darauf hinzuweisen, dass die ECC-Engine 122, obwohl sie als im Prozessor 120 umfasst dargestellt ist, in manchen Ausführungsformen in einem anderen Bestandteil der Rechenvorrichtung 100, wie etwa dem I/O-Subsystem 124, umfasst oder als eigenständige(r) Beschleuniger, Co-Prozessor, Sicherheitsengine oder sonstige integrierte Schaltung ausgeführt sein kann.
-
Der Speicher 126 kann ausgeführt sein als jeglicher Typ von flüchtigem oder nichtflüchtigem Speicher oder Datenspeicher, der in der Lage ist, die hier beschriebenen Funktionen durchzuführen. Im Gebrauch kann der Speicher 126 verschiedene Daten und Software speichern, die während des Betriebs der Rechenvorrichtung 100 verwendet werden, wie etwa Betriebssysteme, Anwendungen, Programme, Bibliotheken und Treiber. Der Speicher 126 ist mit dem Prozessor 120 über das I/O-Subsystem 124 kommunikativ verbunden, das als Schaltung und/oder Bestandteile ausgeführt sein kann, um Eingabe/Ausgabevorgänge mit dem Prozessor 120, dem Speicher 126 und anderen Bestandteilen der Rechenvorrichtung 100 zu erleichtern. Beispielsweise kann das I/O-Subsystem 124 als Speicher-Controller-Hubs, Eingabe/Ausgabe-Control-Hubs, Plattform-Controller-Hubs, integrierte Steuerungsschaltung, Firmware-Vorrichtungen, Kommunikationsverbindungen (d.h. Punkt-zu-Punkt-Verbindungen, Busverbindungen, Drähte, Kabel, Lichtführungen, Leiterplattenspuren usw.) und/oder andere Bestandteile und Subsysteme ausgeführt sein oder diese auf sonstige Weise umfassen, um Eingabe/Ausgabe-Vorgänge zu erleichtern. In manchen Ausführungsformen kann das I/O-Subsystem 124 einen Teil eines Chip-Systems (SoC) ausbilden und gemeinsam mit dem Prozessor 120, dem Speicher 126 und anderen Bestandteilen der Rechenvorrichtung 100 auf einem einzelnen integrierten Chip eingebaut sein.
-
Die Datenspeichervorrichtung 128 kann als jegliche Art von Vorrichtung oder Vorrichtungen ausgeführt sein, die zur kurzfristigen oder langfristigen Datenspeicherung konfiguriert ist/sind, wie etwa beispielsweise Speichervorrichtungen und -schaltungen, Speicherkarten, Festplatten, Halbleiterfestplatten oder sonstige Datenspeichervorrichtungen. Das Kommunikationssubsystem 130 der Rechenvorrichtung 100 kann als jegliche Kommunikationsschaltung, -vorrichtung oder Sammlung davon ausgeführt sein, die in der Lage ist, Kommunikation zwischen der Rechenvorrichtung 100 und anderen entfernten Vorrichtungen über ein Netzwerk zu ermöglichen. Das Kommunikationssubsystem 130 kann konfiguriert sein, um eine oder mehrere beliebige Kommunikationstechnologie(n) (z.B. verdrahtete oder Drahtloskommunikation) und assoziierte Protokolle (z.B. Ethernet, InfiniBand®, Bluetooth®, Wi-Fi®, WiMAX, ZigBee®, Z-Wave® usw.) zu verwenden, um die Kommunikation durchzuführen.
-
Wie gezeigt, kann die Rechenvorrichtung 100 auch eine oder mehrere periphere Vorrichtungen 132 umfassen. Die peripheren Vorrichtungen 132 können eine beliebige Anzahl an zusätzlichen Eingabe/Ausgabe-Vorrichtungen, Schnittstellen-Vorrichtungen und/oder anderen peripheren Vorrichtungen umfassen. Beispielsweise können die peripheren Vorrichtungen 132 in manchen Ausführungsformen ein/e/n Anzeige, Touchscreen, Graphikschaltung, Tastatur, Maus, Lautsprechersystem, Mikrofon, Netzwerkschnittstelle und/oder sonstige Eingabe/AusgabeVorrichtungen, Schnittstellen-Vorrichtungen und/oder periphere Vorrichtungen umfassen.
-
Unter Bezugnahme auf 2 richtet die Rechenvorrichtung 100 in einer veranschaulichenden Ausführungsform während des Betriebs eine Umgebung 200 ein. Die veranschaulichende Umgebung 200 umfasst einen Kryptographie-Client 202, einen Kryptographie-Treiber 204 und die ECC-Engine 122. Die verschiedenen Bestandteile der Umgebung 200 können ausgeführt sein als Hardware, Firmware, Software oder eine Kombination davon. Somit können in manchen Ausführungsformen einer oder mehrere der Bestandteile der Umgebung 200 als Schaltung oder Sammlung von elektrischen Vorrichtungen (z.B. Kryptographie-Client-Schaltung 202, Kryptographie-Treiberschaltung 204 und/oder ECC-Engine-Schaltung 122) ausgeführt sein. Es ist darauf hinzuweisen, dass in solchen Ausführungsformen eine oder mehrere der Kryptographie-Client-Schaltung 202, der Kryptographie-Treiberschaltung 204 und/oder der ECC-Engine-Schaltung 122 einen Teil von einem oder mehreren des Prozessors 120, des I/O-Subsystems 124 und/oder anderer Bestandteile der Rechenvorrichtung 100 ausbilden kann/können. Darüber hinaus können in manchen Ausführungsformen einer oder mehrere der veranschaulichenden Bestandteile einen Teil eines anderen Bestandteils ausbilden und/oder einer oder mehrere der veranschaulichenden Bestandteile können voneinander unabhängig sein.
-
Der Kryptographie-Client 202 kann ausgeführt sein als ein(e) beliebige(s) Betriebssystem, Bibliothek, Anwendung oder sonstiges durch die Rechenvorrichtung 100 ausgeführtes Computerprogramm, das kryptographische Verfahren unter Verwendung von Elliptische-Kurven-Kryptographie (ECC) durchführt. Beispielsweise kann der Kryptographie-Client 202 als Bibliothek oder Anwendung ausgeführt sein, die ein kryptographisches, ECC-Vorgänge umfassendes Protokoll durchführt, wie etwa ECDSA, ECDH, EPID oder ein sonstiges Protokoll. Um das kryptographische Verfahren durchzuführen, veranlasst der Kryptographie-Client 202 den Kryptographie-Treiber 204, einen oder mehrere kryptographische Vorgänge durchzuführen, wie skalare Elliptische-Kurve-Multiplikation, Elliptische-Kurve-Punkteaddition, Elliptische-Kurve-Punkteverdopplung, Vorrangiges-Feld-Potenzierung, Vorrangiges-Feld-Multiplikation, Vorrangiges-Feld-Addition und/oder Vorrangiges-Feld-Subtraktion. Wie weiter unten beschrieben, ist der Kryptographie-Treiber 204 konfiguriert, um die ECC-Engine 122 so zu programmieren, dass sie die geforderten kryptographischen Vorgänge durchführt.
-
Die ECC-Engine 122 ist konfiguriert, um ein Datenpfad-Selektor-Signal der ECC-Engine 122 zu lesen. Das Datenpfad-Selektor-Signal zeigt eine 256-Bit-Datenbreite oder eine 384-Bit-Datenbreite an. Die ECC-Engine 122 ist weiters konfiguriert, um einen oder mehrere Parameterwerte zu lesen, die Parametern des angeforderten kryptographischen Vorgangs aus einem Datenanschluss der ECC-Engine 122 entsprechen. Jeder Parameter weist eine durch das Datenpfad-Selektor-Signal angezeigte Datenbreite auf. Die ECC-Engine 122 ist weiters konfiguriert, um einen Opcode zu lesen, der den angeforderten kryptographischen Vorgang aus einem Befehlsanschluss der ECC-Engine 122 anzeigt, und den angeforderten kryptographischen Vorgang durchzuführen. Der kryptographische Vorgang weist außerdem eine vom Datenpfad-Selektor-Signal angezeigte Datenbreite auf. In manchen Ausführungsformen kann der Opcode ein Register der ECC-Engine 122 anzeigen, und die ECC-Engine 122 kann den Parameterwert im identifizierten Register speichern. Die ECC-Engine 122 ist weiters konfiguriert, um als Antwort auf die Durchführung des kryptographischen Vorgangs Ergebnisdaten auf den Ausgangsanschluss der ECC-Engine 122 zu schreiben. Die Ergebnisdaten weisen außerdem eine vom Datenpfad-Selektor-Signal angezeigte Datenbreite auf.
-
Der Kryptographie-Treiber 204 ist konfiguriert, um festzustellen, ob ein Beschäftigt-Signal der ECC-Engine 122 eingestellt ist, und dann als Antwort auf die Feststellung, dass das Beschäftigt-Zeichen nicht eingestellt ist, das Datenpfad-Selektor-Signal der ECC-Engine 122 einzustellen. Der Kryptographie-Treiber 204 ist weiters konfiguriert, um als Antwort auf das Einstellen des Datenpfad-Selektor-Signals ein Startsignal der ECC-Engine 122 zu bestätigen. Der Kryptographie-Treiber 204 ist weiters konfiguriert, um als Antwort auf das Bestätigen des Startsignals den Opcode auf den Befehlsanschluss der ECC-Engine 122 zu schreiben und als Antwort auf das Schreiben des Opcodes ein Befehl-gültig-Signal der ECC-Engine 122 zu bestätigen.
-
Die ECC-Engine 122 ist weiters konfiguriert, um festzustellen, ob das Startsignal bestätigt ist, und als Antwort auf die Feststellung, dass das Startsignal bestätigt ist, das Beschäftigt-Signal einzustellen. Die ECC-Engine 122 ist weiters konfiguriert, um als Antwort auf die Feststellung, dass das Startsignal bestätigt ist, festzustellen, ob das Befehl-gültig-Signal bestätigt ist, und als Antwort auf die Feststellung, dass das Befehl-gültig-Signal bestätigt ist, den Opcode zu lesen. Die ECC-Engine 122 ist weiters konfiguriert, um als Antwort auf die Durchführung des kryptographischen Vorgangs das Beschäftigt-Signal zu löschen und als Antwort auf das Löschen des Beschäftigt-Signals ein Vorgang-abgeschlossen-Signal der ECC-Engine 122 zu bestätigen. Der Kryptographie-Treiber 204 ist weiters konfiguriert, um festzustellen, ob das Vorgang-abgeschlossen-Signal der ECC-Engine 122 bestätigt ist, und als Antwort auf die Feststellung, dass das Vorgang-abgeschlossen-Signal der ECC-Engine 122 bestätigt ist, Ergebnisdaten aus dem Ausgangsanschluss der ECC-Engine 122 zu lesen.
-
Unter Bezugnahme auf 3, veranschaulicht das Diagramm 300 eine potenzielle Ausführungsform von verschiedenen Bestandteilen der ECC-Engine 122. Wie gezeigt, kann die ECC-Engine 122 eine Ausführungssteuerung 302, mehrere Ausführungsressourcen 304 und Register 314 umfassen. Die Ausführungsressourcen 304 umfassen veranschaulichenderweise eine Punktemultiplikationseinheit 306, eine Punkteadditions-/-verdopplungseinheit 308, eine p-Potenzierungseinheit 310 und eine p-Multiplikations-Additions-Subtraktions- (p-MAS-) Einheit 312. Jede der Ausführungsressourcen 304 kann Daten aus dem Register 314 laden und darauf speichern. Darüber hinaus lassen sich Daten direkt zwischen bestimmten Ausführungsressourcen 304 übertragen. Insbesondere kann die Punktemultiplikationseinheit 306 Daten für die Punkteadditions-/-verdopplungseinheit 308, die p-Potenzierungseinheit 310 und die p-MAS-Einheit 312 bereitstellen; kann die Punkteadditions-/- verdopplungseinheit 308 Daten für die p-MAS-Einheit 312 bereitstellen; und kann die p-Potenzierungseinheit 310 Daten für die p-MAS-Einheit 312 bereitstellen.
-
Die Ausführungssteuerung 302 ist konfiguriert, um Befehle, die der ECC-Engine 122 bereitgestellt werden, zu entschlüsseln und entsprechende interne Steuersignale zu generieren. Wie weiter unten beschrieben, kann die Ausführungssteuerung 302 für bestimmte Vorgänge Eingabedaten von affinen Koordinaten (d.h. x- und y-Koordinaten) in Jacobi-Projektionskoordinaten konvertieren. Die Ausführungssteuerung 302 aktiviert entsprechende Ausführungsressourcen 304, um den aktuellen Befehl auszuführen. Nach der Ausführung kann die Ausführungssteuerung 302 die Jacobi-Projektionskoordinaten in affine Koordinaten zurückkonvertieren. Die Ausführungssteuerung 302 ist konfiguriert, um Ergebnisdaten auf einem oder mehreren Datenausgangsanschlüssen auszugeben und dem Kryptographie-Treiber 204 zu signalisieren, dass Ergebnisse bereit sind.
-
Die Punktemultiplikationseinheit 306 ist konfiguriert, um den Skalarmultiplikationsvorgang [d]P zu berechnen, wobei d ein Skalarwert und P ein Punkt auf der elliptischen Kurve ist. Die Punktemultiplikationseinheit 306 kann den Skalarmultiplikationsvorgang, wenn ein Parameter λ null ist, unter Verwendung eines binären Links-nach-rechts-Verdopplungs-und-Additions-Verfahrens oder, wenn der Parameter λ nichtnull ist, unter Verwendung eines Montgomery-Leiter-Verfahrens durchführen.
-
Die Punkteadditions-/-verdopplungseinheit 308 ist konfiguriert, um den Punkteadditionsvorgang A + B und den Punkteverdopplungsvorgang 2A auszuführen, wobei A und B beides Punkte auf der elliptischen Kurve sind. Die Punkteadditions-/-verdopplungseinheit 308 kann die Vorgänge A + B und 2A basierend auf einer standardmäßigen Projektiver-Jacobi-Koordinatenpunkt-Additionsformel durchführen. In manchen Ausführungsformen kann die Punkteadditions-/-verdopplungseinheit 308 für bestimmte elliptische Kurven Speedups für den Vorgang 2A bereitstellen, indem sie verschiedene Vorgänge basierend auf dem Wert eines Kurvenparameters a durchführt. Beispielsweise kann die Punkteadditions-/-verdopplungseinheit 308, wenn a null ist, den Vorgang 2A mit sechs Vorrangiges-Feld-Multiplikationsvorgängen durchführen; kann die Punkteadditions-/-verdopplungseinheit 308, wenn a drei ist, den Vorgang 2A mit acht Vorrangiges-Feld-Multiplikationsvorgängen durchführen; und kann die Punkteadditions-/-verdopplungseinheit 308, wenn a nicht null und nicht drei ist, den Vorgang 2A mit 10 Vorrangiges-Feld-Multiplikationsvorgängen durchführen.
-
Die p-Potenzierungseinheit 310 ist konfiguriert, um Vorrangiges-Feld-Potenzierung ab (mod p) mit Taktgebung und einfachem Schutz vor Leistung/elektromagnetischer Strahlung zu berechnen. Auf ähnliche Weise ist die p-MAS-Einheit 312 konfiguriert, um Vorrangiges-Feld-Multiplikation a · b (mod p), Vorrangiges-Feld-Addition a + b (mod p) und Vorrangiges-Feld-Subtraktion a - b (mod p) mit Taktgebung und einfachem Schutz vor Leistung/elektromagnetischer Strahlung zu berechnen.
-
Unter Bezugnahme auf 4 veranschaulicht das Diagramm 400 eine potenzielle Ausführungsform des Registers 314 und verschiedene Eingabe-/Ausgabesignale, Leitungen, Pins, Busse oder sonstige durch die ECC-Engine 122 bereitgestellte Schnittstellenverbindungen. Wie weiter unten beschrieben, kann durch den Prozessor 120 ausgeführte Software und/oder Firmware die ECC-Engine 122 steuern, indem sie Daten und/oder Steuersignale der ECC-Engine 122 liest und schreibt.
-
Wie gezeigt, umfasst die ECC-Engine 122 acht Register 314. Jedes der Register 314 ist 384 Bits breit. Wie weiter unten beschrieben, kann die ECC-Engine 122 programmiert sein, um alle 384 Bits jedes Registers 314 für 384-Bit-Vorgänge zu verwenden, oder programmiert sein, um die am wenigsten bedeutenden 256 Bits jedes Registers 314 für 256-Bit-Vorgänge zu verwenden. Jedes der Register 314 kann durch den Prozessor 120 bereitgestellte Parameterdaten sowie durch die ECC-Engine 122 generierte Zwischendaten und Ergebnisdaten speichern. Wie in 4 gezeigt, umfassen die Register 314 ein rox-Register 402, ein roy-Register 404, ein d/r1x-Register 406, ein λ/r1y-Register 408, ein p-Register 410, ein a-Register 412, ein roz-Register 414 und ein r1z-Register 416. Die Semantik jedes Registers 314 kann vom jeweiligen durch die ECC-Engine 122 ausgeführten kryptographischen Vorgang abhängen und ist weiter unten beschrieben. Natürlich kann in manchen Ausführungsformen die ECC-Engine 122 zusätzlich zu dem in 4 gezeigten Top-Level-Register 314 zusätzliche Register umfassen, die nicht gezeigt sind.
-
Die ECC-Engine 122 umfasst einen Dateneingangsanschluss 418 und ein Daten-Ein-gültig-Signal 420. Der Dateneingangsanschluss kann 384 gesonderte Signale, Leitungen, Bits, Pins oder sonstige Schnittstellenverbindungen umfassen. Wie weiter unten beschrieben, kann der Prozessor 120 Parameterdaten, die in einem der Register 314 zu speichern sind, auf den Dateneingangsanschluss 418 schreiben. Der Prozessor 120 kann das Daten-Ein-gültig-Signal 420 einstellen, um anzuzeigen, dass sich gültige Daten auf dem Dateneingangsanschluss 418 befinden.
-
Die ECC-Engine 122 umfasst einen Datenausgangsanschluss 422 und einen Datenausgangsanschluss 424. Jeder der Datenausgangsanschlüsse 422, 424 kann 384 gesonderte Signale, Leitungen, Bits, Pins oder sonstige Schnittstellenverbindungen umfassen. Wie weiter unten beschrieben, kann die ECC-Engine 122 Ausgabedaten aus einem ECC-Vorgang auf einen oder mehrere der Datenausgangsanschlüsse 422, 424 schreiben. Beispielsweise kann die ECC-Engine 122 die x-, y-Koordinaten eines Punkts C jeweils auf die Datenausgangsanschlüsse 422, 424 schreiben. Die ECC-Engine 122 umfasst weiters ein Daten-Aus-gültig-Signal 430. Die ECC-Engine 122 kann das Daten-Aus-gültig-Signal 430 einstellen, um anzuzeigen, dass sich gültige Daten auf den Datenausgangsanschlüssen 422, 424 befinden.
-
Die ECC-Engine 122 umfasst ein ECC-beschäftigt-Signal 426 und ein ECC-fertig-Signal 428. Die ECC-Engine 122 kann das ECC-beschäftigt-Signal 426 einstellen, um anzuzeigen, dass es gerade einen kryptographischen Vorgang verarbeitet und der Prozessor 120 keinen neuen kryptographischen Vorgang einleiten soll. Die ECC-Engine 122 kann einen Impuls auf dem ECC-fertig-Signal 428 bestätigen, um anzuzeigen, dass der kryptographische Vorgang abgeschlossen ist. Wie weiter unten beschrieben, kann der Prozessor 120 Ergebnisdaten aus den Datenausgangsanschlüssen 422, 424 lesen, nachdem das ECC-fertig-Signal 428 bestätigt wurde. Die ECC-Engine 122 umfasst weiters ein Taktsignal 432 und ein asynchrones Rücksetz-Signal 434.
-
Wie gezeigt, umfasst die ECC-Engine 122 ein Datenpfad-Selektor-Signal 436. Wie weiters unten beschrieben, kann der Prozessor 120 das Datenpfad-Selektor-Signal 436 einstellen, um die ECC-Engine 122 darauf zu programmieren, 384-Bit-kryptographische Vorgänge auf 384-Bit-Daten durchzuführen, oder das Datenpfad-Selektor-Signal 436 löschen, um die ECC-Engine 122 darauf zu programmieren, 256-Bit-kryptographische Vorgänge auf 256-Bit-Daten durchzuführen.
-
Die ECC-Engine 122 umfasst weiters ein ECC-Startsignal 438, ein Befehl-gültig-Signal 440 und einen Befehlsanschluss 442. Wie weiter unten beschrieben, kann der Prozessor 120 einen Impuls auf dem ECC-Startsignal 438 bestätigen, um zu bewirken, dass die ECC-Engine 122 beginnt, einen neuen kryptographischen Vorgang zu verarbeiten. Wie oben beschrieben, kann die ECC-Engine 122 das ECC-beschäftigt-Signal 426 einstellen, nachdem das ECC-Startsignal 438 bestätigt wurde. Der Prozessor 120 kann einen Befehls-Opcode auf den Befehlsanschluss 442 schreiben. Wie weiter unten beschrieben, kann der Befehls-Opcode ein mit Daten zu füllendes Register 314 oder einen durchzuführenden kryptographischen Vorgang identifizieren. Der Prozessor 120 kann außerdem einen Impuls auf dem Befehl-gültig-Signal 440 bestätigen, wenn ein gültiger Befehls-Opcode auf den Befehlsanschluss 442 geschrieben wurde. Wie weiter unten beschrieben, kann die ECC-Engine 122 als Antwort auf die Bestätigung des Befehl-gültig-Signals 440 Daten in das spezifizierte Register 314 lesen oder den spezifizierten kryptographischen Vorgang durchführen.
-
Unter Bezugnahme auf 5 kann die Rechenvorrichtung 100 im Gebrauch ein Verfahren 500 zum Antreiben der ECC-Engine 122 ausführen. Es ist darauf hinzuweisen, dass in manchen Ausführungsformen die Vorgänge des Verfahrens 500 durch einen oder mehrere Bestandteile der Umgebung 200 der Rechenvorrichtung 100 wie in 2 gezeigt durchgeführt werden können. Beispielsweise kann das Verfahren 500 durch den Kryptographie-Treiber 204, der als durch den Prozessor 120 ausgeführte Software, Firmware und/oder Mikrokode ausgeführt sein kann, ausgeführt werden. Das Verfahren 500 beginnt mit Block 502, in dem die Rechenvorrichtung 100 feststellt, ob die ECC-Engine 122 beschäftigt ist. Die Rechenvorrichtung 100 kann beispielsweise das ECC-beschäftigt-Signal 426 der ECC-Engine 122 lesen und feststellen, ob das ECC-beschäftigt-Signal 426 eingestellt ist. Wenn die ECC-Engine 122 beschäftigt ist, kehrt das Verfahren 500 zurück zu Block 502, um weiter auf die ECC-Engine 122 zu warten. Wenn die ECC-Engine 122 nicht beschäftigt ist, geht das Verfahren 500 über zu Block 504.
-
In Block 504 stellt die Rechenvorrichtung 100 das 256-Bit/384-Bit-Datenpfad-Selektor-Signal 436 der ECC-Engine 122 entsprechend der gewünschten Bitbreite für den kryptographischen ECC-Vorgang ein. Beispielsweise kann der Prozessor 120 das Datenpfad-Selektor-Signal 436 einstellen, um die ECC-Engine 122 darauf zu programmieren, 384-Bit-kryptographische Vorgänge auf 384-Bit-Daten durchzuführen, oder das Datenpfad-Selektor-Signal 436 löschen, um die ECC-Engine 122 darauf zu programmieren, 256-Bit-kryptographische Vorgänge auf 256-Bit-Daten durchzuführen. Natürlich kann in manchen Ausführungsformen die Richtung des Datenpfad-Selektor-Signals 436 umgekehrt sein. Die Bitbreite von verschiedenen Parametern und die Ergebnisdaten hängen somit vom Wert des Datenpfad-Selektor-Signals 436 ab.
-
In Block 506 bestätigt die Rechenvorrichtung 100 das Startsignal 438 der ECC-Engine 122. Beispielsweise kann der Prozessor 120 einen Impuls auf dem Startsignal 438 bestätigen. Wie weiter unten in Verbindung mit 6 beschrieben, beginnt die ECC-Engine 122 als Antwort auf die Bestätigung eines Impulses auf dem Startsignal 438 mit der Verarbeitung eines ECC-Vorgangs.
-
In Block 508 schreibt die Rechenvorrichtung 100 einen Parameterwert auf den Dateneingangsanschluss 418 der ECC-Engine 122. Die Rechenvorrichtung 100 kann abhängig vom Wert des Datenpfad-Selektor-Signals 436 entweder einen 384-Bit-Wert auf den Dateneingangsanschluss 418 oder einen 256-Bit-Wert auf die am wenigsten bedeutenden 256 Bits des Dateneingangsanschlusses 418 schreiben. Die Rechenvorrichtung 100 stellt ferner das Daten-Ein-gültig-Signal 420 ein, um anzuzeigen, dass gültige Daten auf den Dateneingangsanschluss 418 geschrieben wurden. Die Rechenvorrichtung 100 kann einen beliebigen des einen oder der mehreren erforderlichen Parameter(s) des durch die ECC-Engine 122 durchzuführenden ECC-Vorgangs schreiben. Insbesondere kann der Parameterwert einem beliebigen der in 4 gezeigten Register 402 bis 412 entsprechen. Beispielsweise kann der Parameter einer x- oder y-Koordinate des Punkts A oder B, einem Operanden a oder b eines Vorrangiges-Feld-Vorgangs, einem Skalarwert d, einem Seitenkanal-Angriffswiderstandsparameter λ, einem Primmodul p oder einem Kurvenparameter a entsprechen. Es ist zu beachten, dass in der veranschaulichenden Ausführungsform das roz-Register 414 und das r1z-Register 416 nicht durch vom Prozessor 120 ausgeführte Software geschrieben werden können.
-
In Block
510 schreibt die Rechenvorrichtung
100 einen Opcode auf den Befehlsanschluss
442 der ECC-Engine
122, der das Register
402 bis
412 identifiziert, welches die auf den Dateneingangsanschluss
418 zu schreibenden Daten speichert. Jeder der Opcodes kann als 4-Bit-Binärwert ausgeführt sein, der einen bestimmten durch die ECC-Engine
122 auszuführenden Befehl identifiziert. Tabelle 1 weiter unten umfasst eine potenzielle Ausführungsform gültiger Opcodes und ihrer assoziierten Anweisungen. Wie gezeigt, identifizieren Opcodes
0001 bis
0110 Schreibbefehle, die bewirken, dass die ECC-Engine
122 auf die entsprechenden Register
402 bis
412 schreibt. Beispielsweise ist Opcode
0001 ein Schreibbefehl für das rox-Register 402, Opcode
0010 ein Schreibbefehl für das roy-Register 404 und so weiter. Nach dem Schreiben des Opcodes auf den Befehlsanschluss
442 bestätigt in Block 512 die Rechenvorrichtung
100 das Befehl-gültig-Signal 440 der ECC-Engine
122. Beispielsweise kann der Prozessor
120 einen Impuls auf dem Befehl-gültig-Signal 440 bestätigen. Wie weiter unten beschrieben, kann die ECC-Engine
122 als Antwort auf die Bestätigung des Befehl-gültig-Signals 440 die Parameterdaten aus dem Dateneingangsanschluss 418 lesen und diese Daten in einem Register speichern, das durch den auf den Befehlsanschluss 442 geschriebenen Opcode identifiziert ist.
Tabelle 1. Gültige Opcodes und assoziierte Anweisungen für ECC-Engine-Befehle.
Opcode | Anweisung | Kommentar |
0001 | r0x schreiben | EC-Vorgänge: x-Koordinate von Punkt A |
Fp-Vorgänge: erster Operand a |
0010 | r0y schreiben | EC-Vorgänge: y-Koordinate von Punkt A |
Fp-Vorgänge: zweiter Operand b |
0011 | d/r1x schreiben | [d]A: Skalarwert d A + B: x-Koordinate von Punkt B |
0100 | λ/r1y schreiben | [d]A: Seitenkanal-Angriffswiderstandsparameter λ |
A + B: y-Koordinate von Punkt B |
0101 | p schreiben | Primmodul p |
0110 | a schreiben | Kurvenparameter a |
0111 | Reserviert | |
1000 | [d]A | Elliptische- Kurve-Skalarmultiplikationsvorgang |
1001 | A + B | Elliptische-Kurve-Punkteadditionsvorgang (A, B ≠ 0, A ≠ -B) |
1010 | 2A | Elliptische-Kurve-Punkteverdopplungsvorgang (A ≠ 0) |
1011 | ab (mod p) | Fp-Potenzierungsvorgang (Anm., a-1 = ap-1 (mod p)) |
1100 | a · b (mod p) | Fp-Multiplikationsvorgang |
1101 | a + b (mod p) | Fp-Additionsvorgang |
1110 | a - b (mod p) | Fp-Subtraktionsvorgang |
1111 | Reserviert | |
-
In Block 514 bestimmt die Rechenvorrichtung 100, ob zusätzliche Parameter für den durchzuführenden ECC-Vorgang in die ECC-Engine 122 geladen werden sollen. Wenn zusätzlichen Parameter übrig sind, kehrt das Verfahren 500 zurück zu Block 508, um die verbleibenden Parameter zu laden. Wenn keine zusätzlichen Parameter übrig sind, geht das Verfahren 500 über zu Block 516.
-
In Block 516 schreibt die Rechenvorrichtung 100 den Opcode für den durchzuführenden ECC-Vorgang auf den Befehlsanschluss 442 der ECC-Engine 122. Tabelle 1 weiter oben umfasst eine potenzielle Ausführungsform gültiger Opcodes und ihrer assoziierten Anweisungen. Insbesondere kann die Rechenvorrichtung 100 einen Opcode für einen Elliptische-Kurve-Vorgang schreiben, wie etwa den Opcode 1000 für Elliptische-Kurve-Skalarmultiplikation, den Opcode 1001 für Elliptische-Kurve-Punkteaddition oder den Opcode 1010 für Elliptische-Kurve-Punkteverdopplung. Alternativ dazu kann die Rechenvorrichtung 100 einen Opcode für einen arithmetischen Vorrangiges-Feld-Vorgang schreiben, wie etwa den Opcode 1011 für Vorrangiges-Feld-Potenzierung, den Opcode 1100 für Vorrangiges-Feld-Multiplikation, den Opcode 1101 für Vorrangiges-Feld-Addition oder den Opcode 1110 für Vorrangiges-Feld-Subtraktion. In Block 518 bestätigt die Rechenvorrichtung 100 das Befehl-gültig-Signal 440 der ECC-Engine 122. Beispielsweise kann der Prozessor 120 einen Impuls auf dem Befehl-gültig-Signal 440 bestätigen. Wie weiter unten beschrieben, führt die ECC-Engine 122 als Antwort auf die Bestätigung des Befehl-gültig-Signals 440 den ECC-Vorgang durch, der durch den auf den Befehlsanschluss 442 geschriebenen Opcode spezifiziert ist. Die ECC-Engine 122 kann basierend auf dem Datenpfad-Selektor-Signal 436 einen 384-Bit-Vorgang oder einen 256-Bit-Vorgang durchführen.
-
In Block 520 stellt die Rechenvorrichtung 100 fest, ob die ECC-Engine 122 die Verarbeitung des ECC-Vorgangs abgeschlossen hat. Beispielsweise kann der Prozessor 120 auf einen durch die ECC-Engine 122 zu bestätigenden Impuls auf dem ECC-fertig-Signal 428 warten. Wenn die ECC-Engine 122 die Verarbeitung des ECC-Vorgangs nicht abgeschlossen hat, kehrt das Verfahren 500 zurück zu Block 520, um weiter auf die ECC-Engine 122 zu warten. Wenn der ECC-Vorgang fertig ist, geht das Verfahren 500 über zu Block 522.
-
In Block 522 liest die Rechenvorrichtung 100 Ergebnisdaten aus einem oder mehreren der Datenausgangsanschlüsse 422, 424 der ECC-Engine 122. Die Rechenvorrichtung 100 kann die Ergebnisdaten nur lesen, wenn das Daten-Aus-gültig-Signal 430 der ECC-Engine 122 eingestellt ist. Die jeweiligen durch die Rechenvorrichtung 100 gelesenen Daten können vom durchgeführten ECC-Vorgang abhängen. Beispielsweise kann die Rechenvorrichtung 100 für Elliptische-Kurve-Vorgänge die x-Koordinate eines Ergebnispunkts aus dem Datenausgangsanschluss 422 und die y-Koordinate des Ergebnispunkts aus dem Datenausgangsanschluss 424 lesen. Als weiteres Beispiel kann die Rechenvorrichtung 100 für einen Vorrangiges-Feld-Vorgang einen Ergebniswert aus dem Datenausgangsanschluss 422 lesen. Die Rechenvorrichtung 100 kann abhängig vom Wert des Datenpfad-Selektor-Signals 436 384-Bit-Ergebnisdaten oder 256-Bit-Ergebnisdaten lesen. Nach dem Lesen der Ergebnisdaten kehrt das Verfahren 500 zurück zu Block 502, um einen weiteren ECC-Vorgang durchzuführen.
-
Unter Bezugnahme auf 6 kann die Rechenvorrichtung 100 im Gebrauch ein Verfahren 600 zur ECC-Hardware-Beschleunigung ausführen. Es ist darauf hinzuweisen, dass in manchen Ausführungsformen die Vorgänge des Verfahrens 600 durch einen oder mehrere Bestandteile der Umgebung 200 der Rechenvorrichtung 100 wie in 2 gezeigt durchgeführt werden können, wie etwa die ECC-Engine 122. Das Verfahren 600 beginnt mit Block 602, in dem die ECC-Engine 122 über einen auf dem Startsignal 438 der ECC-Engine 122 bestätigten Impuls wacht. Wie oben beschrieben, kann durch den Prozessor 120 ausgeführte Software und/oder Firmware einen Impuls auf dem Startsignal 438 bestätigen, um mit der Verarbeitung eines ECC-Vorgangs zu beginnen. Wenn kein Impuls detektiert wird, kehrt das Verfahren 600 zurück zu Block 602, um das Startsignal 438 weiter zu überwachen. Wenn ein Impuls detektiert wird, geht das Verfahren 600 über zu Block 604.
-
In Block 604 stellt die ECC-Engine 122 das Beschäftigt-Signal 426 ein. Das Beschäftigt-Signal 426 zeigt an, dass die ECC-Engine 122 gerade einen ECC-Vorgang verarbeitet. Wie oben beschrieben, kann durch die Rechenvorrichtung 100 ausgeführte Software und/oder Firmware warten, bis das Beschäftigt-Signal 426 gelöscht wird, bevor ein weiterer ECC-Vorgang begonnen wird.
-
In Block 606 liest die ECC-Engine 122 das 256-Bit/384-Bit-Datenpfad-Selektor-Signal 436 und aktiviert den ausgewählten Datenpfad. Wie oben beschrieben kann der Prozessor 120 das Datenpfad-Selektor-Signal 436 einstellen, um die ECC-Engine 122 darauf zu programmieren, 384-Bit-kryptographische Vorgänge auf 384-Bit-Daten durchzuführen, oder das Datenpfad-Selektor-Signal 436 löschen, um die ECC-Engine 122 darauf zu programmieren, 256-Bit-kryptographische Vorgänge auf256-Bit-Daten durchzuführen.
-
In Block 608 wacht die ECC-Engine 122 über einen auf dem Befehl-gültig-Signal 440 bestätigten Impuls. Wie oben beschrieben, kann durch den Prozessor 120 ausgeführte Software und/oder Firmware einen Impuls auf dem Befehl-gültig-Signal 440 bestätigen, nachdem ein Befehl, Daten in ein Register zu schreiben oder einen ECC-Vorgang durchzuführen, auf den Befehlsanschluss 442 geschrieben wurde. Wenn kein Impuls detektiert wird, kehrt das Verfahren 600 zurück zu Block 608, um das Befehl-gültig-Signal 440 weiter zu überwachen. Wenn ein Impuls detektiert wird, geht das Verfahren 600 über zu Block 610.
-
In Block 610 liest die ECC-Engine 122 einen Befehls-Opcode aus dem Befehlsanschluss 442. Wie oben beschrieben, ist der Opcode veranschaulichenderweise als 4-Bit-Wert ausgeführt, der einen durch die ECC-Engine 122 durchzuführenden Befehl identifiziert. Gültige Opcodes sind oben in Tabelle 1 angeführt. In Block 612 stellt die ECC-Engine 122 fest, ob der Opcode einen Schreibbefehl identifiziert, der einem Register 314 entspricht. Beispielsweise kann die ECC-Engine 122 in der illustrativen Ausführungsform feststellen, ob der Opcode zwischen einschließlich 0001 und 0110 ist. Wenn der Opcode keinen Schreibbefehl identifiziert, zweigt das Verfahren 600 weiter zu Block 618 ab, wie unten beschrieben. Wenn der Opcode einen Schreibbefehl identifiziert, geht das Verfahren 600 über zu Block 614.
-
In Block 614 liest die ECC-Engine 122 Parameterdaten aus dem Dateneingangsanschluss 418. Die ECC-Engine 122 kann die Parameterdaten nur lesen, wenn das Daten-Ein-gültig-Signal 420 eingestellt ist. Zusätzlich oder alternativ dazu kann in manchen Ausführungsformen die ECC-Engine 122 die Parameterdaten als Antwort auf die Bestätigung eines Impulses auf dem Daten-Ein-gültig-Signal 420 lesen. Die ECC-Engine 122 kann abhängig vom Wert des Datenpfad-Selektor-Signals 436 384-Bits von Daten oder 256-Bits von Daten aus dem Dateneingangsanschluss 418 lesen. In Block 616 speichert die ECC-Engine 122 die aus dem Dateneingangsanschluss 418 gelesenen Daten in das durch den Schreibbefehl spezifizierte Register 314. Beispielsweise speichert die ECC-Engine 122 die Daten für den Opcode 0001 in das r0x-Register 402; für den Opcode 0010 speichert die ECC-Engine 122 die Daten in das r0y-Register 404 und so weiter. Nach dem Speichern der Daten kehrt das Verfahren 600 zurück zu Block 608, um das Befehl-gültig-Signal 440 weiter zu überwachen. Wie oben in Verbindung mit 5 beschrieben, kann die durch den Prozessor 120 ausgeführte Software und/oder Firmware zusätzliche Schreibbefehle durchführen, um Parameterdaten in jedes der durch den jeweiligen durchzuführenden ECC-Vorgang verwendeten Register 314 zu schreiben.
-
Zurück zu Block 612, zweigt das Verfahren 600, wenn der Befehls-Opcode nicht einen Schreibbefehl identifiziert, weiter zu Block 618 ab, in dem die ECC-Engine 122 feststellt, ob der Befehls-Opcode einen Elliptische-Kurve-Befehl identifiziert. Wie in Tabelle 1 oben gezeigt, umfassen Opcodes für Elliptische-Kurve-Vorgänge den Opcode 1000 für Elliptische-Kurve-Skalarmultiplikation, den Opcode 1001 für Elliptische-Kurve-Punkteaddition und den Opcode 1010 für Elliptische-Kurve-Punkteverdopplung. Wenn der Befehls-Opcode nicht einen Schreibbefehl oder einen Elliptische-Kurve-Befehl identifiziert, dann identifiziert der Befehls-Opcode, wie in Tabelle 1 gezeigt, einen arithmetischen Vorrangiges-Feld-Befehl, wie etwa den Opcode 1011 für Vorrangiges-Feld-Potenzierung, den Opcode 1100 für Vorrangiges-Feld-Multiplikation, den Opcode 1101 für Vorrangiges-Feld-Addition und den Opcode 1110 für Vorrangiges-Feld-Subtraktion. Es sei darauf hingewiesen, dass das Verhalten der ECC-Engine 122 in Bezug auf reservierte oder undefinierte Opcodes in 6 nicht gezeigt ist.
-
Wenn der Befehls-Opcode nicht einen Elliptische-Kurve-Befehl identifiziert (d.h. der Befehls-Opcode identifiziert einen arithmetischen Vorrangiges-Feld-Befehl), zweigt das Verfahren 600 weiter zu Block 620 ab. In Block 620 führt die ECC-Engine 122 den spezifizierten Vorrangiges-Feld-Vorgang unter Verwendung der Ausführungsressourcen 304 der ECC-Engine 122 aus. Beispielsweise kann die Ausführungssteuerung 302 verschiedene interne Steuersignale bestätigen, um zu bewirken, dass die p-Potenzierungseinheit 310 und/oder die p-MAS-Einheit 312 den durch den Befehls-Opcode spezifizierten arithmetischen Vorrangiges-Feld-Vorgang durchführen. Die Ausführungsressourcen 304 können Zwischendaten und/oder Ergebnisdaten in einem oder mehreren der Register 314 speichern. Nach Durchführung des Vorrangiges-Feld-Befehls geht das Verfahren 600 über zu Block 624, wie weiter unten beschrieben.
-
Zurück zu Block 618, zweigt das Verfahren 600, wenn der Befehls-Opcode einen Elliptische-Kurve-Befehl identifiziert, weiter zu Block 622 ab, in dem die ECC-Engine 122 den spezifizierten Elliptische-Kurve-Vorgang unter Verwendung von Ausführungsressourcen 304 der ECC-Engine 122 durchführt. Die ECC-Engine 122 kann den Elliptische-Kurve-Vorgang unter Verwendung eines Ausmaßes an Seitenkanal-Angriffsschutz durchführen, das durch den im λ/r1y-Register 408 gespeicherten Parameter λ spezifiziert ist. Beispielsweise kann die ECC-Engine 122, wenn das λ/r1y-Register 408 gleich null ist, den Vorgang ohne Seitenkanal-Angriffsschutz durchführen, was eine verbesserte Leistungsfähigkeit bereitstellen und für Funktionen, die keinen privaten Schlüssel beinhalten, geeignet sein kann (z.B. die ECDSA-Verify-Function). Führt man dieses Beispiel fort, kann die ECC-Engine 122, wenn das λ/r1y-Register 408 gleich eins ist, den Vorgang mit Einfach-Seitenkanalschutz durchführen, und wenn das λ/r1y-Register 408 ein Zufallswert größer als eins ist, kann die ECC-Engine 122 den Vorgang mit Differential-Seitenkanalschutz durchführen. Eine potenzielle Ausführungsform eines Verfahrens zur Durchführung des Elliptische-Kurve-Befehls mit konfigurierbarem Seitenkanalschutz ist weiter unten in Verbindung mit 7 beschrieben. Nach Durchführung des Elliptische-Kurve-Befehls geht das Verfahren 700 über zu Block 624.
-
In Block 624 gibt die ECC-Engine 122 Daten auf einem oder mehreren der Datenausgangsanschlüsse 422, 424 aus und stellt das Daten-Aus-gültig-Signal 430 ein. Beispielsweise kann die ECC-Engine 122 Daten aus einem oder mehreren der Register 314 auf die Datenausgangsanschlüsse 422, 424 kopieren. Die jeweilige Datenausgabe hängt vom Befehl ab, der durch die ECC-Engine 122 durchgeführt wurde. Beispielsweise kann die ECC-Engine 122 für Elliptische-Kurve-Befehle (z.B. die Opcodes 1000, 1001 und 1010) die x-Koordinate eines Ergebnispunkts an den Datenausgangsanschluss 422 und die y-Koordinate des Ergebnispunkts an den Datenausgangsanschluss 424 ausgeben. Für Vorrangiges-Feld-Befehle (z.B. die Opcodes 1011, 1100, 1101 und 1110) kann die ECC-Engine 122 einen Wert an den Datenausgangsanschluss 422 ausgeben. Die ECC-Engine 122 kann abhängig vom Datenpfad-Selektor-Signal 436 384-Bit-Daten oder 256-Bit-Daten ausgeben.
-
In Block 626 löscht die ECC-Engine 122 das Beschäftigt-Signal 426. Löschen des Beschäftigt-Signals zeigt an, dass die ECC-Engine 122 bereit für die Verarbeitung eines weiteren ECC-Vorgangs ist. In Block 628 bestätigt die ECC-Engine 122 einen Impuls auf dem ECC-fertig-Signal 428. Wie oben beschrieben, kann durch den Prozessor 120 ausgeführte Software und/oder Firmware nach Bestätigung des ECC-fertig-Signals 428 die Ergebnisse aus den Datenausgangsanschlüssen 422, 424 lesen. Nach Bestätigung des ECC-fertig-Signals 428 kehrt das Verfahren 600 zurück zu Block 602, um über zusätzliche ECC-Vorgänge zu wachen.
-
Unter Bezugnahme auf 7 kann die Rechenvorrichtung 100 im Gebrauch ein Verfahren 700 ausführen, um einen ECC-Befehl mit konfigurierbarem Seitenkanalschutz durchzuführen. Es ist darauf hinzuweisen, dass in manchen Ausführungsformen die Vorgänge des Verfahrens 700 durch einen oder mehrere Bestandteile der Umgebung 200 der Rechenvorrichtung 100 wie in 2 gezeigt durchgeführt werden können, wie etwa die ECC-Engine 122. Insbesondere kann das Verfahren 700 in Verbindung mit dem Block 622 von 6, wie oben beschrieben, durchgeführt werden. Das Verfahren 700 beginnt mit Block 702, in dem die ECC-Engine 122 feststellt, ob der spezifizierte ECC-Befehl Elliptische-Kurve-Skalarmultiplikation [d]A, angezeigt durch den Opcode 1000, ist. Wenn dies der Fall ist, zweigt das Verfahren 700 weiter ab zu Block 706, wie unten beschrieben. Wenn der spezifizierte ECC-Befehl nicht Skalarmultiplikation ist, geht das Verfahren 700 über zu Block 704. In Block 704 führt die ECC-Engine 122 den ausgewählten ECC-Vorgang unter Verwendung von Ausführungsressourcen der ECC-Engine 122 durch. Beispielsweise kann die Ausführungssteuerung 302 verschiedene interne Steuersignale bestätigen, um zu bewirken, dass die Punkteadditions-/-verdopplungseinheit 308 und/oder die p-MAS-Einheit 312 den durch den Befehls-Opcode spezifizierten Elliptische-Kurve-Vorgang (z.B. Elliptische-Kurve-Punkteaddition A + B für den Opcode 1001 oder Elliptische-Kurve-Punkteverdopplung 2A für den Opcode 1010) durchführt. Die Ausführungsressourcen 304 können Zwischendaten und/oder Ergebnisdaten in einem oder mehreren der Register 314 speichern. Nach Durchführung des Elliptische-Kurve-Vorgangs geht das Verfahren 700 über zu Block 718, wie unten beschrieben.
-
Zurück zu Block 702 zweigt das Verfahren 700, wenn der ECC-Befehl Skalarmultiplikation ist, weiter zu Block 706 ab, in dem die ECC-Engine 122 feststellt, ob der im λ/r1y-Register 408 gespeicherte Parameter λ größer als eins ist. Beispielsweise kann der Parameter λ eine Zufallszahl größer als eins sein, die durch Software und/oder Firmware des Prozessors 120 bereitgestellt ist.
-
Wenn der Parameter λ nicht größer als eins ist (d.h. wenn λ null oder eins ist), zweigt das Verfahren 700 zu Block 708 ab, in dem die ECC-Engine 122 affine Koordinaten in Jacobi-Projektionskoordinaten konvertiert. Affine Koordinaten können die Punkte A und/oder B unter Verwendung von x- und y-Werten, die der Elliptische-Kurve-Gleichung entsprechen, beschreiben. Konvertieren der affinen Koordinaten in Jacobi-Projektionskoordinaten projiziert diese Punkte in ein unterschiedliches, aber äquivalentes Koordinatensystem. Die ECC-Engine 122 kann die affinen Koordinaten aus dem Register 314 lesen und dann die Jacobi-Projektionskoordinaten zurück in das Register 314 speichern. Beispielsweise können affine Koordinaten für den Punkt A im rox-Register 402 und im roy-Register 404, und die für den Punkt B im d/r1x-Register 406 und im λ/r1y-Register 408 gespeichert werden. Jacobi-Projektionskoordinaten für den Punkt A können im r0x-Register 402, dem r0y-Register 404 und dem r0z-Register 414 gespeichert werden, und die für Punkt B können im d/r1x-Register 406, dem λ/r1y-Register 408 und dem r1z-register 416 gespeichert werden. Nach Generieren der Jacobi-Projektionskoordinaten geht das Verfahren 700 über zu Block 712, wie weiter unten beschrieben.
-
Zurück zu Block 706, zweigt das Verfahren 700, wenn der Parameter λ größer als eins ist, zu Block 710 ab, in dem die ECC-Engine 122 die Jacobi-Projektionskoordinaten in randomisierte Jacobi-Projektionskoordinaten konvertiert. Die ECC-Engine 122 kann die Koordinaten einer Transformation unterziehen, indem sie eine Zufallszahl (z.B. λ) verwendet, um äquivalente Koordinaten zu erzeugen, die für den Elliptische-Kurve-Vorgang verwendet werden können. Aufgrund der Eigenschaften von Jacobi-Projektionskoordinaten können diese Jacobi-Projektionskoordinaten für den Vorgang verwendet werden und werden die gleichen Ergebnisse bereitstellen wie nicht-randomisierte Jacobi-Projektionskoordinaten. Durch Durchführen des Elliptische-Kurve-Vorgangs an randomisierten Daten kann die ECC-Engine 122 Schutz gegen verschiedene Seitenkanalangriffe bereitstellen. Nach Erzeugen der randomisierten Jacobi-Projektionskoordinaten geht das Verfahren 700 über zu Block 712.
-
In Block 712 stellt die ECC-Engine 122 fest, ob der Parameter λ gleich null ist. Ist dies der Fall, zweigt das Verfahren 700 zu Block 714 ab, in dem die ECC-Engine 122 den Skalarmultiplikationsvorgang ohne Seitenkanal-Angriffsschutz durchführt. Insbesondere kann die ECC-Engine 122 den Skalarmultiplikationsvorgang unter Verwendung eines Verdopplungs-und-Additions-Vorgangs durchführen. Beispielsweise kann die Ausführungssteuerung 302 verschiedene interne Steuersignale bestätigen, um zu bewirken, dass die Punktemultiplikationseinheit 306, die Punkteadditions-/-verdopplungseinheit 308, die p-Potenzierungseinheit 310 und/oder die p-MAS-Einheit 312 den Skalarmultiplikationsvorgang durchführen. Das Ausmaß der durch die ECC-Engine 122 durchgeführten Rechenarbeit zur Durchführung des Verdopplungs-und-Additions-Vorgangs kann abhängig von den Eingabedaten variieren, und somit stellt die ECC-Engine 122 bei λ gleich null möglicherweise keinen Seitenkanal-Angriffsschutz bereit. Die Leistungsfähigkeit der ECC-Engine 122 ohne Seitenkanalschutz kann etwa 1½mal schneller sein als die Leistungsfähigkeit der ECC-Engine 122 mit Seitenkanalschutz. Daher kann eine Ausführung ohne Seitenkanalschutz für Vorgänge geeignet sein, die keine geheimen Schlüssel beinhalten (z.B. ECDSA-Verify-Funktion). Nach Durchführung des Skalarmultiplikationsvorgangs geht das Verfahren 700 über zu Block 718, wie unten beschrieben.
-
Zurück zu Block 712, zweigt das Verfahren 700, wenn der Parameter λ nicht gleich null ist, ab zu Block 716, in dem die ECC-Engine 122 den Skalarmultiplikationsvorgang mit Seitenkanalschutz durchführt. Insbesondere kann die ECC-Engine 122 den Skalarmultiplikationsvorgang unter Verwendung eines Montgomery-Leiter-Algorithmus durchführen. Beispielsweise kann die Ausführungssteuerung 302 verschiedene interne Steuersignale bestätigen, um zu bewirken, dass die Punktemultiplikationseinheit 306, die Punkteadditions-/-verdopplungseinheit 308, die p-Potenzierungseinheit 310 und/oder die p-MAS-Einheit 312 den Skalarmultiplikationsvorgang durchführen. Der Montgomery-Leiter-Algorithmus führt für jedes Bit eines geheimen Werts dieselbe Verarbeitung durch, somit können Taktung, Leistungsverbrauch, emittierte elektromagnetische Strahlung und/oder Seitenkanaldaten zur Verarbeitung jedes Bits des geheimen Werts einheitlich sein. Wenn der Parameter λ eins ist, führt die ECC-Engine 122 den Montgomery-Leiter-Algorithmus an den Jacobi-Projektionskoordinaten durch und kann somit einen Einfach-Seitenkanal-Angriffsschutz bereitstellen. Wenn der Parameter λ größer als eins ist, führt die ECC-Engine 122 den Montgomery-Leiter-Algorithmus an den randomisierten Jacobi-Projektionskoordinaten durch und kann somit einen Differential-Seitenkanal-Angriffsschutz bereitstellen. Nach der Durchführung des Skalarmultiplikationsvorgangs geht das Verfahren 700 über zu Block 718.
-
In Block 718 konvertiert die ECC-Engine 122 die Jacobi-Projektionskoordinaten in affine Koordinaten. Die ECC-Engine 122 kann die Jacobi-Projektionskoordinaten aus dem Register 314 lesen und dann die affinen Koordinaten wieder zurück in das Register 314 speichern. Nach dem Generieren der affinen Koordinaten ist das Verfahren 700 abgeschlossen. Die durch die ECC-Engine 122 erzeugten affinen Koordinaten können als Ausgabedaten für den ECC-Befehl verwendet werden. Wie oben beschrieben kann die ECC-Engine 122 nach Abschluss des Elliptische-Kurve-Befehls das ECC-fertig-Signal 428 bestätigen, und die durch den Prozessor 120 ausgeführte Software/Firmware kann Ausgabedaten aus den Datenausgangsanschlüssen 422, 424 lesen.
-
Es ist darauf hinzuweisen, dass das Verfahren 500, 600 und/oder 700 in manchen Ausführungsformen als verschiedene Befehle ausgeführt sein kann, die auf einem computerlesbaren Medium gespeichert sind, welches durch den Prozessor 120, die ECC-Engine 122, das I/O-Subsystem 124 und/oder andere Bestandteile einer Rechenvorrichtung 100 ausgeführt werden kann, um zu bewirken, dass die Rechenvorrichtung 100 das jeweilige Verfahren 500, 600 und/oder 700 durchführt. Das computerlesbare Medium kann als jegliche Art von Medium ausgeführt sein, die von der Rechenvorrichtung 100 gelesen werden kann, einschließlich, aber nicht beschränkt auf den Speicher 126, die Datenspeichervorrichtung 128, Firmware-Vorrichtungen und/oder andere Medien.
-
BEISPIELE
-
Nachstehend sind veranschaulichende Beispiele der hier offenbarten Technologien bereitgestellt. Eine Ausführungsform der Technologien kann ein beliebiges oder mehrere sowie eine Kombination der unten beschriebenen Beispiele umfassen.
-
Beispiel 1 umfasst eine Rechenvorrichtung zur kryptographischen Beschleunigung, wobei die Rechenvorrichtung eine Elliptische-Kurven-Kryptographie(ECC)-Engine umfasst, um: ein Datenpfad-Selektor-Signal der ECC-Engine zu lesen, wobei das Datenpfad-Selektor-Signal eine 256-Bit-Datenbreite oder eine 384-Bit-Datenbreite anzeigt; einen Parameterwert für einen Parameter eines kryptographischen Vorgangs aus einem Datenanschluss der ECC-Engine zu lesen, wobei der Parameterwert eine vom Datenpfad-Selektor-Signal angezeigte Datenbreite aufweist; einen ersten Opcode aus einem Befehlsanschluss der ECC-Engine als Antwort auf das Lesen des Parameterwerts zu lesen, wobei der erste Opcode den kryptographischen Vorgang anzeigt; den kryptographischen Vorgang mit dem Parameterwert als Antwort auf das Lesen des ersten Opcodes durchzuführen, wobei der kryptographische Vorgang eine vom Datenpfad-Selektor-Signal angezeigte Datenbreite aufweist; und als Antwort auf eine Leistung des kryptographischen Vorgangs Ergebnisdaten auf einen Ausgangsanschluss der ECC-Engine zu schreiben, wobei die Ergebnisdaten eine vom Datenpfad-Selektor-Signal angezeigte Datenbreite aufweisen.
-
Beispiel 2 umfasst den Gegenstand von Beispiel 1, wobei der kryptographische Vorgang einen arithmetischen Vorrangiges-Feld-Vorgang umfasst.
-
Beispiel 3 umfasst den Gegenstand von einem beliebigen der Beispiele 1 und 2, wobei der arithmetische Vorrangiges-Feld-Vorgang einen Vorrangiges-Feld-Potenzierungsvorgang, einen Vorrangiges-Feld-Multiplikationsvorgang, einen Vorrangiges-Feld-Additionsvorgang oder einen Vorrangiges-Feld-Subtraktionsvorgang.
-
Beispiel 4 umfasst den Gegenstand von einem beliebigen der Beispiele 1-3, wobei der kryptographische Vorgang einen Elliptische-Kurve-Vorgang umfasst.
-
Beispiel 5 umfasst den Gegenstand von einem beliebigen der Beispiele 1-4, wobei der Elliptische-Kurve-Vorgang einen Elliptische-Kurve-Skalarmultiplikationsvorgang, einen Elliptische-Kurve-Punkteadditionsvorgang oder einen Elliptische-Kurve-Subtraktionsvorgang umfasst.
-
Beispiel 6 umfasst den Gegenstand von einem beliebigen der Beispiele 1-5, wobei das Durchführen des Elliptische-Kurve-Vorgangs das Durchführen des Elliptische-Kurve-Vorgangs mit einem spezifizierten Ausmaß an Seitenkanalschutz umfasst, wobei der Parameterwert das spezifizierte Ausmaß an Seitenkanalschutz anzeigt.
-
Beispiel 7 umfasst den Gegenstand von einem beliebigen der Beispiele 1-6, wobei das spezifizierte Ausmaß an Seitenkanalschutz Nicht-Schutz, Einfachschutz oder Differentialschutz umfasst.
-
Beispiel 8 umfasst den Gegenstand von einem beliebigen der Beispiele 1-7, wobei das Durchführen des Elliptische-Kurve-Vorgangs umfasst: Konvertieren von einer oder mehreren affinen Koordinaten in entsprechende Jacobi-Projektionskoordinaten, wobei die affinen Koordinaten und die Jacobi-Projektionskoordinaten in einem oder mehreren entsprechenden Registern der ECC-Engine gespeichert sind; Durchführen des Elliptische-Kurve-Vorgangs mit den Jacobi-Projektionskoordinaten; und Konvertieren der Jacobi-Projektionskoordinaten in entsprechende affine Koordinaten als Antwort auf die Leistung des Elliptische-Kurve-Vorgangs.
-
Beispiel 9 umfasst den Gegenstand von einem beliebigen der Beispiele 1-8, wobei: der Elliptische-Kurve-Vorgang Elliptische-Kurve-Skalarmultiplikation umfasst; das spezifizierte Ausmaß an Seitenkanalschutz Nicht-Schutz umfasst; und das Durchführen des Elliptische-Kurve-Vorgangs weiters das Durchführen eines Verdopplungs-und-Additions-Skalarmultiplikationsalgorithmus umfasst.
-
Beispiel 10 umfasst den Gegenstand von einem beliebigen der Beispiele 1-9, wobei: der Elliptische-Kurve-Vorgang Elliptische-Kurve-Skalarmultiplikation umfasst; das spezifizierte Ausmaß an Seitenkanalschutz Einfachschutz umfasst; und das Durchführen des Elliptische-Kurve-Vorgangs weiters das Durchführen eines Montgomery-Leiter-Skalarmultiplikationsalgorithmus umfasst.
-
Beispiel 11 umfasst den Gegenstand von einem beliebigen der Beispiele 1-10, wobei: der Elliptische-Kurve-Vorgang Elliptische-Kurve-Skalarmultiplikation umfasst; das Ausmaß an spezifiziertem Seitenkanalschutz Differentialschutz umfasst; das Konvertieren der einen oder mehreren affinen Koordinaten in die entsprechenden Jacobi-Projektionskoordinaten das Konvertieren der einen oder mehreren Koordinaten in entsprechende randomisierte Jacobi-Koordinaten umfasst; und das Durchführen des Elliptische-Kurve-Vorgangs weiters das Durchführen eines Montgomery-Leiter-Skalarmultiplikationsalgorithmus mit den randomisierten Jacobi-Projektionskoordinaten umfasst.
-
Beispiel 12 umfasst den Gegenstand von einem beliebigen der Beispiele 1-11, wobei die ECC-Engine weiters vorgesehen ist, um: festzustellen, ob ein Startsignal der ECC-Engine bestätigt ist; als Antwort auf die Feststellung, dass das Startsignal bestätigt ist, ein Beschäftigt-Signal der ECC-Engine einzustellen; als Antwort auf die Leistung des kryptographischen Vorgangs das Beschäftigt-Signal zu löschen; und als Antwort auf das Löschen des Beschäftigt-Signals ein Vorgang-abgeschlossen-Signal der ECC-Engine zu bestätigen; wobei das Lesen des Datenpfad-Selektor-Signals das Lesen des Datenpfad-Selektor-Signals als Antwort auf das Einstellen des Beschäftigt-Signals umfasst.
-
Beispiel 13 umfasst den Gegenstand von einem beliebigen der Beispiele 1-12 und weiters umfassend einen Kryptographie-Treiber, um: festzustellen, ob das Beschäftigt-Signal der ECC-Engine eingestellt ist; als Antwort auf die Feststellung, dass das Beschäftigt-Signal nicht eingestellt ist, das Datenpfad-Selektor-Signal der ECC-Engine einzustellen; das Startsignal der ECC-Engine als Antwort auf das Einstellen des Datenpfad-Selektor-Signals zu bestätigen; als Antwort auf die Bestätigung des Startsignals festzustellen, ob das Vorgang-abgeschlossen-Signal der ECC-Engine bestätigt ist; und als Antwort auf die Feststellung, dass das Vorgang-abgeschlossen-Signal der ECC-Engine bestätigt ist, Ergebnisdaten aus dem Ausgangsanschluss der ECC-Engine zu lesen.
-
Beispiel 14 umfasst den Gegenstand von einem beliebigen der Beispiele 1-13, wobei die ECC-Engine weiters vorgesehen ist, um: als Antwort auf die Feststellung, dass das Startsignal bestätigt ist, festzustellen, ob ein Befehl-gültig-Signal der ECC-Engine bestätigt ist; wobei das Lesen des ersten Opcodes das Lesen des ersten Opcodes als Antwort auf die Feststellung, dass das Befehl-gültig-Signal der ECC-Engine bestätigt ist, umfasst.
-
Beispiel 15 umfasst den Gegenstand von einem beliebigen der Beispiele 1-14 und weiters umfassend einen Kryptographie-Treiber, um: als Antwort auf die Bestätigung des Startsignals der ECC-Engine den ersten Opcode auf den Befehlsanschluss der ECC-Engine zu schreiben; und das Befehl-gültig-Signal der ECC-Engine als Antwort auf das Schreiben des ersten Opcodes zu bestätigen.
-
Beispiel 16 umfasst den Gegenstand von einem beliebigen der Beispiele 1-15 und wobei die ECC-Engine weiters vorgesehen ist, um: als Antwort auf die Feststellung, dass das Startsignal bestätigt ist, einen zweiten Opcode aus dem Befehlsanschluss der ECC-Engine zu lesen. wobei der zweite Opcode den Parameter des kryptographischen Vorgangs anzeigt; und den Parameterwert in einem Register der ECC-Engine zu speichern, wobei das Register durch den zweiten Opcode identifiziert ist; wobei das Lesen des Parameterwerts das Lesen des Parameterwerts als Antwort auf das Lesen des zweiten Opcodes umfasst.
-
Beispiel 17 umfasst den Gegenstand von einem beliebigen der Beispiele 1-16 und weiters umfassend einen Kryptographie-Treiber, um: als Antwort auf die Bestätigung des Startsignals den Parameterwert auf den Datenanschluss der ECC-Engine zu schreiben; als Antwort das Schreiben des Parameterwerts den zweiten Opcode auf den Befehlsanschluss der ECC-Engine zu schreiben; und als Antwort auf das Schreiben des zweiten Opcodes ein Befehl-gültig-Signal der ECC-Engine zu bestätigen.
-
Beispiel 18 umfasst ein Verfahren zur kryptographischen Beschleunigung, wobei das Verfahren umfasst: durch eine Elliptische-Kurven-Kryptographie(ECC)-Engine einer Rechenvorrichtung Lesen eines Datenpfad-Selektor-Signals der ECC-Engine, wobei das Datenpfad-Selektor-Signal eine 256-Bit-Datenbreite oder eine 384-Bit-Datenbreite anzeigt; durch die ECC-Engine Lesen eines Parameterwerts für einen Parameter eines kryptographischen Vorgangs aus einem Datenanschluss der ECC-Engine, wobei der Parameterwert eine vom Datenpfad-Selektor-Signal angezeigte Datenbreite aufweist; durch die ECC-Engine Lesen eines ersten Opcodes aus einem Befehlsanschluss der ECC-Engine als Antwort auf das Lesen des Parameterwerts, wobei der erste Opcode den kryptographischen Vorgang anzeigt; durch die ECC-Engine Durchführen des kryptographischen Vorgangs mit dem Parameterwert als Antwort auf das Lesen des ersten Opcodes, wobei der kryptographische Vorgang eine vom Datenpfad-Selektor-Signal angezeigte Datenbreite aufweist; und durch die ECC-Engine Schreiben von Ergebnisdaten auf einen Ausgangsanschluss der ECC-Engine als Antwort auf die Durchführung des kryptographischen Vorgangs, wobei die Ergebnisdaten eine vom Datenpfad-Selektor-Signal angezeigte Datenbreite aufweisen.
-
Beispiel 19 umfasst den Gegenstand von Beispiel 18, wobei das Durchführen des kryptographischen Vorgangs das Durchführen eines arithmetischen Vorrangiges-Feld-Vorgangs umfasst.
-
Beispiel 20 umfasst den Gegenstand von einem beliebigen der Beispiele 18 und 19, wobei das Durchführen des arithmetischen Vorrangiges-Feld-Vorgangs das Durchführen eines Vorrangiges-Feld-Potenzierungsvorgangs, eines Vorrangiges-Feld-Multiplikationsvorgangs, eines Vorrangiges-Feld-Additionsvorgangs oder eines Vorrangiges-Feld-Subtraktionsvorgangs umfasst.
-
Beispiel 21 umfasst den Gegenstand von einem beliebigen der Beispiele 18-20, wobei das Durchführen des kryptographischen Vorgangs das Durchführen eines Elliptische-Kurve-Vorgangs umfasst.
-
Beispiel 22 umfasst den Gegenstand von einem beliebigen der Beispiele 18-21, wobei das Durchführen des Elliptische-Kurve-Vorgangs das Durchführen eines Elliptische-Kurve-Skalarmultiplikationsvorgangs, eines Elliptische-Kurve-Punkteadditionsvorgangs oder eines Elliptische-Kurve-Subtraktionsvorgangs umfasst.
-
Beispiel 23 umfasst den Gegenstand von einem beliebigen der Beispiele 18-22, wobei das Durchführen des Elliptische-Kurve-Vorgangs das Durchführen des Elliptische-Kurve-Vorgangs mit einem spezifizierten Ausmaß an Seitenkanalschutz umfasst, wobei der Parameterwert das spezifizierte Ausmaß an Seitenkanalschutz anzeigt.
-
Beispiel 24 umfasst den Gegenstand von einem beliebigen der Beispiele 18-23, wobei das spezifizierte Ausmaß an Seitenkanalschutz Nicht-Schutz, Einfachschutz oder Differentialschutz umfasst.
-
Beispiel 25 umfasst den Gegenstand von einem beliebigen der Beispiele 18-24, wobei das Durchführen des Elliptische-Kurve-Vorgangs umfasst: Konvertieren von einer oder mehreren affinen Koordinaten in entsprechende Jacobi-Projektionskoordinaten, wobei die affinen Koordinaten und die Jacobi-Projektionskoordinaten in einem oder mehreren entsprechenden Registern der ECC-Engine gespeichert sind; Durchführen des Elliptische-Kurve-Vorgangs unter Verwendung der Jacobi-Projektionskoordinaten; und Konvertieren der Jacobi-Projektionskoordinaten in entsprechende affine Koordinaten als Antwort auf die Durchführung des Elliptische-Kurve-Vorgangs.
-
Beispiel 26 umfasst den Gegenstand von einem beliebigen der Beispiele 18-25, wobei: der Elliptische-Kurve-Vorgang Elliptische-Kurve-Skalarmultiplikation umfasst; das spezifizierte Ausmaß an Seitenkanalschutz Nicht-Schutz umfasst; und das Durchführen des Elliptische-Kurve-Vorgangs weiters das Durchführen eines Verdopplungs-und-Additions-Skalarmultiplikationsalgorithmus umfasst.
-
Beispiel 27 umfasst den Gegenstand von einem beliebigen der Beispiele 18-26, wobei: der Elliptische-Kurve-Vorgang Elliptische-Kurve-Skalarmultiplikation umfasst; das spezifizierte Ausmaß an Seitenkanalschutz Einfachschutz umfasst; und das Durchführen des Elliptische-Kurve-Vorgangs weiters das Durchführen eines Montgomery-Leiter-Skalarmultiplikationsalgorithmus umfasst.
-
Beispiel 28 umfasst den Gegenstand von einem beliebigen der Beispiele 18-27, wobei: der Elliptische-Kurve-Vorgang Elliptische-Kurve-Skalarmultiplikation umfasst; das Ausmaß an spezifiziertem Seitenkanalschutz Differentialschutz umfasst; das Konvertieren der einen oder mehreren affinen Koordinaten in die entsprechenden Jacobi-Projektionskoordinaten das Konvertieren von einer oder mehreren affinen Koordinaten in entsprechende randomisierte Jacobi-Projektionskoordinaten umfasst; das Durchführen des Elliptische-Kurve-Vorgangs weiters das Durchführen eines Montgomery-Leiter-Skalarmultiplikationsalgorithmus unter Verwendung der Jacobi-Projektionskoordinaten umfasst.
-
Beispiel 29 umfasst den Gegenstand von einem beliebigen der Beispiele 18-28 und umfasst weiters: Feststellen durch die ECC-Engine, ob ein Startsignal der ECC-Engine bestätigt ist; durch die ECC-Engine Einstellen eines Beschäftigt-Signals der ECC-Engine als Antwort auf die Feststellung, dass das Startsignal bestätigt ist; durch die ECC-Engine Löschen des Beschäftigt-Signals als Antwort auf die Durchführung des kryptographischen Vorgangs; und durch die ECC-Engine Bestätigen eines Vorgang-abgeschlossen-Signals er ECC-Engine als Antwort auf das Löschen des Beschäftigt-Signals; wobei das Lesen des Datenpfad-Selektor-Signals das Lesen des Datenpfad-Selektor-Signals als Antwort auf das Einstellen des Beschäftigt-Signals umfasst.
-
Beispiel 30 umfasst den Gegenstand von einem beliebigen der Beispiele 18-29 und umfasst weiters: durch die Rechenvorrichtung Feststellen, ob das Beschäftigt-Signal der ECC-Engine eingestellt ist; durch die Rechenvorrichtung Einstellen des Datenpfad-Selektor-Signals als Antwort auf die Feststellung, dass das Beschäftigt-Signal der ECC-Engine nicht eingestellt ist; durch die Rechenvorrichtung Bestätigen des Startsignals der ECC-Engine als Antwort auf das Einstellen des Datenpfad-Selektor-Signals; durch die Rechenvorrichtung Feststellen, ob das Vorgang-abgeschlossen-Signal der ECC-Engine bestätigt ist, als Antwort auf das Bestätigen des Startsignals; und durch die Rechenvorrichtung Lesen von Ergebnisdaten aus dem Ausgangsanschluss der ECC-Engine als Antwort auf die Feststellung, dass das Vorgang-abgeschlossen-Signal der ECC-Engine bestätigt ist.
-
Beispiel 31 umfasst den Gegenstand von einem beliebigen der Beispiele 18-30 und umfasst weiters: durch die ECC-Engine Bestätigen, ob ein Befehl-gültig-Signal der ECC-Engine bestätigt ist, als Antwort auf die Feststellung, dass das Startsignal bestätigt ist; wobei das Lesen des ersten Opcodes das Lesen des ersten Opcodes als Antwort auf die Feststellung, dass das Befehl-gültig-Signal der ECC-Engine bestätigt ist, umfasst.
-
Beispiel 32 umfasst den Gegenstand von einem beliebigen der Beispiele 18-31 und umfasst weiters: durch die Rechenvorrichtung Schreiben des ersten Opcodes auf den Befehlsanschluss der ECC-Engine als Antwort auf die Bestätigung des Startsignals der ECC-Engine; und durch die Rechenvorrichtung Bestätigen des Befehl-gültig-Signals der ECC-Engine als Antwort auf das Schreiben des ersten Opcodes.
-
Beispiel 33 umfasst den Gegenstand von einem beliebigen der Beispiele 18-32 und umfasst weiters: durch die ECC-Engine Lesen eines zweiten Opcodes aus dem Befehlsanschluss der ECC-Engine als Antwort auf die Feststellung, dass das Startsignal bestätigt ist, wobei der zweite Opcode den Parameter des kryptographischen Vorgangs anzeigt; und durch die ECC-Engine Speichern des Parameterwerts in einem Register der ECC-Engine, wobei das Register durch den zweiten Opcode identifiziert ist; wobei das Lesen des Parameterwerts das Lesen des Parameterwerts als Antwort auf das Lesen des zweiten Opcodes umfasst.
-
Beispiel 34 umfasst den Gegenstand von einem beliebigen der Beispiele 18-33 und umfasst weiters: durch die Rechenvorrichtung Schreiben des Parameterwerts auf den Datenanschluss der ECC-Engine als Antwort auf die Bestätigung des Startsignals; durch die Rechenvorrichtung Schreiben des zweiten Opcodes auf den Befehlsanschluss der ECC-Engine als Antwort auf das Schreiben des Parameterwerts; und durch die Rechenvorrichtung Bestätigen eines Befehl-gültig-Signals der ECC-Engine als Antwort auf das Schreiben des zweiten Opcodes.
-
Beispiel 35 umfasst eine Rechenvorrichtung, umfassend: einen Prozessor; und einen Speicher, in dem eine Vielzahl von Befehlen gespeichert ist, die, wenn sie durch den Prozessor ausgeführt wird, bewirkt, dass die Rechenvorrichtung ein Verfahren nach einem der Beispiele 18-34 durchführt.
-
Beispiel 36 umfasst ein oder mehrere maschinenlesbare Speichermedien, die eine Vielzahl von darauf gespeicherten Befehlen umfasst, die als Antwort auf ihre Ausführung bewirken, dass eine Rechenvorrichtung ein Verfahren nach einem der Beispiele 18-34 durchführt.
-
Beispiel 37 umfasst eine Rechenvorrichtung, umfassend Mittel zur Durchführung des Verfahrens nach einem der Beispiele 18-34.
-
Beispiel 38 umfasst eine Rechenvorrichtung zur kryptographischen Beschleunigung, wobei die Rechenvorrichtung umfasst: ein Mittel zum Lesen, durch eine Elliptische-Kurven-Kryptographie(ECC)-Engine der Rechenvorrichtung, eines Datenpfad-Selektor-Signal der ECC-Engine, wobei das Datenpfad-Selektor-Signal eine 256-Bit-Datenbreite oder eine 384-Bit-Datenbreite anzeigt; Mittel zum Lesen, durch die ECC-Engine, eines Parameterwerts für einen Parameter eines kryptographischen Vorgangs aus einem Datenanschluss der ECC-Engine, wobei der Parameterwert eine vom Datenpfad-Selektor-Signal angezeigte Datenbreite aufweist; Mittel zum Lesen, durch die ECC-Engine, eines ersten Opcodes aus einem Befehlsanschluss der ECC-Engine als Antwort auf das Lesen des Parameterwerts, wobei der erste Opcode den kryptographischen Vorgang anzeigt; Mittel zur Durchführung, durch die ECC-Engine, des kryptographischen Vorgangs mit dem Parameterwert als Antwort auf das Lesen des ersten Opcodes, wobei der kryptographische Vorgang eine vom Datenpfad-Selektor-Signal angezeigte Datenbreite aufweist; und Mittel zum Schreiben, durch die ECC-Engine, von Ergebnisdaten auf einen Ausgangsanschluss der ECC-Engine als Antwort auf die Durchführung des kryptographischen Vorgangs, wobei die Ergebnisdaten eine vom Datenpfad-Selektor-Signal angezeigte Datenbreite aufweisen.
-
Beispiel 39 umfasst den Gegenstand von Beispiel 38, wobei das Mittel zur Durchführung des kryptographischen Vorgangs ein Mittel zur Durchführung eines arithmetischen Vorrangiges-Feld-Vorgangs umfasst.
-
Beispiel 40 umfasst den Gegenstand von einem beliebigen der Beispiele 38 und 39, wobei das Mittel zur Durchführung des arithmetischen Vorrangiges-Feld-Vorgangs ein Mittel zur Durchführung eines Vorrangiges-Feld-Potenzierungsvorgangs, ein Mittel zur Durchführung eines Vorrangiges-Feld-Multiplikationsvorgangs, ein Mittel zur Durchführung eines Vorrangiges-Feld-Additionsvorgangs oder ein Mittel zur Durchführung eines Vorrangiges-Feld-Subtraktionsvorgangs umfasst.
-
Beispiel 41 umfasst den Gegenstand von einem beliebigen der Beispiele 38-40, wobei das Mittel zur Durchführung des kryptographischen Vorgangs ein Mittel zur Durchführung eines Elliptische-Kurve-Vorgangs umfasst.
-
Beispiel 42 umfasst den Gegenstand von einem beliebigen der Beispiele 38-41, wobei das Mittel zur Durchführung des Elliptische-Kurve-Vorgangs ein Mittel zur Durchführung eines Elliptische-Kurve-Skalarmultiplikationsvorgangs, ein Mittel zur Durchführung eines Elliptische-Kurve-Punkteadditionsvorgangs oder ein Mittel zur Durchführung eines Elliptische-Kurve-Subtraktionsvorgangs umfasst.
-
Beispiel 43 umfasst den Gegenstand von einem beliebigen der Beispiele 38-42, wobei das Mittel zur Durchführung des Elliptische-Kurve-Vorgangs ein Mittel zur Durchführung des Elliptische-Kurve-Vorgangs mit einem spezifizierten Ausmaß an Seitenkanalschutz umfasst, wobei der Parameterwert das spezifizierte Ausmaß an Seitenkanalschutz anzeigt.
-
Beispiel 44 umfasst den Gegenstand von einem beliebigen der Beispiele 38-43, wobei das spezifizierte Ausmaß an Seitenkanalschutz Nicht-Schutz, Einfachschutz oder Differentialschutz umfasst.
-
Beispiel 45 umfasst den Gegenstand von einem beliebigen der Beispiele 38-44, wobei das Mittel zur Durchführung des Elliptische-Kurve-Vorgangs umfasst: ein Mittel zum Konvertieren von einer oder mehreren affinen Koordinaten in entsprechende Jacobi-Projektionskoordinaten, wobei die affinen Koordinaten und die Jacobi-Projektionskoordinaten in einem oder mehreren entsprechenden Registern der ECC-Engine gespeichert sind; ein Mittel zur Durchführung des Elliptische-Kurve-Vorgangs unter Verwendung der Jacobi-Projektionskoordinaten; und ein Mittel zum Konvertieren der Jacobi-Projektionskoordinaten in entsprechende affine Koordinaten als Antwort auf die Durchführung des Elliptische-Kurve-Vorgangs.
-
Beispiel 46 umfasst den Gegenstand von einem beliebigen der Beispiele 38-45, wobei: der Elliptische-Kurve-Vorgang Elliptische-Kurve-Skalarmultiplikation umfasst; das spezifizierte Ausmaß an Seitenkanalschutz Nicht-Schutz umfasst; und das Mittel zur Durchführung des Elliptische-Kurve-Vorgangs weiters ein Mittel zur Durchführung eines Verdopplungs-und-Additions-Skalarmultiplikationsalgorithmus umfasst.
-
Beispiel 47 umfasst den Gegenstand von einem beliebigen der Beispiele 38-46, wobei: der Elliptische-Kurve-Vorgang Elliptische-Kurve-Skalarmultiplikation umfasst; das spezifizierte Ausmaß an Seitenkanalschutz Einfachschutz umfasst; und das Mittel zur Durchführung des Elliptische-Kurve-Vorgangs weiters ein Mittel zur Durchführung eines Montgomery-Leiter-Skalarmultiplikationsalgorithmus umfasst.
-
Beispiel 48 umfasst den Gegenstand von einem beliebigen der Beispiele 38-47, wobei: der Elliptische-Kurve-Vorgang Elliptische-Kurve-Skalarmultiplikation umfasst; das Ausmaß an spezifiziertem Seitenkanalschutz Differentialschutz umfasst; das Mittel zum Konvertieren der einen oder mehreren affinen Koordinaten in die entsprechenden Jacobi-Projektionskoordinaten ein Mittel zum Konvertieren der einen oder mehreren affinen Koordinaten in entsprechende randomisierte Jacobi-Projektionskoordinaten umfasst; und das Mittel zur Durchführung des Elliptische-Kurve-Vorgangs weiters ein Mittel zur Durchführung eines Montgomery-Leiter-Skalarmultiplikationsalgorithmus unter Verwendung der randomisierten Jacobi-Projektionskoordinaten umfasst.
-
Beispiel 49 umfasst den Gegenstand von einem beliebigen der Beispiele 38-48 und umfasst weiters: Mittel zum Feststellen durch die ECC-Engine, ob ein Startsignal der ECC-Engine bestätigt ist; Mittel zum Einstellen eines Beschäftigt-Signals der ECC-Engine durch die ECC-Engine als Antwort auf die Feststellung, dass das Startsignal bestätigt ist; Mittel zum Löschen des Beschäftigt-Signals durch die ECC-Engine als Antwort auf die Durchführung des kryptographischen Vorgangs; und Mittel zum Bestätigen eines Vorgang-abgeschlossen-Signals der ECC-Engine durch die ECC-Engine als Antwort auf das Löschen des Beschäftigt-Signals; wobei das Mittel zum Lesen des Datenpfad-Selektor-Signals ein Mittel zum Lesen des Datenpfad-Selektor-Signals als Antwort auf das Einstellen des Beschäftigt-Signals umfasst.
-
Beispiel 50 umfasst den Gegenstand von einem beliebigen der Beispiele 38-49 und umfasst weiters: ein Mittel zum Feststellen, ob das Beschäftigt-Signal der ECC-Engine eingestellt ist; ein Mittel zum Einstellen des Datenpfad-Selektor-Signals der ECC-Engine als Antwort auf die Feststellung, dass das Beschäftigt-Signal nicht eingestellt ist; ein Mittel zum Bestätigen des Startsignals der ECC-Engine als Antwort auf das Einstellen des Datenpfad-Selektor-Signals; ein Mittel zum Feststellen, ob das Vorgang-abgeschlossen-Signal der ECC-Engine bestätigt ist, als Antwort auf die Bestätigung des Startsignals; und ein Mittel zum Lesen von Ergebnisdaten aus dem Ausgangsanschluss der ECC-Engine als Antwort auf die Feststellung, dass das Vorgang-abgeschlossen-Signal der ECC-Engine bestätigt ist.
-
Beispiel 51 umfasst den Gegenstand von einem beliebigen der Beispiele 38-50 und umfasst weiters: ein Mittel zum Feststellen durch die ECC-Engine, ob ein Befehl-gültig-Signal der ECC-Engine bestätigt ist, als Antwort auf die Feststellung, dass das Startsignal bestätigt ist; wobei das Mittel zum Lesen des ersten Opcode ein Mittel zum Lesen des ersten Opcodes als Antwort auf die Feststellung, dass das Befehl-gültig-Signal der ECC-Engine bestätigt ist, umfasst.
-
Beispiel 52 umfasst den Gegenstand von einem beliebigen der Beispiele 38-51 und umfasst weiters: ein Mittel zum Schreiben des ersten Opcodes auf den Befehlsanschluss der ECC-Engine als Antwort auf die Bestätigung des Startsignals der ECC-Engine; und ein Mittel zum Bestätigen des Befehl-gültig-Signals der ECC-Engine als Antwort auf das Schreiben des ersten Opcodes.
-
Beispiel 53 umfasst den Gegenstand von einem beliebigen der Beispiele 38-52 und umfasst weiters: ein Mittel zum Lesen eines zweiten Opcodes aus dem Befehlsanschluss der ECC-Engine durch die ECC-Engine als Antwort auf die Feststellung, dass das Startsignal bestätigt ist, wobei der zweite Opcode den Parameter des kryptographischen Vorgangs anzeigt; und ein Mittel zum Speichern des Parameterwerts in einem Register der ECC-Engine durch die ECC-Engine, wobei das Register durch den zweiten Opcode identifiziert ist; wobei das Mittel zum Lesen des Parameterwerts ein Mittel zum Lesen des Parameterwerts als Antwort auf das Lesen des zweiten Opcodes umfasst.
-
Beispiel 54 umfasst den Gegenstand von einem beliebigen der Beispiele 38-53 und umfasst weiters: ein Mittel zum Schreiben des Parameterwerts auf den Datenanschluss der ECC-Engine als Antwort auf die Bestätigung des Startsignals; ein Mittel zum Schreiben des zweiten Opcodes auf den Befehlsanschluss der ECC-Engine als Antwort auf das Schreiben des Parameterwerts; und ein Mittel zum Bestätigen eines Befehl-gültig-Signals der ECC-Engine als Antwort auf das Schreiben des zweiten Opcodes.