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
- 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.
- Armazene a chave assinada BLOB no disco. Supõe-se que todos os discos não sejam seguros.
- Quando a chave for necessária, leia a chave BLOB do disco.
- 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.