Blobs de clave pública de la versión 3 de DSS
Los blobs de clave pública de la versión 3 de DSS 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 valor dwParam 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 | Estructura BLOBHEADER . El miembro bType debe tener un valor de PUBLICKEYBLOB. |
Dsspubkeyver3 | Estructura de DSSPUBKEY_VER3 . El miembro magic debe establecerse en "DSS3" (0x33535344) para las claves públicas. Observe que el valor hexadecimal es simplemente una codificación ASCII de "DSS3". |
P | El valor P se encuentra directamente después de la estructura de DSSPUBKEY_VER3 y siempre debe ser la longitud, en bytes, DSSPUBKEY_VER3 del campo bitlenP (longitud de bits de P) dividido por 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 miembro bitlenQde DSSPUBKEY_VER3 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 miembro bitlenPde DSSPUBKEY_VER3 (longitud de bits de P) dividida por ocho. Si la longitud de los datos es uno o varios 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 ). |
J | El valor J se encuentra directamente después del valor G y siempre debe ser la longitud en bytes del miembro bitlenJde DSSPUBKEY_VER3 dividido por ocho (formato little-endian). Si el valor de bitlenQ es 0, el valor no aparece en el 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 miembro bitlenP de DSSPUBKEY_VER3 (longitud de bits de P) dividida 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 valor cero) para que los datos sean la longitud deseada (formato little-endian ).
Nota: 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.