-
Die
vorliegende Erfindung bezieht sich auf einen Mikroprozessor, der
in der Lage ist, eine illegale Änderung
von Ausführungs-Codes
zu verhindern und Zieldaten unter einer Multi-Task-Programmausführungs-Umgebung
zu verarbeiten.
-
Ein
offenes System, in dem Hardware-Informationen eines Computers zur
allgemeinen Verwendung, wie etwa einem PC, und System-Programminformationen
des Betriebssystems (BS) eher offenbart als verborgen sind, wird
heute breit verwendet. Im offenen System kann der Endanwender jegliche
gewünschte
Verbesserung durch Modifizieren des Systemprogramms vornehmen.
-
Unter
solchen Umständen
gibt es, um den Urheberschutz für
von Anwendungsprogrammen gehandhabten Daten oder den Urheber-Rechtsschutz für Programme
selbst zu garantieren, einen Bedarf an Hardware mit einer Geheimnisschutzfähigkeit,
die auf der Annahme basiert, dass das BS des Systems bösartige
Vorgänge
in Bezug auf Applikationen ausführen
kann. Solche Hardware mit einer Geheimnisschutzfähigkeit ist insbesondere in
Form eines Mikroprozessors vorgeschlagen worden (siehe gemeinsam
zugewiesene mitanhängige
US-Patente US-2001/0018736 und US-2001/0014157 und Lie et al., "Architectural Support
for Copy and Tamer Resistant Software", Computer Architecture News 28(5), Seite
168 ff.).
-
Solch
ein Mikroprozessor mit einer Geheimnisschutzfähigkeit hat eine Funktion zum
Verschlüsseln
eines Programms und von Daten, die von diesem Programm unter der
Multi-Task-Umgebung gehandhabt werden, um sie vor Ausspionieren
und Änderung
zu schützen.
Nachfolgend wird ein solcher Mikroprozessor als ein fälschungs-resistenter
Mikroprozessor bezeichnet.
-
Der
Hauptzweck des fälschungsresistenten Mikroprozessors
ist es, die Rechte des Urheberrechts-Inhabers von Programmen, Inhalten
und Netzwerkdiensten durch Schützen
von auf dem Endanwender-System betriebenen Anwendungen zu schützen. Spezifischer
sind die drei Hauptbedenken (1) Schutz von in Programmen implementierten
Algorithmen, (2) Schutz von Betriebsgeheimnissen und in Programmen
eingebetteten Inhalten und (3) Schutz der Programm-Operationen vor Änderung.
-
Der
Schutz von in Programmen implementierten Algorithmen ist notwendig,
um die Urheberrechts-Inhaber der Programme zu schützen. Der Schutz
der in Programmen eingebetteten Handelsgeheimnisse ist notwendig,
um illegale Kopien von durch die Programme gehandhabten Inhalten
zu verhindern. Der Schutz vor illegaler Änderung ist notwendig, um beispielsweise
die Rechte von Diensteanbietern zu schützen.
-
Bei
einer Anwendung, in der ein Programm, welches einen Netzwerkdienst
nutzt oder eine Gebühreninformation
mit einem Server austauscht, ist es besonders wichtig, die illegale Änderung
zu verhindern, so dass die Gebühreninformations-Übertragungsoperation korrekt
ausgeführt
wird. Als praktisches Beispiel ist es bekannt, dass ein Programm zum
Reproduzieren von DVDs auf einem PC analysiert worden ist, um das
Betriebsgeheimnis zum Entschlüsseln
der DVD-Verschlüsselung
zu erhalten und es wurde ein Programm (DeCSS) zum illegalen Kopieren
von DVDs erstellt.
-
Im
offenen System sind Mechanismen zum einfachen Schützen von
Geheimnissen von Anwendungsprogrammen konventioneller Weise vorgeschlagen
worden und die folgenden Erfinder haben eine Schutzumgebung zum
Schützen
von Geheimnissen unabhängig
vom Betriebssystem, welches die Systemressourcen verwaltet, für jedes
aus einer Mehrzahl von Programmen (Programme von einer Mehrzahl
unterschiedlicher Programmanbieter oder einer Mehrzahl von unterschiedlichen
Programmen eines einzelnen Anbieters), die in einer pseudo-parallelen
Weise auf einem einzelnen System auszuführen sind (siehe gemeinsam
zugewiesene, mitanhängige
US-Patente US-2001/0018736, US-2001/0014157,
US-2002/0051536, US-2002/0101995 beispielsweise) vorgeschlagen. Solch
eine Schutzumgebung wird als eine "Mehrparteien-Anwendungsschutzumgebung" bezeichnet.
-
18 zeigt
allgemein eine Mehrparteien-Anwendungsschutzumgebung.
In 18 wird ein beispielhafter Fall, in dem ein Anwender 12 ein
Programm von einem Anbieter 1 21-1 aus einer Mehrzahl von
Softwareanbietern 21-1 bis 21-n erwirbt, betrachtet.
Ein System 2, das vom Anwender 12 verwendet wird,
hat einen eingebauten Mikroprozessor und dieser Prozessor-A 3 hat
einen Geheimschlüssel-A 5,
für diesen
Prozessor eindeutig ist. Ein öffentlicher
Schlüssel-A 13 entsprechend
dem Geheimschlüssel-A
ist der Öffentlichkeit
offenbart.
-
Der
Softwareanbieter 1 entwickelt ein Programm 22-1, wählt einen
Programmschlüssel-1 24-1 als
einen Verschlüsselungsschlüssel aus
und erstellte ein verschlüsseltes
Programm 23-1 durch Verschlüsseln eines Klartextprogramms 22-1.
Dann stellt der Softwareanbieter 1 einen Verteilungsschlüssel 1 25-1 durch
Verschlüsseln
des Programmschlüssels-1
unter Verwendung des öffentlichen
Schlüssels-A,
der für
den Prozessor-A eines Distributions-Zielsystems 2 eindeutig ist,
her.
-
Obwohl
in der Figur nicht gezeigt, entwickelt der Softwareanbieter 1 auch
eine Mehrzahl von unterschiedlichen Programmen neben dem Programm 22-1,
wählt Programmschlüssel für entsprechende Programme
und stellt verschlüsselte
Programme und Distributionsschlüssel
her. Zur Erläuterung
wird hier nur ein einzelnes Programm beschrieben.
-
Der
Softwareanbieter 1 liefert das verschlüsselte Programm 23-1 und
den verschlüsselten
Distributionsschlüssel 25-1 über ein
Netzwerk an das Zielsystem 2. Das gelieferte Programm 23-1 und
der Verteilungsschlüssel 25-1 werden
in einem Sekundärspeicher
(beispielsweise einer Festplatte) des Systems gespeichert. Das Programm 23-1 führt Ausführungs-Code
und Daten (Initialisierungsdaten etc.) aus und zum Zeitpunkt der
Ausführung
werden sie in verschlüsseltem
Zustand zu einem externen Speicher 8 ausgelesen, der außerhalb
des Mikroprozessors 3 vorgesehen ist. Das verschlüsselte Programm im
externen Speicher 8 wird als ein geschütztes Programm bezeichnet.
-
Der
Mikroprozessor-A liest den Verteilungsschlüssel 25-1 und entschlüsselt ihn
unter Verwendung des Geheimschlüssels-A
entsprechend einem öffentlichen
Schlüssel-A,
um den Programmschlüssel-1
zu erhalten. Die Schlüssel-Entschlüsselungsverarbeitung
wird in einer Schutzlogik 6 innerhalb des Mikroprozessors
durchgeführt.
-
Als
nächstes
entschlüsselt
der Mikroprozessor-A das Programm 1 unter Verwendung des Programmschlüssels-1
und liest es in einen Cachespeicher 4 ein. Die Entschlüsselung
und das Einlesen in den Cachespeicher 4 wird durch einen
vorgegebenen Cache-Algorithmus gemäß der Ausführung des Programms für jeden
Teil separat realisiert, so dass nicht das gesamte Programm gleichzeitig
in den Cachespeicher 4 eingelesen wird. Das in den Cachespeicher 4 eingelesene
Programm ist im Klartext-Zustand, so dass es im Kern 6 ähnlich wie
die üblichen nicht
verschlüsselten
Programme ausgeführt
wird. Ein Teil zum Handhaben des Programmschlüssels-1 und des Klartext-Programmes wird durch
den Kern 6 des Prozessors-A ausgeführt und es gibt für das BS keinen
Raum zu einer Intervention. Die Inhalte des Cachespeichers 4 und
der im Mikroprozessor bereitgestellte Geheimschlüssel 5 können nicht
direkt von außen
ausgelesen werden, außer
hinsichtlich der von der Prozessor-Spezifikation definierten Operationen.
-
Man
beachte, dass, obwohl in der Figur nicht gezeigt, für die im
Cachespeicher 4 gespeicherte Klartext-Information ein Identifizierer
zum Identifizieren des beim Entschlüsseln dieser Klartext-Information
verwendeten Verschlüsselungs-Schlüssels an jede
Zeile des Cachespeicher s4 angehängt
ist, um zu garantieren, dass das Geheimnis unabhängig zwischen Programmen aufrecht
erhalten wird, selbst wenn der Anwender eine Mehrzahl unterschiedlicher Programme
von einer Mehrzahl von Programmanbietern 21-1 bis 21-n erwirbt.
Die Programmschlüssel sind
für unterschiedliche
Programme unterschiedlicher Programmanbieter unterschiedlich, so
dass die Unabhängigkeit
des Programms durch Einstellen einer Task der Cache-Linie und des
zu seiner Verschlüsselung
verwendeten Schlüssels
entsprechend garantiert wird.
-
Nunmehr
sind die durch die vorliegende Erfindung zu lösenden Probleme wie folgt:
- (1) Um die Task-Identifikations-Funktion zu
realisieren, gibt es die Notwendigkeit, eine Tabelle zum Halten
des Programmschlüssels
jeden Programms entsprechend der Task-ID innerhalb des Prozessors
zu haben. Die Einrichtung einer solchen Tabelle wird vom BS, welches
das System verwaltet, angewiesen, so dass es einen Bedarf daran
gibt, eine Funktion zum Betreiben der Tabelle aus dem BS-Programm
bereitzustellen. Diese Tabellen-Betriebsfunktion muss offensichtlich die
Anforderung an Geheimnisschutz erfüllen.
-
Auch
spielt die Task-korrespondierende Schlüsseltabelle eine zentrale Rolle
beim Geheimnisschutz, aber es ist aufgrund der Begrenztheit von Ressourcen
unter Erwägung
der Kosten unmöglich, die
Kapazität
der Tabelle unbegrenzt zu vergrößern. Aus
diesem Grund muss, welche Programme mit den Einträgen der
Tabelle alloziert werden sollten und wie die Einträge wiederverwendet
werden sollen, vom BS gemäß der Absicht
des Systemanwenders verwaltet werden.
-
Solche
Operationen des BS bergen die Möglichkeit
des Einführens
eines Defektes in den Geheimnisschutz. Man nehme beispielsweise
an, dass in einem Zustand, wo die Task-ID #1 einem Programmschlüssel X zugewiesen
ist, das BS dieselbe Task-ID #1 einem anderen Programmschlüssel Y realloziert.
In diesem Fall können,
falls die Cache-Linie, welcher der Tag der Task-ID #1 zugewiesen
ist, im Cache-Speicher bleibt, diese Daten von dem Programm das
mit dem Programmschlüssel
Y korrespondiert, ausgelesen werden. Dies verletzt das Prinzip des
Geheimnisschutzes.
-
Somit
ist das erste zu lösende
Problem die Bereitstellung einer Task-Zustandsverwaltung und Tabellenverwaltungs-Mechanismus zum Verhindern einer
solchen Verletzung.
- (2) Es gibt zwei Arten
von Programm-Verschlüsselungsverfahren,
einschließlich
eines Verfahrens, bei dem die Entschlüsselungsverarbeitung in Einheiten
von Cache-Linien abgeschlossen wird und eines Verfahrens, in dem
Daten in einer Mehrzahl von Cache-Linien für die Entschlüsselung
einer Cache-Linie notwendig sind. Das erstere Verfahren beeinflusst
die Speicherkapazität und
den Austausch von Einheiten von Linien nicht, aber das letztere
Verfahren ist mit den folgenden Problemen assoziiert.
-
Bei
dem Verfahren, bei dem Daten einer Mehrzahl von Cache-Linien für die Entschlüsselung einer
Cache-Linie erforderlich sind, gibt es, wenn der Wahlfreizugriff
auf den Speicher auftritt, eine Notwendigkeit, die Speicherbereiche
vor und hinter den erforderlichen Speicherbereichen auszulesen.
Aus diesem Grund wird ein großer
Overhead verursacht.
-
Auch
gibt es, da das Entschlüsselungsergebnis
von Daten der benachbarten Linien abhängt, die Möglichkeit einer so genannten
Block-Austausch-Attacke. Die Block-Austausch-Attacke ist eine Attacke, bei der ein
Angreifer in geeigneter Weise die gemäß demselben Geheimnis verschlüsselten
Blockinformationen so austauscht, dass der Systemzustand gemäß der Absicht
des Angreifers geändert wird.
Man nehme beispielsweise an, dass der Angreifer herausfindet, dass
eine an einer Adresse X angeordnete Linie P ein Bereich entsprechend
einer Gebührenoperation
ist, aus dem Timing der Kommunikation oder dergleichen. Mann nehme
dann an, dass der Angreifer auch weiß, dass der vom Programm bereitgestellte
Dienst nicht nachteilig beeinträchtigt ist,
selbst wenn eine andere Linie Q, die unter Verwendung desselben
Programmschlüssels
verschlüsselt
ist, ausgeführt
wird. Wenn in diesem Fall die Linie P durch die Linie Q ersetzt
wird, kann der Angreifer nur dem Gebührenberechnen entgehen, ohne
den Dienst des Programmes zu beeinträchtigen. Eine ähnliche
Attacke ist auch auf von dem Programm gehandhabten Daten anwendbar.
-
Das
obige Problem kann gelöst
werden, falls jedem Block ein getrennter Schlüssel gegeben wird, aber falls
der getrennte Verschlüsselungsschlüssel für jeden
Block im Verteilungsschlüssel
gespeichert wird, wird der Algorithmus zum Verschlüsseln des Verteilungsschlüssels unter
Verwendung des öffentlichen
Schlüssels
enorm und verursacht einen Overhead in der Entschlüsselungs-Verarbeitung.
Auch ergibt sich die Notwendigkeit, eine Tabelle mit einer enormen
Kapazität
zum Verwalten solcher Schlüssel innerhalb
des Mikroprozessors vorzusehen, so dass es vom Standpunkt der Schlüsselverteilung
und der Verwaltungskosten nicht praktisch ist.
-
Zusätzlich muss
das allgemeine Programm nicht notwendigerweise immer eine vorgegebene Adresse
aufweisen, an der es angeordnet werden muss, und die Adresse, an
der es anzuordnen ist, kann abhängig
von einer Konfiguration des Zielsystemes (Konfiguration der Bibliothek
und des gemeinsamen Speichers, der mit anderen Programmen zu teilen
ist) verändert
werden. Dies wird Relokation genannt. Im Falle des Ausführens der
Verschlüsselung für jeden
Block muss das Problem der Relokation berücksichtigt werden.
-
Somit
ist das zweite zu lösende
Problem die Bereitstellung eines Mikroprozessors, der einen kleinen
Verarbeitungs-Overhead
aufweist, der den Datenaustausch-Angriff schwierig macht und der
eine Geheimnis-Informationsverwaltungs-Fähigkeit
aufweist, welche die Relokation berücksichtigt.
- (3)
Drei Elemente, die die Applikation bilden, sind ein Programm (Ausführungs-Codes),
Daten und Kontext-Informationen,
aber diese werden innerhalb des Prozessors unterschiedlich gehandhabt. Die
Ausführungs-Codes
und die Daten umfassen den Hauptkörper des Programmes, während der Kontext
eine Zustandsinformation ist, die in einem Speicher für den Zweck
der Wiederaufnahme der Task zu speichern ist, nachdem die Ausführung der
Task unterbrochen wird.
-
Im
Allgemeinen wird das Programm innerhalb des Mikroprozessors nicht
ungeschrieben, aber wenn Daten im Cache verändert werden, werden die Daten
zum externen Speicher zurückgeschrieben.
-
Auch
werden auf Programm und Daten in Einheiten von Cache-Linien zugegriffen,
aber die Kontext-Information nimmt oft eine Größe an, die nicht in einer einzelnen
Cache-Linie gespeichert werden kann. Zu einem Zeitpunkt des Kontext-Umschaltens werden
Informationen über
eine Mehrzahl von Cache-Linien kollektiv gelesen oder geschrieben.
-
Beim
Austauschen dieser Informationen mit unterschiedlichen Eigenschaften
mit dem externen Speicher werden getrennte Verschlüsselungs-Verarbeitungen
erforderlich sein, aber es wird auch eine Senkung der Hardwarekosten
verlangt.
-
Somit
ist das dritte zu lösende
Problem die Bereitstellung eines Mikroprozessors, welcher dieselbe
Verschlüsselungs-Verarbeitungs-Hardware
für diese
Informationen gemeinsam verwenden kann.
-
US 5 666 411 bezieht sich
auf ein System zum Schützen
von proprietärer
Software vor Offenbarung und unautorisierter Verwendung, das einen Krypto-Prozessor
enthält,
der geschützte
Programme rechiffrieren kann.
-
US 5 805 711 bezieht sich
auf ein Verfahren zum Sichern von Daten und Programm-Code einer elektronischen
Frankiermaschine.
-
Gemäß einem
Aspekt der vorliegenden Erfindung wird ein Mikroprozessor bereitgestellt,
der umfasst: Eine Task-Zustandstabelle,
die dafür
konfiguriert ist, einen Task-Identifizierer
einer Task zuzuweisen, die irgendeinen aus einer Mehrzahl von Zuständen annehmen
kann, und der Task entsprechend dem Task-Identifizierer einen Zustand
zuzuweisen; ein Task-Register, das dafür konfiguriert ist, den Task-Identifizierer
der aktuell ausgeführten
Task zu speichern; eine Schnittstelle, die dafür konfiguriert ist, ein Programm
in Einheiten von Cache-Linien auszulesen, wenn eine Anforderung
bezüglich
der Task gemacht wird, wobei das Programm in einer verschlüsselten
Form gespeichert wird, die durch Verwenden eines Programmschlüssels auf
einem externen Speicher erhalten wird; eine Verschlüsselungs-Verarbeitungs-Einheit, die dafür konfiguriert
ist, Entschlüsselungs-Schlüssel zu
erzeugen, die für
unterschiedliche Cache-Linien unterschiedlich sind, gemäß dem Programmschlüssel, und
einen von der Schnittstelle eingelesenen Inhalt zu entschlüsseln; einen
von einer Mehrzahl von Cache-Linien gebildeten Cache-Speicher, wobei jede
Cache-Linie einen „Tag" aufweist und dafür konfiguriert
ist, den Task-Identifizierer zu speichern, der einen beim Entschlüsseln jeder
Cache-Linie im „Tag" jeder Cache-Linie
verwendeten Entschlüsselungs-Schlüssel entspricht;
und eine Zugriffs-Prüfeinheit,
die dafür konfiguriert
ist, den im Tag jeder Cache-Linie gespeicherten Task-Identifizierer
mit einem Wert des Task-Registers zu vergleichen und einen Inhalt
jeder Cache-Linie zu verwerfen, wenn der Task-Identifizierer im
Tag und der Wert des Task-Registers
nicht übereinstimmen.
-
Gemäß einem
anderen Aspekt der vorliegenden Erfindung wird ein Verschlüsselungs-Verarbeitungs-Verfahren
bereitgestellt, welches umfasst: Speichern eines Task-Identifizierers
einer aktuell ausgeführten
Task in einem Task-ID-Register; Lesen eines in verschlüsselter
Form gespeicherten Programms, bei dem das Programm in Einheiten
von Blöcken
in einem externen Speicher verschlüsselt ist, in Einheiten von
Cache-Linien, wenn eine Anforderung nach einer Task gestellt wird,
um die Task auszuführen;
Speichern eines Identifizierers einer angeforderten Task in einem
vorgegebenen Bereich einer Cache-Linie;
Vergleichen des in jeder Cache-Linie gespeicherten Task-Identifizierers
mit dem im Task-ID-Register gespeicherten Task-Identifizierer; und
Entschlüsseln
eines durch den Einleseschritt eingelesenen Inhalt, wenn der in
jeder Cache-Linie gespeicherte Task-Identifizierer mit dem im Task-ID-Register
gespeicherten Task-Identifizierer übereinstimmt.
-
Die
vorliegende Erfindung kann entweder in Hardware oder als Software
in einem Universal-Computer implementiert werden. Weiterhin kann
die vorliegende Erfindung mit einer Kombination von Hardware und
Software implementiert werden. Die vorliegende Erfindung kann auch
durch eine Einzelverarbeitungs-Apparatur oder ein verteiltes Netzwerk
von Verarbeitungs-Apparaturen implementiert werden.
-
Da
die vorliegende Erfindung durch Software implementiert werden kann,
umfasst die vorliegende Erfindung Computer-Code, der einem Universal-Computer
auf jedem geeigneten Träger-Medium bereitgestellt
wird. Das Träger-Medium
kann jegliches Speicher-Medium umfassen, wie etwa eine Floppy-Disk,
eine CD-ROM, eine
Magnetvorrichtung oder eine programmierbare Speichervorrichtung oder
jegliches transientes Medium, wie etwa jegliches Signal, z. B. ein
elektrisches, optisches oder Mikrowellen-Signal.
-
Andere
Merkmale und Vorteile der vorliegenden Erfindung werden aus der
nachfolgenden Beschreibung in Verbindung mit den beigefügten Zeichnungen
ersichtlich.
-
1 ist
ein Blockdiagramm, welches eine Mehrparteien-Anwendungs-Schutzumgebung unter Verwendung
eines Mikroprozessors gemäß einer Ausführungsform
der vorliegenden Erfindung zeigt.
-
2 ist
ein Blockdiagramm, welches eine beispielhafte Ausführungsform
eines Mikroprozessors gemäß einer
Ausführungsform
der vorliegenden Erfindung zeigt.
-
3 ist
Diagramm, welches eine Block-entsprechende Verschlüsselungs-Schlüsselerzeugungs-Prozedur
in der Mehrparteien-Anwendungsschutzumgebung von 1 zeigt.
-
4 ist
ein Diagramm, welches Konfigurationen eines Informations-Anordnungs-Deskriptors und
eines Verteilungsschlüssels
und einer Speicher-Map eines in einer Ausführungsform der vorliegenden
Erfindung verwendeten virtuellen Adressraums zeigt.
-
5 ist
eine Tabelle, die Beispiele von Task-Steuerbefehlen zeigt, die in einer Ausführungsform
der vorliegenden Erfindung verwendet werden können.
-
6 ist
ein Diagramm, das beispielhafte Task-Zustandsübergänge gemäß einer Ausführungsform
der vorliegenden Erfindung zeigt.
-
7 ist
ein Blockdiagramm, das Task-Registrierungs-Operationen im Mikroprozessor von 2 zeigt.
-
8 ist
Flussdiagramm, das eine Task-Registrierungs-Verarbeitungsprozedur im Mikroprozessor
von 2 zeigt.
-
9 ist
Blockdiagramm, das eine Konfiguration eines Instruktions-Caches
im Mikroprozessor von 2 zeigt.
-
10 ist
ein Blockdiagramm, das Konfigurationen einer Schlüsselwert-Tabelle
und eines Schnell-Verschlüsselungs-Schlüsselverarbeitungs-Moduls
im Mikroprozessor von 2 zeigt.
-
11 ist
Blockdiagramm, das eine Konfiguration eines Daten-Caches im Mikroprozessor
von 2 zeigt.
-
12 ist
ein Flussdiagramm, das eine Task-Ausführ-Startverarbeitungs-Prozedur im Mikroprozessor
von 2 zeigt.
-
13 ist
ein Flussdiagramm, das eine Verarbeitungsprozedur zum Einlesen eines
Instruktions-Caches in dem Mikroprozessor von 2 zeigt.
-
14 ist
ein Diagramm, das eine Datenstruktur innerhalb eines Daten-Caches
im Mikroprozessor von 2 zeigt.
-
15 ist
ein Flussdiagramm, das eine Verarbeitungsprozedur zum Speichern
eines Task-Zustands
im Mikroprozessor von 2 zeigt.
-
16 ist
ein Flussdiagramm, das eine Verarbeitungsprozedur zur Wiederaufnahme
einer unterbrochenen Task im Mikroprozessor von 2 zeigt.
-
17 ist
ein Flussdiagramm, das eine Task-Beendigungs-(Lösch-)Verarbeitungsprozedur im
Mikroprozessor von 2 zeigt.
-
18 ist
ein Blockdiagramm, das eine konventionelle Mehrparteien-Anwendungsschutzumgebung
zeigt.
-
Zuerst
werden die Hauptmerkmale der vorliegenden Erfindung kurz beschrieben.
-
Um
das erste Problem zu lösen,
werden der tatsächlich
in der Cache-Linie gespeicherte Task-Identifizierer und der durch
das BS zugewiesene Task-Identifizierer verglichen und der Zugriff
auf die Cache-Linie wird nur gestattet, wenn sie übereinstimmen,
während
der Inhalt der Cache-Linie verworfen wird, wenn sie nicht übereinstimmen.
-
Um
dies zu realisieren, weist der Mikroprozessor eine Task-Zustandstabelle zum
Zuweisen eines Identifizierers an die Task auf, die eine Mehrzahl von
Zuständen
annehmen kann, und zum Aufrechterhalten eines Zustands der Task
entsprechend dem Task-Identifizierer, ein Task-Register zum Halten
des aktuell ausgeführten
Task-Identifizierers, eine Schnittstelle zum Einlesen in Einheiten
von Cache-Linien des in verschlüsseltem
Zustand gespeicherten Programms unter Verwendung eines vorgegebenen
Programmschlüssels
im externen Speicher, wenn es eine Anforderung bezüglich der
Task gibt, eine Verschlüsselungs-Verarbeitungs-Einheit
zum Erzeugen eines Entschlüsselungsschlüssels für jede Cache-Linie
gemäß dem Programmschlüssel und zum
Entschlüsseln
des von der Schnittstelle gelesenen Inhalts, einen ersten von einer
Mehrzahl von Cache-Linien mit entsprechendem Text zum Halten eines
Task-Identifizierers gebildeten ersten Cache-Speicher, entsprechend
dem beim Entschlüsseln
der Cache-Linie im Tag verwendeten Entschlüsselungsschlüssel und
eine Zugriffs-Verifikations-Einheit
zum Vergleichen des im Tag der Cache- Linie gehaltenen Task-Identifizierers
und des Werts des Task-Registers
und Verwerfen des Inhalts der Cache-Linie, wenn diese Werte nicht übereinstimmen.
-
Um
das zweite Problem zu lösen,
wird es ermöglicht,
die Entschlüsselung
unter Verwendung von Schlüsseln
auszuführen,
die für
unterschiedliche Blöcke
unterschiedlich sind, anhand einer kleinen Menge an Geheimnissen.
-
Um
dies zu realisieren, wird der Mikroprozessor mit dem Folgenden versehen.
- (a) Einem Prozessorkern, der eine Leseanforderung
durch Spezifizieren einer Adresse des externen Speichers, der eine
Mehrzahl von Programmen speichert, die jeweils gemäß den einmaligen Programmschlüsseln verschlüsselt sind,
erteilt;
- (b) eine Schnittstelle zum Lesen eines Datenblocks der spezifizierten
Adresse des externen Speichers in Reaktion auf die Leseanforderung des
Prozessorkerns;
- (c) eine Task-Schlüsseltabelle
zum Halten des Programmschlüssels,
korrspondierend dem jeder Task zugewiesenen Task-Identifizierer,
der eine Einheit der Programmablaufsteuerung ist;
- (d) eine Offset-Tabelle zum Halten einer Anfangs-Adresse, an
der ein Programm als ein Offset-Wert angeordnet ist, für jeden
Task-Identifizierer;
- (e) eine Schlüsselerzeugungs-Einheit
zum Berechnen eines relativen Adresswertes aus der durch die Leseanforderung
spezifizierten Adresse und dem vom Task-Identifizierer der Offset-Tabelle
spezifizierten Offset-Wert und Erzeugen eines Blockentsprechungsschlüssels, in
dem der relative Adresswert unter Verwendung des Programmschlüssels verschlüsselt ist;
- (f) eine Verschlüsselungs-Verarbeitungs-Einheit zum
Entschlüsseln
des ausgelesenen Datenblocks unter Verwendung des Blockentsprechungsschlüssels;
- (g) einen Cache-Speicher, in dem der entschlüsselte Datenblock in Einheiten
von Cache-Linien gelesen wird.
-
Auch
werden zu einem Zeitpunkt der Task-Ausführungsunterbrechung
die physischen Adressen, an denen das Programm und die Daten angeordnet
sind, oft vom System-Ressourcen-Management
geändert
(Relokation) und um das in Einheiten von Blöcken verschlüsselte Programm
zu entschlüsseln
und normal auszuführen,
gibt es einen Bedarf daran, dass die Informationen in einem gewissen
Adressraum angeordnet wird. Aus diesem Grund wird im Falle der Berechnung
der relativen Adresse eine virtuelle Adresse verwendet, die als
Differenz zwischen der Zieladresse und der Programm-Startadresse
ausgedrückt
wird (Offset-Adresse).
-
Auf
diese Weise kann der Blockaustausch effektiv verhindert werden und
der beschränkte
physische Speicher kann effizient eingesetzt werden.
-
Um
das dritte Problem zu lösen,
wird der Mikroprozessor mit dem Folgenden versehen:
- (a) einer Schnittstelle zum Auslesen in Einheiten von Cache-Linien des Ausführungs-Codes
und der Daten des Programm-Codes,
die in verschlüsseltem
Zustand im externen Speicher gespeichert sind;
- (b) einem ersten Cache mit einer Offset-Tabelle zum Halten des
Offset-Wertes, der die Programm-Startadresse ist, zum Halten des
Ausführungs-Codes
im Klartext-Zustand in jeder Cache-Linie;
- (c) einem zweiten Cache mit einem Adressbereichs-Register, der
einen Adressbereich der Daten hält,
um die Daten im Klartext-Zustand in jeder Cache-Linie zu halten;
- (d) einem mit dem ersten und zweiten Cache durch einen gemeinsamen
Bus verbundene Schlüsselwert-Tabelle
zum Halten des beim Verschlüsseln
des Programms verwendeten Verschlüsselungsschlüssels;
- (e) eine mit dem ersten und zweiten Cache und der Schlüsselwert-Tabelle
durch einen gemeinsamen Bus verbundene Verschlüsselungs-Verarbeitungs-Einheit
zum Empfangen des Verschlüsselungsschlüssels und
des Offset-Werts aus der Schlüsselwert-Tabelle
bzw. dem ersten Cache, Entschlüsseln
des Ausführungs-Codes
anhand des Verschlüsselungsschlüssels und
des Offset-Werts und Überführen in
den ersten Cache, Empfangen des Verschlüsselungsschlüssels und des
Adressbereichs aus der Schlüsselwert-Tabelle
bzw. dem zweiten Cache, und Entschlüsseln der Daten gemäß dem Verschlüsselungsschlüssel und
dem Adressbereich und Liefern an den zweiten Cache.
-
Bei
dieser Konfiguration ist es möglich,
einen Mikroprozessor zu realisieren, der eine effiziente Verschlüsselungs-Verarbeitungs-Struktur
hat, die zwischen den Caches geteilt wird.
-
Nunmehr
unter Bezugnahme auf die 1 bis 17 wird
eine Ausführungsform
des Mikroprozessors gemäß der vorliegenden
Erfindung im Detail beschrieben.
-
1 zeigt
eine Mehrparteien-Applikationsschutzumgebung, auf welche die vorliegende
Erfindung anzuwenden ist.
-
Ein
Softwareanbieter 121 stellt ein Pogramm 122 her
und verteilt es an einem Mikroprozessor-A 103, der innerhalb
eines Zielsystems 102 eines Systemanwenders 112 vorgesehen ist.
Um das zu verteilende Programm zu schützen, wird das Klartext-Programm 122 verschlüsselt.
-
Spezifischer
wird das von Ausführungs-Codes
und Daten wie etwa Initialisierungsdaten gebildete Programm durch
Verwenden eines vom Softwareanbieter 121 ausgewählten Programmschlüssels verschlüsselt, und
der für
die Verschlüsselung
verwendete Programmschlüssel
wird unter Verwendung eines öffentlichen
Schlüssels-A
des Prozessors-A des Zielsystems 102 verschlüsselt, um
einen Verteilschlüssel
zu erzeugen.
-
An
diesem Punkt teilt der Softwareanbieter 121 das Programm
und die Initialisierungsdaten in eine Mehrzahl von Blöcken und
verschlüsselt
sie unter Verwendung eines unterschiedlichen Schlüssels für jeden
Block. Man beachte jedoch, dass es keinen Bedarf dafür gibt,
dass der Softwareanbieter 121 so viele Schlüssel wie
die Anzahl von Blöcken
auswählt, und
dass es ausreicht, zwei Dinge auszuwählen, einschließlich einer
Konstanten Cx als Basis zum Erzeugen einer Mehrzahl von Schlüsseln und
eines Schlüssels
Kx zum Verschlüsseln
der Mehrzahl von anhand Cx erzeugten Schlüsseln. Wie unten im Detail
beschrieben wird, wird ein blockverschlüsseltes Programm 123 durch
die Verschlüsselung
unter Verwendung eines unterschiedlichen Schlüssels für jeden Block gemäß diesen
zwei Konstanten erzeugt. Dann werden für Cx und Kx unter Verwendung
des öffentlichen
Schlüssels-A
des Prozessors-A verschlüsselt,
um einen Verteilungsschlüssel
Kx[A], Cx[A] herzustellen.
-
Man
beachte, dass in 1 aus Gründen der Einfachheit nur ein
einzelner Softwareanbieter gezeigt wird, aber hier die Mehrparteien-Umgebung angenommen
wird, so dass angenommen wird, dass der Anwender 112 entsprechende
blockverschlüsselte
Programme aus einer Mehrzahl von Anbietern erwirbt und sie im System 102 speichert.
-
Das
verteilte blockverschlüsselte
Programm wird in einem Sekundärspeicher 107,
wie etwa einer Festplatte, einmal zusammen mit dem Verteilungsschlüssel gespeichert
und in dem vom Speicher 108 gesicherten Bereich 109-1 zum
Zeitpunkt der Ausführung
geladen. Dieses Lesen in den Speicher wird durch ein BS 110 zum
Verwalten von Ressourcen des Systems 102 ausgeführt. Das
Programm selbst und der Verteilungsschlüssel können in einer einzelnen Datei
oder in getrennten Dateien gespeichert werden. Der Speicher 108 weist
ebenfalls Bereiche 109-n für andere Programme desselben
Anbieters 121 oder andere Programme anderer Anbieter auf, aber
ihre Beschreibung wird zum Nutzen der Erläuterung weggelassen.
-
Der
Prozessor-A liest den Verteilungsschlüssel 125 ein und verschlüsselt den
Verteilungsschlüssel
unter Verwendung des Geheimschlüssels-A
in einer Schutzlogik 108. Das im Speicher 108 angeordnete
verschlüsselte
Programm wird in den Cache-Speicher 104 in
Einheiten von Blöcken
eingelesen und in Einheiten von Blöcken unter Verwendung des entschlüsselten
Verteilungsschlüssels
entschlüsselt.
Zu diesem Zeitpunkt ist ein Merkmal des Prozessors-A, dass er die
Fähigkeit
zum Erzeugen eines Blockentsprechungsschlüssels entsprechend jeglichem
aus einer Mehrzahl von verschlüsselten
Blöcken
aus einer begrenzten Zahl von Geheimnissen, wie etwa beispielsweisezwei
Konstanten Kx und Cx, und zum Ausführen der Entschlüsselung
in Einheiten von Blöcken
aufweist.
-
2 zeigt
eine Hardware-Konfiguration des Mikroprozessors-A, der in 1 gezeigt
ist. Der Prozessor-A hat einen Kern 902, einen Instruktions-Cache 903,
einen Daten-Cache 904, ein Schnellverschlüsselungs-Schlüsselverarbeitungs-Modul
(FCM: Fast Ciphering Module) 911, das von diesen Caches zu
teilen ist, eine Schlüsselwert-Tabelle
(KVT, Key Value Table) 912, ein Verteilschlüssel-Verwaltungs-Modul 913 und
eine Bus-Schnittstelle
(BIU) 906, die innerhalb einer Prozessorpackung 200 angeordnet
und über
einen internen Bus 905 miteinander verbunden sind.
-
Der
Kern 902, das Schnellverschlüsselungs-Schlüsselverarbeitungs-Modul 911,
die Schlüsselwert-Tabellen 912 und
das Verteilschlüssel-Management-Modul 913 bilden
die Schutzlogik 106 von 1.
-
Der
Kern 902 weist ein Registerfeld 915 und einen
Task-Umschalter 914 auf.
Der Task-Umschalter 914 führt das Task-Umschalten aus, d.h.
das Speichern und Wiedergewinnen des Kontextes ist, wenn eine Unterbrechung
stattfindet. Der Kontext wird entsprechend der Ausführungsform
der Task erzeugt und entsprechend der Task verwaltet. Um dies zu
realisieren, hat der Task-Umschalter 914 intern eine Task-Zustandstabelle 921 und
eine Hash-Berechnungs-Einheit 922. Die Task-Zustandstabelle 921 hält den Task-Zustand
entsprechend der Task-ID, wie unten beschrieben. Obwohl nicht in
der Figur gezeigt, erteilt ebenfalls der Kern 902 eine
Notiz zur Änderung
des Kontexts im Registerfeld, ein Verteilschlüssel-Einstellkommando, etc.
-
Der
Instruktions-Cache 903 speichert die Ausführungs-Codes
des Programms zwischen. Zusätzlich
zu einem üblichen
Cache-Tag für das Identifizieren
der Adresse ist ebenfalls ein Tag zum Identifizieren eines geschützten Tasks
daran angehängt und
es wird die Unabhängigkeit
der Anwendung zwischen den internen Daten des Mikroprozessors garantiert.
Man beachte dass, obwohl in 2 nicht
gezeigt, der Instruktions-Cache 903 intern eine Offset-Tabelle 1207 (siehe 9)
zum Beschreiben von Startadressen (Offsets) des Programms (Ausführungs-Codes)
und der Daten aufweist, wie unten beschrieben.
-
Der
Daten-Cache 904 zwischenspeichert verschiedene Informationen,
die sich auf ein Programm beziehen, wie etwa Initialisierungsdaten, Stack-Daten,
dynamische Daten etc. des Programms.
-
Das
schnelle (symmetrische) Verschlüsselungs-Schlüsselverarbeitungs-Modul 911 weist
ein Schlüsselerzeugungs-Modul 1312 und
ein Verschlüsselungs-Verarbeitungs-Modul 1313 auf.
Das Schlüsselerzeugungs-Modul 1312 ermittelt
einen Blockschlüssel
und einen relativen Adresswert eines Verarbeitungs-Zielblockes durch
den internen Bus 905 und erzeugt den Verschlüsselungsschlüssel entsprechend
jedem Block durch das unten zu beschreibende Verfahren. Das Verschlüsselungs-Verarbeitungs-Modul 1313 führt die
Verschlüsselungs-/Entschlüsselungs-Verarbeitung
des entsprechenden Blocks unter Verwendung des erzeugten Verschlüsselungs-Schlüssels für jeden
Block aus. Die Blockverschlüsselungs-Verarbeitung
erfordert eine Mehrzahl von Takten, so dass ebenfalls ein Dispatcher zum
Ermöglichen
der Parallelverarbeitung einer Mehrzahl von Modulen enthalten ist.
-
Die
Schlüsselwert-Tabelle
(KVT) 912 durchsucht die Tabelle gemäß der aus dem Cache gesendeten
Tabellen-ID-Information und liefert den Schlüsselwert an das schnelle Verschlüsselungs-Schlüsselverarbeitungs-Modul 911.
-
Das
Verteilschlüssel-Verwaltungs-Modul 913 richtet
die Entschlüsselung
des Verteilungsschlüssels
unter Verwendung des öffentlichen
Schlüssels und
einer Entschlüsselungs-Ergebnis-Tabelle
ein.
-
Der
Mikroprozessor hat auch einen Task-Kanal 916, wie durch
die gestrichelte Linie in 2 angezeigt,
der Informationen der derzeit ausgeführten Task und der kontext-gesicherten
Task aus dem Kern 902 an die anderen Module überträgt. Außerhalb
der Mikroprozessorpackung 200 sind ein RAM 907 als externer
Speicher und eine so genannte South-Bridge 908 zum Verbinden
von Peripherie-Schaltungen vorgesehen und die Datenübertragung
und die Pufferung aus/zum internen Bus 905 zum/aus dem
externen Speicher 907 und die South-Bridge 908 werden
von der Bus-Schnittstelle 905 ausgeführt.
-
3 zeigt
eine Prozedur für
die Verschlüsselung
des Programms in Einheiten von Blöcken. Diese Verarbeitung wird
durch die Blockentsprechungs-Verschlüsselungs-Verarbeitungs-Einheit 126 des
Softwareanbieters 121 von 1 ausgeführt.
-
Ein
Programmbereich 1001 des vom Softwareanbieter entwickelten
Klartext-Anwendungs-Programms wird durch eine Mehrzahl von Blöcken (Block-0
bis Block-n) in Einheiten von 128 Bits (16 Bytes) gebildet. In Bezug
auf diesen Gesamtbereich werden vorab zwei Konstanten Kx und Cx
ausgewählt.
-
Als
erstes wird eine Summe der Konstante Cx und einer relativen Anfangs-Adresse
jedes Blocks in Bezug auf einen Anfang des Programms erhalten. Beispielsweise
ist das oberste Byte des ersten Blocks "0",
so dass Cx + 0 berechnet wird (S1002-0). Der Wert Cx + 0 wird unter
Verwendung des Geheimschlüssels
Kx verschlüsselt,
um einen Blockentsprechungsschlüssel
Kv0 zu erzeugen (S1003-0). Der Klartext-Block 1001-0 wird
unter Verschlüsselung dieses
Blockentsprechungsschlüssels
Kv0 verschlüsselt
(S1004-0), um einen verschlüsselten Block 1005-0 zu
erzeugen.
-
In ähnlicher
Weise ist das oberste Byte des zweiten Blocks 1 "16" und
die relative Adresse in Bezug auf den Anfang des Programms wird "16", so dass Cx + 16
berechnet wird (S1002-1). Die relative Adresse des (n + 1)-ten Blocks
n ist "16n", so dass Cx + 16n
berechnet wird (S1002-n). Durch Verschlüsseln dieser Werte unter Verwendung
von Kx werden die Verschlüsselungsschlüssel Kv1
bis Kvn der entsprechenden Blöcke
erzeugt (S1004-1 bis S1004-n). Der Klartext-Block-1 bis Block-n
werden durch die entsprechenden Verschlüsselungsschlüssel verschlüsselt, um
die verschlüsselten
Blöcke 1005-1 bis 1005-n zu
erzeugen.
-
In 3 werden
die Verschlüsselungs-Verarbeitungen
S1003-0 bis S1003-n und S1004-0 bis S1004-n als voneinander unabhängig gezeigt,
aber es ist auch möglich,
eine einzelne Verschlüsselungs-Verarbeitung
wiederholt durch Verändern
von Parametern zu verwenden, und es ist auch möglich, sie durch Software zu
realisieren.
-
Gemäß den in 3 gezeigten
Verschlüsselungsverfahren
kann der Softwareanbieter 121 die Verschlüsselungs-Verarbeitung
ausführen,
ohne der absoluten Adresse gewahr zu werden, an der das Programm
im Zielsystem 102 angeordnet wird. Der Softwareanbieter
kann nicht den absoluten Adresswert raten, so dass, falls der Blockentsprechungsschlüssel gemäß dem Absolut-Adresswert
zu erzeugen ist, es entweder nötig
würde,
eine Mitteilung über die
absolute Adresse, an der das Programm angeordnet ist, vorab vom
Zielsystem 102 zu empfangen und dann das verschlüsselte Programm
entsprechend der angeordneten Adresse zu erzeugen oder es würde möglich werden,
unbegrenzt viele verschlüsselte
Programme entsprechend den möglichen
angeordneten Adressen zu verteilen. In jedem Fall würden die
Verteilungskosten des Programms selbst beachtlich groß werden.
-
Beim
Verfahren von 3 sind die Geheimnisse, die
verteilt werden müssen,
nur der Schlüssel Kx
und die Konstante Cx und es werden eine Mehrzahl von Blockentsprechungs-Verschlüsselungsschlüsseln unter
Verwendung der relativen Adresse jedes Blocks erzeugt, so dass die
Verarbeitungslast auf Softwareanbieter-Seite vermindert werden kann und
die ökonomische
Anforderung erfüllt
werden kann.
-
Die
Blöcke 1005-0 bis 1005-n werden
so verschlüsselt
zum Zielsystem 102 gemeinsam mit dem Verteilschlüssel Kx[A],
Cx[A] übertragen.
Im Zielsystem 102, wenn einmal die Geheimnis-Informationen Kx,
Cx und der relative Adresswert des Blockes gegeben sind, ist es
möglich,
jeden Block unabhängig innerhalb
des Mikroprozessors zu entschlüsseln, ohne
jegliche Abhängigkeit
von der absoluten Adresse des Speichers, an der er angeordnet ist,
oder Daten der anderen Blöcke.
-
Dies
passt effizient zum derzeitigen BS, welches voraussetzt, dass die
Relokation der Applikationsprogramme und zur derzeitigen Computer-Architektur,
die durch Wahlfreizugriffe auf den Speicher charakterisiert ist.
-
Auch
unterscheidet sich selbst, falls der Angreifer illegale Austäusche der
Blöcke
vornimmt, der relative Adresswert für jeden Block, so dass auch
der Blockverschlüsselungsschlüssel unterschiedlich
ist und daher wird der durch den Angreifer beabsichtigte Vorgang
nicht ausgeführt.
-
Als
nächstes
werden die Operationen auf der Zielsystemseite 102 im Detail
beschrieben.
-
Vor
der Ausführung
des Programmes alloziert das BS 110 Bereiche des Speichers 108 jeweils für Ausführungs-Codes,
die Initialisierungsdaten (statische Daten) und einen Arbeitsbereich
(Stack) des vom Softwareanbieter 102 empfangenen Anwendungsprogramms.
In dieser Phase ist das Programm noch in dem verschlüsselten
Zustand. Die Startadressen der allozierten Speicherbereiche werden
vom Systemzustand geändert,
das heißt
der kooperativ arbeitenden anderen Programm-Module und der Anordnung
des geteilten Speichers, so dass das BS, welches das System verwaltet,
die Adressen der Bereiche gemäß der Situation
(Relokation) frei bestimmt. Das BS 110 bestimmt auch den
Speicherbereich zum Anordnen des Verteilungsschlüssels und liest die Verteilungsschlüssel-Informationen
ein.
-
Das
BS 110 beschreibt die Adress-Information dieser Bereiche
in einer Struktur, die Informations-Anordnung-Deskriptor (IAD) zum
Speicher genannt wird.
-
4 zeigt
eine Speicherkarte eines virtuellen Adressraums einer gewissen Task
und einer Struktur des Informations-Anordnungs-Beschreibers 1111 und
der Verteilschlüssel-Information 1121.
Auf der Speicherkarte sind das Programm 1102, die Initialisierungs-(statischen)
Daten 1103, der Arbeitsbereich (Stack) 1104, der
Informations-Anordnungs-Beschreiberbereich 1105 und
der Verteilschlüsselbereich 1106 angeordnet.
-
Der
Informations-Anordnungs-Deskriptor 1111 enthält eine
Programmbereichs-Startadresse (Programm-Offset) 1112, eine
Datenbereichs-Startadresse (Statischer Daten-Offset) 1113,
eine Datenbereichs-Endadresse (statisches Datenende) 1114, eine
Arbeitsbereichs-Startadresse (Stack Offset) 1115, eine
Arbeitsbereich-Endadresse (Stack-Limit) 1116 und einen
Verteilschlüssel-Startadresse
(Verteilschlüssel-Offset) 1117.
-
Der
Verteilungsschlüssel 1121 enthält einen Programmschlüssel (Kx) 1122,
eine Programm-Geheimnis-Konstante (Cx) 1123, einen Initialisierungs-Datenschlüssel (Kdi) 1124,
eine Initialisierungs-Daten-Geheimnis-Konstante (Cdi) 1125,
eine Initialisierungs-Datengröße (Sdi) 1126,
einen Arbeitsbereichs-(Stack)schlüssel (Kdw) 1127, eine
Arbeitsbereichs-Geheimnis-Konstante (Cdw) 1128 und eine Arbeitsbereichs-Größe (Sdw) 1129.
-
Wenn
das im Speicher angeordnete Programm in den Mikroprozessor 103 eingelesen
und entschlüsselt
und ausgeführt
wird, erteilt das BS 110 verschiedene privilegierte Befehle
(Task-Steuerkommandos) zum Steuern des Task-Zustands gemäß der Informations-Anordnungs-Deskriptor,
um so den Task-Zustand zu verwalten.
-
5 zeigt
einige Beispiele von Task-Steuerkommandos und 6 zeigt
den Zustandsübergang
der Task. Die Task-Steuerkommandos
beinhalten eine Registrierung der Task in der internen Tabelle (Register),
ein Starten der Task (Start), ein Speichern des suspendierten Task-Zustands
(Suspend), eine Wiederaufnahme der suspendierten Task (Continue)
und eine Beendigung der Task, das heißt eine Löschung der Task-Geheimnis-Information
aus der internen Tabelle (Delete). Dann macht gemäß diesen Task-Steuerkommandos
der Task-Zustand Transitionen, wie in 6 gezeigt,
vom Null-Zustand 201 zu einem INIT-Zustand 202,
einem RUN-Zustand 203, einem STOPPED-Zustand 204, einem SUSPEND-Zustand 205,
etc.
-
Im
Folgenden werden die Operation zum Ausführen der Task, insbesondere
die Registrierung der Task, die Ausführung der Task, die Unterbrechung
der Task und die Beendigung der Task detailliert beschrieben.
-
<Registrierung der Task>
-
1. Registrier-Verarbeitungsfluss:
-
Zuerst,
um die Task zu registrieren, erteilt das BS 110 ein "Register"-Kommando, welches
ein privilegiertes Kommando ist, in dem die ID der zu registrierenden
Task und eine Anfangs-Adresse
des Informations-Anordnungs-Deskriptors dieses Programms als Parameter
verwendet werden. Durch Erteilen des "Register"-Kommandos wird der Verteilschlüssel 1121 für dieses
Programm entschlüsselt und
der zum Entschlüsseln
jedes Speicherblocks zu verwendende Schlüssel und die relativen Adress-Informationen
werden in verschiedenen Tabellen innerhalb des Mikroprozessors in
Bezug auf die Task-ID registriert (unten beschrieben).
-
7 zeigt
einen Umriss der Task-Registrierungs-Vorgangs im Mikroprozessor
(Hardware) 103 und 8 zeigt
den Verarbeitungsfluss des "Register"-Befehls.
-
Wenn
der Register-Befehl unter Verwendung der Adresse des Informations-Anordnungs-Deskriptors
(IAD) 1111 und der Task-ID
#1 als Parameter erteilt wird, überprüft der Task- Umschalter 914 innerhalb
des Kerns 902 den Task-Zustand (S301). Falls der Task-Zustand
nicht NULL ist (S301 NEIN), wird der Task-Zustand auf INVALID gesetzt
und wird als Fehler verarbeitet (S308). Falls der Task-Zustand NULL
ist (S301 JA), schreibt der Kern 902 eine Registrierungs-Anforderung,
welche die Informations-Anordnungs-Deskriptor-Adresse und die Task-ID enthält, in einen
Sequencer 913-1 des Verteilungsschlüssel-Verwaltungs-Moduls 913,
wie in 7 durch die gestrichelte Linie (1) angezeigt.
-
Der
Sequencer 913-1 überträgt eine
Speicher-Lese-Anforderung in Bezug auf den Informations-Anordnungs-Deskriptorbereich
zur BIU 906, wie durch eine gestrichelte Linie (2) in 7 angezeigt, und
die BIU 906 liefert den Informations-Anordnungs-Deskriptor 1111 an
den Sequencer 913-1, wie durch eine gestrichelte Linie
(3) in 7 angezeigt. Der Sequencer 913-1 analysiert
diesen Informations-Anordnungs-Deskriptor,
um die Offset-Adressen und Bereiche entsprechend dem Programm, den
Initialisierungsdaten und dem Arbeitsbereich und der Verteilungsschlüssel-Offset-Adresse 1117 zu
ermitteln (S302).
-
Als
nächstes überträgt der Sequencer 913-1 eine
Lese-Anforderung
in Bezug auf die Verteilschlüssel-Adresse
an die BIU 906. Die BIU 906 liefert den Inhalt
des Verteilschlüssels
an das öffentliche Schlüssel-Entschlüsselungs-Modul 91302,
wie durch eine gestrichelte Linie (4) in 7 angezeigt.
Das öffentliche
Schlüssel-Entschlüsselungs-Modul 913-2 entschlüsselt den
Verteilungsschlüssel 1121 (siehe 4),
um die Programm-Geheimnis-Konstante (Cx), die Initialisierungsdaten-Geheimnis-Konstante und
die Arbeitsbereichs-Geheimnis-Konstante zu erhalten (S303).
-
Als
nächstes
schreibt das öffentliche
Schlüssel-Entschlüsselungs-Modul 913-2 die
Offset-Adressen des Programms, der Initialisierungsdaten und des
Arbeitsbereiches, die bei S302 erhalten worden sind, in eine Offset-Tabelle
(siehe 9) des Instruktions-Caches 903, wie durch
eine gestrichelte Linie (5) in 7 angezeigt.
-
In ähnlicher
Weise schreibt das öffentliche Schlüssel-Entschlüsselungs-Modul 913-2 die
Verschlüsselungsschlüssel (Geheimnis-Konstanten) des
Programms, die Initialisierungsdaten und den Arbeitsbereich, die
bei S303 ermittelt worden sind, in die Schlüsselwert-Tabelle 912 (S305).
Auf diese Weise werden die Tabellen eingerichtet und die Registrierung
der Task wird abgeschlossen.
-
Wenn
die Registrierung der Task abgeschlossen ist, macht der Task-Zustand
einen Übergang
von NULL nach INIT (S306) und dieser Zustandsübergang wird dem Kern 902 durch
die Unterbrechung (S307) notifiziert, so dass das BS sicherstellen
kann, dass die Vorbereitung für
die Ausführung
der Task beendet ist.
-
2. Einrichtung von Tabellen:
-
Bevor
die Einrichtung von verschiedenen Tabellen innerhalb des Mikroprozessors
beschrieben wird, werden die Konfigurationen des Instruktions-Caches 903,
des schnellen Verschlüsselungs-Schlüsselverarbeitungs-Moduls
(FCM) 911, der Schlüsselwert-Tabelle
(KVT) 912 und des Daten-Caches 904, welche den
Mikroprozessor bilden, unter Bezugnahme auf die 9 bis 11 beschrieben.
-
9 zeigt
ein Detail des Instruktions-Caches 903. Der Instruktions-Cache 903 beinhaltet
eine Instruktions-Verwaltungs-Einheit
(MMU) 1201 mit einem TLB (Translation Lookaside Buffer) 1202,
einen Instruktions-Cache-Speicher 1203, ein aktuelles Task-ID-Register 1204,
eine Cache-Zugriffs-Überprüfungs-Einheit 1205,
eine Task-ID-Schreibeinheit 1206 und
eine Offset-Tabelle 1207.
-
Der
Cache-Speicher 1203 wird durch eine Mehrzahl von Cache-Linien in einer vorgegebenen Größe gebildet
und jede Cache-Linie
hat einen Tag zum Halten der Task-ID der durch diese Cache-Linie (Block)
auszuführenden
Task. Die Cache-Zugriffs-Prüfeinheit 1205 vergleicht
die im Tag gehaltene Task-ID und den aktuellen Task-ID-Registerwert und
gestattet Zugriff nur, wenn sie übereinstimmen. Der
Inhalt dieser Cache-Linie wird verworfen, wenn sie nicht übereinstimmen.
-
10 zeigt
Details der Schlüsselwert-Tabelle
(KVT) 912 und des schnellen Verschlüsselungs-Schlüsselverarbeitungs-Moduls
(FCM) 911. Die KVT 912 beinhaltet eine Tabellen-Zugriffs-Steuereinheit 1301,
ein aktuelles Task-ID-Register 1302, eine Task-Schlüssel-(oder
Programmschlüssel-)Tabelle 1303,
eine Kontextschlüssel-Tabelle 1304 und eine
Datenschlüssel-Tabelle 1305.
Obwohl in 10 nicht gezeigt, enthält die Datenschlüssel-Tabelle 1305 vier
Tabellen (Tabelle-0 bis Tabelle-3). Die KVT 912 ist mit
dem internen Bus 905 über
einen Bus 1315 verbunden.
-
Das
schnelle Verschlüsselungs-Schlüsselverarbeitungs-Modul
(FCM) 911 beinhaltet ein Dispatcher 1311, ein
Schlüsselerzeugungs-Modul 1312 und
ein Verschlüsselungs-Verarbeitungs-Modul 1312.
Das Schlüsselerzeugungs-Modul 1312 hat
drei Teile 1312-1 bis 1312-3 parallel als Schlüsselerzeugungs-Einheiten
und das Verschlüsselungs-Verarbeitungs-Modul 1313 hat
drei Teile 1313-1 bis 1313-3 als Verschlüsselungs-Verarbeitungs-Einheiten.
Der Abwickler 1311 leitet die Verarbeitung an vakante Teile
der Schlüsselerzeugungs-Einheiten
und der Verschlüsselungs-Verarbeitungs-Einheiten,
um so die parallele Verarbeitung zu ermöglichen. Der FCM 911 ist
mit dem internen Bus 905 über einen Bus 1314 verbunden.
-
Von
der KVT 912 zum FCM 911 wird der Verschlüsselungsschlüssel durch
einen Bus 1316 übertragen
und der relative Adresswert wird über einen Bus 1317 übertragen.
-
11 zeigt
ein Detail des Daten-Caches 904. Der Daten-Cache 904 enthält ein aktuelles Task-ID-Register 1401,
eine MTRR (Memory Type Range Register/Speichertyp-Bereichsregister)
Tabelle 1403 zum Halten des Adressbereichs, eine MTRR-Tabellen-Verwaltungs-
und Vergleichs-Einheit 1402 zum Verwalten der MTRR-Tabelle
und Vergleichen des Adressbereichs der MTRR-Tabelle mit der Zieladresse,
eine Verschlüsselungs-Attribut-Ausgabeeinheit 1411,
einen Daten-Cache-Speicher 1431, eine
MMU 1442 mit einem Daten-TLB 1433 und ein Speicher-Ablauf-Kontext-Identifizier-Register 1434.
-
Die
Verschlüsselungs-Attribut-Ausgabeeinheit 1411 weist
ein Lesedaten-Schlüsselidentifizier-Register 1412,
ein Lese-Kontext-Schlüsselidentifizierer-Register 1413,
ein Schreibdaten-Schlüsselidentifizierer-Register 1414,
ein Schreib-Kontext-Schlüsselidentifizierer-Register 1415 und
eine Zugriffs-Prüfeinheit 1421 für den Zweck
des Überprüfens der
Verschlüsselungs-Attribute
der Daten und des Kontexts zu einem Zeitpunkt des Zurückschreibens
auf den externen Speicher auf. Die MMU 1442 führt den
Speicherzugriff durch Umwandeln der aus dem Kern 902 ausgegebenen
virtuellen Adresse in die absolute Adresse gemäß der vorgegebenen Umwandlungs-Information
aus.
-
Die
sechs Arten der KVT 912, das heißt die Programmschlüssel-Tabelle 1303,
die Kontextschlüssel-Tabelle 1304 und
die Datenschlüssel-Tabellen 1305 (0
bis 3) werden durch die Task-IDs
indexiert und sind zum Halten von zwei Arten von Geheimnis-Informationen
in der Lage, die für
die Schlüsselerzeugung
zu verwenden sind. Die zwei Arten von für die Blockentschlüsselungs-Schlüsselerzeugung zu
verwendenden Geheimnis-Informationen, wie etwa Kx 1122 und
Cx 1123 für
das in 4 gezeigte Programm werden beispielsweise in einen
Eintrag der Task-ID #1 in der Programmschlüssel-Tabelle 1303 der
KVT 912 geschrieben.
-
Andererseits
wird der Offset-Wert 1112 dieses Programmbereichs in einen
Eintrag der Task-ID #1 in der Offset-Tabelle 1207 innerhalb
des Instruktions-Caches 903 geschrieben.
-
Die
MTRR-Tabelle 1403 des Daten-Caches 904 wird durch
die Task-ID und einen MTRR-Identifizierer, der einen Wert im Bereich
von 0 bis 3 annimmt, identifiziert. Die MTRR-Tabelle 1403 hat
nämlich
vier MTRRs (Adressbereichsregister) pro einer Task und der Adressbereich
des Datenbereichs und der Schlüsselwert
können
in jedem von diesen registriert werden. Zu einem Zeitpunkt der Task-Registrierung
werden die MTRRs mit MTRR-Identifizierer 0 und 1 entsprechend im
Initialisierungsdaten- und des Arbeitsbereichs (Stack) eingerichtet.
Auch werden die Inhalte der MTRR mit MTRR-Identifizierern 2 und 3 auf "0" initialisiert.
-
Wenn
eine Task auf den Speicher referenziert, werden die Zieladresse
und die Adresse der MTRRs verglichen und das Verschlüsselungs-Attribut
(das heißt
der Schlüssel)
entsprechend dem passenden MTRR wird verwendet. Die Verschlüsselungs-Schlüsselerzeugung
in der oben beschriebenen Prozedur wird auch auf die Daten angewendet, indem
der relative Adresswert mit einer Top-Adresse des MTRR als Offset
verwendet wird.
-
Um
das Auftreten eines Widerspruchs bei den Tabelleninhalten zu verhindern,
werden alle Operationen in Bezug auf diese Task im Kern 902 während eines
Zeitraums verboten, in dem diese Tabellen wiederbeschrieben werden.
-
Wenn
das Wiederschreiben der Tabellen abgeschlossen ist, wird der Zustand
des Eintrags entsprechend dieser Task-ID in der Task-Zustandstabelle 921 des
Task-Schalters (STS) 914 von NULL zu INIT umgeschrieben
und der Abschluss der Registrierung wird dem Kern 902 durch
Unterbrechung („Interruption") notifiziert.
-
Man
beachte, dass diese Ausführungsform auf
den Fall der Implementierung dieser Registrierungs-Operation durch
Hardware gerichtet ist, aber dass sie als Software implementiert
werden könnte, die
im Prozessor als Firmware inkorporiert ist. Man beachte jedoch,
dass es einen Bedarf daran gibt, sich darum zu kümmern, die Änderung der Firmware durch
einen bösartigen
Systemnutzer zu verhindern.
-
<Ausführung der Task>
-
1. Start der Ausführung der
Task:
-
Um
die Task auszuführen,
führt das
BS das "Start"-Kommando unter Verwendung
der Task-ID als Parameter in Bezug auf die Task im INIT-Zustand aus.
Dann wird die Kontrolle zu einem oberen Ende des Programmbereichs
verschoben. Falls das "Start"-Kommando durch Spezifizieren
der Task in einem anderen als dem INIT-Zustand ausgeführt wird, wird
es als Fehler prozessiert und nichts wird ausgeführt.
-
12 zeigt
den Prozessfluss des Task-Ausführ-Startkommandos. Wenn
das "Start"-Kommando für eine Task
durch Spezifizieren seiner Task-ID erteilt wird, wird zuerst bewertet,
ob ihr Task-Zustand INIT ist oder nicht, das heißt ob sie in einem Zustand
ist, wo die Vorbereitung für
die Ausführung
der Task abgeschlossen ist oder nicht (S401). Wenn das "Start"-Kommando durch Spezifizieren
des Task-Identifizierers
der Task in einem anderen als dem INIT-Zustand erteilt wird (S401 NEIN), wird
der Zustand der Task-Zustandstabelle 921 auf INVALID
(S407) gesetzt und sie wird als ein Fehler verarbeitet.
-
Wenn
die Task in ihrem INIT-Zustand ist (S401 JA), wird die im Kern 902 gehaltene
derzeitige Task-ID auf die neue Task gesetzt (S402) und der Registerbereich 915 wird
initialisiert (S403). Auch wird der Wert des Programmzählers (nicht gezeigt)
auf einen Anfang des Programmbereichs eingestellt (S404).
-
Dann
wird die neue Task-ID dem Instruktions-Cache 903, dem Daten-Cache 904 und
der Schlüsselwert-Tabelle 912 über den
Task-Kanal 916 notifiziert und in den entsprechenden aktuellen Task-ID-Registern 1204, 1401 und 1302 gehalten (S405).
Danach wird der Task-Zustand in Task-Zustandstabelle 921 des
Kerns 902 von INIT nach RUN umgeschrieben (S406) und die
Ausführung
wird gestartet.
-
Bei
dieser Ausführungsform
wird das durch Verschlüsselung
in Einheiten von Blöcken
geschützte
Programm ausgeführt,
so dass, wenn das Programm im externen Speicher in den Cache eingelesen
wird, die Entschlüsselung
des Programms in Einheiten von Blöcken gemäß dem entsprechend der Task-ID
registrierten Programmschlüssel
ausgeführt und
der als Entschlüsselungs-Ergebnis
erhaltene Klartext wird in den Cache gelesen und ausgeführt. Zu
diesem Zeitpunkt wird der Offset in der Offset-Tabelle 1297 innerhalb
des Instruktions-Caches 903 gemäß der angeordneten
Speicheradresse zu einem Zeitpunkt der Task-Registrierung registriert
und ein Unterschied zwischen der Speicheradresse und dem Offset
wird als relativer Adresswert verwendet, so dass die Entschlüsselung
korrekt ausgeführt
werden kann, egal an welcher Adresse das BS das vom Programmierer
verschlüsselte
Programm anordnet.
-
Man
beachte, dass diese Ausführungsform auf
den beispielhaften Fall des Machens eines Übergangs vom NULL-Zustand zum RUN-Zustand über den
intermediären
INIT-Zustand gerichtet ist, aber der Zweck dafür darin besteht, die Reaktions-Unmöglichkeitszeit
zu verkürzen,
die in der öffentlichen Schlüssel-Algorithmus-Verarbeitung
relativ lang ist, indem die Verarbeitung des öffentlicher-Schlüssel-Algorithmus des Verteilschlüssels synchron
ausgeführt wird.
Falls die Reaktions-Unmöglichkeitszeit
tolerabel ist, kann der intermediäre INIT-Zustand weggelassen
werden (siehe gemeinsam zugewiesene mitanhängige US-Patentanmeldung mit
der Serien-Nr. 10/059,217 für
die asynchrone öffentliche Schlüssel-Algorithmus-Verarbeitung).
-
2. Einlesen in den Instruktions-Cache:
-
Als
nächstes
wird die Verarbeitung des Einlesens in den Instruktions-Cache 903 unter
Bezugnahme auf den Verarbeitungsfluss von 13 beschrieben.
-
Die
Cache-Linie, die in den Cache eingelesen wird, nachdem die Ausführung der
Task begonnen hat, wird mit dem Task-ID-Tag dieser Task zusätzlich zum normalen Tag assoziiert,
um zu entscheiden, ob die Speicheradresse passt oder nicht. Dann,
wenn es einen Zugriff auf die Cache-Linie gibt, die in den Cache
gelesen wird, entscheidet die Zugriffs-Prüfeinheit 1205 des
Instruktions-Caches 903, ob der mit der Linie assoziierte
Task-ID-Tag und die zugegriffene aktuelle Task-ID übereinstimmen
oder nicht. Falls sie nicht übereinstimmen,
wird dies als ein Cache-Fehltreffer gehandhabt, selbst falls der
Memory-Adress-Tag übereinstimmt,
und die Information dieser Cache-Linie wird aus dem externen Speicher neu
ausgelesen. Selbst falls der Inhalt des externen Speichers, der
dieser Linie entspricht, von einer anderen Task wieder gelesen wird,
wird er durch Ausführen
der Entschlüsselung
unter Verwendung des Schlüssels
entsprechend der Task-ID der neu zugegriffenen Task gelesen. Anders
ausgedrückt,
wird das Ergebnis der Entschlüsselung
unter Verwendung eines anderen als des korrekten Schlüssels ausgeführt, so
dass die normale Verarbeitung nicht ausgeführt wird.
-
Man
beachte, dass in der nachfolgenden Beschreibung der relativen Adressen
gemäß der virtuellen
Adresse ausgeführt
wird, aber die Beurteilung von Cache-Treffern/Fehltreffern in Bezug
auf die absolute Adresse ausgeführt
wird. Dies liegt daran, falls die virtuelle Adresse für die Bewertung
von Cache-Treffern/Fehltreffern verwendet wird, ein Phänomen, das
Alias genannt wird, bei dem derselbe Speicher-Block in einer Mehrzahl
im Cache existiert, auftreten wird. Dieses Phänomen wird besonders problematisch,
wenn derselbe absolute Adressbereich von einer Mehrzahl von Tasks
zu teilen ist. Aus diesem Grund werden Cache-Treffer/Fehltreffer
in dieser Ausführungsform
durch die absolute Adresse beurteilt.
-
13 zeigt
den Verarbeitungsfluss für
das Einlesen in den Instruktions-Cache 903. Bei diesem Fluss
sind die Operationen des Instruktions-Caches 903, der FCM 911 und
der BIU 906 aus Gründen
der Vereinfachung kollektiv gezeigt.
-
Zuerst,
wenn es eine Leseanforderung vom Kern 902 gibt, sendet
der Instruktions-Cache 903 die Leseanforderung für den Ziel-Adressblock
zur BIU 906. Die Leseanforderung enthält Informationen bezüglich einer
Anforderungs-ID, Vorhandensein/Abwesenheit des Schutzes, eines Zieladressenbereichs und
einer Anforderungs-Quell-ID.
-
Hier
wird bewertet, ob die Zieladresse und der mit der Cache-Linie assoziierte
Adress-Tag, der in den Cache gelesen wird, übereinstimmen oder nicht (S501).
Wenn die absoluten Adressen nicht übereinstimmen (S501 NEIN),
wird dies als Cache-Fehltreffer
angesehen und die Akquisition der Offset-Adresse entsprechend der
Leseanforderungs-Task-ID wird neu gestartet. Die Offset-Adresse wird
aus einem Eintrag entsprechend der derzeitigen Task-ID in der Offset-Tabelle 1207 ermittelt
(S502).
-
Als
nächstes
wird die relative Adresse aus dem ermittelten Offset-Wert berechnet.
Die relative Adresse wird durch Subtrahieren des Offset-Werts von
der Speicheradresse erhalten (S503). Man beachte, dass, wenn es
einen Zugriff auf den Cache-Speicher während der Ausführung der
geschützten
Task gibt, der Instruktions-Cache 903 die Berechnung der relativen
Adresse parallel zum Zugriff auf den Cache-Speicher ausführt.
-
Der
Instruktions-Cache 903 sendet den erhaltenen relativen
Adresswert und die Task-ID über den
internen Bus 905 an die Schlüsselwert-Tabelle (KVT) 912.
Zu diesem Punkt wird die Anforderungs-ID angeheftet. Die KVT 912 ermittelt
einen Wert des Schlüssels
entsprechend der Task-ID aus der Task-Schlüssel-Tabelle 1303 und
sendet den Schlüsselwert
und den Offset-Wert an das Schlüsselerzeugungs-Modul 1312 des
schnellen Verschlüsselungs-Schlüsselverarbeitungs-Moduls
(FCM) 911 über
den Kanal 1316. Zum selben Zeitpunkt sendet die KVT 912 den
Offset-Wert, die Anforderungs-ID und die Anforderungs-Quellen-ID über den
Kanal 1317 an das Verschlüsselungs-Verarbeitungs-Modul 1313 des
FCM 911.
-
Wenn
der Schlüsselwert
und der Offset-Wert aus der KVT 912 empfangen werden, beginnt
das Schlüsselerzeugungs-Modul 1312 des
FCM 911 unmittelbar mit der Berechnung des Schlüssels entsprechend
diesem Block. Es wird nämlich
ein durch Addieren des relativen Adresswertes zur Geheim-Konstante
Cx des Programms ein Zwischenwert erhalten (S504) und der erhaltene
Zwischenwert wird unter Verwendung des Geheimnisschlüssels Kx des
Programmes verschlüsselt,
um den Blockentsprechungsschlüssel
zu erzeugen, der dem Block des Programms entspricht (S505).
-
Diese
Schlüsselberechnung
ist die Verschlüsselungs-Verarbeitung, so
dass sie die Zeit einer Mehrzahl von Zyklen erfordert. Um die Kalkulation
effizient auszuführen,
wird das Schlüsselerzeugungs-Modul 1312 mit
einer Mehrzahl von Schlüsselerzeugungseinheiten 1312-1 bis 1312-3 versehen und
der Abwickler 1311 leitet die Verarbeitungsanfrage an die
vakante Schlüsselerzeugungs-Einheit
weiter. Wenn eine Anforderung durch eine Mehrzahl der Verschlüsselungs-Blöcke gebildet
wird, werden die Schritte S502 bis S505 durch Inkrementieren des
relativen Adresswerts wiederholt, bis die Schlüssel entsprechend allen Verschlüsselungsblöcken erzeugt sind.
-
Andererseits
puffert die BIU 906 das Ergebnis des Lesens aus dem externen
Speicher, bis es die Daten in einer Größe des Verschlüsselungsblocks
wird. Wenn die ungeschützten,
nicht verschlüsselten
Daten ab dem Anfang angefordert werden, werden die Daten direkt
zum Anforderungs-Quell-Instruktions-Cache gesendet, aber in dieser Ausführungsform
ist es die Anforderung nach verschlüsselten Daten, so dass das
Ergebnis des Lesens an den FCM 911 gesendet wird. Das Verschlüsselungs-Verarbeitungs-Modul 1313 des
FCM 911 entschlüsselt
die von der BIU 906 gelieferten Daten unter Verwendung
des vom Schlüsselerzeugungs-Modul 1312 erzeugten
Blockverschlüsselungs-Schlüssels (S506).
-
Die
Entschlüsselung
erfordert die Zeit einer Mehrzahl von Zyklen, so dass, wenn der
nächste
Verschlüsselungs-Block,
der die Cache-Linie bildet, eintrifft, bevor die vorherige Entschlüsselungs-Verarbeitung
abgeschlossen ist, eine andere Verschlüsselungs-Verarbeitungs-Einheit
alloziert wird und die Verarbeitungen parallel ausgeführt werden. 10 zeigt
nur die Verschlüsselungs-Verarbeitungs-Einheiten 1313-1 bis 1313-3, aber durch
Vorbereiten einer ausreichenden Anzahl an Verschlüsselungs-Verarbeitungs-Einheiten
wird es möglich,
die Entschlüsselungs-Verarbeitung
auszuführen,
ohne Verzögerungen
zu verursachen, selbst wenn die Daten in kürzeren Intervallen als der
Verarbeitungszyklus der Verschlüsselungs-Verarbeitungs-Einheiten
eintreffen.
-
Der
Block, für
den die Entschlüsselung
abgeschlossen ist, wird über
den internen Bus unmittelbar zum Anforderungs-Quell-Instruktions-Cache 903 gesendet.
Der Instruktions-Cache 903 speichert die Daten in dieser
Cache-Linie und wenn alle Daten, die die Cache-Linie bilden, empfangen
sind, schreibt der Instruktions-Cache 903 eine Anzeige,
dass die Linie gültig
ist, eine Anzeige, dass Verschlüsselung
angewendet ist, und die ausgeführte
Task-ID in den Cache-Tag (S507).
-
Wenn
die Cache-Linie gültig
wird, liest der Kern 902 die Daten aus dieser Cache-Linie
und nimmt die Ausführung
des Programms wieder auf (S508).
-
Als
nächstes
wird der Fall erwogen, bei dem die Zieladresse und der Adress-Tag
(absoluter Adressanteil) der Cache-Linie bei S501 übereinstimmen,
das heißt
der Fall, wo die Task B, die eine andere Task-ID als die Task A
hat, die ausgeführt
worden ist, unabsichtlich einen Zugriff auf denselben Speicherbereich
gemacht hat und die Cache-Linie ein Treffer ist. Die Tatsache, dass
die absolute Adresse des Caches getroffen ist, impliziert, dass
die Task B Zugriffsrecht in Bezug auf den Speicher an dieser Adresse
im Sinne des konventionellen Ressourcen-Managements hat.
-
In
diesem Fall vergleicht die Zugriffs-Prüfeinheit 1205 des
Instruktions-Caches 903 weiterhin den Wert des aktuellen
Task-ID-Registers 1204 und des mit dieser Cache-Linie assoziierten
Task-ID Tags (S509). Wenn sie nicht übereinstimmen, das heißt, wenn
das aktuelle Task-ID-Register 1204 "B" ist,
aber die Task-ID des Cache-Linien-Tags "A" ist
und seine Verschlüsselungs-Charakteristik
anzeigt, dass es beispielsweise eine verschlüsselte Linie ist (S509 NEIN),
wird der Cache gelöscht
und die Schritte S502 bis S507 werden in Bezug auf die Task-ID der Task
B wiederholt. Das heisst, es wird die relative Adresse aus der Offset-Adresse
der Task B berechnet und das Ergebnis der Entschlüsselung
der Daten des externen Speichers entsprechend der Cache-Linien-Adresse
unter Verwendung des Programmschlüssels der Task B wird in diese
Cache-Linie eingelesen.
-
Wenn
die Programmschlüssel
der Task A und der Task B übereinstimmen,
werden diese Tasks nur dasselbe Programm ausführen, selbst wenn sie getrennt
eingelesen werden, aber wenn der Schlüssel, der ursprünglich beim
Verschlüsseln
der Daten des externen Speichers verwendet worden ist, der Programmschlüssel Task
A ist und der Schlüssel
der Task B sich davon unterscheidet, wird die Task B ein unsinniges
Programm ausführen,
das sich von dem beabsichtigten Programm unterscheidet, so dass
die bezweckte Attacke nicht geführt
werden kann.
-
Wenn
andererseits der Wert des aktuellen Task-ID-Registers 1204 und
des Task-ID-Tags der Cache-Linie übereinstimmen (S509 JA), wird
der Inhalt der angeforderten Adresse an den Kern 902 gesendet
(S508).
-
Auf
diese Weise, wenn die Cache-Linie wieder von einer anderen Task
während
der Ausführung einer
Task eingelesen wird, wird der Inhalt des externen Speichers in
die Cache-Linie
eingelesen, indem er unter Verwendung eines anderen Schlüssels als des
beabsichtigten Schlüssels
verschlüsselt
wird. Das Programm, das das Ergebnis der Verschlüsselung durch Verwendung eines
anderen als des beabsichtigten Schlüssels ausführte, wird offensichtlich nicht
die normalen Operationen durchführen.
-
Diese
Kontrolle kann nicht durch die Privilegien des BS überschrieben
werden. Falls das BS frei die Task-Schlüsseltabelle 1303 bedienen
kann, würde
es möglich
sein, die Geheimnisse des anderen Programms zu ermitteln, aber in
der vorliegenden Erfindung sind die Fälle, bei denen das BS die Operationen
der Geheimnis-Information und die Task-Zustands-Verwaltung, wie durch die Registrierung
des Programmschlüssel
repräsentiert,
ausführen
kann, auf die Erteilung einer Reihe von Task-Steuerkommandos beschränkt, wie
in 5 gezeigt. Folglich kann im Mikroprozessor der
vorliegenden Erfindung das Programm oder die Daten der Applikation
nicht korrekt ausgeführt
oder eingelesen werden, wenn nicht der Schlüssel entsprechend jedem Block
des Programms oder der Daten der Anmeldung bekannt ist, selbst vom
BS mit den Privilegien bezüglich
der Ressourcen.
-
Mit
diesem Mechanismus ist es möglich,
eine Mehrparteien-Programmschutzumgebung
bereitzustellen, welche die Unabhängigkeit des Anwendungsprogramms
garantiert.
-
Man
beachte, dass die obige Beschreibung aussagte, dass die rasche Entschlüsselungs-Verarbeitung
durch eine Mehrzahl der Verschlüsselungs-Verarbeitungs-Einheiten 1313 in
Relation zu S506 möglich
ist, aber kein Bedarf besteht, eine Mehrzahl an Verschlüsselungs-Verarbeitungs-Einheiten
bereitzustellen, falls eine einzelne Verschlüsselungs-Verarbeitungs-Einheit
einen hinreichenden Durchsatz hat. Beispielsweise ist es für die durch
die Repetition derselben Art von Operationen wie bei DES gebildete
Verschlüsselungs-Verarbeitung
bekannt, dass ein hoher Durchsatz durch Handhaben der Verarbeitung
durch Pipelines erhalten werden kann.
-
Jedoch
erfordert die Implementierung von solchen Pipelines hohe Kosten
wegen der Hardware-Skalierung und der Schwierigkeit beim Design. Auch
erfordert die Verschlüsselungs-Verarbeitungs-Einheit,
die in Form von generell verfügbarem IP
bereitgestellt wird, ein anspruchsvolles Know-how und Zeit für den Entwurf,
so dass das Entwerfen der für
die erforderliche Verarbeitungsleistung bei jeder Gelegenheit geeigneten
Verschlüsselungs-Verarbeitungs-Einheit
eine signifikant schwere Bürde
sein kann. Wenn die verschiedenen Bedingungen berücksichtigt
werden sollen, ist es vorteilhaft, eine Mehrzahl der existierenden
Verschlüsselungs-Verarbeitungs-Einheiten
parallel zu betreiben, wie bei dieser Ausführungsform, hinsichtlich eines
Standpunkts der Flexibilität
des Entwurfs. Auch ist es bei der Reduktion der Gesamtkosten einschließlich der
Hardware-Entwurfskosten effektiv.
-
3. Ausführungs-Verarbeitung
am Daten-Cache:
-
Als
nächstes
wird der Betrieb des Daten-Caches beschrieben. Der Schutz solcher
Daten wie etwa der Initialisierungsdaten und des Arbeitsbereichs
(Stack) kann durch Anwenden des Verschlüsselungsschutzes unter Verwendung
eines beliebigen Verschlüsselungsschlüssels auf
die dynamisch von der Task gesicherten Datenbereiche realisiert
werden. Es ist möglich,
eine Mehrzahl von geschützten Bereichen,
wie etwa den Initialisierungs-Datenbereich, den Arbeitsbereich,
den dynamischen Bereich etc. zu definieren und entsprechend unterschiedliche Schlüssel zu
setzen. Beispielsweise liegen im Falle der Initialisierungsdaten
die bereits verschlüsselten Daten
im externen Speicher vor und das Procedere zu ihrem Auslesen und
Entschlüsseln
kann dasselbe sein wie im Falle des Programms grundsätzlich.
-
Im
Falle des oben beschriebenen Programms (Ausführungs-Codes) wird das Verschlüsselungs-Attribut
durch Vergleichen der aktuellen Task-ID und der Task-ID des Cache-Tags
im Instruktions-Cache 903 bewertet, aber im Falle der Daten unterscheidet
sie sich dahingehend, dass das Verschlüsselungs-Attribut durch Vergleichen
der aktuellen Task-ID und des MTRR (Adressbereich-Register) bewertet
wird.
-
Wenn
es einen Datenzugriff gibt, wird das Zugriffs-Attribut in der MTRR-Tabellen-Verwaltung und
Vergleichseinheit 1402 des Daten-Caches 904, gezeigt
in 11, beurteilt. Genauer gesagt, wenn die aktuelle
Task-ID und die Zieladresse in die MTRR-Tabellenverwaltung und die
Vergleichseinheit 1402 eingegeben werden, werden der Adressbereich der
Einträge
(0 bis 3) der MTRR-Tabelle 1403 entsprechend der Task-ID
und die Zieladresse verglichen.
-
Falls
es nur einen MTRR-Eintrag gibt, der passt, werden seine Attribute
unbedingt übernommen
und ein Satz der Task-ID und der MTRR-Eintritts-ID wird das Verschlüsselungs-Attribut
dieses Speicherzugriffs.
-
Falls
die MTRR-Einträge überlappende Adressbereiche
haben, so dass die Zieladresse zu den Adressbereichen einer Mehrzahl
von MTRR-Einträgen
passt, wird ein MTRR gemäß der für den MTRR
vorab definierten Prioritäts-Reihenfolge
ausgewählt
und er wird für
das Verschlüsselungs-Attribut dieses
Speicherzugriffs verwendet.
-
Das
durch die MTRR-Tabellenverwaltungs- und Vergleichseinheit 1402 auf
diese Weise bestimmte Speicherzugriffs-Attribut wird vorübergehend
im Lesedatenschlüssel-ID-Register 1412 der Verschlüsselungs-Attribut-Ausgabeeinheit 1411 im Falle
des Datenlesens gespeichert. Auch wird in der MTRR-Tabellenverwaltungs-
und Vergleichseinheit 1402 der relative Adresswert aus
der Anfangs-Adresse des MTRR-Eintrags, der traf, und der Zieladresse des
Speicherzugriffs berechnet.
-
Dieses
Speicherzugriffs-Attribut und relativer Adresswert werden über den
internen Bus 905 zur Schlüsselwert-Tabelle (KVT) 912 gesendet,
wie im Falle des Zugriffs auf den Programmspeicher.
-
Diese
Sequenz, mit der der Daten-Cache das Datenlesen an die BIU 906 anfordert,
das Speicherzugriffs-Attribut zur KVT 912 gesendet wird,
die Daten zum FCM 911 gesendet und dort entschlüsselt und
zum Daten-Cache zurückgeschickt
werden, ist derselbe wie im Falle des Instruktions-Caches.
-
Schließlich werden
das Speicherzugriffs-Attribut und der relative Adresswert in den
Cache-Tag geschrieben und das Lesen in den Cache wird abgeschlossen.
-
Als
nächstes
werden das sich auf asynchrones Schreiben in den Daten-Cache in
dem Fall, dass er einen Adress-Umwandlungsmechanismus
aufweist, und einen Mechanismus zum Lösen dieses Problems in dieser
Ausführungsform
beschrieben.
-
14 zeigt
eine Datenstruktur des Daten-Caches in dieser Ausführungsform.
Der Daten-Cache-Speicher 1431 wird durch 256 Linien 1501-0 bis 1501-255 gebildet.
Jede Linie (beispielsweise Linie 0) hat einen Linienpuffer 1501-0-0 zum Speichern
des Inhalts des externen Speichers, ein absolutes Adress-Tag 1501-0-1,
einen relativen Adresswert 1501-0-2, einen Task-Identifizierer 1501-0-3,
einen MTRR-Identifizierer 1501-0-4 und einen Flag-Bereich 1501-0-5.
-
Der
Daten-Cache 904 unterscheidet sich vom Instruktions-Cache 903 dahingehend,
dass Fälle
vorkommen können,
wo die Daten temporär
im externen Speicher zu einem Zeitpunkt des Daten-Zurückschreibens
gesichert werden, das heißt
zu einem Zeitpunkt der Unterbrechung etc.
-
Die
durch eine Task A gelesene Cache-Linie wird nicht notwendigerweise
zum externen Speicher zurückgeschrieben,
indem sie während
der Ausführung
der Task A geflasht wird. Es gibt auch die Möglichkeit, während der
Ausführung
einer anderen Task B geflasht zu werden. In dem Fall, dass der Prozessor
einen Adress-Umwandlungsmechanismus aufweist, ist es möglich, unterschiedliche
Speicher-Maps für
verschiedene Tasks zu haben, so dass die absoluten Speicheradresse
der Cache-Linie nicht eindeutig aus der virtuellen Adresse bestimmt
werden kann.
-
Konventionellerweise
wird dieses Problem durch Bereitstellen eines Absolut-Adress-Tags 1501-0-1 im
Cache-Tag und geben der absoluten Adress-Speicherinformation, so
dass die Speicheradresse der Cache-Linie bestimmt werden kann, unabhängig davon,
welche Task aktuell ausgeführt wird.
-
Wenn
jedoch die Verschlüsselung,
die einen block-entsprechenden
Schlüssel
der vorliegenden Erfindung verwendet, auf diesen Mechanismus angewendet
wird, tritt jedoch das folgende Problem auf. Wie oben beschrieben,
wird der block-entsprechende Schlüssel aus dem Relativ-Adresswert erzeugt, der
eine Differenz zwischen der virtuellen Adresse der Cache-Line und
dem Offset-Wert ist. Im Allgemeinen kann dieser relative Adresswert
nicht aus der absoluten Adresse erzeugt werden, so dass die Datenverschlüsselung
nicht zu einem Zeitpunkt des Zurückschreibens
des Caches ausgeführt
werden kann.
-
Bei
dieser Ausführungsform
wird dieses Problem der Verschlüsselung
zum Zeitpunkt des Zurückschreibens
durch Bereitstellen eines Tags 1501-0-2 zum Speichern des
relativen Adresswerts im Cache-Tag des Daten-Cache-Speichers 1431 und
Speichern des relativen Adresswerts, der zu einem Zeitpunkt des
Sicherstellens dieser Cache-Linie gegeben ist, gelöst. Das
Schreiben des Tags wird zu einem Zeitpunkt der Bestimmung des Verschlüsselungs-Attributs
dieser Cache-Linie ausgeführt.
-
Als
ein anderes Verfahren kann eine ähnliche
Funktion durch Speichern der virtuellen Adresse im Cache-TAG realisiert
werden. Zu einem Zeitpunkt des Ausführens des asynchronen Zurückschreibens des
Caches wird die Speicherbereichs-Information
in der MTRR-Tabelle 1403 gespeichert, so dass es hinreicht,
den relativen Adresswert durch Ermitteln der Offset-Informationen
des MTRR aus der virtuellen Adresse und dem Task-Identifizierer
zu berechnen.
-
Im
Daten-Cache 904 ist es neben den Initialisierungsdaten
und dem durch den Verteilungsschlüssel bestimmten Arbeitsbereich
möglich,
zwei Datenbereiche hinzuzufügen.
Diese Bereiche werden durch die MTRR(Adressbereich-Register)-IDs
2 und 3 spezifiziert.
-
Das
Hinzufügen
des Datenbereichs wird ausgeführt,
wenn die Task ein spezielles "setkey" genanntes Kommando
erteilt. Der Daten-Verschlüsselungsschlüssel, die
ergänzende
Konstante, der Speicherbereich und die MTRR-ID werden in einem vorgegebenen
Register des Prozessors gespeichert, und das "setkey"-Kommando wird erteilt. Das "setkey"-Kommando ist nur für das Datenverschlüsselungs-Attribut
der eigenen Task-ID gültig,
so dass es keinen Bedarf gibt, die Task-ID im Kommando explizit zu
spezifizieren.
-
Das "setkey"-Kommando wird innerhalb
des Kerns 902 ausgeführt,
indem es in die zwei Schritte eines Zugriffs auf die MTRR-Tabelle 1403 des
Daten-Caches 904 und einem Zugriff auf die Daten-Schlüsseltabelle 1305 der
Schlüsselwert-Tabelle 912 zerlegt
wird.
-
Im
Anfangszustand der Task sind die MTRR (Adressbereich-Register)-IDs 2 und
3 in einem ungültigen
Zustand, das heißt
in einem Zustand, in dem die Adressbereichs-Größe 0 ist. In diesem Zustand kann
kein Speicherzugriff zum Adressbereich passen.
-
Wenn
das "setkey"-Kommando erteilt
wird, wird zuerst die Daten-Cache-Linie, die zur Task-ID und zur
MTRR-ID passt, geflasht.
-
Als
nächstes
wird der Verschlüsselungsschlüssel in
einen durch die Task-ID und die MTRR-ID indizierten Eintrag in der
Datenschlüssel-Tabelle 1305 der
Schlüsselwert-Tabelle 912 geschrieben.
-
Als
nächstes
wird der Adressbereich in einen durch die spezifizierte Task-ID
und die MTRR-ID indizierten Eintrag in der MTRR-Tabelle 1403 des
Daten-Caches 904 geschrieben.
-
Wenn
die Adressbereichs-Größe des MTRR 0 übersteigt,
wird ihre Verschlüsselungs-Spezifikation
gültig.
Danach folgt das Schreiben der zusätzlichen Daten wie im Falle
der Initialisierungsdaten.
-
Um
die MTRR-Einstellung zu ändern,
das heißt
das Attribut des Datenbereichs zu ändern, wird das "setkey"-Kommando wieder
erteilt. Wie oben beschrieben, wenn das "setkey"-Kommando erteilt wird, werden die Linien
im Cache, die der MTRR-ID entsprechen, alle geflasht und zu dem
externen Speicher herausgeschrieben. Danach wird die neue Einstellung
in die Datenschlüssel-Tabelle 1305 und
die MTRR-Tabelle 1403 geschrieben und es wird das Lesen/Schreiben
gemäß der neuen
Einstellung begonnen.
-
Die
verschlüsselten
Daten, die einmal zum externen Speicher zurückgeschrieben und gespeichert
werden, können
nur korrekt ausgelesen werden, wenn der Verschlüsselungsschlüssel Kx,
die supplementäre
Konstante Cx und die Offset-Adresse mit den zuvor verwendeten übereinstimmen.
Selbst falls der Verschlüsselungs-Schlüssel und
die supplementäre
Konstante übereinstimmen,
kann, falls die Offset-Adresse nicht übereinstimmt, der korrekte Wert
nicht entschlüsselt
werden. Diese Tatsache ist beim Lesen/Schreiben der Plattendaten
und des gemeinsamen Speichers, der zwischen den Tasks zu teilen
ist, wichtig. Aus diesem Grund werden, wenn das "setkey"-Kommando
ausgeführt
wird, die entsprechenden Cache-Linien unbedingt geflasht.
-
In
Gegensatz dazu, selbst wenn ein Datenbereich zu einem Bereich einer
anderen absoluten Speicheradresse im externen Speicher kopiert wird, können solange,
wie der die oberste Adresse des MTRR spezifizierende Bereich in Übereinstimmung mit
einer bewegten Adresse eingestellt ist, die Originaldaten korrekt
unter der Bedingung gelesen werden, dass der Verschlüsselungsschlüssel und
die supplementäre
Konstante übereinstimmen.
-
Auf
diese Weise kann bei dieser Ausführungsform
selbst bei der Datenverschlüsselung
das individuelle Verschlüsselungs-Schlüsselschema
in Einheiten von Blöcken
für den
Zweck des Verhinderns der Blockaustausch-Attacke und des Speicher-Rearrangement (Relokation)
kompatibel gemacht werden, ohne jeglichen Widerspruch zu verursachen.
-
<Suspension der Task>
-
Im
Multi-Tasking-BS wird die Ausführung
der Task oft durch eine Unterbrechung suspendiert. Nach Unterbrechung
wird der Unterbrechungs-Handler des BS ausgeführt und gemäß Bedarf wird entweder die
Ausführung
zu einer anderen Task umgeschaltet oder die Ausführung wird ohne Umschalten
der Task zur ursprünglichen
Task zurückgegeben.
-
Im
Prozessor dieser Ausführungsform
wird, wenn es eine Unterbrechungsaufforderung vom Unterbrechungs-Controller
gibt, die Ausführung
der geschützten
Task unterbrochen und die Ausführung
des Unterbrechungs-Handlers an der vom Unterbrechungs-Vektor spezifizierten
Adresse gestartet. Das heißt,
die Registerwerte (Kontext-Informationen) der geschützten Task,
die bislang verwendet worden ist, werden im Register-Puffer (Feld) 915 des
Kerns 902 vom Unterbrechungs-Handler gesichert und vor einem Lesen
durch andere Tasks einschließlich
des BS geschützt.
Durch diese Unterbrechung macht der Wert der Task-Zustandstabelle 921 einen Übergang von
RUN zu STOPPED, wie in dem Zustandsübergang von 6 gezeigt.
-
Im
STOPPED-Zustand belegt der Kontext der suspendierten Task den Register-Puffer 915 des Kerns 902,
aber wenn ein SUSPEND-Kommando (Task-Ausführzustands-Speicherkommando)
in diesem Zustand erteilt wird, wird der Inhalt des Register-Puffers
in einem durch das SUSPEND-Kommando spezifizierten Speicherbereich
gespeichert und der Task-Zustand macht einen Übergang zu SUSPEND. Der Unterbrechungs-Handler
kann den Inhalt des Register-Puffers nicht auslesen, aber der Unterbrechungs-Handler
kann den Inhalt des Register-Puffers gemeinsam in den Speicher speichern.
-
In
dem Fall, bei dem die Unterbrechungs-Verarbeitungszeit lang ist,
oder dem Fall, bei dem ein Task-Umschalten auftritt, wird der Inhalt
des Register-Puffers im Cache- Speicher
gespeichert. Es kann auch den Fall geben, bei dem eine gespeicherte Kontext-Information
weiter zum externen Speicher ausgeschrieben wird. In diesem Fall
wird die Kontext-Information an den externen Speicher ausgeschrieben,
nachdem sie unter Verwendung eines vorgegebenen Kontext-Schlüssels verschlüsselt wurde.
-
Um
die Task im SUSPEND (gespeicherten)-Zustand wieder aufzunehmen,
wird ein "resume"-Kommando durch Spezifizieren
der Task-ID und der Speicheradresse der Kontext-Information erteilt, wie
in den 5 und 6 gezeigt.
-
Um
die Task aus dem STOPPED-Zustand (ein Zustand, in dem die Registerwerte
nicht gespeichert, sondern lediglich gesichert sind) wieder aufzunehmen,
wird das "continue"-Kommando erteilt.
Beispielsweise werden in dem Fall, bei dem die Unterbrechungs-Verarbeitung
rasch beendet wird und ein Task-Umschalten
nicht auftritt, oder beim Zähler-Inkrementier-Verarbeiten des Software-Timers
die Registerwerte, die bislang verwendet wurden, nicht gespeichert,
sondern lediglich im Register-Pufferfeld 915 gesichert.
In diesem Fall werden die Registerwerte aus dem Register-Puffer
wiedergewonnen und die Ausführung
der Task vor Unterbrechung wird wieder aufgenommen. Der Task-Zustand
kehrt von STOPPED zu RUN zurück.
-
15 zeigt
den Verarbeitungsfluss, wenn das "suspend"(Task-Zustandsspeicher)-Kommando erteilt
wird.
-
Als
erstes, wenn das "suspend"-Kommando erteilt
wird, wird Bezug genommen auf die Task-Zustandstabelle 921 und
es wird beurteilt, ob der spezifizierte Task-Zustand STOPPED ist
oder nicht (S601). Wenn er nicht STOPPED ist (S601 NEIN), impliziert
dies, dass die bislang verwendeten Registerwerte nicht im Register-Puffer
(Bereich) 915 des Kerns 902 gespeichert sind,
so dass das in diesem Zustand erteilte "suspend"-Kommando ungültig wird und der Task-Zustand
wird auf INVALID gesetzt (S605).
-
Wenn
der spezifizierte Task-Zustand STOPPED ist (S601 JA), wird der Inhalt
des Register-Pufferbereichs 915 in den Speicherbereich
der durch das "suspend"-Kommando spezifizierten
Adresse geschrieben und das Speichern wird begonnen (S602).
-
Das
Speichern wird grundsätzlich
als Speichern in den Cache realisiert und die ID der bis dahin ausgeführten Task
dann durch den Task-Kanal 916, bevor das Speichern beginnt,
wird im Speicherablauf-Kontext-Identifizier-Register 1434 des
Daten-Caches gehalten. Dann wird die Cache-Linie zum Schreiben der
Kontext-Information im Daten-Cache-Speicher 1431 gesichert
und der Datentransfer wird begonnen. Wann immer das Schreiben der
Linie abgeschlossen ist, werden der den Kontext anzeigende Identifizierer
und die Task-ID in den Tag der Cache-Linie geschrieben.
-
Das
Speichern der Kontext-Information überschreibt den ursprünglichen
Speicherinhalt vollständig.
Die Kontext-Information
hat eine Größe, die
ein ganz-zahliges Vielfaches der Cache-Linien-Größe ist und ihre oberste Adresse
ist immer an der Cache-Linien-Größe ausgerichtet,
so dass der normalerweise benötigte
Vorgang (Schreib-Allozierung) zum Auslesen des Speicherinhalts vor
dem Schreiben unnötig wird.
-
Dann
wird der Hash-Wert des gesamten Inhalts des Register-Puffers in der Hash-Berechnungs-Einheit 922 des
Kerns 902 berechnet und der Hash-Wert wird am Ende der
Registerinformation im Speicher zusammen mit der Task-ID angehängt (S603).
In dem Fall, in dem viele Linien involviert sind, berechnet der
Task-Umschalter (STS) 914 des Kerns 902 den Hash,
während
er die Information des Register-Pufferbereichs 915 sequenziell
in die Cache-Linien schreibt. Wenn die Task-ID und der Hash-Wert
am Ende des Kontextbereichs geschrieben werden und der TAG angehängt wird,
wird die Ausführung
des "suspend"-Kommandos abgeschlossen
und der Task-Zustand macht einen Übergang zu SUSPEND (S604).
-
Die
gespeicherte Kontextinformation wird zum externen Speicher 108 asynchron
in Bezug auf die Ausführung
der Task herausgeschrieben. Zu einem Zeitpunkt des Herausschreibens
zu dem externen Speicher unterscheidet sich die Handhabung der Kontextinformation
von der der anderen Informationen in zwei Punkten. Der eine ist
die Handhabung des relativen Adresswertes und der andere ist ein Unterschied
bei der Leseverarbeitung.
-
Die
Kontextinformation wird durch eine Mehrzahl von Blöcken gebildet,
aber es wird derselbe Wert als relativer Adresswert verwendet und
der relative Adresswert ist durch eine vorgegebene Konstante gegeben.
Dies liegt daran, dass die Kontextinformation den daran angehängten Hash-Wert
hat, so dass sie bereits resistent gegenüber Blockaustausch ist. Wenn
die Cache-Linie, in der die Kontextinformation gespeichert ist,
zu flashen ist, wird das extrahierte Verschlüsselungs-Attribut vorübergehend im Schreibkontext-Schlüssel-ID-Register 1415 gespeichert.
Die nachfolgende Verarbeitung ist dieselbe wie im Falle des Herausschreibens
des Daten-Caches.
-
16 zeigt
den Prozessfluss zu einem Zeitpunkt der Wiederaufnahme der Task
aus den gespeicherten Kontextinformationen.
-
Zuerst,
wenn das "resume"-Kommando unter Verwendung
der Task-ID und
der Speicherungs-Speicheradresse als Parameter erteilt wird, um
die Ausführung
der Task durch Einlesen der gespeicherten Kontextinformationen wieder
aufzunehmen, wird beurteilt, ob der spezifizierte Task-Zustand SUSPEND
ist oder nicht (S701). Wenn sie nicht im SUSPEND-Zustand ist (S701
NEIN), wird die Kontextinformation nicht gespeichert, so dass der Task-Zustand
auf INVALID gesetzt wird (S707). Anders ausgedrückt, ist das "resume"-Kommando ungültig, wenn
der Task-Zustand in einem anderen Zustand als SUSPEND ist.
-
Wenn
er im SUSPEND-Zustand ist (S701 JA), werden die Adresse und die
Task-ID zum Daten-Cache 904 über die Adresslinie bzw. den Task-Kanal
gesendet. Wenn die Adresse des Cache trifft und der Tag anzeigt,
dass der Kontext und die Task-ID übereinstimmen, werden die Daten
im Cache-Speicher 1431 zum Register-Puffer übertragen und
wird die Task-Wiederaufnahme-Verarbeitung
gestartet (S702).
-
Parallel
zur Datenübertragung
zum Register-Puffer wird die Hash-Berechnung ausgeführt (S703).
Es wird beurteilt, ob der kalkulierte Hash-Wert mit dem erwarteten
Wert übereinstimmt oder
nicht (S704), und falls sie nicht übereinstimmen, wird die Wiederaufnahme-Verarbeitung
unterbrochen und es wird der Task-Zustand auf INVALID gesetzt (S707).
-
Wenn
der Hash-Wert übereinstimmt
(S704 JA), wird die ID der spezifizierten Task auf das aktuelle
Task-Register gesetzt (S705), der Task-Zustand macht einen Übergang
zu RUN und die Ausführung wird
wieder aufgenommen (S706).
-
Obwohl
im Verarbeitungsfluss von 16 nicht
beschrieben, ist der Fall, bei dem der Cache für den Bereich der durch das "resume"-Kommando spezifizierten
Kontextinformationen nicht trifft, der Fall, bei dem die gespeicherten
Daten zum externen Speicher herausgeschrieben werden. In diesem
Fall wird das Datenlesen aus dem externen Speicher gestartet. Das
heißt,
die im Task-ID-Register 1401 gehaltene Task-ID und die
Leseanforderung für
den Speicher entsprechend der durch das "resume"-Kommando spezifizierten Adresse werden
aus dem Daten-Cache 904 zur BIU 906 gesendet.
Dann werden die Task-ID und das den Kontext anzeigende Verschlüsselungs-Attribut
zur Schlüsselwert-Tabelle 912 gesendet
und der Schlüssel
zur Entschlüsselung wird
in FCM 911 erzeugt. Die Kontextinformation der zu irgendeinem
Zeitpunkt gespeicherten Task wird unter Verwendung desselben Schlüssels vollständig verschlüsselt, so
dass die Schlüsselerzeugung
in Einheiten von Blöcken
hier nicht ausgeführt
wird.
-
Die
Blöcke,
für welche
die Entschlüsselung abgeschlossen
ist, werden sequenziell zum Daten-Cache 904 gesendet und
der Task-Umschalter (STS) 914 liest
ihre Inhalte in den Register-Pufferbereich 915.
Die nachfolgende Verarbeitung ist die gleiche wie im Falle des Cache-Treffers.
-
<Beendigung der Task>
-
Um
die Task zu beenden und die allozierte Task-ID und die verschiedenen
Tabellen innerhalb des Prozessors zum Nutzen einer anderen neuen Task
wieder zu verwenden, wird das "delete"-Kommando durch Spezifizieren
der Task-ID erteilt. In dieser Ausführungsform kann die Task-ID
der Task, die einmal registriert ist, nicht zum Nutzen einer neuen Task
verwendet werden, während
das System arbeitet, um ein illegales Ausspionieren des Inhalts
der Task bis dahin zu verhindern.
-
17 zeigt
den Verarbeitungsfluss im Falle der Task-Löschung.
-
Zuerst,
wenn das "delete"-Kommando in Bezug
auf die Task erteilt wird, wird beurteilt, ob der Zustand der spezifizierten
Task einer von INIT, STOPPED oder SUSPEND ist oder nicht (S801).
Wenn der Task-Zustand nicht in einem der obigen Zustände ist (das
heißt,
wenn der Task-Zustand RUN oder NULL ist), wird der Task-Zustand
auf INVALID gesetzt (S805) und wird als ein Fehler behandelt.
-
Wenn
der Task-Zustand in einem der obigen Zustände ist (S801 JA), werden die
Cache-Linien mit dem Tag entsprechend der spezifizierten Task geflasht
(S802).
-
Als
Ergebnis werden die entsprechenden Schlüsseltabellen 1303 bis 1305,
die Offset-Tabelle 1207 des Instruktions-Caches und die
MTRR-Tabelle 1403 des Daten-Caches ebenfalls gelöscht (S803).
-
Wenn
diese Vorgänge
abgeschlossen sind, wird der Task-Zustand auf NULL gesetzt (S804).
-
Das "delete"-Kommando soll eher
vom BS als der Task selbst erteilt werden und das "delete"-Kommando kann nur
in Bezug auf eine Task in einem anderen Zustand als RUN und NULL
erteilt werden.
-
Wenn
die Task gelöscht
wird und der Task-Zustand zum NULL-Zustand wird, ist es möglich, eine
neue Task auszuführen,
indem der Verteilungsschlüssel
unter Verwendung des "register"-Kommandos wieder
registriert wird.
-
Wie
beschrieben, wird das Programm gemäß der vorliegenden Erfindung
in Einheiten von Blöcken
durch ein einfaches Verfahren anhand einer kleinen Anzahl von Geheimnissen
verschlüsselt/entschlüsselt, so
dass es möglich
wird, eine Blockaustausch-Attacke zu verhindern, und es möglich wird, die
Ressourcen-Verwaltung und Verarbeitungslasten sowohl auf Seiten
des Softwareanbieters als auch auf Seiten des Mikroprozessors zu
mindern.
-
Auch
wird gemäß der vorliegenden
Erfindung die relative Adresse basierend auf dem virtuellen Speicherraum
für die
block-entsprechende Verschlüsselung
verwendet, so dass es möglich
wird, das Problem der Relokation effizient zu behandeln.
-
Auch
werden gemäß der vorliegenden
Erfindung die Schlüsselwert-Tabelle
und das Schnellverschlüsselungs-Schlüsselverarbeitungs-Modul
zwischen den Caches geteilt, so dass es möglich wird, die Hardware-Kosten
zu verringern.
-
Es
sollte auch angemerkt werden, dass neben den bereits oben erwähnten viele
Modifikationen und Variationen der obigen Ausführungsformen gemacht werden
können,
ohne von den neuartigen und vorteilhaften Merkmalen der vorliegenden
Erfindung abzuweichen. Dementsprechend sollen alle solchen Modifikationen
und Variationen als innerhalb des Schutzumfangs der anhängigen Ansprüche beinhaltet
sein.