Compartilhar via


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.