Öffentliche Schlüssel-BLOBs Diffie-Hellman Version 3

Öffentliche Schlüssel-BLOBs des Typs Diffie-Hellman Version 3 (Typ PUBLICKEYBLOB) werden verwendet, um Informationen zu einem öffentlichen DH-Schlüssel zu exportieren und zu importieren. Sie haben das folgende Format:

BLOBHEADER blobheader; 
                 // As explained under "Data Structures"
DHPUBKEY_VER3 dhpubkeyver3;
BYTE p[dhpubkeyver3.bitlenP/8]; 
                 // Where P is the prime modulus
BYTE q[dhpubkeyver3.bitlenQ/8]; 
                 // Where Q is a large factor of P-1
BYTE g[dhpubkeyver3.bitlenP/8]; 
                 // Where G is the generator parameter
BYTE j[dhpubkeyver3.bitlenJ/8]; 
                 // Where J is (P-1)/Q
BYTE y[dhpubkeyver3.bitlenP/8]; 
                 // Where Y is (G^X) mod P

Dieses BLOB-Format wird exportiert, wenn die CRYPT_BLOB_VER3-Flag zusammen mit CryptExportKey verwendet wird. Da sich die Version im BLOB befindet, muss bei Verwendung dieses BLOBs mit CryptImportKey keine Flag angegeben werden.

Darüber hinaus wird dieses BLOB-Format mit der CryptSetKeyParam-Funktion verwendet, wenn der dwParam-Wert KP_PUB_PARAMS genutzt wird, um Schlüsselparameter für einen DH-Schlüssel festzulegen. Dies geschieht, wenn die 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.

Die folgende Tabelle beschreibt die Komponenten des Schlüssel-BLOBs.

Feld Beschreibung
Blobheader Eine BLOBHEADER-Struktur. Das bType-Mitglied muss den Wert PUBLICKEYBLOB aufweisen.
dhpubkeyver3 Eine DHPUBKEY_VER3-Struktur. Das magische Mitglied sollte für öffentliche Schlüssel auf 0x33484400 festgelegt werden. Beachten Sie, dass der Hexadezimalwert nur eine ASCII-Codierung von „DH3“ ist.
P Der P-Wert befindet sich direkt hinter der DHPUBKEY_VER3-Struktur und sollte immer die Länge in Byte des DHPUBKEY_VER3 bitlenP-Felds (Bitlänge von 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 DHPUBKEY_VER3 bitlenQ-Felds dividiert durch acht (little-endian-Format) sein. Wenn der BitlenQ-Wert 0 ist, fehlt der Wert im BLOB.
G Der G-Wert befindet sich direkt hinter dem Q-Wert und sollte immer die Länge in Byte des DHPUBKEY_VER3 bitlenP-Felds (Bitlänge von P) dividiert durch acht sein. Wenn die Länge der Daten mindestens ein Byte kürzer als P dividiert durch 8 ist, müssen die Daten mit den erforderlichen Bytes (Nullwerte) 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 DHPUBKEY_VER3 bitlenJ-Felds 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 in Byte des DHPUBKEY_VER3 bitlenP-Felds (Bitlänge von P) dividiert durch acht sein. Wenn die Länge der Daten, die aus der Berechnung (G^X) mod P resultieren, ein oder mehrere Bytes kürzer als P dividiert durch 8 ist, müssen die Daten mit den erforderlichen Bytes (Nullwerte) aufgefüllt werden, damit die Daten die gewünschte Länge (little-endian-Format) aufweisen. Wenn diese Struktur mit CryptSetKeyParam mit dem dwParam-Wert KP_PUB_PARAMS verwendet wird, ist dieser Wert nicht im BLOB enthalten.

 

Hinweis

Öffentliche Schlüssel-BLOBs sind nicht verschlüsselt, enthalten aber öffentliche Schlüssel in Nur-Text-Form.