Share via


Objets blob de clé publique DSS version 3

Les objets blob de clé publique DSS version 3 de type PUBLICKEYBLOB sont utilisés pour exporter et importer des informations sur une clé publique DH. Ils ont le format suivant :

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

Ce format BLOB est exporté lorsque l’indicateur CRYPT_BLOB_VER3 est utilisé avec CryptExportKey. Étant donné que la version se trouve dans l’objet BLOB, il n’est pas nécessaire de spécifier un indicateur lors de l’utilisation de cet objet BLOB avec CryptImportKey.

En outre, ce format BLOB est utilisé avec la fonction CryptSetKeyParam lorsque la valeur dwParam KP_PUB_PARAMS est utilisée pour définir des paramètres clés sur une clé DSS. Cette opération est effectuée lorsque l’indicateur CRYPT_PREGEN a été utilisé pour générer la clé. Lorsqu’elle est utilisée dans cette situation, la valeur y est ignorée et ne doit donc pas être incluse dans l’objet BLOB.

Le tableau suivant décrit chaque composant de l’objet BLOB clé.

Champ Description
Blobheader Structure BLOBHEADER . Le membre bType doit avoir la valeur PUBLICKEYBLOB.
Dsspubkeyver3 Structure DSSPUBKEY_VER3 . Le membre magic doit être défini sur « DSS3 » (0x33535344) pour les clés publiques. Notez que la valeur hexadécimale est simplement un encodage ASCII de « DSS3 ».
P La valeur P se trouve directement après la structure DSSPUBKEY_VER3 et doit toujours être la longueur, en octets, du champ bitlenP DSSPUBKEY_VER3 (longueur de bits de P) divisé par huit (format petit endian ).
Q La valeur Q se trouve directement après la valeur P et doit toujours être la longueur en octets du membrebitlenQ DSSPUBKEY_VER3 divisé par huit (format little endian ).
G La valeur G se trouve directement après la valeur Q et doit toujours être la longueur, en octets, du DSSPUBKEY_VER3 membre bitlenP (longueur de bits de P) divisée par huit. Si la longueur des données est d’un ou plusieurs octets inférieurs à P divisés par 8, les données doivent être complétées avec les octets nécessaires (de zéro valeur) pour faire des données la longueur souhaitée (format petit endian ).
J La valeur J se trouve directement après la valeur G et doit toujours être la longueur en octets du membrebitlenJ DSSPUBKEY_VER3 divisé par huit (format petit-endien ). Si la valeur bitlenQ est 0, la valeur est absente de l’objet BLOB.
O La valeur Y, (G^X) mod P, se trouve directement après la valeur J et doit toujours être la longueur, en octets, du DSSPUBKEY_VER3 membre bitlenP (longueur de bits de P) divisée par huit. Si la longueur des données résultant du calcul du mod P (G^X) est d’un ou plusieurs octets inférieurs à P divisés par 8, les données doivent être complétées avec les octets nécessaires (de zéro valeur) pour que les données soient de la longueur souhaitée (format petit endian ). Note: Lorsque cette structure est utilisée avec CryptSetKeyParam avec la valeur dwParam KP_PUB_PARAMS, cette valeur n’est pas incluse dans l’objet BLOB.

 

Notes

Les objets BLOB de clé publique ne sont pas chiffrés, mais contiennent des clés publiques sous forme de texte clair.