DSS-Anbieterschlüssel-BLOBs
BLOBs werden zusammen mit dem DSS-Anbieter ( Digital Signature Standard ) verwendet, um Schlüssel aus dem Kryptografiedienstanbieter (Cryptographic Service Provider , CSP) zu exportieren und schlüssel in diese zu importieren.
Public Key-BLOBs
Ein öffentlicher DSS-Schlüssel wird exportiert und als BLOB importiert, eine Sequenz von Bytes, die wie folgt strukturiert ist.
PUBLICKEYSTRUC publickeystruc;
DSSPUBKEY dsspubkey;
BYTE p[dsspubkey.bitlen/8];
BYTE q[20];
BYTE g[dsspubkey.bitlen/8];
BYTE y[dsspubkey.bitlen/8];
DSSSEED seedstruct;
In der folgenden Tabelle werden diese Komponenten beschrieben. Alle Werte haben das Little-Endian-Format .
Feld | Beschreibung |
---|---|
dsspubkey | Eine DSSPUBKEY-Struktur . Das magic-Element muss den Wert 0x31535344 haben. Diese Hexadezimalzahl ist die ASCII-Codierung von DSS1. |
g | Eine BYTE-Sequenz . Der Generator, g. Muss die gleiche Länge wie p haben. Wenn es nicht die gleiche Länge wie p hat, muss er mit 0x00 Bytes aufgefüllt werden. |
p | Eine BYTE-Sequenz . Der Primmodul, p. Das bedeutendste Bit des bedeutendsten Bytes muss auf eins festgelegt werden. |
publickeystruc | Eine PUBLICKEYSTRUC-Struktur . |
q | Eine BYTE-Sequenz . Der Prim, q, 20 Byte lang. Das bedeutendste Bit des bedeutendsten Bytes muss auf eins festgelegt werden. |
seedstruct | Eine DSSSEED-Struktur . Ausgangs- und Zählerwerte zum Überprüfen von Primzahlen. |
Y | Eine BYTE-Sequenz . Der öffentliche Schlüssel, y. Muss dieselbe Länge wie p haben. Wenn es nicht die gleiche Länge wie p hat, muss er mit 0x00 Bytes aufgefüllt werden. |
Hinweis
Öffentliche Schlüssel-BLOBs werden nicht verschlüsselt. Sie enthalten öffentliche Schlüssel in Klartextform .
BLOBs für private Schlüssel
Ein privater DSS-Schlüssel wird exportiert und als Sequenz von Bytes importiert, die wie folgt strukturiert sind.
PUBLICKEYSTRUC publickeystruc;
DSSPUBKEY dsspubkey;
BYTE p[dsspubkey.bitlen/8];
BYTE q[20];
BYTE g[dsspubkey.bitlen/8];
BYTE x[20];
DSSSEED seedstruct;
In der folgenden Tabelle werden die einzelnen Komponenten beschrieben. Alle Werte haben das Little-Endian-Format .
Feld | Beschreibung |
---|---|
dsspubkey | Eine DSSPUBKEY-Struktur . Das magic-Element muss auf 0x32535344 festgelegt werden. Diese Hexadezimalzahl ist die ASCII-Codierung von DSS2. |
g | Eine BYTE-Sequenz . Der Generator, g. Muss die gleiche Länge wie p haben. Wenn es nicht die gleiche Länge wie p hat, muss er mit 0x00 Bytes aufgefüllt werden. |
publickeystruc | Eine PUBLICKEYSTRUC-Struktur . |
p | Eine BYTE-Sequenz . Der Primmodul, p. Das bedeutendste Bit des bedeutendsten Bytes muss auf eins festgelegt werden. |
q | Eine BYTE-Sequenz . Die Primzahl q. q ist 20 Byte lang. Das bedeutendste Bit des bedeutendsten Bytes muss auf eins festgelegt werden. |
seedstruct | Eine DSSSEED-Struktur . Ausgangs- und Zählerwerte zum Überprüfen von Primzahlen. |
x | Eine BYTE-Sequenz . Der Geheimnis-Exponent, x. Muss immer 20 Bytes lang sein. Wenn x kleiner als 20 Byte ist, muss es mit 0x00 aufgefüllt werden. |
Beim Aufrufen von CryptExportKey kann der Entwickler auswählen, ob der Schlüssel verschlüsselt werden soll. PrivateKEYBLOB wird verschlüsselt, wenn der hExpKey-Parameter ein gültiges Handle für einen Sitzungsschlüssel enthält. Alles außer dem PUBLICKEYSTRUC-Teil des BLOBs ist verschlüsselt.
Hinweis
Der Verschlüsselungsalgorithmus und die Verschlüsselungsschlüsselparameter werden nicht zusammen mit dem BLOB für private Schlüssel gespeichert. Die Anwendung muss diese Informationen verwalten und speichern. Wenn null für hExpKey übergeben wird, wird der private Schlüssel ohne Verschlüsselung exportiert.
Achtung
Es ist gefährlich, private Schlüssel ohne Verschlüsselung zu exportieren, da sie dann anfällig für Abfangen und Verwendung durch nicht autorisierte Entitäten sind.