-
GEBIET
-
Die vorliegende Offenbarung betrifft im Allgemeinen das Gebiet der Computerentwicklung, und spezifischer die Datensicherheit.
-
STAND DER TECHNIK
-
Ein Rechensystem kann einen oder mehrere Prozessoren, ein oder mehrere Speichervorrichtungen und/oder eine oder mehrere Kommunikationssteuereinheiten umfassen, unter anderen Komponenten. Logik des Rechensystems kann zum Verschlüsseln und/oder Entschlüsseln von Daten betreibbar sein.
-
Figurenliste
-
- 1 ist ein Blockbild einer Plattform, die eine Zentraleinheit (CPU) und einen Sicherheitsprozessor aufweist, gemäß bestimmten Ausführungsformen;
- 2 ist ein Ablauf zum Kommunizieren eines gemeinsam genutzten Schlüssels an einen Sicherheitsprozessor gemäß bestimmten Ausführungsformen;
- 3 ist ein Ablauf zum Kommunizieren eines Wrapping-Schlüssels an einen Sicherheitsprozessor gemäß bestimmten Ausführungsformen;
- 4 ist ein Ablauf zum Generieren und Speichern eines Schlüssels für eine Software-Anwendung gemäß bestimmten Ausführungsformen;
- 5 stellt Kommunikationen zwischen einer CPU, einem Sicherheitsprozessor und einer Systemspeichervorrichtung gemäß bestimmten Ausführungsformen dar;
- 6 ist ein Ablauf zum sicheren Anfordern einer Entschlüsselung verschlüsselter Daten gemäß bestimmten Ausführungsformen;
- 7A ist ein Blockbild, das sowohl ein Beispiel einer geordneten Pipeline als auch ein Beispiel einer Registerumbenennungs-, ungeordneten Ausgabe/Ausführungs-Pipeline gemäß bestimmten Ausführungsformen darstellt;
- 7B ist ein Blockbild, das sowohl ein Beispiel einer Ausführungsform eines geordneten Architekturkerns als auch ein Beispiel eines Registerumbenennungs-, ungeordneten Ausgabe/Ausführungs-Architekturkerns darstellt, der in einen Prozessor gemäß bestimmten Ausführungsformen einzuschließen ist;
- 8A-B veranschaulichen ein Blockbild eines spezifischeren Beispiels einer geordenten Kernarchitektur, wobei der Kern einer von mehreren Logikblöcken (potentiell andere Kerne derselben Art und/oder anderer Arten umfassend) in einem Chip wäre, gemäß bestimmten Ausführungsformen;
- 9 ist ein Blockbild eines Prozessors, der mehr als einen Kern aufweisen kann, eine integrierte Speichersteuereinheit aufweisen kann und integrierte Grafik aufweisen kann, gemäß bestimmten Ausführungsformen;
- 10, 11, 12 und 13 sind Blockbilder von Beispielen von Computerarchitekturen gemäß bestimmten Ausführungsformen; und
- 14 ist ein Blockbild, das den Gebrauch eines Software-Instruktionsumwandlers zum Umwandeln binärer Instruktionen in einem Quellinstruktionssatz in binäre Instruktionen in einem Zielinstruktionssatz gegenüberstellt, gemäß bestimmten Ausführungsformen.
-
Gleiche Bezugszeichen in den verschiedenen Zeichnungen bezeichnen gleiche Elemente.
-
DETAILLIERTE BESCHREIBUNG
-
Obwohl die Zeichnungen bestimmte Computersysteme darstellen, sind die Konzepte verschiedener Ausführungsformen auf beliebige geeignete Computersysteme anwendbar. Beispiele von Systemen, bei denen Lehren der vorliegenden Offenbarung angewendet werden können, umfassen Desktop-Computersysteme, Server-Computersysteme, Speichersysteme, Handvorrichtungen, Tablets, andere dünne Notebooks, System-on-Chip- (SoC-) Vorrichtungen und eingebettete Anwendungen. Einige Beispiele von Handvorrichtungen umfassen Mobiltelefone, Digitalkameras, Media Player, Personal Digital Assistants (PDA) und Hand-PCs. Eingebettete Anwendungen können Mikrosteuereinheiten, digitale Signalprozessoren (DSPs), SoCs, Netzcomputer (NetPCs), Set-top-Boxen, Netzhubs, Weitbereichsnetze (WANs), Schalter oder irgendein anderes System umfassen, das die nachstehend gelehrten Funktionen und Operationen ausführen kann. Verschiedene Ausführungsformen der vorliegenden Offenbarung können in jeder geeigneten Rechenumgebung verwendet werden, wie einer persönlichen Rechenvorrichtung, einem Server, einem Mainframe, einer Cloud-Rechendienstanbieter-Infrastruktur, einem Datencenter, einer Kommunikationsdienstanbieter-Infrastruktur (z.B. ein oder mehrere Abschnitte eines Evolved Packet Core), oder in einer anderen Umgebung, die ein oder mehrere Rechenvorrichtungen aufweist.
-
1 veranschaulicht ein Blockbild eines Beispiels einer Plattform 100, die eine Zentraleinheit (CPU) 102 und einen Sicherheitsprozessor 104 aufweist, gemäß bestimmten Ausführungsformen. Die Plattform 100 weist außerdem eine externe I/O-Steuereinheit 106 auf. Die Plattform 100 ist mit einer Systemspeichervorrichtung 108 und einer Speichervorrichtung 110 gekoppelt.
-
Eine Software-Anwendung, die auf der Plattform 100 läuft (z.B. können Instruktionen der Anwendung durch die CPU 102 ausgeführt werden), kann anfordern, dass die CPU kryptografische Operationen in ihrem Auftrag ausführt. Beispielsweise kann die Anwendung anfordern, dass der Prozessor Daten verschlüsselt oder entschlüsselt. Daten können durch eine CPU auf jegliche geeignete Art und Weise verschlüsselt oder entschlüsselt werden. Beispielsweise kann die CPU Instruktionen eines Advanced Encryption Standard (AES), AES-New Instruktionen (NI), eines ähnlichen Instruktionssatzes oder andere geeignete Instruktionen ausführen, die beliebige geeignete kryptografische Algorithmen implementieren. Beispielsweise kann eine Instruktion Daten aufweisen oder bezeichnen (z.B. eine Adresse von Daten aufweisen), die zu verschlüsseln oder zu entschlüsseln sind, und einen kryptografischen Schlüssel aufweisen oder bezeichnen, der zum Verschlüsseln oder Entschlüsseln der Daten zu verwenden ist. Ein Speicherort, der durch eine Instruktion bezeichnet wird, kann jeder geeignete Speicherort sein, wie ein Ort in der Systemspeichervorrichtung 108 oder jeder andere geeignete Speicherort. Obwohl derartige Instruktionen die Ausführung von kryptografischen Operationen beschleunigen können, kann das System, wenn eine Instruktion einen kryptografischen Schlüssel bezeichnet, der in Klartext (d.h. einer unverschlüsselten Form) in der Systemspeichervorrichtung oder an einem anderen Speicherort gespeichert ist, für einen Angriff anfällig sein, bei dem mit böser Absicht auf den Schlüssel zugegriffen wird (z.B. von der Systemspeichervorrichtung oder von einem Kommunikationsbus der Plattform).
-
Die Sicherheit kann durch Auslegen der CPU zum Ausführen einer Instruktion mit einem Zeiger zu einem verpackten Schlüssel (d.h. einem verschlüsselten Schlüssel), der im Speicher gespeichert ist, statt einem Klartextschlüssel erhöht werden. Beispielsweise kann, wenn eine CPU hochfährt, diese eine Zufallszahl erzeugen, die als Wrapping-Schlüssel verwendet wird. Eine Software-Anwendung, die den AES-NI-Instruktionssatz oder andere kryptografieverwandte Instruktionen verwendet, kann der CPU einen Klartextschlüssel übermitteln, und die CPU verschlüsselt diesen Schlüssel mit dem Wrapping-Schlüssel und leitet ihn an Software-Anwendung als Handle zurück, der von der Softwareanwendung verwendet werden soll, wenn sie eine kryptografische Instruktion aufruft. Dadurch übermittelt die Software-Anwendung, statt einen Zeiger zu einem Verschlüsselungsschlüssel zu übermitteln, der in Klarttext gespeichert ist, einen Zeiger zum Handle (d.h. verpackten Schlüssel). Obwohl der Schlüssel zu dem Zeitpunkt, zu dem eine Instruktion, die auf den Schlüssel verweist, ausgeführt wird, nicht länger klar im Speicher ist, liegt immer noch ein Zeitraum vor, in dem der Schlüssel in Klartext ist und für einen Angriff anfällig ist. Beispielsweise kann die Software-Anwendung, bevor sie die CPU um den Handle (d.h. verpackten Schlüssel) ersucht, den Schlüssel in Klartext im Speicher speichern (z.B. kann die Instruktion, die den verpackten Schlüssel anfordert, einen Zeiger zum Schlüssel in Klartext aufweisen), um es der CPU 102 zu ermöglichen, vor dem Verschlüsseln des Schlüssels auf den Schlüssel zuzugreifen. Daher ist, obwohl der Schlüssel nicht jedesmal offengelegt wird, wenn eine Verschlüsselungs- oder Entschlüsselungsinstruktion ausgeführt wird, der Schlüssel immer noch in Klartext offengelegt und daher potentiell für einen Angriff anfällig.
-
Verschiedene Ausführungsformen der vorliegenden Offenbarung sehen ein Verfahren zum sicheren Binden einer CPU 102 und eines Sicherheitsprozessors 104 (d.h. zum Teilen eines kryptografischen Geheimnisses zwischen ihnen) vor. Eine derartige Bindung kann das Wrapping eines Schlüssels durch den Sicherheitsprozessor 104 und das Einschließen oder Bezeichnen des verpackten Schlüssels in Verschlüsselungs- und Entschlüsselungsinstruktionen umfassen, ohne dass der Schlüssel jemals in Klartext außerhalb des Sicherheitsprozessors 104 gespeichert wird. Daher wird der Schlüssel in verschiedenen Ausführungsformen niemals klar auf der Systemspeichervorrichtung 108 gespeichert oder klar auf einem Kommunikationsbus außerhalb des Sicherheitsprozessors 104 gesendet. Bestimmte Ausführungsformen können verschiedene Vorteile gegenüber anderen Verfahren des Bindens einer CPU und eines Sicherheitsprozessors vorsehen, wie einen, bei dem ein Originalausrüstungshersteller (OEM) ein Geheimnis erstellt und speichert, wobei ein sicherer virtueller Maschinenmonitor (VMM) und ein Sicherheitsprozessor auf derselben Plattform laufen. Beispielsweise greifen verschiedene Ausführungsformen der vorliegenden Offenbarung nicht auf einen VMM zurück, erfordern nicht, dass sich der OEM in der Vertrauensgrenze befindet, und legen das gemeinsame Geheimnis nicht für einen dynamischen Speicher mit wahlfreiem Zugriff (DRAM) oder einen anderen Systemspeicher oder Kommunikationsbusse (beispielsweise Direct Media Interface (DMI), Serial Peripheral Interface (SPI), Low Pin Count (LPC) oder einen anderen geeigneten Bus) offen, der/die an die CPU 102, den Sicherheitsprozessor 104 oder die Systemspeichervorrichtung 108 gekoppelt ist/sind.
-
Sobald der Sicherheitsprozessor 104 und die CPU 102 durch einen gemeinsam genutzten Wrapping-Schlüssel aneinander gebunden sind, kann ein Schlüssel, der durch den Sicherheitsprozessor 104 generiert wird (z.B. ein Schlüssel zur Benutzung durch eine Software-Anwendung beim Anfordern an die CPU, kryptografische Instruktionen auszuführen), direkt in die CPU eingeführt werden, ohne jemals für Malware zu erscheinen. Zudem kann die Bindung dem Sicherheitsprozessor 104 und der CPU 102 ermöglichen zu attestieren, dass sie auf derselben Plattform sind, wodurch eine Situation verhindert wird, in der ein Angreifer Befehle von einer CPU auf einer Plattform zu einem Sicherheitsprozessor auf einer anderen Plattform umleiten kann.
-
Die Plattform 100 umfasst eine CPU 102, die an einen Sicherheitsprozessor 104 gekoppelt ist, eine externe Ein-/Ausgabe- (I/O-) Steuereinheit 106, eine Systemspeichervorrichtung 108 und eine Speichervorrichtung 110. Die CPU 102 umfasst einen Prozessor, wie einen Mikroprozessor, einen eingebetteten Prozessor, einen DSP, einen Netzprozessor, einen Hand-Prozessor, einen Anwendungsprozessor, einen Coprozessor, ein SoC oder eine andere Vorrichtung zum Ausführen von Code (d.h. Software-Instruktionen). In der dargestellten Ausführungsform umfasst die CPU 102 zwei Verarbeitungselemente (Kerne 112A und 112B), die asymmetrische Verarbeitungselemente oder symmetrische Verarbeitungselemente aufweisen können. Ein Prozessor kann jedoch eine beliebige Anzahl von Verarbeitungselementen aufweisen, die symmetrisch oder asymmetrisch sein können.
-
In einer Ausführungsform bezieht sich ein Verarbeitungselement auf Hardware oder Logik zur Unterstützung eines Software-Threads. Beispiele von Hardware-Verarbeitungselementen umfassen: eine Thread-Einheit, einen Thread-Slot, einen Thread, eine Verarbeitungseinheit, einen Kontext, eine Kontexteinheit, einen Logikprozessor, einen Hardware-Thread, einen Kern und/oder irgendein anderes Element, das einen Status für einen Prozessor halten kann, wie einen Ausführungsstatus oder einen Architekturstatus. Mit anderen Worten, ein Verarbeitungselement, in einer Ausführungsform, bezieht sich auf jegliche Hardware, die imstande ist, unabhängig mit Code assoziiert zu werden, wie einem Software-Thread, einem Betriebssystem, einer Anwendung oder anderem Code. Ein physischer Prozessor (oder Prozessorsockel) bezieht sich typischerweise auf eine integrierte Schaltung, die potentiell eine beliebige Anzahl anderer Verarbeitungselemente aufweist, wie Kerne oder Hardware-Threads.
-
Ein Kern 112 kann sich auf Logik beziehen, die sich auf einer integrierten Schaltung befindet und einen unabhängigen Architekturstatus aufrechterhalten kann, wobei jeder unabhängig aufrechterhaltene Architekturstatus mit mindestens einigen dedizierten Ausführungsressourcen assoziiert ist. Ein Hardware-Thread kann sich auf jegliche Logik beziehen, die sich auf einer integrierten Schaltung befindet und einen unabhängigen Architekturstatus aufrechterhalten kann, wobei der unabhängig aufrechterhaltene Architekturstatus gemeinsam auf Ausführungsressourcen zugreift. Wie ersichtlich ist, überdeckt sich, wenn bestimmte Ressourcen gemeinsam genutzt werden und andere für einen Architekturstatus dediziert sind, die Linie zwischen der Nomenklatur eines Hardware-Threads und eines Kerns. Häufig werden jedoch ein Kern und ein Hardware-Thread von einem Betriebssystem als individuelle Logikprozessoren angesehen, wobei das Betriebssystem dazu imstande ist, Betriebe auf jedem Logikprozessor individuell zu planen.
-
In verschiedenen Ausführungsformen können die Verarbeitungselemente auch eine oder mehr arithmetische Logikeinheiten (ALUs), Gleitkommaeinheiten (FPUs), Caches, Instruktions-Pipelines, Unterbrechungsbehandlungs-Hardware, Register oder andere Hardware aufweisen, um die Betriebe der Verarbeitungselemente zu erleichtern.
-
Die I/O-Steuereinheit 114 ist eine integrierte I/O-Steuereinheit, die Logik zum Kommunizieren von Daten zwischen der CPU 102 und I/O-Vorrichtungen umfasst, welche sich auf jede geeignete Logik beziehen kann, die zum Übertragen von Daten an und/oder zum Empfangen von Daten von einem elektronischen System, wie der CPU 102, imstande ist. Beispielsweise kann ein I/O-Vorrichtung eine Steuereinheit einer Audio/Video- (A/V-) Vorrichtung, wie einen Grafikbeschleuniger, eine Steuereinheit einer Datenspeichervorrichtung (z.B. Speichervorrichtung 110), wie einen Solid State Driver (SSD), ein Festplattenlaufwerk (HDD), ein nicht-flüchtiges duales Inline-Speichermodul (NVDIMM) oder eine optische Speicherplatte, einen drahtlosen Sender/Empfänger, einen Netzprozessor, eine Netzschnittstellen-Steuereinheit oder eine Steuereinheit für eine andere Eingabevorrichtung, wie einen Monitor, einen Drucker, eine Maus, eine Tastatur oder einen Scanner, oder eine andere geeignete Vorrichtung umfassen.
-
Ein I/O-Vorrichtung kann mit der I/O-Steuereinheit 114 der CPU 102 unter Verwendung eines beliebigen geeigneten Signalisierungsprotokolls kommunizieren, wie Peripheral Component Interconnect (PCI), PCI Express (PCIe), Universal Serial Bus (USB), Serial Attached SCSI (SAS), Serial ATA (SATA), Fibre Channel (FC), Institute of Electrical and Electronics Engineers (IEEE) 802.3, IEEE 802.11, oder eines anderen aktuellen oder künftigen Signalisierungsprotokolls. In bestimmten Ausführungsformen können die I/O-Steuereinheit 114 und die zugrundliegende I/O-Vorrichtung Daten und Befehle gemäß einer Logikvorrichtungs-Schnittstellenspezifikation kommunizieren, wie etwa Non-Volatile Memory Express (NVMe) (z.B. wie durch eine oder mehrere der Spezifikationen beschrieben, die unter www.nvmexpress.org/ specifications/) verfügbar sind, oder Advanced Host Controller Interface (AHCI) (z.B. wie durch eine oder mehrere AHCI-Spezifikationen beschrieben, wie Serial ATA AHCI: Specification, Rev. 1.3.1, die unter http://www.intel.com/content/ www/us/en/io/serial-ata/serial-ata-ahci-spec-revl-3-1.html verfügbar sind). In verschiedenen Ausführungsformen können I/O-Vorrichtungen, die an die I/O-Steuereinheit gekoppelt sind, extern von dem Chip angeordnet sein (d.h. nicht auf demselben Chip wie die CPU 102), oder sie können auf demselben Chip wie die CPU 102 integriert sein.
-
Die Speichersteuereinheit 116 ist eine integrierte Speichersteuereinheit, die Logik zum Steuern des Datenflusses zu und von einer oder mehreren Systemspeichervorrichtungen 108 steuert. Die Speichersteuereinheit 116 kann Logik enthalten, die zum Lesen aus einer Systemspeichervorrichtung 108, zum Schreiben auf eine Systemspeichervorrichtung 108 oder zum Anfordern von anderen Operationen von einer Systemspeichervorrichtung 108 betreibbar ist. In verschiedenen Ausführungsformen kann die Speichersteuereinheit 116 Schreibanforderungen von Kernen 112 und/oder der I/O-Steuereinheit 114 empfangen und Daten, die in diesen Anforderungen spezifiziert werden, einer Systemspeichervorrichtung 108 zur Speicherung darin zuführen. Die Speichersteuereinheit 116 kann auch Daten aus einer Systemspeichervorrichtung 108 lesen und die gelesenen Daten der I/O-Steuerung 114 oder einem Kern 112 zuführen. Während des Betriebs kann die Speichersteuereinheit 116 Befehle ausgeben, die eine oder mehrere Adressen der Systemspeichervorrichtung 108 aufweisen, um Daten aus dem Speicher zu lesen oder darauf zu schreiben (oder um andere Operationen vorzunehmen). In einigen Ausführungsformen kann die Speichersteuereinheit 116 auf demselben Chip wie die CPU 102 implementiert sein, während die Speichersteuereinheit 116 in anderen Ausführungsformen auf einem anderen Chip als jene der CPU 102 implementiert sein kann. Die I/O-Steuereinheit 114 kann ähnliche Operationen in Bezug auf eine oder mehrere Speichervorrichtungen 110 vornehmen.
-
Die CPU 102 kann auch verschiedene Schlüssel in einem beliebigen geeigneten Speicher speichern. In der dargestellten Ausführungsform speichert die CPU 102 einen gemeinsam genutzten Schlüssel 120, einen verschlüsselten gemeinsam genutzten Schlüssel 121 und einen Wrapping-Schlüssel 122. Diese Schlüssel werden nächstehend detaillierter diskutiert. Im Allgemeinen ist ein Schlüssel eine Bitkette, die durch einen kryptografischen Algorithmus zum Verschlüsseln oder Entschlüsseln von Daten (z.B. Umwandeln von Klartext in Chiffretext oder umgekehrt) verwendet wird. In den verschiedenen Ausführungsformen, die hier beschrieben sind, können symmetrische oder asymmetrische Schlüssel verwendet werden. Verschlüsselungsalgorithmen, die denselben Schlüssel (d.h. einen symmetrischen Schlüssel) sowohl zur Verschlüsselung als auch zur Entschlüsselung benutzen, sind als symmetrische Schlüsselalgorithmen bekannt, während Verschlüsselungsalgorithmen, die einen ersten Schlüssel zur Verschlüsselung und einen zweiten Schlüssel zur Entschlüsselung benutzen, als asymmetrische Schlüsselalgorithmen bekannt sind. Daher kann, wenn gezeigt wird, dass ein gemeinsamer Schlüssel (z.B. der gemeinsam genutzte Schlüssel 120 oder der Wrapping-Schlüssel 122) von mehreren Einheiten gespeichert ist (z.B. CPU 102 und Sicherheitsprozessor 104), dies darstellen, dass derselbe symmetrische Schlüssel in jeder Einheit gespeichert ist oder verwandte asymmetrische Schlüssel in den Einheiten gespeichert sind (z.B. ist der Schlüssel, der zur Verschlüsselung verwendet wird, in einer Einheit gespeichert, und der entsprechende Schlüssel, der zur Entschlüsselung verwendet wird, ist in der anderen Einheit gespeichert).
-
Der Schlüsselgenerator 117 kann einen Zufallszahlengenerator, der Zufallszahlen erstellt, und Logik aufweisen, welche die Zufallszahlen zum Konstruieren von Schlüsseln für kryptografische Funktionen verwendet (wobei in verschiedenen Ausführungsformen die Zufallszahlen selbst als Schlüssel verwendet werden können oder zum Generieren von Schlüsseln verarbeitet werden können). Die Zufallszahlen und/oder Schlüssel, die durch den Schlüsselgenerator 117 generiert werden, können eine beliebige geeignete Länge aufweisen. In einer bestimmten Ausführungsform sind die Zufallszahlen 256 Bit lang. Der Schlüsselgenerator 117 kann zum Generieren von beliebigen geeigneten Schlüsseln, wie etwa dem Wrapping-Schlüssel 122, betreibbar sein.
-
Die Verschlüsselungs/Entschlüsselungsmaschine 119 kann Daten (die in manchen Situationen ein kryptografischer Schlüssel sein können) und einen kryptografischen Schlüssel als Eingabe empfangen und verschlüsselte Daten oder entschlüsselte Daten als Ausgabe generieren. Die Verschlüsselungs/Entschlüsselungsmaschine 119 kann beliebige geeignete kryptografische Algorithmen implementieren, wie einen RSA-Algorithmus oder einen anderen geeigneten Algorithmus. Die Verschlüsselungs/ Entschlüsselungsmaschine 119 kann beliebige geeignete Schlüssel verschlüsseln, wie den gemeinsam genutzten Schlüssel 120 und den Wrapping-Schlüssel 122. In einer bestimmten Ausführungsform kann die Verschlüsselungs/Entschlüsselungsmaschine 119 außerdem Daten verschlüsseln und/oder entschlüsseln, auf die in Instruktionen verwiesen wird, welche von der CPU 102 ausgeführt werden (oder es kann eine separate Verschlüsselungs/Entschlüsselungsmaschine zum Vorsehen derartiger Funktionalität verwendet werden). In verschiedenen Ausführungsformen können der Schlüsselgenerator 117 und/oder die Verschlüsselungs/Entschlüsselungsmaschine 119 eigenständige Logik sein, oder sie können mit einer oder mehreren anderen Komponenten der CPU 102 (z.B. Kern 112A) integriert sein.
-
Die CPU 102 kann auch über die externe I/O-Steuereinheit 106 an eine oder mehrere andere I/O-Vorrichtungen (wie etwa beliebige der oben aufgeführten oder andere geeignete I/O-Vorrichtungen) gekoppelt sein. In einer bestimmten Ausführungsform kann die externe I/O-Steuereinheit 106 eine Speichervorrichtung 110 an die CPU 102 koppeln. Die externe I/O-Steuereinheit 106 kann Logik zum Verwalten des Datenflusses zwischen einer oder mehreren CPUs 102 und I/O-Vorrichtungen aufweisen. In bestimmten Ausführungsformen befindet sich die externe I/O-Steuereinheit 106 zusammen mit der CPU 102 auf derselben Leiterplatte (z.B. einer Hauptplatine). Die externe I/O-Steuereinheit 106 kann unter Verwendung von Punkt-zu-Punkt- oder anderen Schnittstellen Informationen mit Komponenten der CPU 102 austauschen.
-
Die Systemspeichervorrichtung 108 kann beliebige geeignete Daten speichern, wie Daten, die durch die CPU 102 oder den Sicherheitsprozessor 104 verwendet oder generiert werden, um die Funktionalität der Plattform 100 vorzusehen. Beispielsweise können Daten, die mit Softwareanwendungen assoziiert sind, welche durch die Kerne 112 ausgeführt werden, oder Dateien, auf die diese zugreifen, in der Systemspeichervorrichtung 112 gespeichert werden. Daher kann eine Systemspeichervorrichtung 108 einen Systemspeicher (bisweilen als Hauptspeicher bezeichnet) aufweisen, der Daten und/oder Instruktionssequenzen speichert, welche durch die Kerne 112 ausgeführt oder anderwertig verwendet werden. Eine Systemspeichervorrichtung 108 kann für eine bestimmte CPU 102 dediziert sein oder mit anderen Vorrichtungen (z.B. einer oder mehreren anderen CPUs oder anderen Vorrichtungen) der Plattform 100 gemeinsam genutzt werden. In verschiedenen Ausführungsformen kann eine Systemspeichervorrichtung 108 einen Speicher, der eine beliebige Anzahl von Speichermodulen umfasst, eine Speichervorrichtungs-Steuereinheit und andere unterstützende Logik (nicht gezeigt) aufweisen. Ein Speichermodul kann einen nicht-flüchtigen Speicher und/oder flüchtigen Speicher aufweisen.
-
Ein nicht-flüchtiger Speicher ist ein Speichermedium, das keine Energie zum Beibehalten des Status von Daten erfordert, die vom Medium gespeichert werden. In verschiedenen Ausführungsformen kann ein nicht-flüchtiger Speicher byte- oder blockadressierbar sein. Nicht-einschränkende Beispiele eines nichtflüchtigen Speichers können beliebige oder eine Kombination aufweisen von: Solid State-Speicher (wie planarer oder dreidimensionaler (3D) NAND-Flash-Speicher oder NOR-Flash-Speicher), 3D-Crosspoint-Speicher, Speicher, die Chalcogenid-Phasenwechselmaterial (z.B. Chalcogenid-Glas) nutzen, ferroelektrischer Speicher, Siliciumoxidnitridoxidsilicium-(SONOS-) Speicher, Polymer-Speicher (z.B. ferroelektrischer Polymerspeicher), ferrolelektrischer Transistor-Speicher mit wahlfreiem Zugriff (Fe-TRAM), Ovonic-Speicher, Nanodraht-Speicher, elektrisch löschbarer programmierbarer Nurlese-Speicher (EEPROM), ein Memristor, ein- oder mehrstufiger Phasenänderungspeicher (PCM), Spin Hall Effect Magnetic RAM (SHE-MRAM) und Spin Transfer Torque Magnetic RAM (STTRAM).
-
Ein flüchtiger Speicher ist ein Speichermedium, das Energie zum Aufrechterhalten des Status von Daten erfordert, die vom Medium gespeichert werden. Beispiele von flüchtigen Speichern können verschiedene Arten von Speichern mit wahlfreiem Zugriff (RAM) enthalten, wie dynamische Speicher mit wahlfreiem Zugriff (DRAM) oder statische Speicher mit wahlfreiem Zugriff (SRAM). Ein bestimmter Typ eines DRAM, der in einem Speichermodul verwendet werden kann, ist ein synchroner dynamischer Speicher mit wahlfreiem Zugriff (SDRAM). In einigen Ausführungsformen kann ein beliebiger Abschnitt des Systemspeichers 108 einem oder mehreren von Joint Electron Device Engineering Council- (JEDEC-) Standards, umfassend, jedoch nicht beschränkt auf Double Data Rate- (DDR-) Standards, z.B. DDR3, 4 und 5, oder Low Power DDR4 (LPDDR4), sowie aufkommenden Standards entsprechen.
-
Eine Speichervorrichtung 110 kann beliebige geeignete Daten speichern, wie Daten, die von der CPU 102 zum Vorsehen der Funktionalität der Plattform 100 verwendet werden. Beispielsweise können Daten, die mit Software-Anwendungen assoziiert sind, welche durch die Kerne 112A und 112B ausgeführt werden, oder Dateien, auf die diese zugreifen, in der Speichervorrichtung 110 gespeichert werden. In verschiedenen Ausführungsformen kann eine Speichervorrichtung 110 persistente Daten (z.B. Dateien eines Benutzers oder Software-Anwendungscode) speichern, die ihren Status selbst dann beibehalten, wenn die Energie zur Speichervorrichtung 110 entfernt wird. Eine Speichervorrichtung 110 kann für die CPU 102 dediziert sein oder mit anderen Vorrichtungen (z.B. einer anderen CPU oder einer anderen Vorrichtung) der Plattform 100 gemeinsam genutzt werden.
-
Der Sicherheitsprozessor 104 kann ein beliebiger geeignete Prozessor sein, der kryptografische Schlüssel generieren kann, einen oder mehrere Schlüssel sicheren speichern kann, einen oder mehrere Verschlüsselungsalgorithmen vornehmen kann und/oder einen oder mehrere Entschlüsselungsalgorithmen vornehmen kann. In einer bestimmten Ausführungsform kann der Sicherheitsprozessor 104 eine dedizierte Mikrosteuereinheit sein, die zum Sichern von Hardware durch Integrieren kryptografischer Schlüssel in Vorrichtungen ausgebildet ist. In einer Ausführungsform ist der Sicherheitsprozessor 104 ein Trusted Platform-Modul (TPM) oder umfasst dieses, das mit einer Version einer TPM-Spezifikation kompatibel ist (z.B. Trusted Platform Module Library Specification Revision 01.16 oder eine andere TPM-Spezifikation, die von der Trusted Computing Group veröffentlicht wurde). Demgemäß kann der Sicherheitsprozessor 104 eine beliebiges oder mehrere Komponenten enthalten, die in derartigen Spezifikationen beschrieben sind.
-
In verschiedenen Ausführungsformen kann der Sicherheitsprozessor 104 in Verbindung mit einer Plattenverschlüsselungs-Software-Anwendung (z.B. SecureDoc, dm-crypt, BitLocker Drive Encryption oder einer anderen Softwareanwendung, die Daten verschlüsselt) zum Generieren und/oder Speichern kryptografischer Schlüssel verwendet werden, die von der Software-Anwendung zum Verschlüsseln von Daten zur Speicherung in der Speichervorrichtung 110 (die in verschiedenen Ausführungsformen ein Festplattenlaufwerk oder ein Solid State Drive sein kann) verwendet werden.
-
In einer bestimmten Ausführungsform umfasst eine erste integrierte Schaltung (z.B. Chip) den Sicherheitsprozessor 104, und eine zweite integrierte Schaltung (z.B. Chip) umfasst die CPU 102. In einer bestimmten Ausführungsform ist der Sicherheitsprozessor 104 in einer ersten Halbleiterpackung ausgeführt und die CPU 102 ist in einer zweiten Halbleiterpackung ausgeführt. In einer bestimmten Ausführungsform ist der Hersteller der CPU 102 ein anderer als der Hersteller des Sicherheitsprozessors 104, obwohl in einer anderen Ausführungsform ein gemeinsames Unternehmen sowohl die CPU 102 als auch den Sicherheitsprozessor 104 herstellen kann. Eine Halbleiterpackung und/oder eine integrierte Schaltung, die den Sicherheitsprozessor 104 enthält, kann für den Sicherheitsprozessor 104 dediziert sein oder kann andere Rechenlogik aufweisen (z.B. kann ein Sicherheitsprozessor 104 in der externen I/O-Steuereinheit 106 integriert sein). In einer bestimmten Ausführungsform kann der Sicherheitsprozessor 104 in Firmware implementiert sein (z.B. kann der Sicherheitsprozessor 104 innerhalb der vertrauenswürdigen Ausführungsumgebung einer CPU betrieben werden). In einer bestimmten Ausführungsform kann der Sicherheitsprozessor 104 eine vertrauenswürdige Ausführungsmaschine umfassen.
-
In der dargestellten Ausführungsform weist der Sicherheitsprozessor 104 den kryptografischen Prozessor 126 auf, der den Schlüsselgenerator 128 und die Verschlüsselungs/Entschlüsselungsmaschine 130 aufweist. Der Sicherheitsprozessor 104 speichert auch sicher beliebige geeignete Schlüssel, darunter der globale Schlüssel 118, der gemeinsam genutzte Schlüssel 120, der Wrapping-Schlüssel 122 und der Speicher-Root-Schlüssel (SRK) 132. Der Sicherheitsprozessor 104 umfasst auch Plattformauslegungsregister 134.
-
Der Schlüsselgenerator 128 kann einen Zufallszahlengenerator, der Zufallszahlen erstellt, und Logik aufweisen, welche die Zufallszahlen zum Konstruieren von Schlüsseln für kryptografische Funktionen verwendet (wobei in verschiedenen Ausführungsformen die Zufallszahlen selbst als Schlüssel verwendet werden können oder zum Generieren von Schlüsseln verarbeitet werden können). In manchen Ausführungsformen können die Zufallszahlen auch zum Vorsehen kryptografischer Nonces verwendet werden. Die Zufallszahlen und/oder Schlüssel, die durch den Schlüsselgenerator 128 generiert werden, können eine beliebige geeignete Länge aufweisen. In einer bestimmten Ausführungsform sind die Zufallszahlen 256 Bits lang.
-
Die Verschlüsselungs/Entschlüsselungsmaschine 130 kann Daten und einen kryptografischen Schlüssel als Eingabe empfangen und verschlüsselte Daten oder entschlüsselte Daten als Ausgabe generieren. Die Verschlüsselungs/Entschlüsselungsmaschine 130 kann beliebige geeignete kryptografische Algorithmen implementieren, wie einen RSA-Algorithmus oder einen anderen geeigneten Algorithmus.
-
Der globale Schlüssel 118, der gemeinsam genutzte Schlüssel 120 und der Wrapping-Schlüssel 122 werden nachstehend detaillierter beschrieben. Der Speicher-Root-Schlüssel 132 kann die Basis einer Schlüsselhierarchie bilden, die eine sichere Speicherung verwaltet. Diese Schlüsselhierarchie kann ermöglichen, dass Daten (umfassend Schlüssel) derart verschlüsselt werden, dass sie nur durch Zugreifen auf den Sicherheitsprozessor 104 entschlüsselt werden können, der den Speicher-Root-Schlüssel 132 zur Entschlüsselung verwendet (in einer Ausführungsform wird der Speicher-Root-Schlüssel 132 durch den Sicherheitsprozessor 104 generiert (oder der Sicherheitsprozessor wird mit dem Speicher-Root-Schlüssel versehen), wird an keine andere Vorrichtung kommuniziert und/oder ist nur durch Kenntnisdemonstration eines gemeinsamen Geheimnisses zugänglich). Beispielsweise kann ein Speicherschlüssel für eine Software-Anwendung (hier als Software-Schlüssel bezeichnet) durch den Sicherheitsprozessor 104 generiert und/oder verschlüsselt werden und dann außerhalb des Sicherheitsprozessors 104 (z.B. in der Systemspeichervorrichtung 108 und/oder der Speichervorrichtung 110) oder innerhalb des Sicherheitsprozessors 104 gespeichert werden. Wenn auf den Schlüssel zugegriffen werden soll, wird der verschlüsselte Schlüssel (oder ein Verweis auf den Schlüssel) an den Sicherheitsprozessor 104 weitergegeben und vom Sicherheitsprozessor 104 unter Verwendung des Speicher-Root-Schlüssels 132 entschlüsselt. In verschiedenen Ausführungsformen wird der Speicher-Root-Schlüssel 132 im nicht-flüchtigen Speicher des Sicherheitsprozessors 104 gespeichert.
-
Die Plattformauslegungsregister 134 können zum Speichern von Integritätsmetrik verwendet werden, welche die Integrität von Code messen, typischerweise bevor der Code ausgeführt wird. In verschiedenen Ausführungsformen werden die Plattformauslegungsregister zurückgesetzt, wenn das System Leistung verliert oder neu startet. In bestimmten Ausführungsformen können die Plattformauslegungsregister 134 Strategien speichern, die mit Schlüsseln assoziiert sind, welche durch den Sicherheitsprozessor 104 generiert und/oder gespeichert werden.
-
In einigen Ausführungsformen residieren alle oder einige der Elemente des Systems 100 auf derselben Leiterplatte (z.B. einer Hauptplatine) (oder sind daran gekoppelt). In verschiedenen Ausführungsformen kann ein beliebiges geeignetes Partitionieren zwischen den Elementen vorkommen. Beispielsweise können sich die Elemente, die in der CPU 102 dargestellt sind, auf einem einzelnen Chip (d.h. on-chip) oder einer Packung befinden, oder beliebige der Elemente der CPU 102 können off-chip oder außerhalb der Packung angeordnet sein. Gleicherweise können sich die Elemente, die im Sicherheitsprozessor 104 dargestellt sind, auf einem einzelnen Chip oder auf mehreren Chips befinden. In einer bestimmten Ausführungsform befindet sich die CPU 102 auf einer ersten Halbleiterpackung, die an eine Leiterplatte gekoppelt ist, und der Sicherheitsprozessor 104 befindet sich auf einer zweiten Halbleiterpackung, die an die Leiterplatte gekoppelt ist.
-
Die Komponenten des Systems 100 können auf beliebige geeignete Art und Weise miteinander gekoppelt sein. Beispielsweise kann ein Bus beliebige der Komponenten miteinander koppeln. Ein Bus kann beliebige bekannte Zwischenverbindungen umfassen, wie etwa einen Multi-Drop-Bus, eine Gitterzwischenverbindung, eine Ringzwischenverbindung, eine Punkt-zu-Punkt-Zwischenverbindung, eine serielle Zwischenverbindung, einen parallelen Bus, einen kohärenten (z.B. Cache-kohärenten) Bus, eine geschichtete Protokollarchitektur, einen Differentialbus und einen Gunning Transceiver Logic- (GTL-) Bus. In verschiedenen Ausführungsformen umfasst ein integriertes I/O-Subsystem Punkt-zu-Punkt-Multiplexlogik zwischen verschiedenen Komponenten der Plattform 100, wie den Kernen 112, der Speichersteuereinheit 116, der I/O-Steuereinheit 114, integrierten I/O-Vorrichtungen, Direktspeicherzugriffs- (DMA-) Logik (nicht gezeigt) usw. In verschiedenen Ausführungsformen können Komponenten des Computersystems 100 über ein oder mehr Netze miteinander gekoppelt sein, die eine beliebige Anzahl von eingreifenden Netzknoten umfassen, wie Router, Schalter oder andere Rechengeräte. Beispielsweise können ein Rechenhost (z.B. die CPU 102) und die Speichervorrichtung 110 kommunikationstechnisch über ein Netz gekoppelt sein.
-
In der dargestellten Ausführungsform ist der Sicherheitsprozessor 104 über einen Seitenbandbus 124 an die CPU 102 gekoppelt. Der Seitenbandbus 124 kann einen physischen Bus oder einen virtuellen Bus umfassen, der für eine Kommunikation zwischen der CPU 102 und dem Sicherheitsprozessor 104 dediziert ist. In einer bestimmten Ausführungsform ist der Seitenbandbus ein virtueller Bus, der unter Verwendung eines physischen Busses implementiert ist, welcher an die CPU und mehrere Komponenten der Plattform 100 gekoppelt ist. In einer bestimmten Ausführungsform wird die Kommunikation über den Bus derart gesteuert, dass bestimmte Zyklen des Busses nur durch die CPU zum Übermitteln von sicheren Daten an den Sicherheitsprozessor 104 verwendet werden können. In einer bestimmten Ausführungsform kann der Bus Daten von der CPU 102 an ein oder mehrere Register übermitteln, die nur für den Sicherheitsprozessor 104 zugänglich sind. Beispielsweise können diese Register ein Register, das zum Empfangen einer verschlüsselten Version des Wrapping-Schlüssels 122 dediziert ist (d.h. es können keine anderen Daten in das Register geschrieben werden), und ein anderes Register aufweisen, das zum Empfangen des verschlüsselten gemeinsam genutzten Schlüssels 121 dediziert ist. In verschiedenen Ausführungsformen kann der Seitenbandbus 124 den Sicherheitsprozessor 104 an mehrere CPUs 102 koppeln. In einigen Ausführungsformen können verschiedene, hier beschriebene Schlüssel (z.B. der gemeinsam genutzte Schlüssel 120 oder der Wrapping-Schlüssel 122) von mehreren CPUs 102 der Plattform 100 gemeinsam genutzt werden.
-
Auch wenn nicht dargestellt, kann die Plattform 100 eine Batterie und/oder einen Stromversorgungsauslass-Verbinder und ein assoziiertes System, um Energie zu empfangen, eine Anzeige zum Ausgeben von Daten, die von der CPU 102 geliefert werden, oder eine Netzschnittstelle verwenden, die es der CPU 102 ermöglicht, über ein Netz zu kommunizieren. In verschiedenen Ausführungsformen können die Batterie, der Stromversorgungsauslass-Verbinder, die Anzeige und/oder die Netzschnittstelle kommunikationstechnisch an die CPU 102 gekoppelt sein. Es können andere Energiequellen genutzt werden, wie etwa erneuerbare Energie (z.B. Solarenergie oder bewegungsbasierte Energie).
-
2 veranschaulicht ein Beispiel eines Ablaufs zum Kommunizieren eines gemeinsam genutzten Schlüssels 120 an einen Sicherheitsprozessor 104 gemäß bestimmten Ausführungsformen. In einer bestimmten Ausführungsform kann der gemeinsam genutzte Schlüssel 120 später verwendet werden, um den Wrapping-Schlüssel 122 sicher an den Sicherheitsprozessor 104 zu senden. Bei 202 wird die CPU 102 mit einem gemeinsam genutzten Schlüssel 120 versehen. In einer bestimmten Ausführungsform kann der gemeinsam genutzte Schlüssel 120 ein Schlüssel sein, der für eine bestimmte CPU-Familie einzigartig ist (d.h. jede CPU 102 einer bestimmten Familie wird mit demselben gemeinsam genutzten Schlüssel versehen). Die CPU 102 kann mit dem gemeinsam genutzten Schlüssel 120 in irgendeiner geeigneten Weise versehen werden. In einer bestimmten Ausführungsform ist der gemeinsam genutzte Schlüssel 120 ein Hardware-Schlüssel, der persistent in Hardware dr CPU 102 gespeichert wird. Als Beispiel kann zur Zeit der Herstellung der CPU 102 der gemeinsam genutzte Schlüssel 120 in die Logik der CPU 102 hartcodiert werden (z.B. kann der gemeinsam genutzte Schlüssel 120 in die Logik der CPU 102 ausgebildet werden, z.B. durch das Verbinden von Signalen, die den Wert des gemeinsam genutzten Schlüssels repräsentieren, mit Leistung oder Erde oder durch andere Ausbildungsmethodologie, oder es können Sicherungen der CPU 102 auf der Basis des Werts des gemeinsam genutzten Schlüssels durchbrennen). Als weiteres Beispiel kann der gemeinsam genutzte Schlüssel in persistente Speicherelemente der CPU 102 geschrieben werden.
-
Bei 204 wird der gemeinsam genutzte Schlüssel 120 unter Verwendung eines globalen Schlüssels 118 verschlüsselt, der mit dem Sicherheitsprozessor 104 assoziiert ist. In verschiedenen Ausführungsformen wird der globale Schlüssel 118 sicher an Drittpartei-Logik gesendet, welche die Verschlüsselung vornimmt, so dass ein Mensch niemals den globalen Schlüssel 118 sieht. Zur Erläuterung kann das Format (X)Y hier verwendet werden, um Daten X zu repräsentieren, die unter Verwendung des Schlüssels Y verschlüsselt werden. In einer Ausführungsform kann die CPU 102 mit dem Ergebnis der Verschlüsselung (d.h. (gemeinsam genutzer Schlüssel) globaler Schlüssel) (dargestellt als verschlüsselter gemeinsam genutzter Schlüssel 121) in einer Weise versehen werden, die ähnlich der oben in Bezug auf das Versehen der CPU 102 mit dem gemeinsam genutzten Schlüssel 120 beschriebenen ist.
-
Bei 206 wird der verschlüsselte gemeinsam genutzte Schlüssel 121 (d.h. (gemeinsam genutzter Schlüssel) globaler Schlüssel) an den Sicherheitsprozessor 104 gesendet. In einer bestimmten Ausführungsform wird der verschlüsselte gemeinsam genutzte Schlüssel über den Seitenbandbus 124 gesendet, obwohl er in anderen Ausführungsformen in einer beliebigen geeigneten Weise gesendet werden kann. Bei 208 verwendet der Sicherheitsprozessor 104 den globalen Schlüssel 118, um den gemeinsam genutzten Schlüssel 120 zu entschlüsseln. Der Sicherheitsprozessor 104 speichert dann den gemeinsam genutzten Schlüssel 120 innerhalb des Speichers des Sicherheitsprozessors 104., In einer bestimmten Ausführungsform kann der Sicherheitsprozessor 104 mit dem globalen Schlüssel 118 zu irgendeiner geeigneten Zeit versehen werden (d.h. vor der Kommunikation des verschlüsselten gemeinsam genutzten Schlüssels und/oder zur Zeit der Herstellung des Sicherheitsprozessors 104).
-
In einer anderen Ausführungsform kann der gemeinsam genutzte Schlüssel 120 vom Hersteller der CPU 102 an den Hersteller des Sicherheitsprozessors 104 zum Vorsehen in dem Sicherheitsprozessor 104 kommuniziert werden. Dies kann jedoch die Exposition des gemeinsam genutzten Schlüssels 120 geringfügig erhöhen.
-
3 veranschaulicht ein Beispiel eines Ablaufs zum Kommunizieren eines Wrapping-Schlüssels 122 an einen Sicherheitsprozessor 104 gemäß bestimmten Ausführungsformen. In einer besonderen Ausführungsform wird der Ablauf von 3 vorgenommen, nachdem der Sicherheitsprozessor den gemeinsam genutzten Schlüssel empfangen und entschlüsselt hat. Bei 302 generiert die CPU 102 einen Wrapping-Schlüssel 122, der einen beliebigen geeigneten kryptografischen Schlüssel umfasst. Der Wrapping-Schlüssel 122 kann auf irgendeine geeignete Weise generiert werden. Beispielsweise kann die CPU 102 einen Zufallszahlengenerator oder eine andere geeignete Logik der CPU 102 verwenden, um den Wrapping-Schlüssel 122 zu generieren.
-
Bei 304 wird der Wrapping-Schlüssel 122 von der CPU 102 unter Verwendung des gemeinsam genutzten Schlüssels 120 verschlüsselt, um (Wrapping-Schlüssel) gemeinsam genutzter Schlüssel zu generieren. Bei 306 werden eine oder mehrere Integritätsvektorprüfungen generiert, die mit dem verschlüsselten Wrapping-Schlüssel assoziiert sind. Ein beliebiger geeigneter Verschlüsselungsmodus kann verwendet werden, um den Wrapping-Schlüssel zu verschlüsseln. In verschiedenen Ausführungsformen können AES, AES-Galois/Counter Mode (GCM), AES-GCM-Synthetic Initialization Vector (SIV), Hash Message Authentication Code (HMAC) oder ein anderer geeigneter Verschlüsselungsmodus verwendet werden. Ähnlich können beliebige geeignete Verschlüsselungsmodi während beliebiger anderer Verschlüsselungsoperationen verwendet werden, die hier beschrieben werden (egal ob die Aktion von der CPU 102 oder dem Sicherheitsprozessor 104 vorgenommen wird). Die Integritätsvektorprüfungen können seine Serie von Bits mit einer beliebigen geeigneten Länge (z.B. 128 Bits, 256 Bits usw.) aufweisen, die in Verbindung mit der Verschlüsselung generiert werden, um die Integrität des verschlüsselten Wrapping-Schlüssels zu schützen. Die Integritätsvektorprüfungen können zu der Logik weitergeleitet werden, die den Wrapping-Schlüssel entschlüsselt, und können anzeigen, ob der verschlüsselte Wrapping-Schlüssel vor dem Empfang durch die Entschlüsselungslogik geändert wurde.
-
Bei 308 werden der verschlüsselte Wrapping-Schlüssel und Integritätsvektorprüfungen an den Sicherheitsprozessor 104 gesendet. In einer Ausführungsform werden der verschlüsselte Wrapping-Schlüssel und Integritätsvektorprüfungen über Seitenbandbusse 124 von der CPU 102 an den Sicherheitsprozessor 104 gesendet, obwohl sie in anderen Ausführungsformen unter Verwendung eines beliebigen geeigneten Mediums kommuniziert werden können.
-
Bei 310 verifiziert der Sicherheitsprozessor 104 die Integritätsvektorprüfungen und entschlüsselt und speichert dann den Wrapping-Schlüssel 122. Beispielsweise können der verschlüsselte Wrapping-Schlüssel und der gemeinsam genutzte Schlüssel der Verschlüsselungs/Entschlüsselungsmaschine 130 zugeführt werden und die Maschine 130 kann den gemeinsam genutzten Schlüssel verwenden, um den Wrapping-Schlüssel zu entschlüsseln. Der Wrapping-Schlüssel 122 wird dann sicher von dem Sicherheitsprozessor 104 gespeichert. In dem Fall, dass die Integritätsvektorprüfungen fehlschlagen, kann der verschlüsselte Wrapping-Schlüssel verworfen werden.
-
4 veranschaulicht ein Beispiel eines Ablaufs zum Generieren und Speichern eines Schlüssels für eine Software-Anwendung gemäß bestimmten Ausführungsformen. Der in diesem Ablauf generierte Schlüssel kann ein Schlüssel sein, auf den in Prozessorinstruktionen verwiesen wird, die mit der Kryptografie zusammenhängen (z.B. AES-NI-Instruktionen) und die von der Software-Anwendung aufgerufen werden können.
-
Bei 402 fordert eine Software-Anwendung die Generierung eines Schlüssels an (eines Schlüssels, der zur Verwendung durch eine Software-Anwendung generiert wird, wird hier als „Software-Schlüssel“ bezeichnet). Beispielsweise kann die Software-Anwendung anfordern, dass der Sicherheitsprozessor 104 den Schlüssel generiert. In einer bestimmten Ausführungsform kann die Software-Anwendung mit dem Sicherheitsprozessor 104 über einen Vorrichtungstreiber kommunizieren, der von einem Betriebssystem implementiert wird, das auf der Plattform 100 läuft. In verschiedenen Ausführungsformen kann die Anforderung, einen Schlüssel zu generieren, auch eine oder mehrere Strategien umfassen, die auf den Software-Schlüssel anzuwenden sind. In einer Ausführungsform können die Strategien mindestens eine Strategie umfassen, die verhindert, dass der erste kryptografische Schlüssel von dem Sicherheitsprozessor 104 in einem nicht-verschlüsselten Format gesendet wird. Andere Beispiele von Strategien umfassen eine Strategie, dass auf den Software-Schlüssel nur zugegriffen werden kann, wenn geeignete Authentifizierungsdaten (z.B. ein Passwort und/oder Pin, das/der von dem Benutzer der Software-Anwendung eingetippt werden muss) geliefert werden, eine Strategie, dass ein Zugriff auf den Software-Schlüssel auf ein oder mehrere bestimmte Zeitfenster beschränkt ist, oder eine Strategie, dass der Software-Schlüssel nur an die CPU 102 gesendet werden kann. In einer bestimmten Ausführungsform wird der Schlüssel über eine Createobject-Anforderung erzeugt (z.B. wenn der Sicherheitsprozessor 104 ein TPM umfasst).
-
Bei 404 generiert der Sicherheitsprozessor 104 den angeforderten Schlüssel, z.B. unter Verwendung des Schlüsselgenerators 128. In einer bestimmten Ausführungsform kann der Schlüssel unter Verwendung eines Zufallszahlengenerators des Schlüsselgenerators 128 generiert werden.
-
Bei 406 verschlüsselt der Sicherheitsprozessor 104 den Software-Schlüssel unter Verwendung des Speicher-Root-Schlüssels 132. Beispielsweise kann der Software-Schlüssel als Dateneingang verwendet werden, und der Speicher-Root-Schlüssel 132 kann als Schlüssel verwendet werden, der in die Verschlüsselungs/Entschlüsselungsmaschine 130 eingegeben wird, um einen verschlüsselten Software-Schlüssel auszugeben: (Software-Schlüssel) Wrapping-Schlüssel. Der verschlüsselte Software-Schlüssel wird an die Software-Anwendung 408 geliefert. Der verschlüsselte Software-Schlüssel kann für die Software-Anwendung in einer beliebigen geeigneten Weise zur Verfügung gestellt werden. Wenn in einer bestimmten Ausführungsform die Software den verschlüsselten Software-Schlüssel nicht sofort verwendet, kann der Software-Schlüssel in die Speichervorrichtung 110 geschrieben werden. Als Alternative kann der verschlüsselte Software-Schlüssel sicher von dem Sicherheitsprozessor 104 gespeichert werden, anstatt den verschlüsselten Software-Schlüssel zur Systemspeichervorrichtung 108 zu senden. In verschiedenen Ausführungsformen kann der Software-Schlüssel unverschlüsselt von dem Sicherheitsprozessor 104 gespeichert werden (der Sicherheitsprozessor 104 kann jedoch gültige Authentifizierungsdaten von einer Einheit erfordern, welche die Verwendung des Software-Schlüssels anfordert).
-
5 veranschaulicht Beispiele von Kommunikationen zwischen einer CPU 102, einem Sicherheitsprozessor 104 und einer Systemspeichervorrichtung 108 gemäß bestimmten Ausführungsformen. Die dargestellten verschiedenen Kommunikationen führen dazu, dass der Software-Schlüssel an die CPU 102 geliefert wird, ohne jemals außerhalb des Sicherheitsprozessors 104 klar zu sein.
-
Der Abschnitt von 5, der die Kommunikation des Wrapping-Schlüssels zum Sicherheitsprozessor 104 darstellt, kann allgemein dem Ablauf von 3 entsprechen. In den Kommunikationen 502 und 504 werden der Wrapping-Schlüssel, der von der CPU 102 generiert wird, und der gemeinsam genutzte Schlüssel an eine Verschlüsselungslogik 506 geliefert. Die Verschlüsselungslogik 506 verschlüsselt den Wrapping-Schlüssel, um (Wrapping-Schlüssel) gemeinsam genutzter Schlüssel zu generieren. Bei der Kommunikation 508 wird der verschlüsselte Wrapping-Schlüssel an den Sicherheitsprozessor 104 gesendet (z.B. über einen Seitenbandbus 124 oder ein anderes Kommunikationsmedium). Der verschlüsselte Wrapping-Schlüssel wird in einem sicheren Register 136 des Sicherheitsprozessors 104 gespeichert. Zu einer beliebigen Zeit (z.B. wenn der Wrapping-Schlüssel für eine Operation benötigt wird) sendet die Kommunikation 510 den verschlüsselten Wrapping-Schlüssel an die Entschlüsselungslogik 514, und die Kommunikation 512 sendet den gemeinsam genutzten Schlüssel an die Entschlüsselungslogik 514. In einer bestimmten Ausführungsform umfasst die Entschlüsselungslogik 514 mindestens einen Abschnitt der Verschlüsselungs/Entschlüsselungsmaschine 130. Der verschlüsselte Wrapping-Schlüssel wird als Daten geliefert, und der gemeinsam genutzte Schlüssel wird als Schlüssel für die Entschlüsselungsoperation geliefert, und das Ergebnis ist der Wrapping-Schlüssel.
-
Wie oben in Verbindung mit 4 beschrieben, kann eine Software-Anwendung die Generierung eines Software-Schlüssels von dem Sicherheitsprozessor 104 anfordern. Nachdem der Software-Schlüssel generiert und verschlüsselt wird, kann er in der Speichervorrichtung 110, der Systemspeichervorrichtung 108 oder dem Sicherheitsprozessor 104 gespeichert werden. Wenn die Software-Anwendung bereit ist, die Vornahme einer kryptografischen Instruktion (z.B. einer AES-NI- oder ähnlichen Instruktion) von der CPU 102 anzufordern, kann die Software-Anwendung bewirken, dass der verschlüsselte Software-Schlüssel (d.h. (Software-Schlüssel) Speicher-Root-Schlüssel) in die Systemspeichervorrichtung 108 (z.B. von der Speichervorrichtung 110) geladen wird. In der Kommunikation 518 wird der verschlüsselte Software-Schlüssel an den Sicherheitsprozessor 104 weitergeleitet und der Entschlüsselungslogik 514 zur Verfügung gestellt. Bei der Kommunikation 520 wird auch der Speicher-Root-Schlüssel der Entschlüsselungslogik 514 zur Verfügung gestellt. Der verschlüsselte Software-Schlüssel wird als Daten geliefert, und der Speicher-Root-Schlüssel wird als Schlüssel für die Entschlüsselungsoperation geliefert, und das Ergebnis ist der Software-Schlüssel. In verschiedenen Ausführungsformen kann, vor der Verschlüsselung des Software-Schlüssels, der Sicherheitsprozessor 104 von der Software-Anwendung anfordern, ein oder mehrere Authentifizierungs-Tokens zu liefern, um zu verifizieren, dass die Software-Anwendung die Berechtigung hat, auf den Software-Schlüssel zuzugreifen.
-
Bei der Kommunikation 524 wird der entschlüsselte Software-Schlüssel als Eingabedaten an die Verschlüsselungslogik 528 geliefert. In einer bestimmten Ausführungsform umfasst die Verschlüsselungslogik 528 mindestens einen Abschnitt der Verschlüsselungs/Entschlüsselungsmaschine 130. Bei der Kommunikation 526 wird der Wrapping-Schlüssel als Eingabeschlüssel an die Verschlüsselungslogik 528 geliefert. Das Ergebnis der Verschlüsselungsoperation, d.h. (Software-Schlüssel) Wrapping-Schlüssel, wird dann an die Systemspeichervorrichtung 108 (oder einen anderen Speicher, auf den die CPU 102 zugreifen kann) bei der Kommunikation 530 gesendet. Bei der Kommunikation 532 wird auf den verschlüsselten Software-Schlüssel von der CPU 102 zugegriffen. Da die CPU 102 den Wrapping-Schlüssel speichert, kann die CPU 102 den verschlüsselten Software-Schlüssel entschlüssen und den Software-Schlüssel verwenden, um eine kryptografische Instruktion auszuführen, die von der Software-Anwendung angefordert wird. Auf diese Weise wird der Software-Schlüssel der CPU 102 zur Verfügung gestellt, ohne jemals den Software-Schlüssel im Klartextformat außerhalb des Sicherheitsprozessors 104 zu exponieren.
-
6 veranschaulicht ein Beispiel eines Ablaufs zum sicheren Anfordern einer Entschlüsselung verschlüsselter Daten gemäß bestimmten Ausführungsformen. Bei 604 wird ein verschlüsselter Software-Schlüssel gelesen (z.B. aus der Speichervorrichtung 110 in die Systemspeichervorrichtung 108). Bei 606 wird ein Loadobject-Befehl von der Software-Anwendung 602 an den Sicherheitsprozessor 104 gesendet. Der Loadobject-Befehl kann den verschlüsselten Software-Schlüssel aufweisen (oder auf andere Weise darauf verweisen), d.h. (Software-Schlüssel) Speicher-Root-Schlüssel.
-
Bei 608 nimmt der Sicherheitsprozessor 104 eine Unseal-Operation an dem verschlüsselten Software-Schlüssel vor. Diese kann das Entschlüsseln des verschlüsselten Software-Schlüssels umfassen. Bei 610 sendet die Software-Anwendung 602 einen Send-Software-Schlüssel-Befehl 610 an den Sicherheitsprozessor 104. Dieser Befehl kann einen Verweis auf den Software-Schlüssel aufweisen, auf den in dem Loadobject-Befehl 606 verwiesen wurde. Bei 612 prüft der Sicherheitsprozessor 104 Strategien, die mit dem Software-Schlüssel assoziiert sind, um zu bestimmen, ob der Software-Schlüssel geliefert werden kann. Bei 614, bei einer erfolgreichen Verifikation der Strategien, wird der Software-Schlüssel unter Verwendung des Wrapping-Schlüssels verschlüsselt.
-
Bei 616 wird eine Antwort von dem Sicherheitsprozessor 104 an die Software-Anwendung 602 gesendet. Die Antwort kann den verschlüsselten Software-Schlüssel umfassen (oder auf einen Speicherort davon verweisen), d.h. (Software-Schlüssel) Wrapping-Schlüssel. Bei 618 bewirkt die Software-Anwendung 602, dass der verschlüsselte Software-Schlüssel in dem Speicher (z.B. der Systemspeichervorrichtung 108) gespeichert wird.
-
Bei 620 fordert die Software-Anwendung die Ausführung einer Entschlüsselungsinstruktion von der CPU 102 an. Die Entschlüsselungsinstruktion kann Daten umfassen (oder auf andere Weise darauf verweisen), die zu entschlüsseln sind, und kann den verschlüsselten Software-Schlüssel umfassen (oder auf andere Weise darauf verweisen), d.h. (Software-Schlüssel) Wrapping-Schlüssel. Bei 622 entpackt die CPU 102 den Software-Schlüssel. Das heißt, die CPU 102 entschlüsselt den Software-Schlüssel unter Verwendung des Wrapping-Schlüssels als Eingabeschlüssel und des verschlüsselten Software-Schlüssels als Dateneingabe in die Entschlüsselungslogik der CPU 102. Bei 624 entschlüsselt die CPU 102 die Daten, auf die in der Entschlüsselungsinstruktion verwiesen wird. Dies kann involvieren, die Daten, auf die in der Entschlüsselungsinstruktion verwiesen wird, als Eingabedaten und den Software-Schlüssel als Eingabeschlüssel an die Entschlüsselungslogik der CPU 102 zu liefern. Das Ergebnis dieser Operation sind die entschlüsselten Daten. Bei 626 werden die entschlüsselten Daten in einem Klartextformat an den Speicher (z.B. die Systemspeichervorrichtung 108) geliefert.
-
In einer bestimmten Ausführungsform wird der Wrapping-Schlüssel 122 in einem flüchtigen Speicher der CPU 102 gespeichert, während der Sicherheitsprozessor 104 den Wrapping-Schlüssel 122 in einem persistenten Speicher speichert. Wenn die CPU 102 heruntergefahren wird (z.B. die CPU 102 in einen Ruhe- oder Schlafzustand eintritt), kann der flüchtige Speicher der CPU 102, der den Wrapping-Schlüssel 122 speichert, seinen Zustand verlieren. In einer solchen Situation kann der Sicherheitsprozessor 104 den Wrapping-Schlüssel 122 an die CPU 102 kommunizieren (z.B. über den Seitenbandbus 124), um zu verhindern, dass die CPU 102 einen neuen Wrapping-Schlüssel generiert (und potentiell Daten korrumpiert, wenn die Software-Anwendung nicht ausgelegt ist anzufordern, dass der Software-Schlüssel in den neuen Wrapping-Schlüssel verpackt wird). Somit kann die CPU 102 bei Boot-Abläufen (z.B. wenn die CPU 102 hochgefahren wird, nachdem die Plattform heruntergefahren wurde) den Wrapping-Schlüssel 122 generieren, während die CPU 102 bei einer Wiederherstellung aus einem Niederenergiezustand (wie Standby oder Ruhezustand) den Wrapping-Schlüssel erneut verwenden kann, der von dem Sicherheitsprozessor 104 empfangen wird.
-
Die in 2 bis 6 beschriebenen Abläufe sind nur für Operationen repräsentativ, die in bestimmten Ausführungsformen auftreten können. In anderen Ausführungsformen können zusätzliche Operationen vorgenommen werden. Verschiedene Ausführungsformen der vorliegenden Offenbarung sehen beliebige geeignete Signalisierungsmechanismen vor, um die hier beschriebenen Funktionen zu erzielen. Einige der in 2 bis 6 veranschaulichten Operationen können wiederholt, kombiniert, modifiziert oder weggelassen werden, wo geeignet. Zusätzlich können Operationen in einer beliebigen geeigneten Reihenfolge vorgenommen werden, ohne vom Umfang der bestimmten Ausführungsformen abzuweichen.
-
Die nachstehenden Figuren beschreiben detailliert Beispiele von Architekturen und Systemen, um Ausführungsformen des Obigen zu implementieren. In verschiedenen Ausführungsformen können die CPU 102 und/oder der Sicherheitsprozessor 104 beliebige geeignete Charakteristiken der nachstehend beschriebenen Prozessoren aufweisen. In einigen Ausführungsformen werden eine oder mehrere oben beschriebene Hardware-Komponenten und/oder Instruktionen emuliert, wie nachstehend detailliert beschrieben, oder als Software-Module implementiert.
-
Prozessorkerne können auf verschiedene Weise für verschiedene Zwecke und in verschiedene Prozessoren implementiert werden. Beispielsweise können Implementierungen solcher Kerne umfassen: 1) einen geordneten Universalkern, der für Universalberechnungen bestimmt ist; 2) einen ungeordenten Hochleistungs-Universalkern, der für Universalberechnungen bestimmt ist; 3) einen Spezialkern, der primär für Grafik und/oder wissenschaftliche (Durchsatz-) Berechnungen bestimmt ist. Implementierungen verschiedener Prozessoren können umfassen: 1) eine CPU, welche einen oder mehrere geordnete Universalkerne, die für Universalberechnungen bestimmt sind, und/oder einen oder mehrere ungeordnete Uniersalkerne, die für Universalberechnungen bestimmt sind, aufweist; und 2) einen Coprozessor, der einen oder mehrere Spezialkerne aufweist, die primär für Grafik und/oder wissenschaftliche (Durchsatz-) Berechnungen bestimmt sind. Solche unterschiedlichen Prozessoren führen zu verschiedenen Computersystemarchitekturen, die umfassen können: 1) den Coprozessor auf einem von der CPU getrennten Chip; 2) den Coprozessor auf einem getrennten Chip in derselben Packung wie die CPU; 3) den Coprozessor auf demselben Chip wie die CPU (in welchem Fall ein solcher Coprozessor manchmal als Speziallogik bezeichnet wird, wie integrierte Grafik und/oder wissenschaftliche (Durchsatz-) Logik, oder als Spezialkerne); und 4) ein System-on-Chip, das auf demselben Chip die beschriebene CPU (manchmal als Anwendungskern(e) oder Anwendungsprozessor(en) bezeichnet), den oben beschriebenen Coprozessor und zusätzliche Funktionalität aufweisen kann. Als Nächstes werden Beispiele von Kernarchitekturen beschrieben, gefolgt von Beschreibungen von Beispielen von Prozessoren und Computerarchitekturen.
-
7A ist ein Blockbild, das sowohl ein Beispiel einer geordneten Pipeline als auch ein Beispiel einer Registerumbenennungs-, ungeordneten Ausgabe/Ausführungs-Pipeline gemäß Ausführungsformen der Offenbarung veranschaulicht. 7B ist ein Blockbild, das sowohl ein Beispiel einer Ausführungsform eines geordneten Architekturkerns als auch ein Beispiel eines Registerumbenennungs-, ungeordneten Ausgabe/Ausführungs-Architekturkerns veranschaulicht, der in einen Prozessor gemäß Ausführungsformen der Erfindung einzuschließen ist. Die durchgehend umrahmten Kästchen in 7A bis B veranschaulichen die geordnete Pipeline und den geordneten Kern, während das optionale Hinzufügen der Kästchen mit gestrichelten Linien die/den Registerumbenennungs-, ungeordnete/n Ausgabe/Ausführungs-Pipeline und -Kern veranschaulicht. Angesichts dessen, dass der geordnete Aspekt ein Subsatz des ungeordneten Aspekts ist, wird der ungeordnete Aspekt beschrieben.
-
In 7A umfasst eine Prozessor-Pipeline 700 eine Abrufstufe 702, eine Längendecodierstufe 704, eine Decodierstufe 706, eine Zuordnungsstufe 708, eine Umbenennungsstufe 710, eine Planungsstufe (auch als Sende- oder Ausgabestufe bekannt) 712, eine Registerlese/Speicherlesestufe 714, eine Ausführungsstufe 716, eine Rückschreib/Speicherschreibstufe 718, eine Ausnahmebehandlungsstufe 722 und eine Festlegungsstufe 724.
-
7B zeigt einen Prozessorkern 790, der eine Frontend-Einheit 730 aufweist, die mit einer Ausführungsmaschineneinheit 750 gekoppelt ist, und beide sind mit einer Speichereinheit 770 gekoppelt. Der Kern 790 kann ein Rechnerkern mit reduzierten Instruktionssatz (RISC), ein Rechnerkern mit komplexem Instruktionssatz (CISC), ein Kern mit sehr langem Instruktionswort (VLIW) oder ein hybrider oder alternativer Kerntyp sein. Als noch weitere Option kann der Kern 790 ein Spezialkern sein, wie beispielsweise ein Netz- oder Kommunikationskern, eine Kompressionsmaschine, ein Coprozessorkern, ein Universalrechner-Grafikverarbeitungseinheit- (GPGPU-) Kern, ein Grafikkern oder dgl.
-
Die Frontend-Einheit 730 umfasst eine Verzweigungsvorhersageeinheit 732, die mit einer Instruktions-Cache-Einheit 734 gekoppelt ist, welche mit einem Instruktionsübersetzungs-Lookaside-Puffer (TLB) 736 gekoppelt ist, der mit einer Instruktionsabrufeinheit 738 gekoppelt ist, die mit einer Decodiereinheit 740 gekoppelt ist. Die Decodiereinheit 740 (oder der Decoder) kann Instruktionen decodieren und als Ausgang eine oder mehrere Mikrooperationen, Mikrocode-Eintrittspunkte, Mikroinstruktionen, andere Instruktionen oder andere Steuersignale generieren, die aus den ursprünglichen Instruktionen decodiert werden, oder diese auf andere Weise reflektieren, oder von diesen abgeleitet sind. Die Decodiereinheit 740 kann unter Verwendung verschiedener unterschiedlicher Mechanismen implementiert werden. Beispiele geeigneter Mechanismen umfassen, sind jedoch nicht beschränkt auf Nachschlagtabellen, Hardware-Implementierungen, programmierbare Logik-Arrays (PLAs), Mikrocode-Nurlesespeicher (ROMs) usw. In einer Ausführungsform enthält der Kern 790 einen Mikrocode-ROM oder ein anderes Medium, das einen Mikrocode für bestimmte Makroinstruktionen speichert (z.B. in der Decodiereinheit 740 oder ansonsten innerhalb der Frontend-Einheit 730). Die Decodiereinheit 740 ist mit einer Umbenennungs/Zuordnereinheit 752 in der Ausführungsmaschineneinheit 750 gekoppelt.
-
Die Ausführungsmaschineneinheit 750 umfasst die Umbenennungs/Zuordnereinheit 752, die mit einer Stillegungseinheit 754 und einem Satz einer oder mehrerer Scheduler-Einheiten 756 gekoppelt ist. Die Scheduler-Einheit(en) 756 repräsentiert (repräsentieren) eine beliebige Anzahl verschiedener Scheduler, umfassend Reservierungsstationen, ein zentrales Instruktionsfenster usw. Die Scheduler-Einheit(en) 756 ist (sind) mit der (den) physischen Registerdateieinheit(en) 758 gekoppelt. Jede der physischen Registerdateieinheit(en) 758 repräsentiert eine oder mehrere physische Registerdateien, von denen verschiedene einen oder mehrere unterschiedliche Datentypen speichern, wie Skalarganzzahlen, skalare Gleitkommawerte, gepackte Ganzzahl, gepacktes Gleitkomma, Vektorganzzahl, Vektorgleitkomma, Status (z.B. ein Instruktionszeiger, der die Adresse der nächsten auszuführenden Instruktion ist) usw. In einer Ausführungsform umfasst die physische Registerdateieinheit(en) 758 eine Vektorregistereinheit, eine Schreibmasken-Registereinheit und eine skalare Registereinheit. Diese Registereinheiten können Architektur-Vektorregister, Vektormaskenregister und Universalregister bereitstellen. Die physikalische Registerdateieinheit(en) 758 wird von der Stilllegungseinheit 754 überlappt, um verschiedene Wege zu veranschaulichen, auf denen eine Registerumbenennung und ungeordnete Ausführung implementiert werden können (z.B. unter Verwendung eines oder mehrerer Aufzeichnungspuffer und einer oder mehrerer Stilllegungsregisterdateien; unter Verwendung einer oder mehrerer Zukunftsdateien, eines oder mehrerer Verlaufspuffer und einer oder mehrerer Stilllegungsregisterdateien; unter Verwendung einer oder mehrerer Registermaps und eines Pools von Registern usw.). Die Stilllegungseinheit 754 und die physische(n) Registerdateieinheit(en) 758 sind mit dem (den) Ausführungs-Clustern(n) 760 gekoppelt. Der (die) Ausführungscluster 760 umfasst einen Satz einer oder mehrerer Ausführungseinheiten 762 und einen Satz einer oder mehrerer Speicherzugriffseinheiten 764. Die Ausführungseinheiten 762 können verschiedene Operationen (z.B. Verschiebungen, Addition, Subtraktion, Multiplikation) und an verschiedenen Datentypen (z.B. skalares Gleitkomma, gepackte Ganzzahl, gepacktes Gleitkomma, Vektorganzzahl, Vektorgleitkomma) vornehmen. Während einige Ausführungsformen eine Anzahl von Ausführungseinheiten aufweisen können, die für spezifische Funktionen oder Sätze von Funktionen dediziert sind, können andere Ausführungsformen nur eine Ausführungseinheit oder mehrere Ausführungseinheiten aufweisen, die alle alle Funktionen vornehmen. Die Scheduler-Einheit(en) 756, physische(n) Registerdateieinheit(en) 758 und Ausführungscluster 760 sind als möglicherweise mehrfach gezeigt, da bestimmte Ausführungsformen getrennte Pipelines für bestimmte Typen von Daten/Operationen erzeugen (z.B. skalare Ganzzahl-Pipeline, skalare Gleitkomma/gepackte Ganzzahl/gepackte Gleitkomma/Vektorganzzahl/Vektorgleitkomma-Pipeline, und/oder eine Speicherzugriffs-Pipeline, die jeweils ihre eigene Scheduler-Einheit haben, physische Registerdateieinheit(en), und/oder Ausführungs-Cluster - und im Fall einer getrennten Speicherzugriffs-Pipeline werden bestimmte Ausführungsformen implementiert, in denen nur der Ausführungscluster dieser Pipeline die Speicherzugriffseinheit(en) 764 aufweist). Es ist auch klar, dass, wo getrennte Pipelines verwendet werden, eine oder mehrere dieser Pipelines ungeordnete Ausgabe/Ausführung und der Rest geordnet sein können.
-
Der Satz von Speicherzugriffseinheiten 764 ist mit der Speichereinheit 770 gekoppelt, welche eine Daten-TLB-Einheit 772 aufweist, die mit einer Daten-Cache-Einheit 774 gekoppelt ist, welche mit einer Level 2- (L2-) Cache-Einheit 776 gekoppelt ist. In einem Beispiel einer Ausführungsform können die Speicherzugriffseinheiten 764 eine Ladeeinheit, eine Speicheradresseneinheit und eine Speicherdateneinheit aufweisen, von denen jede mit der Daten-TLB-Einheit 772 in der Speichereinheit 770 gekoppelt ist. Die Instruktions-Cache-Einheit 734 ist ferner mit einer Level 2- (L2-) Cache-Einheit 776 in der Speichereinheit 770 gekoppelt. Die L2-Cache-Einheit 776 ist mit einer oder mehreren Cache-Ebenen und gegebenenfalls mit einem Hauptspeicher gekoppelt.
-
Als Beispiel kann das Beispiel der Registerumbenennungs-, ungeordneten Ausgabe/Ausführungs-Kernarchitektur die Pipeline 700 wie folgt implementieren: 1) die Instruktionsabrufeinheit 738 nimmt die Abruf- und Längendecodierungsstufe 702 und 704 vor; 2) die Decodiereinheit 740 nimmt die Decodierungsstufe 706 vor; 3) die Umbenennungs/Zuordnereinheit 752 nimmt die Zuordnungsstufe 708 und Umbenennungsstufe 710 vor; 4) die Scheduler-Einheit(en) 756 nimmt die Scheduling-Stufe 712 vor; 5) die physische Registerdateieinheit(en) 758 und die Speichereinheit 770 nehmen die Registerlese/Speicherlesestufe 714 vor; der Ausführungs-Cluster 760 nimmt die Ausführungsstufe 716 vor; 6) die Speichereinheit 770 und die physische(n) Registerdateieinheit(en) 758 nehmen die Rückschreib/Speicherschreibstufe 718 vor; 7) verschiedene Einheiten können in die Ausnahmebehandlungsstufe 722 involviert sein; und 8) die Stilllegungseinheit 754 und die physische(n) Registerdateieinheit(en) 758 nehmen die Festlegungsstufe 724 vor.
-
Der Kern 790 kann einen oder mehrere Instruktionssätze unterstützen (z.B. den x86-Instruktionssatz (mit einigen Erweiterungen, die mit neueren Versionen hinzugefügt wurden)); den MIPS-Instruktionssatz, entwickelt von MIPS Technologies, Sunnyvale, CA; den ARM-Instruktionssatz (mit optionalen zusätzlichen Erweiterungen wie NEON) von ARM Holdings, Sunnyvale, CA), einschließlich der hier beschriebenen Instruktion(en). In einer Ausführungsform umfasst der Kern 790 Logik, um eine gepackte Dateninstruktionssatz-Erweiterung zu unterstützen (z.B. AVX1, AVX2), wodurch ermöglicht wird, dass die von vielen Multimedia-Anwendungen verwendeten Operationen unter Verwendung gepackter Daten vorgenommen werden.
-
Es ist klar, dass der Kern ein Multithreading (Ausführung von zwei oder mehreren parallelen Sätzen oder Operationen oder Threads) unterstützen kann und dies auf verschiedensten Wegen tun kann, einschließlich zeitgeteiltes Multithreading, gleichzeitiges Multithreading (wo ein einzelner physikalischer Kern einen logischen Kern für jeden der Threads liefert, an denen der physikalische Kern ein gleichzeitiges Multithreading vornimmt), oder eine Kombination davon (z.B. zeitgeteilter Abruf und Decodieren und gleichzeitiges Multithreading danach, wie bei der Intel® Hyperthreading-Technologie).
-
Obwohl die Registerumbenennung im Kontext der ungeordneten Ausführung beschrieben wird, ist es klar, dass die Registerumbenennung in einer geordneten Architektur verwendet werden kann. Obwohl die veranschaulichte Ausführungsform des Prozessors auch eine getrennte Instruktions- und Daten-Cache-Einheit 734/774 und eine gemeinsam genutzte L2-Cache-Einheit 776 aufweist, können alternative Ausführungsformen einen einzelnen internen Cache sowohl für Instruktionen als auch Daten haben, wie beispielsweise ein interner Level 1-(L1-) Cache, oder mehrfache Ebenen eines internen Caches. In einigen Ausführungsformen kann das System eine Kombination eines internen Caches und eines externen Caches aufweisen, der extern vom Kern und/oder vom Prozessor ist. Alternativ dazu können alle Caches extern vom Kern und/oder vom Prozessor sein.
-
8A bis B veranschaulichen ein Blockbild eines spezifischeren Beispiels einer geordneten Kernarchitektur, wobei der Kern einer von einigen Logikblöcken (die potentiell andere Kerne desselben Typs und/oder andere Typen umfassen) in einem Chip ist. Die Logikblöcke kommunizieren durch ein Zwischenverbindungsnetz mit hoher Bandbreite (z.B. ein Ringnetz) mit bestimmter Festfunktionslogik, Speicher-I/O-Schnittstellen und anderer notwendiger I/O-Logik in Abhängigkeit von der Anwendung.
-
8A ist ein Blockbild eines Einprozessorkerns zusammen mit seiner Verbindung mit dem chipinternen Zwischenverbindungsnetz 802 und mit seinem lokalen Subsatz des Level 2- (L2-) Caches 804, gemäß verschiedenen Ausführungsformen. In einer Ausführungsform unterstützt ein Instruktionsdecoder 800 den x86-Instruktionssatz mit einer gepackten Dateninstruktionssatz-Erweiterung. Ein L1-Cachse 806 ermöglicht Zugriffe mit langer Latenz auf den Cache-Speicher in skalare und Vektoreinheiten. Während in einer Ausführungsform (zur Vereinfachung der Ausbildung) eine skalare Einheit 808 und eine Vektoreinheit 810 getrennte Registersätze (skalare Register 812 bzw. Vektorregister 814) verwenden, und zwischen diesen transferierte Daten in den Speicher geschrieben werden und dann aus einem Level 1-(L1-) Cache 806 zurückeingelesen werden, können alternative Ausführungsformen einen anderen Ansatz verwenden (z.B. einen einzelnen Registersatz verwenden oder einen Kommunikationsweg aufweisen, der es ermöglicht, dass Daten zwischen den beiden Registerdateien transferiert werden, ohne geschrieben und zurückgelesen zu werden).
-
Der lokale Subsatz des L2-Caches 804 ist ein Teil des globalen L2-Caches, der in getrennte lokale Subsätze geteilt wird (in einigen Ausführungsformen einer pro Prozessorkern). Jeder Prozessorkern hat einen Direktzugriffsweg zu seinem eigenen lokalen Subsatz des L2-Caches 804. Von einem Prozessorkern gelesene Daten werden in seinem L2-Cache-Subsatz 804 gespeichert und es kann rasch darauf zugegriffen werden, parallel mit anderen Prozessorkernen, die auf ihre eigenen lokalen L2-Cache-Subsätze zugreifen. Von einem Prozessorkern geschriebene Daten werden in ihrem eigenen L2-Cache-Subsatz 804 gespeichert und aus anderen Subsätzen geleert, wenn notwendig. Das Ringnetz stellt eine Kohärenz für gemeinsam genutzte Daten sicher. Das Ringnetz ist bidirektional, um es Agenten zu ermöglichen, wie Prozessorkernen, L2-Caches und anderen Logikblöcken, miteinander innerhalb des Chips zu kommunizieren. In einer bestimmten Ausführungsform ist jeder Ringdatenweg 1012 Bits breit pro Richtung.
-
8B ist eine erweiterte Ansicht eines Teils des Prozessorkerns in 8A gemäß Ausführungsformen. 8B umfasst einen L1-Daten-Cache 806A (Teil des L1-Caches 806) sowie genauere Details in Bezug auf die Vektoreinheit 810 und die Vektorregister 814. Spezifisch ist die Vektoreinheit 810 eine 16-breite Vektorverarbeitungseinheit (VPU) (siehe die 16-breite ALU 828), die eine oder mehrere von Ganzzahl-, einfachgenauen Gleitkomma- und doppeltgenauen Gleitkomma-Instruktionen ausführt. Die VPU unterstützt ein Swizzling der Registereingänge mit der Swizzle-Einheit 820, eine numerische Umwandlung mit numerischen Umwandlungseinheiten 822A-B und eine Replikation mit der Replikationseinheit 824 am Speichereingang. Schreibmaskenregister 826 ermöglichen die Vorhersage von erhaltenen Vektorschreibvorgängen.
-
9 ist ein Blockbild eines Prozessors 900, der mehr als einen Kern aufweisen kann, eine integrierte Speichersteuereinheit aufweisen kann, und integrierte Grafik aufweisen kann, gemäß verschiedenen Ausführungsformen. Die Kästchen mit durchgehenden Linien in 9 veranschaulichen einen Prozessor 900 mit einem einzelnen Kern 902A, einen Systemagenten 910 und einen Satz einer oder mehrerer Bussteuereinheiten 916, während das optionale Hinzufügen der Kästchen mit gestrichelten Linien einen alternativen Prozessor 900 mit mehreren Kernen 902A-N, einen Satz einer oder mehrerer integrierter Speichersteuereinheiten 914 in der Systemagenteneinheit 910 und Speziallogik 908 veranschaulicht.
-
Somit können verschiedene Implementierungen des Prozessors 900 umfassen: 1) eine CPU mit Speziallogik 908, die integrierte Grafik und/oder wissenschaftliche (Durchsatz-) Logik (die einen oder mehrere Kerne umfassen kann) ist, und die Kerne 902A-N, die ein oder mehrere Universalkerne sind (z.B. geordnete Universalkerne, ungeordnete Universalkerne oder eine Kombination von beiden); 2) einen Coprozessor mit den Kernen 902A-N, welche eine große Anzahl von Spezialkernen sind, die primär für Grafik und/oder wissenschaftlich (Durchsatz) bestimmt sind; und 3) einen Coprozessor mit den Kernen 902A-N, die eine große Anzahl von geordneten Universalkernen sind. Somit kann der Prozessor 900 ein Universalprozessor, Coprozessor oder Spezialprozessor sein, wie beispielsweise ein Netz- oder Kommunikationsprozessor, eine Kompressions- und/oder Dekompressionsmaschine, ein Grafikprozessor, eine GPGPU (Universal-Grafikverarbeitungseinheit), ein Mehrfachintegrationskern- (MIC-) Coprozessor mit hohem Durchsatz (umfassend 30 oder mehr Kerne), ein eingebetteter Prozessor oder eine andere Fest- oder auslegbare Logik sein, die logische Operationen vornimmt. Der Prozessor kann auf einem oder mehreren Chips implementiert sein. Der Prozessor 900 kann ein Teil eines oder mehrerer Substrate sein und/oder darauf unter Verwendung beliebiger einer Reihe von Verfahrenstechnologien implementiert sein, wie beispielsweise BiCMOS, CMOS oder NMOS.
-
In verschiedenen Ausführungsformen kann ein Prozessor eine beliebige Anzahl von Verarbeitungselementen aufweisen, die symmetrisch oder asymmetrisch sein können. In einer Ausführungsform bezieht sich ein Verarbeitungselement auf Hardware oder Logik, um einen Software-Thread zu unterstützen. Beispiele von Hardware-Verarbeitungselementen umfassen: eine Thread-Einheit, einen Thread-Slot, einen Thread, eine Verarbeitungseinheit, einen Kontext, eine Kontexteinheit, einen Logikprozessor, einen Hardware-Thread, einen Kern und/oder irgendein anderes Element, das einen Status für einen Prozessor halten kann, wie einen Ausführungsstatus oder einen Architekturstatus. Mit anderen Worten, ein Verarbeitungselement, in einer Ausführungsform, bezieht sich auf jegliche Hardware, die imstande ist, unabhängig mit Code assoziiert zu werden, wie einem Software-Thread, einem Betriebssystem, einer Anwendung oder anderem Code. Ein physischer Prozessor (oder Prozessorsockel) bezieht sich typischerweise auf eine integrierte Schaltung, die potentiell eine beliebige Anzahl anderer Verarbeitungselemente aufweist, wie Kerne oder Hardware-Threads.
-
Ein Kern kann sich auf Logik beziehen, die sich auf einer integrierten Schaltung befindet und einen unabhängigen Architekturstatus aufrechterhalten kann, wobei jeder unabhängig aufrechterhaltene Architekturstatus mit mindestens einigen dedizierten Ausführungsressourcen assoziiert ist. Ein Hardware-Thread kann sich auf jegliche Logik beziehen, die sich auf einer integrierten Schaltung befindet und einen unabhängigen Architekturstatus aufrechterhalten kann, wobei jeder unabhängig aufrechterhaltene Architekturstatus gemeinsam auf Ausführungsressourcen zugreift. Wie ersichtlich ist, überdeckt sich, wenn bestimmte Ressourcen gemeinsam genutzt werden und andere für einen Architekturstatus dediziert sind, die Linie zwischen der Nomenklatur eines Hardware-Threads und eines Kerns. Häufig werden jedoch ein Kern und ein Hardware-Thread von einem Betriebssystem als individuelle Logikprozessoren angesehen, wobei das Betriebssystem dazu imstande ist, Betriebe auf jedem Logikprozessor individuell zu planen.
-
Die Speicherhierarchie umfasst eine oder mehrere Cache-Ebenen innerhalb der Kerne, einen Satz einer oder mehrerer gemeinsam genutzter Cache-Einheiten 906, und einen externen Speicher (nicht gezeigt), der mit dem Satz integrierter Speichersteuereinheiten 914 gekoppelt ist. Der Satz gemeinsam genutzter Cache-Einheiten 906 kann einen oder mehrerer Caches mittlerer Ebene aufweisen, wie Level 2- (L2-), Level 3- (L3-), Level 4- (L4-) oder andere Cache-Ebenen, einen Last Level Cache (LLC) und/oder Kombinationen davon. Obwohl in einer Ausführungsform eine ringbasierte Zwischenverbindungseinheit 912 die Speziallogik (z.B. integrierte Grafiklogik) 908, den Satz gemeinsam genutzter Cache-Einheiten 906 und die Systemagenteneinheit 910/integrierte Speichersteuereinheit(en) 914 miteinander verbindet, können alternative Ausführungsformen eine beliebige Anzahl wohlbekannter Techniken für eine Zwischenverbindung solcher Einheiten verwenden. In einer Ausführungsform wird die Kohärenz zwischen einer oder mehreren Cache-Einheiten 906 und den Kernen 902A-N aufrechterhalten.
-
In einigen Ausführungsformen ist ein oder sind mehrere der Kerne 902A-N Multithreading-fähig. Der Systemagent 910 umfasst jene Komponenten, welche die Kerne 902A-N koordinieren und betreiben. Der Systemagent 910 kann beispielsweise eine Energiesteuereinheit (PCU) und eine Anzeigeeinheit aufweisen. Die PCU kann Logik und Komponenten aufweisen oder sein, die zur Regelung des Energiezustands der Kerne 902A N und/oder der integrierten Grafiklogik 908 notwendig sind. Die Anzeigeeinheit dient zum Treiben einer oder mehrerer extern angeschlossener Anzeigen.
-
Die Kerne 902A-N können homogen oder heterogen hinsichtlich des Architektur-Instruktionssatzes sein; das heißt, zwei oder mehrere der Kerne 902A-N können fähig sein, denselben Instruktionssatz auszuführen, während andere fähig sein können, nur einen Subsatz dieses Instruktionssatzes oder einen anderen Instruktionssatz auszuführen.
-
10 bis 13 sind Blockbilder von Beispielen von Computerarchitekturen. Andere Systemausbildungen und -auslegungen, die für Laptops, Desktops, Hand-PCs, Personal Digital Assistants, technische Arbeitsstationen, Server, Netzvorrichtungen, Netz-Hubs, Schalter, eingebettete Prozessoren, digitale Signalprozessoren (DSPs), Grafikvorrichtungen, Videospielvorrichtungen, Set-top-Boxes, Mikrosteuereinheiten, Mobiltelefone, tragbare Media Player, Hand-Vorrichtungen und verschiedene andere elektronische Vorrichtungen bekannt sind, sind auch geeignet, die in dieser Offenbarung beschriebenen Verfahren vorzunehmen. Im Allgemeinen sind viele verschiedene Systeme oder elektronische Vorrichtungen, die einen Prozessor und/oder andere Ausführungslogik enthalten können, wie hier geoffenbart, allgemein geeignet.
-
10 zeigt ein Blockbild eines Systems 1000 gemäß einer Ausführungsform der vorliegenden Offenbarung. Das System 1000 kann einen oder mehrere Prozessoren 1010, 1015 umfassen, die mit einem Steuereinheit-Hub 1020 gekoppelt sind. In einer Ausführungsform umfasst der Steuereinheit-Hub 1020 einen Grafik-Speichersteuereinheit-Hub (GMCH) 1090 und einen Eingabe/Ausgabe-Hub (IOH) 1050 (die auf getrennten Chips sein können); der GMCH 1090 umfasst Speicher- und Grafiksteuereinheiten, mit denen der Speicher 1040 und ein Coprozessor 1045 gekoppelt sind; der IOH 1050 koppelt die Eingabe/Ausgabe- (I/O-) Vorrichtungen 1060 mit dem GMCH 1090. Alternativ dazu sind eine oder beide von der Speicher- und Grafiksteuereinheit innerhalb des Prozessors integriert (wie hier beschrieben), der Speicher 1040 und der Coprozessor sind direkt mit dem Prozessor 1010 gekoppelt, und der Steuereinheit-Hub 1020 ist ein einzelner Chip, der den IOH 1050 umfasst.
-
Die optionale Beschaffenheit der zusätzlichen Prozessoren 1015 ist in 10 mit gestrichelten Linien bezeichnet. Jeder Prozessor 1010, 1015 kann einen oder mehrere der hier beschriebenen Verarbeitungskerne umfassen und kann irgendeine Version des Prozessors 900 sein.
-
Der Speicher 1040 kann beispielsweise ein dynamischer Speicher mit wahlfreiem Zugriff (DRAM), ein Phasenänderungspeicher (PCM), ein anderer geeigneter Speicher oder eine beliebige Kombination davon sein. Der Speicher 1040 kann beliebige geeignete Daten speichern, wie Daten, die von den Prozessoren 1010, 1050 verwendet werden, um die Funktionalität des Computersystems 1000 vorzusehen. Beispielsweise können Daten, die mit Programmen, welche ausgeführt werden, oder Dateien, auf die von den Prozessoren 1010, 1015 zugegriffen wird, assoziiert sind, in dem Speicher 1040 gespeichert werden. In verschiedenen Ausführungsformen kann der Speicher 1040 Daten und/oder Sequenzen von Instruktionen speichern, die von den Prozessoren 1010, 1015 verwendet oder ausgeführt werden.
-
In mindestens einer Ausführungsform kommuniziert der Steuereinheit-Hub 1020 mit dem (den) Prozessor(en) 1010, 1015 über einen Multi-Drop-Bus, wie einen Frontside-Bus (FSB), eine Punkt-zu-Punkt-Schnittstelle, wie eine QuickPath-Zwischenverbindung (QPI) oder ähnliche Verbindung 1095.
-
In einer Ausführungsform ist der Coprozessor 1045 ein Spezialprozessor, wie beispielsweise ein MIC-Prozessor mit hohem Durchsatz, ein Netz- oder Kommunikationsprozessor, eine Kompressions- und/oder Dekompressionsmaschine, ein Grafikprozessor, eine GPGU, ein eingebetteter Prozessor oder dgl. In einer Ausführungsform kann der Steuereinheit-Hub 1020 einen integrierten Grafikbeschleuniger umfassen.
-
Es kann verschiedenste Unterschiede zwischen den physischen Ressourcen 1010, 1015 hinsichtlich eines Gütemetrikspektrums geben, umfassend Architektur-, Mikroarchitektur-, thermische, Energieverbrauchscharakteristiken und dgl.
-
In einer Ausführungsform führt der Prozessor 1010 Instruktionen aus, die Datenverarbeitungsoperationen eines allgemeinen Typs steuern. Innerhalb der Instruktionen können Coprozessorinstruktionen eingebettet sein. Der Prozessor 1010 erkennt, dass diese Coprozessorinstruktionen von einem Typ sind, der vom angeschlossenen Coprozessor 1045 ausgeführt werden sollte. Demgemäß erteilt der Prozessor 1010 diese Coprozessorinstruktionen (oder Steuersignale, die Coprozessorinstruktionen repräsentieren) dem Coprozessor 1045 auf einem Coprozessorbus oder einer anderen Zwischenverbindung. Der (die) Coprozessor(en) 1045 akzeptiert (akzeptieren) die empfangenen Coprozessorinstruktionen und führt (führen) diese aus.
-
11 zeigt ein Blockbild eines ersten spezifischeren Beispiels eines Systems 1100 gemäß einer Ausführungsform der vorliegenden Offenbarung. Wie in 11 gezeigt, ist das Mehrprozessorsystem 1100 ein Punkt-zu-Punkt-Zwischenverbindungssystem und umfasst einen ersten Prozessor 1170 und einen zweiten Prozessor 1180, die über eine Punkt-zu-Punkt-Zwischenverbindung 1150 gekoppelt sind. Jeder der Prozessoren 1170 und 1180 kann irgendeine Version des Prozessors 900 sein. In einer Ausführungsform der Offenbarung sind die Prozessoren 1170 und 1180 jeweils die Prozessoren 1010 und 1015, während der Coprozessor 1138 der Coprozessor 1045 ist. In einer weiteren Ausführungsform sind die Prozessoren 1170 und 1180 jeweils der Prozessor 1010 und der Coprozessor 1045.
-
Von den Prozessoren 1170 und 1180 ist gezeigt, dass sie integrierte Speichersteuereinheit- (IMC-) Einheiten 1172 bzw. 1182 aufweisen. Der Prozessor 1170 umfasst auch als Teil seiner Bussteuereinheiten Punkt-zu-Punkt- (P-P-) Schnittstellen 1176 und 1178; ähnlich umfasst der zweite Prozessor 1180 P-P-Schnittstellen 1186 und 1188. Die Prozessoren 1170, 1180 können Informationen über eine Punkt-zu-Punkt- (P-P-) Schnittstelle 1150 unter Verwendung der P-P-Schnittstellenschaltungen 1178, 1188 austauschen. Wie in 11 gezeigt, koppeln IMCs 1172 und 1182 die Prozessoren mit jeweiligen Speichern, nämlich einem Speicher 1132 und einem Speicher 1134, die Teile eines Hauptspeichers sein können, der lokal an die jeweiligen Prozessoren angeschlossen ist.
-
Die Prozessoren 1170, 1180 können Informationen mit einem Chipsatz 1190 über einzelne P-P-Schnittstellen 1152, 1154 unter Verwendung von Punkt-zu-Punkt-Schnittstellenschaltungen 1176, 1194, 1186, 1198 austauschen. Der Chipsatz 1190 kann gegebenenfalls Informationen mit dem Coprozessor 1138 über eine Hochleistungsschnittstelle 1139 austauschen. In einer Ausführungsform ist der Coprozessor 1138 ein Spezialprozessor, wie beispielsweise ein MIC-Prozessor mit hohem Durchsatz, ein Netz- oder Kommunikationsprozessor, eine Kompressions- und/oder Dekompressionsmaschine, ein Grafikprozessor, eine GPGU, ein eingebetteter Prozessor oder dgl.
-
Ein gemeinsam genutzter Cache (nicht gezeigt) kann in einem der beiden Prozessoren oder außerhalb beider Prozessoren eingeschlossen sein, jedoch mit den Prozessoren über eine P-P-Zwischenverbindung verbunden sein, so dass lokale Cache-Informationen eines der beiden oder beider Prozessoren im gemeinsam genutzten Cache gespeichert werden können, wenn ein Prozessor in einen Niederenergiemodus versetzt wird.
-
Der Chipsatz 1190 kann mit einem ersten Bus 1116 über eine Schnittstelle 1196 gekoppelt sein. In einer Ausführungsform kann der erste Bus 1116 ein Peripheral Component Interconnect- (PCI-) Bus oder ein Bus sein, wie ein PCI Express-Bus oder ein anderer I/O-Zwischenverbindungsbus der dritten Generation, obwohl der Umfang der vorliegenden Erfindung nicht so eingeschränkt ist.
-
Wie in 11 gezeigt, können verschiedene I/O-Vorrichtungen 1114 mit dem ersten Bus 1116 zusammen mit einer Busbrücke 1118 gekoppelt sein, die den ersten Bus 1116 mit einem zweiten Bus 1120 koppelt. In einer Ausführungsform sind ein oder mehrere zusätzliche Prozessoren 1115, wie Coprozessoren, MIC-Prozessoren mit hohem Durchsatz, GPGUs, Beschleuniger (wie z.B. Grafikbeschleuniger oder digitale Signalverarbeitungs- (DSP-) Einheiten), feldprogrammierbare Gate-Arrays oder irgendein anderer Prozessor mit dem ersten Bus 1116 gekoppelt. In einer Ausführungsform kann der zweite Bus 1120 ein Bus mit niedriger Pin-Anzahl (LPC) sein. Verschiedene Vorrichtungen können mit dem zweiten Bus 1120 gekoppelt sein, umfassend beispielsweise eine Tastatur und/oder Maus 1122, Kommunikationsvorrichtungen 1127 und eine Speichereinheit 1128, wie ein Diskettenlaufwerk oder eine andere Massenspeichervorrichtung, die Instruktionen/Code und Daten 1130 umfassen kann, in einer Ausführungsform. Ferner kann eine Audio-I/O 1124 mit dem zweiten Bus 1120 gekoppelt sein. Es ist zu beachten, dass andere Architekturen von dieser Offenbarung vorgesehen werden. Beispielsweise kann anstelle der Punkt-zu-Punkt-Architektur von 11 ein System einen Multi-Drop-Bus oder eine andere solche Architektur implementieren.
-
12 stellt ein Blockbild eines zweiten spezifischeren Beispiels eines Systems 1200 gemäß einer Ausführungsform der vorliegenden Offenbarung dar. Ähnliche Elemente in 11 und 12 haben ähnliche Bezugszahlen, und bestimmte Aspekte von 11 wurden in 12 weggelassen, um zu vermeiden, andere Aspekte von 12 zu überdecken.
-
12 veranschaulicht, dass die Prozessoren 1170, 1180 integrierte Speicher- und I/O-Steuerlogik („CL“) 1172 bzw. 1182 aufweisen können. Somit können die CL 1172, 1182 integrierte Speichersteuereinheiten aufweisen und I/O-Steuerlogik aufweisen. 12 veranschaulicht, dass nicht nur die Speicher 1132, 1134 mit den CL 1172, 1182 gekoppelt sind, sondern dass auch I/O-Vorrichtungen 1214 mit der Steuerlogik 1172, 1182 gekoppelt sind. Legacy-I/O-Vorrichtungen 1215 sind mit dem Chipsatz 1190 gekoppelt.
-
13 stellt ein Blockbild eines SoC 1300 gemäß einer Ausführungsform der vorliegenden Offenbarung dar. Ähnliche Elemente in 9 haben ähnliche Bezugszahlen. Auch sind Kästchen mit gestrichelten Linien optionale Merkmale auf höher entwickelten SoCs. In 13 sind eine oder mehrere Zwischenverbindungseinheiten 1302 gekoppelt mit: einem Anwendungs-Prozessor 1310, der einen Satz von einem oder mehreren Kernen 202A-N und gemeinsam genutzte Cache-Einheit(en) 906 aufweist; einer Systemagenteneinheit 910; einer oder mehreren Bussteuereinheiten 916; einer oder mehreren integrierten Speichersteuereinheiten 914; einem Satz von einem oder mehreren Coprozessoren 1320, die integrierte Grafiklogik umfassen können; einem Bildprozessor, einem Audio-Prozessor, und einem Video-Prozessor; einer statischen Speichereinheit mit wahlfreiem Zugriff (SRAM) 1330; einer Direktspeicherzugriffseinheit (DMA) 1332; und einer Anzeigeeinheit 1340 zum Koppeln der einen oder mehreren externen Anzeigen. In einer Ausführungsform umfassen die Coprozessoren 1320 einen Spezialprozessor, wie beispielsweise einen Netz- oder Kommunikationsprozessor, eine Kompressions- und/oder Dekompressionsmaschine, GPGPU, einen MIC-Prozessor mit hohem Durchsatz, einen eingebetteten Prozessor oder dgl.
-
In einigen Fällen kann ein Instruktionsumwandler verwendet werden, um eine Instruktion von einem Quellinstruktionssatz in einen Zielinstruktionssatz umzuwandeln. Beispielsweise kann der Instruktionsumwandler eine Instruktion in eine oder mehrere andere Instruktionen, die von dem Kern zu verarbeiten sind, übersetzen (z.B. unter Verwendung einer statischen binären Übersetzung, dynamischen binären Übersetzung, umfassend dynamische Kompilierung), morphen, emulieren oder auf andere Weise umwandeln. Der Instruktionsumwandler kann in Software, Hardware, Firmware oder einer Kombination davon implementiert werden. Der Instruktionsumwandler kann Prozessor-intern, Prozessor-extern oder teilweise intern und teilweise extern von dem Prozessor sein.
-
14 ist ein Blockbild, das die Verwendung eines Software-Instruktionsumwandlers gegenüberstellt, um binäre Instruktionen in einem Quellinstruktionssatz in binäre Instruktionen in einem Zielinstruktionssatz umzuwandeln, gemäß Ausführungsformen der Offenbarung. In der veranschaulichten Ausführungsform ist der Instruktionsumwandler ein Software-Instruktionsumwandler, obwohl alternativ dazu der Instruktionsumwandler in Software, Firmware, Hardware oder verschiedenen Kombinationen davon implementiert werden kann. 14 zeigt ein Programm in einer Hochsprache 1402, das unter Verwendung eines x86-Kompilierers 1404 kompiliert werden kann, um einen x86-Binärcode 1406 zu generieren, der nativ von einem Prozessor mit mindestens einem x86-Instruktionssatzkern 1416 ausgeführt werden kann. Der Prozessor mit mindestens einem x86-Instruktionssatzkern 1416 repräsentiert einen beliebigen Prozessor, der im Wesentlichen dieselben Funktionen ausführen kann wie ein Intel-Prozessor mit mindestens einem x86-Instruktionssatzkern durch kompatible Ausführung oder andere Verarbeitung von: (1) einem wesentlichen Abschnitt des Instruktionssatzes des Intel-x86-Instruktionssatzkerns oder (2) Objektcodeversionen von Anwendungen oder anderer Software, die auf einem Intel-Prozessor mit mindestens einem x86-Instruktionssatzkern laufen sollen, um im Wesentlichen dasselbe Ergebnis zu erzielen wie ein Intel-Prozessor mit mindestens einem x86-Instruktionssatzkern. Der x86-Kompilierer 1404 repräsentiert einen Kompilierer, der betreibbar ist, einen x86-Binärcode 1406 (z.B. Objektcode) zu generieren, der, mit oder ohne zusätzliche Verbindungsverarbeitung, auf dem Prozessor mit mindestens einem x86-Instruktionssatzkern 1416 ausgeführt werden kann. Ähnlich zeigt 14 das Programm in der Hochsprache 1402, das unter Verwendung eines alternativen Instruktionssatzkompilierers 1408 kompiliert werden kann, um einen alternativen Instruktionssatz-Binärcode 1410 zu generieren, der nativ von einem Prozessor ohne mindestens einen x86-Instruktionssatzkern 1414 ausgeführt werden kann (z.B. ein Prozessor mit Kernen, die den MIPS-Instruktionsatz von MIPS Technologies, Sunnyvale, CA, ausführen, und/oder die den ARM-Instruktionssatz von ARM Holdings, Sunnyvale, CA, ausführen). Der Instruktionsumwandler 1412 wird verwendet, um den x86-Binärcode 1406 in Code umzuwandeln, der nativ von dem Prozessor ohne einen x86-Instruktionssatzkern 1414 ausgeführt werden kann. Dieser umgewandelte Code wird wahrscheinlich nicht gleich sein wie der alternative Instruktionssatz-Binärcode 1410, da ein Instruktionsumwandler, der dies kann, schwierig herzustellen ist; der umgewandelte Code wird jedoch die allgemeine Operation erzielen und aus Instruktionen von dem alternativen Instruktionssatz bestehen. Somit repräsentiert der Instruktionsumwandler 1412 Software, Firmware, Hardware oder eine Kombination davon, die es, durch Emulation, Simulation oder irgendeinen anderen Prozess, einem Prozessor oder einer anderen elektronischen Vorrichtung gestatten, die keinen x86-Instruktionssatz-Prozessor oder -Kern aufweisen, den x86-Binärcode 1406 auszuführen.
-
Eine Ausbildung kann verschiedene Stufen durchlaufen, von der Erzeugung bis zur Simulation zur Herstellung. Daten, die eine Ausbildung repräsentieren, können die Ausbildung in verschiedener Weise repräsentieren. Zuerst ist es bei Simulationen nützlich, dass die Hardware unter Verwendung einer Hardware-Beschreibungssprache (HDL) oder einer anderen funktionellen Beschreibungssprache repräsentiert werden kann. Zusätzlich kann ein Modell auf Schaltungsebene mit Logik und/oder Transistor-Gates in einigen Stufen des Ausbildungsprozesses erzeugt werden., Ferner erreichen die meisten Ausbildungen in irgendeiner Stufe eine Ebene von Daten, welche die physische Platzierung verschiedener Vorrichtungen im Hardware-Modell repräsentieren. In dem Fall, wo herkömmliche Halbleiter-Herstellungstechniken verwendet werden, können die Daten, die das Hardware-Modell repräsentieren, die Daten sein, welche das Vorliegen oder Fehlen verschiedener Merkmale auf verschiedenen Maskenschichten für Masken spezifizieren, die verwendet werden, um die integrierte Schaltung zu erzeugen. In einigen Implementierungen können solche Daten in einem Datenbank-Dateiformat gespeichert werden, wie Graphic Data System II (GDS II), Open Artwork System Interchange Standard (OASIS) oder ähnlichen Format.
-
In einigen Implementierungen können Software-basierte Hardware-Modelle und HDL- und andere funktionelle Beschreibungsprachobjekte Registertransfersprach- (RTL-) dateien umfassen, unter anderen Beispielen. Solche Beispiele können maschinenauswertbar sein, so dass ein Ausbildungswerkzeug das HDL-Objekt (oder Modell) akzeptieren kann, das HDL-Objekt auf Attribute der beschriebenen Hardware auswerten kann, und eine physische Schaltung und/oder ein On-Chip-Layout aus dem Objekt bestimmen kann. Die Ausgabe des Ausbildungswerkzeugs kann zur Herstellung der physischen Vorrichtung verwendet werden. Beispielsweise kann ein Ausbildungswerkzeug Auslegungen verschiedener Hardware- und/oder Firmware-Elemente aus dem HDL-Objekt bestimmen, wie Busbreiten, Register (umfassend Größen und Typen), Speicherblöcke, physische Verbindungswege, Fabric-Topologien, unter anderen Attributen, die implementiert werden, um das System, modelliert im HDL-Objekt, zu realisieren. Ausbildungswerkzeuge können Werkezuge zur Bestimmung der Topologie und Fabric-Auslegungen von System-on-Chip- (SoC-) und anderen Hardware-Vorrichtungen umfassen. In einigen Fällen kann das HDL-Objekt als Basis zur Entwicklung von Modellen und Ausbildungsdateien verwendet werden, die von Herstellungsausrüstung eingesetzt werden können, um die beschriebene Hardware herzustellen. Tatsächlich kann ein HDL-Objekt selbst als Eingabe für Herstellungssystem-Software geliefert werden, um die Herstellung der beschriebenen Hardware zu bewirken.
-
In einer beliebigen Darstellung der Ausbildung können Daten, welche die Ausbildung repräsentieren, in irgendeiner Form eines maschinenlesbaren Mediums gespeichert werden. Ein Speicher oder ein magnetischer oder optischer Speicher, wie eine Platte, kann das maschinenlesbare Medium sein, um Informationen zu speichern, die über optische oder elektrische Wellen übertragen werden, welche moduliert oder auf andere Weise generiert werden, um solche Informationen zu übertragen. Wenn eine elektrische Trägerwelle übertragen wird, die den Code oder die Ausbildung anzeigt oder trägt, in dem Ausmaß, dass ein Kopieren, Puffern oder eine erneute Übertragung des elektrischen Signals vorgenommen wird, wird eine neue Kopie erstellt. Somit kann ein Kommunikationsdiensteanbieter oder ein Netzanbieter auf einem greifbaren, maschinenlesbaren Medium, wenigstens temporär, einen Artikel speichern, wie Informationen, die in eine Trägerwelle codiert sind, unter Verwendung von Techniken von Ausführungsformen der vorliegenden Offenbarung.
-
In verschiedenen Ausführungsformen kann ein Medium, das eine Darstellung der Ausbildung speichert, für ein Herstellungssystem vorgesehen werden (z.B. ein Halbleiter-Herstellungssystem, das eine integrierte Schaltung und/oder verwandte Komponenten herstellen kann). Die Ausbildungsdarstellung kann das System anweisen, eine Vorrichtung herzustellen, die irgendeine Kombination der oben beschriebenen Funktionen vornehmen kann. Beispielsweise kann die Ausbildungsdarstellung das System dahingehend anweisen, welche Komponenten herzustellen sind, wie die Komponenten miteinander gekoppelt werden sollen, wo die Komponenten auf der Vorrichtung platziert werden sollen, und/oder hinsichtlich anderer geeigneter Spezifikationen in Bezug auf die Vorrichtung, die herzustellen ist.
-
Somit kann oder können ein oder mehrere der Aspekte wenigstens einer Ausführungsform durch repräsentative Instruktionen implementiert werden, die auf einem maschinenlesbaren Medium gespeichert sind, das verschiedene Logik innerhalb des Prozessors repräsentiert, die, wenn sie von einer Maschine gelesen wird, die Maschine veranlasst, Logik herzustellen, um die hier beschriebenen Techniken vorzunehmen. Solche Repräsentationen, die häufig als „IP-Kerne“ bekannt sind, können auf einem nicht-transitorischen, greifbaren, maschinenlesbaren Medium gespeichert werden und an verschiedene Kunden oder Herstellungseinrichtungen geliefert werden, um in die Herstellungsmaschinen geladen zu werden, welche die Logik oder den Prozessor herstellen.
-
Ausführungsformen der hier geoffenbarten Mechanismen können in Hardware, Software, Firmware oder einer Kombination solcher Implementierungsansätze implementiert werden. Ausführungsformen der Offenbarung können als Computerprogramme oder Programmcode implementiert werden, die auf programmierbaren Systemen ausgeführt werden, umfassend mindestens einen Prozessor, ein Speichersystem (umfassend einen flüchtigen und nicht-flüchtigen Speicher und/oder Speicherelemente), mindestens eine Eingabevorrichtung und mindestens eine Ausgabevorrichtung.
-
Der Programmcode, wie der in 11 veranschaulichte Programmcode 1130, kann auf Eingabeinstruktionen angewendet werden, um die hier beschriebenen Funktionen vorzunehmen und Ausgabeinformationen zu generieren. Die Ausgabeinformationen können auf eine oder mehrere Ausgabevorrichtungen auf bekannte Weise angewendet werden. Für Zwecke dieser Anmeldung umfasst ein Verarbeitungssystem irgendein System, das einen Prozessor aufweist, wie beispielsweise: einen digitalen Signalprozessor (DSP), eine Mikrosteuereinheit, eine anwendungsspezifische Integrationsschaltung (ASIC) oder einen Mikroprozessor.
-
Der Programmcode kann in einer prozessorientierten oder objektorientierten Programmierhochsprache implementiert sein, um mit einem Verarbeitungssystem zu kommunizieren. Der Programmcode kann auch in einer Assemblier- oder Maschinensprache implementiert sein, wenn gewünscht. Tatsächlich sind die hier beschriebenen Mechanismen im Umfang nicht auf irgendeine bestimmte Programmiersprache beschränkt. In jedem Fall kann die Sprache eine kompilierte oder interpretierte Sprache sein.
-
Die Ausführungsformen von Verfahren, Hardware, Software, Firmware oder Code, die oben ausgeführt wurden, können über Instruktionen oder einen Code implementiert werden, die auf einem maschinenzugänglichen, maschinenlesbaren, computerzugänglichen oder computerlesbaren Medium gespeichert sind und die von einem Verarbeitungselement ausgeführt werden können (oder auf andere Weise für dieses zugänglich sind). Ein nicht-transitorisches maschinenzugängliches/lesbares Medium umfasst irgendeinen Mechanismus, der Information in einer Form liefert (d.h. speichert und/oder überträgt), die durch eine Maschine lesbar ist, wie einem Computer oder Elektroniksystem. Beispielsweise umfasst ein nicht-transitorisches maschinenzugängliches Medium einen Speicher mit wahlfreiem Zugriff (RAM), wie einen statischen RAM (SRAM) oder dynamischen RAM (DRAM); einen ROM; ein magnetisches oder optischen Speichermedium; Flash-Speichervorrichtungen; elektrische Speichervorrichtungen; optische Speichervorrichtungen; akustische Speichervorrichtungen; eine andere Form von Speichervorrichtungen zum Halten von Informationen, die von transitorischen (ausgebreiteten) Signalen (z.B. Trägerwellen, Infrarot-Signalen, digitalen Signalen) usw. empfangen werden, welche von den nicht-transitorischen Medien zu unterscheiden sind, die Informationen von diesen empfangen können.
-
Instruktionen, die zur Programmierung von Logik verwendet werden, um Ausführungsformen der Offenbarung vorzunehmen, können innerhalb eines Speichers im System, wie eines DRAM, Caches, Flash-Speichers oder eines anderen Speichers, gespeichert werden. Ferner können die Instruktionen über ein Netz oder durch andere computerlesbare Medien verteilt werden. Somit kann ein maschinenlesbares Medium irgendeinen Mechanismus zum Speichern oder Übertragen von Informationen in einer Form umfassen, die von einer Maschine (z.B. einem Computer) gelesen werden kann, ist jedoch nicht beschränkt auf Disketten, optische Platten, Compact Disc Nurlesespeicher (CD-ROMs), und magnetooptische Platten, Nurlesespeicher (ROMs), Speicher mit wahlfreiem Zugriff (RAM), löschbare programmierbare Nurlesespeicher (EPROM), elektrisch löschbare programmierbare Nurlesespeicher (EEPROM), magnetische oder optische Karten, Flash-Speicher oder einen greifbaren, maschinenlesbaren Speicher, der bei der Übertragung von Informationen über das Internet über elektrische, optische, akustische oder andere Formen ausgebreiteter Signale (z.B. Trägerwellen, Infrarot-Signale, digitale Signale usw.) verwendet wird. Demgemäß umfasst das computerlesbare Medium irgendeinen Typ eines greifbaren, maschinenlesbaren Mediums, das zum Speichern oder Übertragen elektronischer Instruktionen oder Informationen in einer Form geeignet ist, die von einer Maschine (z.B. einem Computer) gelesen werden kann.
-
Logik kann verwendet werden, um irgendeine Funktionalität der verschiedenen Komponenten zu implementieren, wie der CPU 102, des Sicherheitsprozessors 104, der externen I/O-Steuereinheit 106, der Systemspeichervorrichtung 108, der Speichorvorrichtung 110, der Kerne 112, der I/O-Steuereinheit 144, der Speichersteuereinheit 116, des kryptografischen Prozessors 126, des Schlüsselgenerators 128, der Verschlüsselungs/Entschlüsselungsmaschine 130, der Plattformauslegungsregister 134, anderer hier beschriebener Komponenten oder irgendeiner Subkomponente beliebiger dieser Komponenten. „Logik“ kann sich auf Hardware, Firmware, Software und/oder Kombinationen davon beziehen, um eine oder mehrere Funktionen vorzunehmen. Als Beispiel kann Logik Hardware umfassen, wie eine Mikrosteuereinheit oder einen Prozessor, assoziiert mit einem nicht-transitorischen Medium, um Code zu speichern, der geeignet ist, von der Mikrosteuereinheit oder dem Prozessor ausgeführt zu werden. Daher bezieht sich ein Verweis auf Logik in einer Ausführungsform auf die Hardware, die spezifisch ausgelegt ist, den Code zu erkennen und/oder auszuführen, der auf einem nicht-transitorischen Medium zu halten ist. Ferner bezieht sich in einer anderen Ausführungsform die Verwendung von Logik auf das nichttransitorische Medium, umfassend den Code, der spezifisch angepasst ist, um von der Mikrosteuereinheit ausgeführt zu werden, um vorherbestimmte Operationen vorzunehmen. Und, wie abgeleitet werden kann, kann sich in noch einer anderen Ausführungsform der Ausdruck Logik (in diesem Beispiel) auf die Kombination der Hardware und des nicht-transitorischen Mediums beziehen. In verschiedenen Ausführungsformen kann Logik umfassen: einen Mikroprozessor oder ein anderes Verarbeitungselement, das betreibbar ist, Software-Instruktionen auszuführen, diskrete logik, wie eine anwendungsspezifische integrierte Schaltung (ASIC), eine programmierte Logikvorrichtung, wie ein feldprogrammierbares Gate-Array (FPGA), eine Speichervorrichtung, die Instruktionen enthält, Kombinationen von Logikvorrichtungen (z.B. wie sie auf einer Leiterplatte zu finden sind), oder andere geeignete Hardware und/oder Software. Logik kann ein oder mehrere Gates oder andere Schaltungskomponenten umfassen, die z.B. durch Transistoren implementiert werden können. In einigen Ausführungsform kann Logik auch vollständig als Software verkörpert werden. Software kann als Software-Paket, Code, Instruktionen, Instruktionssätze und/oder Daten verkörpert werden, die auf einem nicht-transistorischen, computerlesbaren Speichermedium aufgezeichnet sind. Firmware kann als Code, Instruktionen oder Instruktionssätze und/oder Daten verkörpert werden, die hartcodiert sind (z.B. nicht-flüchtig) in einigen Vorrichtungen. Häufig variieren Logikgrenzen, die als getrennt dargestellt werden, üblicherweise und überlappen einander potentiell. Beispielsweise kann erste und zweite Logik Hardware, Software, Firmware oder eine Kombination davon gemeinsam nutzen, während potentiell einige unabhängige Hardware, Software oder Firmware beibehalten wird.
-
Die Verwendung des Ausdrucks „zu“ oder „ausgelegt zu“ in einer Ausführungsform bezieht sich auf die Anordnung, Zusammensetzung, Herstellung, das Inverkehrbringen, Importieren und/oder Ausbilden von einer Vorrichtung, Hardware, Logik oder einem Element, um eine bezeichnete oder bestimmte Aufgabe vorzunehmen. In diesem Beispiel ist eine Vorrichtung oder ein Element davon, das nicht in Betrieb ist, weiterhin „ausgelegt“, eine bezeichnete Aufgabe vorzunehmen, wenn es ausgebildet, gekoppelt und/oder angeschlossen ist, um die bezeichnete Aufgabe vorzunehmen. Als rein veranschaulichendes Beispiel kann ein Logikgate eine 0 oder eine 1 während des Betriebs liefern. Ein Logikgate, das „ausgelegt“ ist, ein Freigabesignal an einen Takt zu liefern, umfasst jedoch nicht jedes potentielle Logik-Gate, das eine 1 oder 0 liefern kann. Stattdessen ist das Logik-Gate eines, das in irgendeiner Weise gekoppelt ist, so dass während des Betriebs die ausgegebene 1 oder 0 den Takt freigeben kann. Es ist wiederum anzumerken, dass die Verwendung des Ausdrucks „ausgelegt zu“ keinen Betrieb erfordert, sondern stattdessen auf den latenten Zustand einer Vorrichtung, Hardware und/oder eines Elements konzentriert ist, wobei im latenten Zustand die Vorrichtung, Hardware und/oder das Element ausgebildet ist, eine bestimmte Aufgabe vorzunehmen, wenn die Vorrichtung, Hardware und/oder das Element in Betrieb ist.
-
Ferner bezieht sich die Verwendung der Ausdrücke „fähig zu“ und/oder „betreibbar zu“ in einer Ausführungsform auf irgendeine Vorrichtung, Logik, Hardware und/oder ein Element, die derart ausgebildet sind, dass sie die Verwendung der Vorrichtung, Logik, Hardware und/oder des Elements in einer spezifizierten Weise ermöglichen. Wie oben, ist anzumerken, dass sich die Verwendung „fähig zu“ und/oder „betreibbar zu“ in einer Ausführungsform auf den latenten Zustand einer Vorrichtung, Logik, Hardware und/oder eines Elements bezieht, wobei die Vorrichtung, Logik, Hardware und/oder das Element nicht in Betrieb ist, jedoch so ausgebildet sind, dass sie die Verwendung einer Vorrichtung in einer spezifizierten Weise freigeben können.
-
Ein Wert, wie hier verwendet, umfasst jede bekannte Darstellung einer Zahl, eines Zustands, eines Logikzustands oder eines binären Logikzustands. Häufig wird die Verwendung von Logikpegeln, Logikwerten, oder logischen Werten auch als 1 und 0 bezeichnet, die einfach binäre Logikzustände repräsentieren. Beispielsweise bezieht sich 1 auf einen hohen Logikpegel und 0 bezieht sich auf einen niedrigen Logikpegel. In einer Ausführungsform kann eine Speicherzelle, wie eine Transistor- oder Flash-Zelle, in der Lage sein, einen einzelnen Logikwert oder mehrere Logikwerte zu halten. Andere Darstellungen von Werten in Computersystemen wurden jedoch verwendet. Beispielsweise kann auch die Dezimalzahl zehn als binärer Wert 1010 und als Hexadezimalbuchstabe A repräsentiert werden. Daher umfasst ein Wert eine beliebige Darstellung von Informationen, die in einem Computersystem gehalten werden können.
-
Außerdem können Zustände durch Werte oder Teile von Werten dargestellt werden. Als Beispiel kann ein erster Wert, wie eine logische Eins, einen Vorgabe- oder Initialzustand darstellen, während ein zweiter Wert, wie eine logische Null, einen Nicht-Vorgabezustand repräsentieren kann. Zusätzlich beziehen sich die Ausdrücke Rücksetzen und Setzen in einer Ausführungsform jeweils auf einen Vorgabe- und einen aktualisierten Wert oder Zustand. Beispielsweise umfasst ein Vorgabewert potentiell einen hohen Logikwert, d.h. Rücksetzen, während ein aktualisierter Wert potentiell eine niedrigen Logikwert umfasst, d.h. Setzen. Es ist zu beachten, dass eine beliebige Kombination von Werten verwendet werden kann, um eine beliebige Anzahl von Zuständen darzustellen.
-
In mindestens einer Ausführungsform umfasst eine Vorrichtung: einen ersten Prozessor, um: einen ersten kryptografischen Schlüssel ansprechend auf eine Anforderung von einer Software-Anwendung zu generieren; einen zweiten kryptografischen Schlüssel zu empfangen, der von einem zweiten Prozessor generiert wird; den ersten kryptografischen Schlüssel unter Verwendung des zweiten kryptografischen Schlüssels zu verschlüsseln; und den verschlüsselten ersten kryptografischen Schlüssel für die Verwendung durch die Software-Anwendung zu liefern.
-
In einer Ausführungsform hat der erste Prozessor: den ersten kryptografischen Schlüssel unter Verwendung eines Root-Speicherschlüssels des ersten Prozessors zu verschlüsseln; und den ersten kryptografischen Schlüssel unter Verwendung des Root-Speicherschlüssels vor der Verschlüsselung des ersten kryptografischen Schlüssels unter Verwendung des zweiten kryptografischen Schlüssels zu entschlüsseln. In einer Ausführungsform die Vorrichtung nach einem der Ansprüche 1 bis 2, wobei der verschlüsselte erste kryptografische Schlüssel an den zweiten Prozessor zu liefern ist, und der zweite Prozessor den ersten kryptografischen Schlüssel zu entschlüsseln hat und den ersten kryptografischen Schlüssel zu verwenden hat, um eine kryptografische Operation vorzunehmen, die von der Software-Anwendung angefordert wird. In einer Ausführungsform hat der erste Prozessor den zweiten kryptografischen Schlüssel in einem verschlüsselten Format von dem zweiten Prozessor zu empfangen und den zweiten kryptografischen Schlüssel unter Verwendung eines dritten kryptografischen Schlüssels zu entschlüsseln, der von dem ersten Prozessor und dem zweiten Prozessor gespeichert wird. In einer Ausführungsform hat der erste Prozessor den dritten kryptografischen Schlüssel in einem verschlüsselten Format zu empfangen und den dritten kryptografischen Schlüssel unter Verwendung eines vierten kryptografischen Schlüssels zu entschlüsseln. In einer Ausführungsform wird der zweite Prozessor mit dem dritten kryptografischen Schlüssel zu einer Zeit der Herstellung des zweiten Prozessors versehen. In einer Ausführungsform weist die Anforderung von der Software-Anwendung mindestens eine Strategie auf, die verhindert, dass der erste kryptografische Schlüssel von dem ersten Prozessor in einem nicht-verschlüsselten Format gesendet wird. In einer Ausführungsform hat der erste Prozessor den zweiten kryptografischen Schlüssel an den zweiten Prozessor ansprechend darauf zu liefern, dass der zweite Prozessor einen aktivierten Zustand wiederaufnimmt. In einer Ausführungsform ist der erste Prozessor ein Trusted Platform-Modul, und der zweite Prozessor ist eine Zentraleinheit. In einer Ausführungsform hat der erste Prozessor den zweiten kryptografischen Schlüssel über einen Seitenbandbus zu empfangen, der zwischen dem ersten Prozessor und dem zweiten Prozessor gekoppelt ist.
-
In mindestens einer Ausführungsform umfasst ein Verfahren: Generieren, durch einen ersten Prozessor, eines ersten kryptografischen Schlüssels ansprechend auf eine Anforderung von einer Software-Anwendung; Empfangen eines zweiten kryptografischen Schlüssels, der von einem zweiten Prozessor generiert wird; Verschlüsseln des ersten kryptografischen Schlüssels unter Verwendung des zweiten kryptografischen Schlüssels; und Liefern des verschlüsselten ersten kryptografischen Schlüssels für die Verwendung durch die Software-Anwendung.
-
In einer Ausführungsform umfasst das Verfahren ferner: Verschlüsseln des ersten kryptografischen Schlüssels unter Verwendung eines Root-Speicherschlüssels des ersten Prozessors; und Entschlüsseln des ersten kryptografischen Schlüssels unter Verwendung des Root-Speicherschlüssels vor der Verschlüsselung des ersten kryptografischen Schlüssels unter Verwendung des zweiten kryptografischen Schlüssels. In einer Ausführungsform umfasst das Verfahren ferner: Liefern des verschlüsselten ersten kryptografischen Schlüssels an den zweiten Prozessor und Entschlüsseln, durch den zweiten Prozessor, des ersten kryptografischen Schlüssels und Verwenden des ersten kryptografischen Schlüssels, um eine kryptografische Operation vorzunehmen, die von der Software-Anwendung angefordert wird. In einer Ausführungsform umfasst das Verfahren ferner: Empfangen, durch den ersten Prozessor, des zweiten kryptografischen Schlüssels in einem verschlüsselten Format von dem zweiten Prozessor und Entschlüsseln des zweiten kryptografischen Schlüssels unter Verwendung eines dritten kryptografischen Schlüssels, der von dem ersten Prozessor und dem zweiten Prozessor gespeichert wird. In einer Ausführungsform umfasst das Verfahren ferner: Empfangen, durch den ersten Prozessor, des dritten kryptografischen Schlüssels in einem verschlüsselten Format und Entschlüsseln des dritten kryptografischen Schlüssels unter Verwendung eines vierten kryptografischen Schlüssels. In einer Ausführungsform wird der zweite Prozessor mit dem dritten kryptografischen Schlüssel zu einer Zeit der Herstellung des zweiten Prozessors versehen. In einer Ausführungsform umfasst das Verfahren ferner, dass die Anforderung von der Software-Anwendung mindestens eine Strategie aufweist, die verhindert, dass der erste kryptografische Schlüssel von dem ersten Prozessor in einem unverschlüsselten Format gesendet wird. In einer Ausführungsform umfasst das Verfahren ferner: Liefern des zweiten kryptografischen Schlüssels durch den ersten Prozessor an den zweiten Prozessor ansprechend darauf, dass der zweite Prozessor einen aktivierten Zustand wiederaufnimmt. In einer Ausführungsform ist der erste Prozessor ein Trusted Platform-Modul und der zweite Prozessor ist eine Zentraleinheit. In einer Ausführungsform umfasst das Verfahren ferner: Empfangen, durch den ersten Prozessor, des zweiten kryptografischen Schlüssels über einen Seitenbandbus, der zwischen dem ersten Prozessor und dem zweiten Prozessor gekoppelt ist.
-
In mindestens einer Ausführungsform umfasst eine Vorrichtung: einen ersten Prozessor, um einen ersten kryptografischen Schlüssel zu generieren und den ersten kryptografischen Schlüssel an einen zweiten Prozessor zu liefern; auf einen verschlüsselten zweiten kryptografischen Schlüssel zuzugreifen, der von dem zweiten Prozessor generiert wird, wobei der verschlüsselte zweite kryptografische Schlüssel unter Verwendung des ersten kryptografischen Schlüssels verschlüsselt wird; und eine Instruktion auszuführen, die auf den verschlüsselten zweiten kryptografischen Schlüssel verweist.
-
In einer Ausführungsform hat der erste Prozessor den verschlüsselten zweiten kryptografischen Schlüssel unter Verwendung des ersten kryptografischen Schlüssels zu entschlüsseln. In einer Ausführungsform hat der erste Prozessor die Instruktion auszuführen, indem eine kryptografische Operation an Daten vorgenommen wird, auf die von der Instruktion verwiesen wird, wobei die kryptografische Operation unter Verwendung des zweiten kryptografischen Schlüssels vorgenommen wird. In einer Ausführungsform hat der erste Prozessor den ersten kryptografischen Schlüssel unter Verwendung eines dritten kryptografischen Schlüssels zu verschlüsseln, der von dem ersten Prozessor und dem zweiten Prozessor gespeichert wird, und den ersten kryptografischen Schlüssel an den zweiten Prozessor zu liefern, indem der verschlüsselte erste kryptografische Schlüssel geliefert wird. In einer Ausführungsform wird der erste Prozessor zur Zeit der Herstellung des ersten Prozessors mit dem dritten kryptografischen Schlüssel versehen.
-
In mindestens einer Ausführungsform umfasst ein Verfahren: Generieren, durch einen ersten Prozessor, eines ersten kryptografischen Schlüssels und Liefern des ersten kryptografischen Schlüssels an einen zweiten Prozessor; Zugreifen auf einen verschlüsselten zweiten kryptografischen Schlüssel, der von dem zweiten Prozessor generiert wird, wobei der verschlüsselte zweite kryptografische Schicht unter Verwendung des ersten kryptografischen Schlüssels verschlüsselt wird; und Ausführen einer Instruktion, die auf den verschlüsselten zweiten kryptografischen Schlüssel verweist.
-
In einer Ausführungsform umfasst das Verfahren ferner: Entschlüsseln, durch den ersten Prozessor, des verschlüsselten zweiten kryptografischen Schlüssels unter Verwendung des ersten kryptografischen Schlüssels. In einer Ausführungsform umfasst das Verfahren ferner: Ausführen, durch den ersten Prozessor, der Instruktion, indem eine kryptografische Operation an Daten vorgenommen wird, auf die von der Instruktion verwiesen wird, wobei die kryptografische Operation unter Verwendung des zweiten kryptografischen Schlüssels vorgenommen wird. In einer Ausführungsform umfasst das Verfahren ferner: Verschlüsseln, durch den ersten Prozessor, des ersten kryptografischen Schlüssels unter Verwendung eines dritten kryptografischen Schlüssels, der von dem ersten Prozessor und dem zweiten Prozessor gespeichert wird, und Liefern des ersten kryptografischen Schlüssels an den zweiten Prozessor, indem der verschlüsselte erste kryptografische Schlüssel geliefert wird. In einer Ausführungsform wird der erste Prozessor zur Zeit der Herstellung des ersten Prozessors mit dem dritten kryptografischen Schlüssel versehen.
-
In einer Ausführungsform umfasst ein System: einen ersten Prozessor, um: einen ersten kryptografischen Schlüssel zu generieren; und einen zweiten Prozessor, um einen zweiten kryptografischen Schlüssel ansprechend auf eine Anforderung von einer Software-Anwendung zu generieren; den zweiten kryptografischen Schlüssel unter Verwendung des ersten kryptografischen Schlüssels zu verschlüsseln; und den verschlüsselten zweiten kryptografischen Schlüssel für die Verwendung durch die Software-Anwendung zu liefern. In einer Ausführungsform hat der zweite Prozessor: den zweiten kryptografischen Schlüssel unter Verwendung eines Root-Speicherschlüssels des zweiten Prozessors zu verschlüsseln; und den zweiten kryptografischen Schlüssel unter Verwendung des Root-Speicherschlüssels vor der Verschlüsselung des zweiten kryptografischen Schlüssels unter Verwendung des ersten kryptografischen Schlüssels zu entschlüsseln. In einer Ausführungsform hat der erste Prozessor den zweiten kryptografischen Schlüssel zu entschlüsseln und den zweiten kryptografischen Schlüssel zu verwenden, um eine kryptografische Operation vorzunehmen, die von der Software-Anwendung angefordert wird, der erste Prozessor hat den ersten kryptografischen Schlüssel unter Verwendung eines dritten kryptografischen Schlüssels zu verschlüsseln, der von dem ersten Prozessor und dem zweiten Prozessor gespeichert wird, und den verschlüsselten ersten kryptografischen Schlüssel an den zweiten Prozessor zu liefern. In einer Ausführungsform umfasst die Software-Anwendung Plattenverschlüsselungs-Software.
-
In mindestens einer Ausführungsform umfasst ein System: Mittel zum Generieren eines ersten kryptografischen Schlüssels durch einen ersten Prozessor und Liefern des ersten kryptografischen Schlüssels an einen zweiten Prozessor; Mittel zum Zugreifen auf einen verschlüsselten zweiten kryptografischen Schlüssel, der von dem zweiten Prozessor generiert wird, wobei der verschlüsselte zweite kryptografische Schlüssel unter Verwendung des ersten kryptografischen Schlüssels verschlüsselt wird; und Mittel zum Ausführen eines Instruktionssatzes, der den verschlüsselten zweiten kryptografischen Schlüssel bezeichnet. In einer Ausführungsform umfasst das System ferner Mittel zum Entschlüsseln, durch den ersten Prozessor, des verschlüsselten zweiten kryptografischen Schlüssels unter Verwendung des ersten kryptografischen Schlüssels. In einer Ausführungsform umfasst das System ferner Mittel zum Ausführen der Instruktion, indem eine kryptografische Operation an Daten vorgenommen wird, die von der Instruktion bezeichnet werden, wobei die kryptografische Operation unter Verwendung des zweiten kryptografischen Schlüssels vorgenommen wird. In einer Ausführungsform umfasst das System ferner: Mittel zum Verschlüsseln des ersten kryptografischen Schlüssels unter Verwendung eines dritten kryptografischen Schlüssels, der von dem ersten Prozessor und dem zweiten Prozessor gespeichert wird; und Mittel zum Liefern des ersten kryptografischen Schlüssels an den zweiten Prozessor durch Liefern des verschlüsselten ersten kryptografischen Schlüssels. In einer Ausführungsform wird der erste Prozessor zur Zeit der Herstellung des ersten Prozessors mit dem dritten kryptografischen Schlüssel versehen.
-
In mindestens einer Ausführungsform umfasst ein System: Mittel zum Generieren, durch einen ersten Prozessor, eines ersten kryptografischen Schlüssels ansprechend auf eine Anforderung von einer Software-Anwendung; Mittel zum Empfangen eines zweiten kryptografischen Schlüssels, der von einem zweiten Prozessor generiert wird; Mittel zum Verschlüsseln des ersten kryptografischen Schlüssels unter Verwendung des zweiten kryptografischen Schlüssels; und Mittel zum Liefern des verschlüsselten ersten kryptografischen Schlüssels für die Verwendung durch die Software-Anwendung.
-
In einer Ausführungsform umfasst das System ferner: Mittel zum Verschlüsseln des ersten kryptografischen Schlüssels unter Verwendung eines Root-Speicherschlüssels des ersten Prozessors; und Mittel zum Entschlüsseln des ersten kryptografischen Schlüssels unter Verwendung des Root-Speicherschlüssels vor dem Verschlüsseln des ersten kryptografischen Schlüssels unter Verwendung des zweiten kryptografischen Schlüssels. In einer Ausführungsform umfasst das System ferner: Mittel zum Liefern des verschlüsselten ersten kryptografischen Schlüssels an den zweiten Prozessor, und Mittel zum Entschlüsseln, durch den zweiten Prozessor, des ersten kryptografischen Schlüssels und Verwenden des ersten kryptografischen Schlüssels, um eine kryptografische Operation vorzunehmen, die von der Software-Anwendung angefordert wird. In einer Ausführungsform umfasst das System ferner: Mittel zum Empfangen, durch den ersten Prozessor, des zweiten kryptografischen Schlüssels in einem verschlüsselten Format von dem zweiten Prozessor, und Mittel zum Entschlüsseln des zweiten kryptografischen Schlüssels unter Verwendung eines dritten kryptografischen Schlüssels, der von dem ersten Prozessor und dem zweiten Prozessor gespeichert wird. In einer Ausführungsform umfasst das System ferner: Mittel zum Empfangen, durch den ersten Prozessor, des dritten kryptografischen Schlüssels in einem verschlüsselten Format und Entschlüsseln des dritten kryptografischen Schlüssels unter Verwendung eines vierten kryptografischen Schlüssels. In einer Ausführungsform wird der zweite Prozessor mit dem dritten kryptografischen Schlüssel zu einer Zeit der Herstellung des zweiten Prozessors versehen. In einer Ausführungsform weist die Anforderung von der Software-Anwendung mindestens eine Strategie auf, die verhindert, dass der erste kryptografische Schlüssel von dem ersten Prozessor in einem nicht-verschlüsselten Format gesendet wird. In einer Ausführungsform umfasst das System ferner Mittel zum Liefern des zweiten kryptografischen Schlüssels durch den ersten Prozessor an den zweiten Prozessor ansprechend darauf, dass der zweite Prozessor einen aktivierten Zustand wiederaufnimmt. In einer Ausführungsform ist der erste Prozessor ein Trusted Platform-Modul und der zweite Prozessor ist eine Zentraleinheit. In einer Ausführungsform umfasst das System ferner Mittel zum Empfangen, durch den ersten Prozessor, des zweiten kryptografischen Schlüssels über einen Seitenbandebus, der zwischen dem ersten Prozessor und dem zweiten Prozessor gekoppelt ist.
-
In mindestens einer Ausführungsform umfasst eine Vorrichtung: eine Zentraleinheit, die einen Hardware-Schlüssel umfasst; einen Schlüsselgenerator, um einen Wrapping-Schlüssel zu generieren; und eine Verschlüsselungsmaschine, um: den Hardware-Schlüssel zu verschlüsseln, um einen verschlüsselten Hardware-Schlüssel zu generieren; und den Wrapping-Schlüssel unter Verwendung des Hardware-Schlüssels zu verschlüsseln, um einen verschlüsselten Wrapping-Schlüssel zu generieren; wobei die Zentraleinheit den verschlüsselten Wrapping-Schlüssel und den verschlüsselten Hardware-Schlüssel an einen Sicherheitsprozessor zu liefern hat.
-
In einer Ausführungsform hat die Zentraleinheit auf einen verschlüsselten kryptografischen Schlüssel zuzugreifen, um eine Instruktion auszuführen, die den verschlüsselten kryptografischen Schlüssel bezeichnet, wobei der verschlüsselte kryptografische Schlüssel einen kryptografischen Schlüssel umfasst, der von dem Sicherheitsprozessor generiert wird und von dem Sicherheitsprozessor unter Verwendung des Wrapping-Schlüssels verschlüsselt wird. In einer Ausführungsform hat die Zentraleinheit den verschlüsselten kryptografischen Schlüssel unter Verwendung des Wrapping-Schlüssels zu entschlüsseln. In einer Ausführungsform hat die Zentraleinheit die Instruktion auszuführen, indem eine kryptografische Operation an Daten vorgenommen wird, die von der Instruktion bezeichnet werden, wobei die kryptografische Operation unter Verwendung des kryptografischen Schlüssels vorgenommen wird. In einer Ausführungsform hat die Zentraleinheit den Wrapping-Schlüssel ansprechend auf ein Booten der Zentraleinheit zu generieren.
-
In dieser gesamten Beschreibung bedeutet die Bezugnahme auf „eine Ausführungsform“ oder „eine einzelne Ausführungsform“, dass ein bestimmtes Merkmal, eine Struktur oder eine Charakteristik, die in Verbindung mit der Ausführungsform beschrieben werden, in wenigstens einer Ausführungsform der vorliegenden Offenbarung enthalten ist. Somit beziehen sich nicht alle Fälle der Ausdrücke „in einer Ausführungsform“ oder „in einer einzelnen Ausführungsform“ an verschiedenen Stellen in dieser gesamten Beschreibung unbedingt auf dieselbe Ausführungsform. Ferner können die bestimmten Merkmale, Strukturen oder Charakteristiken auf irgendeine geeignete Weise in einer oder mehreren Ausführungsformen kombiniert werden.
-
In der obigen Beschreibung erfolgte eine detaillierte Darstellung mit Bezugnahme auf spezifische Beispiele von Ausführungsformen. Es ist jedoch klar, dass verschiedene Modifikationen und Änderungen daran vorgenommen werden können, ohne vom breiteren Grundgedanken und Umfang der Offenbarung abzuweichen, wie in den beigeschlossenen Ansprüchen ausgeführt. Die Beschreibung und die Zeichnungen sind demgemäß als Veranschaulichung anstatt als Einschränkung anzusehen. Ferner bezieht sich die obige Verwendung einer Ausführungsform und anderer beispielhafter Sprache nicht unbedingt auf dieselbe Ausführungsform oder dasselbe Beispiel, sondern kann sich auf verschiedene und getrennte Ausführungsformen sowie potentiell auf dieselbe Ausführungsform beziehen.