DSS Version 3 Public Key BLOBs
DSS Version 3 Public Key BLOBs vom Typ PUBLICKEYBLOB werden verwendet, um Informationen über einen öffentlichen DH-Schlüssel zu exportieren und zu importieren. Sie haben das folgende Format:
BLOBHEADER blobheader;
// As explained under "Data Structures"
DSSPUBKEY_VER3 dsspubkeyver3;
BYTE p[dsspubkeyver3.bitlenP/8];
// Where P is the prime modulus
BYTE q[dsspubkeyver3.bitlenQ/8];
// Where Q is a large factor of P-1
BYTE g[dsspubkeyver3.bitlenP/8];
// Where G is the generator parameter
BYTE j[dsspubkeyver3.bitlenJ/8];
// Where J is (P-1)/Q
BYTE y[dsspubkeyver3.bitlenP/8];
// Where Y is (G^X) mod P
Dieses BLOB--Format wird exportiert, wenn das CRYPT_BLOB_VER3 Flag mit CryptExportKey-verwendet wird. Da sich die Version im BLOB befindet, muss bei Verwendung dieses BLOB mit CryptImportKeykeine Kennzeichnung angegeben werden.
Darüber hinaus wird dieses BLOB-Format mit der funktion CryptSetKeyParam verwendet, wenn der dwParam Wert verwendet wird, KP_PUB_PARAMS zum Festlegen von Schlüsselparametern für einen DSS-Schlüssel verwendet wird. Dies geschieht, wenn das CRYPT_PREGEN-Flag verwendet wurde, um den Schlüssel zu generieren. Bei Verwendung in dieser Situation wird der y-Wert ignoriert und sollte daher nicht in das BLOB eingeschlossen werden.
In der folgenden Tabelle werden die einzelnen Komponenten des Schlüssel-BLOB beschrieben.
Feld | Beschreibung |
---|---|
Blobheader | Eine BLOBHEADER- Struktur. Der bType Member muss den Wert PUBLICKEYBLOB aufweisen. |
Dsspubkeyver3 | Eine DSSPUBKEY_VER3 Struktur. Das magische Mitglied sollte für öffentliche Schlüssel auf "DSS3" (0x33535344) festgelegt werden. Beachten Sie, dass der Hexadezimalwert nur ein ASCII- Codierung von "DSS3" ist. |
P | Der P-Wert befindet sich direkt nach der DSSPUBKEY_VER3 Struktur und sollte immer die Länge des DSSPUBKEY_VER3 BitlenP- Felds (Bitlänge P) dividiert durch acht (little-endian Format) sein. |
Q | Der Q-Wert befindet sich direkt hinter dem P-Wert und sollte immer die Länge in Byte des DSSPUBKEY_VER3bitlenQ- Member dividiert durch acht (little-endian Format) sein. |
G | Der G-Wert befindet sich direkt hinter dem Q-Wert und sollte immer die Länge des DSSPUBKEY_VER3bitlenP Members (Bitlänge von P) dividiert durch acht sein. Wenn die Länge der Daten ein oder mehrere Bytes kürzer als P ist, dividiert durch 8, müssen die Daten mit den erforderlichen Bytes (von Nullwert) aufgefüllt werden, damit die Daten die gewünschte Länge (little-endian Format) aufweisen. |
J | Der J-Wert befindet sich direkt hinter dem G-Wert und sollte immer die Länge in Byte des DSSPUBKEY_VER3bitlenJ Member dividiert durch acht (little-endian Format) sein. Wenn der BitlenQ-Wert 0 ist, fehlt der Wert im BLOB. |
Y | Der Y-Wert (G^X) mod P befindet sich direkt hinter dem J-Wert und sollte immer die Länge des DSSPUBKEY_VER3bitlenP Member (Bitlänge von P) dividiert durch acht sein. Wenn die Länge der Daten, die aus der Berechnung von (G^X) mod P resultiert, mindestens ein Bytes kürzer als P dividiert durch 8 ist, müssen die Daten mit den erforderlichen Bytes (von Nullwert) aufgefüllt werden, damit die Daten die gewünschte Länge (little-endian Format) aufweisen.
Hinweis: Wenn diese Struktur mit CryptSetKeyParam mit dem dwParam Wert KP_PUB_PARAMS verwendet wird, ist dieser Wert nicht im BLOB enthalten. |
Anmerkung
Öffentliche Schlüssel-BLOBs sind nicht verschlüsselt, enthalten aber öffentliche Schlüssel in Nur-Text-Form.