BLOBs für öffentlichen Schlüssel der DSS Version 3
DSS Version 3 Public Key BLOBs vom Typ PUBLICKEYBLOB werden zum Exportieren und Importieren von Informationen zu einem öffentlichen DH-Schlüssel verwendet. 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, ist es nicht erforderlich, ein Flag anzugeben, wenn dieses BLOB mit CryptImportKey verwendet wird.
Darüber hinaus wird dieses BLOB-Format mit der CryptSetKeyParam-Funktion verwendet, wenn der dwParam-Wert 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üsselblobs beschrieben.
Feld | Beschreibung |
---|---|
Blobheader | Eine BLOBHEADER-Struktur . Das bType-Element muss den Wert PUBLICKEYBLOB aufweisen. |
Dsspubkeyver3 | Eine DSSPUBKEY_VER3-Struktur . Das Magic-Element sollte für öffentliche Schlüssel auf "DSS3" (0x33535344) festgelegt werden. Beachten Sie, dass der Hexadezimalwert nur eine ASCII-Codierung von "DSS3" ist. |
P | Der P-Wert befindet sich direkt hinter der DSSPUBKEY_VER3-Struktur und sollte immer die Länge (in Bytes) des DSSPUBKEY_VER3 bitlenP-Felds (Bitlänge von P) geteilt durch acht (Little-Endian-Format ) sein. |
Q | Der Q-Wert befindet sich direkt hinter dem P-Wert und sollte immer die Länge in Bytes des DSSPUBKEY_VER3bitlenQ-Members dividiert durch acht (Little-Endian-Format ) aufweisen. |
G | Der G-Wert befindet sich direkt hinter dem Q-Wert und sollte immer die Länge (in Bytes) des DSSPUBKEY_VER3bitlenP-Members (Bitlänge von P) dividiert durch acht sein. Wenn die Länge der Daten ein oder mehrere Byte kürzer als P dividiert durch 8 ist, müssen die Daten mit den erforderlichen Bytes (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-Members dividiert durch acht (Little-Endian-Format ) aufweisen. Wenn der bitlenQ-Wert 0 ist, ist der Wert im BLOB nicht vorhanden. |
J | Der Y-Wert (G^X) mod P befindet sich direkt hinter dem J-Wert und sollte immer die Länge (in Bytes) des DSSPUBKEY_VER3BitlenP-Members (Bitlänge von P) geteilt durch acht aufweisen. Wenn die Länge der Daten, die sich aus der Berechnung von (G^X) mod P ergeben, ein oder mehrere Bytes kürzer als P dividiert durch 8 ist, müssen die Daten mit den erforderlichen Bytes (null Wert) 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. |
Hinweis
BloBs für öffentliche Schlüssel sind nicht verschlüsselt, enthalten aber öffentliche Schlüssel in Klartextform.