Diffie-Hellman Version 3: BLOBs für öffentlichen Schlüssel

Diffie-Hellman Version 3 public Key BLOBs (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 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 DH-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.
dhpubkeyver3 Eine DHPUBKEY_VER3-Struktur . Das Magic-Element 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 Bytes) des DHPUBKEY_VER3BitlenP-Felds (Bitlänge von P) geteilt durch acht (Little-Endian-Format ) aufweisen.
Q Der Q-Wert befindet sich direkt hinter dem P-Wert und sollte immer die Länge in Bytes des DHPUBKEY_VER3BitlenQ-Felds geteilt durch acht (Little-Endian-Format ) aufweisen. Wenn der bitlenQ-Wert 0 ist, ist der Wert im BLOB nicht vorhanden.
G Der G-Wert befindet sich direkt hinter dem Q-Wert und sollte immer die Länge (in Bytes) des DHPUBKEY_VER3BitlenP-Felds (Bitlänge von P) geteilt 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 Bytes des DHPUBKEY_VER3BitlenJ-Felds geteilt 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 DHPUBKEY_VER3BitlenP-Felds (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. 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.