Teilen über


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.