Partilhar via


Trocas manuais de chaves de sessão

Observação

O procedimento descrito nesta seção pressupõe que os usuários (ou clientes CryptoAPI) já possuem seu próprio conjunto de pares de chaves pública/privada e também obtiveram as chaves públicas uns dos outros.

 

A ilustração a seguir mostra como usar esse procedimento para enviar uma mensagem criptografada.

enviar uma mensagem criptografada

Esta abordagem é vulnerável a pelo menos uma forma comum de ataque. Um espião pode adquirir cópias de uma ou mais mensagens encriptadas e das chaves encriptadas. Então, em algum momento posterior, o espião pode enviar uma dessas mensagens para o recetor e o recetor não terá como saber que a mensagem não veio diretamente do remetente original. Este risco pode ser reduzido através da marcação de data/hora de todas as mensagens ou da utilização de números de série.

A maneira mais fácil de enviar mensagens criptografadas para outro usuário é enviar a mensagem criptografada com uma chave de sessão aleatória junto com a chave de sessão criptografada com a chave pública de troca de chave do recetor.

A seguir estão as etapas para enviar uma chave de sessão criptografada.

Para enviar uma chave de sessão criptografada

  1. Crie uma chave de sessão aleatória usando a função CryptGenKey.
  2. Criptografe a mensagem usando a chave de sessão. Este procedimento é discutido em Data Encryption and Decryption.
  3. Exporte a chave de sessão para uma chave de BLOB com a função CryptExportKey, especificando que a chave seja criptografada com a chave pública de troca de chaves do usuário de destino.
  4. Envie a mensagem criptografada e o BLOB de chave criptografada para o usuário de destino.
  5. O usuário de destino importa o BLOB de chave para seu CSP usando a funçãoCryptImportKey. Isso descriptografará automaticamente a chave de sessão, desde que a chave pública de troca de chaves do usuário de destino tenha sido especificada na etapa 3.
  6. O usuário de destino pode então descriptografar a mensagem usando a chave de sessão, seguindo o procedimento discutido em Data Encryption and Decryption.