Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Quando uma versão 3 DSS de chave privada é exportada, ela está em um formato da seguinte maneira:
BLOBHEADER blobheader;
DSSPRIVKEY_VER3 dssprivkeyver3;
BYTE p[dssprivkeyver3.bitlenP/8];
// Where P is the prime modulus
BYTE q[dssprivkeyver3.bitlenQ/8];
// Where Q is a large factor of P-1
BYTE g[dssprivkeyver3.bitlenP/8];
// Where G is the generator parameter
BYTE j[dssprivkeyver3.bitlenJ/8];
// Where J is (P-1)/Q
BYTE y[dssprivkeyver3.bitlenP/8];
// Where Y is (G^X) mod P
BYTE x[dssprivkeyver3.bitlenX/8];
// Where X is the private exponent
Este formato BLOB é exportado quando o sinalizador CRYPT_BLOB_VER3 é usado com CryptExportKey. Como a versão está no BLOB, não há necessidade de especificar um sinalizador ao usar esse BLOB com CryptImportKey.
A tabela a seguir descreve cada componente da chave de BLOB.
| Domínio | Descrição |
|---|---|
| Blobheader | Um BLOBHEADER estrutura. O membro bType deve ter um valor de PUBLICKEYBLOB. |
| Dssprivkeyver3 | Uma estrutura DSSPRIVKEY_VER3. O membro mágico deve ser definido como "DSS4" (0x34535344) para chaves privadas. Observe que o valor hexadecimal é apenas um ASCII codificação de "DSS4". |
| P | O valor P está localizado diretamente após a estrutura DSSPRIVKEY_VER3, e deve ser sempre o comprimento, em bytes, do campo DSSPRIVKEY_VER3 bitlenP (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 campo DSSPRIVKEY_VER3 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 DSSPRIVKEY_VER3 campo bitlenP (comprimento de bit de P) dividido por oito. Se o comprimento dos dados for um ou mais bytes mais curto do que P dividido por 8, os dados devem 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 campo bitlenJ DSSPRIVKEY_VER3 dividido por oito (formato little-endian). Se o valor bitlenJ for 0, então o valor está 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 DSSPRIVKEY_VER3 campo bitlenP (comprimento de bit de P) dividido por oito. Se o comprimento dos dados que resulta do cálculo de (G^X) mod P for um ou mais bytes mais curto do que P dividido por 8, os dados devem ser preenchidos com os bytes necessários (de valor zero) para tornar os dados o comprimento desejado (formato little-endian). |
| X | O valor X é um inteiro grande aleatório tal que a parte pública do par de chaves DH, Y, é igual a: Y = (G^X) mod P |
Ao chamar CryptExportKey, o desenvolvedor pode escolher se deseja criptografar a chave. A chave será criptografada se o parâmetro hExpKey contiver um identificador válido para uma chave de sessão. Tudo, exceto o BLOBHEADER parte do BLOB é criptografado. Observe que o algoritmo de criptografia e os parâmetros da chave de criptografia não são armazenados junto com o BLOB de chave privada . O aplicativo deve gerenciar e armazenar essas informações. Se zero for passado para hExpKey, a chave privada será exportada sem encriptação.
Importante
É perigoso exportar chaves privadas sem encriptação porque são vulneráveis à interceção e utilização por entidades não autorizadas.