Compartilhar via


Chaves RSA/Schannel

Gerando e recuperando chaves RSA/Schannel

RSA/As chaves Schannel podem ser geradas chamando a função CryptGenKey. A chamada para CryptGenKey requer um identificador de algoritmo AT_KEYEXCHANGE passado no parâmetro Argel .

Para gerar um par de chaves públicas/privadas RSA/Schannel

  1. Chame a função CryptAcquireContext para obter um identificador para o Provedor Criptográfico RSA/Schannel da Microsoft.
  2. Chame a função CryptGenKey para gerar as chaves. AT_KEYEXCHANGE deve ser passado para o parâmetro Argel e os 16 bits superiores do parâmetro dwFlags devem ser definidos como o tamanho de chave desejado (512 bits). Um identificador de estrutura HCRYPTKEY é retornado no parâmetro hKey .

Para recuperar um ponteiro para chaves de usuário RSA/Schannel geradas anteriormente

  1. Chame a função CryptAcquireContext para obter um identificador para o Provedor Criptográfico RSA/Schannel da Microsoft.
  2. Chame a função CryptGetUserKey , com o parâmetro dwKeySpec definido como AT_KEYEXCHANGE.

Exportando chaves RSA/Schannel

As chaves mestras podem ser exportadas para estruturas de BLOB de chave simples. Isso deve ser implementado da mesma maneira que a exportação de chaves normais de criptografia em massaRC4 ou DES (Data Encryption Standard), conforme descrito em BLOB de Chave Simples. O membro aiKeyAlg da estrutura PUBLICKEYSTRUC é definido como o identificador de algoritmo da chave de master (CALG_PCT1_MASTER, CALG_SSL2_MASTER, CALG_SSL3_MASTER ou CALG_TLS1_MASTER).

Se a função CPExportKey estiver exportando uma chave de master SSL2 e o sinalizador CRYPT_SSL2_FALLBACK estiver definido, para ajudar a evitar ataques de reversão de versão, defina os primeiros oito bytes do preenchimento do bloco de criptografia como 0x03 em vez de dados aleatórios.

Se a constante CRYPT_DESTROYKEY for especificada no parâmetro dwFlags da função CPExportKey , o CSP destruirá a chave ou o identificador de chave depois de exportar a chave. Esse sinalizador destina-se ao uso somente com BLOBs opacos.