Blobs de clave pública Diffie-Hellman versión 3
Los blobs de clave pública Diffie-Hellman versión 3 (tipo PUBLICKEYBLOB) se usan para exportar e importar información sobre una clave pública DH. Tienen el formato siguiente:
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
Este formato BLOB se exporta cuando se usa la marca CRYPT_BLOB_VER3 con CryptExportKey. Dado que la versión está en el BLOB, no es necesario especificar una marca al usar este BLOB con CryptImportKey.
Además, este formato BLOB se usa con la función CryptSetKeyParam cuando el valor dwParam KP_PUB_PARAMS se usa para establecer parámetros clave en una clave DH. Esto se hace cuando se ha usado la marca CRYPT_PREGEN para generar la clave. Cuando se usa en esta situación, el valor y se omite y, por lo tanto, no debe incluirse en el BLOB.
En la tabla siguiente se describe cada componente del BLOB de claves.
Campo | Descripción |
---|---|
blobheader | Una estructura BLOBHEADER. El miembro bType debe tener un valor de PUBLICKEYBLOB. |
dhpubkeyver3 | Estructura DHPUBKEY_VER3 . El miembro magic debe establecerse en 0x33484400 para las claves públicas. Observe que el valor hexadecimal es simplemente una codificación ASCII de "DH3". |
P | El valor P se encuentra directamente después de la estructura DHPUBKEY_VER3 y siempre debe ser la longitud en bytes del campo bitlenP (longitud de bits de P) de DHPUBKEY_VER3 dividido entre ocho (formato little-endian). |
Q | El valor Q se encuentra directamente después del valor P y siempre debe ser la longitud en bytes del campo bitlenQ de DHPUBKEY_VER3 dividido entre ocho (formato little-endian). Si el valor bitlenQ es 0, el valor está ausente del BLOB. |
G | El valor G se encuentra directamente después del valor Q y siempre debe ser la longitud en bytes del campo bitlenP (longitud de bits de P) de DHPUBKEY_VER3 dividido entre ocho. Si la longitud de los datos es uno o más bytes más cortos que P divididos entre 8, los datos deben rellenarse con los bytes necesarios (de valor cero) para que los datos tengan la longitud deseada (formato little-endian). |
J | El valor J se encuentra directamente después del valor G y siempre debe ser la longitud en bytes del campo bitlenJ de DHPUBKEY_VER3 dividido entre ocho (formato little-endian). Si el valor bitlenQ es 0, el valor está ausente del BLOB. |
Y | El valor Y, (G^X) mod P, se encuentra directamente después del valor J y siempre debe ser la longitud en bytes del campo bitlenP (longitud de bits de P) de DHPUBKEY_VER3 dividido entre ocho. Si la longitud de los datos resultantes del cálculo de (G^X) mod P es uno o más bytes más cortos que P divididos entre 8, los datos deben rellenarse con los bytes necesarios (de valor cero) para que los datos tengan la longitud deseada (formato little-endian). Cuando esta estructura se usa con CryptSetKeyParam con el valor dwParam KP_PUB_PARAMS, este valor no se incluye en el BLOB. |
Nota:
Los BLOB de clave pública no están cifrados, pero contienen claves públicas en formato de texto no cifrado.