Compartir a través de


Blobs de clave pública de DSS versión 3

DSS versión 3 blobs de clave pública de tipo PUBLICKEYBLOB se usan para exportar e importar información sobre una clave pública DH. Tienen el siguiente formato:

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

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 dwParam valor KP_PUB_PARAMS se usa para establecer parámetros clave en una clave DSS. Esto se hace cuando se ha usado la marca CRYPT_PREGEN para generar la clave. Cuando se usa en esta situación, se omite el valor y y, por lo tanto, no debe incluirse en el BLOB.

En la tabla siguiente se describe cada componente de la clave BLOB.

Campo Descripción
Blobheader EstructuraBLOBHEADER. El miembro bType debe tener un valor de PUBLICKEYBLOB.
Dsspubkeyver3 Estructura DSSPUBKEY_VER3. El miembro magic debe establecerse en "DSS3" (0x33535344) para las claves públicas. Observe que el valor hexadecimal es solo un ASCII codificación de "DSS3".
P El valor P se encuentra directamente después de la estructura DSSPUBKEY_VER3 y siempre debe ser la longitud, en bytes, del campo bitlenP DSSPUBKEY_VER3 (longitud de bits de P) dividido por ocho (formato little-endian).
Q El valor de Q se encuentra directamente después del valor P y siempre debe ser la longitud en bytes del miembro de DSSPUBKEY_VER3bitlenQ dividido por ocho (formato little-endian).
G El valor G se encuentra directamente después del valor Q y siempre debe ser la longitud, en bytes, del DSSPUBKEY_VER3bitlenP miembro (longitud de bits de P) dividido por ocho. Si la longitud de los datos es uno o más bytes más cortos que P divididos por 8, los datos deben rellenarse con los bytes necesarios (de valor cero) para que los datos sean 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 DSSPUBKEY_VER3bitlenJ miembro dividido por 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 DSSPUBKEY_VER3bitlenP miembro (longitud de bits de P) dividido por 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 por 8, los datos deben rellenarse con los bytes necesarios (de cero valor) para que los datos sean la longitud deseada (formato little-endian). Nota: Cuando se usa esta estructura 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.