Armazenando uma chave de sessão

Observação

Esta seção pressupõe que os usuários possuam um conjunto de pares de chaves pública/privada. Instruções e um exemplo para criar pares de chaves podem ser encontrados em Exemplo de programa C: Criando um contêiner de chaves e gerando chaves.

 

Para armazenar uma chave de sessão

  1. Crie um BLOB de chave simples usando a função CryptExportKey . Isso transferirá a chave de sessão do CSP para o espaço de memória de um aplicativo. Especifique que uma chave pública de troca seja usada para assinar o BLOB da chave.
  2. Armazene a chave assinada BLOB no disco. Supõe-se que todos os discos não sejam seguros.
  3. Quando a chave for necessária, leia a chave BLOB do disco.
  4. Importe o BLOB de chave de volta para o CSP usando a função CryptImportKey .

Para obter um exemplo de como criar uma chave de sessão e exportar essa chave para um BLOB de chave simples que pode ser gravado em um arquivo de disco, consulte Exemplo de programa C: exportando uma chave de sessão.

Este procedimento fornece apenas segurança mínima. Se a chave de sessão armazenada for usada para criptografar dados posteriormente, o procedimento anterior não fornecerá segurança adequada.

Para fornecer maior segurança, assine o BLOB da chave com uma chave privada de troca antes de armazená-la no disco. Quando o BLOB da chave é lido posteriormente do disco, sua assinatura pode ser validada para garantir que o BLOB da chave esteja intacto.

Se o BLOB da chave não estiver assinado, qualquer pessoa com acesso ao disco ou a outra mídia em que a chave está armazenada poderá criar uma nova chave de sessão.

A nova chave de sessão pode ser criptografada com a chave de troca de chave pública do usuário original, e essa nova chave pode ser substituída pela original. Se o usuário, sem saber, usou a chave de sessão substituída para criptografar arquivos e mensagens, o indivíduo que criou a chave substituta poderá descriptografá-los facilmente.

As assinaturas digitais são discutidas em detalhes em Hashes e assinaturas digitais.