Compartilhar via


BLOBs de chave pública da versão 3 do DSS

BLOBs de Chave Pública do DSS versão 3 do tipo PUBLICKEYBLOB são usados para exportar e importar informações sobre uma chave pública DH. Eles têm o seguinte 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

Esse formato BLOB é exportado quando o sinalizador CRYPT_BLOB_VER3 é usado com CryptExportKey. Como a versão está no BLOB, não é necessário especificar um sinalizador ao usar esse BLOB com CryptImportKey.

Além disso, esse formato BLOB é usado com a função CryptSetKeyParam quando o valor dwParam KP_PUB_PARAMS é usado para definir parâmetros de chave em uma chave DSS. Isso é feito quando o sinalizador CRYPT_PREGEN foi usado para gerar a chave. Quando usado nessa situação, o valor y é ignorado e, portanto, não deve ser incluído no BLOB.

A tabela a seguir descreve cada componente do BLOB de chave.

Campo Descrição
Blobheader Uma estrutura BLOBHEADER . O membro bType deve ter um valor de PUBLICKEYBLOB.
Dsspubkeyver3 Uma estrutura DSSPUBKEY_VER3 . O membro mágico deve ser definido como "DSS3" (0x33535344) para chaves públicas. Observe que o valor hexadecimal é apenas uma codificação ASCII de "DSS3".
P O valor P está localizado diretamente após a estrutura DSSPUBKEY_VER3 e deve ser sempre o comprimento, em bytes, do campo bitlenP DSSPUBKEY_VER3 (comprimento de bit de P) dividido por oito (formato little-endian ).
Q O valor Q está localizado diretamente após o valor P e deve ser sempre o comprimento em bytes do DSSPUBKEY_VER3 membro bitlenQ dividido por oito (formato little-endian).
G O valor G está localizado diretamente após o valor Q e deve ser sempre o comprimento, em bytes, do membro DSSPUBKEY_VER3bitlenP (comprimento de bit de P) dividido por oito. Se o comprimento dos dados for um ou mais bytes menor que P dividido por 8, os dados deverão ser preenchidos com os bytes necessários (de valor zero) para tornar os dados o comprimento desejado (formato little-endian ).
J O valor J está localizado diretamente após o valor G e deve ser sempre o comprimento em bytes do membrobitlenJ DSSPUBKEY_VER3 dividido por oito (formato little-endian ). Se o valor de bitlenQ for 0, o valor estará ausente do BLOB.
Y O valor Y, (G^X) mod P, está localizado diretamente após o valor J e deve ser sempre o comprimento, em bytes, do membrobitlenP DSSPUBKEY_VER3 (comprimento de bit de P) dividido por oito. Se o comprimento dos dados resultantes do cálculo de (G^X) mod P for um ou mais bytes menor que P dividido por 8, os dados deverão ser preenchidos com os bytes necessários (de valor zero) para tornar os dados o comprimento desejado (formato little-endian ). Nota: Quando essa estrutura é usada com CryptSetKeyParam com o valor dwParam KP_PUB_PARAMS, esse valor não é incluído no BLOB.

 

Observação

BLOBs de chave pública não são criptografados, mas contêm chaves públicas em formato de texto não criptografado.