BLOBs de chave do provedor base

O Provedor Base e o Provedor Estendido usam os mesmos BLOBs de chave.

BLOBs de chave pública

BLOBs de chave pública, tipo PUBLICKEYBLOB, são usados para armazenar chaves públicas fora de um CSP ( provedor de serviços criptográficos ). Os BLOBs de chave pública do provedor base têm o seguinte formato.

PUBLICKEYSTRUC  publickeystruc;
RSAPUBKEY rsapubkey;
BYTE modulus[rsapubkey.bitlen/8];

A tabela a seguir descreve cada componente de chave pública. Todos os valores estão no formato little-endian .

Campo DESCRIÇÃO
módulo Os dados de módulo de chave pública estão localizados diretamente após a estrutura RSAPUBKEY . O tamanho desses dados variará, dependendo do tamanho da chave pública. O número de bytes pode ser determinado dividindo o valor do campo bitlen RSAPUBKEY por oito.
publickeystruc Uma estrutura PUBLICKEYSTRUC .
rsapubkey Uma estrutura RSAPUBKEY . O membro mágico deve ser definido como 0x31415352. Esse valor hexadecimal é a codificação ASCII de RSA1.

 

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

BLOBs de chave privada, tipo PRIVATEKEYBLOB, são usados para armazenar chaves privadas fora de um CSP. Os BLOBs de chave privada do provedor base têm o seguinte formato.

PUBLICKEYSTRUC  publickeystruc;
RSAPUBKEY rsapubkey;
BYTE modulus[rsapubkey.bitlen/8];
BYTE prime1[rsapubkey.bitlen/16];
BYTE prime2[rsapubkey.bitlen/16];
BYTE exponent1[rsapubkey.bitlen/16];
BYTE exponent2[rsapubkey.bitlen/16];
BYTE coefficient[rsapubkey.bitlen/16];
BYTE privateExponent[rsapubkey.bitlen/8];

A tabela a seguir descreve o componente BLOB de chave privada.

Observação

Esses campos correspondem aos campos descritos na seção 7.2 do PKCS (Public Key Cryptography Standards ) nº 1 com pequenas diferenças.

 

Campo Descrição
Coeficiente Coeficiente. Isso tem um valor numérico de (inverso de q) mod p.
expoente1 Expoente 1. Isso tem um valor numérico de d mod (p – 1).
expoente2 Expoente 2. Isso tem um valor numérico de d mod (q – 1).
Módulo O módulo. Isso tem um valor de Prime1×Prime2 e geralmente é conhecido como n.
prime1 Número primo 1, geralmente conhecido como p.
prime2 Número primo 2, geralmente conhecido como q.
privateExponent Expoente privado, geralmente conhecido como d.
publickeystruc Uma estrutura PUBLICKEYSTRUC .
rsapubkey Uma estrutura RSAPUBKEY . O membro mágico deve ser definido como 0x32415352. Esse valor hexadecimal é a codificação ASCII de RSA2.

 

Observação

BLOBs de chave privada não são criptografados. Elas contêm chaves privadas em forma de texto sem formatação.

 

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.

 

BLOBs de chave simples

BLOBs de chave simples, tipo SIMPLEBLOB, são usados para armazenar e transportar chaves de sessão fora de um CSP. Os BLOBs de chave simples do provedor base são sempre criptografados com uma chave pública de troca de chaves. O membro pbData do SIMPLEBLOB é uma sequência de bytes no formato a seguir.

PUBLICKEYSTRUC  publickeystruc;
ALG_ID algid;
BYTE encryptedkey[rsapubkey.bitlen/8];

A tabela a seguir descreve cada componente do membro pbData do SIMPLEBLOB.

Campo Descrição
Algid Uma estrutura ALG_ID que especifica o algoritmo de criptografia usado para criptografar os dados da chave de sessão. Normalmente, isso tem um valor de CALG_RSA_KEYX, o que indica que os dados da chave de sessão foram criptografados com uma chave pública de troca de chaves usando o algoritmo chave pública RSA.
Encryptedkey Uma sequência BYTE que representa os dados de chave de sessão criptografados na forma de um bloco de criptografia PKCS nº 1, tipo 2. Para obter informações sobre esse formato de dados, consulte o PKCS (Public Key Cryptography Standards) nº 1, publicado pela RSA Data Security, Inc. Esses dados são sempre do mesmo tamanho que o módulo da chave pública. Por exemplo, as chaves públicas geradas pelo Provedor Base do Microsoft RSA podem ter 512 bits (64 bytes) de comprimento, portanto, os dados de chave de sessão criptografados também são sempre de 512 bits (64 bytes).
publickeystruc Uma estrutura PUBLICKEYSTRUC .