DE112016004365T5 - Sichere modularpotenzierungsprozessoren, verfahren, systeme und instruktionen - Google Patents

Sichere modularpotenzierungsprozessoren, verfahren, systeme und instruktionen Download PDF

Info

Publication number
DE112016004365T5
DE112016004365T5 DE112016004365.1T DE112016004365T DE112016004365T5 DE 112016004365 T5 DE112016004365 T5 DE 112016004365T5 DE 112016004365 T DE112016004365 T DE 112016004365T DE 112016004365 T5 DE112016004365 T5 DE 112016004365T5
Authority
DE
Germany
Prior art keywords
input information
instruction
processor
veiled
obfuscated
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
DE112016004365.1T
Other languages
English (en)
Inventor
Vinodh Gopal
Gilbert M. Wolrich
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intel Corp
Original Assignee
Intel Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Intel Corp filed Critical Intel Corp
Publication of DE112016004365T5 publication Critical patent/DE112016004365T5/de
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/70Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
    • G06F21/71Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure computing or processing of information
    • G06F21/72Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure computing or processing of information in cryptographic circuits
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/602Providing cryptographic facilities or services
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/3017Runtime instruction translation, e.g. macros
    • G06F9/30178Runtime instruction translation, e.g. macros of compressed or encrypted instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3893Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator
    • G06F9/3895Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator for complex operations, e.g. multidimensional or interleaved address generators, macros
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/08Key distribution or management, e.g. generation, sharing or updating, of cryptographic keys or passwords
    • H04L9/0816Key establishment, i.e. cryptographic processes or cryptographic protocols whereby a shared secret becomes available to two or more parties, for subsequent use
    • H04L9/0838Key agreement, i.e. key establishment technique in which a shared key is derived by parties as a function of information contributed by, or associated with, each of these
    • H04L9/0841Key agreement, i.e. key establishment technique in which a shared key is derived by parties as a function of information contributed by, or associated with, each of these involving Diffie-Hellman or related key agreement protocols
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/30Public key, i.e. encryption algorithm being computationally infeasible to invert or user's encryption keys not requiring secrecy
    • H04L9/3006Public key, i.e. encryption algorithm being computationally infeasible to invert or user's encryption keys not requiring secrecy underlying computational problems or public-key parameters
    • H04L9/3013Public key, i.e. encryption algorithm being computationally infeasible to invert or user's encryption keys not requiring secrecy underlying computational problems or public-key parameters involving the discrete logarithm problem, e.g. ElGamal or Diffie-Hellman systems
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/30Public key, i.e. encryption algorithm being computationally infeasible to invert or user's encryption keys not requiring secrecy
    • H04L9/3006Public key, i.e. encryption algorithm being computationally infeasible to invert or user's encryption keys not requiring secrecy underlying computational problems or public-key parameters
    • H04L9/302Public key, i.e. encryption algorithm being computationally infeasible to invert or user's encryption keys not requiring secrecy underlying computational problems or public-key parameters involving the integer factorization problem, e.g. RSA or quadratic sieve [QS] schemes
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L2209/00Additional information or applications relating to cryptographic mechanisms or cryptographic arrangements for secret or secure communication H04L9/00
    • H04L2209/04Masking or blinding
    • H04L2209/046Masking or blinding of operations, operands or results of the operations

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Computing Systems (AREA)
  • Computer Hardware Design (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Mathematical Physics (AREA)
  • Health & Medical Sciences (AREA)
  • General Health & Medical Sciences (AREA)
  • Bioethics (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Storage Device Security (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

Der Prozessor eines Aspekts enthält eine Decodiereinheit zum Decodieren einer Instruktion einer modularen Potenzierung mit verschleierten Eingabeinformationen. Die Instruktion einer modularen Potenzierung mit verschleierten Eingabeinformationen ist dafür ausgelegt, mehrere Quellenoperanden anzugeben, die Eingabeinformationen für eine Modularpotenzierungsoperation speichern sollen. Mindestens einige der Eingabeinformationen, die in den mehreren Quellenoperanden gespeichert werden sollen, sollen verschleiert werden. Eine Ausführungseinheit ist mit der Decodiereinheit gekoppelt. Die Ausführungseinheit dient dazu, in Reaktion auf die Instruktion einer modularen Potenzierung mit verschleierten Eingabeinformationen ein Modularpotenzierungsergebnis an einer Zielort-Speicherposition zu speichern, die durch die Instruktion einer modularen Potenzierung mit verschleierten Eingabeinformationen angegeben werden soll. Es werden noch andere Prozessoren, Verfahren, Systeme und Instruktionen offenbart.

Description

  • HINTERGRUND
  • Technisches Gebiet
  • Im vorliegenden Text beschriebene Ausführungsformen betreffen allgemein Prozessoren. Insbesondere betreffen im vorliegenden Text beschriebene Ausführungsformen allgemein die Ausführung einer modularen Potenzierung in Prozessoren.
  • Hintergrund-Informationen
  • Kryptografie wird weithin verwendet, um zu helfen, die Vertraulichkeit und Integrität von Daten und/oder Kommunikation zu schützen. Zwei häufig verwendete Arten von Kryptografie sind Kryptografie mit symmetrischem Schlüssel und Kryptografie mit asymmetrischem oder öffentlichem Schlüssel.
  • Kryptografie mit symmetrischem Schlüssel verwendet eine einzige Art von Schlüssel. Derselbe Schlüssel wird sowohl zum Verschlüsseln von Daten als auch zum Entschlüsseln von Daten verwendet. Außerdem wird derselbe Schlüssel sowohl zum Generieren einer digitalen Signatur als auch zum Verifizieren der digitalen Signatur verwendet.
  • Im Gegensatz dazu verwendet die Kryptografie mit öffentlichem Schlüssel zwei verschiedene Arten von Schlüsseln. Eine der Schlüssel ist geheim oder privat, während der andere Schlüssel nicht geheim ist, sondern vielmehr öffentlich verfügbar ist. Die sogenannten öffentlichen und privaten Schlüssel werden für verschiedene komplementäre Zwecke verwendet. Zum Beispiel kann der öffentliche Schlüssel zum Verschlüsseln von Daten verwendet werden, während der private Schlüssel zum Entschlüsseln der verschlüsselten Daten verwendet werden kann. Als ein anderes Beispiel kann der private Schlüssel zum Generieren einer digitalen Signatur verwendet werden, während der öffentliche Schlüssel zum Verifizieren der digitalen Signatur verwendet werden kann.
  • Kryptografie mit öffentlichem Schlüssel wird weithin verwendet. Zum Beispiel wird Kryptografie mit öffentlichem Schlüssel weithin in verschiedenen Internet-Standards oder - Protokollen verwendet, wie zum Beispiel Secure Sockets Layer (SSL), Transport Layer Security (TLS), Internet Protocol Security (IPsec), Secure/Multipurpose Internet Mail Extensions (S/MIME), Pretty Good Privacy (PGP) und GNU Privacy Guard (GPG).
  • Wenn solche Standards oder Protokolle über das Internet und/oder andere Kommunikationskanäle verwendet werden, beinhaltet eine Anfangsphase allgemein das Herstellen der Sicherheit des Kanals, das Austauschen kryptografischer Schlüssel und das Verifizieren von Zertifikaten. Es können verschiedene Algorithmen für öffentliche Schlüssel verwendet werden. Ein Algorithmus für einen öffentlichen Schlüssel ist der Diffie-Hellman-Schlüsselaustausch-Algorithmus, der mitunter als Diffie-Hellman oder einfach als D-H bezeichnet wird. Der Diffie-Hellman-Algorithmus wird gemeinhin verwendet, um auf sichere Weise geheime kryptografische Schlüssel über einen öffentlichen Kanal auszutauschen. Ein anderer Algorithmus für einen öffentlichen Schlüssel ist der Digital Signature Algorithm (DSA)-Algorithmus. DSA wird gemeinhin zum Bereitstellen digitaler Signaturen verwendet. Ein weiterer Algorithmus für einen öffentlichen Schlüssel ist der RSA-Algorithmus (nach seinen Autoren Rivest, Shamir, Adleman benannt). RSA wird gemeinhin zum sicheren Austausch geheimer kryptografischer Schlüssel sowie zum Bereitstellen digitaler Signaturen verwendet.
  • Figurenliste
  • Die Erfindung kann am besten anhand der folgenden Beschreibung und der beiliegenden Zeichnungen verstanden werden, die zur Veranschaulichung von Ausführungsformen verwendet werden. In den Zeichnungen ist Folgendes zu sehen:
    • 1 ist ein Blockschaubild einer Ausführungsform eines Prozessors, der dafür geeignet ist, eine Ausführungsform einer Instruktion einer modularen Potenzierung mit verschleierten Eingabeinformationen auszuführen.
    • 2 ist ein Block-Flussdiagramm einer Ausführungsform eines Verfahrens zum Ausführen einer Ausführungsform einer Instruktion einer modularen Potenzierung mit verschleierten Eingabeinformationen.
    • 3 ist ein Block-Flussdiagramm einer detaillierten beispielhaften Ausführungsform eines Verfahrens zum Ausführen einer Ausführungsform einer Instruktion einer modularen Potenzierung mit verschleierten Eingabeinformationen mit Montgomery-Reduktion.
    • 4 ist ein Blockschaubild einer beispielhaften Ausführungsform einer Instruktion einer modularen Potenzierung mit verschleierten Eingabeinformationen.
    • 5 ist ein Blockschaubild einer beispielhaften Ausführungsform eines Immediate.
    • 6 ist ein Blockschaubild einer ersten Ausführungsform einer geeigneten Ausführungseinheit.
    • 7 ist ein Blockschaubild einer zweiten Ausführungsform einer geeigneten Ausführungseinheit.
    • 8 ist ein Blockschaubild einer dritten Ausführungsform einer geeigneten Ausführungseinheit.
    • 9A ist ein Blockschaubild, das eine Ausführungsform einer In-order-Pipeline und eine Ausführungsform einer Registerumbenennungs-Out-of-Order-Ausgabe/Ausführungs-Pipeline veranschaulicht.
    • 9B ist ein Blockschaubild einer Ausführungsform eines Prozessorkerns, der eine Frontend-Einheit enthält, die mit einer Ausführungs-Engine-Einheit gekoppelt ist, und die beide mit einer Speichereinheit gekoppelt sind.
    • 10A ist ein Blockschaubild einer Ausführungsform eines einzelnen Prozessorkerns zusammen mit seiner Verbindung mit dem On-Die-Interconnect-Netzwerk und mit seiner lokalen Teilmenge des Level 2 (L2)-Cache.
    • 10B ist ein Blockschaubild einer Ausführungsform einer erweiterten Ansicht eines Teils des Prozessorkerns von 10A.
    • 11 ist ein Blockschaubild einer Ausführungsform eines Prozessors, der mehr als einen Kern haben kann, einen integrierten Speicher-Controller haben kann und integrierte Grafik haben kann.
    • 12 ist ein Blockschaubild einer ersten Ausführungsform einer Computerarchitektur.
    • 13 ist ein Blockschaubild einer zweiten Ausführungsform einer Computerarchitektur.
    • 14 ist ein Blockschaubild einer dritten Ausführungsform einer Computerarchitektur.
    • 15 ist ein Blockschaubild einer vierten Ausführungsform einer Computerarchitektur.
    • 16 ist ein Blockschaubild der Verwendung eines Software-Instruktionskonverters zum Konvertieren binärer Instruktionen in einem Quelleninstruktionssatz zu binären Instruktionen in einem Zielinstruktionssatz gemäß Ausführungsformen der Erfindung.
  • DETAILLIERTE BESCHREIBUNG VON AUSFÜHRUNGSFORMEN
  • Im vorliegenden Text sind Modularpotenzierungsinstruktionen, Prozessoren zum Ausführen der Instruktionen, Verfahren, die durch die Prozessoren ausgeführt werden, wenn die Instruktionen verarbeitet oder ausgeführt werden, und Systeme, die einen oder mehrere Prozessoren zum Verarbeiten oder Ausführen der Instruktionen enthalten, offenbart. In einigen Ausführungsformen können die Modularpotenzierungsinstruktionen zum Ausführen einer modularen Potenzierung in Verbindung mit einer Reihe verschiedener Algorithmen zur Kryptografie mit öffentlichem Schlüssel verwendet werden, wie zum Beispiel RSA, DSA und Diffie-Hellman-Algorithmen. In solchen Algorithmen zur Kryptografie mit öffentlichem Schlüssel wird tendenziell die modulare Potenzierung verstärkt verwendet, wenn sichere Sitzungen über das Internet und/oder andere Kommunikationsverbindungen hergestellt werden (zum Beispiel in Verbindung mit dem Einrichten einer sicheren Sitzung, Zertifikat-Signierung, Zertifikatverifizierung und dergleichen). In anderen Ausführungsformen können die im vorliegenden Text offenbarten Modularpotenzierungsinstruktionen zum Ausführen einer modularen Potenzierung in Verbindung mit verschiedenen anderen Computer-implementierten Algorithmen und/oder kommunikationsbezogenen Algorithmen und/oder Datenverarbeitungsalgorithmen verwendet werden. Der Geltungsbereich der Erfindung ist nicht auf irgendeine bekannte Verwendung dieser Modularpotenzierungsinstruktionen beschränkt, sondern sie sind vielmehr Allzweckinstruktionen, die durch den Fachmann für eine Reihe verschiedener Zwecke verwendet werden können.
  • In der folgenden Beschreibung sind zahlreiche konkrete Details dargelegt (zum Beispiel konkrete Instruktionsoperationen, konkrete Algorithmen zur Implementierung einer modularen Potenzierung, konkrete Datenformate, konkrete Prozessorkonfigurationen, konkrete Mikroarchitekturdetails, konkrete Sequenzen von Operationen usw.). Jedoch können Ausführungsformen auch ohne diese konkreten Details praktiziert werden. In anderen Fällen wurden allgemein bekannte Schaltkreise, Strukturen und Techniken nicht ausführlich gezeigt, um das Verständnis der Beschreibung nicht unnötig zu erschweren.
  • Zunächst kann eine kurze Besprechung der modularen Potenzierung hilfreich sein. Die modulare Potenzierung kann wie in Gleichung 1 gezeigt ausgedrückt werden: R = B mod N
    Figure DE112016004365T5_0001
  • Gemäß diesem Ausdruck ist ein Modularpotenzierungsergebnis (R) gleich dem Rest einer Potenzierung einer Basis (B), potenziert mit einem Exponenten (E) modulo eines Moduls (N). Die Potenzierung beinhaltet eine Potenzerhebung der Basis (B) in die Potenz des Exponenten (E). Wenn zum Beispiel der Exponent eine positive ganze Zahl ist, dann kann die Potenzierung das Multiplizieren einer Exponentenanzahl von Basen miteinander darstellen (zum Beispiel B*B*B*B... für eine Exponentenanzahl von Malen). Dann kann das Ergebnis der Potenzierung durch den Modul (N) geteilt werden, um einen Rest R zu bestimmen.
  • Häufig können in vielen Anwendungen eines oder mehrere der Basis, des Exponenten und/oder des Moduls relativ großer ganze Zahlen darstellen (zum Beispiel gemeinhin größer als etwa 256-Bits und oft viel größer). Zum Beispiel ist es in vielen Implementierungen von RSA, DSA und Diffie-Hellman nicht ungewöhnlich, dass jedes der Basis, des Exponenten und des Moduls große ganze Zahlen von jeweils mindestens 512-Bits, von jeweils mindestens 1024-Bits oder noch größer sind. Außerdem kann die Größe der verwendeten ganzen Zahlen möglicherweise im Lauf der Zeit zunehmen, um zu helfen, zusätzliche Sicherheit bereitzustellen. Dementsprechend ist das Ausführen solcher Modularpotenzierungsberechnungen im Allgemeinen tendenziell sehr rechenintensiv und zeitaufwändig. In einem Aspekt können die im vorliegenden Text offenbarten Modularpotenzierungsinstruktionen generell helfen, die Modularpotenzierungsberechnungen zu beschleunigen, was helfen kann, die Leistung zu steigern.
  • Außerdem können in einigen Ausführungsformen die Modularpotenzierungsinstruktionen eine Instruktion einer modularen Potenzierung mit verschleierten Eingabeinformationen sein und/oder können verschleierte Eingabeinformationen haben. Diese Instruktionen können helfen, die Vertraulichkeit oder Sicherheit von Modularpotenzierungsberechnungen zu verbessern. Häufig, und speziell bei Verwendung in kryptografischen Anwendungen mit öffentlichem Schlüssel, können die Modularpotenzierungsberechnungen auf geheimen, privaten oder vertraulichen Informationen basieren. Als ein veranschaulichendes Beispiel ist in dem Fall, dass RSA für den Signierungsprozess verwendet wird, was häufig auf Internet-Servern geschieht, der Exponent (E) ein geheimer oder privater Wert, der nicht offenbart werden darf. In anderen Anwendungen können andere und/oder zusätzliche Informationen möglicherweise geheim oder privat sein, wie zum Beispiel eine Kombination der Basis (B), des Exponenten (E), des Moduls (N), von anhand des Moduls berechneten Parametern (zum Beispiel Reduktionskonstanten), oder andere Informationen.
  • Jedoch besteht eine Herausforderung darin, dass konventionelle Software-Implementierungen einer modularen Potenzierung solche geheimen oder privaten Informationen nicht hinreichend schützen. Zum Beispiel sind solche geheimen oder privaten Informationen im Allgemeinen für mindestens einige Software lesbar oder auf sonstige Weise zugänglich. Jedoch kann alle Software, einschließlich selbst der höchst-bevorrechtigten Software auf Systemebene (zum Beispiel ein Virtual Machine Monitor (VMM), das Betriebssystem (BS), das Basic Input/Output System (BIOS) oder dergleichen), möglicherweise beschädigt sein (zum Beispiel im Fall von bevorrechtigter Malware) und ist darum möglicherweise nicht vollständig vertrauenswürdig. Wenn die Software beschädigt ist und die geheimen oder privaten Informationen lesen kann, dann kann die beabsichtigte Sicherheit im Zusammenhang mit den kryptografischen Algorithmen für einen öffentlichen Schlüssel mindestens teilweise beeinträchtigt sein. In einigen Fällen kann dies ein gewaltiges Problem darstellen. Als ein Beispiel kann in einigen Fällen der geheime Schlüssel überaus wertvoll sein (zum Beispiel wertvoller als die Daten, die in einer einzelnen Sitzung geschützt werden). Ein anderes Beispiel ist die Heartbleed-Anfälligkeit von OpenSSL aufgrund eines Bugs in OpenSSL. Hier könnte irgendein privater Schlüssel eines angeblich vertrauenswürdigen Web-Servers möglicherweise wegen eines Überlaufs des Speicherpuffers gestohlen worden sein. Das könnte es erlauben, dass der Web-Server hinreichend imitiert wird, so dass Clients nicht wissen können, ob sie gerade mit dem echten Web-Server oder einem vorgegaukelten Web-Server kommunizieren oder nicht. Wenn es keinen Audit-Trail oder Beweis gibt, dass der private Schlüssel gestohlen wurde, dann müsste möglicherweise, um absolut sicher zu gehen, eine sehr große Anzahl von Servern Zertifikate widerrufen oder neue Zertifikate generieren, was allgemein erhebliche Probleme verursacht.
  • Vorteilhafterweise können die verschleierten Informationen der modularen Potenzierung mit Instruktionen für verschleierte Eingabeinformationen, wie im vorliegenden Text offenbart, helfen, den Schutz geheimer oder vertraulicher Informationen signifikant zu erhöhen (zum Beispiel der Informationen, die in die Modularpotenzierungsberechnungen eingegeben werden). In einigen Ausführungsformen könnten die verschleierten Informationen selbst für die höchst-bevorrechtigte Software auf Systemebene (zum Beispiel eine VMM, ein BS, ein BIOS usw.) nicht zugänglich oder wenigstens nicht lesbar sein. Eine Reihe verschiedener geeigneter Arten des Verschleierns der Informationen werden unten ausführlicher besprochen. Diese können zu dem Zweck verwendet werden zu helfen, die Sicherheit verschiedener Algorithmen zur Kryptografie mit öffentlichem Schlüssel zu erhöhen, sowie zu verschiedenen anderen Zwecken.
  • 1 ist ein Blockschaubild einer Ausführungsform eines Prozessors 100, der dafür geeignet ist, eine Ausführungsform einer Instruktion einer modularen Potenzierung mit verschleierten Eingabeinformationen 102 auszuführen. In einigen Ausführungsformen kann der Prozessor ein Allzweckprozessor sein (zum Beispiel ein Allzweck-Mikroprozessor oder eine zentrale Verarbeitungseinheit (CPU) der Art, die in Desktop-, Laptop- oder anderen Computern verwendet wird). Alternativ kann der Prozessor ein Spezialprozessor sein. Zu Beispielen geeigneter Spezialprozessoren gehören kryptografische Prozessoren, Kommunikationsprozessoren, Netzwerkprozessoren, Koprozessoren, eingebettete Prozessoren, Digitalsignalprozessoren (DSPs) und Controller (zum Beispiel Mikro-Controller). Der Prozessor kann eine von verschiedenen Complex Instruction Set Computing (CISC)-Architekturen, Reduced Instruction Set Computing (RISC)-Architekturen, Very Long Instruction Word (VLIW)-Architekturen, Hybridarchitekturen, anderen Arten von Architekturen oder eine Kombination verschiedener Architekturen haben (zum Beispiel können verschiedene Kerne verschiedene Architekturen haben).
  • Während des Betriebes kann der Prozessor die Instruktion einer modularen Potenzierung mit verschleierten Eingabeinformationen 102 empfangen. Zum Beispiel kann die Instruktion im Voraus geholt, geholt oder auf sonstige Weise aus einem Speicher über einen Bus oder eine andere Interconnect-Verbindung empfangen sein. Die Instruktion kann eine Makroinstruktion, Assemblierspracheninstruktion, Maschinencode-Instruktion oder andere Instruktion oder ein Steuersignal eines Instruktionssatzes des Prozessors darstellen.
  • Der Prozessor enthält eine Decodiereinheit oder einen Decodierer 104. Die Decodiereinheit kann die Instruktion einer modularen Potenzierung mit verschleierten Eingabeinformationen 102 empfangen und decodieren. Die Decodiereinheit kann Instruktionen oder Steuersignale auf relativ niedrigerer Ebene ausgeben (zum Beispiel Mikro-Instruktionen, Mikro-Operationen, Mikro-Code-Eintrittspunkte, decodierte Instruktionen oder Steuersignale usw.), die eine Instruktion einer modularen Potenzierung mit verschleierten Eingabeinformationen auf relativ höherer Ebene widerspiegeln, darstellen und/oder daraus abgeleitet werden. In einigen Ausführungsformen kann die Decodiereinheit enthalten: eine oder mehrere Eingabestrukturen (zum Beispiel einen oder mehrere Ports, eine oder mehrere Interconnect-Verbindungen, eine Schnittstelle), zum Empfangen der Instruktion, eine damit gekoppelte Instruktionserkennungs- und -decodierlogik zum Erkennen und Decodieren der Instruktion, und eine oder mehrere damit gekoppelte Ausgabestrukturen (zum Beispiel einen oder mehrere Ports, eine oder mehrere Interconnect-Verbindungen, eine Schnittstelle) zum Ausgeben der Instruktionen oder Steuersignale auf niedrigerer Ebene. Die Decodiereinheit kann unter Verwendung einer Reihe verschiedener Mechanismen implementiert werden, einschließlich beispielsweise Mikrocode-Nurlesespeicher (ROMs), Nachschlagetabellen, Hardware-Implementierungen, programmierbare Logik-Arrays (PLAs) und andere Mechanismen, die geeignet sind, Decodiereinheiten zu implementieren.
  • In einigen Ausführungsformen kann, anstatt die Instruktion einer modularen Potenzierung mit verschleierten Eingabeinformationen direkt an die Decodiereinheit zu übermitteln, optional ein Instruktionsemulator-, -übersetzer-, -morpher-, -interpretierer- oder sonstiges Instruktionskonvertierungsmodul verwendet werden. Verschiedene Arten von Instruktionskonvertierungsmodulen können in Software, Hardware, Firmware oder einer Kombination davon implementiert werden. In einigen Ausführungsformen kann sich das Instruktionskonvertierungsmodul außerhalb des Prozessors befinden, wie zum Beispiel auf einem separaten Die und/oder in einem Speicher (zum Beispiel als ein statisches, dynamisches oder Laufzeitemulationsmodul). Zum Beispiel kann das Instruktionskonvertierungsmodul die Instruktion einer modularen Potenzierung mit verschleierten Eingabeinformationen, die aus einem ersten Instruktionssatz bestehen kann, empfangen und kann die Instruktion einer modularen Potenzierung mit verschleierten Eingabeinformationen in ein oder mehrere entsprechende Zwischeninstruktionen oder Steuersignale, die aus einem zweiten, anderen Instruktionssatz bestehen können, emulieren, übersetzen, morphen, interpretieren oder auf sonstige Weise konvertieren. Die eine oder die mehreren Zwischeninstruktionen oder Steuersignale des zweiten Instruktionssatzes können an eine Decodiereinheit (zum Beispiel die Decodiereinheit 104) übermittelt werden, die sie in eine oder mehrere Instruktionen oder Steuersignale einer niedrigeren Ebene decodieren kann, die durch native Hardware des Prozessors (zum Beispiel eine oder mehrere Ausführungseinheiten) ausgeführt werden können.
  • In einigen Ausführungsformen kann die Instruktion einer modularen Potenzierung mit verschleierten Eingabeinformationen 102 Speicherorte für mehrere Quellenoperanden 116 explizit (zum Beispiel durch ein oder mehrere Felder oder einen Satz von Bits) spezifizieren oder auf sonstige Weise (zum Beispiel implizit) angeben. Die Quellenoperanden können zum Speichern von Eingabeinformationen 118 für eine mit der Instruktion verknüpfte Modularpotenzierungsoperation oder -berechnung verwendet werden. In einigen Ausführungsformen kann die Instruktion auch einen Zielort-Speicherposition explizit spezifizieren oder auf sonstige Weise angeben, wo ein Modularpotenzierungsergebnis 122 in Reaktion auf die, und/oder im Ergebnis der, Instruktion gespeichert werden soll. Als ein Beispiel kann die Instruktion Quellen- und/oder Zielortoperandenfelder haben, um Speicherorte für diese Operanden zu spezifizieren oder auf sonstige Weise anzugeben. Alternativ können die Speicherorte für einen oder mehrere dieser Operanden optional der Instruktion implizit sein (zum Beispiel einem Opcode der Instruktion implizit), anstatt explizit spezifiziert zu werden.
  • Wie gezeigt, kann der Prozessor 100 dafür geeignet sein, während der Nutzung und/oder Verwendung mit einem Speicher 114 gekoppelt zu sein oder auf sonstige Weise mit ihm zu kommunizieren. Es ist anzumerken, dass Ausführungsformen der Erfindung einen Prozessor allein betreffen, der in der Lage oder geeignet ist, mit dem Speicher gekoppelt zu werden und zu interagieren, aber noch nicht mit dem Speicher gekoppelt ist. Wie gezeigt, können in einigen Ausführungsformen die Quellenoperanden 116 und die Zielort-Speicherposition, wo das Modularpotenzierungsergebnis gespeichert werden soll, optional Orte in dem Speicher sein. Zum Beispiel kann in einigen Ausführungsformen die Instruktion optional Register in einem Satz von Registern 124 des Prozessors spezifizieren oder auf sonstige Weise angeben, die Adressen oder andere Zeiger zu den Orten in dem Speicher für diese Operanden speichern können. Alternativ können ein oder mehrere gepackte Datenregister, Orte in einem dedizierten Stream-Puffer des Prozessors, oder andere Speicherorte optional für eine oder mehrere dieser Quellen- und/oder Zielortoperanden verwendet werden. Darüber hinaus kann, obgleich in der Illustration im Interesse einer besseren Übersichtlichkeit separat gezeigt, in einigen Ausführungsformen dieselbe Speicherposition, die für einen Quellenoperanden (zum Beispiel für eine Basis) verwendet wird, optional als die Zielort-Speicherposition zum Speichern des Modularpotenzierungsergebnisses wiederverwendet werden. Zum Beispiel kann die Instruktion explizit eine Adresse spezifizieren, um einen Ort im Speicher zu angeben, wo ein Quellenoperand gespeichert werden soll, und es kann dem Prozessor implizit oder inhärent sein (zum Beispiel auf der Grundlage eines Opcode der Instruktion), dass dieselbe Position im Speicher für die Zielort-Speicherposition verwendet werden soll.
  • Die Register 124 können On-Die-Speicherorte darstellen, die zum Speichern von Daten geeignet sind. In einem Aspekt können die Register 124 optional 32-Bit- oder 64-Bit-Allzweckregister sein. Die Register können architektonisch sichtbare oder Architekturregister darstellen, die für Software und/oder einen Programmierer sichtbar sind und/oder die Register sind, die durch Instruktionen des Instruktionssatzes des Prozessors angegeben sind, Operanden zu identifizieren. Diese Architekturregister unterscheiden sich von anderen Nicht-Architekturregistern in einer bestimmten Mikroarchitektur (zum Beispiel temporäre Register, Umordnungspuffer, Beendigungsregister usw.). Die Register können auf verschiedene Arten in verschiedenen Mikroarchitekturen implementiert werden und sind nicht auf eine bestimmte Art von Design beschränkt. Zu Beispielen von geeigneten Arten von Registern gehören beispielsweise dedizierte physische Register, dynamisch zugewiesene physische Register unter Verwendung von Registerumbenennung, und Kombinationen davon.
  • Wir wenden uns wieder 1 zu. Eine Reihe verschiedener Arten von Eingabeinformationen 118, einschließlich der verschleierten Eingabeinformationen 120, sind für verschiedene Ausführungsformen geeignet. In einigen Ausführungsformen können die Eingabeinformationen eine Basis, einen Exponenten, einen Modul, einen oder mehrere anhand des Moduls vorausberechnete Parameter (zum Beispiel eine oder mehrere Reduktionskonstanten) oder verschiedene Kombinationen davon enthalten. Wie unten noch näher besprochen wird, definieren verschiedene Reduktionsalgorithmen zur modularen Potenzierung (zum Beispiel Mongomery-Reduktion, Barrett-Reduktion usw.) Reduktionskonstanten, die oft aus dem Modul und/oder möglicherweise anderen Eingangsparametern abgeleitet werden, um zu helfen, die Implementierung einer modularen Potenzierung zu vereinfachen. Im Allgemeinen kann jede Kombination von Eingabeinformationen, die ausreicht, um die Ausführung der Modularpotenzierungsberechnungen zu erlauben, in verschiedenen Ausführungsformen optional verwendet werden.
  • Außerdem können beliebige solcher Eingabeinformationen 118, einschließlich möglicherweise keine davon oder möglicherweise alle davon, oder jede beliebige Zwischenstufe, optional als die verschleierten Eingabeinformationen 120 bereitgestellt werden, um zu helfen, einen zusätzlichen Betrag an Sicherheit bereitstellen, die für die betreffende Implementierung gewünscht wird. Falls beispielsweise ein geheimer Schlüssel, der auf der Basis der Modularpotenzierungsberechnungen abgeleitet werden soll, verwendet werden soll, um Informationen zu schützen, die als nicht hinreichend geheim und/oder als des zusätzlichen Schutzes, der durch die Verschleierung gewährt wird, nicht bedürftig angesehen werden (wie zum Beispiel für die betreffende Implementierung durch den Programmierer festgelegt), dann brauchen optional keine der Eingabeinformationen verschleiert zu werden. Statt dessen kann möglicherweise eine etwas erhöhte Leistung erreicht werden, indem eine Operation weggelassen wird, mit der solche verschleierten Informationen entschlüsselt oder auf sonstige Weise entschleiert werden sollen. Oder wenn beispielsweise ein geheimer Schlüssel, der auf der Basis der Modularpotenzierungsberechnungen abgeleitet werden soll, verwendet werden soll, um Informationen zu schützen, die als hinreichend geheim und/oder als des zusätzlichen Schutzes, der durch die Verschleierung gewährt wird, bedürftig angesehen werden (wie zum Beispiel für die betreffende Implementierung durch den Programmierer festgelegt), dann können optional von mindestens einige bis alle der Eingabeinformationen (zum Beispiel ein architektonisch programmierbarer oder konfigurierbarer Abschnitt) verschleiert werden. Zum Beispiel können in einer Ausführungsform die verschleierten Eingabeinformationen optional eine verschleierte Basis, einen verschleierten Exponenten und einen verschleierten Modul oder eine Kombination davon enthalten.
  • In einigen Ausführungsformen kann die Instruktion flexibel spezifizieren oder angeben, ob ein oder mehrere Abschnitte der Eingabeinformationen verschleiert sind oder nicht. Zum Beispiel kann ein bestimmter programmierbarer oder konfigurierbarer Satz aus einem oder mehreren Bits der Instruktion angeben, ob der Exponent verschleiert ist; ein anderer programmierbarer oder konfigurierbarer Satz aus einem oder mehreren Bits der Instruktion kann angeben, ob die Basis verschleiert ist, und ein weiterer programmierbarer oder konfigurierbarer Satz aus einem oder mehreren Bits der Instruktion kann angeben, ob der Modul verschleiert ist. In anderen Ausführungsformen kann die Instruktion implizit angeben (zum Beispiel kann es für einen Opcode festgelegt sein), ob ein oder mehrere Abschnitte der Eingabeinformationen verschleiert sind oder nicht. Zum Beispiel kann es einem ersten Opcode einer ersten Instruktion implizit sein, dass nur ein erster Abschnitt (zum Beispiel ein Exponent) verschleiert ist, es kann einem zweiten, anderen Opcode einer zweiten, anderen Instruktion implizit sein, dass nur ein zweiter, anderer Abschnitt (zum Beispiel ein Modul) verschleiert ist. und es kann einem dritten, anderen Opcode einer dritten, anderen Instruktion implizit sein, dass mehrere Abschnitte (zum Beispiel sowohl Basis, Exponent als auch Modul) verschleiert sind. Kombinationen solcher Ansätze können ebenfalls verwendet werden. Zum Beispiel kann es einem Opcode implizit sein, dass ein erster Abschnitt (zum Beispiel ein Exponent) verschleiert ist, und ein Satz aus einem oder mehreren Bits der Instruktion kann angeben, ob ein zweiter Abschnitt (zum Beispiel ein Modul) verschleiert ist. Es werden eine Reihe verschiedener Kombinationen dieser Ansätze in Betracht gezogen.
  • Eine breite Vielzahl verschiedener Arten von verschleierten Eingabeinformationen 120 sind für verschiedene Ausführungsformen geeignet. Die verschleierten Eingabeinformationen sind nicht die eigentlichen Eingabeinformationen selbst, die in die Modularpotenzierungsberechnungen eingegeben werden. Zum Beispiel ist ein verschleierter Exponent (E*) nicht der eigentliche Exponent (E), der in die Modularpotenzierungsberechnungen eingegeben wird. Vielmehr kann der verschleierte Exponent (E*) einen verschleierten Wert darstellen, der entschleiert werden kann, um den eigentlichen Exponenten (E) zu bestimmen, der in die Modularpotenzierungsberechnungen eingegeben wird. In verschiedenen Ausführungsformen können die verschleierten Eingabeinformationen beliebige aus einer breiten Vielzahl verschiedener Arten von verschlüsselten, gefalteten, modifizierten oder auf sonstige Weise verschleierten Eingabeinformationen enthalten, aus denen die eigentlichen Eingabeinformationen nicht bestimmt werden können außer mit einem von: Schwierigkeit, extremer Schwierigkeit, rechnerischer Untauglichkeit oder Undurchführbarkeit, entsprechend der festgelegten Stufe erhöhter Sicherheit, die für die betreffende Implementierung gewünscht wird, sofern nicht ein Geheimnis (zum Beispiel Geheimnis 108) bekannt ist. Das Geheimnis (zum Beispiel Geheimnis 108) kann dem Prozessor bekannt sein, aber nicht zugänglich oder wenigstens nicht lesbare für Software (zum Beispiel selbst die höchst-bevorrechtigte Software auf Systemebene). Wir wenden uns wieder 1 zu. Eine Ausführungseinheit 106 ist mit der Decodiereinheit 104 und in einigen Ausführungsformen mit dem Register 124 gekoppelt (zum Beispiel wenn die Zeiger zu den Quellenoperanden in dem Register gespeichert sind). Bei Verwendung in einem System kann in einigen Ausführungsformen die Ausführungseinheit dafür geeignet sein, mit dem Speicher 114 gekoppelt zu werden (um zum Beispiel die Quellenoperanden zu empfangen, falls sie darin gespeichert werden). Die Ausführungseinheit kann die eine oder die mehreren decodierten oder auf sonstige Weise konvertierten Instruktionen oder Steuersignale empfangen, die die Instruktion einer modularen Potenzierung mit verschleierten Eingabeinformationen 102 darstellen und/oder davon abgeleitet werden. Die Ausführungseinheit kann auch die Eingabeinformationen 118 für die Modularpotenzierungsoperation empfangen, einschließlich eventueller optionaler verschleierter Eingabeinformationen 120. In einigen Ausführungsformen gibt es optional mindestens einige verschleierten Eingabeinformationen, obgleich der Geltungsbereich der Erfindung nicht darauf beschränkt ist.
  • Wie gezeigt, kann die Ausführungseinheit ein Geheimnis 108, eine Entschleierungseinheit 110, die mit dem Geheimnis gekoppelt ist, und eine Modularpotenzierungseinheit 112, die mit der Entschleierungseinheit gekoppelt ist, enthalten. Wie zuvor beschrieben, kann das Geheimnis der Ausführungseinheit und/oder dem Prozessor zur Verfügung stehen, aber für Software (zum Beispiel selbst die höchst-bevorrechtigte Software auf Systemebene) nicht zugänglich oder wenigstens nicht lesbar sein. In einigen Ausführungsformen können die Entschleierungseinheit und/oder die Ausführungseinheit und/oder der Prozessor dafür geeignet sein, in Reaktion auf die, und/oder im Ergebnis der, Instruktion einer modularen Potenzierung mit verschleierten Eingabeinformationen (zum Beispiel in Reaktion auf Instruktionen oder Steuersignale, die aus der Instruktion decodiert wurden) das Geheimnis zum Entschleiern der verschleierten Eingabeinformationen 120 zu verwenden. Die Entschleierung und/oder die Generierung der eigentlichen Eingabeinformationen können vollständig innerhalb des Funktionsbereichs des Prozessors ausgeführt werden, so dass die eigentlichen Eingabeinformationen niemals durch Software gelesen werden können. In einigen Ausführungsformen kann die Entschleierungseinheit dafür geeignet sein, in Reaktion auf die Instruktion einen Fehler zu signalisieren, falls eine Entschleierungsoperation fehlschlägt. Zum Beispiel können in einigen Ausführungsformen die verschleierten Eingabeinformationen Authentifizierungs- oder Integritätsprüfungsinformationen enthalten, die verwendet werden können, um zu bestimmen, ob die Entschleierungsoperation authentifizierbare Eingabeinformationen und/oder Eingabeinformationen mit Integrität bereitstellt. In einem Aspekt kann eine solche fehlgeschlagene Entschleierung veranlassen, dass ein Fehler signalisiert wird, und/oder kann veranlassen, dass die weitere Ausführung der Instruktion gestoppt wird (es kann zum Beispiel verhindert werden, dass ein Modularpotenzierungsergebnis generierte und gespeichert wird).
  • „Geheimnis“ und „Entschleierung“ sind im vorliegenden Text in einem weitgefasst Sinn so zu verstehen, dass sie auf beliebigen aus einer breiten Vielfalt verschiedener Arten von Informationen, Logik oder einer Kombination von Informationen und Logik basieren, auf deren Grundlage die eigentlichen Eingabeinformationen aus den verschleierten Eingabeinformationen bestimmt werden können, aber ohne die die eigentlichen Eingabeinformationen nicht-wenigstens nicht ohne Schwierigkeit oder extreme Schwierigkeit - aus den verschleierten Eingabeinformationen bestimmt werden können. In einigen Ausführungsformen können die verschleierten Eingabeinformationen verschlüsselte Eingabeinformationen darstellen, und das Geheimnis kann einen geheimen kryptografischen Schlüssel darstellen, der On-Die gespeichert und/oder generiert werden kann und dafür verwendet werden kann, die verschlüsselten Eingabeinformationen zu entschlüsseln, um die eigentlichen Eingabeinformationen zu bestimmen. In anderen Ausführungsformen kann das Geheimnis Informationen darstellen, die in einer bestimmten Weise (zum Beispiel gemäß einem kryptografischen oder mathematischen Algorithmus) mit den verschleierten Eingabeinformationen kombiniert werden können, um die eigentlichen Eingabeinformationen zu bestimmen.
  • In anderen Ausführungsformen kann das Geheimnis Informationen und/oder Logik darstellen, die dafür verwendet werden können, die verschleierten Eingabeinformationen in einer bestimmten Weise zu modifizieren oder zu transformieren (zum Beispiel gemäß einer kryptografischen, mathematischen oder logischen Transformation), um die eigentlichen Eingabeinformationen zu bestimmen. In weiteren Ausführungsformen kann das Geheimnis die eigentlichen Eingabeinformationen selbst darstellen, die als ein Geheimnis in dem Prozessor gespeichert sind und die ausgewählt und verwendet werden können, falls die verschleierten Eingabeinformationen einen bestimmten erforderlichen Wert haben, einen Test bestehen oder Kriterien erfüllen. In weiteren Ausführungsformen kann das Geheimnis Informationen und/oder Logik darstellen, die dafür geeignet sind, die verschleierten Eingabeinformationen in einer geheimen Weise zu modifizieren, um die eigentlichen Eingabeinformationen zu bestimmen. In einigen Ausführungsformen kann das Geheimnis Informationen enthalten, die von früherer Software, die durch diese spätere Software in dem Prozessor gespeichert wurde, nicht gelesen werden kann, und/oder kann Logik enthalten, die von früherer Software in dem Prozessor konfiguriert wurde, aber von dieser späteren Software weder gelesen noch umkonfiguriert werden kann, obgleich der Geltungsbereich der Erfindung nicht darauf beschränkt ist. Alternativ kann das Geheimnis anderen Arten geheimer On-Die-Informationen und/oder geheimer On-Die-Logik darstellen, die zum Entschleiern der verschleierten Eingabeinformationen verwendet werden können. Verschiedene Kombinationen dieser Ansätze sind ebenfalls allgemein geeignet. Es versteht sich, dass dies nur einige wenige veranschaulichende Beispiele sind. Andere Ansätze, die an anderer Stelle im vorliegenden Text besprochen werden, sind ebenfalls geeignet. Darüber hinaus fallen dem Fachmann, der in den Genuss der vorliegenden Offenbarung kommt, noch weitere Ansätze ein.
  • Die Modularpotenzierungseinheit 112 kann dafür geeignet sein, ein Modularpotenzierungsergebnis 122 aus dem kompletten Satz von Eingabeinformationen (einschließlich beispielsweise beliebiger entschleierter Eingabeinformationen) zu generieren. In einigen Ausführungsformen kann das Modularpotenzierungsergebnis innerhalb der Ausführungseinheit und innerhalb des Bereichs der Ausführung derselben einzelnen Instruktion einer modularen Potenzierung mit verschleierten Eingabeinformationen generiert werden. Ein möglicher Vorteil ist, dass dies helfen kann zu vermeiden, dass kryptografisch verarbeitete Abschnitte oder Zwischenergebnisse bloßgelegt werden, die möglicherweise analysiert werden könnten, um die Informationen, die geheim sein sollen (zum Beispiel beliebige der verschiedenen Arten der zuvor beschriebenen verschleierten Eingabeinformationen), herauszulesen. Statt dessen können in einigen Ausführungsformen alle solche Zwischenergebnisse innerhalb der Modularpotenzierungseinheit und/oder der Ausführungseinheit 106 und/oder des Prozessors gehalten werden, anstatt sie in architektonisch sichtbaren Registern oder Speicherorten zu speichern. Sobald das Modularpotenzierungsergebnis generiert wurde, kann die Ausführungseinheit dafür geeignet sein, in Reaktion auf die, und/oder im Ergebnis der, Instruktion das Modularpotenzierungsergebnis an der durch die Instruktion angegebenen Zielort-Speicherposition (zum Beispiel einer Position im Speicher) zu speichern. Oft kann im Fall vieler Anwendungen von Kryptografie mit öffentlichem Schlüssel das Modularpotenzierungsergebnis in einem unverschlüsselten und nicht verschleierten Format gespeichert werden, da es allgemein durch reguläre Software verarbeitet wird.
  • Vorteilhafterweise kann durch Einspeisen verschleierter Eingabeinformationen anstelle der eigentlichen Eingabeinformationen in den Prozessor verhindert werden, dass Software (zum Beispiel sogar bevorrechtigte Malware) die eigentlichen Eingabeinformationen direkt liest, so dass sie die eigentlichen Eingabeinformationen nur mindestens mit Schwierigkeit oder in einigen Ausführungsformen extremer Schwierigkeit (zum Beispiel gemäß der jeweiligen Stufe einer erhöhten Sicherheit, für die betreffende Implementierung gewünscht wird) bestimmen kann. Bei Verwendung in Verbindung mit Kryptografie mit öffentlichem Schlüssel kann dies zum Beispiel helfen, geheime oder private Informationen (zum Beispiel private Schlüssel) zu schützen, und/oder kann auf sonstige Weise helfen, die Sicherheit zu erhöhen.
  • Die Ausführungseinheit und/oder der Prozessor können spezifische oder besondere Logik enthalten (zum Beispiel Transistoren, integrierte Schaltkreise oder andere Hardware, möglicherweise in Kombination mit Firmware (zum Beispiel Instruktionen, die in nicht-flüchtigem Speicher gespeichert sind)), die dafür geeignet ist, in Reaktion auf die, und/oder im Ergebnis der, Instruktion (zum Beispiel in Reaktion auf daraus decodierte Instruktionen oder Steuersignale) die Instruktion einer modularen Potenzierung mit verschleierten Eingabeinformationen auszuführen und/oder das Modularpotenzierungsergebnis zu speichern. Zum Beispiel kann die Ausführungseinheit eine Mikrocode-Engine, eine Zustandsmaschine oder dergleichen enthalten, um die Operationen der modularen Potenzierung auszuführen. In einigen Ausführungsformen kann die Ausführungseinheit eine oder mehrere Eingabestrukturen (zum Beispiel einen oder mehrere Ports, eine oder mehrere Interconnect-Verbindungen, eine Schnittstelle) zum Empfangen der Eingabeinformationen und/oder verschleierten Eingabeinformationen, damit gekoppelte Schaltungen oder Logik zum Empfangen und Verarbeiten der empfangenen Informationen und zum Generieren des Modularpotenzierungsergebnisses, und eine oder mehrere damit gekoppelte Ausgabestrukturen (zum Beispiel einen oder mehrere Ports, eine oder mehrere Interconnect-Verbindungen, eine Schnittstelle) zum Ausgeben des Modularpotenzierungsergebnisses enthalten.
  • Um zu vermeiden, dass das Verständnis der Beschreibung leidet, wurde ein relativ einfacher Prozessor gezeigt und beschrieben. Jedoch kann der Prozessor optional noch weitere Prozessorkomponenten enthalten. Zum Beispiel können verschiedene Ausführungsformen eine Reihe verschiedener Kombinationen und Konfigurationen der Komponenten enthalten, die für die 9-11 gezeigt und beschrieben sind. Alle Komponenten des Prozessors können miteinander gekoppelt werden, damit sie in der beabsichtigten Weise arbeiten können.
  • 2 ist ein Block-Flussdiagramm einer Ausführungsform eines Verfahrens 230 der Ausführung einer Ausführungsform einer Instruktion einer modularen Potenzierung mit verschleierten Eingabeinformationen. In verschiedenen Ausführungsformen kann das Verfahren durch einen Prozessor, eine Instruktionsverarbeitungsvorrichtung oder eine sonstige digitale Logikvorrichtung ausgeführt werden. In einigen Ausführungsformen kann das Verfahren 230 durch den und/oder in dem Prozessor 100 von 1 ausgeführt werden. Die Komponenten, Merkmale und konkreten optionalen Details, die im vorliegenden Text für den Prozessor 100 beschrieben sind, gelten optional auch für das Verfahren 230. Alternativ kann das Verfahren 230 auch durch andere und/oder in anderen Prozessoren oder Vorrichtungen ausgeführt werden. Darüber hinaus kann der Prozessor 100 andere Verfahren ausführen als das Verfahren 230.
  • Das Verfahren enthält bei Block 231 das Empfangen der Instruktion einer modularen Potenzierung mit verschleierten Eingabeinformationen. In verschiedenen Aspekten kann die Instruktion in einem Prozessor oder einem Abschnitt davon (zum Beispiel einer Instruktions-Hol-Einheit, einer Decodiereinheit, einer Busschnittstelleneinheit usw.) empfangen werden. In verschiedenen Aspekten kann die Instruktion von einer Off-Prozessor- und/oder Off-Die-Quelle (zum Beispiel aus einem Speicher, von einer Interconnect-Verbindung usw.) oder von einer On-Prozessor- und/oder On-Die-Quelle (zum Beispiel aus einem Instruktions-Cache, aus einer Instruktionswarteschlange usw.) empfangen werden.
  • Die Instruktion einer modularen Potenzierung mit verschleierten Eingabeinformationen kann mehrere Quellenoperanden (zum Beispiel an mehreren Orten im Speicher) spezifizieren oder auf sonstige Weise angeben, die Eingabeinformationen für eine Modularpotenzierungsoperation speichern. In einigen Ausführungsformen können die Eingabeinformationen eine Basis, einen Exponenten, einen Modul, einen oder mehrere anhand des Moduls vorausberechnete Parameter (zum Beispiel einen oder mehrere Reduktionskonstanten) oder verschiedenen Kombinationen davon enthalten, die ausreichen, um alle benötigten Eingangsgrößen für den betreffenden Ansatz bereitzustellen. In einigen Ausführungsformen können mindestens einige der Eingabeinformationen (zum Beispiel beliebige der oben angesprochenen Eingabeinformationen) optional verschleiert werden, obgleich das nicht erforderlich ist. Die verschleierten Eingabeinformationen können gleich oder ähnlich denen sein, die an anderer Stelle im vorliegenden Text beschrieben sind.
  • Ein Modularpotenzierungsergebnis kann in Reaktion auf die modulare Potenzierung, und/oder im Ergebnis der modularen Potenzierung, mit verschleierten Eingabeinformationen bei Block 232 gespeichert werden. Das Modularpotenzierungsergebnis kann an einer Zielort-Speicherposition gespeichert werden, die durch die Instruktion einer modularen Potenzierung mit verschleierten Eingabeinformationen spezifiziert oder auf sonstige Weise angegeben ist.
  • Das veranschaulichte Verfahren beinhaltet Architekturoperationen (zum Beispiel jene, die aus Software-Perspektive sichtbar sind). In anderen Ausführungsformen kann das Verfahren optional eine oder mehrere Mikroarchitekturoperationen enthalten. Zum Beispiel kann die Instruktion geholt, decodiert oder out-of-order disponiert werden, auf Quellenoperanden kann zugegriffen werden, eine Ausführungseinheit kann Mikroarchitekturoperationen ausführen, um die Instruktion zu implementieren, usw. In einigen Ausführungsformen können die Mikroarchitekturoperationen zum Implementieren der Instruktion optional beliebige von denen enthalten, die für die 3 oder 6-8 gezeigt und beschrieben sind, einschließlich der in diesem Zusammenhang erwähnten Variationen. Eine beispielhafte Operation, die optional ausgeführt werden kann, ist das Entschleiern der verschleierten Eingabeinformationen. Dies kann optional Operationen einer der Entschleierungsansätze enthalten, die an anderer Stelle im vorliegenden Text besprochen werden.
  • Generell kann das vollständige Ausführen der modularen Potenzierung eine relativ große Anzahl von Zyklen in Anspruch nehmen (zum Beispiel Tausende bis Zehntausende oder noch mehr, in Abhängigkeit von den Operandengrößen). Das vollständige Ausführen einer Instruktion einer modularen Potenzierung mit verschleierten Eingabeinformationen kann aufgrund der zum Entschleiern der Operanden benötigten Berechnungen sogar noch mehr Zyklen in Anspruch nehmen.
  • Teilweise aufgrund der relativ großen Anzahl von Zyklen ist es möglich, dass hin und wieder die Ausführung der Instruktion vor der Vollendung unterbrochen werden kann. In einigen Ausführungsformen kann optional eine von mehreren möglichen Vorkehrungen ergriffen werden, um sicherzustellen zu helfen, dass ein Teil- oder Zwischenzustand, der möglicherweise analysiert werden könnte, um geheime Informationen zu bestimmen, nicht für Software lesbar wird.
  • In einigen Ausführungsformen kann die Ausführungseinheit in Reaktion auf eine Unterbrechung während der Ausführung der Instruktion dafür geeignet sein, das Ausführen der Modularpotenzierungsberechnungen und/oder der Instruktion zu stoppen, einen momentanen Zwischenzustand, der zu der oder um die Zeit der Unterbrechung berechnet wurde, zu verschlüsseln, und den verschlüsselten Zwischenzustand an einer Speicherposition (zum Beispiel einer Position im Speicher) zu speichern. Zum Beispiel kann der Zwischenzustand mit einem geheimen Schlüssel des Prozessors verschlüsselt werden, der durch Software nicht gelesen werden kann. Nachdem die Unterbrechung behoben wurde, kann der verschlüsselte Zwischenzustand abgerufen und entschlüsselt werden, und der Algorithmus kann wieder mit dem abgerufenen Zwischenzustand beginnen. In anderen Ausführungsformen kann die Ausführungseinheit in Reaktion auf eine Unterbrechung während des Ausführens der Instruktion dafür geeignet sein, das Ausführen der Modularpotenzierungsberechnungen und/oder der Instruktion zu stoppen und einen momentanen Zwischenzustand, der zu der oder um die Zeit der Unterbrechung berechnet wurde, in einem On-Die-Speicher des Prozessors (zum Beispiel einem nicht-architektonisch sichtbaren Speicher) zu speichern, der durch Software nicht gelesen werden kann. In anderen Ausführungsformen kann die Ausführungseinheit in Reaktion auf eine Unterbrechung während des Ausführens der Instruktion dafür geeignet sein, das Ausführen der Modularpotenzierungsberechnungen und/oder der Instruktion zu stoppen und einen momentane Zwischenzustand, der zu der oder um die Zeit der Unterbrechung berechnet wurde, zu verwerfen. Jeder dieser Ansätze kann optional in dem Prozessor 100 von 1 und/oder dem Verfahren 230 von 2 verwendet werden.
  • Um bestimmte Konzepte weiter zu veranschaulichen, kann es hilfreich sein, eine Reihe möglicher Implementierungsalgorithmen zur modularen Potenzierung in Betracht zu ziehen. Ein möglicher Algorithmus zur Implementierung einer modularen Potenzierung ohne besondere sogenannte Reduktionsverfahren ist in folgendem Pseudo-Code gezeigt:
    • E = (e1023 e1022 e1021 ... e2 e1 e0)2
    • Initialisieren von A = 1
    • Für i von 1023 bis 0
    • A = A2 modulo N
    • Wenn ei = 1
    • A = A*B modulo N
    • Ausgabe von A
  • Wie gezeigt, kann der Exponent durch seine einzelnen Bits (ei) dargestellt werden, wobei ei im Bereich von e0 bis e1023 liegt. Zu Beginn kann ein Wert A gleich eins eingestellt werden. Dann kann der Wert A während jeder von 1024 Iterationen einer Schleife aktualisiert werden. Genauer gesagt, kann der Wert A innerhalb jeder der 1024 Iterationen, so aktualisiert werden, dass er gleich seinem Quadrat nach modulo N ist (d. h. A = A2 modulo N). Für jede der 1024 Iterationen wird, wenn das entsprechende Exponentenbit für die Schleife (d. h. ei) auf eine binäre eins gesetzt wird (d. h. wenn ei = 1), der Wert A weiter so aktualisiert, dass er gleich dem Produkt seiner selbst und der Basis (B) nach modulo N ist (d. h. A = A*B modulo N). Wenn hingegen das entsprechende Exponentenbit für die Schleife (d. h. ei) zu einer binären null gelöscht wird (d. h. wenn ei = 0), dann geschieht dies nicht. Am Ende der Schleife wird der Wert als das Ergebnis der modularen Potenzierung ausgegeben.
  • Dieser Algorithmus zur Implementierung einer modularen Potenzierung kann gewünschtenfalls optional verwendet werden. Jedoch ist die Implementierung dieses Algorithmus generell oft langsam. Einerseits sind die eine oder die mehreren modulo-Operationen, die innerhalb der Iterationen der Schleife ausgeführt werden, generell langsam zu implementieren. Repräsentativ können diese Operationen mit divisionsartigen Operationen implementiert werden, die allgemein eine relativ lange Berechnungszeit erfordern, zumindest im Vergleich zu anderen Arten von Operationen wie Multiplikationen. Außerdem müssen solche eine oder mehreren modulo-Operationen innerhalb jeder Iteration der Schleife ausgeführt werden, von denen es viele geben kann (in diesem Beispiel 1024, oder in einigen Fällen noch mehr). Dementsprechend eignet sich dieser Algorithmus zwar gemäß einigen Ausführungsformen zur Implementierung der modularen Potenzierung, doch oft kann es wünschenswert sein, einen Modularpotenzierungsalgorithmus zu verwenden, der spezielle modulare Reduktionsregimes verwendet, um eine schnellere Leistung zu erreichen.
  • 3 ist ein Block-Flussdiagramm einer beispielhaften Ausführungsform eines detaillierten Verfahrens 335 der Ausführung einer Ausführungsform einer Instruktion einer modularen Potenzierung mit verschleierten Eingabeinformationen mit Montgomery-Reduktion. In verschiedenen Ausführungsformen kann das Verfahren durch einen Prozessor, eine Instruktionsverarbeitungsvorrichtung oder eine sonstige digitale Logikvorrichtung ausgeführt werden. In einigen Ausführungsformen kann das Verfahren 335 durch den und/oder in dem Prozessor 100 von 1 ausgeführt werden. Die Komponenten, Merkmale und konkreten optionalen Details, die im vorliegenden Text für den Prozessor 100 beschrieben sind, gelten optional auch für das Verfahren 335. Alternativ kann das Verfahren 335 durch andere und/oder in anderen Prozessoren oder Vorrichtungen ausgeführt werden. Darüber hinaus kann der Prozessor 100 auch andere Verfahren als das Verfahren 335 ausführen.
  • Das Verfahren enthält das Empfangen der Instruktion einer modularen Potenzierung mit verschleierten Eingabeinformationen bei Block 336. Die Instruktion kann einen oder mehrere Quellenoperanden spezifizieren oder auf sonstige Weise angeben, die eine optional verschleierte Basis (B), einen optional verschleierten Exponenten (E), einen optional verschleierten Modul (N), optional eine oder mehrere optionale verschleierten Reduktionskonstanten, die in den Montgomery-Reduktion verwendet werden, oder eine beliebige Kombination davon speichern, die wenigstens ausreichende Eingangsgrößen in den Montgomery-Reduktionsalgorithmus darstellen. Ausführungsformen ziehen das Verschleiern jeder beliebigen Kombination solcher Eingabeinformationen im Bereich von keine davon bis alle davon in Betracht.
  • Dann können bei Block 337 jegliche optional verschleierten Eingabeinformationen, falls es welche für die betreffende Ausführungsform gibt, entschleiert werden. Die Entschleierung kann unter Verwendung eines der Ansätze und/oder in einer der Arten ausgeführt werden, die an anderer Stelle im vorliegenden Text beschrieben sind.
  • Dann kann bei Block 338 eine der benötigten Reduktionskonstanten der Montgomery-Reduktion berechnet werden, falls sie nicht bereits als vorausberechnete Reduktionskonstanten in den Eingabeinformationen bereitgestellt wurden, die durch den oder die Quellenoperanden erzeugt wurden. Alternativ können eine oder mehrere der Reduktionskonstanten optional als vorausberechnete Konstanten in den Eingabeinformationen bereitgestellt werden, die durch den oder die Quellenoperanden erzeugt wurden. Dies kann helfen zu vermeiden, dass diese Reduktionskonstanten innerhalb des Bereichs der Ausführung der Instruktion berechnet werden müssen. In einigen Ausführungsformen, die 1024-Bit Operanden verwenden, kann das Verfahren zwei Reduktionskonstanten (R2 und U) verwenden, die durch die Montgomery-Reduktion als Funktionen des Moduls (N) definiert sind, wie in den Gleichungen 2 und 3 gezeigt: R2 = 2 2048  mod N
    Figure DE112016004365T5_0002
    U = N 1  modulo  ( 2 64 )
    Figure DE112016004365T5_0003
  • Als Nächstes können bei Block 339 Modularpotenzierungsberechnungen mit Montgomery-Reduktion unter Verwendung der Reduktionskonstanten R2 und U ausgeführt werden. Zum Beispiel kann dies wie im folgenden Pseudo-Code gezeigt ausgeführt werden:
    • E = (e1023 e1022 e1021 ... e2 e1 e0)2
    • B' = B*R2 // Montgomery-Multiplikation = = B*R mod N
    • Initialisieren von A = B'
    • Identifizieren des Index des höchstwertigen Setzbits in E als X
    • Für i im Bereich von X-1 bis 0
    • A = A2 // Montgomery-Quadrat
    • Wenn ei = 1
    • A = A*B' // Montgomery-Multiplikation
    • Ausgabe der Montgomery-Reduktion(A)
  • In dem oben beschriebenen Pseudo-Code kann:
    1. (1) die Montgomery-Multiplikation der Zahlen X und Y (X*Y* R-1) mod N darstellen;
    2. (2) das Montgomery-Quadrat einer Zahl X (X*X* R-1) mod N darstellen;
    3. (3) die Montgomery-Reduktion einer Zahl X (X* R-1) mod N darstellen.
  • Der Exponent kann wieder durch seine einzelnen Bits (ei) dargestellt werden, wobei ei im Bereich von e0 bis e1023 in diesem konkreten Beispiel eines 1024-Bit-Exponenten liegt. Zu Beginn kann eine Montgomery-Multiplikation ausgeführt werden, um einen B'-Wert durch Multiplizieren der Basis mit der R2-Konstante zu berechnen (d. h. B' = Montgomery-Multiplikation(B,R2)). Dann kann ein Wert A gleich B' eingestellt werden. Als Nächstes wird ein optionaler Aspekt implementiert, in dem der Index (X) des höchstwertigen Setzbits in dem Exponenten (E) identifiziert wird und dann die Schleife optional nur für Werte des Zählers (i) im Bereich von (X-1) bis null ausgeführt wird. Oder anders ausgedrückt: Anstatt die maximale Anzahl von Iterationen der Schleife auszuführen (zum Beispiel 1024 Iterationen), können Iterationen, die gelöschten Bits entsprechen, die höherwertig sind als das höchstwertige Setzbit in dem Exponenten (E), optional weggelassen werden. Dies kann helfen, in einigen Fällen die Leistung zu verbessern, ist aber optional nicht erforderlich. Statt dessen kann gewünschtenfalls optional die maximale Anzahl von Iterationen der Schleife (zum Beispiel 1024 Iterationen) ausgeführt werden.
  • Dann kann der Wert A während jeder der Iterationen der Schleife aktualisiert werden. Genauer gesagt, kann der Wert A innerhalb jeder der Iterationen so aktualisiert werden, dass er gleich seinem Montgomery-Quadrat ist. Es ist zu beachten, dass im Gegensatz zur oben beschriebenen Nicht-Montgomery-Implementierung keine Notwendigkeit besteht, divisionsartige Operationen auszuführen, wodurch die Leistung gesteigert wird. Für jede der Iterationen wird, wenn das entsprechende Exponentenbit für die Schleife (d. h. ei) auf eine binäre eins gesetzt wird (d. h. wenn ei = 1), der Wert A weiter so aktualisiert, dass er gleich der Montgomery-Multiplikation seiner selbst und des B'-Wertes ist. Wenn hingegen das entsprechende Exponentenbit für die Schleife (d. h. ei) zu einer binären null gelöscht wird (d. h. wenn ei = 0), dann geschieht dies nicht. Es ist auch hier wieder zu beachten, dass, im Gegensatz zur oben beschriebenen Nicht-Montgomery-Implementierung, keine Notwendigkeit besteht, divisionsartige Operationen auszuführen, wodurch die Leistung gesteigert wird. Am Ende der Schleife wird eine Montgomery-Reduktion an dem endgültigen Wert A ausgeführt. Dies stellt das Modularpotenzierungsergebnis dar.
  • Wir wenden uns wieder 3 zu. Bei Block 340 kann das durch die Montgomery-Reduktion berechnete Modularpotenzierungsergebnis an der durch die Instruktion angegebenen Zielort-Speicherposition gespeichert werden. Jede der Zielort-Speicherpositionen, die an anderer Stelle im vorliegenden Text beschrieben sind, ist geeignet.
  • Das oben besprochene Verfahren stellt nur eine veranschaulichende beispielhafte Ausführungsform eines Verfahrens zum Ausführen einer Instruktion einer modularen Potenzierung mit verschleierten Eingabeinformationen mit Montgomery-Reduktion dar. Andere Verfahren werden ebenfalls in Betracht gezogen und sind für den Fachmann, der in den Genuss der vorliegenden Offenbarung kommt, offensichtlich. Zum Beispiel basierte das veranschaulichte Verfahren auf einer Basis, einem Exponenten und einem Modul von 1024-Bit, aber in anderen Ausführungsformen können die Basis, der Exponent und der Modul andere Quadrierungsgrößen haben, die über mehrere Größenordnungen reichen (zum Beispiel im Bereich von 256-Bits bis zur Größenordnung von 16.384 Bits). Als ein anderes Beispiel basierte das veranschaulichte Verfahren auf einem Montgomery-Reduktionsalgorithmus auf Wort-Ebene, der eine Wort-Größe von 64-Bits verwendet; doch in anderen Ausführungsformen kann optional eine Wort-Größe von 32-Bit oder eine sonstige Wort-Größe verwendet werden. Außerdem wurde das Verfahren in einer relativ grundlegenden Form beschrieben, aber es können optional Operationen zu dem Verfahren hinzugefügt und/oder aus dem Verfahren weggelassen werden. Außerdem ist die konkrete Reihenfolge der Operationen nicht erforderlich; vielmehr können bestimmte Operationen optional in anderen Reihenfolgen und/oder überlappend ausgeführt werden.
  • Eine konkrete beispielhafte Ausführungsform einer geeigneten modularen Potenzierung mit verschleierten Eingabeinformationen mit der Bezeichnung MODEXP_LOCKED1 ist in dem Pseudo-Code unten veranschaulicht.
    Figure DE112016004365T5_0004
  • Die U-Konstante wird innerhalb der Montgomery-Reduktionsoperation wie folgt verwendet (was auch in anderen Montgomery-Reduktionsoperationen im vorliegenden Text verwendet werden kann):
    Figure DE112016004365T5_0005
    Figure DE112016004365T5_0006
  • Die Instruktion MODEXP_LOCKED1 kann ein erstes Register (R1) explizit spezifizieren oder implizit angeben, zum Beispiel ein erstes 64-Bit-Allzweckregister, das dazu dient, eine effektive Adresse, einen effektiven Zeiger oder einen sonstigen Hinweis auf einen Ort im Speicher zu speichern, der zum Speichern eines ersten Quellenoperanden (Src1) dient, der einen verschleierten Modul hat. Die Instruktion kann außerdem ein zweites Register (R1) explizit spezifizieren oder implizit angeben, zum Beispiel ein zweites 64-Bit-Allzweckregister, das dazu dient, eine effektive Adresse, einen effektiven Zeiger oder einen sonstigen Hinweis auf einen Ort im Speicher zu speichern, der zum Speichern eines zweiten Quellenoperanden (Src2) dient, der einen verschleierten Exponenten hat. Die Instruktion kann außerdem ein drittes Register (R3) explizit spezifizieren oder implizit angeben, zum Beispiel ein drittes 64-Bit-Allzweckregister, das dazu dient, eine effektive Adresse, einen effektiven Zeiger oder einen sonstigen Hinweis auf einen Ort im Speicher zu speichern, der zum Speichern eines Quellen-Zielortoperanden (SrcDst) dient, der zu Beginn eine verschleierte Basis hat und bei Vollendung der Instruktion als eine Zielort-Speicherposition dient, wo ein Modularpotenzierungsergebnis gespeichert werden soll. Alternativ kann statt dessen auch optional eine der verschiedenen anderen Arten des Angebens der Quellen- und/oder Zielortoperanden, die an anderer Stelle im vorliegenden Text offenbart sind, verwendet werden.
  • In dieser Ausführungsform sind die Basis, der Exponent und der Modul alle verschleiert. Alternativ können in anderen Ausführungsformen optional eines oder mehrere, einschließlich jeder Kombination, von Basis, Exponent und Modul verschleiert werden. Die Instruktion kann eine Ausführungseinheit steuern oder auf sonstige Weise veranlassen, die verschleierte Basis, den verschleierten Exponenten und den verschleierte Modul zu entschleiern. Jeder der an anderer Stelle im vorliegenden Text angesprochenen Entschleierungsansätze ist geeignet (zum Beispiel einer der unten für die 6-8 beschriebenen Ansätze). Als ein veranschaulichendes Beispiel kann die Ausführungseinheit verschlüsselte Eingabeinformationen unter Verwendung eines geheimen Prozessor-Kryptografieschlüssels entschlüsseln. Optional kann ein Fehler signalisiert werden, falls eine der Entschleierungen fehlschlägt.
  • In dieser Ausführungsform kann, da die Montgomery-Reduktionskonstanten nicht als Eingaben durch die Quellenoperanden bereitgestellt wurden, die Ausführungseinheit steuern oder auf sonstige Weise veranlassen, die Instruktion die Montgomery-Reduktionskonstanten zu berechnen. Genauer gesagt, können die R2- und die U-Konstante innerhalb der Ausführung der Instruktion berechnet werden. Repräsentativ können diese Konstanten einmal pro Modularpotenzierungsoperation oder -instruktion vorausberechnet werden. Dann kann die Instruktion die Ausführungseinheit steuern oder auf sonstige Weise veranlassen, die Montgomery-Reduktion von Modularpotenzierungsberechnungen unter Verwendung der Reduktionskonstanten auszuführen. Und schließlich kann die Ausführungseinheit, in Reaktion auf die Instruktion, ein Modularpotenzierungsergebnis an der Zielort-Speicherposition speichern (zum Beispiel in diesem Fall SrcDst).
  • Eine weitere konkrete beispielhafte Ausführungsform einer geeigneten modularen Potenzierung mit verschleierten Eingabeinformationen mit der Bezeichnung MODEXP_LOCKED2 ist in dem Pseudo-Code unten veranschaulicht.
    Figure DE112016004365T5_0007
    Figure DE112016004365T5_0008
  • Die Instruktion MODEXP_LOCKED2 ähnelt der Instruktion MODEXP_LOCKED1. Die obige Besprechung und die Variationen für die Instruktion MODEXP_LOCKED1 gelten optional auch für die Instruktion MODEXP_LOCKED2. Ein Unterschied ist jedoch, dass die Instruktion MODEXP_LOCKED2 die Reduktionskonstanten R2 und U als Eingaben durch die Quellenoperanden (zum Beispiel als vorausberechnete Konstanten) bereitstellt. In der veranschaulichten Ausführungsform sind die Reduktionskonstanten optional verkettet (zum Beispiel wie durch Symbol || gezeigt) oder auf sonstige Weise zusammen mit dem Modul bereitgestellt, obgleich das nicht erforderlich ist. Die Reduktionskonstanten lassen sich aus dem Modul ableiten, so dass ein gewisser Vorteil daraus gezogen werden kann, sie im selben Quellenoperanden zu behalten. Jedoch können in anderen Ausführungsformen die Reduktionskonstanten durch andere Quellenoperanden und/oder mehrere Quellenoperanden bereitgestellt werden. Da die Reduktionskonstanten als Eingangsgrößen bereitgestellt werden, besteht für die Ausführungseinheit keine Notwendigkeit, diese Reduktionskonstanten als Teil der Operation der Instruktion zu berechnen. Statt dessen können die Reduktionskonstanten entschleiert werden, falls sie verschleiert sind, was auch für die anderen Eingangsparameter gilt. In einigen Ausführungsformen können, wenn der Modul verschleiert ist, die Reduktionskonstanten ebenfalls verschleiert werden, während in einem Fall, wobei der Modul nicht verschleiert ist, die Reduktionskonstanten nicht verschleiert zu sein brauchen.
  • Ein weiteres Beispiel eines geeigneten Reduktionsalgorithmus zur modularen Potenzierung ist die Barrett-Reduktion. Andere Ausführungsformen betreffen ein Verfahren ähnlich dem in 3 gezeigten, außer wenn eine Barrett-Reduktionskonstante verwendet wird und ein Barrett-Reduktionsalgorithmus zum Ausführen der modularen Potenzierung verwendet wird. In einigen Ausführungsformen kann das Verfahren eine Reduktionskonstante verwenden, die durch die Barrett-Reduktion als Funktionen des Moduls (N) definiert ist, wie in Gleichung 4 gezeigt: U = Untergrenze ( 2 2048 /N )
    Figure DE112016004365T5_0009
  • Die Barrett-Reduktion kann die Reduktionskonstanten verwenden, wie im folgenden Pseudo-Code gezeigt:
    Figure DE112016004365T5_0010
    Figure DE112016004365T5_0011
  • Die Barrett-Multiplikation von 2 Zahlen X und Y kann als Barrett-Reduktion(X*Y, N, U) ausgeführt werden. Dies kann auch ähnlich für die Quadrat-Operation ausgeführt werden. Es ist zu beachten, dass dies in gewisser Weise einer Montgomery-Multiplikation von zwei Zahlen ähnelt, was als eine reguläre Multiplikation der zwei Zahlen ausgeführt werden kann, gefolgt von einer Montgomery-Reduktion.
  • Die Barrett-Reduktion hat gewisse Ähnlichkeiten mit der zuvor beschriebenen Montgomery-Reduktion. Um zu vermeiden, dass die Beschreibung unverständlich wird, werden die verschiedenen oder zusätzlichen Merkmale überwiegend ohne Wiederholen aller ähnlichen Merkmale und optionalen Variationen beschrieben. Jedoch versteht es sich, dass die Merkmale und optionalen Variationen, die für die Montgomery-Reduktion beschrieben sind, optional auch für die Barrett-Reduktion gelten, sofern nichts anderes ausgesagt wird oder sofern es nicht auf sonstige Weise eindeutig klar ist (sofern sie beispielsweise nicht mit der Barrett-Reduktion inkompatibel sind).
  • Eine weitere konkrete beispielhafte Ausführungsform einer geeigneten modularen Potenzierung mit verschleierten Eingabeinformationen mit der Bezeichnung MODEXP_LOCKED3 ist die gleiche wie die, die oben für MODEXP_LOCKED1 gezeigt ist, außer dass die Barrett-Reduktionskonstanten und -berechnungen anstelle der Montgomery-Reduktionskonstanten und -berechnungen verwendet werden. Eine weitere konkrete beispielhafte Ausführungsform einer geeigneten modularen Potenzierung mit verschleierten Eingabeinformationen mit der Bezeichnung MODEXP_LOCKED4 ist die gleiche wie die, die oben für MODEXP_LOCKED2 gezeigt ist, außer dass die Barrett-Reduktionskonstanten und - berechnungen anstelle der Montgomery-Reduktionskonstanten und -berechnungen verwendet werden.
  • 4 ist ein Blockschaubild einer beispielhaften Ausführungsform einer Instruktion einer modularen Potenzierung mit verschleierten Eingabeinformationen 402. Die Instruktion enthält einen Operationscode oder Opcode 442. Der Opcode kann mehrere Bits oder ein oder mehrere Felder darstellen, die geeignet sind, die Instruktion und/oder die Operation zu identifizieren, die ausgeführt werden soll (zum Beispiel ein Operation einer modularen Potenzierung mit verschleierten Eingabeinformationen).
  • Die Instruktion enthält außerdem ein erstes Quellenhinweisfeld 444, ein zweites Quellenhinweisfeld 446 und ein drittes Quelle/Zielort-Hinweisfeld 448. Diese Quellenhinweisfelder können dafür verwendet werden, Quellenspeicherorte für Quellenoperanden zu spezifizieren oder auf sonstige Weise anzugeben, die verwendet werden, um Eingangsparameter und/oder optional verschleierte Eingangsparameter bereitzustellen. Zum Beispiel kann jedes dieser Felder Bits enthalten, um eine Adresse eines Registers, einer Speicherposition oder einer sonstigen Speicherungsposition für den zugehörigen Operanden zu spezifizieren. In anderen Ausführungsformen können weniger oder mehr Quellen- und/oder Zielort-Hinweisfelder verwendet werden. Zum Beispiel können Eingabeinformationen optional an einer einzelnen größeren Speicherposition bereitgestellt werden. Als ein anderes Beispiel können ein oder mehrere dieser Speicherorte optional der Instruktion (zum Beispiel dem Opcode) implizit oder inhärent sein, anstatt spezifiziert zu werden. Des Weiteren kann optional gewünschtenfalls ein zusätzliches separates Zielort-Hinweisfeld verwendet werden, anstatt das dritte Feld als eine Quelle/Zielort-Hinweisfeld auszulegen.
  • In einigen Ausführungsformen kann die Instruktion optional auch ein Operandengröße-Hinweisfeld 450 haben. Das Operandengröße-Hinweisfeld kann es erlauben, eine Größe der Quellenoperanden zu spezifizieren oder anzugeben. Dies kann helfen, Operanden in flexibler oder variabler sowie architektonisch programmierbarer oder konfigurierbarer Größe zu verwenden. In einigen Ausführungsformen kann ein einzelnes Größenfeld verwendet werden, um eine einzelne Größe für alle Quellenoperanden zu spezifizieren oder auf sonstige Weise anzugeben, obgleich der Geltungsbereich der Erfindung nicht darauf beschränkt ist. In einigen Ausführungsformen kann, um einen relativ hohen Grad an Flexibilität bereitzustellen, die Instruktion es erlauben, die Operandengröße in einem Bereich von etwa 256-Bits bis etwa 16.000-Bits zu konfigurieren, obgleich der Geltungsbereich der Erfindung auf keine bekannte Größe beschränkt ist. Alternativ können gewünschtenfalls optional Operanden mit fester Größe verwendet werden, und das Operandengröße-Hinweisfeld kann optional weggelassen werden. Zum Beispiel kann optional eine feste, ausreichend große Operandengröße verwendet werden, um die Größen von Operanden zu berücksichtigen, von denen erwartet wird, dass sie für die betreffende Implementierung verwendet werden, und alle nicht-verwendeten Bits, die nicht durch kleinere Operanden beansprucht werden, können optional mit Nullen ausgefüllt werden.
  • In einigen Ausführungsformen kann die Instruktion optional auch ein oder mehrere Operandenverschleierungs-Hinweisfelder 452 haben. Jedes des einen oder der mehreren Operandenverschleierungs-Hinweisfelder kann verwendet werden, um zu angeben, ob ein entsprechender Operand optional verschleiert ist oder nicht. Zum Beispiel kann es in einigen Ausführungsformen ein erstes Operandenverschleierungs-Hinweisfeld oder einen ersten Satz aus einem oder mehreren Bits geben, um anzugeben, ob ein erster Operand (der zum Beispiel zum Speichern einer Basis verwendet werden soll) verschleiert ist oder nicht; es kann ein zweites Operandenverschleierungs-Hinweisfeld oder einen zweiten Satz aus einem oder mehreren Bits geben, um anzugeben, ob ein zweiter Operand (der zum Beispiel zum Speichern eines Exponenten verwendet, werden soll) verschleiert ist oder nicht; und es kann ein drittes Operandenverschleierungs-Hinweisfeld oder einen dritten Satz aus einem oder mehreren Bits geben, um anzugeben, ob ein dritter Operand (der zum Beispiel zum Speichern eines Moduls verwendet werden soll) verschleiert ist oder nicht. Alternativ kann der Opcode der Instruktion optional festlegen, welche Operanden (zum Beispiel welcher einer Basis, eines Exponenten und eines Moduls) verschleiert sind. Zum Beispiel können optional verschiedene Opcode-Instruktionen bereitgestellt werden, um verschiedenen Kombinationen von „Basis, Exponent und Modul sind verschleiert“, „alle von ihnen sind moduliert“ und „keines von ihnen ist moduliert“ bereitzustellen, um nur einige Beispiele zu nennen. Vorteilhafterweise kann dies helfen, es einem Programmierer zu erlauben, zu konfigurieren oder zu spezifizieren, welche Operanden verschleiert werden, so dass Operanden, die gesichert werden sollen, gesichert werden können, während andere Operanden, die nicht gesichert werden sollen, nicht entschleiert zu werden brauchen. Als ein Beispiel sind in einigen Algorithmen, wie zum Beispiel DSA und Diffie-Hellman, einige Operanden öffentlich, wie zum Beispiel der Modul (zum Beispiel durch das NIST veröffentlichte Primes). In Diffie-Hellman Phase-1 ist die Basis ebenfalls veröffentlicht oder öffentlich, während sie in Phase-2 geheim oder privat sein muss. In einigen Fällen kann eine bessere Leistung erreicht werden, indem die Informationen, die öffentlich sind, nicht verschleiert werden und nicht entschleiert zu werden brauchen.
  • Dies ist nur ein veranschaulichendes Beispiel einer geeigneten Instruktion. Alternative Ausführungsformen können eine Teilmenge der veranschaulichten Felder enthalten und/oder können zusätzliche Felder hinzufügen. Die veranschaulichte Anordnung der Felder ist nicht erforderlich; vielmehr können die Felder auf verschiedene Weise umgeordnet werden. Darüber hinaus kann jedes der Felder entweder aus einem fortlaufenden Satz von Bits bestehen oder kann nicht-fortlaufende oder getrennte Bits enthalten, die das Feld logisch darstellen.
  • 5 ist ein Blockschaubild einer beispielhaften Ausführungsform eines Immediate 554, das eine beispielhafte Ausführungsform eines Operandengröße-Hinweisfeldes 550 und eine beispielhafte Ausführungsform der Operandenverschleierungs-Hinweisfelder 556 aufweist. In dieser Ausführungsform ist das Immediate ein 8-Bit-Immediate, obgleich optional auch ein größeres oder kleineres Immediate verwendet werden kann.
  • Bits[3:0] des Immediate stellen ein Basis-Operandengröße-Hinweisfeld 550A dar. Alternativ können weniger oder mehr Bits verwendet werden, um die Basis-Operandengröße darzustellen, möglicherweise als einen Versatz von einer Mindestoperandengröße. Bit[7] des Immediate stellt ein Dreifach-Operandengröße-Hinweisfeld 550B dar. Das Basis-Operandengröße-Hinweisfeld und das Dreifach-Operandengröße-Hinweisfeld stellen zusammen oder gemeinsam ein Operandengröße-Hinweisfeld dar, um eine Größe von Operanden als eine aus einer Anzahl verschiedener möglicher Größen anzugeben. In einigen Ausführungsformen kann das Basis-Operandengröße-Hinweisfeld eine Basisgröße für die Operanden spezifizieren, und das Dreifach-Operandengröße-Hinweisfeld kann angeben, ob die Basisgröße verdreifacht werden soll oder nicht, um die Größe der Operanden zu bestimmen. Zum Beispiel können in einer Implementierung die Bits[3:0] um ein Bit nach links verschoben werden, um die Basisgröße zu bestimmen, und falls Bit[7] auf eine binäre eins gesetzt wird, so kann die Basisgröße verdreifacht werden. Wenn hingegen Bit[7] zu einer binären null gelöscht wird, so kann die Basisgröße als die Operandengröße ohne Größenverdreifachung verwendet werden. Ein möglicher Vorteil des Dreifach-Operandengröße-Hinweisfeldes ist, dass einige Verwendungen Operandengrößen beinhalten, die nicht nur ein Quadrat sind, sondern dreimal ein Quadrat. Das Dreifach-Operandengröße-Hinweisfeld erlaubt eine bequeme Skalierung um eine solche Potenzierung hoch drei.
  • Bits[6:4] des Immediate stellen drei Operandenverschleierungs-Hinweisfelder 556 dar. Jedes dieser Felder kann verwendet werden, um anzugeben, ob ein anderer entsprechender von drei Quellenoperanden verschleiert ist. Als ein veranschaulichendes Beispiel kann Bit[6] einem Quellenoperanden zum Speichern des Moduls entsprechen, Bit[5] kann einem Quellenoperanden zum Speichern des Exponenten entsprechen, und Bit[4] kann einem Quellenoperanden zum Speichern der Basis entsprechen. Alternativ können diese Bits der Basis, dem Exponenten und dem Modul auf verschiedene Weise zugewiesen sein. Ein Wert (zum Beispiel eine binäre eins) von jedem der Bits[6: 4] kann angeben, dass der entsprechende Quellenoperand verschleiert ist, während ein anderer Wert (zum Beispiel eine binäre null) angeben kann, dass der entsprechende Quellenoperand nicht verschleiert ist. Ein möglicher Vorteil solcher Vor-Operandenverschleierungs-Hinweisfelder ist eine erhöhte Flexibilität. Zum Beispiel können einige Verwendungen einen bestimmten des Exponenten, des Moduls und der Basis als geheim haben, während andere Verwendungen den gleichen bestimmten als öffentlich oder privat haben können, und das entsprechende Operandenverschleierungs-Hinweisfeld kann es einem Programmierer erlauben, den bestimmten entweder zu verschleiern oder nicht zu verschleiern, um entweder mehr Sicherheit zu erreichen oder unnötige Entschleierungen zu vermeiden, die dazu neigen können, die Leistung zu verringern.
  • Eine weitere konkrete beispielhafte Ausführungsform einer geeigneten modularen Potenzierung mit verschleierten Eingabeinformationen mit der Bezeichnung MODEXP_LOCKED5 ist in dem Pseudo-Code unten veranschaulicht.
    Figure DE112016004365T5_0012
    Figure DE112016004365T5_0013
  • Die Instruktion MODEXP_LOCKED5 ähnelt der MODEXP_LOCKED1. Die Besprechung und die Variationen, die oben für die Instruktion MODEXP_LOCKED1 angesprochen wurden, gelten optional auch für die Instruktion MODEXP_LOCKED5. Ein Unterschied ist jedoch, dass die Instruktion MODEXP_LOCKED5 es erlaubt, jeden der Quellenoperanden (Srcl, Src2 und SrcDst) optional zu verschleiern (zum Beispiel eine programmierbare Konfiguration). Nur jene verschleierten Parameter müssen entschleiert werden.
  • Eine weitere konkrete beispielhafte Ausführungsform einer geeigneten modularen Potenzierung mit verschleierten Eingabeinformationen mit der Bezeichnung MODEXP_LOCKED6 ist die gleiche wie die oben für MODEXP_LOCKED3 gezeigte, außer dass sie die gleiche Immediate- und Verschleierungskonfigurierbarkeit verwendet wie die Instruktion MODEXP_LOCKED5. Eine weitere konkrete beispielhafte Ausführungsform einer geeigneten modularen Potenzierung mit verschleierten Eingabeinformationen mit der Bezeichnung MODEXP_LOCKED7 ist die gleiche wie die oben für MODEXP_LOCKED4 gezeigte, außer dass sie die gleiche Immediate- und Verschleierungskonfigurierbarkeit verwendet wie die Instruktion MODEXP_LOCKED5.
  • 6 ist ein Blockschaubild einer Ausführungsform einer Ausführungseinheit 606, die dafür geeignet ist, eigentliche Modularpotenzierungs-Eingabeinformationen 660 aus verschlüsselten Modularpotenzierungs-Eingabeinformationen 620 in Reaktion auf eine Instruktion einer modularen Potenzierung mit verschlüsselten Eingabeinformationen zu entschlüsseln. Die verschlüsselten Eingabeinformationen sind ein Beispiel von verschleierten Eingabeinformationen. Die verschlüsselten Eingabeinformationen werden an einer Speicherposition 616 (zum Beispiel einer Register- oder Speicherposition) gespeichert, die durch die Instruktion spezifiziert oder auf sonstige Weise angegeben werden kann. Die Ausführungseinheit enthält eine Entschlüsselungseinheit 610. Die Ausführungseinheit und/oder die Entschlüsselungseinheit können gekoppelt sein, um die verschlüsselten Eingabeinformationen zu empfangen. Die Entschlüsselungseinheit und/oder die Ausführungseinheit können auch gekoppelt sein, um einen geheimen kryptografischen Schlüssel 608 zu empfangen. Der geheime kryptografische Schlüssel ist der Entschlüsselungseinheit und/oder der Ausführungseinheit zugänglich und verfügbar, aber ist der Software 662 (zum Beispiel selbst der höchst-bevorrechtigten System-Software) nicht zugänglich oder kann wenigstens nicht von ihr gelesen werden. In einigen Ausführungsformen kann der geheime kryptografische Schlüssel zunächst durch Software in den Prozessor geschrieben oder darin gespeichert worden sein, aber anschließend ist die Software 662 möglicherweise nicht in der Lage, ihn zu lesen. In der veranschaulichten Ausführungsform ist der geheime kryptografische Schlüssel Teil der Ausführungseinheit. In anderen Ausführungsformen kann der geheime kryptografische Schlüssel statt dessen von der Ausführungseinheit getrennt, aber mit der Ausführungseinheit und/oder der Entschlüsselungseinheit gekoppelt sein (zum Beispiel in einem Schlüssel-Fach des Prozessors gespeichert sein).
  • Die Entschlüsselungseinheit kann den geheimen kryptografischen Schlüssel empfangen und kann dafür geeignet sein, den geheimen kryptografischen Schlüssel zu verwenden, um die verschlüsselten Eingabeinformationen zu den entschlüsselten Eingabeinformationen 660 zu entschlüsseln. Eine Reihe verschiedener im Stand der Technik bekannter Entschlüsselungsalgorithmen sind geeignet, wie zum Beispiel Advanced Encryption Standard (AES), Data Encryption Standard (DES), Triple DES (3DES), Rivest Cipher 4 (RC4) und andere Block/Stream-Chiffren. Eine Modularpotenzierungseinheit 612 ist mit der Entschlüsselungseinheit gekoppelt und kann die entschlüsselten Eingabeinformationen empfangen. Die Modularpotenzierungseinheit kann die entschlüsselten Eingabeinformationen zum Berechnen eines Modularpotenzierungsergebnisses verwenden, wie an anderer Stelle im vorliegenden Text beschrieben. Vorteilhafterweise können die eigentlichen Eingabeinformationen 660, die in den Modularpotenzierungsberechnungen verwendet werden, durch die Ausführungseinheit und/oder ihren Prozessor in Reaktion auf die Instruktion generiert werden, aber diese eigentlichen Eingabeinformationen brauchen niemals in einem Architekturregister des Prozessors oder an einer Speicherposition oder irgend einem sonstigen architektonisch sichtbaren Speicherort abgelegt zu werden oder auf sonstige Weise für die Software 662 lesbar zu sein.
  • 7 ist ein Blockschaubild einer Ausführungsform einer Ausführungseinheit 706, die dafür geeignet ist, geheime Modularpotenzierungs-Eingabeinformationen 760 aus einem Modularpotenzierungs-Eingabeinformations-Indikator 720 in Reaktion auf eine Instruktion einer modularen Potenzierung mit verschleierten Eingabeinformationen zu bestimmen. Der Eingabeinformations-Indikator ist ein Beispiel von verschleierten Eingabeinformationen. Der Indikator kann in weitem Sinne eine beliebige aus einer breiten Vielzahl verschiedener Arten von Informationen oder Werten darstellen, die dafür verwendet werden können, einen Satz geheimer eigentlicher Eingabeinformationen auszuwählen, zu identifizieren oder auf sonstige Weise angeben. Der Indikator kann an einer Speicherposition 716 (zum Beispiel einer Register- oder Speicherposition) gespeichert werden, die durch die Instruktion spezifiziert oder auf sonstige Weise angegeben werden kann.
  • Die Ausführungseinheit enthält eine Modularpotenzierungs-Eingabeinformations-Bestimmungseinheit 710, die im vorliegenden Text auch einfach als eine Bestimmungseinheit bezeichnet wird. Die Ausführungseinheit und/oder die Bestimmungseinheit können gekoppelt sein, um den Eingabeinformations-Indikator zu empfangen. Die Bestimmungseinheit und/oder die Ausführungseinheit können auch mit verschiedenen Sätzen geheimer Modularpotenzierungs-Eingabeinformationen 708 gekoppelt sein. Die verschiedenen Sätze geheimer Modularpotenzierungs-Eingabeinformationen stellen ein Geheimnis dar, das der Bestimmungseinheit und/oder der Ausführungseinheit zugänglich und verfügbar ist, aber der Software 762 (zum Beispiel selbst der höchst-bevorrechtigten System-Software) nicht zugänglich oder verfügbar ist. In der veranschaulichten Ausführungsform sind die verschiedenen Sätze geheimer Eingabeinformationen Teil der Ausführungseinheit. In anderen Ausführungsformen können die verschiedenen Sätze geheimer Eingabeinformationen statt dessen von der Ausführungseinheit getrennt, aber mit der Ausführungseinheit und/oder der Entschlüsselungseinheit gekoppelt sein. Die Bestimmungseinheit 710 kann dafür geeignet sein, den Indikator 720 zu verwenden, um einen Satz geheimer Eingabeinformationen 760 aus den verschiedenen Sätzen geheimer Eingabeinformationen 708 zu bestimmen oder zu erhalten.
  • Die Bestimmungseinheit kann den Indikator verwenden, um die geheimen Eingabeinformationen in verschiedenen Ausführungsformen auf unterschiedliche Weise zu bestimmen. In einigen Ausführungsformen können die verschiedenen Sätze geheimer Eingabeinformationen in einer Liste, Tabelle, Gruppierung oder einer sonstigen geordneten Anordnung geordnet sein. Der Indikator kann einen Index, einen Versatz, eine Zahl oder einen sonstigen Indikator darstellen, um einen bestimmten Satz geheimer Eingabeinformationen auszuwählen oder anzugeben. Zum Beispiel kann ein Indikator mit dem Wert acht geheime Eingabeinformationen im achten Eintrag einer Gruppierung auswählen. In anderen Ausführungsformen kann der Indikator ein Identifikator sein. Die verschiedenen Sätze geheimer Eingabeinformationen brauchen nicht unbedingt in einer bestimmten Reihenfolge angeordnet zu sein. Jedoch kann jeder der verschiedenen Sätze geheimer Eingabeinformationen einen anderen entsprechenden eindeutigen Identifikator haben. Zum Beispiel kann ein erster Satz einen Identifikator „00000000“ haben, ein zweiter Satz kann einen Identifikator „00000010“ haben, ein dritter Satz kann einen Identifikator „01000000“ haben, und so weiter. Der Identifikator kann auf einen Identifikator des Satzes geheimer Eingabeinformationen abgestimmt werden, um diesen Satz geheimer Eingabeinformationen auszuwählen oder anzugeben. Dies sind nur ein paar veranschaulichende Beispiele. Es werden noch andere Arten der Verwendung eines Indikators zum Bestimmen eines geheimen Satzes von Eingabeinformationen in Betracht gezogen und sind dem Fachmann offensichtlich, der in den Genuss der vorliegenden Offenbarung kommt.
  • Eine Modularpotenzierungseinheit 712 ist mit der Bestimmungseinheit 710 gekoppelt und kann die geheimen Eingabeinformationen 760 empfangen. Die Modularpotenzierungseinheit kann die geheimen Eingabeinformationen zum Berechnen eines Modularpotenzierungsergebnisses verwenden, wie an anderer Stelle im vorliegenden Text beschrieben. Vorteilhafterweise können die geheimen Eingabeinformationen durch die Ausführungseinheit und/oder ihren Prozessor in Reaktion auf die Instruktion generiert werden, doch für die Software 762 sind sie niemals lesbar.
  • 8 ist ein Blockschaubild einer Ausführungsform einer Ausführungseinheit 806, die dafür geeignet ist, entschleierte und authentifizierte Modularpotenzierungs-Eingabeinformationen 860 anhand authentifizierbarer verschleierter Eingabeinformationen 820 in Reaktion auf eine Instruktion einer modularen Potenzierung mit verschleierten Eingabeinformationen zu bestimmen. Die authentifizierbaren verschleierten Eingabeinformationen werden an einer Speicherposition 816 (zum Beispiel einer Register- oder Speicherposition) gespeichert, die durch die Instruktion spezifiziert oder auf sonstige Weise angegeben werden kann. Die Eingabeinformationen werden nicht nur verschleiert, sondern können auch authentifizierbar sein. In einigen Ausführungsformen kann eine solche Authentifizierung erreicht werden, indem man zusätzliche Bits (zum Beispiel Authentifizierungs- oder Integritätsprüfungsbits) zu den verschleierten Eingabeinformationen hinzufügt.
  • Die Ausführungseinheit enthält eine . Modularpotenzierungs-Eingabeinformationen-Entschleierungs- und -Authentifizierungseinheit 810. Diese Einheit wird im vorliegenden Text auch einfach als die Entschleierungs- und - Authentifizierungseinheit bezeichnet. Die Ausführungseinheit und/oder die Entschleierungs- und Authentifizierungseinheit können gekoppelt sein, um die authentifizierbaren verschleierten Eingabeinformationen zu empfangen. Die Entschleierungs- und Authentifizierungseinheit und/oder die Ausführungseinheit können auch mit einem Geheimnis 808 gekoppelt sein, das für die Software 862 (zum Beispiel selbst die höchst-bevorrechtigte System-Software) nicht zugänglich oder wenigstens nicht lesbar ist. In der veranschaulichten Ausführungsform ist das Geheimnis Teil der Ausführungseinheit. In anderen Ausführungsformen kann das Geheimnis statt dessen von der Ausführungseinheit getrennt, aber mit der Ausführungseinheit und/oder der Entschlüsselungseinheit gekoppelt sein.
  • Die Entschleierungs- und Authentifizierungseinheit kann dafür geeignet sein, das Geheimnis und die authentifizierbaren verschleierten Eingabeinformationen zu verwenden, um die authentifizierten entschleierten Eingabeinformationen 860 zu erhalten. Die Entschleierung kann so ausgeführt werden, wie an anderer Stelle im vorliegenden Text beschrieben. In einigen Ausführungsformen können die authentifizierbaren verschleierten Eingabeinformationen verschlüsselte und authentifizierbare Eingabeinformationen enthalten. Zum Beispiel kann in einigen Ausführungsformen ein Prozessor, in dem die Ausführungseinheit enthalten ist, eine Schlüsselcodierungsinstruktion in seinem Instruktionssatz haben. Der Prozessor kann die Schlüsselcodierungsinstruktion ausführen, um die authentifizierbaren verschleierten Eingabeinformationen zu generieren, die die verschleierten Eingabeinformationen sowie zusätzliche Authentifizierungs- oder Integritätsprüfungsinformationen enthalten. Alternativ kann optional ein Schlüsselhüll-Algorithmus verwendet werden, um die authentifizierbaren und verschleierten Eingabeinformationen bereitzustellen. Die Entschleierungs- und Authentifizierungseinheit kann dafür geeignet sein, solche Informationen unter Verwendung eines geheimes oder verborgenen kryptografischen Schlüssels zu entschlüsseln und zu authentifizieren.
  • Die Authentifizierung kann fehlschlagen, falls die generierten entschleierten Eingabeinformationen nicht das sind, was erwartet wird, und/oder nicht mit den Authentifizierungsinformationen übereinstimmen. In einigen Ausführungsformen kann die Ausführungseinheit im Fall einer solchen fehlgeschlagenen Authentifizierung einen Fehler 864 signalisieren. Zum Beispiel kann der Fehler an die Software (zum Beispiel einen Fehler-Handler eines Betriebssystems) übermittelt werden. In einem solchen Fall kann der Prozessor das Ausführen der Instruktion stoppen, ohne eine Ausgabe zu speichern.
  • Eine Modularpotenzierungseinheit 812 ist mit der Entschleierungs- und Authentifizierungseinheit 810 gekoppelt und kann die authentifizierten entschleierten Eingabeinformationen 860 empfangen. Die Modularpotenzierungseinheit kann die authentifizierten entschleierten Eingabeinformationen zum Berechnen eines Modularpotenzierungsergebnisses verwenden, wie an anderer Stelle im vorliegenden Text beschrieben. Vorteilhafterweise kann eine Authentifizierungs- oder Integritätsprüfung zusammen mit der Verschleierung verwendet werden.
  • Andere Ausführungsformen betreffen Modularpotenzierungsinstruktionen, die keine verschleierten Eingabeinformationen angeben und nicht die Fähigkeit haben, Eingabeinformationen zu verschleiern und zu entschleiern. Diese Instruktionen können den anderen im vorliegenden Text offenbarten Modularpotenzierungsinstruktionen ähneln, außer dass sie, anstatt verschleierte Eingabeinformationen anzugeben, nur in der Lage sind, nicht verschleierte Eingabeinformationen anzugeben. Die nicht verschleierten Eingabeinformationen können beliebige von denen sein, die an anderer Stelle im vorliegenden Text angesprochen wurden (zum Beispiel die Basis, der Exponent und der Modul, die tatsächlich zum Ausführen der modularen Potenzierung verwendet werden). Es mag keine Notwendigkeit bestehen, die Eingabeinformationen zu entschlüsseln oder auf sonstige Weise zu entschleiern, da sie nicht verschleiert sind und direkt in den Modularpotenzierungsberechnungen verwendet werden können. Abgesehen von solchen Verschleierungs-/Entschleierungsunterschieden können die Instruktionen ansonsten ähnliche oder die gleichen Eigenschaften und Variationen haben wie die anderen im vorliegenden Text offenbarten Modularpotenzierungsinstruktionen. Repräsentativ können solche Instruktionen in bestimmten Implementierungen verwendet werden, wo es möglicherweise nicht notwendig oder nicht hinreichend bedeutsam ist, die Eingabeinformationen zu verschleiern. Zum Beispiel kann dies der Fall sein, wo ein kryptografischer Schlüssel kurzlebig ist (zum Beispiel nur für eine oder ein paar Verschlüsselungen verwendet wird), wo Daten, die verschlüsselt werden sollen, nicht hinreichend bedeutsam sind, um die Verschleierung zu rechtfertigen, wo die Instruktionen für nicht-kryptografische modulare Potenzierungen verwendet werden usw. In solchen Fällen kann es weniger nützlich sein, die Eingabeinformationen zu verschleiern, während allgemein eine gewisse Leistungssteigerung erhaltenen werden kann, indem die Notwendigkeit vermieden wird, eine Entschleierung auszuführen.
  • Beispielhafte Kernarchitekturen, Prozessoren und Computerarchitekturen
  • Prozessorkerne können auf unterschiedliche Weise, für verschiedene Zwecke und in verschiedenen Prozessoren implementiert werden. Zum Beispiel können Implementierungen solcher Kerne enthalten: 1) einen Allzweck-In-Order-Kern, der für Allzweckberechnungen vorgesehen ist; 2) einen Hochleistungs-Allzweck-Out-of-Order-Kern, der für Allzweckberechnungen vorgesehen ist; 3) einen Spezialkern, der überwiegend für Grafik- und/oder wissenschaftliche (Durchsatz-) Berechnungen vorgesehen ist. Implementierungen verschiedener Prozessoren können enthalten: 1) eine CPU, die einen oder mehrere Allzweck-In-Order-Kerne enthält, die für Allzweckberechnungen vorgesehen sind, und/oder einen oder mehrere Allzweck-Out-of-Order-Kerne, die für Allzweckberechnungen vorgesehen sind; und 2) einen Koprozessor, der einen oder mehrere Spezialkerne enthält, die überwiegend für Grafik- und/oder wissenschaftliche (Durchsatz-) Berechnungen vorgesehen sind. Solche verschiedenen Prozessoren führen zu verschiedenen Computersystemarchitekturen, die enthalten können: 1) den Koprozessor auf einem von der CPU getrennten Chip; 2) den Koprozessor auf einem getrennten Die im selben Package wie eine CPU; 3) den Koprozessor auf demselben Die wie eine CPU (in diesem Fall wird ein solcher Koprozessor mitunter als Speziallogik, wie zum Beispiel integrierte Grafik- und/oder wissenschaftliche (Durchsatz-) Logik, oder als Spezialkerne bezeichnet); und 4) ein System-on-Chip, das auf demselben Die die beschriebene CPU (mitunter als der oder die Anwendungskerne oder der oder die Anwendungsprozessoren bezeichnet), den oben beschriebenen Koprozessor und zusätzliche Funktionalität enthalten kann. Als Nächstes werden beispielhafte Kernarchitekturen beschrieben, gefolgt von Beschreibungen beispielhafter Prozessoren und Computerarchitekturen.
  • Beispielhafte Kernarchitekturen
  • In-Order- und Out-of-Order-Kern-Blockschaubild
  • 9A ist ein Blockschaubild, das sowohl eine beispielhafte In-Order-Pipeline als auch eine beispielhafte Registerumbenennungs-Out-of-Order-Ausgabe/Ausführungs-Pipeline gemäß Ausführungsformen der Erfindung veranschaulicht. 9B ist ein Blockschaubild, das sowohl eine beispielhafte Ausführungsform eines In-Order-Architekturkerns als auch einen beispielhaften Registerumbenennungs-Out-of-Order-Ausgabe/Ausführungsarchitektur-Kern veranschaulicht, der in einen Prozessor gemäß Ausführungsformen der Erfindung zu integrieren ist. Die mit durchgezogenen Linien umrandeten Kästchen in den 9A-B veranschaulichen die In-Order-Pipeline und den In-Order-Kern, während die optionale Hinzufügung der mit Strichlinien umrandeten Kästchen Registerumbenennungs-Out-of-Order-Ausgabe/Ausführungs-Pipeline und -Kern veranschaulicht. Aufgrund der Tatsache, dass der In-Order-Aspekt eine Teilmenge des Out-of-Order-Aspekts ist, wird der Out-of-Order-Aspekt beschrieben.
  • In 9A enthält eine Prozessor-Pipeline 900 eine Hol-Stufe 902, eine Längendecodierstufe 904, eine Decodierstufe 906, eine Zuweisungsstufe 908, eine Umbenennungsstufe 910, eine Disponierungsstufe (auch als eine Dispatch- oder Ausgabestufe bekannt) 912, eine Registerlese-/Speicherlese-Stufe 914, eine Ausführungsstufe 916, eine Zurückschreibe-/Speicherschreib-Stufe 918, eine Ausnahmehandhabungsstufe 922 und eine Festlegungsstufe 924.
  • 9B zeigt den Prozessorkern 990, der eine Frontend-Einheit 930 enthält, die mit einer Ausführungs-Engine-Einheit 950 gekoppelt ist, und beide sind mit einer Speichereinheit 970 gekoppelt. Der Kern 990 kann ein Reduced Instruction Set Computing (RISC)-Kern, ein Complex Instruction Set Computing (CISC)-Kern, ein Very Long Instruction Word (VLIW)-Kern, ein Hybridkern oder ein alternativer Kerntyp sein. Als eine weitere Option kann der Kern 990 ein Spezialkern sein, wie zum Beispiel ein Netzwerk- oder Kommunikationskern, eine Komprimierungs-Engine, ein Koprozessorkern, ein Allzweckberechnungs-Grafikverarbeitungseinheits (GPGPU)-Kern, ein Grafikkern oder dergleichen.
  • Die Frontend-Einheit 930 enthält eine Abzweigvorhersageeinheit 932, die mit einer Instruktions-Cache-Einheit 934 gekoppelt ist, die mit einem Instruktionsübersetzungspuffer (Translation Lookaside Buffer, TLB) 936 gekoppelt ist, der mit einer Instruktions-Hol-Einheit 938 gekoppelt ist, die mit einer Decodiereinheit 940 gekoppelt ist. Die Decodiereinheit 940 (oder der Decodierer) kann Instruktionen decodieren und als eine Ausgabe eine oder mehrere Mikro-Operationen, Mikro-Code-Eintrittspunkte, Mikro-Instruktionen, andere Instruktionen oder sonstige Steuersignale generieren, die aus den ursprünglichen Instruktionen decodiert werden oder auf sonstige Weise die ursprünglichen Instruktionen widerspiegeln oder aus ihnen abgeleitet werden. Die Decodiereinheit 940 kann unter Verwendung einer Reihe verschiedener Mechanismen implementiert werden. Zu Beispielen geeigneter Mechanismen gehören Nachschlagetabellen, Hardware-Implementierungen, programmierbare Logik-Arrays (PLAs), Mikrocode-Nurlesespeicher (ROMs) usw. In einer Ausführungsform enthält der Kern 990 einen Mikrocode-ROM oder ein sonstiges Medium, das Mikrocode für bestimmte Makro-Instruktionen speichert (zum Beispiel in der Decodiereinheit 940 oder auf sonstige Weise innerhalb der Frontend-Einheit 930). Die Decodiereinheit 940 ist mit einer Umbenennungs-/Zuweisungs-Einheit 952 in der Ausführungs-Engine-Einheit 950 gekoppelt.
  • Die Ausführungs-Engine-Einheit 950 enthält die Umbenennungs-/Zuweisungs-Einheit 952, die mit einer Beendigungseinheit 954 und einem Satz aus einer oder mehreren Disponierungseinheiten 956 gekoppelt ist. Die eine oder die mehreren Disponierungseinheiten 956 stellen eine beliebige Anzahl verschiedener Disponierer dar, einschließlich Reservierungsstationen, ein zentrales Instruktionsfenster usw. Die eine oder die mehreren Disponierungseinheiten 956 sind mit der einen oder den mehreren physischen Registerdateieinheiten 958 gekoppelt. Jede der einen oder der mehreren physischen Registerdateieinheiten 958 stellt eine oder mehrere physische Registerdateien dar, von denen verschiedene eine oder mehrere verschiedene Datentypen speichern, wie zum Beispiel skalare ganze Zahl, skalares Gleitkomma, gepackte ganze Zahl, gepacktes Gleitkomma, Vektor-Ganzzahl, Vektor-Gleitkomma, Status (zum Beispiel einen Instruktionszeiger, der die Adresse der nächsten auszuführenden Instruktion ist) usw. In einer Ausführungsform umfasst die physische Registerdateieinheit 958 eine Vektorregistereinheit, eine Schreibmaskenregistereinheit und eine skalare Registereinheit. Diese Registereinheiten können Architekturvektorregister, Vektormaskenregister und Allzweck-Register bereitstellen. Die eine oder die mehreren physischen Registerdateieinheiten 958 werden von der Beendigungseinheit 954 überlappt, um verschiedene Möglichkeiten zu veranschaulichen, wie die Registerumbenennungs- und Out-of-Order-Ausführung implementiert werden kann (zum Beispiel unter Verwendung eines oder mehrerer Umordnungspuffer und einer oder mehrerer Beendigungsregisterdateien; unter Verwendung einer oder mehrerer zukünftige Dateien, eines oder mehrerer Verlaufspuffer und einer oder mehrerer Beendigungsregisterdateien; unter Verwendung einer Registerkarte und eines Pools von Registers, usw.). Die Beendigungseinheit 954 und die eine oder die mehreren physischen Registerdateieinheiten 958 sind mit dem oder den Ausführungsclustern 960 gekoppelt. Das eine oder die mehreren Ausführungscluster 960 enthalten einen Satz aus einer oder mehreren Ausführungseinheiten 962 und einen Satz aus einer oder mehreren Speicherzugriffseinheiten 964. Die Ausführungseinheiten 962 können verschiedene Operationen (zum Beispiel Verschiebungen, Addition, Subtraktion, Multiplikation) und an verschiedenen Datentypen (zum Beispiel skalares Gleitkomma, gepackte ganze Zahl, gepacktes Gleitkomma, Vektor-Ganzzahl, Vektor-Gleitkomma) ausführen. Während einige Ausführungsformen eine Anzahl von Ausführungseinheiten enthalten können, die speziell bestimmten Funktionen oder Sätze von Funktionen dienen, brauchen andere Ausführungsformen nur eine Ausführungseinheit oder mehrere Ausführungseinheiten zu enthalten, die allesamt alle Funktionen ausführen. Die eine oder die mehreren Disponierungseinheiten 956, die eine oder die mehreren physischen Registerdateieinheiten 958 und das eine oder die mehreren Ausführungscluster 960 sind so gezeigt, dass sie eventuell zu mehreren vorhanden sind, weil bestimmte Ausführungsformen getrennte Pipelines für bestimmte Arten von Daten oder Operationen erzeugen (zum Beispiel eine Skalare-Ganzzahl-Pipeline, eine Skalare-Gleitkomma/Gepackte-Ganzzahl/Gepackte-Gleitkomma/Vektor-Ganzzahl/Vektor-Gleitkomma-Pipeline und/oder eine Speicherzugriffspipeline, die alle ihre eigene Disponierungseinheit, ihre eigene physische Registerdateieinheit und/oder ihr eigenes Ausführungscluster haben; und im Fall einer separaten Speicherzugriffspipeline werden bestimmte Ausführungsformen implementiert, in denen nur das Ausführungscluster dieser Pipeline die eine oder die mehreren Speicherzugriffseinheiten 964 hat). Es versteht sich außerdem, dass, wo separate Pipelines verwendet werden, eine oder mehrere dieser Pipelines Out-of-Order-Ausgabe/Ausführungs-Pipelines und der Rest In-Order-Pipelines sein können.
  • Der Satz Speicherzugriffseinheiten 964 ist mit der Speichereinheit 970 gekoppelt, die eine Daten-TLB-Einheit 972 enthält, die mit einer Daten-Cache-Einheit 974 gekoppelt ist, die mit einer Level 2 (L2)-Cache-Einheit 976 gekoppelt ist. In einer beispielhaften Ausführungsform können die Speicherzugriffseinheiten 964 eine Ladeeinheit, eine Adressenspeichereinheit und eine Datenspeichereinheit enthalten, die jeweils mit der Daten-TLB-Einheit 972 in der Speichereinheit 970 gekoppelt sind. Die Instruktions-Cache-Einheit 934 ist des Weiteren mit einer Level 2 (L2)-Cache-Einheit 976 in der Speichereinheit 970 gekoppelt. Die L2-Cache-Einheit 976 ist mit einer oder mehreren anderen Cache-Ebenen und letztendlich mit einem Hauptspeicher gekoppelt.
  • Zum Beispiel kann die beispielhafte Registerumbenennungs-Out-of-Order-Ausgabe/Ausführungs-Kernarchitektur die Pipeline 900 wie folgt implementieren: 1) die Instruktions-Hol-Einheit 938 führt die Hol- und Längendecodierungsstufen 902 und 904 aus; 2) die Decodiereinheit 940 führt die Decodierstufe 906 aus; 3) die Umbenennungs-/Zuweisungs-Einheit 952 führt die Zuweisungsstufe 908 und die Umbenennungsstufe 910 aus; 4) die eine oder die mehreren Disponierungseinheiten 956 führen die Disponierungsstufe 912 aus; 5) die eine oder die mehreren physischen Registerdateieinheiten 958 und die Speichereinheit 970 führen die Registerlese-/Speicherlese-Stufe 914 aus; das Ausführungscluster 960 führt die Ausführungsstufe 916 aus; 6) die Speichereinheit 970 und die eine oder die mehreren physischen Registerdateieinheiten 958 führen die Zurückschreibe-/Speicherschreib-Stufe 918 aus; 7) verschiedene Einheiten können an der Ausnahmehandhabungsstufe 922 beteiligt sein; und 8) die Beendigungseinheit 954 und die eine oder die mehreren physischen Registerdateieinheiten 958 führen die Festlegungsstufe 924 aus.
  • Der Kern 990 kann einen oder mehrere Instruktionssätze unterstützen (zum Beispiel den x86-Instruktionssatz (mit einigen Erweiterungen, die neueren Versionen hinzugefügt wurden); den MIPS-Instruktionssatz von MIPS Technologies aus Sunnyvale, Kalifornien; den ARM-Instruktionssatz (mit optionalen zusätzlichen Erweiterungen, wie zum Beispiel NEON) von ARM Holdings aus Sunnyvale, Kalifornien), einschließlich der im vorliegenden Text beschriebenen einen oder mehreren Instruktionen. In einer Ausführungsform enthält der Kern 990 Logik zum Unterstützen einer Gepackte-Daten-Instruktionssatzerweiterung (zum Beispiel AVX1, AVX2), wodurch die Operationen, die von vielen Multimedia-Anwendungen verwendet werden, unter Verwendung gepackter Daten ausgeführt werden können.
  • Es versteht sich, dass der Kern Multithreading unterstützen kann (das Ausführen von zwei oder mehr parallelen Sätzen von Operationen oder Threads) und dies auf vielerlei Weise tun kann, einschließlich Zeit-geslictes Multithreading, simultanes Multithreading (wenn ein einzelner physischer Kern einen logischen Kern für jeden der Threads bereitstellt, so führt dieser physische Kern gleichzeitig Multithreading aus) oder eine Kombination davon (zum Beispiel Zeit-geslictes Holen und Decodieren und anschließendes simultanes Multithreading, wie zum Beispiel in der Intel® Hyperthreading-Technologie).
  • Während die Registerumbenennung im Kontext der Out-of-Order-Ausführung beschrieben wird, versteht es sich, dass Registerumbenennung auch in einer In-Order-Architektur verwendet werden kann. Während die veranschaulichte Ausführungsform des Prozessors auch separate Instruktions- und Daten-Cache-Einheiten 934/974 und eine gemeinsam genutzte L2-Cache-Einheit 976 enthält, können alternative Ausführungsformen einen einzelnen internen Cache sowohl für Instruktionen als auch für Daten haben, wie zum Beispiel einen interne Level 1 (L1)-Cache oder mehrere Ebenen von internem Cache. In einigen Ausführungsformen kann das System eine Kombination aus einem internen Cache und einem externen Cache, der sich außerhalb des Kerns und/oder des Prozessors befindet, enthalten. Alternativ kann sich der gesamte Cache außerhalb des Kerns und/oder des Prozessors befinden.
  • Spezielle beispielhafte In-Order-Kernarchitektur
  • 10A-B veranschaulichen ein Blockschaubild einer konkreteren beispielhaften In-Order-Kernarchitektur, wobei dieser Kern einer von mehreren Logik-Blöcken (die andere Kerne der gleichen Art und/oder anderer Arten enthalten) in einem Chip wäre. Die Logik-Blöcke kommunizieren in Abhängigkeit von der Anwendung über ein bandbreitenstarkes Interconnect-Netzwerk (zum Beispiel ein Ringnetzwerk) mit einer Festfunktionslogik, Speicher-E/A-Schnittstellen und anderer notwendiger E/A-Logik.
  • 10A ist ein Blockschaubild eines einzelnen Prozessorkerns zusammen mit seiner Verbindung zu dem On-Die-Interconnect-Netzwerk 1002 und mit seiner lokalen Teilmenge des Level 2 (L2)-Cache 1004 gemäß Ausführungsformen der Erfindung. In einer Ausführungsform unterstützt ein Instruktions-Decodierer 1000 den x86-Instruktionssatz mit einer Gepackte-Daten-Instruktionssatzerweiterung. Ein L1-Cache 1006 erlaubt latenzarme Zugriffe auf Cache-Speicher in die skalaren und Vektor-Einheiten hinein. Während in einer Ausführungsform (zur Vereinfachung des Designs) eine skalare Einheit 1008 und eine Vektor-Einheit 1010 separate Registersätze verwenden (skalare Register 11012 bzw. Vektor-Register 1014) und zwischen ihnen transferierte Daten in Speicher geschrieben und dann in einen Level 1 (L1)-Cache 1006 zurückgelesen werden, können alternative Ausführungsformen. der Erfindung einen anderen Ansatz verwenden (zum Beispiel einen einzelnen Registersatz verwenden oder einen Kommunikationspfad enthalten, der einen Datentransfer zwischen den zwei Registerdateien erlaubt, ohne geschrieben und zurückgelesen zu werden).
  • Die lokale Teilmenge des L2-Cache 1004 ist Teil eines globalen L2-Cache, der in separate lokale Teilmengen - eine pro Prozessorkern - geteilt ist. Jeder Prozessorkern hat einen direkten Zugangspfad zu seiner eigenen lokalen Teilmenge des L2-Cache 1004. Durch einen Prozessorkern gelesene Daten werden in seiner L2-Cache-Teilmenge 1004 gespeichert, und es kann rasch auf sie zugegriffen werden, während parallel andere Prozessorkerne auf ihre eigenen lokalen L2-Cache-Teilmengen zugreifen. Durch einen Prozessorkern geschriebene Daten werden in seiner eigenen L2-Cache-Teilmenge 1004 gespeichert und werden erforderlichenfalls aus anderen Teilmengen geleert. Das Ringnetzwerk gewährleistet Kohärenz für gemeinsam genutzte Daten. Das Ringnetzwerk ist bidirektional, um es Agenten, wie zum Beispiel Prozessorkernen, L2-Caches und anderen Logik-Blöcken, zu erlauben, innerhalb des Chips miteinander zu kommunizieren. Jeder Ringdatenpfad ist pro Richtung 1012-Bits breit.
  • 10B ist eine vergrößerte Ansicht eines Teils des Prozessorkerns in 10A gemäß Ausführungsformen der Erfindung. 10B enthält einen L1-Daten-Cache-Teil 1006A des L1-Cache 1004 sowie mehr Details im Hinblick auf die Vektor-Einheit 1010 und die Vektor-Register 1014. Genauer gesagt, ist die Vektor-Einheit 1010 eine 16-breite Vektorverarbeitungseinheit (VPU) (siehe die 16-breite ALU 1028), die eine oder mehrere von Ganzzahl-, Einzelpräzisionsgleit- und Doppelpräzisionsgleit-Instruktionen ausführt. Die VPU unterstützt das Swizzeln der Registereingaben mit der Swizzel-Einheit 1020, die numerische Konvertierung mit den Zahlenkonvertiereinheiten 1022A-B und eine Replikation mit der Replikationseinheit 1024 am Speichereingang. Schreibmaskenregister 1026 erlauben das Vorhersagen resultierender Vektorschreibvorgänge.
  • Prozessor mit integriertem Speicher-Controller und Grafik
  • 11 ist ein Blockschaubild eines Prozessors 1100 gemäß Ausführungsformen der Erfindung, der mehr als einen Kern haben kann, einen integrierten Speicher-Controller haben kann, und integrierte Grafik haben kann. Die mit durchgezogenen Linien umrandeten Kästchen in 11 veranschaulichen einen Prozessor 1100 mit einem einzelnen Kern 1102A, einem Systemagenten 1110, einem Satz aus einem oder mehreren Bus-Controller-Einheiten 1116, während die optionale Hinzufügung der mit Strichlinien umrandeten Kästchen einen alternativen Prozessor 1100 mit mehreren Kerne 1102A-N, einem Satz aus einer oder mehreren integrierten Speicher-Controller-Einheiten 1114 in der Systemagent-Einheit 1110 und Spezial-Logik 1108 veranschaulicht.
  • Somit können verschiedene Implementierungen des Prozessors 1100 enthalten: 1) eine CPU, wobei die Spezial-Logik 1108 integrierte Grafik- und/oder wissenschaftliche (Durchsatz-) Logik ist (die einen oder mehrere Kerne enthalten kann) und die Kerne 1102A-N ein oder mehrere Allzweck-Kerne sind (zum Beispiel Allzweck-In-Order-Kerne, Allzweck-Out-of-Order-Kerne, eine Kombination aus beiden); 2) einen Koprozessor, wobei die Kerne 1102A-N eine große Anzahl von Spezialkernen sind, die überwiegend für Grafik- und/oder wissenschaftliche (Durchsatz-) Zwecke vorgesehen sind; und 3) einen Koprozessor, wobei die Kerne 1102A-N eine große Anzahl von Allzweck-In-Order-Kernen sind. Somit kann der Prozessor 1100 ein Allzweckprozessor, ein Koprozessor oder ein Spezialprozessor sein, wie zum Beispiel ein Netzwerk- oder Kommunikationsprozessor, eine Komprimierungs-Engine, ein Grafikprozessor, eine GPGPU (Allzweck-Grafikverarbeitungseinheit), einen durchsatzstarker Many Integrated Core (MIC)-Koprozessor (der 30 oder mehr Kerne enthält), ein eingebetteter Prozessor oder dergleichen. Der Prozessor kann auf einem oder mehreren Chips implementiert werden. Der Prozessor 1100 kann ein Teil von einem oder mehreren Substraten sein und/oder kann unter Verwendung einer beliebigen aus einer Anzahl von Prozesstechnologien, wie zum Beispiel BiCMOS, CMOS oder NMOS, auf einem oder mehreren Substraten implementiert werden.
  • Die Speicherhierarchie enthält eine oder mehrere Cache-Ebenen innerhalb der Kerne, einen Satz aus einem oder mehreren gemeinsam genutzten Cache-Einheiten 1106, und externen Speicher (nicht gezeigt), der mit dem Satz integrierter Speicher-Controller-Einheiten 1114 gekoppelt ist. Der Satz aus gemeinsam genutzten Cache-Einheiten 1106 kann einen oder mehrere Mid-Level-Caches, wie zum Beispiel Level 2 (L2)-, Level 3 (L3)-, Level 4 (L4)- oder sonstige Cache-Ebenen, einen Last-Level-Cache (LLC) und/oder Kombinationen davon enthalten. Während in einer Ausführungsform eine Ring-basierte Interconnect-Einheit 1112 die integrierte Grafiklogik 1108, den Satz aus gemeinsam genutzten Cache-Einheiten 1106 und die Systemagent-Einheit 1110 oder die eine oder die mehreren integrierten Speicher-Controller-Einheiten 1114 miteinander verbindet, können alternative Ausführungsformen jede beliebige Anzahl allgemein bekannter Techniken verwenden, um diese Einheiten miteinander zu verbinden. In einer Ausführungsform wird die Kohärenz zwischen einer oder mehreren Cache-Einheiten 1106 und Kernen 1102-A-N beibehalten.
  • In einigen Ausführungsformen sind einer oder mehrere der Kerne 1102A-N zum Multithreading befähigt. Der Systemagent 1110 enthält jene Komponenten, die die Kerne 1102A-N koordinieren und betreiben. Die Systemagent-Einheit 1110 kann zum Beispiel eine Energiesteuereinheit (PCU) und eine Anzeigeeinheit enthalten. Die PCU kann Logik und Komponenten darstellen oder enthalten, die zum Regeln des Energiezustands der Kerne 1102A-N und der integrierten Grafiklogik 1108 benötigt werden. Die Anzeigeeinheit dient zum Ansteuern einer oder mehrerer extern verbundener Anzeigen.
  • Die Kerne 1102A-N können im Hinblick auf den Architekturinstruktionssatz homogen oder heterogen sein; das heißt, zwei oder mehr der Kerne 1102A-N können in der Lage sein, denselben Instruktionssatz auszuführen, während andere in der Lage sein können, nur eine Teilmenge jenes Instruktionssatzes oder eines anderen Instruktionssatzes auszuführen.
  • Beispielhafte Computerarchitekturen
  • 12-21 sind Blockschaubilder beispielhafter Computerarchitekturen. Andere System-Designs und --Konfigurationen, die auf den technischen Gebieten der Laptops, Desktops, handgehaltenen PCs, Personal Digital Assistants, Engineering-Arbeitsstationen, Server, Netzwerkvorrichtungen, Netzwerk-Hubs, Switches, eingebetteten Prozessoren, Digitalsignalprozessoren (DSPs), Grafikvorrichtungen, Videospiele-Vorrichtungen, Set-Top-Boxen, Mikro-Controller, Mobiltelefone, portablen Media-Player, handgehaltenen Geräte und verschiedener anderer elektronischer Vorrichtungen bekannt sind, sind ebenfalls geeignet. Im Allgemeinen sind eine gewaltige Vielzahl verschiedener Systeme oder elektronischer Vorrichtungen, die in der Lage sind, einen Prozessor und/oder sonstige Ausführungslogik, wie im vorliegenden Text offenbart, generell geeignet.
  • Wir wenden uns nun 12 zu, wo ein Blockschaubild eines Systems 1200 gemäß einer Ausführungsform der vorliegenden Erfindung gezeigt ist. Das System 1200 kann einen oder mehrere Prozessoren 1210, 1215 enthalten, die mit einem Controller-Hub 1220 gekoppelt sind. In einer Ausführungsform enthält der Controller-Hub 1220 einen Grafikspeicher-Controller-Hub (GMCH) 1290 und einen Eingabe/Ausgabe-Hub (IOH) 1250 (die sich auf separaten Chips befinden können); der GMCH 1290 enthält Speicher- und Grafik-Controller, mit denen ein Speicher 208 und ein Koprozessor 1245 gekoppelt sind; und der IOH 1250 koppelt Eingabe/Ausgabe-(E/A)-Vorrichtungen 1260 mit dem GMCH 1290. Alternativ sind einer oder beide der Speicher- und Grafik-Controller innerhalb des Prozessors integriert (wie im vorliegenden Text beschrieben), der Speicher 208 und der Koprozessor 1245 sind direkt mit dem Prozessor 1210 gekoppelt, und der Controller-Hub 1220 in einem einzelnen Chip mit dem IOH 1250.
  • Die Optionalität zusätzlicher Prozessoren 1215 ist in 12 mit durchbrochenen Linien angedeutet. Jeder der Prozessor 1210, 1215 kann einen oder mehrere der im vorliegenden Text beschriebenen Verarbeitungskerne enthalten und kann eine Version des Prozessors 1100 sein.
  • Der Speicher 208 kann zum Beispiel dynamischer Direktzugriffsspeicher (DRAM), Phasenänderungsspeicher (PCM) oder eine Kombination der beiden sein. In mindestens einer Ausführungsform kommuniziert der Controller-Hub 1220 mit dem oder den Prozessoren 1210, 1215 über einen Multi-Drop-Bus, wie zum Beispiel einen Frontside-Bus (FSB), eine Punkt-zu-Punkt-Schnittstelle, wie zum Beispiel QuickPath Interconnect (QPI), oder eine ähnliche Verbindung 1295.
  • In einer Ausführungsform ist der Koprozessor 1245 ein Spezialprozessor, wie zum Beispiel ein durchsatzstarker MIC-Prozessor, ein Netzwerk- oder Kommunikationsprozessor, eine Komprimierungs-Engine, ein Grafikprozessor, eine GPGPU, ein eingebetteter Prozessor oder dergleichen. In einer Ausführungsform kann der Controller-Hub 1220 einen integrierten Grafikbeschleuniger enthalten.
  • Es kann zahlreiche Unterschiede zwischen den physischen Ressourcen 1210, 1215 im Hinblick auf ein Spektrum von Eckdaten wie Architektur, Mikroarchitektur, Wärme, Energieverbrauchseigenschaften und dergleichen geben.
  • In einer Ausführungsform führt der Prozessor 1210 Instruktionen aus, die Datenverarbeitungsoperationen einer allgemeinen Art steuern. In die Instruktionen können Koprozessor-Instruktionen eingebettet sein. Der Prozessor 1210 erkennt diese Koprozessor-Instruktionen als von einem Typ, der durch den angeschlossenen Koprozessor 1245 ausgeführt werden sollte. Dementsprechend gibt der Prozessor 1210 diese Koprozessor-Instruktionen (oder Steuersignale, die Koprozessor-Instruktionen darstellen) auf einem Koprozessor-Bus oder einer sonstigen Interconnect-Verbindung an den Koprozessor 1245 aus. Ein oder mehrere Koprozessoren 1245 nehmen die empfangenen Koprozessor-Instruktionen entgegen und führen sie aus.
  • Wir wenden uns nun 13 zu, wo ein Blockschaubild eines ersten konkreteren beispielhaften Systems 1300 gemäß einer Ausführungsform der vorliegenden Erfindung gezeigt ist. Wie in 13 gezeigt, ist das Mehrprozessorsystem 1300 ein Punkt-zu-Punkt-Interconnect-System und enthält einen ersten Prozessor 1370 und einen zweiten Prozessor 1380, die über eine Punkt-zu-Punkt-Interconnect-Verbindung 1350 gekoppelt. Jeder der Prozessoren 1370 und 1380 kann eine Version des Prozessors 1100 sein. In einer Ausführungsform sind der Erfindung sind die Prozessoren 1370 und 1380 jeweils Prozessoren 1210 und 1215, während der Koprozessor 1338 der Koprozessor 1245 ist. In einer anderen Ausführungsform sind die Prozessoren 1370 und 1380 der Prozessor 1210 bzw. der Koprozessor 1245.
  • Die Prozessoren 1370 und 1380 sind so gezeigt, dass sie integrierte Speicher-Controller (IMC)-Einheiten 1372 bzw. 1382 enthalten. Der Prozessor 1370 enthält außerdem als Teil seiner Bus-Controller-Einheiten Punkt-zu-Punkt-(P-P)-Schnittstellen 1376 und 1378; in ähnlicher Weise enthält der zweite Prozessor 1380 P-P-Schnittstellen 1386 und 1388. Die Prozessoren 1370, 1380 können Informationen über eine Punkt-zu-Punkt-(P-P)-Schnittstelle 1350 unter Verwendung von P-P-Schnittstellenschaltkreisen 1378, 1388 austauschen. Wie in 13 gezeigt, koppeln IMCs 1372 und 1382 die Prozessoren mit jeweiligen Speichern, und zwar einem Speicher 1332 und einem Speicher 1334, die Abschnitte von Hauptspeicher sein können, der lokal an die jeweiligen Prozessoren angeschlossen ist.
  • Die Prozessoren 1370, 1380 können jeweils Informationen mit einem Chipsatz 1390 über individuelle P-P-Schnittstellen 1352, 1354 unter Verwendung von Punkt-zu-Punkt-Schnittstellenschaltkreisen 1376, 1394, 1386, 1398 austauschen. Der Chipsatz 1390 kann optional Informationen mit dem Koprozessor 1338 über eine Hochleistungsschnittstelle 1339 austauschen. In einer Ausführungsform ist der Koprozessor 1338 ein Spezialprozessor, wie zum Beispiel ein durchsatzstarker MIC-Prozessor, ein Netzwerk- oder Kommunikationsprozessor, eine Komprimierungs-Engine, ein Grafikprozessor, eine GPGPU, ein eingebetteter Prozessor oder dergleichen.
  • Ein gemeinsam genutzter Cache (nicht gezeigt) kann in jedem Prozessor enthalten sein oder kann außerhalb beider Prozessoren angeordnet und dennoch mit den Prozessoren über eine P-P-Interconnect-Verbindung verbunden sein, dergestalt, dass die Informationen aus dem lokalen Cache eines oder beider Prozessoren in dem gemeinsam genutzten Cache gespeichert werden können, falls ein Prozessor in einen Niedrigenergiemodus versetzt wird.
  • Der Chipsatz 1390 kann mit einem ersten Bus 1316 über eine Schnittstelle 1396 gekoppelt sein. In einer Ausführungsform kann der erste Bus 1316 ein Peripheral Component Interconnect (PCI)-Bus oder ein Bus wie zum Beispiel ein PCI Express-Bus oder ein anderer E/A-Interconnect-Bus der dritten Generation sein, obgleich der Geltungsbereich der vorliegenden Erfindung nicht darauf beschränkt ist.
  • Wie in 13 gezeigt, können verschiedene E/A-Vorrichtungen 1314 mit dem ersten Bus 1316 gekoppelt sein, zusammen mit einer Busbrücke 1318, die den ersten Bus 1316 mit einem zweiten Bus 1320 koppelt. In einer Ausführungsform sind ein oder mehrere zusätzliche Prozessoren 1315, wie zum Beispiel Koprozessoren, durchsatzstarke MIC-Prozessoren, GPGPUs, Beschleuniger (wie zum Beispiel Grafikbeschleuniger oder Digitalsignalverarbeitungs (DSP)-Einheiten), feldprogrammierbare Gate-Arrays oder ein sonstiger Prozessor, mit dem ersten Bus 1316 gekoppelt. In einer Ausführungsform kann der zweite Bus 1320 ein Low Pin Count (LPC)-Bus sein. Verschiedene Vorrichtungen können mit einem zweiten Bus 1320 gekoppelt sein, einschließlich beispielsweise eine Tastatur und/oder eine Maus 1322, Kommunikationsvorrichtungen 1327 und eine Speichereinheit 1328, wie zum Beispiel ein Disk-Laufwerk oder eine sonstige Massenspeichervorrichtung, die in einer Ausführungsform Instruktionen, Code und Daten 1330 enthalten kann. Des Weiteren kann eine Audio-E/A 1324 mit dem zweiten Bus 1320 gekoppelt sein. Es ist zu beachten, dass auch andere Architekturen möglich sind. Zum Beispiel kann ein System statt der Punkt-zu-Punkt-Architektur von 13 einen Multi-Drop-Bus oder eine sonstige derartige Architektur implementieren.
  • Wir wenden uns nun 14 zu, wo ein Blockschaubild eines zweiten konkreteren beispielhaften Systems 1400 gemäß einer Ausführungsform der vorliegenden Erfindung gezeigt ist. Gleiche Elemente in den 13 und 14 tragen gleiche Bezugszahlen, und bestimmte Aspekte der 13 wurden aus 14 weggelassen, um zu vermeiden, dass andere Aspekte von 14 in den Hintergrund treten.
  • 14 veranschaulicht, dass die Prozessoren 1370, 1380 integrierte Speicher und E/A-Steuerungslogik („CL“) 1372 bzw. 1382 enthalten können. Somit enthält die CL 1372, 1382 integrierte Speicher-Controller-Einheiten und enthält E/A-Steuerungslogik. 14 veranschaulicht, dass nicht nur die Speicher 1332, 1334 mit der CL 1372, 1382 gekoppelt sind, sondern dass außerdem E/A-Vorrichtungen 1414 mit der Steuerungslogik 1372, 1382 gekoppelt sind. Ältere E/A-Vorrichtungen 1415 sind mit dem Chipsatz 1390 gekoppelt.
  • Wir wenden uns nun 15 zu, wo ein Blockschaubild eines SoC 1500 gemäß einer Ausführungsform der vorliegenden Erfindung gezeigt ist. Ähnliche Elemente in 11 tragen gleiche Bezugszahlen. Außerdem sind mit Strichlinien umrandete Kästchen optional Merkmale höherentwickelter SoCs. In 15 sind eine oder mehrere Interconnect-Einheiten 1502 gekoppelt mit: einem Anwendungsprozessor 1510, der einen Satz aus einem oder mehreren Kernen 142A-N und einer oder mehreren gemeinsam genutzten Cache-Einheiten 1106 enthält; einer Systemagent-Einheit 1110; einer oder mehreren Bus-Controller-Einheiten 1116; einer oder mehreren integrierten Speicher-Controller-Einheiten 1114; einem Satz aus einem oder mehreren Koprozessoren 1520, die integrierte Grafiklogik, einen Bildprozessor, einen Audio-Prozessor und einen Video-Prozessor enthalten können; einer statischen Direktzugriffsspeicher (SRAM)-Einheit 1530; einer Direktspeicherzugriffs (DMA)-Einheit 1532; und einer Anzeigeeinheit 1540 zum Koppeln mit einer oder mehreren externen Anzeigen. In einer Ausführungsform enthalten der oder die Koprozessoren 1520 einen Spezialprozessor, wie zum Beispiel einen Netzwerk- oder Kommunikationsprozessor, eine Komprimierungs-Engine, eine GPGPU, einen durchsatzstarken MIC-Prozessor, einen eingebetteten Prozessor oder dergleichen.
  • Ausführungsformen der im vorliegenden Text offenbarten Mechanismen können in Hardware, Software, Firmware oder einer Kombination solcher Implementierungsansätze implementiert werden. Ausführungsformen der Erfindung können als Computerprogramme oder Programmcode implementiert werden, die auf programmierbaren Systemen ausgeführt werden, die mindestens einen Prozessor, ein Speichersystem (einschließlich flüchtiger und nicht-flüchtiger Speicher und/oder Speicherelemente), mindestens eine Eingabevorrichtung und mindestens eine Ausgabevorrichtung umfassen.
  • Programmcode, wie zum Beispiel Code 1330, der in 13 veranschaulicht ist, kann auf Eingabeinstruktionen angewendet werden, um die im vorliegenden Text beschriebenen Funktionen auszuführen und Ausgabeinformationen zu generieren. Die Ausgabeinformationen können in bekannter Weise auf eine oder mehrer Ausgabevorrichtungen angewendet werden. Für die Zwecke dieser Anmeldung enthält ein Verarbeitungssystem jedes beliebige System, das einen Prozessor, wie zum Beispiel einen Digitalsignalprozessor (DSP), einen Mikro-Controller, einen anwendungsspezifischen integrierten Schaltkreis (ASIC) oder einen Mikroprozessor hat.
  • Der Programmcode kann in einer hohen prozeduralen oder Objekt-orientierten Programmiersprache implementiert werden, um mit einem Verarbeitungssystem zu kommunizieren. Der Programmcode kann gewünschtenfalls auch in Assemblier- oder Maschinensprache implementiert werden. Die im vorliegenden Text beschriebenen Mechanismen sind praktisch auf keine bestimmte Programmiersprache beschränkt. In jedem Fall kann die Sprache eine kompilierte oder interpretierte Sprache sein.
  • Ein oder mehrere Aspekte von mindestens einer Ausführungsform können durch repräsentative Instruktionen implementiert werden, die auf einem maschinenlesbaren Medium gespeichert sind, das verschiedene Logik innerhalb des Prozessors darstellt, die, wenn sie durch eine Maschine gelesen wird, die Maschine veranlasst, Logik zum Ausführen der im vorliegenden Text beschriebenen Techniken zu erzeugen. Solche Darstellungen, als „IP-Kerne“ bekannt, können auf einem greifbaren, maschinenlesbaren Medium gespeichert werden und an verschiedene Kunden oder Herstellungseinrichtungen geliefert werden, um in Produktionsmaschinen geladen zu werden, welche die Logik oder den Prozessor eigentlich herstellen.
  • Zu solchen maschinenlesbaren Speichermedien gehören beispielsweise nicht-transitorische, greifbare Anordnungen von Erzeugnissen, die durch eine Maschine oder eine Vorrichtung hergestellt oder gebildet werden, einschließlich Speichermedien wie zum Beispiel Festplatten, beliebige andere Arten von Disks, einschließlich Floppydisketten, optische Disks, Compact Disk-Nurlesespeicher (CD-ROMs), Compact Disk-Rewritables (CD-RWs) und magnetoptische Disks, Halbleiterbauelemente, wie zum Beispiel Nurlesespeicher (ROMs), Direktzugriffsspeicher (RAMs), wie zum Beispiel dynamische Direktzugriffsspeicher (DRAMs), statische Direktzugriffsspeicher (SRAMs), löschbarer programmierbarer Nurlesespeicher (EPROMs), Flash-Speicher, elektrisch löschbarer programmierbarer Nurlesespeicher (EEPROMs), magnetische oder optische Karten oder sonstige Arten von Medien, die zum Speichern elektronischer Instruktionen geeignet sind.
  • Dementsprechend enthalten Ausführungsformen der Erfindung des Weiteren nicht-transitorische, greifbare maschinenlesbare Medien, die Instruktionen enthalten oder Designdaten enthalten, wie zum Beispiel Hardware Description Language (HDL), die Strukturen, Schaltkreise, Vorrichtungen, Prozessoren und/oder Systemmerkmale, die im vorliegenden Text beschrieben sind, definiert. Solche Ausführungsformen können auch als Programmprodukte bezeichnet werden.
  • Emulation (einschließlich binärer Übersetzung, Code-Morphing usw.)
  • In einigen Fällen kann ein Instruktionskonverter verwendet werden, um eine Instruktion aus einem Quelleninstruktionssatz zu einem Zielinstruktionssatz zu konvertieren. Zum Beispiel kann der Instruktionskonverter eine Instruktion zu einer oder mehreren anderen Instruktionen übersetzen (zum Beispiel unter Verwendung statischer binärer Übersetzung, dynamischer binärer Übersetzung, einschließlich dynamischer Kompilation), morphen, emulieren oder auf sonstige Weise konvertieren, damit sie durch den Kern verarbeitet werden. Der Instruktionskonverter kann in Software, Hardware, Firmware oder einer Kombination davon implementiert werden. Der Instruktionskonverter kann sich auf dem Prozessor, außerhalb des Prozessors oder zum Teil auf dem Prozessor und zum Teil außerhalb des Prozessors befinden.
  • 16 ist ein Blockschaubild, das zum Gegensatz die Verwendung eines Software-Instruktionskonverters zum Konvertieren binärer Instruktionen in einem Quelleninstruktionssatz zu binären Instruktionen in einem Zielinstruktionssatz gemäß Ausführungsformen der Erfindung darstellt. In der veranschaulichten Ausführungsform ist der Instruktionskonverter ein Software-Instruktionskonverter, obgleich der Instruktionskonverter alternativ in Software, Firmware, Hardware oder verschiedenen Kombinationen davon implementiert werden kann. 16 zeigt ein Programm in einer höheren Sprache 1602, das unter Verwendung eines x86-Kompilierers 1604 kompiliert werden kann, um x86-Binärcode 1606 zu generieren, der durch einen Prozessor mit mindestens einem x86-Instruktionssatz-Kern 1616 nativ ausgeführt werden kann. Der Prozessor mit mindestens einem x86-Instruktionssatz-Kern 1616 stellt einen beliebigen Prozessor dar, der im Wesentlichen die gleichen Funktionen ausführen kann wie ein Intel-Prozessor mit mindestens einem x86-Instruktionssatz-Kern, indem er kompatibel ausführt oder auf sonstige Weise verarbeitet: (1) einen beträchtlichen Teil des Instruktionssatzes des Intel x86-Instruktionssatz-Kerns, oder (2) Objektcode-Versionen von Anwendungen oder sonstiger Software, die den Zweck hat, auf einem Intel-Prozessor mit mindestens einem x86-Instruktionssatz-Kern zu arbeiten, um im Wesentlichen die gleichen Ergebnisses wie ein Intel-Prozessor mit mindestens einem x86-Instruktionssatz-Kern zu erreichen. Der x86-Kompilierer 1604 stellt einen Kompilierer dar, der dafür ausgelegt ist, x86-Binärcode 1606 (zum Beispiel Objektcode) zu generieren, der, mit oder ohne zusätzliche Verlinkungsverarbeitung, auf dem Prozessor mit mindestens einem x86-Instruktionssatz-Kern 1616 ausgeführt werden kann. In ähnlicher Weise zeigt 16 das Programm in der höheren Sprache 1602, das unter Verwendung eines alternativen Instruktionssatz-Kompilierers 1608 kompiliert werden kann, um einen alternativen Instruktionssatz-Binärcode 1610 zu generieren, der durch einen Prozessor ohne mindestens einen x86-Instruktionssatz-Kern 1614 nativ ausgeführt werden kann (zum Beispiel einen Prozessor mit Kernen, die den MIPS-Instruktionssatz von MIPS Technologies aus Sunnyvale, Kalifornien, ausführen, und/oder die den ARM-Instruktionssatz von ARM Holdings aus Sunnyvale, Kalifornien, ausführen). Der Instruktionskonverter 1612 wird zum Konvertieren des x86-Binärcodes 1606 in Code verwendet, der durch den Prozessor ohne einen x86-Instruktionssatz-Kern 1614 nativ ausgeführt werden kann. Es ist unwahrscheinlich, dass dieser konvertierte Code der gleiche ist wie der alternative Instruktionssatz-Binärcode 1610, weil ein dazu befähigter Instruktionskonverter schwer herzustellen ist; jedoch bewerkstelligt der konvertierte Code die allgemeine Operation und besteht aus Instruktionen aus dem alternativen Instruktionssatz. Somit stellt der Instruktionskonverter 1612 Software, Firmware, Hardware oder eine Kombination davon dar, die es einem Prozessor oder einer sonstigen elektronischen Vorrichtung, die keinen x86-Instruktionssatz-Prozessor oder -Kern hat, erlaubt, den x86-Binärcode 1606 durch Emulation, Simulation oder irgend einen anderen Prozess auszuführen.
  • Komponenten, Merkmale und Details, die für eine der 3-8 beschrieben wurden, können optional auch für eine der 1-2 gelten. Darüber hinaus können Komponenten, Merkmale und Details, die für eine der Vorrichtungen beschrieben wurden, optional auch für eines der Verfahren gelten, die in Ausführungsformen durch eine und/oder mit einer solchen Vorrichtung ausgeführt werden können. Jeder der im vorliegenden Text beschriebenen Prozessoren kann in einem beliebigen der im vorliegenden Text offenbarten Computersysteme enthalten sein. In einigen Ausführungsformen kann das Computersystem einen dynamischen Direktzugriffsspeicher (DRAM) enthalten. Alternativ kann das Computersystem eine Art von flüchtigem Speicher, der nicht aktualisiert zu werden braucht, oder einen Flash-Speicher enthalten. Die im vorliegenden Text offenbarten Instruktionen können mit einem beliebigen der im vorliegenden Text gezeigten Prozessoren, der eine der im vorliegenden Text gezeigten Mikroarchitekturen aufweist, auf jedem der im vorliegenden Text gezeigten Systeme ausgeführt werden.
  • In der Beschreibung und den Ansprüchen sind die Begriffe „gekoppelt“ und/oder „verbunden“, zusammen mit ihren Ableitungen, verwendet worden. Diese Begriffe sind nicht als Synonyme für einander gedacht. Vielmehr kann in bestimmten Ausführungsformen „verbunden“ verwendet werden, um anzuzeigen, dass zwei oder mehr Elemente in direktem physischem und/oder elektrischem Kontakt miteinander stehen. „Gekoppelt“ kann bedeuten, dass zwei oder mehr Elemente in direktem physischem und/oder elektrischem Kontakt miteinander stehen. Jedoch kann „gekoppelt“ auch bedeuten, dass zwei oder mehr Elemente nicht in direktem Kontakt miteinander stehen, aber dennoch miteinander zusammenwirken oder in einer Wechselbeziehung stehen. Zum Beispiel kann eine Ausführungseinheit mit einem Register und/oder einer Decodiereinheit und/oder einem Speicher durch eine oder mehrere dazwischenliegende Komponenten gekoppelt sein. In den Figuren werden Pfeile verwendet, um Verbindungen und Kopplungen zu zeigen.
  • In der Beschreibung und/oder den Ansprüchen können die Begriffe „Logik“, „Einheit“, „Modul“ oder „Komponente“ verwendet worden sein. In einigen Ausführungsformen kann sich jeder dieser Begriffe auf Hardware beziehen, die möglicherweise mit einer Firmware kombiniert ist (zum Beispiel Transistoren, Gates, integrierte Schaltkreise, anwendungsspezifische integrierte Schaltkreise, analoge Schaltkreise, digitale Schaltkreise, programmierte Logikvorrichtungen, Speichervorrichtungen, die Instruktionen enthalten, usw.).
  • Der Begriff „und/oder“ verwendet worden sein. Im Sinne des vorliegenden Textes meint die Formulierung „und/oder“ das eine oder das andere oder beide (zum Beispiel meint A und/oder B A oder B oder sowohl A als auch B).
  • In der obigen Beschreibung sind konkrete Details dargelegt worden, um ein gründliches Verständnis der Ausführungsformen zu ermöglichen. Jedoch können andere Ausführungsformen auch ohne einige dieser konkreten Details praktiziert werden. Der Schutzumfang der Erfindung ist nicht anhand der oben konkret dargelegten Beispiele zu bestimmen, sondern allein anhand der folgenden Ansprüche. In anderen Fällen sind allgemein bekannte Schaltkreise, Strukturen, Bauelemente und Operationen in Blockschaubildform und/oder ohne Details gezeigt worden, um zu vermeiden, dass das Verständnis der Beschreibung erschwert wird. Wenn es für zweckmäßig erachtet wurde, wurden Bezugszahlen oder Endabschnitte von Bezugszahlen zwischen den Figuren wiederholt, um entsprechende oder analoge Elemente zu bezeichnen, die optional ähnliche oder die gleichen Eigenschaften haben können, sofern nicht etwas anderes angegeben wurde oder unmissverständlich ersichtlich ist.
  • Bestimmte Operationen können durch Hardware-Komponenten ausgeführt werden oder können in maschinenausführbaren oder schaltkreisausführbaren Instruktionen verkörpert sein, die dafür verwendet werden können, eine Maschine, einen Schaltkreis oder eine Hardware-Komponente (zum Beispiel einen Prozessor, einen Abschnitt eines Prozessors, einen Schaltkreis usw.) herbeizuführen und/oder entstehen zu lassen, die mit den Instruktionen, die die Operationen ausführen, programmiert sind. Die Operationen können außerdem optional durch eine Kombination aus Hardware und Software ausgeführt werden. Ein Prozessor, eine Maschine, ein Schaltkreis oder eine Hardware kann spezielle oder bestimmte Schaltungen oder andere Logik (zum Beispiel Hardware, die eventuell mit Firmware und/oder Software kombiniert ist) enthalten, die dafür geeignet ist, die Instruktion auszuführen und/oder zu verarbeiten und ein Ergebnis in Reaktion auf die Instruktion zu speichern.
  • Einige Ausführungsformen enthalten ein Erzeugnis (zum Beispiel ein Computerprogrammprodukt), das ein maschinenlesbares Medium enthält. Das Medium kann einen Mechanismus enthalten, der Informationen in einer Form bereitstellt, beispielsweise speichert, die durch die Maschine gelesen werden kann. Das maschinenlesbare Medium kann eine Instruktion oder Instruktionsabfolge bereitstellen, oder gespeichert haben, die, falls und/oder wenn sie durch eine Maschine ausgeführt wird, dazu dient, die Maschine zu veranlassen, eine(s) der im vorliegenden Text offenbarten Operationen, Verfahren oder Techniken auszuführen, und/oder dazu führt, dass die Maschine eine(s) der im vorliegenden Text offenbarten Operationen, Verfahren oder Techniken ausführt.
  • In einigen Ausführungsformen kann das maschinenlesbare Medium ein nicht-transitorisches, maschinenlesbares Speichermedium enthalten. Beispielsweise kann das nicht-transitorische, maschinenlesbares maschinenlesbare Speichermedium Folgendes enthalten: eine Floppy-Diskette, ein optisches Speichermedium, eine optische Disk, eine optische Datenspeichervorrichtung, eine CD-ROM, eine magnetische Disk, eine magnet-optische Disk, einen Nurlesespeicher (ROM), einen programmierbaren ROM (PROM), einen lösch- und programmierbaren ROM (EPROM), einen elektrisch lösch- und programmierbaren ROM (EEPROM), einen Direktzugriffsspeicher (RAM), einen statischen RAM (SRAM), einen dynamischen RAM (DRAM), einen Flash-Speicher, einen Phasenänderungsspeicher, ein Phasenänderungsdatenspeichermaterial, einen nicht-flüchtigen Speicher, eine nicht-flüchtige Datenspeichervorrichtung, einen nicht-transitorischen Speicher, eine nicht-transitorische Datenspeichervorrichtung oder dergleichen. Das nicht-transitorische maschinenlesbare Speichermedium besteht nicht aus einem transitorischen ausgebreiteten Signal. In einigen Ausführungsformen kann das Speichermedium ein greifbares Medium enthalten, das feste Materie enthält.
  • Zu Beispielen geeigneter Maschinen gehören Allzweckprozessoren, Spezialprozessoren, digitale Logik-Schaltkreise, integrierte Schaltkreise und dergleichen. Zu weiteren Beispielen geeigneter Maschinen gehören Computersysteme und andere elektronische Geräte, die Prozessoren, digitale Logik-Schaltkreise oder integrierte Schaltkreise enthalten. Zu Beispielen solcher Computersysteme und elektronischen Geräte gehören Desktop-Computer, Laptop-Computer, Notebook-Computer, Tablet-Computer, Netbooks, Smartphones, Mobiltelefone, Server, Netzwerkgeräte (zum Beispiel Router und Switches), mobile Internet-Geräte (MIDs), Media-Player, Smart-Fernseher, Nettops, Set-Top-Boxen und Videospiele-Controller.
  • Wenn in dieser Spezifikation beispielsweise von „eine bestimmte Ausführungsform“, „eine Ausführungsform“, „eine oder mehrere Ausführungsformen“ oder „einige Ausführungsformen“ gesprochen wird, so bedeutet das, dass ein bestimmtes Merkmal in der Praktizierung der Erfindung enthalten sein kann, aber nicht unbedingt erforderlich ist. Gleichermaßen werden in der Beschreibung mitunter verschiedene Merkmale in einer einzelnen Ausführungsform, Figur oder Beschreibung zusammengefasst, um die Offenbarung zu rationalisieren und das Verständnis der verschiedenen erfinderischen Aspekte zu erleichtern. Dieses Verfahren der Offenbarung darf jedoch nicht so ausgelegt werden, als zeige sich darin eine Absicht, dass die Erfindung mehr Merkmale verlange, als ausdrücklich in jedem Anspruch zitiert sind. Vielmehr liegen, wie die folgenden Ansprüche widerspiegeln, erfinderische Aspekte in weniger als allen Merkmalen einer einzelnen offenbarten Ausführungsform. Darum werden die Ansprüche, die der detaillierten Beschreibung folgen, hiermit ausdrücklich in diese detaillierte Beschreibung aufgenommen, wobei jeder Anspruch für sich allein als eine separate Ausführungsform der Erfindung steht.
  • BEISPIELHAFTE AUSFÜHRUNGSFORMEN
  • Die folgenden Beispiele betreffen weitere Ausführungsformen. Die Spezifika in den Beispielen können überall in einer oder mehreren Ausführungsformen verwendet werden.
  • Beispiel 1 ist ein Prozessor, der eine Decodiereinheit zum Decodieren einer Instruktion einer modularen Potenzierung mit verschleierten Eingabeinformationen enthält. Die Instruktion einer modularen Potenzierung mit verschleierten Eingabeinformationen dient zum Angeben mehrerer Quellenoperanden, die Eingabeinformationen für eine Modularpotenzierungsoperation speichern sollen. Mindestens einige der Eingabeinformationen, die in den mehreren Quellenoperanden gespeichert werden sollen, sollen verschleiert werden. Der Prozessor enthält außerdem eine Ausführungseinheit, die mit der Decodiereinheit gekoppelt ist. Die Ausführungseinheit dient dazu, in Reaktion auf die Instruktion einer modularen Potenzierung mit verschleierten Eingabeinformationen ein Modularpotenzierungsergebnis an einer Zielort-Speicherposition zu speichern, die durch die Instruktion einer modularen Potenzierung mit verschleierten Eingabeinformationen angegeben werden soll.
  • Beispiel 2 enthält den Prozessor von Beispiel 1, wobei die Decodiereinheit dafür ausgelegt ist, die Instruktion zu decodieren, die die mehreren Quellenoperanden angeben soll, die mindestens eines von einem verschleierten Exponenten, einer verschleierten Basis und einem verschleierten Modul speichern sollen.
  • Beispiel 3 enthält den Prozessor von Beispiel 1, wobei die Decodiereinheit dafür ausgelegt ist, die Instruktion zu decodieren, die die mehreren Quellenoperanden angeben soll, die eine von einer Reduktionskonstante und einer verschleierten Reduktionskonstante speichern sollen. Die Reduktionskonstante wird durch einen Reduktionsalgorithmus zur modularen Potenzierung definiert und kann aus einem Modul abgeleitet werden.
  • Beispiel 4 enthält den Prozessor von Beispiel 1, wobei die Decodiereinheit dafür ausgelegt ist, die Instruktion zu decodieren, die die mehreren Quellenoperanden angeben soll, die einen verschleierten geheimen Eingangsparameter und einen nicht verschleierten öffentlichen Eingangsparameter speichern sollen.
  • Beispiel 5 enthält den Prozessor von Beispiel 1, wobei der Decodierer dafür ausgelegt ist, die Instruktion zu decodieren, die mindestens ein Feld haben soll, um anzugeben, ob ein entsprechender Abschnitt der Eingabeinformationen für die Modularpotenzierungsoperation verschleiert ist.
  • Beispiel 6 enthält den Prozessor von Beispiel 1, der des Weiteren ein Geheimnis enthält, das nicht durch Software gelesen werden kann. Außerdem ist die Decodiereinheit dafür ausgelegt, die Instruktion zu decodieren, welche die verschleierten Eingabeinformationen angeben soll, aus denen entsprechende Eingabeinformationen, auf denen das Modularpotenzierungsergebnis basiert, nicht ohne das Geheimnis des Prozessors, das durch die Software nicht gelesen werden kann, abgeleitet werden können.
  • Beispiel 7 enthält den Prozessor von Beispiel 1, der des Weiteren einen geheimen Schlüssel des Prozessors enthält, der durch Software nicht gelesen werden kann. Außerdem ist die Decodiereinheit dafür ausgelegt, die Instruktion zu decodieren, welche die verschleierten Eingabeinformationen angeben soll, die verschlüsselte Eingabeinformationen enthalten sollen, die mit dem geheimen Schlüssel des Prozessors, der durch die Software nicht gelesen werden kann, entschlüsselt werden sollen.
  • Beispiel 8 enthält den Prozessor von Beispiel 1, wobei die Decodiereinheit dafür ausgelegt ist, die Instruktion zu decodieren, welche die verschleierten Eingabeinformationen angeben soll, die einen Wert umfassen sollen, der dazu dient, einen aus mehreren Sätzen geheimer nicht verschleierter Eingabeinformationen anzugeben, die eines von Folgendem sein sollen: in dem Prozessor gespeichert und für Software nicht lesbar; und in dem Prozessor generiert und für Software nicht lesbar.
  • Beispiel 9 enthält den Prozessor von Beispiel 8, wobei der Wert eines von Folgendem sein soll: einem Index, der dafür verwendet werden soll, den Satz geheimer nicht verschleierter Eingabeinformationen auszuwählen, einer Zahl, die dafür verwendet werden soll, den Satz geheimer nicht verschleierter Eingabeinformationen auszuwählen, und einem Identifikator des Satzes geheimer nicht verschleierter Eingabeinformationen.
  • Beispiel 10 enthält den Prozessor von Beispiel 1, wobei die Decodiereinheit dafür ausgelegt ist, die Instruktion zu decodieren, die mindestens ein Feld haben soll, das dafür verwendet werden soll, eine Größe der Quellenoperanden als eine von mehreren verschiedenen möglichen Größen zu bestimmen.
  • Beispiel 11 enthält den Prozessor von Beispiel 10, wobei die Decodiereinheit dafür ausgelegt ist, die Instruktion zu decodieren, die ein Größenhinweisfeld haben soll, das dafür verwendet werden soll, eine Basisgröße zu bestimmen, und ein Dreifach-Größenhinweisfeld haben soll, das angeben soll, ob die Basisgröße verdreifacht werden soll, um die Größe der Quellenoperanden zu bestimmen.
  • Beispiel 12 enthält den Prozessor nach einem der Beispiele 1 bis 11, wobei die Ausführungseinheit in Reaktion auf eine zweite Instanz der Instruktion einer modularen Potenzierung mit verschleierten Eingabeinformationen dafür ausgelegt ist, einen gescheiterten Versuch des Entschleierns verschleierter Eingabeinformationen zu detektieren und einen Fehler zu signalisieren.
  • Beispiel 13 enthält den Prozessor nach einem der Beispiele 1 bis 11, wobei die Ausführungseinheit in Reaktion auf eine zweite Instanz der Instruktion einer modularen Potenzierung mit verschleierten Eingabeinformationen dafür ausgelegt ist, das Ausführen der zweiten Instanz der Instruktion einer modularen Potenzierung mit verschleierten Eingabeinformationen nach einer Unterbrechung zu stoppen, einen Zwischenzustand, der mit der unterbrochenen Ausführung der zweiten Instanz der Instruktion einer modularen Potenzierung mit verschleierten Eingabeinformationen verknüpft ist, mit einem geheimen Schlüssel des Prozessors, der durch Software nicht gelesen werden kann, zu verschlüsseln und den verschlüsselten Zwischenzustand an einer Speicherposition zu speichern.
  • Beispiel 14 enthält den Prozessor nach einem der Beispiele 1 bis 11, wobei die Ausführungseinheit in Reaktion auf eine zweite Instanz der Instruktion einer modularen Potenzierung mit verschleierten Eingabeinformationen dafür ausgelegt ist, das Ausführen der zweiten Instanz der Instruktion einer modularen Potenzierung mit verschleierten Eingabeinformationen nach einer Unterbrechung zu stoppen und einen Zwischenzustand, der mit der unterbrochenen Ausführung der zweiten Instanz der Instruktion einer modularen Potenzierung mit verschleierten Eingabeinformationen verknüpft ist, zu verwerfen.
  • Beispiel 15 enthält den Prozessor nach einem der Beispiele 1 bis 11, wobei die Decodiereinheit dafür ausgelegt ist, die Instruktion zu decodieren, die mehrere Register des Prozessors angeben soll, und wobei jedes der Register einen Zeiger zu einer Position in einem Speicher speichern soll, die zum Speichern eines entsprechenden der mehreren Quellenoperanden dient.
  • Beispiel 16 enthält den Prozessor nach einem der Beispiele 1 bis 11, wobei das Modularpotenzierungsergebnis einen Rest darstellen soll, wenn eine Basis mit einem Exponenten potenziert wird, um ein Potenzierungsergebnis zu generieren, und das Potenzierungsergebnis durch einen Modul geteilt wird.
  • Beispiel 17. Ein Verfahren in einem Prozessor, welches das Empfangen einer Instruktion einer modularen Potenzierung mit verschleierten Eingabeinformationen enthält. Die Instruktion einer modularen Potenzierung mit verschleierten Eingabeinformationen gibt mehrere Quellenoperanden an, die Eingabeinformationen für eine Modularpotenzierungsoperation speichern. Mindestens einige der Eingabeinformationen, die in den mehreren Quellenoperanden gespeichert sind, sind verschleiert. Das Verfahren enthält außerdem das Speichern eines Modularpotenzierungsergebnisses an einer Zielort-Speicherposition, die durch die Instruktion einer modularen Potenzierung mit verschleierten Eingabeinformationen angegeben wird, in Reaktion auf die Instruktion einer modularen Potenzierung mit verschleierten Eingabeinformationen.
  • Beispiel 18 enthält das Verfahren von Beispiel 17, und enthält des Weiteren das Entschleiern der mindestens einigen der Eingabeinformationen, die mit einem Geheimnis verschleiert sind, das einem Prozessor verfügbar ist, aber von Software nicht gelesen werden kann.
  • Beispiel 19 enthält das Verfahren von Beispiel 17, wobei das Empfangen das Empfangen der Instruktion enthält, die die Quellenoperanden angibt, die mindestens eines von einem verschleierten Exponenten, einer verschleierten Basis und einem verschleierten Modul speichern.
  • Beispiel 20 enthält das Verfahren von Beispiel 17, wobei das Empfangen das Empfangen der Instruktion enthält, die die Quellenoperanden angibt, die mindestens eine von einer Reduktionskonstante und einer verschleierten Reduktionskonstante speichern. Die Reduktionskonstante wird durch einen Reduktionsalgorithmus zur modularen Potenzierung definiert und kann aus einem Modul abgeleitet werden.
  • Beispiel 21 enthält das Verfahren von Beispiel 17, wobei das Empfangen das Empfangen der Instruktion enthält, die mindestens ein Feld aufweist, das angibt, ob ein entsprechender Abschnitt der Eingabeinformationen für die Modularpotenzierungsoperation verschleiert ist.
  • Beispiel 22 ist ein System zum Verarbeiten von Instruktionen, das eine Interconnect-Verbindung und einen Prozessor, der mit der Interconnect-Verbindung gekoppelt ist, enthält. Der Prozessor ist dafür ausgelegt, eine Instruktion einer modularen Potenzierung mit verschleierten Eingabeinformationen zu empfangen, die mehrere Quellenoperanden angeben sollen, die Eingabeinformationen für eine Modularpotenzierungsoperation speichern sollen. Mindestens einige der Eingabeinformationen, die in den mehreren Quellenoperanden gespeichert werden sollen, sollen verschleiert werden. Der Prozessor ist dafür ausgelegt, in Reaktion auf die Instruktion ein Modularpotenzierungsergebnis an einer Zielort-Speicherposition zu speichern, die durch die Instruktion einer modularen Potenzierung mit verschleierten Eingabeinformationen angegeben werden soll. Ein dynamischer Direktzugriffsspeicher (DRAM) ist mit der Interconnect-Verbindung gekoppelt. Der DRAM speichert Instruktionen, die mehrere verschiedenen Instanzen der Instruktion einer modularen Potenzierung mit verschleierten Eingabeinformationen enthalten, die jeweils jeweilige mehrere Quellenoperanden angeben, in denen jeder Satz aus Quellenoperanden verschiedene Arten von verschleierten Eingabeinformationen für die verschiedenen Instanzen der Instruktion einer modularen Potenzierung mit verschleierten Eingabeinformationen speichern soll.
  • Beispiel 23 enthält das System von Beispiel 22, wobei der Prozessor dafür ausgelegt ist, die Instruktion zu empfangen, die die mehreren Quellenoperanden angeben soll, die mindestens eines von einem verschleierten Exponenten, einer verschleierten Basis und einem verschleierten Modul speichern sollen.
  • Beispiel 24 ist ein Erzeugnis, das ein nicht-transitorisches maschinenlesbares Speichermedium enthält. Das nicht-transitorische maschinenlesbare Speichermedium speichert eine Instruktion einer modularen Potenzierung mit verschleierten Eingabeinformationen. Die Instruktion einer modularen Potenzierung mit verschleierten Eingabeinformationen dient zum Angeben mehrerer Quellenoperanden, die Eingabeinformationen für eine Modularpotenzierungsoperation speichern sollen. Mindestens einige der Eingabeinformationen sollen verschleiert werden. Die Instruktion einer modularen Potenzierung mit verschleierten Eingabeinformationen soll, wenn sie durch eine Maschine ausgeführt wird, die Maschine veranlassen, Operationen auszuführen, die das Speichern eines Modularpotenzierungsergebnisses an einer Zielort-Speicherposition enthalten, die durch die Instruktion einer modularen Potenzierung mit verschleierten Eingabeinformationen angegeben werden soll.
  • Beispiel 25 enthält das Erzeugnis nach Beispiel 24, wobei der Prozessor dafür ausgelegt ist, die Instruktion zu empfangen, die mindestens ein Feld haben sollen, um anzugeben, ob ein entsprechender Abschnitt der Eingabeinformationen für die Modularpotenzierungsoperation verschleiert ist.
  • Beispiel 26 enthält den Prozessor nach einem der Beispiele 1 bis 11, der des Weiteren eine optionale Abzweigvorhersageeinheit enthält, um Abzweigungen vorherzusagen, und eine optionale Instruktions-Vorabhol-Einheit enthält, die mit der Abzweigvorhersageeinheit gekoppelt ist, wobei die Instruktions-Vorabhol-Einheit dazu dient, vorab Instruktionen, die die Instruktion einer modularen Potenzierung mit verschleierten Eingabeinformationen enthalten, zu holen. Der Prozessor kann außerdem optional enthalten: einen optionalen Level 1 (L1)-Instruktions-Cache, der mit der Instruktions-Vorabhol-Einheit gekoppelt ist, wobei der L1-Instruktions-Cache zum Speichern von Instruktionen dient, einen optionalen L1-Daten-Cache zum Speichern von Daten, und einen optionalen Level 2 (L2)-Cache zum Speichern von Daten und Instruktionen. Der Prozessor kann außerdem optional eine Instruktions-Hol-Einheit enthalten, die mit der Decodiereinheit, dem L1-Instruktions-Cache und dem L2-Cache gekoppelt ist, um die Instruktion einer modularen Potenzierung mit verschleierten Eingabeinformationen in einigen Fällen aus dem L1-Instruktions-Cache oder dem L2-Cache zu holen und die Instruktion einer modularen Potenzierung mit verschleierten Eingabeinformationen zu die Decodiereinheit zu übermitteln. Der Prozessor kann außerdem optional enthalten: eine Registerumbenennungseinheit zum Umbenennen von Registern, einen optionalen Disponierer zum Disponieren einer oder mehrerer Operationen, die aus der Instruktion einer modularen Potenzierung mit verschleierten Eingabeinformationen zur Ausführung decodiert wurden, und eine optionale Festlegungseinheit zum Festlegen von Ausführungsergebnissen der Instruktion einer modularen Potenzierung mit verschleierten Eingabeinformationen.
  • Beispiel 27 enthält ein System-on-Chip, das enthält: mindestens eine Interconnect-Verbindung, den Prozessor nach einem der Beispiele 1 bis 11, der mit der mindestens einen Interconnect-Verbindung gekoppelt ist, eine optionale Grafikverarbeitungseinheit (GPU), die mit der mindestens einen Interconnect-Verbindung gekoppelt ist, einen optionalen Digitalsignalprozessor (DSP), der mit der mindestens einen Interconnect-Verbindung gekoppelt ist, einen optionalen Anzeige-Controller, der mit der mindestens einen Interconnect-Verbindung gekoppelt ist, einen optionalen Speicher-Controller, der mit der mindestens einen Interconnect-Verbindung gekoppelt ist, ein optionales Drahtlosmodem, das mit der mindestens einen Interconnect-Verbindung gekoppelt ist, einen optionalen Bildsignalprozessor, der mit der mindestens einen Interconnect-Verbindung gekoppelt ist, einen optionalen Universal Serial Bus (USB) 3.0-kompatiblen Controller, der mit der mindestens einen Interconnect-Verbindung gekoppelt ist, einen optionalen Bluetooth 4.1-kompatiblen Controller, der mit der mindestens einen Interconnect-Verbindung gekoppelt ist, und einen optionalen Drahtlostransceiver-Controller, der mit der mindestens einen Interconnect-Verbindung gekoppelt ist.
  • Beispiel 28 ist ein Prozessor oder eine sonstige Vorrichtung zum Ausführen, oder mit der Eignung zum Ausführen, des Verfahrens nach einem der Beispiele 17 bis 21.
  • Beispiel 29 ist ein Prozessor oder eine sonstige Vorrichtung, die Mittel zum Ausführen des Verfahrens nach einem der Beispiele 17 bis 21 enthält.
  • Beispiel 30 ist ein Erzeugnis, das ein optionales nicht-transitorisches maschinenlesbares Medium enthält, das optional eine Instruktion speichert oder auf sonstige Weise bereitstellt, die, falls und/oder wenn sie durch einen Prozessor, ein Computersystem, eine elektronische Vorrichtung oder eine sonstige Maschine ausgeführt, in der Lage ist, die Maschine zu veranlassen, das Verfahren nach einem der Beispiele 17 bis 21 auszuführen.
  • Beispiel 31 ist ein Prozessor oder eine sonstige Vorrichtung im Wesentlichen wie im vorliegenden Text beschrieben.
  • Beispiel 32 ist ein Prozessor oder eine sonstige Vorrichtung, der bzw. die dafür geeignet ist, ein Verfahren im Wesentlichen wie im vorliegenden Text beschrieben auszuführen.
  • Beispiel 33 ist ein Prozessor oder eine sonstige Vorrichtung zum Ausführen (zum Beispiel mit Komponenten zum Ausführen oder mit der Eignung zum Ausführen) einer Instruktion einer modularen Potenzierung mit verschleierten Eingabeinformationen im Wesentlichen wie im vorliegenden Text beschrieben.
  • ZITATE ENTHALTEN IN DER BESCHREIBUNG
  • Diese Liste der vom Anmelder aufgeführten Dokumente wurde automatisiert erzeugt und ist ausschließlich zur besseren Information des Lesers aufgenommen. Die Liste ist nicht Bestandteil der deutschen Patent- bzw. Gebrauchsmusteranmeldung. Das DPMA übernimmt keinerlei Haftung für etwaige Fehler oder Auslassungen.
  • Zitierte Patentliteratur
    • CL 13721382 [0124]

Claims (25)

  1. Prozessor, der Folgendes umfasst: eine Decodiereinheit zum Decodieren einer Instruktion einer modularen Potenzierung mit verschleierten Eingabeinformationen, wobei die Instruktion einer modularen Potenzierung mit verschleierten Eingabeinformationen zum Angeben mehrerer Quellenoperanden dient, die Eingabeinformationen für eine Modularpotenzierungsoperation speichern sollen, wobei mindestens einige der Eingabeinformationen, die in den mehreren Quellenoperanden gespeichert werden sollen, verschleiert werden sollen; und eine Ausführungseinheit, die mit der Decodiereinheit gekoppelt ist, wobei die Ausführungseinheit in Reaktion auf die Instruktion einer modularen Potenzierung mit verschleierten Eingabeinformationen dafür geeignet ist, ein Modularpotenzierungsergebnis an einer Zielort-Speicherposition zu speichern, die durch die Instruktion einer modularen Potenzierung mit verschleierten Eingabeinformationen angegeben werden soll.
  2. Prozessor nach Anspruch 1, wobei die Decodiereinheit dafür ausgelegt ist, die Instruktion zu decodieren, die die mehreren Quellenoperanden angeben soll, die mindestens eines von einem verschleierten Exponenten, einer verschleierten Basis und einem verschleierten Modul speichern sollen.
  3. Prozessor nach Anspruch 1, wobei die Decodiereinheit dafür ausgelegt ist, die Instruktion zu decodieren, die die mehreren Quellenoperanden angeben soll, die eine von einer Reduktionskonstante und einer verschleierten Reduktionskonstante speichern sollen, wobei die Reduktionskonstante durch einen Reduktionsalgorithmus zur modularen Potenzierung definiert wird und aus einem Modul abgeleitet werden kann.
  4. Prozessor nach Anspruch 1, wobei die Decodiereinheit dafür ausgelegt ist, die Instruktion zu decodieren, die die mehreren Quellenoperanden angeben soll, die einen verschleierten geheimen Eingangsparameter und einen nicht verschleierten öffentlichen Eingangsparameter speichern sollen.
  5. Prozessor nach Anspruch 1, wobei der Decodierer dafür ausgelegt ist, die Instruktion zu decodieren, die mindestens ein Feld haben soll, um anzugeben, ob ein entsprechender Abschnitt der Eingabeinformationen für die Modularpotenzierungsoperation verschleiert ist.
  6. Prozessor nach Anspruch 1, der des Weiteren ein Geheimnis umfasst, das nicht durch Software gelesen werden kann, und wobei die Decodiereinheit dafür ausgelegt ist, die Instruktion zu decodieren, welche die verschleierten Eingabeinformationen angeben soll, aus denen entsprechende Eingabeinformationen, auf denen das Modularpotenzierungsergebnis basiert, nicht ohne das Geheimnis des Prozessors, das durch die Software nicht gelesen werden kann, abgeleitet werden können.
  7. Prozessor nach Anspruch 1, der des Weiteren einen geheimen Schlüssel des Prozessors umfasst, der durch Software nicht gelesen werden kann, und wobei die Decodiereinheit dafür ausgelegt ist, die Instruktion zu decodieren, welche die verschleierten Eingabeinformationen angeben soll, die verschlüsselte Eingabeinformationen enthalten sollen, die mit dem geheimen Schlüssel des Prozessors, der durch die Software nicht gelesen werden kann, entschlüsselt werden sollen.
  8. Prozessor nach Anspruch 1, wobei die Decodiereinheit dafür ausgelegt ist, die Instruktion zu decodieren, welche die verschleierten Eingabeinformationen angeben soll, die einen Wert umfassen sollen, der dazu dient, einen aus mehreren Sätzen geheimer nicht verschleierter Eingabeinformationen anzugeben, die eines von Folgendem sein sollen: in dem Prozessor gespeichert und für Software nicht lesbar; und in dem Prozessor generiert und für Software nicht lesbar.
  9. Prozessor nach Anspruch 8, wobei der Wert eines von Folgendem sein soll: einem Index, der dafür verwendet werden soll, den Satz geheimer nicht verschleierter Eingabeinformationen auszuwählen; einer Zahl, die dafür verwendet werden soll, den Satz geheimer nicht verschleierter Eingabeinformationen auszuwählen; und einem Identifikator des Satzes geheimer nicht verschleierter Eingabeinformationen.
  10. Prozessor nach Anspruch 1, wobei die Decodiereinheit dafür ausgelegt ist, die Instruktion zu decodieren, die mindestens ein Feld haben soll, das dafür verwendet werden soll, eine Größe der Quellenoperanden als eine von mehreren verschiedenen möglichen Größen zu bestimmen.
  11. Prozessor nach Anspruch 10, wobei die Decodiereinheit dafür ausgelegt ist, die Instruktion zu decodieren, die Folgendes haben soll: ein Größenhinweisfeld, das dafür verwendet werden soll, eine Basisgröße zu bestimmen; und ein Dreifach-Größenhinweisfeld, das angeben soll, ob die Basisgröße verdreifacht werden soll, um die Größe der Quellenoperanden zu bestimmen.
  12. Prozessor nach einem der Ansprüche 1 bis 11, wobei die Ausführungseinheit in Reaktion auf eine zweite Instanz der Instruktion einer modularen Potenzierung mit verschleierten Eingabeinformationen für Folgendes ausgelegt ist: Detektieren eines gescheiterten Versuchs des Entschleierns von verschleierten Eingabeinformationen; und Signalisieren eines Fehlers.
  13. Prozessor nach einem der Ansprüche 1 bis 11, wobei die Ausführungseinheit in Reaktion auf eine zweite Instanz der Instruktion einer modularen Potenzierung mit verschleierten Eingabeinformationen für Folgendes ausgelegt ist: Stoppen des Ausführens der zweiten Instanz der Instruktion einer modularen Potenzierung mit verschleierten Eingabeinformationen nach einer Unterbrechung; Verschlüsseln eines Zwischenzustands, der mit der unterbrochenen Ausführung der zweiten Instanz der Instruktion einer modularen Potenzierung mit verschleierten Eingabeinformationen verknüpft ist, mit einem geheimen Schlüssel des Prozessors, der durch Software nicht gelesen werden kann; und Speichern des verschlüsselten Zwischenzustands an einer Speicherposition.
  14. Prozessor nach einem der Ansprüche 1 bis 11, wobei die Ausführungseinheit in Reaktion auf eine zweite Instanz der Instruktion einer modularen Potenzierung mit verschleierten Eingabeinformationen für Folgendes ausgelegt ist: Stoppen des Ausführens der zweiten Instanz der Instruktion einer modularen Potenzierung mit verschleierten Eingabeinformationen nach einer Unterbrechung; und Verwerfen eines Zwischenzustands, der mit der unterbrochenen Ausführung der zweiten Instanz der Instruktion einer modularen Potenzierung mit verschleierten Eingabeinformationen verknüpft ist.
  15. Prozessor nach einem der Ansprüche 1 bis 11, wobei die Decodiereinheit dafür ausgelegt ist, die Instruktion zu decodieren, die mehrere Register des Prozessors angeben soll, und wobei jedes der Register einen Zeiger an einer Position in einem Speicher speichern soll, die zum Speichern eines entsprechenden der mehreren Quellenoperanden dient.
  16. Prozessor nach einem der Ansprüche 1 bis 11, wobei das Modularpotenzierungsergebnis einen Rest darstellen soll, wenn eine Basis mit einem Exponenten potenziert wird, um ein Potenzierungsergebnis zu generieren, und das Potenzierungsergebnis durch einen Modul geteilt wird.
  17. Verfahren in einem Prozessor, das Folgendes umfasst: Empfangen einer Instruktion einer modularen Potenzierung mit verschleierten Eingabeinformationen, wobei die Instruktion einer modularen Potenzierung mit verschleierten Eingabeinformationen mehrere Quellenoperanden angibt, die Eingabeinformationen für eine Modularpotenzierungsoperation speichern, wobei mindestens einige der Eingabeinformationen, die in den mehreren Quellenoperanden gespeichert sind, verschleiert sind; und Speichern eines Modularpotenzierungsergebnisses an einer Zielort-Speicherposition, die durch die Instruktion einer modularen Potenzierung mit verschleierten Eingabeinformationen angegeben wird, in Reaktion auf die Instruktion einer modularen Potenzierung mit verschleierten Eingabeinformationen.
  18. Verfahren nach Anspruch 17, das des Weiteren Folgendes umfasst: Entschleiern der mindestens einigen der Eingabeinformationen, die mit einem Geheimnis verschleiert sind, das einem Prozessor verfügbar ist, aber von Software nicht gelesen werden kann.
  19. Verfahren nach Anspruch 17, wobei das Empfangen das Empfangen der Instruktion umfasst, welche die Quellenoperanden angibt, die mindestens eines von einem verschleierten Exponenten, einer verschleierten Basis und einem verschleierten Modul speichern.
  20. Verfahren nach Anspruch 17, wobei das Empfangen das Empfangen der Instruktion umfasst, welche die Quellenoperanden angibt, die mindestens eine von einer Reduktionskonstante und einer verschleierten Reduktionskonstante speichern, wobei die Reduktionskonstante durch einen Reduktionsalgorithmus zur modularen Potenzierung definiert wird und aus einem Modul abgeleitet werden kann.
  21. System zum Verarbeiten von Instruktionen, das Folgendes umfasst: eine Interconnect-Verbindung; einen Prozessor, der mit der Interconnect-Verbindung gekoppelt ist, wobei der Prozessor dafür ausgelegt ist, eine Instruktion einer modularen Potenzierung mit verschleierten Eingabeinformationen zu empfangen, die mehrere Quellenoperanden angeben sollen, die Eingabeinformationen für eine Modularpotenzierungsoperation speichern sollen, wobei mindestens einige der Eingabeinformationen, die in den mehreren Quellenoperanden gespeichert werden sollen, verschleiert werden sollen, wobei der Prozessor dafür ausgelegt ist, in Reaktion auf die Instruktion ein Modularpotenzierungsergebnis an einer Zielort-Speicherposition zu speichern, die durch die Instruktion einer modularen Potenzierung mit verschleierten Eingabeinformationen angegeben werden soll; und einen dynamischen Direktzugriffsspeicher (DRAM), der mit der Interconnect-Verbindung gekoppelt ist, wobei der DRAM Instruktionen speichert, die mehrere verschiedene Instanzen der Instruktion einer modularen Potenzierung mit verschleierten Eingabeinformationen enthalten, die jeweils jeweilige mehrere Quellenoperanden angeben, in denen jeder Satz aus Quellenoperanden verschiedene Arten von verschleierten Eingabeinformationen für die verschiedenen Instanzen der Instruktion einer modularen Potenzierung mit verschleierten Eingabeinformationen speichern soll.
  22. System nach Anspruch 21, wobei der Prozessor dafür ausgelegt ist, die Instruktion zu empfangen, die die mehreren Quellenoperanden angeben soll, die mindestens eines von einem verschleierten Exponenten, einer verschleierten Basis und einem verschleierten Modul speichern sollen.
  23. Vorrichtung, die Mittel zum Ausführen des Verfahrens nach einem der Ansprüche 17 bis 20 umfasst.
  24. Erzeugnis, das ein maschinenlesbares Medium umfasst, das eine Instruktion speichert, die, falls sie durch eine Maschine ausgeführt wird, dafür geeignet ist, die Maschine zu veranlassen, das Verfahren nach einem der Ansprüche 17 bis 20 auszuführen.
  25. Elektronische Vorrichtung, die Folgendes umfasst: eine Interconnect-Verbindung, den Prozessor nach einem der Ansprüche 1 bis 11, der mit der Interconnect-Verbindung gekoppelt ist, und einen dynamischen Direktzugriffsspeicher (DRAM), der mit der Interconnect-Verbindung gekoppelt ist.
DE112016004365.1T 2015-09-25 2016-08-08 Sichere modularpotenzierungsprozessoren, verfahren, systeme und instruktionen Pending DE112016004365T5 (de)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/866,334 2015-09-25
US14/866,334 US10089500B2 (en) 2015-09-25 2015-09-25 Secure modular exponentiation processors, methods, systems, and instructions
PCT/US2016/045980 WO2017052811A2 (en) 2015-09-25 2016-08-08 Secure modular exponentiation processors, methods, systems, and instructions

Publications (1)

Publication Number Publication Date
DE112016004365T5 true DE112016004365T5 (de) 2018-06-07

Family

ID=58387094

Family Applications (1)

Application Number Title Priority Date Filing Date
DE112016004365.1T Pending DE112016004365T5 (de) 2015-09-25 2016-08-08 Sichere modularpotenzierungsprozessoren, verfahren, systeme und instruktionen

Country Status (5)

Country Link
US (1) US10089500B2 (de)
CN (1) CN107924444B (de)
DE (1) DE112016004365T5 (de)
TW (1) TWI706321B (de)
WO (1) WO2017052811A2 (de)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10089500B2 (en) 2015-09-25 2018-10-02 Intel Corporation Secure modular exponentiation processors, methods, systems, and instructions
US10270598B2 (en) 2016-08-26 2019-04-23 Intel Corporation Secure elliptic curve cryptography instructions
CN108287759B (zh) 2017-01-10 2021-07-09 阿里巴巴集团控股有限公司 处理数据过程中的调度方法、装置和系统
CN110825436B (zh) * 2018-08-10 2022-04-29 昆仑芯(北京)科技有限公司 应用于人工智能芯片的计算方法和人工智能芯片
US11005654B2 (en) * 2019-05-14 2021-05-11 Google Llc Outsourcing exponentiation in a private group
FR3096851B1 (fr) * 2019-05-27 2021-05-21 Idemia Identity & Security France Procedes de mise en œuvre et d’obfuscation d’un algorithme cryptographique a cle secrete donnee
CN111901110B (zh) * 2020-08-06 2023-05-23 中电科网络安全科技股份有限公司 白盒化模幂结果获取方法、装置、设备及存储介质
CN112883408B (zh) * 2021-04-29 2021-07-16 深圳致星科技有限公司 用于隐私计算的加解密系统和芯片

Family Cites Families (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CA2369304A1 (en) 2002-01-30 2003-07-30 Cloakware Corporation A protocol to hide cryptographic private keys
US7739521B2 (en) 2003-09-18 2010-06-15 Intel Corporation Method of obscuring cryptographic computations
JP4876075B2 (ja) * 2005-11-08 2012-02-15 パナソニック株式会社 認証システム、署名生成装置、署名検証装置
US7760875B2 (en) 2006-06-29 2010-07-20 Intel Corporation Accelerating Diffie-Hellman key-exchange protocol with zero-biased exponent windowing
US7912886B2 (en) 2006-12-14 2011-03-22 Intel Corporation Configurable exponent FIFO
US7961877B2 (en) 2006-12-14 2011-06-14 Intel Corporation Factoring based modular exponentiation
US7925011B2 (en) 2006-12-14 2011-04-12 Intel Corporation Method for simultaneous modular exponentiations
KR20110014630A (ko) 2008-05-07 2011-02-11 이르데토 비.브이. 지수 불명료화
US8112066B2 (en) * 2009-06-22 2012-02-07 Mourad Ben Ayed System for NFC authentication based on BLUETOOTH proximity
EP2437160A1 (de) 2010-10-04 2012-04-04 Nagravision S.A. Verschleierte modulare Potenzierung
US8904190B2 (en) * 2010-10-20 2014-12-02 Advanced Micro Devices, Inc. Method and apparatus including architecture for protecting sensitive code and data
FR2977953A1 (fr) 2011-07-13 2013-01-18 St Microelectronics Rousset Protection d'un calcul d'exponentiation modulaire par addition d'une quantite aleatoire
US8799343B2 (en) 2011-09-22 2014-08-05 Intel Corporation Modular exponentiation with partitioned and scattered storage of Montgomery Multiplication results
US9092645B2 (en) 2011-12-05 2015-07-28 Intel Corporation Efficient multiplication, exponentiation and modular reduction implementations
US9135450B2 (en) 2011-12-21 2015-09-15 Intel Corporation Systems and methods for protecting symmetric encryption keys
US8955144B2 (en) 2013-06-28 2015-02-10 Intel Corporation Protecting information processing system secrets from debug attacks
US10313129B2 (en) 2015-06-26 2019-06-04 Intel Corporation Keyed-hash message authentication code processors, methods, systems, and instructions
US10089500B2 (en) 2015-09-25 2018-10-02 Intel Corporation Secure modular exponentiation processors, methods, systems, and instructions
US10142101B2 (en) 2015-09-29 2018-11-27 Intel Corporation Hardware enforced one-way cryptography

Also Published As

Publication number Publication date
CN107924444B (zh) 2022-07-19
US20170091488A1 (en) 2017-03-30
WO2017052811A2 (en) 2017-03-30
TWI706321B (zh) 2020-10-01
TW201723804A (zh) 2017-07-01
US10089500B2 (en) 2018-10-02
CN107924444A (zh) 2018-04-17
WO2017052811A3 (en) 2017-04-27

Similar Documents

Publication Publication Date Title
DE112016004365T5 (de) Sichere modularpotenzierungsprozessoren, verfahren, systeme und instruktionen
DE102019109088A1 (de) Schutz von schlüsseln und sensitiven daten gegen angriffe in einer mikroprozessorarchitektur
CN106575215B (zh) 处理指令的系统、设备、方法、处理器、介质和电子设备
US10877806B2 (en) Method and apparatus for securely binding a first processor to a second processor
DE112017001766T5 (de) Power-side-channel-angriffsresistenter advanced-encryption-standard-beschleunigungsprozessor
DE102015006863A1 (de) Befehle und Logik zum Unterbrechen und Wiederaufnehmen von Paging in Secure Enclaves
DE102015008012A1 (de) SM4-Beschleunigungsprozessoren, Verfahren, Systeme und Anweisungen
DE102014004563A1 (de) Befehle und Logik zur Bereitstellung verbesserter Paging-Fähigkeiten für Secure Enclave-Seitencaches
DE112013005239B4 (de) Anweisung zur Beschleunigung des drahtlosen SNOW 3G- Sicherheitsalgorithmus
DE102018005180A1 (de) Flexible Bescheinigung von Containern
DE102018126731A1 (de) Freigabeanweisung, um Seitenblock während des Auslagerns umzukehren
DE102018125747A1 (de) Unterstützung für eine höhere anzahl von gleichzeitigenschlüsseln in einer kryptografie-engine mit mehrerenschlüsseln
US20210200880A1 (en) Method and apparatus for multi-key total memory encryption based on dynamic key derivation
EP3504838B1 (de) Sichere anweisungen für elliptische kurven-kryptographie
US10606765B2 (en) Composite field scaled affine transforms-based hardware accelerator
DE202019005672U1 (de) System zum Verhindern eines unautorisierten Zugriffs auf verschlüsselten Speicher
DE102015002215A1 (de) Sortierbeschleunigungsprozessor, -Verfahren, -Systeme und -Befehle
DE102018005101A1 (de) Feld-Systemtest-Sicherheit
DE102015006670A1 (de) Befehle und logik zum bereitstellen von kryptographischer allzweck-gf(256)-simd- arithmetikfunktionalität
DE112013005428T5 (de) Befehle, Prozessoren, Verfahren und Systeme zum Verarbeiten sicherer Hash-Algorithmen
US11917067B2 (en) Apparatuses, methods, and systems for instructions for usage restrictions cryptographically tied with data
DE112011105665T5 (de) Befehl und Logik zum Liefern von Vektorladen und -speichern mit Schritt- und Maskierfunktionalität
US11544174B2 (en) Method and apparatus for protecting trace data of a remote debug session
DE112016004342T5 (de) Hardware-Beschleuniger mit doppelt affiner abgebildeter S-Box
DE102020128050A1 (de) Tdx-inseln mit in sich abgeschlossenem geltungsbereich, wodurch eine tdx-schlüsselkennungsskalierung ermöglicht wird

Legal Events

Date Code Title Description
R012 Request for examination validly filed
R016 Response to examination communication