-
Diese
Erfindung betrifft die Computersystemarchitektur und insbesondere
die Verarbeitung von neuen Befehlen, die die IBM z/Architektur erweitern und
von anderen Architekturen emuliert werden können.
-
Vor
unserer Erfindung hat IBM durch die Arbeit vieler hochtalentierter
Ingenieure, beginnend in den 60er Jahren mit den als IBM System
360 bekannten Maschinen bis hin zur Gegenwart, eine spezielle Architektur
geschaffen, die aufgrund ihrer Beschaffenheit als Datenverarbeitungssystem
als „Großrechner" bekannt wurde, die
aufgrund ihrer Beschaffenheit als Datenverarbeitungssystem als „Großrechner" bekannt wurde, dessen
Arbeitsweise die Architektur der Maschine durch Beschreibung der Befehle
darlegt, die in der „Großrechner"-Realisierung der Befehle ausgeführt werden
können,
die von Erfindern der IBM erfunden und aufgrund ihres erheblichen
Beitrags zur Verbesserung des Zustands der durch den „Großrechner" dargestellten Datenverarbeitungsmaschine
im Lauf der Jahre in die Funktionsprinzipien (Principles of Operation)
von IBM aufgenommen wurden. Die in Dezember 2000 veröffentlichte
erste Ausgabe von „z/Architecture
Principles of Operation" wurde
als SA22-7832-00 zur Standardquellenangabe.
-
Wir
stellten fest, dass weitere neue Befehle den Stand der Technik unterstützen würden und
in eine Maschine der z/Architektur aufgenommen sowie auch von anderen
Architekturen in einfacheren Maschinen emuliert werden könnten, wie
hierin beschrieben wird.
-
Ein
Befehl, der einen Hash-Vorgang ausführt, der zum Berechnen eines
Message Digest geeignet ist, ist aus
GB
149 475 0 bekannt.
-
Die
vorliegende Erfindung stellt ein Verfahren bereit, wie es in Anspruch
1 beansprucht wird.
-
Die
Merkmale der bevorzugten Ausführungsformen
der Erfindung gehen für
Fachleute aus der folgenden ausführlichen
Beschreibung in Verbindung mit den begleitenden Zeichnungen hervor,
in denen:
-
1 eine
Darstellung des Befehls „Vorläufigen Message
Digest berechnen" (Compute
Intermediate Message Digest – KIMD)
im RRE-Befehlsformat ist;
-
2 eine
Darstellung des Befehls „Letzten Message
Digest berechnen" (Compute
Last Message Digest – KLMD)
im RRE-Befehlsformat ist;
-
3 eine
Tabelle ist, die die Funktionscodes des Befehls KIMD von 1 zeigt;
-
4 eine
Tabelle ist, die die Funktionscodes des Befehls KLMD von 2 zeigt;
-
5 eine
Darstellung der Allgemeinregisterzuordnung für die Befehle KIMD und KLMD
der 1 und 2 ist;
-
6 das
Symbol für
den SHA1-Block-Digest-Algorithmus darstellt;
-
7 das
Format des Parameterblocks für eine
KIMD-Abfrage darstellt;
-
8 das
Format des Parameterblocks für KIMD-SHA-1
darstellt;
-
9 den
KIMD-SHA-1-Vorgang darstellt;
-
10 das
Format für
den Parameterblock für
eine KLMD-Abfrage
darstellt;
-
11 das
Format für
den Parameterblock für
KLMD-SHA-1 darstellt;
-
12 den
KLMD-SHA-1-Vorgang für
den gesamten Block (KLDM-SHA-1
Full Block operation) darstellt;
-
13 den
KLMD-SHA-1-Vorgang für
den leeren Block (KLDM-SHA-1
Empty Block operation) darstellt;
-
14 den
KLMD-SHA-1-Vorgang für
den Fall 1 des Teilblocks (KLDM-SHA-1 Partial-Block Case 1 operation)
darstellt;
-
15 den
KLMD-SHA-1-Vorgang für
den Fall 2 des Teilblocks (KLDM-SHA-1 Partial-Block Case 2 operation)
darstellt;
-
16 eine
Tabelle ist, die die Ausführungspriorität der Befehle
KIMD und KLMD darstellt;
-
17 unseren
Verschlüsselungscoprozessor
darstellt; und
-
18 die
verallgemeinerte bevorzugte Ausführungsform
eines Computerspeichers, der Befehle gemäß der bevorzugten Ausführungsform
und Daten enthält,
sowie den Mechanismus zum Abrufen, Decodieren und Ausführen dieser
Befehle zeigt, entweder in einem Computersystem, das diese architekturdefinierten
Befehle verwendet, oder wie sie in der Emulation unserer architekturdefinierten
Befehle verwendet werden.
-
Die
hierin erläuterten
Message-Digest-Befehle dienen der Berechnung einer verdichteten
Darstellung einer Nachricht oder einer Datendatei. Als Erstes werden
die Befehle „Vorläufigen Message
Digest berechnen" und „Letzten
Message Digest berechnen" erläutert, gefolgt
von einer Erläuterung
des bevorzugten Computersystems zum Ausführen dieser Befehle. Alternativ
wird ein zweites bevorzugtes Computersystem erläutert, das ein anderes Computersystem
zum Ausführen
dieser Befehle emuliert.
-
VORLÄUFIGEN MESSAGE DIGEST BERECHNEN (KIMD)
-
1 ist
eine Darstellung des Befehls „Vorläufigen Message
Digest berechnen" (KIMD)
in RRE-Befehlsformat.
-
LETZTEN MESSAGE DIGEST
BERECHNEN (KLMD)
-
2 ist
eine Darstellung des Befehls „Letzten
Message Digest berechnen" (KLMD)
in RRE-Befehlsformat.
-
Eine
durch den Funktionscode im Allgemeinregister 0 angegebene Funktion
wird ausgeführt.
-
Die
Bits 16 bis 23 des Befehls und das Feld R1 werden ignoriert.
-
Die
Bitpositionen 57 bis 63 des Allgemeinregisters 0 enthalten den Funktionscode.
Die 3 und 4 zeigen die zugeordneten Funktionscodes für VORLÄUFIGEN MESSAGE
DIGEST BERECHNEN bzw. LETZTEN MESSAGE DIGEST BERECHNEN. Alle anderen
Funktionscodes werden nicht zugeordnet. Das Bit 56 des Allgemeinregisters
0 muss null sein; andernfalls wird ein Spezifikationsfehler (specification
exception) erkannt. Alle anderen Bits des Allgemeinregisters 0 werden
ignoriert. Das Allgemeinregister 1 enthält die logische Adresse des höchstwertigen
Byte des Parameterblocks im Speicher. Im 24-Bit-Adressiermodus bildet
der Inhalt der Bitpositionen 40 bis 63 des Allgemeinregisters 1
die Adresse, und der Inhalt der Bitpositionen 0 bis 39 wird ignoriert.
Im 31-Bit-Adressiermodus bildet der Inhalt der Bitpositionen 33
bis 63 des Allgemeinregisters 1 die Adresse, und der Inhalt der
Bitpositionen 0 bis 32 wird ignoriert. Im 64-Bit-Adressiermodus
bildet der Inhalt der Bitpositionen 0 bis 63 des Allgemeinregisters
1 die Adresse.
-
Die
Funktionscodes für
VORLÄUFIGEN MESSAGE
DIGEST BERECHNEN werden in 3 gezeigt.
-
Die
Funktionscodes für
LETZTEN MESSAGE DIGEST BERECHNEN werden in 4 gezeigt.
-
Alle
anderen Funktionscodes werden nicht zugeordnet.
-
Die
Abfragefunktion stellt das Mittel zum Angeben der Verfügbarkeit
aller anderen Funktionen bereit. Der Inhalt der Allgemeinregister
R2 und R2 + 1 wird für
die Abfragefunktion ignoriert.
-
Für alle anderen
Funktionen wird der zweite Operand verarbeitet, wie durch den Funktionscode angegeben
wird, wobei ein anfänglicher
Verkettungswert im Parameterblock verwendet wird und das Ergebnis
den Verkettungswert ersetzt. Bei LETZTEN MESSAGE DIGEST BERECHNEN
verwendet der Vorgang außerdem
eine Nachrichtenbitlänge
im Parameterblock. Der Vorgang wird fortgesetzt, bis das Ende der
Position des zweiten Operanden erreicht wird oder eine von der CPU
festgelegte Anzahl von Bytes verarbeitet wurde, je nachdem welches
von beiden Ereignissen zuerst eintritt. Das Ergebnis wird im Bedingungscode
(condition code) angegeben.
-
Das
Feld R2 bezeichnet ein gerades/ungerades Paar von Allgemeinregistern
und muss ein Register mit einer geraden Nummerierung bezeichnen; andernfalls
wird ein Spezifikationsfehler erkannt.
-
Die
Position des höchstwertigen
Byte des zweiten Operanden wird durch den Inhalt des Allgemeinregisters
R2 angegeben. Die Anzahl von Bytes an der Position des zweiten Operanden
wird im Allgemeinregister R2 + 1 angegeben.
-
Als
Teil des Vorgangs wird die Adresse im Allgemeinregister R2 um die
Anzahl der vom zweiten Operanden verarbeiteten Bytes erhöht, und
die Länge
im Allgemeinregister R2 + 1 wird um die gleiche Anzahl vermindert.
Die Bildung und Aktualisierung der Adresse und der Länge sind
abhängig
vom Adressiermodus.
-
Im
24-Bit-Adressiermodus bildet der Inhalt der Bitpositionen 40 bis
63 des Allgemeinregisters R2 die Adresse des zweiten Operanden,
und der Inhalt der Bitpositionen 0 bis 39 wird ignoriert; die Bits
40 bis 63 der aktualisierten Adresse ersetzen die entsprechenden
Bits im Allgemeinregister R2, Übertragungsausgänge (carries
out) der Bitposition 40 der aktualisierten Adresse werden ignoriert,
und der Inhalt der Bitpositionen 32 bis 39 des Allgemeinregisters
R2 wird auf Nullen gesetzt. Im 31-Bit-Adressiermodus bildet der
Inhalt der Bitpositionen 33 bis 63 des Allgemeinregisters R_ die
Adresse des zweiten Operanden, und der Inhalt der Bitpositionen
0 bis 32 wird ignoriert; die Bits 33 bis 63 der aktualisierten Adresse
ersetzen die entsprechenden Bits im Allgemeinregister R2, Übertragungsausgänge der
Bitposition 33 der aktualisierten Adresse werden ignoriert, und
der Inhalt der Bitposition 32 des Allgemeinregisters R2 wird auf
null gesetzt. Im 64-Bit-Adressiermodus
bildet der Inhalt der Bitpositionen 0 bis 63 des Allgemeinregisters
R2 die Adresse des zweiten Operanden; die Bits 0 bis 63 der aktualisierten
Adresse ersetzen den Inhalt des Allgemeinregisters R_, und Übertragungsausgänge der
Bitposition 0 werden ignoriert.
-
Sowohl
im 24-Bit- als auch im 31-Bit-Adressiermodus bildet der Inhalt der
Bitpositionen 32 bis 63 des Allgemeinregisters R2 + 1 eine vorzeichenlose binäre ganze
Zahl mit 32 Bit (32-bit unsigned binary integer), die die Anzahl
von Bytes im zweiten Operanden angibt; und der aktualisierte Wert
ersetzt den Inhalt der Bitpositionen 32 bis 63 des Allgemeinregisters
R2 + 1. Im 64-Bit-Adressiermodus bildet der Inhalt der Bitpositionen
0 bis 63 des Allgemeinregisters R2 + 1 eine vorzeichenlose binäre ganze
Zahl mit 64 Bit, die die Anzahl von Bytes im zweiten Operanden angibt;
und der aktualisierte Wert ersetzt den Inhalt des Allgemeinregisters
R2 + 1.
-
Im
24-Bit- oder im 31-Bit-Adressiermodus bleibt der Inhalt der Bitpositionen
0 bis 31 der Allgemeinregister R2 und R2 + 1 stets unverändert.
-
5 zeigt
den Inhalt der gerade beschriebenen Allgemeinregister. Im Zugriffsregistermodus (access-register
mode) geben die Zugriffsregister 1 und R2 die Adressbereiche an,
die den Parameterblock bzw. den zweiten Operanden enthalten.
-
Das
Ergebnis wird erhalten, als ob die Verarbeitung auf der linken Seite
des zweiten Operanden beginnt und Block für Block nach rechts weitergeht. Der
Vorgang ist beendet, wenn alle Quellenbytes im zweiten Operanden
verarbeitet wurden (als normale Beendigung bezeichnet) oder wenn
eine von der CPU festgelegte Anzahl von Blöcken, die geringer als die
Länge des
zweiten Operanden ist, verarbeitet wurden (als teilweise Beendigung
bezeichnet). Die von der CPU festgelegte Anzahl von Blöcken hängt vom
Modell ab, und es kann sich bei jeder Ausführung des Befehls um eine andere
Anzahl handeln. Die von der CPU festgelegte Anzahl von Blöcken ist normalerweise
verschieden von null. In bestimmten unüblichen Situationen kann diese
Anzahl null sein, und der Bedingungscode 3 kann ohne Fortschritt
gesetzt werden. Die CPU schützt
jedoch vor einem endlosen Wiederholung dieses Falles ohne Fortschritt.
-
Wenn
das Feld für
den Verkettungswert einen Teil des zweiten Operanden überlagert,
ist das Ergebnis in diesem Feld nicht vorhersehbar.
-
Bei
VORLÄUFIGEN
MESSAGE DIGEST BERECHNEN findet eine normale Beendigung statt, wenn
die im Allgemeinregister R2 + 1 angegebene Anzahl von Bytes im zweiten
Operanden verarbeitet wurde. Bei LETZTEN MESSAGE DIGEST BERECHNEN
wird der Auffüllvorgang
ausgeführt,
nachdem alle Bytes im zweiten Operanden entsprechend der Angabe
im Allgemeinregister R2 + 1 verarbeitet wurden, und anschließend findet
eine normale Beendigung statt.
-
Wenn
der Vorgang aufgrund einer normalen Beendigung endet, wird der Bedingungscode
0 gesetzt, und der sich ergebende Wert in R2 + 1 ist null. Wenn
der Vorgang aufgrund einer teilweisen Beendigung endet, wird der
Bedingungscode 3 gesetzt, und der sich ergebende Wert in R2 + 1
ist verschieden von nu1ll.
-
Wenn
die Länge
des zweiten Operanden anfänglich
null ist, wird auf den zweiten Operanden nicht zugegriffen, die
Allgemeinregister R2 und R2 + 1 werden nicht geändert, und der Bedingungscode
0 wird gesetzt. Bei VORLÄUFIGEN
MESSAGE-DIGEST BERECHNEN wird nicht auf den Parameterblock zugegriffen.
Bei LETZTEN MESSAGE DIGEST BERECHNEN wird jedoch der Auffüllvorgang
für den Fall
eines leeren Blocks (L = 0) ausgeführt und das Ergebnis im Parameterblock
gespeichert.
-
Im
Falle einer Überwachung
durch andere CPUs und Kanalprogramme können Bezugnahmen auf den Parameterblock
und Speicheroperanden Bezugnahmen mit Mehrfachzugriff sein, Zugriffe
auf diese Speicherpositionen laufen bezüglich der Blöcke nicht
unbedingt gleichzeitig ab, und die Abfolge dieser Zugriffe oder
Bezugnahmen ist nicht festgelegt.
-
Zugriffsfehler
können
für einen
größeren Teil des
zweiten Operanden berichtet werden, als in einer einzigen Ausführung des
Befehls verarbeitet wird; Zugriffsfehler werden jedoch weder für Positionen
erkannt, die über
die Länge
des zweiten Operanden hinausgehen, noch für Positionen, die um mehr als
4 Kilobyte über
die gerade verarbeitete Position hinausgehen.
-
In Funktionsbeschreibungen
verwendete Symbole
-
Die
Symbole von 6 werden in der nachfolgenden
Beschreibung der Funktionen VORLÄUFIGEN
MESSAGE DIGEST BERECHNEN und LETZTEN MESSAGE DIGEST BERECHNEN verwendet. Eine
weitere Beschreibung des sicheren Hash-Algorithmus ist in „Secure
Hash Standard",
Federal Information Processing Standards, Veröffentlichung 180-1, National
Institute of Standards and Technology, Washington DC, 17. April
1995, zu finden.
-
KIMD-Abfrage (KIMD-Funktionscode
0)
-
Die
Positionen der vom Befehl verwendeten Operanden und Adressen werden
in 5 gezeigt.
-
Der
Parameterblock für
die KIMD-Abfrage hat das in 7 gezeigte
Format.
-
Ein
128-Bit-Statuswort wird im Parameterblock gespeichert. Die Bits
0 bis 127 dieses Feldes entsprechen jeweils den Funktionscodes 0
bis 127 des Befehls VORLÄUFIGEN
MESSAGE DIGEST BERECHNEN. Wenn ein Bit eins ist, wird die entsprechende
Funktion installiert, andernfalls wird die Funktion nicht installiert.
-
Der
Bedingungscode 0 wird gesetzt, wenn die Ausführung der KIMD-Abfragefunktion
beendet ist; der Bedingungscode 3 kann auf diese Funktion nicht
angewandt werden.
-
KIMD-SHA-1 (KIMD-Funktionscode
1)
-
Die
Positionen der vom Befehl verwendeten Operanden und Adressen werden
in 8 gezeigt.
-
Der
für die
KIMD-SHA-1-Funktion verwendete Parameterblock hat das in 8 gezeigte
Format.
-
Unter
Verwendung des SHA-1-Block-Digest-Algorithmus (SHA-1 block digest
algorithm) mit dem 20-Byte-Verkettungswert im Parameterblock wird
ein vorläufiger
20-Byte-Message-Digest für
die 64-Byte-Nachrichtenblöcke
im Operand 2 erzeugt. Der erzeugte vorläufige Message Digest, auch
als Ausgabeverkettungswert (output chaining value – OCV) bezeichnet,
wird im Feld „Verkettungswert" des Parameterblocks
gespeichert. Der KIMD-SHA-1-Vorgang wird in 9 gezeigt.
-
KLMD-Abfrage (KLMD-Funktionscode
0)
-
Die
Positionen der vom Befehl verwendeten Operanden und Adressen entsprechen
den in 5 gezeigten.
-
Der
für die
Funktion KLMD-Abfrage verwendete Parameterblock hat das in 10 gezeigte
Format.
-
Ein
128-Bit-Statuswort wird im Parameterblock gespeichert. Die Bits
0 bis 127 dieses Feldes entsprechen jeweils den Funktionscodes 0
bis 127 des Befehls LETZTEN MESSAGE DIGEST BERECHNEN. Wenn ein Bit
eins ist, wird die entsprechende Funktion installiert; andernfalls
wird die Funktion nicht installiert.
-
Der
Bedingungscode 0 wird gesetzt, wenn die Ausführung der Funktion KLMD-Abfrage
endet; der Bedingungscode 3 kann auf diese Funktion nicht angewandt
werden.
-
KLMD-SHA-1 (KLMD-Funktionscode
1)
-
Die
Positionen der vom Befehl verwendeten Operanden und Adressen entsprechen
den in 5 gezeigten.
-
Der
für die
Funktion KLMD-SHA-1 verwendete Parameterblock hat das in 11 gezeigte
Format.
-
Der
Message Digest für
die Nachricht (M) im Operand 2 wird unter Verwendung des SHA-1-Algorithmus
mit dem Verkettungswert und den Daten zur Nachrichtenbitlänge im Parameterblock
erzeugt.
-
Falls
die Länge
der Nachricht im Operand 2 gleich oder größer als 64 Byte ist, wird für jeden 64-Byte-Nachrichtenblock
unter Verwendung des SHA-1-Block-Digest-Algorithmus mit dem 20-Byte-Verkettungswert im
Parameterblock ein vorläufiger
Message Digest erzeugt, und der auch als Ausgabeverkettungswert
(OCV) bezeichnete erzeugte vorläufige
Message Digest wird im Feld „Verkettungswert" des Parameterblocks
gespeichert. Dieser Vorgang wird in 12 gezeigt
und wiederholt, bis die verbleibende Nachricht kleiner als 64 Byte
ist. Falls die Länge
der Nachricht oder der verbleibenden Nachricht null Byte ist, wird
der Vorgang in 13 ausgeführt.
-
Falls
die Länge
der Nachricht oder der verbleibenden Nachricht zwischen einem Byte
und einschließlich
55 Byte beträgt,
wird der Vorgang in 14 ausgeführt; falls die Länge der
Nachricht oder der verbleibenden Nachricht zwischen 56 Byte und einschließlich 63
Byte beträgt,
wird der Vorgang in 15 ausgeführt. Der auch als Ausgabeverkettungswert
(OCV) bezeichnete Message Digest wird im Feld „Verkettungswert" des Parameterblocks
gespeichert.
-
Zusätzliche
in KLMD-Funktionen verwendete Symbole
-
Die
folgenden zusätzlichen
Symbole werden in der Beschreibung der Funktionen LETZTEN MESSAGE
DIGEST BERECHNEN verwendet.
-
Symbolerläuterung
für Figuren
der KLMD-Funktionen
-
- L Bytelänge
des Operanden 2 im Speicher.
- p <n> n Füllbytes;
das am weitesten links stehende Byte hat den hexadezimalen Wert
80; alle anderen Bytes haben den hexadezimalen Wert 00
- z <56> 56 Füllbytes
von null.
- Mbl ein 8-Byte-Wert, der die Bitlänge der Gesamtnachricht angibt.
- q <64> ein Füllblock,
bestehend aus 56 Null-Bytes, gefolgt von einem 8-Byte-Mbl.
-
Spezielle Bedingungen
für KIMD
und KLMD
-
Ein
Spezifikationsfehler wird erkannt und keine andere Maßnahme ergriffen,
falls eine der folgenden Bedingungen auftritt:
- 1.
Das Bit 56 des Allgemeinregisters 0 ist nicht null.
- 2. Die Bits 57 bis 63 des Allgemeinregisters 0 geben einen nichtzugewiesenen
oder nichtinstallierten Funktionscode an.
- 3. Das Feld R2 bezeichnet ein Register mit ungerader Nummerierung
oder das Allgemeinregister 0.
- 4. Bei VORLÄUFIGEN
MESSAGE DIGEST BERECHNEN ist die Länge des zweiten Operanden kein
Vielfaches der Datenblockgröße der bezeichneten
Funktion (siehe 3 zur Ermittlung der Datenblockgrößen für Funktionen
VORLÄUFIGEN
MESSAGE DIGEST BERECHNEN). Diese Spezifikationsfehlerbedingung kann
weder auf die Abfragefunktion noch auf LETZTEN MESSAGE DIGEST BERECHNEN
angewandt werden.
-
Resultierender Bedingungscode:
-
- 0 Normale Beendigung
- 1 –
- 2 –
- 3 Teilweise Beendigung
-
Programmfehler:
-
- • Zugriff
(Abrufen, Operand 2 und Nachrichtenbitlänge; Abrufen und Speichern,
Verkettungswert)
- • Vorgang
(falls die Nachrichtensicherheitsunterstützung (message security assist)
nicht installiert ist)
- • Spezifikation
-
Programmierhinweise:
-
- 1. Das Bit 56 des Allgemeinregisters 0 ist
für eine zukünftige Erweiterung
reserviert und muss auf null gesetzt werden.
- 2. Wenn der Bedingungscode 3 gesetzt ist, werden die Adresse
und die Länge
des zweiten Operanden in den Allgemeinregistern R2 bzw. R2 + 1 und
der Verkettungswert im Parameterblock normalerweise aktualisiert,
so dass das Programm einfach zurück
zum Befehl verzweigen kann, um den Vorgang fortzusetzen.
Bei
ungewöhnlichen
Situationen schützt
die CPU gegen ein endloses Wiederauftreten im Falle eines fehlenden
Fortschritts. Folglich kann das Programm bei jedem Setzen des Bedingungscodes
3 sicher zum Befehl zurück
verzweigen, ohne einer Endlosschleife ausgesetzt zu sein.
- 3. Falls die Länge
des zweiten Operanden anfänglich
verschieden von null ist und der Bedingungscode 0 gesetzt wird,
werden die Register auf dieselbe weise aktualisiert wie beim Bedingungscode
3; der Verkettungswert ist in diesem Fall so, dass zusätzliche
Operanden verarbeitet werden können,
als wären
sie Teil derselben Kette.
- 4. Die Befehle VORLÄUFIGEN
MESSAGE DIGEST BERECHNEN und LETZTEN MESSAGE DIGEST BERECHNEN sind
so gestaltet, dass sie von einer Programmierschnittstelle (application programming
interface – API)
eines Sicherheitsdienstes (security service) verwendet werden können. Diese
APIs versehen das Programm mit einem Mittel zum Berechnen der Zusammenfassung
von Nachrichten von nahezu unbegrenzter Größe, darunter jene, die zu groß sind,
um auf einmal in den Speicher zu passen. Dies wird ausgeführt, indem
es dem Programm ermöglicht
wird, die Nachricht in Teilen an die API weiterzuleiten. Die folgenden
Programmierhinweise werden in Bezug auf diese APIs beschrieben.
- 5. Vor der Verarbeitung des ersten Teils einer Nachricht muss
das Programm die Anfangswerte für
das Feld „Verkettungswert" setzen. Bei SHA-1 werden
die Anfangswerte folgendermaßen
aufgelistet:
H0 = x'6745
2301'
H1 =
x'EFCD AB89'
H2 = x'98BA DCFE'
H3 = x'1032 5476'
H4 = x'C3D2 E1F0'
- 6. Wenn andere Nachrichtenteile als der letzte verarbeitet werden,
muss das Programm Nachrichtenteile in Vielfachen von 512 Bits (64
Bytes) verarbeiten und den Befehl VORLÄUFIGEN MESSAGE DIGEST BERECHNEN
verwenden.
- 7. Wenn der letzte Nachrichtenteil verarbeitet wird, muss das
Programm die Länge
der ursprünglichen
Nachricht in Bits berechnen und diesen 64-Bit-Wert in das Feld „Nachrichtenbitlänge" des Parameterblocks
platzieren und den Befehl LETZTEN MESSAGE DIGEST BERECHNEN verwenden.
- 8. Der Befehl LETZTEN MESSAGE DIGEST BERECHNEN macht es nicht
erforderlich, dass der zweite Operand ein Vielfaches der Blockgröße ist. Er
verarbeitet zuerst vollständige
Blöcke
und kann vor der Verarbeitung aller Blöcke den Bedingungscode 3 setzen.
Nach der Verarbeitung aller vollständigen Blöcke führt er sodann den Auffüllvorgang
aus, der den verbleibenden Teil des zweiten Operanden beinhaltet.
Dies kann eine oder zwei Wiederholungen des SHA-1-Block Digest-Algorithmus erforderlich
machen.
- 9. Der Befehl LETZTEN MESSAGE DIGEST BERECHNEN stellt die SHA-1-Auffüllung für Nachrichten
bereit, deren Länge
ein Vielfaches von acht Bit ist. Falls SHA-1 auf eine Bitfolge angewandt
werden muss, die kein Vielfaches von acht Bit ist, muss das Programm
die Auffüllung
ausführen
und den Befehl VORLÄUFIGEN
MESSAGE DIGEST BERECHNEN verwenden.
-
VERSCHLÜSSELUNGSCOPROZESSOR
(CRYPTO COPROCESSOR):
-
Die
bevorzugte Ausführungsform
stellt einen Verschlüsselungscoprozessor
bereit, der mit den hierin beschriebenen Befehlen sowie zur Ausführung chiffrierter
Nachrichten und zur Unterstützung
in einer Vielfalt von Verkettungsnachrichten-Tasks verwendet werden
kann, die mit den entsprechenden Befehlen für Verkettungen und Verschlüsselungen verwendet
werden können.
-
17 stellt
unseren Verschlüsselungscoprozessor
dar, der direkt mit einem Datenpfad verbunden ist, der allen internen
Ausführungseinheiten im
Universalmikroprozessor mit mehreren Befehlsausführungsketten (execution pipelines)
gemeinsam ist. Der interne Bus (1) des Mikroprozessors
ist allen anderen mit der Verschlüsselungssteuereinheit (2) verbundenen Ausführungseinheiten
gemeinsam, und die Steuereinheit überwacht den Bus auf Prozessorbefehle,
die sie ausführen
muss.
-
Die
Verschlüsselungssteuereinheit
stellt einen Verschlüsselungscoprozessor
bereit, der direkt mit einem Datenpfad verbunden ist, der allen
internen Ausführungseinheiten
der Zentraleinheit in einem Universalmikroprozessor gemeinsamen
ist, der die verfügbare
Hardware (E0 ... En oder
eine Kombination davon in der bevorzugten Ausführungsform mit mehreren Befehlsausführungsketten)
für die
Zentraleinheit bereitstellt. Wenn ein Verschlüsselungsbefehl im Befehlsregister
(3) gefunden wird, ruft die Steuereinheit (2)
den entsprechenden Algorithmus aus der verfügbaren Hardware auf. Die Operandendaten
werden über
denselben internen Mikroprozessorbus über ein Eingabe-FIFO-Register
(4) bereitgestellt. Wenn ein Vorgang ausgeführt worden
ist, wird eine Markierung in einem Statusregister (6) gesetzt, und
die Ergebnisse können
aus dem Ausgabe-FIFO-Register (5) gelesen werden.
-
Die
dargestellte bevorzugte Ausführungsform
der vorliegenden Erfindung ist erweiterbar gestaltet, so dass sie
so viele Hardwareeinrichtungen aufnehmen kann, wie von einer bestimmten
Ausführung
in Abhängigkeit
von der gewünschten
Leistungsfähigkeit
des Systems benötigt
werden. Die Datenpfade zu den Eingangs- und Ausgangsregistern (7)
sind allen Einrichtungen gemeinsam.
-
Die
Verschlüsselungsfunktionen
der bevorzugten Ausführungsform
der Erfindung werden in der Ausführungseinheit-Hardware
in der CPU realisiert, und diese Realisierung ermöglicht eine
kürzere
Latenzzeit zum Aufrufen und Ausführen
von Verschlüsselungsvorgängen und
erhöht
die Leistungsfähigkeit.
-
Diese
verminderte Latenzzeit verbessert in hohem Maße die Funktionseigenschaften
von Universalprozessoren in Systemen, die häufig viele Verschlüsselungsvorgänge ausführen, insbesondere wenn
es sich nur um geringe Datenmengen handelt. Dies ermöglicht eine
Ausführung,
die die an sicheren Online-Transaktionen
beteiligten Prozesse deutlich beschleunigen kann. Die meisten allgemeinen
Verfahren zur Sicherung von Online-Transaktionen beinhalten einen
Satz von drei Algorithmen. Der erste Algorithmus wird nur einmal
in einer Sitzung verwendet und kann in Form von Hardware oder Software
realisiert werden, während
die anderen Vorgänge
mit jeder Transaktion der Sitzung aufgerufen werden, und die Latenzzeit
zum Aufrufen von externer Hardware sowie der Zeitaufwand zum Ausführen des
Software-Algorithmus entfallen bei dieser Erfindung.
-
In
18 wurde
konzeptionell die Realisierung dessen gezeigt, was in einer bevorzugten
Ausführungsform
in einem Großrechner
mit dem oben beschriebenen Mikroprozessor realisiert wurde, der, wie
wir innerhalb der IBM experimentell bewiesen haben, in einer handelsüblichen
Ausführung
des computerarchitekturdefinierten Befehlsformates der Einrichtung
mit langer Verschiebung (long displacement facility) wirkungsvoll
verwendet werden kann, wobei die Befehle von Programmierern verwendet
werden, heutzutage normalerweise von „C"-Programmierern. Diese im Speichermedium
gespeicherten Befehlsformate können
spezifisch (natively) in einem Server der IBM z/Architektur oder
alternativ in Maschinen mit anderen Architekturen ausgeführt werden.
Sie können
in den vorhandenen und in künftigen
IBM Großrechner-Servern
und in anderen Maschinen von IBM (z.B. Server der P-Serie und der
X-Serie) emuliert werden. Sie können
in Maschinen mit dem Betriebsystem Linux in einer großen Vielfalt
von Maschinen unter Verwendung von Hardware von IBM, Intel, AMD,
Sun Microsystems u.a. ausgeführt
werden. Neben der Ausführung
in dieser Hardware in einer z/Architektur kann Linux ebenso verwendet
werden wie Maschinen, die eine Emulation von Hercules, UMX, FXI
oder Platform Solutions verwenden, wobei die Ausführung im
Allgemeinen in einem Emulationsmodus erfolgt. Im Emulationsmodus
wird der spezifische emulierte Befehl decodiert und eine Teilroutine
zum Ausführen
des einzelnen Befehls erstellt, wie in einer „C"-Teilroutine oder einem Treiber oder
in einem anderen Verfahren zur Bereitstellung eines Treibers für die spezifische
Hardware, wie Fachleute nach dem Lesen der Beschreibung der bevorzugten
Ausführungsform
verstehen werden. Verschiedene Software- und Hardwareemulationspatente,
darunter – jedoch
nicht ausschließlich –
US 5 551 013 ,
US 6 009 261 ,
US 5 574 873 ,
US 6 308 255 ,
US 6 463 582 und
US 5 790 825 , veranschaulichen die
Vielfalt bekannter Möglichkeiten
zum Ausführen
einer Emulation eines Befehlsformates, dessen Architektur für eine andere
Maschine, für
eine für
Fachleute erhältliche
Zielmaschine sowie jene von den oben erwähnten Herstellern verwendeten
handelsüblichen
Softwareverfahren definiert wurde.
-
In
der bevorzugten Computerarchitektur bilden die bestehenden Befehlsformate
mit langer Verschiebung für
einen nichtsuperskalaren Befehl die Speicheradresse des Operanden
durch Addition des Basisregisters und der vorzeichenlosen 12-Bit-Verschiebung
(12 bit unsigned displacement) oder des Basisregisters, des Indexregisters
und der vorzeichenlosen 12-Bit-Verschiebung,
und die neuen Befehlsformate mit langer Verschiebung bilden die Speicheradresse
des Operanden durch das Addieren des Basisregisters und der vorzeichenbehafteten 20-Bit-Verschiebung
oder des Basisregisters, des Indexregisters und der vorzeichenbehafteten 20-Bit-Verschiebung.
-
Wie
durch 18 gezeigt wird, werden diese Befehle
in Hardware von einem Prozessor oder durch die Emulation des Befehlssatzes
durch Software ausgeführt,
die in einem Computer mit einem anderen spezifischen Befehlssatz
ausgeführt
wird.
-
In 18 wird
bei 501 ein Computerspeicher gezeigt, der Befehle und Daten
enthält.
Die in dieser Computerarchitektur beschriebenen Befehle mit langer
Verschiebung würden
anfangs in diesem Computer gespeichert. Bei 502 wird ein
Mechanismus zum Abrufen von Befehlen aus einem Computerspeicher gezeigt,
dies kann außerdem
die lokale Zwischenspeicherung dieser abgerufenen Befehle beinhalten. Anschließend werden
die unbearbeiteten Befehle an einen Befehlsdecodierer 503 übertragen,
wo festgestellt wird, welcher Typ von Befehl abgerufen wurde. Bei 504 wird
ein Mechanismus zum Ausführen
von Befehlen gezeigt. Dazu kann das Laden von Daten aus dem Speicher 501 in
ein Register, das Rückspeichern
von Daten aus einem Register in den Speicher oder das Ausführen eines
bestimmten Typs von arithmetischem oder logischem Vorgang gehören. Der genaue
Typ von auszuführendem
Vorgang wurde zuvor vom Befehlsdecodierer festgelegt. Die in dieser Computerarchitektur
beschriebenen Befehle mit langer Verschiebung würden hier ausgeführt werden. Falls
die Befehle mit langer Verschiebung in einem Computersystem spezifisch ausgeführt werden,
ist diese Darstellung gemäß der obigen
Beschreibung vollständig.
Falls jedoch eine Befehlssatzarchitektur, die Befehle mit langer
Verschiebung enthält,
in einem anderen Computer emuliert wird, würde der obige Prozess in Form
von Software in einem Hostcomputer 505 realisiert werden.
In diesem Fall würde
der oben dargelegte Mechanismus normalerweise als eine oder mehrere
Software-Teilroutinen
innerhalb der Emulationssoftware realisiert werden. In beiden Fällen wird
ein Befehl abgerufen, decodiert und ausgeführt.
-
Insbesondere
können
diese architekturdefinierten Befehle in einer Computerarchitektur
mit vorhandenen Befehlsformaten mit einer vorzeichenlosen 12-Bit-Verschiebung,
die zum Bilden der Operandenspeicheradresse verwendet wird, sowie
in einer Architektur mit zusätzlichen
Befehlsformaten verwendet werden, die zusätzliche Verschiebungsbits bereitstellen,
vorzugsweise 20 Bits, die eine erweiterte vorzeichenbehaftete Verschiebung
(extended signed displacement) umfassen, die zum Bilden der Operandenspeicheradresse
verwendet wird. Diese computerarchitekturdefinierten Befehle umfassen
in einem Computerspeichermedium gespeicherte Computersoftware zum
Erzeugen des Codes, der in dem die Computersoftware verwendenden
Prozessor ausgeführt
wird, und den Befehlscode zur Verwendung durch einen Compiler oder
Emulator/Interpreter, der in einem Computerspeichermedium 501 gespeichert
ist, und wobei der erste Teil des Befehlscodes einen Operationscode
umfasst, der den auszuführenden
Vorgang angibt, und der zweite Teil die beteiligten Operanden bezeichnet.
Die Befehle mit langer Verschiebung ermöglichen die direkte Adressierung
zusätzlicher
Adressen unter Verwendung der Einrichtung für Befehle mit langer Verschiebung.
-
Wie
in 18 gezeigt wird, werden diese Befehle in Hardware
von einem Prozessor oder durch die Emulation des Befehlssatzes durch
Software ausgeführt,
die in einem Computer mit einem anderen spezifischen Befehlssatz
ausgeführt
wird.
-
Gemäß der bevorzugten
Computerarchitektur wird das Verschiebungsfeld als zweiteilig definiert, wobei
der aus 12 Bits bestehende niedrigstwertige Teil als DL bezeichnet
wird, DL1 für
den Operanden 1 oder DL2 für
den Operanden 2, und der aus 8 Bits bestehende höchstwertige Teil als DH bezeichnet wird,
DH1 für
den Operanden 1 oder DH2 für
den Operanden 2.
-
Außerdem weist
die bevorzugte Computerarchitektur das folgende Befehlsformat auf:
der Operationscode befindet sich in den Bitpositionen 0 bis 7 und
40 bis 47, ein als R1 bezeichnetes Zielregister in den Bitpositionen
8 bis 11, ein als X2 bezeichnetes Indexregister in den Bitpositionen
12 bis 15, ein als B2 bezeichnetes Basisregister in den Bitpositionen 16
bis 19, eine aus zwei Teilen bestehende Verschiebung, wobei der
als DL2 bezeichnete erste Teil sich in den Bitpositionen 20 bis
31 und der als DH2 bezeichnete zweite Teil sich in den Bitpositionen
32 bis 39 befindet.
-
Diese
Computerarchitektur hat das folgende Befehlsformat: der Operationscode
befindet sich in den Bitpositionen 0 bis 7 und 40 bis 47, ein als
R1 bezeichnetes Zielregister in den Bitpositionen 8 bis 11, ein
als R3 bezeichnetes Quellenregister in den Bitpositionen 12 bis
15, ein als B2 bezeichnetes Basisregister in den Bitpositionen 16
bis 19, eine aus zwei Teilen bestehende Verschiebung, wobei der
als DL2 bezeichnete erste Teil sich in den Bitpositionen 20 bis 31 und
der als DH2 bezeichnete zweite Teil sich in den Bitpositionen 32
bis 39 befindet.
-
Außerdem weisen
die Befehle der vorliegenden Computerarchitektur mit einer Einrichtung
für lange
Verschiebung das folgende Befehlsformat auf: der Operationscode
befindet sich in den Bitpositionen 0 bis 7 und 40 bis 47, ein als
R1 bezeichnetes Zielregister in den Bitpositionen 8 bis 11, ein
als M3 bezeichneter Maskenwert (mask value) in den Bitpositionen
12 bis 15, ein als B2 bezeichnetes Basisregister in den Bitpositionen
16 bis 19, eine aus zwei Teilen bestehende Verschiebung, wobei der
als DL2 bezeichnete erste Teil sich in den Bitpositionen 20 bis 31
und der als DH2 bezeichnete zweite Teil sich in den Bitpositionen
32 bis 39 befindet.
-
Wie
dargestellt wird, hat unsere bevorzugte Computerarchitektur mit
ihrer Einrichtung für
lange Verschiebung das folgende Befehlsformat: der Operationscode
befindet sich in den Bitpositionen 0 bis 7 und 40 bis 47, ein als
22 bezeichneter Direktwert (immediate value) in den Bitpositionen
8 bis 15, ein als B2 bezeichnetes Basisregister in den Bitpositionen 16
bis 19, eine aus zwei Teilen bestehende Verschiebung, wobei der
als DL1 bezeichnete erste Teil sich in den Bitpositionen 20 bis
31 und der als DH1 bezeichnete zweite Teil sich in den Bitpositionen
32 bis 39 befindet.
-
Unsere
Computerarchitektur mit der Einrichtung für lange Verschiebung arbeitet
leistungsfähig, wenn
neu erzeugte Befehle verwendet werden, die ausschließlich das
Befehlsformat mit der neuen vorzeichenlosen 20-Bit-Verschiebung
verwenden.
-
Ein
spezifisches Beispiel unserer Computerarchitektur verwendet vorhandene
Befehle mit Befehlsformaten, die nur die vorzeichenlose 12-Bit-Verschiebung
aufweisen und nun in den neuen Befehlsformaten definiert werden,
so dass sie den vorhandenen vorzeichenlosen 12-Bit-Verschiebungswert
aufweisen, wenn die 8 höchstwertigen
Bits der Verschiebung, Feld DH, alle null sind, oder einen vorzeichenbehafteten
20-Bit-Wert aufweisen,
wenn die 8 höchstwertigen
Bits der Verschiebung, Feld DH, verschieden von null sind.
-
Eine
Vorrichtung zum Zusammenfassen (digesting) des Speichers einer Datenverarbeitungsumgebung,
wobei die Vorrichtung Folgendes umfasst:
ein Mittel zum Angeben
einer zusammenzufassenden Speichereinheit über einen Befehl; und
ein
Mittel zum Zusammenfassen von Daten in der Speichereinheit.