Importação e exportação de chave

Você pode importar e exportar chaves simétricas e chaves assimétricas com CNG. E você pode usar a funcionalidade de exportação e importação de chaves para mover chaves entre computadores.

Chaves simétricas

Para importar ou exportar chaves simétricas (ou de sessão) nas quais a mesma chave é usada para criptografar e descriptografar alguns dados, você pode usar as funções BCryptImportKey e BCryptExportKey . Normalmente, primeiro você exporta uma chave usando a função BCryptExportKey antes de importar usando a função BCryptImportKey . As funções foram projetadas para habilitar a criptografia de chaves exportadas e importadas usando os parâmetros hExportKey e hImportKey ; no entanto, a implementação da Microsoft dessas funções não dá suporte à criptografia de chaves exportadas e importadas.

Chaves assimétricas

Para importar pares de chaves assimétricos (ou públicos/privados) nos quais uma chave é usada para criptografar e a outra é usada para descriptografar alguns dados, você pode usar uma das funções BCryptImportKeyPair ou NCryptImportKey . Um provedor de CNG deve codificar o par de chaves usando um tipo de BLOB de chave com suporte. BCryptExportKey pode ser usado para criar a chave codificada BLOB. As estruturas CNG descrevem os principais tipos de BLOB e estruturas compatíveis com o Provedor de Armazenamento de Chaves da Microsoft.

Para que BCryptExportKey crie um par de chaves persistente, o BLOB da chave de entrada deve conter uma chave privada. As chaves públicas não são persistentes.

O nome da chave e a política de exportação não fazem parte da estrutura blob definida em estruturas CNG. No entanto, se um BLOB for de um tipo BLOB opaco (como a imagem de memória de um estado de chave interna), o BLOB poderá conter o nome da chave e as propriedades export-policy.

O procedimento a seguir descreve como importar uma chave privada persistente com suas propriedades.

Para importar uma chave persistente

  1. Crie uma chave persistente usando a função NCryptCreatePersistedKey .
  2. Defina as propriedades desejadas no objeto de chave usando a função NCryptSetProperty .
  3. Defina a chave de importação BLOB como uma propriedade na chave, com o tipo BLOB como o nome da propriedade.
  4. Finalize a importação de chave persistente usando a função NCryptFinalizeKey .