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
- Crie uma chave persistente usando a função NCryptCreatePersistedKey .
- Defina as propriedades desejadas no objeto de chave usando a função NCryptSetProperty .
- Defina a chave de importação BLOB como uma propriedade na chave, com o tipo BLOB como o nome da propriedade.
- Finalize a importação de chave persistente usando a função NCryptFinalizeKey .