Compartilhar via


BLOBs de chave do provedor DSS

BLOBs são usados com o provedor DSS (Digital Signature Standard) para exportar chaves e importar chaves para o CSP ( provedor de serviços criptográficos).

  • blobs de chave pública
  • blobs de chave privada

BLOBs de chave pública

Um de chave pública do DSS é exportado e importado 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 em formato de little-endian.

Campo Descrição
dsspubkey Uma estrutura deDSSPUBKEY. O membro mágico deve ter um valor de 0x31535344. Esse número hexadecimal é o 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, ele deverá ser acolchoados 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 estruturaPUBLICKEYSTRUC.
q Uma sequência BYTE. O tamanho principal, q, 20 bytes. O bit mais significativo do byte mais significativo deve ser definido como um.
seedstruct Uma estrutura deDSSSEED. Valores de semente e contador para verificar os primos.
y 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, ele deverá ser acolchoados com 0x00 bytes.

 

Nota

BLOBs de chave pública não são criptografados. Elas contêm chaves públicas de texto sem formatação.

 

BLOBs de chave privada

Um chave privada do DSS é exportado e importado 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 em formato de little-endian.

Campo Descrição
dsspubkey Uma estrutura deDSSPUBKEY. O membro mágico deve ser definido como 0x32535344. Esse número hexadecimal é o 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, ele deverá ser acolchoados com 0x00 bytes.
publickeystruc Uma estruturaPUBLICKEYSTRUC.
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 primeiro, q. q tem 20 bytes de comprimento. O bit mais significativo do byte mais significativo deve ser definido como um.
seedstruct Uma estrutura deDSSSEED. Valores de semente e contador para verificar os 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, ele deverá ser adicionado 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 é criptografada.

Nota

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.