-
QUERVERWEIS
-
Diese Anwendung beansprucht das Einreichdatum
der mitanhängigen
Provisional Applications Nr. 60/296,958, 60/296,957 und 60/297,175,
die alle am B. Juni 2001 eingereicht wurden.
-
GEBIET DER
ERFINDUNG
-
Die vorliegende Erfindung bezieht
sich auf Computerarchitektur, Betriebssysteme, Computersystemsicherheit
und insbesondere auf eine sichere Maschine und eine sichere Maschinenschnittstelle,
die sichere Speicherverwaltung, abfertigbare Objektabfertigung,
Ausnahmenhandhabung, Unterbrechungshandhabung, Fehlerbeseitigung
und Leistungsfähigkeitsüberwachung,
kryptographische Dienste und sichere Depotdienste für Betriebssysteme
und anwendungsspezifische Steuerprogramme liefert.
-
HINTERGRUND
DER ERFINDUNG
-
Die Computersicherheit ist in akademischen,
staatlichen und kommerziellen Rechenorganisationen zu einem stark
untersuchten und entscheidenden Gebiet der Forschung geworden. Obwohl
Hersteller und Benutzer von Computersystemen seit vielen Jahren
versuchen, sichere Computersysteme zu schaffen, um einen Zugriff
auf gespeicherte Daten, Verarbeitungsressourcen bzw. -betriebsmittel
und andere Rechnerressourcen in einem Computersystem zu steuern,
waren die beträchtlichen
Bemühungen
von Computerherstellern und -benutzern bisher nicht erfolgreich
darin, sichere Compu systeme zu erzeugen. Viele notorische Computersystemsicherheitsverletzungen
wurden in den vergangenen Jahren weit publiziert, einschließlich dem
Gelddiebstahl von Geldausgabeautomaten und Computersystemen in Finanzinstitutionen,
die Beschaffung von streng vertraulichen und geheimen Dokumenten
und Informationen von Regierungs-, Handels- und Privatcomputersystemen,
eine Anzahl von äußerst aufwendigen
und schädlichen
Computerviren, die über
E-Mail und andere Internet-bezogene Dienste ausgebreitet wurden,
und viele andere schwere Sicherheitsverletzungen.
-
Computersicherheitsprobleme bei kommerziellen
Computersystemen wurden bis zum heutigen Zeitpunkt überwiegend
auf reaktive Weise adressiert. Im allgemeinen werden Sicherheitsprobleme
nach der Herstellung neuer kommerzieller Computersysteme erkannt,
die potentielle Sicherheitsverletzungen enthalten, und werden durch
ziemliche Ad-Hoc-, Nachentwurfs-Methodiken adressiert. Sicherheitstechniken
entwickeln sich im allgemeinen als Folge der Entwicklung der darunterliegenden
Rechentechnologien und Ressourcen. Obwohl bei bestehenden Systemen
verschiedene Sicherheitsprobleme erkannt und ausgebessert werden können, bleiben
viele zusätzliche
potentielle Sicherheitsprobleme oft unerkannt und für eine spätere Entdeckung
durch unaufmerksame und unbeabsichtigte Fehler verfügbar, oder,
was häufiger
ist, durch systematisches Testen der Computersystemsicherheitsmerkmale
durch böswillige
Benutzer und Recheneinheiten.
-
Die Erfindung, die nachfolgend erörtert wird,
bezieht sich auf Betriebssysteme und Betriebssystem- und Computersystemsicherheit.
Um diese Diskussion zu ermöglichen,
und um eine weitere Hintergrunddiskussion zu ermöglichen, wird zunächst nachfolgend
eine genaue Übersicht
von Computerhardwarearchitektur und Betriebssystemen geliefert.
-
1 ist
ein Blockdiagramm, das Hardware-, Betriebssystem- und Anwendungsprogrammschichten in
einem allgemeinen Computersystem zeigt. Ein Computersystem 100 kann
so gese hen werden, dass es eine Hardwareschicht 102, eine
Betriebssystemschicht 104 und eine Anwendungsprogrammierschicht 106 umfaßt. Computersysteme
sind relativ komplex, mit vielen zusätzlichen Komponenten, Unterschichten
und Logikentitätwechselbeziehungen,
aber die in 1 gezeigte
Drei-Schicht-Hierarchie stellt eine logische Ansicht von Computersystemen
dar, die üblicherweise
in der Computersoftware- und Hardwareindustrie verwendet werden.
-
Die Hardwareschicht 102 umfaßt die physikalischen
Komponenten eines Computersystems. Diese physikalischen Komponenten
umfassen für
viele Computersysteme einen Prozessor 108, Speicherspeicherungskomponenten 110, 112 und 114,
interne Busse und Signalleitungen 116 bis 119,
Busverbindungsgeräte 120 und 122 und
verschiedene Mikroprozessor-basierte Peripherieschnittstellenkarten 124 bis 129.
Der Prozessor 108 ist eine Anweisungsausführungsvorrichtung,
die einen Strom von Anweisungen ausführt, die durch den Prozessor
von den internen Speicherkomponenten 110, 112 und 114 erhalten
werden. Der Prozessor enthält
eine kleine Anzahl von Speicherspeicherungskomponenten, die als
Register 130 bezeichnet werden, auf die schnell zugegriffen
werden kann, und moderne Prozessoren können auch eine relativ kleine
Menge an gespeicherten Anweisungen umfassen. Im allgemeinen werden
Daten und Anweisungen von der Nur-Lese-Speicher- („ROM" _ read-only memory)
Komponente 110 gelesen, und über interne Busse 116 und 117 und
die Busverbindungsvorrichtung 120 von den Speicherkomponenten 112 und 114 gelesen
und auf dieselben geschrieben. Eine sehr viel größere Datenspeicherkapazität befindet
sich in Peripheriedatenspeichervorrichtungen, wie z. B. Plattenlaufwerken,
CD-ROM-Laufwerken, DVD-Laufwerken
und anderen solchen Komponenten, auf die durch den Prozessor über interne
Busse 116, 118 und 119, Verbindungsvorrichtungen 120 und 122 und
eine oder mehrere der Peripherievorrichtungsverbindungskarten 124 bis 129 zugegriffen
wird. Beispielsweise können
sich die gespeicherten Anweisungen eines großen Programms auf einem Plattenlaufwerk
für die Wiedergewinnung
und Speicherung in internen Speicherkomponenten 112 und 114 befinden,
auf einer Nach-Bedarf-Basis
während
der Ausführung
des Programms. Komplexere Computer können mehrere Prozessoren umfassen,
mit entsprechend komplexeren internen Busverbindungen und zusätzlichen
Komponenten.
-
Die Betriebssystemschicht 104 ist
eine logische Schicht, die verschiedene Softwareroutinen umfaßt, die
auf dem Prozessor 108 oder einem oder mehreren eines Satzes
von Prozessoren ausgeführt
werden, und die die physikalischen Komponenten des Computersystems
verwalten. Ein Computerbetriebssystem wird allgemein als die Softwareschicht
des niedrigsten Pegels in einem Computersystem angesehen, und dient
dazu, eine Kombinierte-Hardware/Softwareumgebung zu erzeugen, bei
der Benutzerprogramme, einschließlich Anwendungsprogramme,
laufen können,
und die die interaktive Verwendung von Computersystemdiensten durch
Benutzer durch verschiedene Eingabe/Ausgabe- („I/O" = Input/output) Geräte unterstützt.
-
Betriebssystemroutinen laufen bei
einem traditionellen Computersystem bei einer höheren Priorität als Benutzerpegelanwendungsprogramme,
dieselben koordinieren die gleichzeitige Ausführung vieler Anwendungsprogramme
und liefern jedem Anwendungsprogramm eine Laufzeitumgebung, die
eine Prozessorzeit, zumindest einen Speicherbereich, der durch einen
Adreßraum
adressiert wird, der dem Anwendungsprogramm geliefert wird, und
eine Vielzahl von Dateneingabe- und Ausgabediensten umfaßt, einschließlich einem Zugriff
auf Speicherkomponenten, Peripheriegeräte, Kommunikationsmedien und
andere interne und externe Vorrichtungen.
-
Jedes aktuell laufende Programm wird
in dem Kontext eines Prozesses ausgeführt, einer logischen Entität, die durch
verschiedene Zustandsvariablen und Datenstrukturen definiert wird,
die durch das Betriebssystem verwaltet werden. Eine wichtige interne
Datenstruktur, die durch das Betriebssystem verwaltet wird, ist eine
oder mehrere Prozeß- Warteschlangen 132,
die für
jeden aktuell aktiven Prozeß einen
Prozeßsteuerblock oder
eine ähnliche
Datenstruktur enthalten, die Daten speichert, die den Zustand des
aktuell aktiven Prozesses definieren, der durch das Betriebssystem
verwaltet wird. Das Betriebssystem 104 gibt jedem gleichzeitig ablaufenden
Programm die Illusion, daß das
Programm die Computerhardware 102 auf eine fortlaufende
Weise verwendet, obwohl das Betriebssystem 104 in der Realität zu jedem
bestimmten Moment nur höchstens
ein Programm pro Prozessor bearbeitet, wobei die Ausführung zwischen
den verschiedenen aktuelle aktiven Programmen schnell geschaltet
wird, der Kontext eines Programms vor dem Neustarten der Ausführung des
Programms wieder hergestellt wird, und der Kontext eines Programms
im Speicher gespeichert wird, während
das Programm im Leerlauf (inaktiv) ist, um es einem anderen Programm
zu ermöglichen,
zu laufen. Das Betriebssystem 104 liefert außerdem für Ausführungsprogramme
etwas verallgemeinerte logische Schnittstellen, durch die die ausführenden
Programme auf viele Typen von entfernten und lokalen Rechenressourcen
zugreifen und dieselben verwenden können, einschließlich physikalischem
Speicher, Massenspeichervorrichtungen, Kommunikationsnetzwerke,
I/O-Geräte
und andere Ressourcen.
-
Die Anwendungsprogrammier- und Benutzerschnittstellenschicht 106 ist
die für
den Benutzer sichtbare Schicht des Computersystems. Ein Anwendungsprogramm
umfaßt
einen Satz von gespeicherten Anweisungen und Daten 134 in
einem Speicherbereich, die in einem Adreßraum adressiert werden, der
durch das Betriebssystem dem Prozeß zur Verfügung gestellt wird, der das
Anwendungsprogramm ausführt,
und Ressourcen 136 bis 142, auf die durch das
Anwendungsprogramm durch die Betriebssystemschnittstelle zugegriffen
wird, die es dem Anwendungsprogramm ermöglichen, Daten auf externe
Vorrichtungen und Datenbankverwaltungssysteme zu speichern und von
denselben wiederzugewinnen, Systeminformationen zu erhalten, wie
z. B. die Werte eines internen Takts und Systemkonfigurationsinformationen,
und auf zusätzliche
Dienste zuzugreifen. Der Speicherbereich und die Ressourcen sind
in Hardwarespeicher-, Datenspeicherungs-, Kommunikations- und anderen
Komponenten implementiert, und sind in 1 in der Anwendungsprogrammier- und Benutzerschnittstellenschicht 106 in
einem logischen Sinn gezeigt.
-
Bei früheren Computersystemen gab
es keine Betriebssysteme. 2 ist
ein Blockdiagramm, das ein frühes
Computersystem darstellt. Ein einzelnes Anwendungsprogramm 202 läuft direkt
auf der Computersystemhardware 204, bildet eine Schnittstelle
mit der Hardware über
eine einfache Hardwareschnittstelle 206, die die Maschinenanweisungen
und Register umfaßt,
die durch die Hardware geliefert werden. Ein Anwendungsprogramm
wird als ein Papierband oder Stapel von gelochten Karten in die
Maschine geladen, zusammen mit einem Satz von Papierbändern oder
gelochten Karten, die verschiedene Rechnerbibliotheken und I/0-Bibliotheken
codieren, die Routinen liefern, die von dem Anwendungsprogramm bei
der Laufzeit benötigt
werden. Bei früheren
Maschinen wird ein Anwendungsprogramm geladen und bis zum Abschluß ausgeführt. Die
Abwicklung der Anwendungsprogrammausführung wird durch menschliche
Systemverwalter ausgeführt,
wobei die Papierbänder
oder gelochten Karten, die Anwendungsprogramme codieren, physikalisch
in Regalen oder Ablagen abgelegt werden, und gemäß den Prioritäten, die
den Anwendungsprogrammen zugewiesen sind, von der Zuerst-Hinein-Zuerst-Ausgeführt-Reihenfolge
manuell neu geordnet werden.
-
Betriebssysteme entstanden aus einem
Wunsch, die Systemverwaltung im Zusammenhang mit dem Laden und Ausführen von
Anwendungsprogrammen zu automatisieren, und aus einem Bedarf, eine
gleichzeitige Verwendung und interaktive Verwendung von Computersystemen
für eine
Anzahl von Benutzern bereitzustellen. Betriebssysteme wurden für Großcomputersysteme
entwickelt, wie z. B. die IBM System/360-Reihe. 3 ist ein Blockdiagramm, das die logische
Position eines Betriebssystems in einem frühen Großcomputer darstellt. Der privilegierteste
Teil eines Betriebssystems, der normaler weise als Kernel bzw. Betriebskern 302 bezeichnet
wird, bildet eine Schnittstelle mit der Computerhardware 304 durch
eine Hardwareschnittstelle, die nicht-privilegierte und privilegierte
Anweisungen und Register und Hardwareunterbrechungsmechanismen umfaßt. Die
Register und Anweisungen werden in privilegierte und nicht-privilegierte
Sätze partitioniert,
um eine bestimmte Maschinenfunktionalität für das Betriebssystem zu reservieren,
und um Anwendungsprogramme höherer
Ebene daran zu hindern, auf diese Funktionalität zuzugreifen. Beispielsweise
sind Register, die an der Einstellung der Ausführungspriorität eines
laufenden Programms beteiligt sind, im allgemeinen privilegiert, ein
Anwendungsprogramm daran zu hindern, die Abwicklung und Prioritätensetzung
von Anwendungsprogrammen des Betriebssystems zu durchkreuzen oder
zu verfälschen.
Das Betriebssystem hat vollen Zugriff sowohl auf privilegierte als
auch nicht-privilegierte Anweisungen und Register und auf Hardwareunterbrechungsmechanismen,
aber gibt nur nichtprivilegierte Anweisungen und Register für Anwendungsprogramme über die
Betriebssystemschnittstelle 308 preis. Zusätzlich zu
den nicht-privilegierten Anweisungen liefert die Betriebssystemschnittstelle
viele unterschiedliche Betriebssystemdienstroutinen. Wenn ein Anwendungsprogramm 310 beispielsweise
auf einer Betriebssystemschnittstelle läuft, muß dasselbe nicht zusammen mit I/0-Bibliotheken
verpackt werden, wie in dem Fall von frühen Computersystemen, die keine
Betriebssysteme hatten, sondern kann über I/O-Dienstroutinen, die durch das Betriebssystem 302 geliefert
werden, auf I/0-Geräte
zugreifen.
-
Bei modernen Personalcomputer- („PC"-) Systemen besetzt
das Betriebssystem eine ungefähr äquivalente
logische Position innerhalb des Systems. 4 ist ein Blockdiagramm der Anwendungs-,
Betriebssystem- und Hardwareschichten eines modernen PC. Die Schnittstelle 403 zwischen
der PC-Hardware 404 und dem Betriebssystem 406 umfaßt jedoch
eine neue Firmwaredienstschnittstelle, die optional teilweise einem Anwendungsprogramm
preisgegeben werden kann. Die Firmware schnittstelle umfaßt verschiedene
Firmwareroutinen, die eine Steuerung über Hardwaremerkmale liefern,
einschließlich
Anzeigemerkmale.
-
In modernen Betriebssystemen werden
Hardwareprivilegpegel verwendet, um Ressourcen zwischen dem Betriebssystem
und anderen Routinen und Programmen zu partitionieren. 5A-D stellen
die fundamentalen Privilegpegelmechanismen und – merkmale in einem allgemeinen
Computerhardwaresystem dar. Zu jeder bestimmten Zeitperiode ist
ein ausführendes
Programm einem aktuellen Privilegpegel zugeordnet. Der Privilegpegel
wird in einem Bitfeld 502 in einem Prozessorstatusregister 504 beibehalten.
Das Prozessorstatusregister steuert und reflektiert den fundamentalen
Zustand des Prozessors. Viele aktuelle Computersysteme verwenden
nur zwei Privilegpegel, privilegiert und nicht-privilegiert, und
benötigen
daher nur ein einziges Bit in dem Privilegpegelbitfeld zum Steuern
des aktuellen Privilegpegels. Moderne Computersysteme und auch einige
frühere
Systeme verwenden mehr als zwei Privilegpegel. Im allgemeinen ermöglichen
n Bit in dem Privilegpegelbitfeld 2n diskrete
Privilegpegel, die von dem Privilegpegel 0, der normalerweise der
privilegierteste der Privilegpegel ist, zu dem Privilegpegel 2n–1
reichen. Ressourcen in dem Computersystem werden im allgemeinen
in Sätze
von Ressourcen aufgeteilt, die nur für Prozesse zugreifbar sind,
die auf einem oder mehreren Privilegpegeln ausführen. Beispielsweise, wie es
in 5B gezeigt ist, partitionieren
viele allgemeine Maschinenarchitekturen den Anweisungssatz 506 in
einen Satz von nicht-privilegierten Anweisungen 508 und privilegierten
Anweisungen 510. Die nicht-privilegierten Anweisungen sind
für Prozesse
zugreifbar, die auf jedem Privilegpegel laufen, während die
Privilegpegel nur für
Prozesse zugreifbar sind, die auf dem Privilegpegel 0 laufen. Im
allgemeinen-laufen die Betriebssystemkernelroutinen auf dem Privilegpegel
0, und, falls korrekt aufgebaut, können exklusiv den privilegierten
Anweisungssatz verwenden, um die Ausführung von Anwendungspegelprozeßerzeugung,
-ausführung
und -abwicklung zu verwal ten. Außerdem, wie es in 5C gezeigt ist, ist der
gesamte Hardwareregistersatz 512 in einen nichtprivilegierten
Registersatz 514 und einen privilegierten Registersatz 516 partitioniert,
wobei nicht-privilegierte Register für Prozesse zugreifbar sind,
die auf jedem Privilegpegel laufen, während die privilegierten Register
nur für
Prozesse zugreifbar sind, die auf dem Privilegpegel 0 laufen. Das
Prozessorstatusregister 504 ist beispielsweise ein privilegiertes
Register, um einen Nicht-Kernel-Code daran zu hindern, zu versuchen,
den aktuellen Privilegpegel zu befördern und auf Ressourcen zuzugreifen,
die für
einen Nicht-Kernel-Code unzugreifbar sein sollen.
-
Der Speicher kann auch bezüglich Privilegpegeln
partitioniert werden, wie es in 5D gezeigt
ist. Im allgemeinen ist der Speicher 518 in Seiten partitioniert
(z. B. Speicherseite 520). Eine Speicherseite ist eine Grundeinheit
von Speicher bezüglich
der I/O-Operationen, der Virtueller-Speicher-Zu-Physikalischer-Speicher-Abbildung,
und anderen Typen von Betriebssystemaktivitäten. Bei vielen Systemen kann
jede Speicherseite einer Anzeige von einem oder mehreren Privilegpegeln
zugeordnet sein, wie z. B. die Privilegpegelanzeige 522,
die der Seite 520 zugeordnet ist. Diese Anzeigen können direkt
eingebaut sein, als Etiketten in den Speicherseiten, oder können sich
in Hilfsdatenstrukturen befinden, die die Speicherseiten beschreiben
oder auf dieselben Bezug nehmen. Obwohl Anweisungssätze und
-register häufig
in nur zwei unterschiedliche Privilegpegel-basierte Partitionierungen
partitioniert sind, wie es oben erörtert wurde, kann das Partitionieren
von Speicherseiten bezüglich
des Privilegpegels komplexer sein. Beispielsweise kann eine Seite
für Prozesse
zugreifbar gemacht werden, die auf den Privilegpegeln 0 bis 2 ausgeführt werden,
ein anderer kann zugreifbar gemacht werden für Prozesse, die auf allen 2" Privilegpegeln ausgeführt werden,
und andere können
nur für Prozesse
zugreifbar gemacht werden, die an einem Privilegpegel 0 ausgeführt werden.
-
Das Partitionieren von Ressourcen
ist eine fundamentale Technik, die im Entwurf von zuverlässigen und
sicheren Betriebssystemen verwendet wird, aber allein nicht ausreichend
ist. Es gibt viele Aspekte von Sicherheit und Zuverlässigkeit,
die nicht allein durch eine Hardwarepegel-Privilegbasierte Partitionierung adressiert
werden können. 6 stellt ein Beispiel einer
Sicherheits- und Zuverlässigkeitsverletzung
dar, die bei vielen modernen Computersystemen besteht. Eine vereinfachte
Blockdiagrammdarstellung 602 eines Computersystems ist
in 6 gezeigt. Normalerweise
liefert ein Betriebssystemverkäufer
die Betriebssystemschicht 604, die auf der Hardwareschicht 606 laufen
soll, die durch einen Hardwareverkäufer geliefert wird. Bei vielen modernen
Computersystemen können
dritte Verkäufer
Peripherie-Hardware-I/0-Geräte
liefern, die durch den Hardwareverkäufer oder durch Computersystembesitzer
in der Computersystemhardware eingebaut werden. Diese Peripheriehardwaregeräte benötigen Schnittstellen-Softwareroutinen,
die als I/0-Treiber bekannt sind, die installiert werden, um in
oder in Verbindung mit dem Betriebssystem zu laufen. Beispielsweise
befindet sich in 6 der
I/0-Treiber 608 in
der Betriebssystemschicht 604. Im allgemeinen muß der I/0-Treiber
608 auf dem höchsten
Privilegpegel laufen, um eine Schnittstelle mit privilegierten Registerund
Speicherressourcen zu bilden, die für Anwendungspegelprogramme
nicht zugreifbar sein sollen. Beispielsweise ist in 6 ein Abschnitt 610 der Speicherressourcen
für die
Maschine gezeigt. Ein Bereich in dem Speicher 612 ist für einen
Zugriff durch Anwendungspegelprogramme beabsichtigt. Ein anderer
Bereich des Speichers 604 ist für einen Zugriff nur durch Betriebssystemroutinen
beabsichtigt. Dieser Bereich kann beispielsweise gespeicherte kryptographische
Schlüsselinformationen 616 umfassen.
Ein weiterer Bereich in dem Speicher 618 ist für die Verwendung
durch den I/O-Treiber 608 und
das Betriebssystem beabsichtigt, der I/O-Puffer enthält, die der I/O-Treiber und
das Betriebssystem verwenden, um Daten auszutauschen.
-
Falls der I/O-Treiber korrekt geschrieben
ist und keinen böswilligen
Code enthält,
lesen die I/O-Treiberroutinen nur von dem I/O-Pufferbereich 618 des
Speichers und schreiben auf denselben, und können weder das Betriebssystem
noch die Anwendungsroutinen durch Speicheroperationen stören. weder
der Hardwareverkäufer
noch der Betriebssystemverkäufer
haben jedoch eine Kontrolle über
die Inhalte des I/O-Treibers.
Sie können
ein Authentifizierungsverfahren verwenden, um zu bestimmen, daß der I/O-Treiber
von einem bestimmten dritten Verkäufer empfangen wurde. Sie können sogar
den I/O-Treiber testen, bevor derselbe installiert wird. Einige
dritte Verkäufer
machen keinen Quellcode für
ihre I/O-Treiber für
eine Untersuchung verfügbar,
wodurch das Ausmaß begrenzt
wird, bis zu dem der I/O-Treiber durch die Betriebssystem- und Hardwareverkäufer unabhängig verifiziert
werden kann. Es ist möglich,
daß der
I/O-Treiber entweder einen Trojanisches-Pferd-Code umfaßt, der
zu böswilligen
Zwecken eingefügt
wurde, oder Programmfehler (Bugs) enthalten kann. In jedem Fall
kann der I/O-Treiber versuchen, auf Abschnitte des Speichers außerhalb
des I/O-Pufferbereichs 618 zuzugreifen,
auf den der I/O-Treiber ursprünglich
beschränkt
sein sollte. Bei vielen aktuellen Computersystemen kann nichts den
I/O-Treiber daran hindern, jeden Speicherbereich innerhalb des Systems
zu lesen und zu beschreiben, weil der I/O-Treiber im allgemeinen
auf dem Kernel-Pegel-Privileg ausführt. Sobald ein falsches oder
böswilliges
Programm damit beginnt, auf dem Kernel-Pegel-Privileg zu laufen, kann das Programm
den vollen Satz von Ressourcen verwenden, der für das Betriebssystem verfügbar ist.
In dem aktuellen Fall kann beispielsweise eine Trojanisches-Pferd-Routine
in dem I/O-Treiber eine Ausführung während der
I/O-Treiber-Operation beginnen, auf die kryptographischen Schlüssel 616 zugreifen,
die in dem Speicher gespeichert sind, der für das Betriebssystem 614 zugewiesen
ist, und können
andere Betriebssystemroutinen und Hardwareressourcen verwenden,
um die kryptographischen Schlüssel
zu einer entfernten Entität
zu exportieren.
-
Das in 6 dargestellte Problem ist nur eines
einer beinahe unbegrenzten Anzahl von Sicherheitsproblemen, die
sich bei aktuellen Computersystemen ergeben können. Für viele identifizierte Probleme
können
verschiedene Maßnahmen
entworfen und neu in das Betriebssystem eingepaßt werden, in einem Versuch,
die Systemempfindlichkeiten im Zusammenhang mit dem Problem zu schließen oder
zu verkleinern. Solche Maßnahmen
sind im allgemeinen jedoch spezifisch nur für ein oder eine kleine Anzahl
von Problemen, und eine große
Anzahl von zusätzlichen
Verletzlichkeiten bleiben unerfaßt und potentielle Quellen
von zukünftigen Sicherheitsproblemen.
Manchmal sind die versuchten Lösungen
unvollständig
oder falsch. Bei bestimmten Fällen
sind die versuchten Lösungen
selbst die Quelle zusätzlicher
Probleme. Bis zum heutigen Tag wurden keine vollständig sicheren
kommerziellen Allzweck- Computersysteme hergestellt, trotz der Erkenntnis,
dass es wünschenswert
ist, sichere Systeme zu erzeugen. Obwohl die allgemeine Vorstellung
von Computersystemsicherheit Entwurfs- und Entwicklungsbemühungen in
der Tat seit vielen Jahren motiviert hat, ist ein klares und umfassendes
Verständnis
der Computersicherheit und rationaler Lösungsansätze zum Lösen computersicherheitsbezogener
Themen nach wie vor schwer zu definieren. Entwerfer, Hersteller,
Entwickler und Benutzer von Computersystemen haben somit einen Bedarf
an einem umfassenden Verständnis
von Computersicherheit, sicheren Computersystemen und Computersicherheitsmethoden
erkannt.
-
ZUSAMMENFASSUNG
DER ERFINDUNG
-
Ein Ausführungsbeispiel der vorliegenden
Erfindung schafft eine Kombinierte-Hardware-und-Software-Sicherheitsplattform,
und eine Kombinierte-Hardware-und-Software-Sicherheitsplattformschnittstelle,
mit der Betriebssysteme und anwendungsspezifische Steuerprogramme
in einem Computersystem eine Schnittstelle bilden. Dieses Ausführungsbeispiel
der vorliegenden Erfindung verwendet eine Hardwareplattform, die zumindest
vier Privilegpegel, nicht-privilegierte Anweisungen, nicht-privilegierte
Register, privilegierte Anweisungen, privilegierte Register und
Firmwareschnittstellen liefert. Die Kombinierte-Hardware-und-Software-Sicherheitsplattformschnittstelle
verbirgt die privilegierten Anweisungen, privilegierten Register
und Firmwareschnittstellen von Betriebssystemen und anwendungsspezifischen
Steuerprogrammen, wobei den Betriebssystemen und den anwendungsspezifischen
Steuerprogrammen die nichtprivilegierten Anweisungen und nicht-privilegierten
Register geliefert werden, die durch die Hardwareplattform geliefert
werden, und auch ein Satz von aufrufbaren Softwarediensten. Die
aufrufbaren Softwaredienste liefern einen Satz von Sicherheitsplattformverwaltungsdiensten
für eine
Betriebssteuerung von Hardwareressourcen, die weder privilegierte
Anweisungen und privilegierte Register der Hardware preisgeben noch
privilegierte Anweisungen und privilegierte Register simulieren.
Die aufrufbaren Dienste liefern außerdem einen Satz von Sicherheitsverwaltungsdiensten,
die auch als Sicherheitsdepot bezeichnet werden, die intern erzeugte
geheime Daten verwenden, wobei jeder Sicherheitsverwaltungsdienst
interne geheime Daten verwaltet, ohne die internen geheimen Daten
einer Rechnereinheit außer
dem Sicherheitsverwaltungsdienst selbst preiszugeben.
-
KURZE BESCHREIBUNG
DER ZEICHNUNGEN
-
1 ist
ein Blockdiagramm, das Hardware-, Betriebssystem- und Anwendungsprogrammschichten in
einem allgemeinen Computersystem zeigt.
-
2 ist
ein Blockdiagramm, das ein frühes
Computersystem zeigt.
-
3 ist
ein Blockdiagramm, das die logische Position eines Betriebssystems
in einem frühen
Großcomputer
zeigt.
-
4 ist
ein Blockdiagramm der Anwendungs-, Betriebssystem- und Hardwareschichten
eines modernen PC.
-
5A-D stellen
die fundamentalen Privilegpegelmechanismen und Merkmale in einem
allgemeinen Computerhardwaresystem dar.
-
6 stellt
ein Beispiel einer Sicherheits- und Zuverlässigkeitsverletzung dar, die
bei vielen modernen Computersystemen vorliegt.
-
7 ist
ein Blockdiagramm, das die Register in einem Typ von modernem Prozessor
zeigt.
-
8 stellt
den virtuellen Adreßraum
dar, der durch eine moderne Computerarchitektur geliefert wird.
-
9 stellt
die Übersetzung
einer virtuellen Speicheradresse in eine physikalische Speicheradresse über Informationen
dar, die in Regionsregistern, Schutzschlüsselregistern und einem Übersetzungs-Seitengriff-Pufferspeicher
(TLB = Translation Lookaside Buffer) gespeichert sind;
-
10 zeigt
die Datenstrukturen, die durch eine Betriebssystemroutine verwendet
werden, um eine Speicherseite in einem physikalischen Speicher zu
finden, der einer virtuellen Speicheradresse entspricht.
-
11 zeigt
die Zugriffsrechtecodierung, die in einem TLB-Eintrag verwendet
wird.
-
12 stellt
den Unterbrechungsmechanismus dar.
-
13 stellt
einen CPL-Beförderungsmechanismus
dar, der es Anwendungspegelroutinen erlaubt, Routinen eines höheren Privilegpegels
aufzurufen.
-
14 stellt
eine Schichtenbildung eines Betriebssystems direkt auf einer IA-64-Prozessorbasis-Maschine dar.
-
15 ist
ein Blockdiagramm, das die SP-Schnittstellen in einem Computersystem
darstellt, das eine Kombinierte-Hardware-und-Software-Sicherheitsplattform
umfaßt,
und ein oder mehrere Betriebssysteme und anwendungsspezifische Steuerprogramme
.
-
16 stellt
die zweite Speicherpartitionierungsfunktionalität dar, die von der SP benötigt wird
und durch moderne Prozessorarchitekturen geliefert wird, wie z.
B. der Intel® IA-64-Prozessor-Architektur.
-
17 ist
ein Blockdiagramm der Funktionalität, die durch die Softwareschichten
der SP geliefert wird.
-
18 ist
ein Blockdiagramm von Hardwarekomponenten eines Systems, das sich
auf den sicheren Boot-Prozeß bezieht.
-
19 ist
ein Flußsteuerdiagramm
für einen
sicheren Boot-Prozeß, „secure
Boot", der ein Ausführungsbeispiel
der Sicherer-Boot-Prozeßkomponente
der SP darstellt.
-
DETAILLIERTE
BESCHREIBUNG DER ERFINDUNG
-
Die vorliegende Erfindung bezieht
sich. auf Computersysteme und Computerbetriebssysteme. Genauer gesagt
bezieht sich ein Ausführungsbeispiel
der vorliegenden Erfindung auf eine Kombinierte-Hardware-und-Software-Sicherheitsplattform
und eine Kombinierte-Hardware-und-Software-Sicherheitsplatt formschnittstelle,
die eine sichere Grundlage liefert, auf der ein oder mehrere Betriebssysteme
geschichtet werden können,
um sichere Computersysteme zu erzeugen. Die Kombinierte-Hardware-und-Softwareplattform
und die Kombinierte-Hardware-und-Softwareplattformschnittstelle
stellen einen Entwicklungsschritt bei den Maschinen/Betriebssystemschnittstellen
dar. Wie es oben mit Bezugnahme auf 2 bis 4 erörtert wurde, entwickelte sich
die Maschinen/Betriebssystemschnittstelle aus einem Satz von Anweisungen
und Registern, wie es in 2 dargestellt
ist, zu einem Satz von nicht-privilegierten Anweisungen und Registern,
einem Satz von privilegierten Anweisungen und Registern, Hardwareunterbrechungsmechanismen
und einem Satz von Firmware-implementierten Diensten, wie es in 5 dargestellt ist. Ein Ausführungsbeispiel
der vorliegenden Erfindung ist eine Sicherheitsplattform und eine
Sicherheitsplattform/Betriebssystemschnittstelle, die einen Satz von
nicht-privilegierten Anweisungen und Registern und einen Satz von
Sicherheitsplattformdiensten liefert, die aufrufbare Routinen umfassen,
die eine Unterstützung
liefern für
Speicherverwaltung, abfertigbare Objektabfertigung, Ausnahmehandhabung,
Unterbrechungshandhabung, Fehlerbeseitigung und Leistungsfähigkeitsüberwachung,
kryptographische Dienste, Sicherheitsdatendepotdienste, Domain-Steuerdienste, logische und
physikalische Prozessorsteuerdienste, Inter- und Intra-Domain-Kommunikationsdienste,
Plattformtaktikverwaltungsdienste, Aufruferauthentifizierungsdienste
und andere Dienste. Eine andere Sicht dieses Ausführungsbeispiels
der vorliegenden Erfindung; ist, daß die Hardware und die darüber liegende
Sicherheitsplattformsoftware zusammen einen neuen Maschinentyp darstellen,
genauso wie die Firmware und die Hardware in dem in 4 dargestellten System einen neuen und
anderen Maschinentyp bezüglich
der in 2 und 3 dargestellten früheren Systeme
darstellen. Diese neue Maschine liefert sichere Grundfunktionalitäten, auf
denen sichere Betriebssysteme und sichere Systeme aufgebaut werden
können.
Anstatt sich einfach auf Hardwareprivilegpegel zu verlassen, kann
ein Betriebs system eine gesamte Reihe von Grundfunktionalitäten verwenden,
die auf einem höheren
Privilegpegel ausgeführt
werden als das Betriebssystem, und die vor dem Betriebssystem sicher
bleiben.
-
Um die Kombinierte-Hardware-und-Software-Sicherheitsplattformschnittstelle
zu beschreiben, werden in den drei folgenden Unterabschnitten Erörterungen
der Sicherheit, einer beispielhaften Hardwareplattform, die für die Verwendung
in der Kombinierte-Hardware-und-Software-Sicherheitsplattform geeignet
ist, und eine allgemeine Diskussion von Kryptographie präsentiert.
Dann wird in einem vierten Unterabschnitt und in den Anhängen A und
B, die folgen, eine detaillierte Beschreibung der Kombinierte-Hardware-und-Softwaresicherheitsplattformschnittstelle
gegeben, die ein Ausführungsbeispiel
der vorliegenden Erfindung darstellen, und dasselbe wird näher erörtert.
-
Computersicherheit
-
Es gibt viele verschiedene Möglichkeiten
zum Definieren von Computersicherheit. Ziemlich häufig stellen
Sicherheitsprobleme und Sicherheitsmängel, die sich bei Computersystemen
ergeben, gesamte Klassen von Problemen dar, die anfänglich von
Systementwicklern nicht als Sicherheitsprobleme erkannt wurden.
Das richtige und umfassende Definieren des Begriffs „Computersicherheit" kann einen wichtigen
und sogar wesentlichen Schritt beim Entwickeln eines sicheren Computersystems
darstellen. Ein Schritt bei dem Entwurf der Kombinierte-Hardware-und-Software-Sicherheitsplattformschnittstelle,
die ein Ausführungsbeispiel
der vorliegenden Erfindung darstellt, ist die Erkenntnis, daß ein sicheres
Computersystem zumindest die folgenden neuen Charakteristika und
Eigenschaften umfaßt:
-
Verfügbarkeit
-
Ein verfügbares System ist ein System,
dem vertraut werden kann, und auf das man sich verlassen kann, das
dasselbe jedesmal, wenn ein Endnutzer einen Systemdienst aufruft,
korrekt funktioniert und anspricht. Die Verfügbarkeit kann teilweise durch
Einbauen redundanter Konfigurationen von zuverlässigen Hardwarekomponenten
in einem System und durch Erfassen und/oder Kompensieren einer falschen
Operation entweder einer Hardware- oder Softwarekomponente adressiert
werden. Die Verfügbarkeit
kann jedoch auch sehr stark erleichtert werden durch Ausdehnen der
Klasse der erfaßbaren
Fehler und durch Beschränken der
Schäden,
die sich aus dem Auftreten von Fehlern ergeben.
-
Vertraulichkeit
-
Informationen, die in einem Computersystem
gespeichert sind, über
ein Netzwerk übertragen
werden oder sich in einer Archivspeicherung befinden, müssen nur
für autorisierte
Parteien verständlich
sein. Vertraulichkeit kann stark erleichtert werden durch Spezifizieren
kryptographischer Schlüssel
(Ciphers) und Protokolle, die verwendet werden können, um sicherzustellen, daß die Verständlichkeit
von Daten und Systeminformationen über die Verschlüsselung
von Dateidaten, seitenweises Speichern von Daten, Kommunikation
zwischen lokalen Systemkomponenten und Kommunikation über das
Internet lediglich auf autorisierte Parteien beschränkt werden
kann.
-
Authentifizierung
-
Die Identitäten von Personen, Servern,
Klienten, Geräten,
Druckteilsystemen, Speicherteilsystemen und anderen Hardware- und
Softwarekomponenten, die Daten erzeugen und auf Daten zugreifen,
müssen
korrekt sichergestellt werden, be vor diesen Entitäten Dienste
zur Verfügung
gestellt werden. Die Authentifizierung kann stark erleichtert werden
durch Spezifizieren der kryptographischen Einrichtungen und Protokolle,
durch die alle solche Identitäten
authentifiziert werden können.
-
Zugriffssteuerung
-
Zugriff auf Informationen, die in
einem Computersystem gespeichert sind, oder sich in einer Archivspeicherung
befinden, darf nur erlaubt werden, wenn derselbe richtig autorisiert
ist. Eine Zugriffssteuerung kann erleichtert werden durch Liefern
eines Bereichs von Zugriffssteuerschemata.
-
Nicht-Ablehnung
-
Bei E-Commerce-Transaktionen sollte
weder die sendende Partei noch die empfangende Partei von Nachrichten
in der Lage sein, das Vorliegen und die Übertragung von Nachrichten
zu verleugnen, die eine Transaktion spezifizieren und bewirken.
Beispielsweise müssen
Einrichtungen vorgesehen sein, um sicherzustellen, daß eine Partei,
die eine Nachricht sendet, die einen Versand von Geräten (Widgets)
bestellt, später nicht
behaupten kann, daß die
Geräte
nie bestellt wurden. Eine Nicht-Ablehnung wird erleichtert durch
Identifizieren kryptographischer Mechanismen und Protokolle, wie
z. B. digitaler Signaturen, die verwendet werden können, um
sicherzustellen, daß die
Parteien einer Transaktion rechenschaftspflichtig sind.
-
Taktiksteuerung
-
Besitzer und Administratoren müssen ausgestattet
sein, um Systeme unter ihren Steuertaktiken zu definieren, die das
Verhalten der Sicherheitselemente dieser Systeme regeln.
-
Schutz digitaler
Rechte
-
Sichere Systeme müssen digitalen Inhalt schützen, insbesondere
digitale Bilder von einer unbefugten Vervielfältigung schützen. Beispiele umfassen Währung, MPEG-Privatunterhaltungsinhalt,
qualitativ hochwertige Kunstbilder und gedruckte Materialien für eine beschränkte Verteilung.
-
Geheimhaltung
-
Die Eigenschaft der Geheimhaltung
hängt von
den vorhergehenden Eigenschaften ab, benötigt aber zusätzliche
Fähigkeiten
zum Verwalten und Steuern von Informationen, die Identitäten von
Personen und Gruppen zugeordnet sind. Informationen, die für eine Einzelperson
vertraulich sind, müssen
vor einem unberechtigten Zugriff geschützt werden. Selbst wenn ein
Zugriff genehmigt ist, sollten die Identitäten von Einzelpersonen in einigen
Fällen,
nicht offenbart werden. Merkmale eines Systems, die eine Geheimhaltung
sicherstellen, umfassen: (1) rechtmäßiges Sammeln von Informationen über Einzelpersonen
auf rechtmäßige Weise, die
für den
Zweck der Sammlung relevant sind und nicht darüber hinausgehen; (2) Beibehaltung
genauer und aktueller Informationen über Einzelpersonen; (3) Verarbeiten
von Informationen über
eine Einzelperson gerecht und gesetzesmäßig, durch Erhalten der Zustimmung
einer Einzelperson für
die Aufbewahrung, Verwendung oder Übertragung von Informationen
an Dritte; (4) Einzelpersonen sollten berechtigt sein, auf Informationen über sich
zuzugreifen, einschließlich
des Rechtes, solche Informationen zu berichtigen oder zu löschen; (5)
Einzelpersonen müssen
mitgeteilt bekommen, welche persönlichen
Informationen gesammelt werden sollen, deren beabsichtigte Verwendung,
die verantwortliche Stelle und die Wahlmöglichkeiten die die Einzelperson
bezüglich
der Ver- wendung
der Informationen hat; (6) Einzelpersonen muß die Möglichkeit gegeben werden, die
Auswahlmöglichkeiten
zum Handhaben ihrer persönlichen
Informationen auszuwählen
und/oder zu aktualisieren; und (7) es müssen Einrichtungen bereitgestellt
werden, um einer Überwachungs-
oder Durchsetzungsstelle nachzuweisen, daß private Informationen korrekt
und gesetzesmäßig gehandhabt
wurden.
-
Datenintegrität
-
Daten in der Verwahrung eines Computersystems
sind ein wertvolles und kritisches Informationsvermögen. Ein
sicheres System muß sicherstellen,
daß Datenvermögen nicht
verloren gehen oder beschädigt werden,
und keiner unbefugten Verfälschung,
Löschung,
Fälschung,
Permutation oder anderen Formen von Eingreifen unterworfen werden.
Eine Kombination aus gut entworfenen Datei- und Datenbanksystemen,
systematischen Sicherungs- und Wiederherstellungsprozeduren und
kryptographischem Schutz für
die Integrität und
Vertraulichkeit der Daten selbst werden benötigt, um diese Eigenschaft
sicherzustellen.
-
Eine moderne
Computerarchitektur
-
Prozessoren, die aufgebaut sind,
um mit der Intel® IA-64-Computerarchitektur übereinzustimmen, stellen eine
fundamentale Hardwareschnittstelle einer Reihe von modernen Computerhardwareplattformen
dar, die für
die Kombination mit einer Sicherheitsplattformsoftwareschicht geeignet
sind, um die Kombinierte-Hardware-und-Software-Sicherheitsplattformschnittstelle
zu erzeugen, die ein Ausführungsbeispiel
der vorliegenden Erfindung darstellt. 7 ist ein Blockdiagramm, das die Register
in einem modernen Prozessor zeigt. Die Register halten Werte, die
den Ausführungszustand
des Prozessors definieren, und wenn dieselben im Speicher gespeichert
sind, erfassen sie den Zustand eines ausführenden Prozesses vor dem Anhalten
der Ausführung
des Prozesses. Das Wiederherstellen bestimmter Register, die in
dem Speicher gespeichert sind, ermöglicht die Wiederaufnahme der
Ausführung
eines unterbrochenen Prozesses. Der in 7 gezeigte Registersatz ist relativ
komplex, und nachfolgend werden nur bestimmte der wichtigeren Register
beschrieben.
-
Ein wichtiges Register ist das Prozeßstatusregister
(„PSR") 702. Das PSR ist
ein 64-Bit-Register, das Steuerinformationen für den aktuell ausführenden
Prozeß enthält. Das
PSR umfaßt
viele Bitfelder, einschließlich
einem 2-Bit-Feld, das den aktuellen Privilegpegel („CPL" = current privilege
level) enthält,
an dem der aktuell ausführende
Prozeß ausführt. Es
gibt vier Privilegpegel: 0, 1, 2 und 3. Der höchste Privilegpegel ist der Privilegpegel
0. Der niedrigste Privilegpegel ist der Privilegpegel 3. Nur Prozessen,
die bei dem Privilegpegel 0 ausgeführt werden, wird es erlaubt,
auf bestimmte Maschinenressourcen zuzugreifen und dieselben zu manipulieren,
einschließlich
dem Teilsatz von Registern, der als der „Systemregistersatz" bekannt ist, der
in 7 in dem unteren
Rechteck 704 gezeigt ist. Diese Systemregister umfassen
einen Satz von Regionregistern 706, einen Satz von Schutzschlüsselregistern 708,
Datenund Anweisungsübersetzungs-Seitengriff-Puffer-Register 710,
einen Satz von Fehlerbeseitigungsunterbrechungspunktregistern (Debug-Unterbrechungspunktregistern) 712,
einen Satz von Leistungsfähigkeitsüberwachungskonfigurationsregistern 714 und
einen Satz von Steuerregistern 716. Ein Steuerregister,
das Unterbrechungsprozessorstatusregister („IPSR"= interruption processor status register) 718 speichert
die Werte des PSR für
den aktuellsten unterbrochenen Prozeß. Das Unterbrechungsstatusregister
(„ISR" = Interruption Status
register) 720 enthält
eine Anzahl von Feldern, die die Art der Unterbrechung anzeigen,
die als letztes aufgetreten ist. Andere Steuerregister speichern
Informationen, die sich auf andere Ereignisse beziehen, wie z. B.
virtuelle Speicheradreßübersetzungsinformationen,
die sich auf einen virtuellen Adressenübersetzungsfehler beziehen,
Zeiger zu dem letzten erfolgreich ausgeführten Anweisungsbündel und
andere solche Informationen. Sätze
von externen Steuerunterbrechungsregistern 722 werden teilweise
verwendet, um Unterbrechungsvektoren zu setzen.
-
Die in 7 gezeigten Register in der oberen rechteckigen
Region 724 sind als der „Anwendungsregistersatz" bekannt. Diese Register
umfassen einen Satz von allgemeinen Registern 726, von
denen 16 bankmäßig zusammengesetzt
werden, um unmittelbare Register für einen Unterbrechungshandhabungscode
zu liefern. Zumindest 96 allgemeine Register 730 bilden
einen Allgemein-Registerstapel, von dem Abschnitte automatisch gespeichert
und von einem Hintergrundspeicher wiedergewonnen werden können, um
Verbindungen zwischen aufrufenden und aufgerufenen Softwareroutinen
zu ermöglichen.
Der Anwendungsregistersatz umfaßt
außerdem
Gleitkommaregister 732, Prädikatregister 734,
Zweigregister 736, einen Anweisungszeiger 738,
einen Aktueller-Rahmen-Markierer 740, eine Benutzermaske 742,
Leistungsfähigkeitsüberwachungsdatenregister 744,
Prozessoridentifizierer 746, eine Fortschritt-Lade-Adreßtabelle 748 und
einen Satz von spezifischen Anwendungsregistern 750.
-
Die IA-64-Architektur liefert ein
2-Bit-Privilegpegelfeld in dem Prozessorstatusregister, und liefert
wiederum vier Privilegpegel: PLO – der privilegierteste, Kernel-Privilegpegel; PL1 – der nächstprivilegierte
Privilegpegel; PL2 – der
nächstprivilegierte
Pegel; und PL3 – der
Anwendungspegel-Privilegpegel.
-
Der Speicher und die Virtuelle-Adresse-Übersetzungsarchitektur der
IA-64-Computerarchitektur wird nachfolgend mit Bezugnahme auf 8-11 beschrieben. Der virtuelle Adreßraum, der
in der Intel-IA-64-Computerarchitektur
definiert ist, umfaßt
224 Regionen, wie z. B. die in 8 gezeigten Regionen 802-807,
die in 8 gezeigt sind,
die jeweils 261 Bytes enthalten, die durch
aufeinanderfolgende virtuelle Speicheradressen zusammenhän gend adressiert
werden. Somit kann der virtuelle Speicheradreßraum so angesehen werden, dass
er einen gesamten Adreßraum
von 285 Bytes an Speicher umspannt. Eine
virtuelle Speicheradresse 808 von 85-Byte kann somit so
angesehen werden, daß dieselbe
ein 24-Bit-Regionfeld 810 und ein 61-Bit-Adreßfeld 812 umfaßt.
-
Im allgemeinen werden virtuelle Speicheradressen
jedoch als 64-Bit-Mengen codiert. 9 stellt
die Übersetzung
einer virtuellen 64-Bit-Speicheradresse in eine physikalische Speicheradresse
dar, über
Informationen, die in Regionsregistern, Schutzschlüsselregistern
und einem Übersetzungs-Seitengriff-Puffer
(„TLB") gespeichert sind.
Bei der Intel® IA-64-Architektur
sind virtuelle Adressen 64-Bit-Computerwörter, die
in 9 durch eine 64-Bit-Größe 902 dargestellt
sind, die in drei Felder 904-906 partitioniert ist. Die
ersten beiden Felder 904 und 905 weisen Größen auf,
die von der Größe einer
Speicherseite abhängen,
die in einem Bereich von Speicherseitengrößen eingestellt werden kann.
Das erste Feld 904 wird als der „Versatz" (offset) bezeichnet. Der Versatz ist
eine Ganzzahl, die 1 Byte in einer Speicherseite kennzeichnet. Falls
eine Speicherseite beispielsweise 4096 Bytes enthält, muß der Versatz 12 Bits
enthalten, um die Werte bis 0 bis 4095 in dem Binärzahlensystem
darzustellen. Das zweite Feld 905 enthält eine virtuelle Seitenadresse.
Die virtuelle Seitenadresse bezeichnet eine Speicherseite in einem
virtuellen Adreßraum,
der auf physikalischen Speicher abgebildet wird, und ferner durch
Speicherseiten gesichert wird, die auf. Massenspeichervorrichtungen,
wie z. B. Platten, gespeichert sind. Das dritte Feld 906 ist
ein 3-Bit-Feld, das ein Regionsregister kennzeichnet, das den Identifizierer
einer Region von virtuellem Speicher enthält, in dem die virtuelle Speicherseite,
die durch die virtuelle Seitenadresse 905 spezifiziert
wird, enthalten ist.
-
Die Übersetzung der virtuellen Speicheradresse 902 zu
einer physikalischen Speicheradresse 908, die den gleichen
Ver satz 910 umfaßt
wie den Versatz 904 in der virtuellen Speicheradresse,
und auch eine physikalische Seitennummer 912, die auf einer
Seite in der physikalischen Speicherkomponente des Computersystems
Bezug nimmt, wird durch den Prozessor ausgeführt, zeitweise in Kombination
mit Kernel- und Betriebssystemroutinen. Falls eine Übersetzung
von einer virtuellen Speicheradresse zu einer physikalischen Speicheradresse
in dem TLB 914 enthalten ist, kann die Virtuelle-Speicher-Adresse-Zu-Physikalische-Speicher-Adresse-Übersetzung vollständig durch
den Prozessor ausgeführt
werden, ohne ein Eingreifen des Betriebssystems. Der Prozessor verwendet
das Regionsregisterselektorfeld 906, um ein Register 916 in
einem Satz von Regionsregistern 918 auszuwählen. Das
ausgewählte
Regionsregister 916 enthält einen 24-Bit-Regionsidentifizierer. Der Prozessor
verwendet den Regionsidentifizierer, der in dem ausgewählten Regionsregister
enthalten ist, und die virtuelle Seitenadresse 905 zusammen
in einer Hardwarefunktion, um einen TLB-Eintrag 920 auszuwählen, der
einen Regionsidentifizierer und ein Speicheradresse enthält, die
mit dem Regionsidentifizierer, der in dem ausgewählten Regionsregister 916 enthalten
ist, und der virtuellen Seitenadresse 905 übereinstimmen.
Jeder TLB-Eintrag,
wie z. B. der TLB-Eintrag 922, enthält Felder, die einen Regionsidentifizierer 924,
einen Schutzschlüssel,
der der Speicherseite zugeordnet ist, die durch den TLB-Eintrag 926 beschrieben
wird, eine virtuelle Seitenadresse 928, Privileg- und Zugriffsmodusfelder,
die zusammen ein Zugriffsrechtefeld 930 bilden, und eine
physikalische Seitenspeicheradresse 932 umfassen.
-
Falls in dem TLB ein Eintrag gefunden
werden kann, der den Regionsidentifizierer enthält, der in dem Regionsregister
enthalten ist, das durch das Regionsregisterselektorfeld der virtuellen
Speicheradresse spezifiziert ist, und der die virtuelle Seitenadresse
enthält,
die in der virtuellen Speicheradresse spezifiziert ist, dann bestimmt
der Prozessor, ob die virtuelle Speicherseite, die durch die virtuelle
Speicheradresse beschrieben wurde, durch den derzeit ausführenden
Prozeß zugegriffen
werden kann. Der derzeit ausführende
Prozeß kann
auf die Speicherseite zugreifen, falls es die Speicherrechte in
dem TLB-Eintrag erlauben, daß durch
den aktuell ausführenden
Prozeß auf
die Speicherseite zugegriffen wird, und wenn der Schutzschlüssel in
dem TLB-Eintrag in dem Schutzschlüsselregister 934 gefunden
werden kann, im Zusammenhang mit einem Zugriffsmodus, der es dem
aktuell ausführenden
Prozeß erlaubt,
auf die Speicherseite zuzugreifen. Die Zugriffsrechte, die in einem
TLB-Eintrag enthalten sind, umfassen ein 3-Bit-Zugriffsmodusfeld, das eines einer Kombination
aus Lesen(R), Schreiben- (W) und Ausführen- (X) Privilegien darstellt,
und ein 2-Bit-Privilegpegelfeld, das den Privilegpegel spezifiziert,
der von einem Zugriffsprozeß benötigt wird.
Jedes Schutzschlüsselregister enthält einen
24-Bit-Schutzschlüssel, der
einem Zugriffsmodusfeld zugeordnet ist, das erlaubte Lesen- Schreiben-
und Ausführen-Zugriffsmoden spezifiziert,
und ein gültiges
Bit, das anzeigt, ob das Schutzschlüsselregister aktuell gültig ist
oder nicht. Um somit auf eine Speicherseite, die durch einen TLB-Eintrag
beschrieben ist, zuzugreifen, muß der Zugriffsprozeß auf die
Seite in einer Weise zugreifen, die mit dem Zugriffsmodus kompatibel
ist, der einem gültigen
Schutzschlüssel
in den Schutzschlüsselregistern
zugeordnet ist, und der Speicherseite in dem TLB-Eintrag zugeordnet
ist, und muß auf
einem Privilegpegel ausgeführt
werden, der mit dem Privilegpegel kompatibel ist, der der Speicherseite
in dem TBL-Eintrag zugeordnet ist.
-
Falls in dem TLB kein Eintrag mit
einem Regionsidentifizierer und einer virtuellen Seitenadresse,
die gleich der virtuellen Seitenadresse in der virtuellen Speicheradresse,
und einem Regionsidentifizierer sind, der durch das Regionsregisterausfallfeld
einer virtuellen Speicheradresse ausgewählt wurde, gefunden wird, dann tritt
ein TLB-Fehlschlag
auf, und die Hardware versucht, den richtigen TLB-Eintrag von einer
aufgebauten Abbildungsteuertabelle zu finden, die als VHPT bezeichnet
wird und sich in dem Ker nelspeicher befindet. Falls die Hardware
nicht in der Lage ist, den korrekten TLB-Eintrag von der Abbildungssteuertabelle
zu finden, tritt ein TLB-Fehler auf, und eine Kerneloder Betriebssystem-Routine
wird aufgerufen, um die spezifizierte Speicherseite in dem physikalischen
Speicher zu finden, oder falls notwendig, die spezifizierte Speicherseite
von einer externen Vorrichtung in den physikalischen Speicher zu
laden, und dann die richtige Übersetzung
als einen Eintrag in die VHPT und den TLB einzufügen. Falls auf den Versuch
hin, eine virtuelle Speicheradresse in eine physikalische Speicheradresse
zu übersetzen,
der Prozeß in
den Schutzschlüsselregistern 934 keinen gültigen Schutzschlüssel findet,
oder falls der versuchte Zugriff durch den aktuell ausführenden
Prozeß nicht mit
dem Zugriffsmodus in dem TLB-Eintrag oder den Lesen/Schreiben/Ausführen-Bits
in dem Schutzschlüssel in
dem Schutzschlüsselregister
kompatibel ist, oder der Privilegpegel, auf dem der aktuelle ausführende Prozeß ausgeführt wird,
geringer ist als der Privilegpegel, der durch den TLB-Eintrag benötigt wird,
dann tritt ein Fehler auf, der durch eine Kernelroutine gehandhabt
wird, die die Ausführung
zu einer Betriebssystemroutine abfertigt.
-
10 zeigt
eine Form einer Datenstruktur, die durch eine Betriebssystemroutine
verwendet wird, um eine Speicherseite in einem physikalischen Speicher
zu finden, die einer virtuellen Speicheradresse entspricht. Die
virtuelle Speicheradresse 902 ist in 10 mit den gleichen Feldern und Bezugszeichen
wie in 9 gezeigt. Die
Betriebssystemroutine verwendet das Regionselektorfeld 906 und
die virtuelle Seitenadresse 905, um einen Eintrag 1002 in
einer virtuellen Seitentabelle 1004 auszuwählen. Der
Virtuelle-Seitentabelleneintrag 1002 umfaßt eine
physikalische Seitenadresse 1006, die auf eine Seite 10.08
in einem physikalischen Speicher verweist. Der Versatz 904 der
virtuellen Speicheradresse wird verwendet, um die geeignete Byteposition 1010 in
der virtuellen Speicherseite 1008 auszuwählen. Die
Virtuelle-Seitentabelle 1002 umfaßt ein Bitfeld 1012, das
anzeigt, ob die physikalische Adresse gültig ist oder nicht. Falls
die physikalische Adresse nicht gültig ist, wählt das Betriebssystem eine
Speicherseite in einem physikalischen Speicher aus, die die Speicherseite
enthalten soll, und gewinnt den Inhalt der Speicherseite von einer
externen Speichervorrichtung wieder, wie z. B. einem Plattenlaufwerk 1014.
Der Virtuelle-Seitentabelleneintrag 1002 enthält zusätzliche
Felder, von denen die Informationen, die für einen TLB-Eintrag benötigt werden,
wiedergewonnen werden können.
Sobald das Betriebssystem die virtuelle Speicheradresse erfolgreich
in eine physikalische Speicheradresse abbildet, wird dieses Abbilden
in den Virtuelle-Seitentabelleneintrag
eingegeben, und, als ein TLB-Eintrag formatiert, in den TLB eingefügt.
-
11 zeigt
die Zugriffsrechtecodierung, die in einem TLB-Eintrag verwendet
wird. Die Zugriffsrechte umfassen ein 3-Bit-TLB.ar Modusfeld 1102,
das Lesen, Schreiben, Ausführen
und Kombinationszugriffsrechte spezifiziert, und ein 2-Bit-TLB.pl Privilegpegelfeld 1104,
das den Privilegpegel spezifiziert, der einer Speicherseite zugeordnet
ist. In 11 sind die
Zugriffsrechte für
jeden möglichen
Wert, der in den Feldern TLB.ar und TLB.pl enthalten ist, gezeigt.
Es ist anzumerken, daß die
Zugriffsrechte von den Privilegpegeln abhängen, bei denen ein aktueller
Prozeß ausgeführt wird.
Somit kann beispielsweise auf eine Speicherseite zugegriffen werden,
die mit einem TLB-Eintrag mit TLB.ar = 0 und TLB.pl = 3 spezifiziert
ist, zum Lesen durch Routinen, die auf jedem Privilegpegel laufen,
was in 11 durch den
Buchstaben „R" in der Spalte gezeigt
ist, die jedem Privilegpegel 1106-1109 entspricht, während auf
eine Speicherseite, die durch einen TLB-Eintrag beschrieben ist,
mit TLB.ar = 0 und TLB.pl = 0 zugegriffen werden kann durch Lesen
von nur einem Prozeß,
der auf dem Privilegpegel 0 läuft,
wie es in 11 durch
den Buchstaben „R" 1110 unter der Spalte
angezeigt ist, die dem Privilegpegel 0 entspricht. Die in 11 beschriebenen Zugriffsrechte
verschachteln sich durch einen Privilegpegel gemäß der vorhe rigen Erörterung
mit Bezugnahme auf 4.
Im allgemeinen kann ein Prozeß,
der auf einem speziellen Privilegpegel läuft, auf eine Speicherseite
zugreifen, die diesem Privilegpegel und allen niedrigeren Privilegpegeln
zugeordnet ist. Unter Verwendung nur der Zugriffsrechte, die in
einem TLB-Eintrag enthalten sind, ist es nicht möglich, eine Speicherregion
zu erzeugen, die für
einen Prozeß zugreifbar
ist, der bei Pegel 3 läuft
und Kernelroutinen, die bei Pegel 0 laufen, aber nicht zugreifbar
ist für
eine Betriebssystemroutine, die auf dem Privilegpegel 2 läuft. Jede
Speicherseite, die für
eine Routine zugreifbar ist, die auf dem Privilegpegel 3 läuft, ist
auch zugreifbar für
eine Betriebssystemroutine, die auf dem Privilegpegel 2 läuft.
-
Weil Computerressourcen gemäß Privilegpegeln
partitioniert sind, greifen Prozesse im allgemeinen auf Anweisungen
und Daten von Speicherseiten zu, die dem Privilegpegel des ausführenden
Prozesses oder einem niedrigeren Privilegpegel zugeordnet sind,
wobei der Privilegpegel 0 als der höchste Privilegpegel angesehen
wird. Ein ausführender
Prozeß kann
durch eine Hardware-erzeugte Unterbrechung unterbrochen werden,
in diesem Fall wird durch die Hardware automatisch eine Unterbrechungshandhabungsroutine
aufgerufen, um auf dem Privilegpegel 0 ausgeführt zu werden. Sobald die Unterbrechung
teilweise oder vollständig gehandhabt
ist, kann die Unterbrechungshandhabungsroutine eine Rückkehr-von-Unterbrechung-Anweisung (RFI-Anweisung; „rfi" = return from interrupt)
ausführen,
um die Ausführung
zu dem Punkt der vorher ausführenden
Routine zurückzukehren,
an dem die Unterbrechung aufgetreten ist, wodurch der CPL zurück zu dem CPL
verringert wird, an dem die vorher ausführende Routine vor der Unterbrechung
ausgeführt
hat.
-
Der Unterbrechungsprozeß ist in 12 dargestellt. In 12 führt ein Prozeß, der einen
Anwendungsprozeß ausführt, Anweisungen
von einer Speicherseite 1202 aus, die dem niedrigen Privilegpegel
eines Anwendungsprogrammprozesses zugeordnet ist. Die Ausführung von
Anweisungen von der Speicherseite ist durch die dunklen oder ausgefüllten gebogenen
Pfeile 1204-1206 dargestellt. Die Ausführung der Unterbrechungshandhabungsroutine
an dem Privilegpegel 0 ist in 12 durch
den hellen oder geöffneten
gebogenen Pfeil 1208 dargestellt. Anfangs führt der
Anwendungsprogrammprozeß nacheinander
Anweisungen aus, die an den Speicherpositionen 1210, 1215 gespeichert
sind. Während
der Ausführung
der Anweisung, die in der Speicherposition 1215 gespeichert
ist, tritt eine Maschinenunterbrechung auf, die die Privilegpegel-O-Unterbrechungshandhabungseinrichtung
aufruft, die dann damit beginnt, eine Anweisung auszuführen, die
an einer Speicherposition 1216 in einer Speicherseite 1218 gespeichert
ist, die dem Privilegpegel 0 zugeordnet ist. Die Unterbrechungshandhabungseinrichtung
führt eine
Anzahl von Anweisungen aus, bevor sie schließlich eine rfi-Anweisung ausführt, der
an der Speicherposition 1220 gespeichert wird, wodurch
bewirkt wird, daß der
CPL zu dem niedrigen Privilegpegel zurückversetzt wird, auf dem der
Anwendungsprogrammprozeß vor
dem Auftreten der Unterbrechung ausgeführt hat, und die Steuerung
an das Anwendungsprogramm zurückgegeben wird,
wie es durch den dunklen oder ausgefüllten Pfeil 1205 angezeigt
ist. Das Anwendungsprogramm nimmt dann das Ausführen wieder auf, wie es durch
den dunklen oder ausgefüllten
Pfeil 1206 angezeigt ist. Für bestimmte Typen von Unterbrechungen
kann die Privilegpegel-0-Unterbrechungshandhabungseinrichtung
vollständig
in dem Zusammenhang des unterbrochenen Prozesses ausgeführt werden.
Um komplexere Unterbrechungen handzuhaben, kann das Betriebssystem
Kontextinformationen, die dem Anwendungsprogrammprozeß zugeordnet
sind, in dem PCB speichern, der diesem Prozeß zugeordnet ist, und einen
neuen Kontext vorbereiten, in dem die Unterbrechungshandhabungseinrichtung
ausgeführt
werden kann, wodurch der Anwendungsprogrammkontext wieder hergestellt
wird, wenn der Anwendungsprogrammprozeß nach der Handhabung der Unterbrechung
wiederhergestellt wird.
-
Es gibt Fälle, bei denen ein Anwendungsprogrammprozeß eine Betriebssystemsubroutine
aufrufen muß oder
eine Funktion, die auf einem Privilegpegel läuft, der höher ist als der des Anwendungsprogrammprozesses.
Weil nur durch eine Privilegpegel-O-Routine auf das PSR zugegriffen
werden kann, und dasselbe geändert
werden kann, kann ein Anwendungsprogramm, das auf einem niedrigeren
Privilegpegel ausgeführt wird,
den CPL nicht direkt modifizieren. Eine Möglichkeit, einen solchen Aufruf
zu bewirken, ist es, eine „Unterbrechungs"-Anweisung auszuführen, die einen codierten Parameter
enthält.
Diese Anweisung bewirkt eine Unterbrechung zu dem Privilegpegel
0, und der Parameter, der in der Unterbrechungsanweisung codiert
ist, kann decodiert werden, um eine Steuerung an die gewünschte Privilegpegel-0-Funktion
zu senden. Die IA-64-Computerarchitektur liefert jedoch einen schnelleren
Mechanismus, durch den ein Anwendungsprogrammprozeß einen
Privilegpegel-0-Prozeß aufrufen
kann. 13 stellt den
CPL-Beförderungsmechanismus dar,
der es Anwendungspegelroutinen erlaubt, Routinen eines höheren Privilegpegels
aufzurufen. 13 verwendet
die gleichen Darstellungsübereinkünfte, wie
sie in 12 verwendet
werden. Das ausführende
Anwendungsprogramm, das durch den ausgefüllten Pfeil 1302 dargestellt
wird, führt
eine Aufrufanweisung aus, die in der Speicherposition 1304 gespeichert
ist, um eine Routine „A" eines höheren Privilegpegels
aufzurufen. Die Routine eines höheren
Privilegpegels ist in einer Speicherseite 1306 gespeichert,
die dem höheren
Privilegpegel zugeordnet ist. Die Routine des höheren Privilegpegels führt anfangs
eine epc-Anweisung aus, die an der Speicherposition 1308 gespeichert
ist, was den CPL zu dem CPL befördert,
der der Speicherseite zugeordnet ist, die die Anweisung umfaßt. Die
aufgerufene Routine kann dann auf dem höheren Privilegpegel ausgeführt werden,
wobei die Ausführung
mit einer br.ret-Anweisung 1310 beendet wird, die die Ausführung zu
dem Anwendungspegelprogramm zurückgibt
und den CPL automatisch zu dem CPL zurückversetzt, an dem das Anwendungspegelprogramm
vor dem Subroutinenaufruf ausgeführt
wurde. Es ist anzumerken, daß dieser
Mecha nismus keine Einrichtung für
ein Anwendungsprogramm liefert, den CPL zu befördern und einen unbefugten
Zugriff auf geschützte
Computerressourcen auszuführen.
Speicherseiten können
nur durch Anweisungen, die auf dem Privilegpegel 0 ausgeführt werden,
Privilegpegeln zugeordnet werden. Somit müssen Routinen, die die epc
CPL-Beförderungsanweisung
verwenden, anfangs durch Privilegpegel-0-Routinen eingesetzt werden.
Somit kann ein Betriebssystem den epc Mechanismus verwenden, um
sicher Betriebssystemeintragspunkte zu erzeugen, die von Routinen
eines niedrigeren Privilegpegels aufgerufen werden können.
-
Kryptographie
-
Es gibt sechs Grundtypen von kryptographischen
Techniken: (1) Symmetrischer- (Geheimer-) Schlüssel-Verschlüsselung;
(2) Asymmetrischer- (Öffentlicher-/Privater)
Schlüssel-Verschlüsselung;
(3) Einweghashfunktionen; (4) Nachrichtenauthentifizierungscodes;
(5) digitale Signaturen; und (6) Zufallszahlgeneratoren.
-
Verschlüsselung/Entschlüsselung
-
Symmetrischer- und Asymmetrischer-Schlüssel-Verschlüsselung
werden beide verwendet, um Daten so vollständig zu verwürfeln, daß ein Angreifer,
der nicht den korrekten Schlüssel
hat, nicht in der Lage ist, den Inhalt oder die Bedeutung der ursprünglichen,
nicht-verwürfelten
Daten zu bestimmen. Die Daten selbst können jede Form von digitalisierten
Informationen sein, einschließlich
Buchstaben oder Zahlen jeder Sprache, spezielle Symbole für Wörter oder
Interpunktion oder Steuerung, oder Video- und Audiobilder.
-
Der Prozeß des Verwürfelns der Daten wird als „Verschlüsseln" (encrypting) oder „Chiffrieren" (enciphering) der
Daten bezeichnet. Die umgekehrte Operation, die Daten zurück zu ihrer
ursprünglichen
Form zu entschlüsseln,
wird als „Entschlüsseln" oder „Dechiffrieren" der Daten bezeichnet.
Die ursprünglichen, nicht-verwürfelten
Daten werden als „Klartext" bezeichnet. Die
verwürfelten
Daten werden als „Schlüsseltext" (ciphertext) bezeichnet.
Es gibt viele verschiedene Algorithmen zum Verschlüsseln und
Entschlüsseln.
Verschlüsselungs-
und Entschlüsselungsalgorithmen
nehmen im allgemeinen zwei Eingabeargumente, und erzeugen als Ausgabe
die verschlüsselten
bzw. die entschlüsselten
Daten. Das erste Eingabeargument sind die Daten, die verschlüsselt oder
entschlüsselt
werden sollen. Das zweite Eingabeargument wird als „Schlüssel" bezeichnet. Die
beste Praxis scheint es zu sein, wenn das Geheimnis eines Verschlüsselungs-
und Entschlüsselungsschemas
lediglich in dem Schlüssel
enthalten ist. Die Verschlüsselung
und Entschlüsselung
können kurz
wie folgt beschrieben werden:
-
- Schlüsseltext
= Verschlüsseln
(Klartext, Verschlüsselungsschlüssel)
- Klartext = Entschlüsseln
(Schlüsseltext,
Entschlüsselungsschlüssel)
-
Symmetrischer-Schlüssel-Verschlüsselung
-
Für
eine Symmetrischer-Schlüssel-Verschlüsselung
verwenden sowohl der Sender als auch der Empfänger verschlüsselter
Nachrichten den gleichen geheimen Schlüssel. Falls der geheime Schlüssel beispielsweise
das Wort „Apfelsoße" wäre, wären die
Gleichungen:
-
- Schlüsseltext
= Verschlüsseln
(Klartext „Apfelsoße")
- Klartext = Entschlüsseln
(Schlüsseltext „Apfelsoße")
-
Die Schlüssel, die normalerweise verwendet
werden, sind lange zufällig
angeordnete Bitzeichenfolgen. Die Längen der Schlüssel werden
durch den spezifischen symmetrischen Schlüssel bestimmt. Die binären Werte
von Schlüsseln
werden erzeugt durch Prozesse, die aufgebaut werden, um sicherzustellen,
daß die Werte
ausreichend unvorhersagbar sind.
-
Symmetrische Schlüssel (cipher) sind von zwei
Grundtypen: (1) Blockschlüssel;
und (2) Stromschlüssel.
Ein Blockschlüssel
verschlüsselt
oder entschlüsselt
einen einzigen Block mit fester Größe zu einem Zeitpunkt. Die
Größe eines
Blocks wird durch den spezifischen Blockschlüssel definiert. Ein Stromschlüssel erzeugt
eine Sequenz von binären
Werten, die mit dem Klartext zum Verschlüsseln oder mit dem Schlüsseltext zum
Entschlüsseln
in einer Entweder/Oder-Verknüpfung/XOR-Verknüpfung) verbunden
werden. Die Größe jedes
binären
Werts, der durch einen Stromschlüssel
erzeugt wird, wird durch den spezifischen Stromschlüssel definiert.
-
Die Symmetrischer-Schlüssel-Verschlüsselung
wird bei hoher Geschwindigkeit ausgeführt. Was die Sicherheit und
Leistungsfähigkeit
anbetrifft, stehen symmetrische Schlüssel an sehr hoher Stelle.
Für jeden vertraulichen
Datenaustausch mit hoher Menge ist die Symmetrischer-Schlüsselkryptographie
aufgrund ihrer hohen Leistungsfähigkeit
die bevorzugte Wahl. Das große
Problem bei der Verwendung symmetrischer Kryptographie ist die Verteilung
und Verwaltung geheimer Schlüssel,
das treffenderweise als „Schlüsselverteilungsproblem" bezeichnet wird.
-
Das Schlüsselverteilungsproblem, d.
h, die Definition eines Prozesses zum sicheren Verteilen einmaliger
geheimer Schlüssel
durch ein Netzwerk an jedes Paar von Personen oder Programmen, die
im Vertrauen kommunizieren müssen,
ist sehr komplex. Komplette Systeme wurden allein dafür aufgebaut,
um diese Funktion durchzuführen.
Ein entwickeltes System ordnet ganze Server lediglich der Aufgabe
zu, vertrauenswürdige Dritte
für die
Verteilung von geheimen Schlüsseln
zu sein.
-
Asymmetrischer-Schlüssel-Verschlüsselun
-
Für
die Asymmetrischer-Schlüssel-Verschlüsselung
ist der Schlüssel,
der zum Verschlüsseln
von Daten verwendet wird, ein anderer Schlüssel als derjenige, der zum
Entschlüsseln
von Daten verwendet wird. Anders als die Symmetrischer-Schlüssel-Verschlüsselung,
die den gleichen geheimen Schlüssel
sowohl für
die Verschlüsselung
als auch die Entschlüsselung
verwendet, verwendet die asymmetrische Schlüsselverschlüsselung zwei unterschiedliche
Schlüssel.
Der Vorteil der Asymmetrischer-Schlüssel-Verschlüsselung
ist, daß nur
einer der Schlüssel
geheim gehalten werden muß.
Der andere Schlüssel
kann weit verbreitet sein, d. h. er kann öffentlich gemacht werden. Aus
diesem Grund wird die Asymmetrischer-Schlüssel-Verschlüsselung
gerne auch als „Öffentlicher-/Privater-" Schlüssel-Verschlüsselung
bezeichnet. Asymmetrische Schlüssel
verringern die Probleme der Schlüsselverteilung
sehr stark. Symbolisch:
-
- Schlüsseltext
= Verschlüsseln
(Klartext, öffentlicher
Schlüssel)
- Klartext = Entschlüsseln
(Schlüsseltext,
privater Schlüssel)
-
Der am häufigsten verwendete asymmetrische
Schlüssel
wird als „RSA" bezeichnet, ein
Akronym, das aus den ersten Buchstaben der Nachnamen der Erfinder
besteht. Die RSA arbeitet auf sehr großen Ganzzahlmodulo, dem Produkt
aus zwei geheimen Primzahlen. Die öffentlichen und privaten RSA-Schlüssel sind
jeweils Paare von solchen großen
Ganzzahlen. Um heutzutage ein hohes Maß an Sicherheit sicherzustellen, werden
1024- bis 2048-Bit-Ganzzahlen verwendet, obwohl einige Anwendungen
weiterhin 512-Bit-Ganzzahlen verwenden. Die kryptographische Stärke der
RSA leitet sich von der Schwierigkeit bei der Herstellung des Produkts
zu zwei geheimen Primzahlen ab.
-
In einer jüngeren Arbeit hat sich herausgestellt,
daß finite
Gruppen von Punkten, die auf einer „elliptischen Kurve" liegen, eine eventuelle
stärkere
Basis für
asymmetrische Kryptographie bereitstellen als die RSA. Die Sicherheit
der Schemata, die auf elliptischen Kurven basieren, leitet sich
von der Schwierigkeit beim Lösen
des diskreten Protokollproblems über
elliptischen Kurven ab. (Für
Einzelheiten siehe: Blake, Seroussi, Smart, Elliptic Curves in Cryptography,
Cambridge Univ. Press, 1999.) Die für die Berechnungen notwendigen Schlüssel sind
kürzer
als jene, die für
die RSA notwendig sind. Der Elliptische-Kurve-Schlüssel, der
stärkenmäßig einem
1024-Bit-RSA-Schlüssel
entspricht, würde
beispielsweise weniger als 200 Bits in der Länge aufweisen. Die Berechnungen
sind jedoch komplexer als jene für
die RSA. Der Hauptnachteil der asymmetrischen Verschlüsselung
ist, daß sie
rechnerisch viel intensiver ist. Anders ausgedrückt, die asymmetrische Verschlüsselung
ist beträchtlich
langsamer als die symmetrische Verschlüsselung. Aufgrund der relativen
Stärken
und Schwächen
der symmetrischen und asymmetrischen Kryptographie gehört es üblicherweise
zur Praxis, eine Asymmetrischer-Schlüsselkryptographie zur Schlüsselverteilung
und eine Symmetrischer-Schlüsselkryptographie
für die
Masse der übertragenen
Daten zu verwenden.
-
Einweg-Hashfunktionen
-
Einweg-Hashfunktionen sind Algorithmen,
die einen willkürlichen
Eingabebitstrom in ein Ergebnis einer festen Größe umwandeln. Sie werden als „Einweg" bezeichnet, weil,
obgleich es unkompliziert ist, die Hashfunktion auszuführen, es
nachweislich unmöglich
ist, das Inverse der Hashfunktion zu berechnen, d. h. den Eingabebitstrom
angesichts nur einer Hashfunktionsausgabe einer festen Größe zu berechnen.
-
Ferner sind sichere Hashfunktionen
so konzipiert, so daß,
in dem möglichen
Ausmaß,
der Wert von jedem Bit der Ausgabe der Funktion durch den Wert von
jedem Bit der Eingabe beeinträchtigt
wird und daß es für einen
gegebenen Hashausgabewert eine untragbar schwierige Aufgabe ist,
einen anderen Eingabebitstrom zu finden, der die identische Hashfunktionsausgabe
erzeugen würde.
Diese Eigenschaften von sicheren Hashfunktionen erlauben es, den
Hashausgabewert in angemessener Weise als eine identifizierende „Signatur" oder „Auszug" (Digest) für den Eingabebitstrom
zu verwenden. Die Hashfunktionsausgaben sind wichtige digitale Fingerabdrücke des
Eingabebitstroms.
-
Sichere Hashfunktionen arbeiten typischerweise
in zwei Phasen. Zuerst wird der Eingabebitstrom einer willkürlichen
Länge in
einer spezifischen Weise zu einem Vielfachen einer feststehenden
Blockgröße aufgefüllt. Üblicherweise
erscheint die Bitlänge
des gesamten Eingabebitstroms als der finale 64-Bit-Wert im letzten
64-Bit-Doppelwort des finalen Auffüllblocks. Zweitens wird die
aufgefüllte
Eingabe bei einem Block zu einem Zeitpunkt durch die Hashfunktion
unter Verwendung von Ausgabewerten von jedem Block als Anfangseingabewerte
zur Verarbeitung des nächsten
Blocks verarbeitet. Das kombinierte Ergebnis nach der Verarbeitung
des finalen Blocks ist die Ausgabe der Hashfunktion. Symbolisch
bedeutet dies:
-
Nachricht-Auszug = Hashfunktion
(Auffüllfunktion
[Nachrichteingabebits])
-
Die Hashfunktionen sind eines der
vielseitigsten und am häufigsten
verwendeten kryptographischen Werkzeuge. Sie werden in nahezu jedem
Internetprotokoll verwendet. Immer wenn die logische Notwendigkeit besteht
eine Zahl von Elementen zuzuordnen, ist es übliche Praxis, die Byte-Zeichenfolgen, die
die Elemente darstellen, miteinander zu verketten und das Gesamtergebnis
einer Hash-Codierung zu unterziehen. Dies erzeugt einen digitalen
Fingerabdruck, der jedes Element sowie die gesamte, geordnete Zuordnung
reflektiert. Die Hashwerte von Dokumenten, Datenstrukturen und Codebildern
sind für
digitale Signaturen von großer
Bedeutung.
-
Nachrichtenauthentifizierungscodes
-
Nachrichtenauthentifizierungscodes
(„MACs" = Message Authentication
Codes) sind konzipiert, um die Authentifizierung und Integrität von Nachrichten
und Daten zu schützen,
und nicht um ihre Vertraulichkeit zu schützen. Ein MAC ist ein Wert,
der einer Nachricht oder Daten angehängt wird, der es einem ermöglicht, sicherzustellen,
daß der
Inhalt der Nachricht oder der Daten in keiner Weise modifiziert
worden ist.
-
Die MACs verwenden, wie die Symmetrischer-Schlüssel-Verschlüsselung,
einen geheimen Schlüssel. Wenn
es nicht von Bedeutung ist, den Inhalt der Nachricht zu schützen, sondern
nur ihre Integrität
sicherzustellen, wird der geheime Schlüssel verwendet, um einen MAC
zu berechnen, der dann an die Nachricht angehängt wird. Eine beliebige Partei,
die den geheimen Schlüssel
kennt, kann den MAC von der erhaltenen Nachricht erneut berechnen
und vergleicht den neu berechneten Wert mit dem MAC, der an die
empfangene Nachricht angehängt
wurde. Wenn die neu berechneten und übertragenen Werte übereinstimmen,
ist die Nachricht korrekt übertragen
worden.
-
MACs werden in einem sicheren IP
(„IPSec") verwendet, um sicherzustellen,
daß die
Paketinhalte während
der Übertragung
nicht modifiziert worden sind. Sie werden auch bei Übertragungsprotokollen
zwischen Banken verwendet, um Nachrichten zu authentifizieren. Die
MACs können
auch an Daten angehängt werden,
die in Dateien oder Datenbanken gespeichert sind. In allen Fällen kann
eine beliebige Person, die den geheimen Schlüssel kennt, verifizieren, daß die Daten,
mit denen der MAC berechnet wurde, nicht geändert worden sind. Die Berechnungen
von MACs nutzen die Symmetrischer- Schlüssel-Verschlüsselung über den Daten
oder manchmal über
sicheren Hashoperationen von Daten.
-
Digitale Signaturen
-
Geht es um das Bereistellen einer
Garantie der Integrität
von gespeicherten oder übertragenen
Daten, funktionieren digitale Signaturen ähnlich wie MACs. Jedoch unterscheiden
sich digitale Signaturen von den MACs im Hinblick auf die Geheimnisse,
die verwendet werden, und die Verteilung von diesen Geheimnissen.
-
Für
die MRCs ist ein nicht-leerer Satz von Personen, die den geheimen
Schlüssel
kennen, der zum Berechnen des MACs verwendet wird, vorhanden. Eine
beliebige der Personen in dem Satz kann einen MAC, der mit dem geheimen
Schlüssel
berechnet wird, verifizieren. Gleichzeitig kann eine beliebige dieser
Personen auch einen MAC für
unterschiedliche Nachrichten oder Daten berechnen oder kann einen
MAC für
eine geänderte
Nachricht oder Daten fälschen.
Alle die Personen, die das Geheimnis kennen, müssen einander vertrauen, sowohl
um den geheimen Schlüssel
geheim zu halten als auch um den geheimen Schlüssel in korrekter Weise zu
verwenden.
-
MACS funktionieren gut, wenn es lediglich
ein einziges Individuum gibt, das das Geheimnis für sich behält. Diese
Person kann das Geheimnis verwenden, um seine oder ihre Daten zu
schützen
und um seine Integrität
sicherzustellen. MACs funktionieren auch für Sätze von zwei Personen gut.
Diese Leute vertrauen einander, daß sie das Geheimnis nicht offenbaren
und können
Nachrichten hin und zurück
senden, und wissen, daß die
Integrität
von jeder Nachricht nicht gefährdet
worden ist. Diese Modelle sind in vielen wichtigen Situationen passend.
-
Digitale Signaturen sind ein Integritätsschutzmechanismus,
wo nur eine einzige Partei vorhanden ist, die die Signatur konstruieren
kann, aber schließlich
kann dann jeder die Signatur verifizieren. Bei diesem Modell wird
eine spezifizierte Partei, der alleinige Besitzer des Freigabegeheimnisses,
für die
Berechnung und das Anhängen
des Signatur an diese Daten verantwortlich. Dies wird als „Signieren" der Daten bezeichnet.
Nachdem die Daten signiert worden sind, kann eine beliebige Person
verifizieren, daß die
spezifizierte Partei, genauer der spezifizierte Geheimschlüssel tatsächlich die
Signatur errechnete. Dieses Modell paßt für viele wichtige Situationen
in Gewerbe und Praxis.
-
Digitale Signaturen werden durch
Verwendung einer beachtlichen Eigenschaft der Asymmetrischer-Schlüssel-Kryptographie
berechnet. Digitale Signaturen funktionieren nämlich auch umgekehrt. In dem vorhergehenden
Abschnitt über
die Asymmetrischer-Schlüssel-Kryptographie
schrieben wir symbolisch:
-
- Schlüsseltext
= Verschlüsseln
(Klartext, öffentlicher
Schlüssel)
- Klartext = Entschlüsseln
(Schlüsseltext,
privater Schlüssel)
-
Jedoch stellt sich heraus, daß die Schlüssel in
der umgekehrten Reihenfolge verwendet werden können, nämlich:
-
- Schlüsseltext
= Verschlüsseln
(Klartext, privater Schlüssel)
- Klartext = Entschlüsseln
(Schlüsseltext, öffentlicher
Schlüssel)
-
Im ersten Fall nimmt der Eigentümer des
geheimen Schlüssels
die Entschlüsselung
vor und eine beliebige Person kann die Verschlüsselung vornehmen. In letzterem
Fall nimmt der Besitzer des Geheimnisses die Verschlüsselung
vor und eine beliebige Person kann die Entschlüsselung vornehmen. Der letztere
Fall wird für
digitale Signaturen verwendet.
-
Die digitalen Signaturen können an
sich verwendet werden oder in Kombination mit einer Verschlüsselung,
die zum Schützen
einer Vertraulichkeit entworfen worden ist. Häufig ist es nicht wichtig,
daß die
Dateninhalte vertraulich sind, jedoch ist es von besonderer Bedeutung,
daß die
Daten exakt sind. Die digitalen Signaturen werden nicht durch Verschlüsseln aller
Daten mit dem Privatschlüssel
berechnet, sondern vielmehr durch Verwendung eines privaten Schlüssels zum
Verschlüsseln
eines sicheren Hashes der Daten berechnet. Im Endeffekt nimmt man
zuerst einen digitalen Fingerabdruck der Daten und verschlüsselt dann
den digitalen Fingerabdruck mit dem privaten Schlüssel. Symbolisch
bedeutet dies:
Digitale Signatur = Verschlüsseln (Hashfunktion (Nachrichteneingabebits),
privater Schlüssel)
Digitaler
Fingerabdruck = Entschlüsseln
(Digitale Signatur, öffentlicher
Schlüssel)
-
Die digitalen Signaturen werden in
zwei Schritten verifiziert. Zuerst wird der digitale Fingerabdruck
der Dateninhalte unter Verwendung der Hashfunktion neu berechnet.
Dann wird die angehängte
digitale Signatur unter Verwendung des öffentlichen Schlüssels entschlüsselt. Wenn
der neu berechnete digitale Fingerabdruck und die entschlüsselte digitale
Signatur übereinstimmen,
ist die Signatur verifiziert worden.
-
Zufallszahlengeneratoren
-
Zufallszahlen werden in allen kryptographischen
Algorithmen und Protokollen verwendet. Sie werden für Schlüssel, Herausforderungswerte,
Einmalverfügungen,
Vor-Hashanhänge
für Passwörter, etc.
verwendet. Hardwarevorrichtungen, die auf einer gewissen Form einer
physischen Willkürlichkeit
basieren, treten langsam in Erscheinung. Das Problem mit solchen
Hardwarevorrichtungen ist natürlich
das Testen derselben, um sicherzustellen, daß sie korrekt arbeiten. Eine
Rechnereinrichtung existiert zum Berechnen von Zahlen, die ausreichend
unvorhersehbar sind, so daß sie
anstelle von wahren Zufallszahlen verwendet werden können. Solche
Zahlen werden als Pseudozufallszahlen („PRNs" = Pseudo-Random Numbers) bezeichnet.
Einige der Pseudozufallszahlenerzeugungsverfahren verwenden Werte
basierend auf physischen Messungen von Zufallsereignissen in einem
Computersystem, wie z. B. Typraten, willkürliche Mausbewegungen, Ankunftszeiten von
Platten-I/0-Unterbrechungen etc. Andere basieren auf einer symmetrischen
Kryptographie oder der Schwierigkeit von harten mathematischen Problemen,
wie dem Factoring-Problem. Pseudozufallszahlengeneratoren PRNGs
(PRNG = Pseudo random number generators) die Werte erzeugen, die
ausreichend unvorhersehbar sind, werden als kryptographisch starke
Pseudozufallszahlgeneratoren (CSPRNGs = Cryptographically Strong
Pseudo Random Number Generators) bezeichnet.
-
Das Ausführungsbeispiel
eines Sicherheitsplattformkernels der vorliegenden Erfindung
-
14 stellt
ein Schichten eines Betriebssystems direkt auf einer IA-64-Prozessor-basierten
Maschine dar. Das Betriebssystem 1402 verwendet bei diesem
direkten Schichtungslösungsansatz
die IA-64-Architektur-spezifizierte Schnittstelle 1404,
die durch die IA-64-Prozessor-basierte Maschine 1406 als
die Rechenressourcen zum Verwalten und zum Absenden der Anwendungsprogramme über Betriebssystemdienste
bereitgestellt wird. Die IA-64-Architektur spezifizierte Schnittstelle 1404 weist
nicht-privilegierte und privilegierte Anweisungen und Register,
Hardwareunterbrechungsmechanismen und Firmwareschnittstellen auf.
Durch Verwenden einer direkten Schichtung des Betriebssystems auf
die IA-64-Hardwareschnittstelle können jedoch viele Sicherheitsprobleme
und Unzulänglichkeiten,
die bei den aktuellen Betriebssystemen inhärent sind, nicht ohne weiteres
unter Verwendung von Merkmalen der IA-64-Architektur angegangen werden.
Als ein Beispiel sollten I/0-Treiber weiterhin in dem Betriebssystem
beinhaltet und auf dem PLO ausgeführt werden, würde das Problem,
das in 6 dargestellt
ist, weiterhin eine potentielle Anfälligkeit für das Computersystem darstellen. Die
Betriebssysteme sind relativ große Programme und in der Praxis
ist es unmöglich,
deren Korrektheit und einen sicheren Betrieb nachzuprüfen.
-
Ein Ausführungsbeispiel der vorliegenden
Erfindung ist eine Kombinierte-Hardware-und-Software-Sicherheitsplattformschnittstelle,
die eine sichere Schicht bereitstellt, die mit einem oder mehreren
Computerbetriebssystemen und anwendungsspezifischen Steuerungsprogrammen
schnittstellenmäßig verbunden
ist. Die Kombinierte-Hardware-und-Software-SP
(SP = Sicherheitsplattform = secure plattform) ermöglicht einem
Betriebssystem oder einem anwendungsspezifischen Steuerungsprogramm, über eine
Kombinierte-Hardware-und-Software-SPI (SPI = secure platform Interface
= Sicherheitsplattformschnittstelle) direkt auf nicht-privilegierte
Maschinenanweisungen und Register zuzugreifen, sowie Softwareroutinen
aufzurufen, die eine Steuerung der Hardware für ein Betriebssystem oder anwendungsspezifisches
Steuerungsprogramm ohne Preisgabe der privilegierten Maschinenanweisungen
und -register bereitstellt. Zusätzlich
liefern die SP und die SPI einen Satz von Sicherheitsdepotdiensten,
die unter anderem Verschlüsselungs-
und Entschlüsselungsdienste,
Sicherheitstaktikverwaltung und andere sicherheitsverwandte Dienste,
die intern erzeugte Geheimdaten, wie z. B. Verschlüsselung
schlüssel
im Klartext verwenden, die den Betriebssystemen und anwendungsspezifischen
Steuerungsprogrammen noch anderen Routinen des Softwareabschnitts
der Kombinierte-Hardware-und-Software-Sicherheitsplattform
nicht preisgegeben werden können.
Die SPI kann man sich als eine Maschinenschnittstelle zu einer Maschine
vorstellen, die nicht nur eine Hardware einschließlich eines
oder mehrerer Prozessoren, Busse, Speicherkomponenten und anderer
Hardwarekomponenten, die in 1 gezeigt
sind, umfasst, sondern auch Firmware schnittstellen und einen erweiterbaren
Satz von Softwareroutinen. Daher ist die SPI eine Schnittstelle
mit der SP, eine zusammengesetzte Hardware-, Firmware- und Softwaremaschine.
Die SPI kann man sich als eine Schnittstelle vorstellen, die durch
einen neuen Typ von Softwareschicht, der Betriebssystemen und anwendungsspezifischen
Steuerungsprogrammen unterliegt, bereitgestellt wird.
-
15 ist
ein Blockdiagramm, das die SP in einem Computersystem darstellt,
das die SP und ein oder mehrere Betriebssysteme und anwendungsspezifische
Steuerungsprogramme aufweist. Die SPI 1502 liegt zwischen
der Softwareschicht 1504 der SP und einem oder mehreren
Betriebssystemen und/oder anwendungsspezifischen Steuerungsprogrammen 1506.
Die SP weist die Softwareschicht 1504, eine Hardware- und Firmwareplattformschnittstelle 1508 und
die Hardware- und Firmwareplattform 1510 auf. Wie vorstehend
erörtert
wurde, sind die nicht-privilegierten Anweisungen und Register, die
an der Hardwareschnittstelle 1508 bereitgestellt werden,
direkt durch die SPI 1502 preisgegeben, wie es in 15 durch den vertikalen
Pfeil 1512 angezeigt ist. Die anderen Komponenten der Hardwareschnittstelle,
zur Rechten der vertikalen gestrichelten Linie 1514, sind
nicht preisgegeben. Statt dessen wird die Funktionalität, die durch
diese Hardwareschnittstellenkomponenten bereitgestellt wird, für Betriebssysteme
und anwendungsspezifische Steuerungsprogramme über die Sicherheitsplattformdienste-Komponente 1516 und
die Sicherheitsdepotdienste-Komponente 1518 der SPI verfügbar gemacht.
-
Wichtig ist zu betonen, daß neben
den Fähigkeiten,
die die SP bereitstellt, die SP sich ziemlich von einem Betriebssystem
oder einer herkömmlichen
virtuellen Maschine unterscheidet, und daß sich die SPI von einer Betriebssystemschnittstelle
oder Virtuelle-Maschinenschnittstelle ziemlich unterscheidet. Eine
virtuelle Maschine ist eine Softwareabstraktion einer zugrundeliegenden
Hardwareplattform, die die privilegierten Anweisungen und Register
und die Firmwareschnittstellen der zugrundeliegenden Hardwareplattform
entweder direkt preisgibt oder simuliert. Die virtuellen Maschinen
sind bei einer Anzahl von Situationen, wie z. B. einer Betriebssystementwicklung,
von Nutzen. Jedoch ist die SP ungleich einer Virtuelle-Maschineschnittstelle.
Die SPI verhindert absichtlich allen Zugriff auf die privilegierten
Anweisungen und Register und Firmwareschnittstellen durch Überlagern
von Betriebssystemen. Außerdem
stellen die SP-Mechanismen einen erweiterbaren, reichen Satz von
Sicherheitsdiensten, wie z. B. kryptographischen Diensten, bereit,
die über
den Umfang der Fähigkeiten,
die durch virtuelle Maschinen geliefert werden, weit hinausreichen.
Die SP-Sicherheitsdienste werden durch vollständiges Segmentieren und Isolieren
ihrer Codebilder und Daten von den überlagernden Betriebssystemen
und anwendungsspezifischen Steuerungsprogrammen sicher gemacht.
Diese Segmentierung und Isolierung ist nur möglich, weil die Betriebssysteme
und anwendungsspezifischen Steuerungsprogramme überhaupt keinen direkten Zugriff
auf privilegierte Anweisungen und Register und Standardschnittstellen
haben. Die SP-Verschlüsselungsdienste
sind beispielsweise daher in der Lage, die aktuellen Werte der Verschlüsselungsschlüssel und
die Schlüsselmaterialien,
die von den Verschlüsselungsschlüsseln abgeleitet wurden,
vor allen Betriebssystemen, anwendungsspezifischen Steuerungsprogrammen
und Anwendungsprogrammen vollständig
zu verbergen, während
diesen Betriebssystemen, anwendungsspezifischen Steuerungsprogrammen
und Anwendungsprogrammen immer noch ermöglicht wird, die Verschlüsselungsdienste
frei zu nutzen.
-
Obgleich die SP eine Sicherheitsplattform
für Betriebssysteme
ist, stellt die SP nicht von sich aus die Sicherheit eines Computersystems,
das auf der SP aufgebaut ist, sicher. Im Gegensatz zu einem Systemsteuerungsprogramm,
wie einem Betriebssystem, liefert die SP lediglich einen Satz von
abrufbaren Mechanismen neben unprivilegierten Anweisungen und Registern.
Die SP-Mechanismen liefern Grundbausteine, aus denen ein Sicherheitssystem
konstruiert werden kann, wie nachstehend beschrieben ist. Die SP-Mechanismen
ermöglichen,
daß ein
Betriebssystem eine ausreichende Kontrolle über die zugrundeliegende Hardware
ausüben
kann, um volle Betriebssystemsdienste für die Anwendungsprogramme und
Benutzer bereitzustellen. Jedoch liefert die SPI diese Funktionalität ohne Preisgabe
irgendwelcher privilegierter Anweisungen oder Register oder Firmwareschnittstellen
vor einem darüberliegenden
Betriebssystem oder anwendungsspezi- fischen Steuerungsprogramm.
-
Intern nutzen die SP-Mechanismen
bei dem IA-64-Ausführungsbeispiel
der Erfindung beständig
die Schutzfähigkeiten
der IA-64-Architektur in einer Weise, die zum Reduzieren der Anfälligkeiten
gegenüber
Virus- und Eindringangriffen konzipiert ist. Die angewandten Praktiken
umfassen: alle ausführbaren
Codebilder werden zuerst durch Überprüfen der
digitalen Signaturen validiert, bevor sie eingestellt werden, um
ausführbar zu
sein; ausführbaren
Codebildern wird es niemals erlaubt, gleichzeitig ausführbar und
schreibbar zu sein; Stapel und Datenbereiche können gelesen oder geschrieben
werden, werden jedoch niemals ausgeführt; die SP-Mechanismen werden
durch die Verwendung von Privilegebenen und Schutzschlüsseln segmentiert,
um den Code und die Daten von jedem Mechanismus vor allen darüberliegenden
Betriebssystemen und anwendungsspezifischen Steuerungsprogrammen
und von allen anderen SP-Mechanismen zu isolieren. Die Betriebssysteme
und anwendungsspezifischen Steuerungsprogramme, die über der
SP liegen, können
auch ähnliche
Speicherschutzpraktiken annehmen, um ihre Sicherheit zu verbessern.
Ein beliebiges Betriebssystem oder anwendungsspezifisches Steuerungsprogramm
kann jedoch tatsächlich
scheitern, sich selbst zu schützen,
trotz der Tatsache, daß ihnen
die Werkzeuge dafür
durch die SP-Schnittstelle zur Verfügung gestellt werden.
-
Die SP organisiert die Betriebsmittel
des Systems in eine oder mehrere getrennte voneinander isolierte
Partitionen, die als „Domain" bezeichnet werden.
Jede Domain arbeitet unter der Steuerung eines Betriebssystems oder
anwendungsspezifischen Steuerungsprogramms. Die SP ordnet jeder
Domain einen Bereich der virtuellen Speicheradressen, einen Bereich
der physikalischen Speicheradressen, eine Anzahl von logischen und
physikalischen CPUs, einen Satz von I/O-Geräten
und einen Satz von Identifiziererwerten zu.
-
Um die SP-Dienste zu liefern, benötigt die
SP-Softwareschicht
eine bestimmte spezifische Funktionalität von der SP-Hardwareschicht
neben den nicht-privilegierten Anweisungen, Registern und einer
weiteren Prozessorfunktionalität,
die allgemein durch die Hardwareschicht bereitgestellt wird. Eine
erste, wichtige zusätzliche
Funktionalität
ist das Bereitstellen von zumindest vier Privilegpegeln, auf denen
die verschiedenen Prozesse ausgeführt werden können. Die
Softwareschicht der SP reserviert die zwei am meisten privilegierten Privilegpegel,
PLO und PL1, für
eine exklusive Softwareschichtverwendung, wobei zumindest ein dritter
Privilegpegel, PL2, für
die Betriebssystemroutinen und die anwendungsspezifischen Steuerprogramme
und ein vierter Privilegpegel, PL3, für Anwendungsprogramme hinterlassen
wird. Eine Hardware, die mehr als vier Privilegpegel bereitstellt,
kann ebenfalls verwendet werden, wobei die zusätzlichen Privilegpegel entweder
nicht benötigt
oder der Betriebssystemschicht zur Betriebssystemverwendung zugeordnet
werden. Bei einem Ausführungsbeispiel
der Erfindung werden die SP-Mechanismen, die auf der PLO ausgeführt werden,
als der SPK (SPK = Secure Platform Kernel = Sicherheitsplattform-Betriebskern)
bezeichnet, und der SP-Code, der auf der PL1 ausgeführt wird,
wird als SPGS (SPGS = Secure Platform Global Services = Sicherheitsplattform-Globaldienste) bezeichnet.
Das Betriebssystem oder anwendungsspezifische Steuerprogramm, die
innerhalb einer Domain (bzw. Domäne)
ausgeführt
werden, verwaltet die logischen und physischen Betriebsmittel, die
der Domain zugeordnet sind, indem die Sicherheitsplattformdienste
aufgerufen werden. Das Domain-Betriebssystem oder anwendungsspezifische
Steuerprogramm operiert auf dem höchsten Privilegpegel über der
SP-Schnittstelle, die ein niedrigerer Privilegpegel ist als die
operierenden Privilegpegel der SPGS und des SPK.
-
Eine zweite wichtige zusätzliche
Funktionalität
ist, daß zumindest
zwei Dimensionen der speicherpartitionierenden Steuerung zur Partitionierung
eines Speichers zwischen den betriebssystembasierten Domains und,
innerhalb jeder Domain, zur Partitionierung eines Speichers zwischen
der SP, einem Betriebssystem und den Anwendungsprogrammprozessen
auf Benutzerpegel für
die SP verfügbar
sind. 16 stellt die
zweite speicherpartitionierende Funktionalität dar, die durch die SP benötigt wird
und durch moderne Prozessorarchitekturen, wie z. B. die Intel IA-64-Prozessorarchitektur,
bereitgestellt wird. In 16 wird
der gesamte virtuelle Speicherplatz durch ein großes Rechteck 1602 dargestellt.
Ein Abschnitt des gesamten virtuellen Speicherplatzes 1604,
der als horizontales Rechteck dargestellt ist, das das gesamte horizontale
Ausmaß des
großen Rechtecks 1602 umspannt,
ist nur durch die Softwareschicht der SP zugreifbar. Ein zweiter
Abschnitt des gesamten virtuellen Speicherplatzes, der als horizontales
Rechteck 1606 gezeigt ist, das das gesamte horizontale
Ausmaß des
großen
Rechtecks 1602 umspannt, wird innerhalb jeder Domain durch
das Betriebssystem, das diese Domain verwaltet, verwendet. Ein dritter
Abschnitt des gesamten virtuellen Speicherplatzes, der als horizontales
Rechteck 1608 gezeigt ist, das das gesamte horizontale
Ausmaß des
großen
Rechtecks 1602 umspannt, wird durch individuelle Anwendungsprogramme
und andere Prozesse auf Benutzerpegel innerhalb jeder Domain verwendet.
Wie vorstehend erörtert,
bezugnehmend auf 9,
ermöglichen
die Privilegpegel, die den Speicherseiten in den TLB-Einträgen zugeordnet
sind, die Partitionierung des Speichers zwischen den Prozessen,
die auf den unterschiedlichen Privilegpegeln arbeiten, sind. jedoch
für die
horizontale Partitionierung der Domains und Anwendungen nicht ausreichend,
die in jeder Domain arbeiten. Daher kann die Partitionierung des
Speichers innerhalb der horizontalen SP, des Betriebssystems und
der Partitionierungen auf Be nutzerpegel 1604, 1606 und 1608 teilweise
unter Verwendung einer privilegpegelbasierten Partitionierung des Speichers
erreicht werden, vorausgesetzt, daß die SP, das Betriebssystem
und die Prozesse auf Benutzerpegel auf unterschiedlichen Privilegpegeln
arbeiten. Die privilegpegelbasierte Partitionierung des Speichers
kann jedoch beispielsweise einen Bereich des Speichers, der einem
Prozessor auf Benutzerpegel zugeordnet ist, nicht vor einem Zugriff
durch einen Betriebssystemprozeß schützen.
-
Die SP stellt für eine beliebige Anzahl von
gleichzeitig arbeitenden Betriebssystemen Dienste bereit, wobei
jedes Betriebssystem eine beliebige Anzahl von unterschiedlichen
Prozessen auf Benutzerpegel verwaltet. Um einen Speicher, der einem
Betriebssystem zugeordnet ist, vor einem Zugriff durch ein anderes
Betriebssystem zu schützen,
sind der Betriebssystem-Speicherplatz 1606 und der Speicherplatz 1608 auf
Benutzerpegel ferner in Domains aufgeteilt. Ein einzelnes Betriebssystem
und alle Prozesse auf Benutzerpegel, die durch dieses Betriebssystem
verwaltet werden, weisen zusammen eine Domain auf, und jeder Domain
ist ein separater Abschnitt des virtuellen Speichers zugeordnet.
Daher verwendet in 16 ein
erstes Betriebssystem einen ersten Abschnitt 1610 des Betriebssystem-Speicherplatzes 1606,
ein zweites Betriebssystem verwendet einen zweiten Abschnitt 1612 des
gesamten Betriebssystem-Speicherplatzes 1606, und ein drittes
Betriebssystem verwendet einen dritten Abschnitt 1614 des
gesamten Betriebssystem-Speicherplatzes 1606. Der Speicherplatz 1608 auf
Benutzerpegel ist ebenfalls in Domains aufgeteilt, so daß in 16 kleine Abschnitte des
virtuellen Speicherplatzes 1616 bis 1619 und der
erste Abschnitt des Betriebssystem-Speicherplatzes 1610 zusammen
den Speicherplatz bilden, der einer ersten Domain, Domain 0,
zugeordnet ist, die Speicherabschnitte 1620-1623 und der
Betriebssystem-Speicherabschnitt 1612 zusammen den Speicher
bilden, der einer zweiten Domain, Domain 1, zugeordnet
ist, und die Speicherabschnitte 1624-1627 auf Benutzerpegel
und der Betriebssystem-Speicherabschnitt 1614 zu sammen
den Speicherplatz bilden, der einer dritten Domain, Domain 2,
zugeordnet ist. Natürlich
kann sich in einem derzeitigen Computersystem die Menge eines Speichers,
die einer speziellen Domain zugeordnet ist, von der Menge eines
Speichers unterscheiden, die anderen Domains zugeordnet ist, und
unterschiedliche Anzahlen von Benutzerprozessen können in
unterschiedlichen Domains arbeiten.
-
Bei einem Ausführungsbeispiel der vorliegenden
Erfindung verwendet die SP die Bereichsregister und Bereichsidentifizierer,
die vorstehend unter Bezugnahme auf 9 beschrieben
wurden, um den Speicher im Hinblick auf die Domains zu partitionieren.
Daher werden jedem Betriebssystem, und den Prozessen, die durch das
Betriebssystem verwaltet werden, die zusammen eine Domain bilden,
ein spezieller Satz von Bereichsidentifizierern für ihre ausschließliche Verwendung
zugeordnet. Wie in 16 gezeigt
ist, kann man sich eine bereichsidentifiziererbasierte Speicherpartitionierung
als eine Dimension 1628 eines zweidimensionalen Speicherpartitionierungsmechanismus
vorstellen.
-
Die SP benötigt neben der Inter-Domain-,
bereichsidentifiziererbasierten Speicherpartitionierung einen zweiten
Partitionierungsmechanismus zum Partitionieren eines Speichers in
einer Domain zwischen dem Betriebssystem und den Prozessen auf Benutzerpegel
sowie zum Partitionieren eines Speichers, der der SP von einem Speicher
zugeordnet ist, der den Betriebssystemen und den Prozessen auf Benutzerpegel
zugeordnet ist. In 16 wird
dieser zweite Partitionierungsmechanismus als eine zweite Dimension 1630 von
einer Speicherpartitionierung dargestellt. Bei dem beschriebenen
Ausführungsbeispiel
der SP wird diese zweite speicherpartitionierende Dimension durch
Zuordnen einer feststehenden Anzahl von Bereichsregistern bereitgestellt,
um die Bereichsidentifizierer für
die SP-Softwareschicht und die Domain-Betriebssysteme zu enthalten.
Die verbleibenden Bereichsregister enthalten die Bereichsidentifizierer
für jeden
Prozeß auf
Benutzerpegel. Die IA-64- Schutzschlüssel liefern
eine noch feinere Granularität
einer Separierung in allen Speicherbereichen 1604, 1606 und 1608.
Die Schutzschlüssel
werden beispielsweise verwendet, um die Mechanismen in der SPK-Schicht
zu separieren. Weil die SP alle Register, den physischen Speicher
und die Schutzschlüssel steuert,
kann die SP den physischen Speicher und Sätze der Bereichsidentifizierer
zur ausschließlichen
Verwendung von jeder Domain zuordnen. Es ist zu beachten, daß durch
die Verwendung von schutzschlüsselbasierten
Speicherpartitionen ein spezieller Bereich des Speichers im Prinzip
einem beliebigen Prozeß zum
ausschließlichen
Zugriff durch diesen Prozeß zugeordnet
sein kann.
-
Daher ermöglichen die Speicherschutzmechanismen,
die durch die Intel®-IA-64-Architektur bereitgestellt
werden, durch Verwendung einer horizontalen Partitionierung des
Speichers durch die Bereichsidentifizierer und einer horizontalen
Partitionierung des Speichers durch die Bereichsregister, das die
SP den Speicher partitionieren kann, um Bereiche eines Speichers,
auf die nur durch die SP ausschließlich zugegriffen werden kann,
Bereiche eines Speichers, auf die nur die SP und ein weiteres Betriebssystem
oder eine Entität auf
Benutzerpegel ausschließlich
zugreifen können,
und Bereiche eines Speichers bereitzustellen, auf die durch einen
Satz von einem Betriebssystems und Entitäten auf Benutzerpegel und die
SP zugegriffen werden kann. Die Schutzschlüsselmechanismen, die durch
die Intel-®-IA-64-Architektur bereitgestellt
werden, liefern eine noch feinere Granularität. Bei den derzeitigen Computersystemen
können
das Betriebssystem, das auf dem Privilegpegel 0 ausgeführt wird,
oder ein beliebiger der I/0-Treiber oder der anderen Stammgäste, die
auf dem Privilegpegel 0 arbeiten müssen, einen Zustand manipulieren,
um einen Zugriff auf den gesamten Speicher in einem Computersystem
zu erhalten. Bei einem SP-basierten System, das das zweidimensionale
Speicherpartitionierungsschema verwendet, das in 16 dargestellt ist, kann die SP im Gegensatz
dazu Speicherbereiche, die nur für
eines von vielen gleichzeitig arbeiten den Speichersystemen im System
zugreifbar sind, sowie Speicherbereiche bereitstellen, die nur für einen
speziellen Prozeß auf
Benutzerpegel zugreifbar sind. In 16 kann
die SP, beispielsweise durch Steuerung der Zuordnung der Schutzschlüssel, für selbst einen
Speicherbereich zuordnen, wie z.B. einen Speicherbereich 1632,
auf den nur ein spezieller SP-Mechanismus zugreifen kann. Ein solcher
SP-Mechanismus-Exklusiv-Bereich
wird durch die SP verwendet, um die tatsächlichen Werte der Verschlüsselungsschlüssel zu
speichern, so daß auf
die geheimen Schlüsselmaterialien
nicht durch ein Betriebssystem oder einen Prozeß auf Benutzerpegel zugegriffen
werden kann. Natürlich könnte ein
böswilliger
SPK-Code, weil der SPK auf dem Privilegpegel 0 arbeitet, die Speicherschutzvorkehrungen
umgehen. Die Grundlagen, um einen SPK-Code vertrauenswürdig zu
machen, sind: (1) Es ist eine begrenzte Anzahl von SPK-Mechanismen
vorhanden. (2) Jeder SPK-Mechanismus ist relativ klein, verständlich, unabhängig und
in sich geschlossen. (3) Der SPK-Quellencode
kann veröffentlicht
und durch unabhängige
Experten überprüft werden.
(4) Der SPK-Code-Entwicklungsprozeß umfaßt ausführliche
Codeuntersuchungen durch mehrere Personen. Und (5), Die SPK-Codebilder
sind digital signiert und werden vor der Ausführung verifiziert.
-
Bei vielen derzeit erhältlichen
Computersystemen können
die Steuerungen für
die I/O-Vorrichtungen direkt auf den physischen Speicher zugreifen.
Die SP erlaubt keinen direkten Zugriff auf den physischen Speichers
durch eine beliebige Nicht-SP-Routine oder durch eine externe Hardware.
Statt dessen muß die
Hardwarekomponente der SP bestimmte Mechanismen zum Bereitstellen
von Virtuelle-Adresse-Zu-Physische-Adresse-Übersetzungen
oder eine andere Einrichtung in den Hardware-Busadaptern und Routingkomponenten
umfassen, um die physischen Adressen,. auf die die I/O-Hardware zugreifen
kann, einzuschränken, so
daß eine
I/O-Steuerung die
Daten nur mit einem Speicherbereich austauschen kann, der für diesen
Zweck durch die SP zugeordnet wurde, jedoch nicht auf einen Speicher
außerhalb
des Spei cherbereichs zugreifen kann, der der I/O-Steuerung zugeordnet
ist.
-
Die Software-Schicht der SP (1604 in 16) ist mit der Hardware-Firmware-Schnittstelle
(1508 in 15)
und mit einem oder mehreren Betriebssystemen über die SPI (1502 in 15) schnittstellenmäßig verbunden.
Die Software-Schicht
der SP ist an sich in zumindest zwei Schichten mit zumindest einer
internen Schnittstelle aufgeteilt. 17 ist
ein Blockdiagramm der Software-Schicht der SP. Die Software-Schicht
der SP 1702 ist entlang der gestrichelten Linie 1704 in
eine SPGS-Schicht 1706 und in eine SPK-Schicht 1708 unterteilt. Bei
einem Ausführungsbeispiel
der vorliegenden Erfindung werden die Routinen der SPGS 1706 auf dem
Privilegpegel PLl ausgeführt,
während
die Routinen des SPK 1708 auf der PLO ausgeführt werden.
Die interne Aufteilung berücksichtigt
ein Konstruieren eines relativ kleinen SPK, der durch formelle Verifizierungsverfahren,
Codeanalysen (Durchgehen von Codes) und letztendlich durch Veröffentlichung
für Experten
innerhalb der Sicherheitsund Computerbetriebssystemgemeinden verifiziert
werden kann. Daher kann der am höchsten
privilegierte Code des SPK möglichst
fehlerfrei und robust ausgeführt
werden, und alle anderen Teile des Systems sind vor dem Trojanischen
Pferd oder einem virenverseuchten PLO-Code, der in schädlicher Weise
auf die geschützten
Speicherbereiche, die anderen Prozessen zugeordnet sind, zugreifen
und dieselben modifizieren kann, vollständig geschützt.
-
Die SPGS-Schnittstelle weist logischerweise
drei Haupt-Teilschnittstellen
auf: (1) Die SP-Plattformverwaltungsdienste 1710,
die eine Einrichtung zum Konfigurieren der logischen und physischen
Betriebsmittel des Systems und die Einrichtung für das Domain-Betriebssystem oder
das anwendungsspezifische Steuerprogramm bereitstellen, um den privilegierten
Status der Maschinen zu beeinflussen. (2) Die SP-Sicherheitsverwaltungsdienste 1712,
die die kryptographi schen und sicheren Speicherungsfunktionen der
SP einschließlich beispielsweise
unterscheidbarer funktionaler Komponenten bereitstellen, die jeweils
durch unterscheidbare Schutzschlüssel
zur Isolierung von verschiedenen Systemkomponenten geschützt werden
können.
Und (3) SP-Extensionen 1714, die ein Erweitern der funktionalen
Anforderungen der SP im Laufe der Zeit berücksichtigen, wodurch ein Hinzufügen einer
Funktionalität,
wie z. B. zusätzliche
kryptographische Algorithmen, an die SP ermöglicht wird. Für ein besseres
Verständnis
der verwandten Erörterung
werden in 17 die Teilschnittstellenunterteilungen
bis zum SPK getragen. Die SP-Schnittstelle kann vollständig aus
SPGS-Diensten bestehen,
die wiederum SPK-Mechanismen aufrufen, oder kann aus SPGS-Diensten,
die nach Bedarf SPK-Mechanismen
aufrufen, sowie aus SPK-Mechanismen bestehen.
-
Die SP-Plattformverwaltungsdienste-Teilschnittstelle 1710 umfaßt: (1)
SP-Plattformdienste 1716, die durch ein Betriebssystem
oder ein anwendungsspezifisches Steuerprogramm aufgerufen werden,
um Funktionen auszuführen,
die privilegierte Operationen benötigen, die SP-Betriebsmittel
involvieren oder die sicherheitsempfindlich sind. (2) Domain-Steuerungsdienste 1718,
die für
eine Erzeugung, Konfiguration, Reinitialisierung und ein Schließen der
Domains sorgen. (3) Prozessorsteuerungsdienste 1720, die
für eine
Konfiguration und Abwicklung der logischen und physischen CPUs sorgen.
(4) Plattformtaktiksteuerungdienste 1722, die für eine Spezifikation,
Einhaltung und Anwendung der Plattformtaktik, wie z. B. einer Zuordnung
der Systembetriebsmittel sorgen. Und (5) Inter-Domain- und Intra-Domain-Dienste 1724,
die für
eine Signalisierung von Ereignissen zwischen den logischen CPUs
innerhalb und zwischen den Domains, eine gemeinsame Verwendung von
Betriebsmitteln zwischen den Domains und ein Ermögichen einer Datenübertragung
für einen schnellen
Netzbetrieb oder einen Datenaustausch sorgen. Die SP-Plattformverwaltungsdienste 1710 können wiederum
einen oder mehrere der SP-Mechanismen, die nachstehend beschrieben
sind, aufrufen. Die SP-Plattformverwaltungsdienste va- 1idieren Parameter
und authentifizieren Aufrufe vor dem Aufrufen der SP-Mechanismen.
Zusätzliche
Einzelheiten über
einige spezifische SP-Plattformdienste-Routineschnittstellen sind im Anhang
A vorgesehen.
-
Die SP-Sicherheitsverwaltungsdienst-Teilschnittstelle 1712 umfaßt: (1)
Sicherheitsdepotdienste 1726, die durch ein Betriebssystem,
ein anwendungsspezifisches Steuerprogramm oder ein Benutzeranwendungsprogramm
aufgerufen werden, stellen Funktionen bereit, die Geheimnisse verwenden,
die nur den spezifischen Mechanismen zur Verfügung stehen, die auf dem höchsten Privilegpegel
des Systems, PLO, ausgeführt werden,
einschließlich
(a) kryptographische Dienste, die für ein Verschlüsseln und
Entschlüsseln
von Daten unter Verwendung von einem oder mehreren kryptographischen
Algorithmen sorgen, und (b) sichere Datendienste. Und (2) Ruferauthentifizierungsdienste 1728,
die eine Einrichtung für
Domains bereitstellen, um ein Sicherheitsetikett, das in einem Zustand
beibehalten wird, auf den nur die SP zugreifen kann, den Systemobjekten,
einschließlich
spezifische Benutzer, Anwendungsprogramme, Betriebssystemkomponente,
Verzeichnisse, Dateien und abfertigbare Objekten, zuzuordnen, und
um dieses Etikett zu verwenden, um den Zugriff auf die Plattform
und die Sicherheitsdepotdienste zu authentifizieren. Die durch die
Funktionen verwendeten Geheimnisse umfassen kryptographische Schlüsselmaterialien.
Durch Verstecken der Schlüssel,
selbst vor den Domains, die dieselben verwenden, können die
Schlüsselmaterialien
sicher verwahrt werden, selbst wenn das Domain-Betriebssystem, das
anwendungsspezifische Steuerprogramm oder das Benutzeranwendungsprogramm
durch einen Angreifer gefährdet
werden. Die sicheren Systeme müssen
Depots einrichten, wie z. B. Sicherheitsprotokolle, die, außer durch
die spezifischen Schnittstellen, nicht zugreifbar sind- oder nicht
modifiziert werden können.
Die SP liefert eine Grundfunktionalität, um einem Domain-Betriebssystem
oder einem anwendungsspezifischen Steuerprogramm zu ermöglichen,
zu einem sicheren Depot beizutragen oder dasselbe zu befragen. Zusätzli the
Einzelheiten der spezifischen SP-Depotdienste-Routineschnittstellen sind in Anhang
B vorgesehen.
-
Die SP-Plattformdienste 1716 umfassen
eine Speicherverwaltung, eine Prozeßverwaltung und eine Unterbrechungsverwaltungsdienste.
Die Speicherverwaltungsdienste sorgen für eine Steuerung der Erzeugung,
Manipulation und des Löschens
der Abbildungen zwischen den virtuellen und physischen Adressen
und steuern den Prozessor-TLB (914 in 9) und die virtuelle Seitentabelle (1004 in 10). Die IA-64-basierte SP-Implementierung
teilt jeder Domain die abgetrennten Sätze der Bereichsidentifizierer
zu, so daß die
erweiterten virtuellen Adressen in allen Domains eindeutig sind.
Jeder Domain werden auch abgetrennte Bereiche des physischen Speichers
zugeteilt. Dadurch wird sichergestellt, daß eine Domain nicht auf den
physischen Speicher der anderen zugreifen kann. Jeder Seite des
Speichers wird auch ein Schutzschlüssel zugewiesen, der Fachsteuerungen
oder andere Steuerungen einer feineren Granularität bei Speicherzugriffen
ermöglicht.
-
Die Prozeßverwaltungsdienste sorgen
für eine
Steuerung der Ausführung
der Prozesse auf den physischen Prozessoren. Die SP implementiert
zwei Prozessor-verwandte Abstraktionen: abfertigbare Objekte und
logische CPUs. Ein abfertigbares Objekt ist ein gespeicherter Teilprozeß aus einer
Steuerung und einem zugeordneten Adressierungskontext in einer Domain.
Das abfertigbare Objekt enthält
den Status, der zur Wiederaufnahme der Ausführung an dem Punkt, wo der
Teilprozeß der
Steuerung zuvor unterbrochen wurden, notwendig ist. Der Adressierungskontext
ist der Satz von zugeordneten Bereichs-IDs und Schutzschlüsseln, die
aus dem Satz der Domain gezogen wurden. Diese Werte bestimmen den
legalen erweiterten virtuellen Adressierungskontext für ein abfertigbares
Objekt. Ein Betriebssystem oder anwendungsspezifisches Steuerprogramm
wickelt die abfertigbaren Objekte durch Speichern des derzeitigen
Ausführungszustands
in ei nem abfertigbaren Objekt und Wiederherstellen des Ausführungszustands
von einem anderen abfertigbaren Objekt ab.
-
Die logischen CPUs sind die Sichtweise
der Domain auf einen oder mehrere physische Prozessoren. Eine Domain
kann einen oder mehrere logische Prozessoren aufweisen. Die Anzahl
von logischen Prozessoren in einer Domain und die Gesamtheit der
logischen Prozessoren in allen Domains kann kleiner als, gleich oder
größer als
die Gesamtheit der physischen Prozessoren in dem System sein. Die
logischen Prozessoren werden eingeplant und an die physischen Prozessoren
durch die SP versandt. Ein Betriebssystem oder anwendungsspezifisches
Steuerprogramm weiß allgemein
nicht über
diese Abwicklung Bescheid, wodurch Veränderungen an der CPU-Konfiguration ohne
eine OS-Involvierung ermöglicht
werden.
-
Die SP-Unterbrechungsverwaltungsdienste
sorgen für
eine Handhabung von unmittelbaren Unterbrechungen und für ein anschließendes Versenden
einer Benachrichtigung über
die Unterbrechungen an ein Betriebssystem oder ein anwendungsspezifisches
Steuerprogramm. Eine Unterbrechung ist ein Ereignis, das bewirkt,
daß die
Steuerung zu spezifischen Handhabungsroutinen umgeleitet wird. Die
Unterbrechungen, die durch die IA-64-Architektur definiert sind,
sind in vier Kategorieren unterteilt: (1) Abbrüche, entweder Prozessorrücksetzungen
oder ein interner Maschinenfehler, (2) Fehler, synchrone Unterbrechungen,
die aus einer Anweisung resultieren, die eine Maßnahme spezifiziert, die nicht
ausgeführt
werden kann oder nicht ausgeführt
werden sollte, oder für
die eine Systemintervention notwendig ist, bevor die Anweisung ausgeführt wird, (3)
Fallen, synchrone Unterbrechungen, die resultieren, wenn eine beendete
Anweisung eine Systemintervention benötigt und (4) asynchrone Unterbrechungen,
die asynchrone Ereignisse. oder Signale darstellen, die durch externe
Entitäten
oder Entitäten,
die von von einem Prozessor unabhängig sind, erzeugt werden,
einschließlich
I/O-Vorrichtungs-bezogene Ereignisse, die in der zeitlichen Reihenfolge
ihres Auftretens in den Priori tätsklassen
an Handhabungseinrichtungen geliefert werden müssen. In 17 werden die Abbrüche, Fehler und Fallen als „Ausnahmen" bezeichnet. Die
asynchronen Unterbrechungen werden als „Unterbrechungen" bezeichnet.
-
An die SPGS Es werden verschiedene
SPK-Mechanismen durch eine interne SPK/SPGS-Schnittstelle geliefert,
die mit der gestrichelten Linie 1704 in 17 logisch zusammenfällt. Auf die SPK-Mechanismen
wird durch die SPGS über
Aufrufe zugegriffen. Der SPK weist einen Satz von Mechanismen auf,
die allgemein in Verbindung mit dem Aufrufen von Prozessen arbeiten.
Die SPK-Mechanismen umfassen: (1) Speicherverwaltungsmechanismen 1730,
(2) Prozessorversandmechanismen 1732. (3) Ausnahmehandhabungsmechanismen 1734,
(4) Unterbrechungshandhabungsmechanismen 1736, (5) Fehlerbeseitigungs-
und Überwachungsmechanismen 1738,
(6) kryptographische Mechanismen und kryptographische Speicherung 1740,
(7) Sicherheitsdepot-Mechanismen und -speicherung 1742.
-
Die Speicherverwaltungsmechanismen
führen
die privilegierten Operationen zum Einbringen von Übersetzungen
in den TLB, VHPT und anderen Seitentabellen aus. Die Prozessorversandmechanismen
handhaben das Speichern und Wiederherstellen des Zustands in die
und von den abfertigbaren Objekten und logischen CPUs. Diese Mechanismen
sind notwendig, weil ein Großteil
des Zustands, wie z. B. der Adressierungskontext, privilegiert ist.
Die Ausnahmehandhabungsmechanismen beschäftigen sich mit Fehlern, Fallen,
speziellen Hardwareereignissen, wie z. B. Maschinenüberprüfungen und
Veränderungen
an der Hardware-Konfiguration und SP-erzeugten Ereignissen. Ein
Betriebssystem oder anwendungsspezifisches Steuerprogramm registriert
eine Ausnahmehandhabungseinrichtungs-Routine über die SPI, um aufgerufen
zu werden, wenn Ausnahmen eintreten. Wenn eine Ausnahme eintritt,
speichert die SP eine Mindestmenge des Prozessorzustands, überträgt dann
die Steuerung an den registrierten Ausnahmehandhabungsreinrichtungen.
Einige Fehler und Fallen können
direkt durch die SP für
ein Verhalten gehandhabt werden oder um die Schnittstelle mit einem
Domain-Betriebssystem oder anwendungsspezifischen Steuerprogramm
zu vereinfachen. Wenn ein Betriebssystem oder anwendungsspezifisches
Steuerprogramm eine Benachrichtigung über die Unterbrechungsereignisse
empfangen muß,
registriert das Betriebssystem oder anwendungsspezifische Steuerprogramm
eine Unterbrechungshandhabungseinrichtungs-Routine über die
SPI für
jede Unterbrechung, die erwartungsgemäß in der entsprechenden Domain
eintreten soll. Wenn eine Unterbrechung eintritt, ruft die SP die
zugeordnete Handhabungseinrichtungsroutine in einer speziellen,
vorkonstruierten Ausführungsumgebung
auf, um eine schnelle Unterbrechungsantwort zu ermöglichen.
Die Unterbrechungen werden durch die SP zur Lieferung an jedes Betriebssystem
oder anwendungsspezifische Steuerprogramm in einer Weise in einer
Warteschlange aufgereiht, die die Erhaltung der zeitlichen Reihenfolge
ermöglicht.
Eine spezielle Unterbrechung, die durch die SP bereitgestellt wird,
ist ein Zeitgeberticken, eine Unterbrechung, die zu einem feststehenden
Zeitintervall eintritt. Jedes Betriebssystem oder anwendungsspezifische
Steuerprogramm kann eine Benachrichtigung mit einem beliebigen ganzzahligen
Vielfachen des feststehenden Zeitintervalls spezifizieren.
-
Fehlerbeseitigungs- und Überwachungsmechanismen
verwenden eine Sammlung von Maschinenregistern, um eine Fehlerbeseitigungs-
und Verhaltensüberwachung
zu assistieren. Dieser SP-Mechanismus führt die privilegierten Zugriffe
aus, die für
ein Betriebssystem oder ein anwendungsspezifisches Steuerprogramm
notwendig sind, um die Fehlerbeseitigungsund-Verhaltensüberwachungs-Maschinenbe-triebsmittel
zu nutzen. Die kryptographischen Mechanismen und sicheren Speicherungsmechanismen
liefern Verschlüsselungs-,
Entschlüsselungs-
und Schlüsselverwaltungsfunktionen.
Die kryptographischen Algorithmen umfassen einen Symmetrischer-Schlüssel-Standardblock
und Stromschlüssel
(stream ciphers), eine Öffentlicher-Schlüssel-Verschlüsselung
und sichere Hash-Funktionen. Die Schlüsselverwaltungsfunktionen umfassen
eine Schlüsselerzeugung,
einen Schlüsselimport, einen
Schlüsselexport
und eine Schlüsselmaterialpräparation.
Die Sicherheitsdepotmechanismen und Speicherungsmechanismen können als
Softwareobjekte betrachtet werden, die geheime Daten zusammen mit
zugeordneten Zugriffsverfahren enthalten, die sich auf dem höchsten Privilegpegel
des Systems befinden. Dieser Satz von Mechanismen ist erweiterbar.
-
Sicherer Boot-Prozeß
-
Die SP liefert Mechanismen, die ein
Sichern von Komponenten des Systems ermöglichen, so daß ein Betriebssystem
bei einer ordnungsgemäßen Strukturierung
und Implementierung eine sichere Basis für Anwendungen und Prozesse
auf Benutzerpegel ermöglichen
kann. Eine wichtige Komponente der SP ist eine sichere Boot-Prozedur,
die eine Folge von bekannten, korrekten Systemzuständen vom
anfänglichen
Hochfahren bis zum Beginnen von einem oder mehreren Betriebssystemprozessen
sicherstellt. 18 ist
ein Blockdiagramm der Hardwarekomponenten eines Systems, die auf
den sicheren Boot-Prozeß bezogen
sind. Die diesbezüglichen
Hardwarekomponenten umfassen: (1) einen Prozessor 1802,
der einen initialen Firmwarevalidierungsmechanismus 1804 enthält, der
eine aktive Logik und gespeicherte Firmwareanweisungen aufweist,
(2) einen ROM (ROM = read-only memory = Nur-Lese-Speicher) 1806,
der digital signierte Sätze
von Firmwareanweisungen 1808-1811 (digitale Signaturen,
die als kleine Felder 1812-1815 angezeigt sind) enthält, die
n unterschiedliche Sätze
aus Firmwareanweisungen darstellen, wobei jeder Satz auf eine unterschiedliche
Phase des sicheren Boot-Prozesses bezogen ist, (3) einen Hauptspeicher 1816,
(4) ein Massenspeicherungsgerät 1818,
das Anweisungen für
ein OS-Laderprogramm
und zumindest ein OS 1820 sowie digitale Signaturen 1822-1823 für den OS-Lader
und das OS speichert, und (5) verschiedene interne Busse 1824-1829 und
Busbrücken/Router/Steuerungen 1830-1832,
die die Datenkommunikationen zwischen den zuvor beschriebenen Komponenten
vereinfachen.
-
19 ist
ein Flußsteuerprogramm
für einen
sicheren Boot-Prozeß, „secure
boot", das ein Ausführungsbeispiel
der Sicherer-Boot-Prozeß-Komponente
der SP darstellt. secure boot ist in 19 für ein Einprozessorsystem
beschrieben, obwohl alternative secure boot-Routinen, die Multiprozessorsysteme
booten, unkomplizierte Erweiterungen der secure boot-Routine sind,
die unter Bezugnahme auf 19 beschrieben
ist. Bei Schritt 1902 versorgt secure boot den Prozessor
mit Leistung und steuert den Prozessor, um beliebige Selbsttestroutinen
auszuführen,
die als des Teil des Prozessors umfaßt sind. Bei Schritt 1904 validiert
secure boot die digitale Signatur (1812 in 18) des Phase-l-Firmwareanweisungssatzes (1808 in 18). Bei Schritt 1906 steuert
secure Boot den Prozessor, um den Phase-l-Firmwareanweisungssatz auszuführen. Anschließend überprüft secure
boot in einer Solange-Schleife, die die Schritte 1908-1912 aufweist,
einen nächsten
Satz von Firmwareanweisungen in Schritt 1908. Wenn ein
anderer Satz von Firmwareanweisungen übrig bleibt, um ausgeführt zu werden,
wie bei Schritt 1908 bestimmt wurde, dann bestimmt secure
boot bei Schritt 1909, ob der Firmwareanweisungssatz zum
Hauptspeicher zur Ausführung
bewegt werden soll oder nicht. Wenn der nächste Firmwareanweisungssatz
zum Hauptspeicher bewegt werden soll, dann kopiert secure Boot bei
Schritt 1910 den nächsten
Firmwareanweisungssatz vom ROM zum Hauptspeicher. Anschließend validiert
secure boot bei Schritt 1911 die digitale Signatur, die
dem nächsten
Satz von Anweisungen zugeordnet ist, und ermöglicht, daß der Code ausführbar ist,
und verhindert eine Modifizierung des Codes und steuert im Anschluß an die
Validierung den Prozessor, um den nächsten Anweisungssatz bei Schritt 1912 auszuführen. Der
Begriff „Validieren" wird nachstehend
verwendet, um sich auf eine Digitalsignaturvalidierung und ein Einstellen
von Code-Zugriffserlaubnissen,
die ausführbar,
jedoch nicht schreibbar sein sollen, zu beziehen. Natürlich sendet
secure boot bei allen Digitalsignatur-Validierungsschritten, wie
z. B. den Schritten 1904 und 1911, wenn die digitale
Signatur die Validierung nicht besteht, einen Fehler zurück und schei tert.
Die nicht-validierende Firmware oder Software muß korrigiert werden, bevor
secure boot erneut ausgeführt
wird.
-
Sobald alle Sätze der Firmwareanweisungen
im ROM validiert und durch secure boot ausgeführt worden sind, lädt secure
boot bei Schritt 1914 den SP-Lader in den Speicher von
einer Massenspeicherungsvorrichtung, validiert die digitale Signatur,
die im SP-Lader bei Schritt 1916 umfaßt ist, und führt den
SP-Lader bei Schritt 1918 aus, um die SP-Software zu laden,
validiert die digitale Signatur, die der SP-Software zugeordnet ist, und führt dann
eine oder mehrere SPG-Routinen aus. Es ist zu beachten, daß verschiedene
Phasen der Firmware-Anweisungen und SB-Codebilder eventuell durch
unterschiedliche Privatschlüssel
signiert worden sein können
und entsprechende öffentliche
Schlüssel
zur Validierung der digitalen Signaturen benötigen können. Sobald ein ausführbares
Codebild validiert worden ist, kann einem öffentlichen Schlüssel, der
in diesem Codebild enthalten ist, vertraut werden. Der sichere Boot-Prozeß kann als
ein Prozeß des
Aufbauens einer Vertrauenskette basierend auf der Validierung, die
durch die Hardware zu Beginn des sicheren Boot-Prozesses ausgeführt wird,
und des Erweiterns durch die Ausführung des letzten verifizierten
Codebildes betrachtet werden. Es ist möglich und wird empfohlen, daß jeder
OS-Lader und jedes OS die Vertrauenskette in das OS und die Anwendungsschichten
erweitert.
-
Bei Schritt 1920 müssen die
SPGS kryptographische Wurzelschlüssel
erhalten. Dies kann durch Bereitstellen der Schlüssel außerhalb oder durch einen Sicherheitschip,
der in der Plattform integriert ist, wie z. B. einen TCPA-Chip erfolgen.
Unter Verwendung dieser Wurzelschlüssel und unter der Annahme,
daß das
0S konzipiert worden ist, um die Vertrauenskette über die
SP hinaus zu erweitern, laden und validieren die SPGS einen OS-Lader,
führen
den OS-Lader aus, um zumindest ein OS zu laden, validieren das OS
und führen
bei Schritt 1924 zumindest ein OS aus. An diesem Punkt,
wo ein OS eine Ausführung
beginnt, ist ein vollständig validiertes
und authentifiziertes und sicheres SP initialisiert worden, um das
OS zu unterstützen.
Es ist dann die Verantwortung von einem oder mehreren OSs, die bei
Schritt 1924 gestartet wurden, die Systemsicherheit unter Verwendung
eines reichen Satzes an Diensten, die durch die SP geliefert werden,
während
der Systemoperation zu bewahren. Selbst wenn in ein OS durch einen
erfolgreichen Angriff eingedrungen worden ist, erwirbt der Angreifer,
im Gegensatz zu den vorliegenden OS-Anfälligkeiten, nicht den Privilegpegel
0.
-
Obwohl die vorliegende Erfindung
bezüglich
eines speziellen Ausführungsbeispiels
beschrieben worden ist, soll sich die Erfindung nicht auf dieses
Ausführungsbeispiel
beschränken.
Modifizierungen, die im Schutzbereich der vorliegenden Erfindung
liegen, sind Fachleuten verständlich.
Die kombinierte Hardware-und-Software-Sicherheitsplattformschnittstelle,
die ein Ausführungsbeispiel
der vorliegenden Erfindung darstellt, kann mit einer nahezu endlosen
Anzahl von unterschiedlichen Routineschnittstellen in vielen verschiedenen
Programmierungs- und Programmspezifikationssprachen implementiert
sein. Obwohl das beschriebene Ausführungsbeispiel die Intel®-IA-64-Architektur
als eine Hauptkomponente der Hardwareschicht anführte, könnten auch anderen moderne
Computerprozessorarchitekturen in der Hardwareschicht der Sicherheitsplattform
verwendet werden. Die Kombinierte-Hardware-und-Software-Sicherheitsplattform-Schnittstelle, die
ein Ausführungsbeispiel
der vorliegenden Erfindung darstellt, kann erweitert werden, um
zusätzliche
Dienste und Funktionalitäten
neben den vorstehend erörterten
zu liefern, und es können
viele alternative Kombinierte-Hardware-und-Software-Sicherheitsplattform-Schnittstellen können entwickelt
werden.
-
Anhang A
-
Bei den Ausführungsbeispielen der vorliegenden
Erfindung verleihen die Sicherheitsplattform-Dienste allen Betriebssystemen
und anwendungsspezifischen Steuerprogrammen die funktionalen Fähigkeiten,
die durch die zugrundeliegenden hardware-privilegierten Register
und Anweisungen implementiert sind. Dies erfolgt mittels organisierter
Softwareschnittstellen mit den Plattformdiensten, die durch die
SPGS und den SPK bereitgestellt werden.
-
Einige Plattformdienste abstrahieren
die Funktionalität,
die durch bestimmte privilegierte Register und Anweisungen bereitgestellt
wird. Andere Plattformdienste entsprechen eng den spezifischen privilegierten
Registern und/oder Anweisungen. Die Absicht der Sicherheitsplattform-Architektur
ist es, für
jedes Betriebssystem und anwendungsspezifische Steuerprogramm die
volle funktionale Fähigkeit
der zugrundeliegenden Hardware zu liefern, jedoch nur für jene Systembetriebsmittel, über die
sie Kontrolle hat.
-
Die Sicherheitsplattform-Dienste
weisen mehrere Kategorien von Diensten auf. Diese Dienste umfassen
jene Dienste, um einem Betriebssystem oder einem anwendungsspezifischen
Steuerprogramm zu ermöglichen,
folgende Schritte auszuführen:
-
- – Verwalten
einer physischen und virtuellen Speicheradressierung.
- – Verwalten
einer Adressierung für
I/0 und DMA-I/O-Operationen.
- – Verwalten
von abfertigbaren Objekten („DOs", geben sicherer
Bereiche für
Elemente an, die als „Prozesse", „Aufgaben" oder „Teilprozesse" durch verschiedene
Betriebssysteme bezeichnet werden).
- – Verwalten
von synchronen und asynchronen Unterbrechungen.
-
Bei einem Ausführungsbeispiel der vorliegenden
Erfindung würden
einige repräsentative
Dienstschnittstellen bei diesen Kategorien folgende Merkmale umfassen:
-
Adressierung
-
spSetPageSize(PageSize, Virtual Address,
Size) Die Seitengröße für eine virtuelle
Adressenspanne spezifizieren.
-
Old Attributes = spMapMemory(Virtual
Address, Physical Address, Size, Properties); Eine virtuelle Adressenspanne
abbilden.
-
apSyncMappings(Virtual Address, Size);
Abbildung zwischen mehreren Prozessoren synchronisieren.
-
I/O Address = spEnableDMAmap (Virtual
Adress, Size, Read|Write);
-
Physische Adressenabbildung für Lese-
oder Schreib-DMA-I/O-Operation
einrichten.
-
spDisableDMAmap(Virtual Address,
Size); Physische Adressenabbildung für DMA-I/O-Operation sperren.
-
Eigenschaften
-
Die Eigenschaftswerte werden verwendet,
um einstellbare Parameter von einer Abbildung zwischen dem Domain-OS
und der SP zu kommunizieren. Beispiele umfassen:
-
Initialisierung
und Hochfahren
-
void (*os entry) (spHandle defaultDO,
spHandle CPU)
-
Dabei handelt es sich um die Eingangsadresse
vom OS-Boot-Bild.
Die Ausführung
beginnt hier auf dem Boot-Prozessor (in einem MP-System). Die Ausführungsumgebung
ist ausreichend initialisiert worden, so daß diese Routine in C sein kann.
SP-Dienste sind verfügbar.
-
void (*os mp entry) (spHandle defaultDO,
spHandle CPU)
-
Dabei handelt es sich um die address
Eingangsadresse, die durch das OS registriert wird, wenn es bereit
ist, die Mul-tiprozessoroperation
zu starten. Die Ausführungsumgebung
ist mit dem OS-Eingangspunkt identisch, außer daß zusätzliche Funktionen im Betriebskern
initialisiert und freigegeben werden.
-
spErr spStartMP(void (*mpEntry) (spHandle,
spHandle))
-
Vom OS beim Übergang zur Multiprozessoroperation
abgerufen. Es ist möglich,
daß die
anderen CPUs die Ausführung
beginnen, bevor dieser Aufruf zurückgesendet wird.
-
Prozeßverwaltung
-
spErr spCreateDO(spHandle *newDO,
void *stack, void *rse; unsigned int flags)
-
Erzeugt ein neues Abfertigbares Objekt
mit den spezifizierten Stapel-/RSE-Bereichen. Die Etiketten zeigen
verschiedene Erzeugungsmodi an, z. B. ob die Eltern-DO-virtuelle-Adressierung kopiert/gemeinsam verwendet/beim
Schreiben kopiert werden soll. Die Stapel- und RSE-Bereiche müssen durch
das Eltern-DO adressierbar sein.
-
spErr spSwitchDO(sp Handle newDO,
int die)
-
Die Ausführung auf der derzeitigen CPU
wird auf die Spezifizierte DO geschaltet. Wenn die Stirb-Flagge
gesetzt ist, wird das derzeitige DO gelöscht, bevor der Aufruf zurückkehrt.
Der Aufruf kann scheitern, wenn newDO keine legale DO-Handhabung
ist oder bereits versandt worden ist.
-
spErr spResume(spResumeState *resumeState)
-
Nimmt einen konstruierten oder zuvor
gespeicherten Prozeßzustand
wieder auf. Dieser Aufruf wird verwendet, wenn Veränderungen
am privilegierten Zustand, z. B. domaingesteuerte PSR-Bits, erforderlich sind.
-
spErr spDeleteDo(spHandle victim)
-
Das spezifizierte DO löschen; es
wird gelöscht,
bevor der Aufruf zurückkehrt.
Der Aufruf kann scheitern, wenn newDO keine legale DO-Handhabung
ist oder momentan versandt wird.
-
Fehlerbeseitigungs-
und Verhaltensüberwachung
-
spErr spGetDebugInfo(struct spDebugInfo
*debugConfig)
-
Speichert folgende Informationen:
Anzahl der Datenunterbrechungsregister, Anzahl der Anweisungsunterbrechungsregister,
die größte gültige Datenadreßmaske und
die größte gültige Anweisungsmaske.
Wenn keine Unterbrechungsregister verfügbar sind, werden die Werte
auf 0 gesetzt. Da die SP ein oder mehrere hohe Register für ihre Verwendung
reservieren kann, kann der Rückkehrwert
kleiner als die aktuelle Hardware sein.
-
spErr spSetDBR(int reg, void *addr,
unsigned long mask, unsigned int mode)
-
spErr spSetIBR(int reg, void *addr,
unsigned long mask, unsigned int mode)
-
Stellt die spezifizierten Daten-
(Anweisungs-) Unterbrechungsregister ein, um einen Daten- (Anweisungs-)
Fehlerbeseitigungsfehler zu erheben, wenn (access & mask) = (addr & mask). Der Modusparameter spezifiziert
einen Lese- und/oder Schreibzugriff für Datenunterbrechungspunkte,
Ausführen
für Anweisungsunterbrechungspunkte
und den Zugriffsprivilegpegel (privilegiert für das Domain-OS, unprivilegiert
für Anwendungen).
Wenn der Modus 0 ist, wird das spezifizierte Fehlerbeseitigungsregister
gesperrt.
-
Dieser Aufruf scheitert, wenn reg
kein gültiges
Fehlerbeseitigungsregister ist, addr ungültig ist oder wenn eine Maske
oder ein Modus durch die Hardware nicht honoriert werden können.
-
spErr spSetPMC(int reg, unsigned
int event, unsigned int flags)
-
Stellt die Steuerung für die spezifizierte
generische Überwachungseinrichtung
ein: 4 ≤ reg ≤ 7. Das Ereignis
ist implementationsspezifisch. Der Flagparameter spezifiziert, welche
Privilegpegel überwacht
werden, ob der zugeordnete Zähler
erneut gesetzt werden soll oder nicht und ob die Überwachungseinrichtungsfreigabe
privilegiert ist oder unter Anwendungssteuerung steht.
-
Im Gegensatz zu anderen Aufrufen
kann dieser von den Anwendungen abgerufen werden (Privilegpegel
3). Der Aufruf scheitert, wenn reg ungültig ist oder wenn eine Anwendung
versucht, eine privilegierte Überwachungseinrichtung
zu setzen.
-
spErr spReadPMD(unsigned long long
*val, int reg)
-
Den Ereigniszählwert für die spezifizierte generische Überwachungseinrichtung
lesen: 4 ≤ reg ≤ 7.
-
Im Gegensatz zu anderen Aufrufen
kann dieser von den Anwendungen abgerufen werden (Privilegpegel
3). Der Aufruf scheitert, wenn reg ungültig ist. Wenn die Überwachungseinrichtung
privilegiert ist und der Aufrufer sich auf Privilegpegel 3 befindet,
wird der Wert 0 zurückgesendet,
um mit dem IA-64-Hardwareverhalten übereinzustimmen.
-
spErr spSetPMCX(int reg, unsigned
long val, unsigned int flags)
-
Stellt die Steuerung für die spezifizierte
generische Überwachungseinrichtung
ein: reg < 4 oder
reg > 7. Der Wert
ist implementationsspezifisch.
-
Im Gegensatz zu anderen Aufrufen
kann dieser von den Anwendungen abgerufen werden (Privilegpegel
3). Der Aufruf scheitert, wenn reg unimplementiert ist, val illegal
ist oder wenn eine Anwendung versucht, eine privilegierte Überwachungseinrichtung
einzustellen.
-
spErr spReadPMDX(unsigned long long
*val, int reg) Den Ereigniszählwert
für die
spezifizierten Verhaltensüberwachungseinrichtungsdaten
lesen: 0 ≤ reg ≤ 255.
-
Im Gegensatz zu anderen Aufrufen
kann dieser von den Anwendungen abgerufen werden (Privilegpegel
3). Der Aufruf scheitert, wenn reg ungültig ist. Wenn die Überwachungseinrichtung
unimplementiert ist oder privilegiert und der Aufrufer sich auf
dem Privilegpegel 3 befindet, wird der Wert 0 zurückgesendet,
um mit dem IA-64-Hardwareverhalten übereinzustimmen.
-
Abwicklung
und Herunterfahren
-
spErr spDispatchAffinity(int value)
-
Stellt die Versandaffinität für die derzeitige
CPU ein, der Wert ist die relative Bedeutung des erneuten Versendens
auf der letzten CPU; 0 ≤ Wert ≤ 100.
-
spErr spPause(void)
-
Plaziert die derzeitige CPU in den
Abwicklungspool mit einem Bereitstatus.
-
spErr spHald(void)
-
Hebt die Abwicklung für die derzeitige
CPU auf, bis eine externe Unterbrechung an die Domain geliefert
wird. Es ist zu beachten, daß die
prozessorinternen Kommunikationen als externe Unterbrechungen modelliert
sind.
-
spErr spShutDown(void)
-
Entfernt die derzeitige CPU von der
Abwicklung in permanenter Weise und löscht den gesamten zugeordneten
Zustand.
-
Unterbrechungen
-
Die IA-64-Architektur definiert eine
Unterbrechung als ein beliebiges Ereignis, das bewirkt, daß die Steuerung
an spezifische Handhabungsroutinen übergeben wird. Es gibt vier
Klassen von Unterbrechungen:
-
- 1. Abbrüche
Der Prozessor hat eine Maschinenprüfung (internen Fehler) oder
eine Prozessorrücksetzung erfaßt. Abbrüche sind
PAL-basierte Unterbrechungen, sie können zum Domain-OS reflektiert
werden oder nicht.
- 2. Unterbrechungen Der Prozessor hat eine Anfrage empfangen,
um einen Dienst auszuführen.
Die Unterbrechungen können
von einer externen I/0, anderen Prozessoren oder CPU-internen Ereignissen
(z.B. Zeitgeberticken) stammen.
- 3. Fehler Die derzeitige Itanium- oder IA-32-Anweisung, die
eine Maßnahme
anfordert, die nicht ausgeführt werden
kann oder sollte, oder es ist eine Systemintervention ist erforderlich,
bevor die Anweisung ausgeführt
wird. Fehler sind im Hinblick auf den Anweisungsstrom synchron.
- 4. Fallen Die IA-32- oder Itanium-Anweisung, die soeben ausgeführt wurde,
erfordert eine Systemintervention. Fallen sind bezüglich des
Anweisungsstroms synchron.
-
Abbrüche, Fehler und Fallen werden
zusammen als Ausnahmen bezeichnet.
-
spErr spRegisterISR(int vector, void
(*isr)(...), void *param)
-
Registrieren einer Routine, die abgerufen
werden soll, wenn eine externe Unterbrechung an die Domain geliefert
wird.
-
spErr spRegisterHandler(void (*eHandler)(...),
void *param) Registrieren einer Routine, die abgerufen werden soll,
wenn eine Ausnahme in der Domain eintritt.
-
spErr spSPL(int level)
-
Lieferung von allen Unterbrechungen
auf den Vektoren verhindern, die kleiner oder gleich dem spezifizierten
Pegel sind. Wenn level = =SPDISABLEINTR werden alle Unterbrechungen
gesperrte wenn level = = SPENABLEINTR werden alle Unterbrechungen
freigegeben. Wenn der Unterbrechungspegel ge senkt wird, können alle
freigegebenen anstehenden Unterbrechungen geliefert werden, bevor
der Aufruf zurückkehrt.
-
spErr spSignal(spHandle logicalCPU,
void *message)
-
Liefert eine prozessorübergreifende „Unterbrechung" an die spezifizierte
CPU. Der 46-Bit-Nachrichtenwert und die Handhabung für die sendende
CPU werden als der Unterbrechungswert geliefert.
-
Anhang B
-
Bei Ausführungsbeispielen der vorliegenden
Erfindung versehen die Sicherheitsdepotdienste die Betriebssysteme,
anwendungsspezifischen Steuerprogramme und Benutzeranwendungen mit
Funktionen, die eine Verarbeitung und in manchen Fällen eine
Einhaltung von kritischen Daten erfordern, die außerhalb
der Dienste an sich niemals zugreifbar sein dürfen. Die Struktur der SP-Architektur
stellt sicher, daß solche
kritischen Daten sowie die binären
Codebilder der Funktionen, die solche Daten manipulieren, niemals
direkt gelesen oder durch einen beliebigen Code in einem Betriebssystem,
einem anwendungsspezifischen Steuerprogramm oder einer Anwendung
modifiziert werden können.
-
Primäre Beispiele von Sicherheitsdepotdiensten
sind kryptographische Dienste, die eine Verarbeitung mit und eine
Sicherheitsverwahrung von Daten, wie z. B. kryptographischen Schlüsselmaterialien
in Klartext erfordern. Ein Grundsatz von kryptographischen Diensten
ist bei jeden Ausführungsbeispiel
der vorliegenden Erfindung wesentlich. Zusätzliche Beispiele der Sicherheitsdepotdienste
würden
Dienste umfassen, die Betriebssicherheitstaktik- und Statusdaten,
wie z. B. jene, die durch IPSec und SE-Linux benötigt werden, nutzen, kritische
Prüfinformationen
protokollieren oder alternative oder höhergradige Sätze von
kryptographischen Diensten anbieten. Ein Quellencode für alle SPKs
sowie für
den Grundsatz von kryptographischen Diensten wird veröffentlicht
und ist für
eine öffentliche
Prüfung
offen. Den Anbietern von zusätzlichen
Sicherheitsdepotdiensten steht es frei, die Einzelheiten ihrer Hinzufügungen zu
veröffentlichen
oder zu verbergen.
-
Die SP-Architektur ist im Hinblick
auf den Satz von Sicherheitsdepotdiensten, die beinhaltet sein können, offen.
Die Architektur ist absichtlich strukturiert, um jeden Satz der
Sicherheitsdepotdienste zu segmentieren, wobei jeder Satz sowohl
von allen anderen Sicherheitsdepotdiensten als auch von den SP-Sicherheitsplattform-Diensten
isoliert wird. Dies schränkt
den direkten Zugriff auf die kritischen Daten und Codebilder weiter
ein, indem sie nicht nur vor den Betriebssystemen und Anwendungen
sondern auch vor allen anderen SPGS- und SPK-Fächern geschützt werden.
-
Dies steht in starkem Kontrast zu
der herkömmlichen
Betriebssystemarchitektur, bei der eine dedizierte, Spezialhardware
erforderlich ist, um selbst begrenzte Mengen von kritischen Daten
vor einem erfolgreichen Angreifer zu schützen. Selbst bei einer Spezialhardware
kann ein solcher Angreifer frei auf alle anderen Daten im Hauptspeicher
oder Daten, die auf externen Speicherungsvorrichtungen gespeichert
sind, zugreifen oder die Verfügbarkeit
oder den internen Status der Spezialhardware stören. Bei großen Servern,
verhindern die Kosten, die Menge an kritischen Daten und die Notwendigkeit,
Verhaltensengpässe
zu verhindern, daß ausreichend
viele, dedizierte Spezial-Hardwaremodule eine adäquate Lösung sind. Die SP-Architektur
gibt auf der anderen Seite die Nutzung aller Hauptprozessoren und
nach Bedarf die Nutzung von großen
Mengen des Hauptspeichers zum Halten und Verarbeiten von Daten frei,
die unbedingt gesichert werden müssen.
-
Bei einem Ausführungsbeispiel der vorliegenden
Erfindung sind die Fächer
unter Verwendung von IA-64-Schutzschlüsselregistern
implementiert. Nach dem Eintritt in die SP wird der Hardwarezustand
gesetzt, um den Zugriff ausschließlich auf das spezifizierte
Fach zu begrenzen, und die Steuerung wird an den benannten Dienst
weitergegeben. Der gesamte SP-Quellencode, der diese Verknüpfung steuert,
kann ebenfalls veröffentlicht
werden und für
eine öffentliche
Prüfung
offen sein.
-
Das exakte Repertoire des Grundsatzes
von kryptographischen Diensten wird ausgewählt, um eine Unterstützung für die erforderlichen
kryptographischen Standards, wie z. B. SSL/TLS
die
TCPA-Hauptspezifikation (TCPA = Trusted Computing Platform Alliance
= vertrauenswürdige
Rechenplattformallianz), Version 1,0
oder die
Mikrosoft-CAPI-Spezifikation
(CAPI
= Crypto API), zu liefern. Hardwaresicherheitschips werden derzeit
entwickelt und in einer Hardware aufgenommen, um eine Unterstützung für einige
grundlegende kryptographische Funktionen bereitzustellen. Die Implementierung
des SP-Grundsatzes von kryptographischen Diensten ist strukturiert,
um die Verwendung dieser Sicherheitschips, wenn sie vorliegen, zu
ermöglichen.
-
Allgemein gesprochen umfassen die
grundlegenden kryptographischen Dienste eine Einrichtung zur Erzeugung,
zum Export, Import, Ersetzen, Einbehalten und Zerstören von
symmetrischen und asymmetrischen Schlüsseln. Eine Folge von Verschlüsselungs-
und Entschlüsselungsfunktionen
für das
Repertoire an Schlüsseln,
die für
eine interne Verwendung oder unterstützte Standards erforderlich
sind, ist ebenfalls beinhaltet. Desgleichen sind die erforderlichen
Folgen von kryptographischen Hash-Funktionen, Nachrichtenauthentifizierungsfunktionen,
Digitalsignaturfunktionen sowie Zufallszahl- und Eindeutige-ID-Generatoren
vorgesehen.
-
Sichere Maschinenplattform, die mit
Betriebssystemen und anwendungsspezifischen Steuerprogrammen eine
Schnittstelle bildet
-
Zusammenfassung
-
Eine Kombinierte-Hardware-und-Software-Sicherheitsplattformschnittstelle,
mit der Betriebssysteme und anwendungsspezifische Steuerprogramme
in einem Computersystem eine Schnittstelle bilden. Die Kombinierte-Hardware-und-Software-Sicherheitsplattformschnittstelle
verwendet eine Hardwareplattform, die zumindest vier Privilegpegel,
nichtprivilegierte Anweisungen, nicht-privilegierte Register, privilegierte
Anweisungen, privilegierte Register und Firmwareschnittstellen liefert.
Die Kombinierte-Hardware-und-Software-Sicherheitsplattformschnittstelle
verbirgt alle privilegierten Anweisungen, privilegierten Register
und Firmwareschnittstellen vor einem direkten Zugriff durch Betriebssysteme
und anwendungsspezifische Steuerprogramme, wobei den Betriebssystemen
und den anwendungsspezifischen Steuerprogrammen die nicht-privilegierten
Anweisungen und nicht-privilegierten Register bereitgestellt werden,
die durch die Hardwareplattform bereitgestellt werden, sowie ein
Satz von aufrufbaren Softwarediensten. Die aufrufbaren Dienste liefern
einen Satz von Sicherheitsplattformverwaltungsdiensten für die Betriebssteuerung
der Hardwareressourcen, die weder privilegierte Anweisungen, privilegierte
Register noch Firmwareschnittstellen der Hardware preisgibt, noch
privilegierte Anweisungen und privilegierte Register simuliert.
Die aufrufbaren Dienste liefern auch einen Satz von Sicherheitsverwaltungsdiensten,
die intern erzeugte geheime Daten verwenden, wobei jeder segmentierte
Sicherheitsverwaltungsdienst interne geheime Daten verwaltet, ohne
die internen geheimen Daten anderen Rechnerentitäten als dem Sicherheitsverwaltungsdienst
selbst preiszugeben.