Objets BLOB de clé publique Diffie-Hellman version 3
Les objets BLOB de clé publique Diffie-Hellman version 3 (type PUBLICKEYBLOB) sont utilisés pour exporter et importer des informations sur une clé publique DH. Ils comprennent les formats suivants :
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
Ce format d’objet 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.
De plus, ce format d'objet BLOB est utilisé avec la fonction CryptSetKeyParam lorsque la valeur dwParam KP_PUB_PARAMS est utilisée pour définir des paramètres de clé sur une clé DH. 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 de clé.
Champ | Description |
---|---|
blobheader | Une structure de BLOBHEADER. Le membre bType doit avoir la valeur PUBLICKEYBLOB. |
dhpubkeyver3 | Une structure DHPUBKEY_VER3. Le membre magic doit être défini sur 0x33484400 pour les clés publiques. Notez que la valeur hexadécimale n’est qu’un encodage ASCII de « DH3 ». |
P | La valeur P se trouve directement après la structure DHPUBKEY_VER3 et doit toujours être la longueur, en octets, du champ DHPUBKEY_VER3 bitlenP (longueur en bits de P) divisée par huit (format little-endian). |
Q | La valeur Q se trouve directement après la valeur P et doit toujours être la longueur en octets du champ DHPUBKEY_VER3 bitlenQ divisé par huit (format little-endian). Si la valeur de bitlenQ est de 0, la valeur est alors absente de l’objet BLOB. |
G | La valeur G se trouve directement après la valeur Q et doit toujours être la longueur, en octets, du champ DHPUBKEY_VER3 bitlenP (longueur en bits de P) divisée par huit. Si la longueur des données est d’un ou plusieurs octets plus courts que P divisé par 8, les données doivent être complétées par les octets nécessaires (de valeur nulle) pour rendre les données à la longueur souhaitée (format little-endian). |
J | La valeur J se trouve directement après la valeur G et doit toujours être la longueur en octets du champ DHPUBKEY_VER3 bitlenJ divisée par huit (format little-endian). Si la valeur de bitlenQ est de 0, la valeur est alors absente de l’objet BLOB. |
Y | La valeur Y, (G^X) mod P, se trouve directement après la valeur J et doit toujours être la longueur en octets du champ DHPUBKEY_VER3 bitlenP (longueur en 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 plus courts que P divisé par 8, les données doivent être complétées par les octets nécessaires (de valeur nulle) pour rendre les données à la longueur souhaitée (format little-endian). 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. |
Remarque
Les objets BLOB de clé publique ne sont pas chiffrés, mais contiennent des clés publiques sous forme de texte en clair.