BLOBs de chave do provedor DSS
Os BLOBs são usados com o provedor DSS ( Digital Signature Standard ) para exportar chaves e importar chaves para o provedor de serviços criptográficos (CSP).
BLOBs de chave pública
Uma chave pública DSS é exportada e importada como um BLOB, uma sequência de bytes estruturados da seguinte maneira.
PUBLICKEYSTRUC publickeystruc;
DSSPUBKEY dsspubkey;
BYTE p[dsspubkey.bitlen/8];
BYTE q[20];
BYTE g[dsspubkey.bitlen/8];
BYTE y[dsspubkey.bitlen/8];
DSSSEED seedstruct;
A tabela a seguir descreve esses componentes. Todos os valores estão no formato little-endian .
Campo | Descrição |
---|---|
dsspubkey | Uma estrutura DSSPUBKEY . O membro mágico deve ter um valor de 0x31535344. Esse número hexadecimal é a codificação ASCII de DSS1. |
g | Uma sequência BYTE . O gerador, por exemplo, Deve ter o mesmo comprimento que p. Se não tiver o mesmo comprimento que p, deverá ser acolchoada com 0x00 bytes. |
p | Uma sequência BYTE . O módulo principal, p. O bit mais significativo do byte mais significativo deve ser definido como um. |
publickeystruc | Uma estrutura PUBLICKEYSTRUC . |
q | Uma sequência BYTE . O primo, q, 20 bytes de comprimento. O bit mais significativo do byte mais significativo deve ser definido como um. |
seedstruct | Uma estrutura DSSSEED . Valores de semente e contador para verificar primos. |
a | Uma sequência BYTE . A chave pública, y. Deve ter o mesmo comprimento que p. Se não tiver o mesmo comprimento que p, deverá ser acolchoada com 0x00 bytes. |
Observação
BLOBs de chave pública não são criptografados. Elas contêm chaves públicas em forma de texto sem formatação.
BLOBs de chave privada
Uma chave privada DSS é exportada e importada como uma sequência de bytes estruturados da seguinte maneira.
PUBLICKEYSTRUC publickeystruc;
DSSPUBKEY dsspubkey;
BYTE p[dsspubkey.bitlen/8];
BYTE q[20];
BYTE g[dsspubkey.bitlen/8];
BYTE x[20];
DSSSEED seedstruct;
A tabela a seguir descreve cada componente. Todos os valores estão no formato little-endian .
Campo | Descrição |
---|---|
dsspubkey | Uma estrutura DSSPUBKEY . O membro mágico deve ser definido como 0x32535344. Esse número hexadecimal é a codificação ASCII de DSS2. |
g | Uma sequência BYTE . O gerador, por exemplo, Deve ter o mesmo comprimento que p. Se não tiver o mesmo comprimento que p, deverá ser acolchoada com 0x00 bytes. |
publickeystruc | Uma estrutura PUBLICKEYSTRUC . |
p | Uma sequência BYTE . O módulo principal, p. O bit mais significativo do byte mais significativo deve ser definido como um. |
q | Uma sequência BYTE . O prime, q. q tem 20 bytes de comprimento. O bit mais significativo do byte mais significativo deve ser definido como um. |
seedstruct | Uma estrutura DSSSEED . Valores de semente e contador para verificar primos. |
x | Uma sequência BYTE . O expoente secreto, x. Deve ter sempre 20 bytes de comprimento. Se x for menor que 20 bytes de comprimento, deverá ser acolchoada com 0x00. |
Ao chamar CryptExportKey, o desenvolvedor pode escolher se deseja criptografar a chave. O PRIVATEKEYBLOB será criptografado se o parâmetro hExpKey contiver um identificador válido para uma chave de sessão. Tudo menos a parte PUBLICKEYSTRUC do BLOB é criptografado.
Observação
O algoritmo de criptografia e os parâmetros de 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 criptografia.
Cuidado
É perigoso exportar chaves privadas sem criptografia porque elas são então vulneráveis à interceptação e ao uso por entidades não autorizadas.