Verificando uma mensagem assinada
Essas etapas verificam a assinatura de dados assinados. A ilustração a seguir ilustra as tarefas individuais que devem ser realizadas, conforme mostrado na lista a seguir.
Para verificar a assinatura de uma mensagem assinada
Obtenha um ponteiro para a mensagem assinada.
Abra um repositório de certificados.
Usando a ID do signatário contida na mensagem, obtenha o certificado do remetente e obtenha um identificador para sua chave pública.
Como alternativa às etapas 2 e 3, você pode usar o certificado contido na mensagem para recuperar a chave pública do signatário.
Usando a chave pública do signatário, descriptografe a assinatura digital, produzindo o resumo original dos dados na mensagem.
Usando o algoritmo de hash contido na mensagem, hash dos dados contidos na mensagem, gerando um novo resumo.
Compare o resumo recuperado da mensagem com o novo resumo recém-criado.
Se os dois resumos corresponderem, a assinatura será verificada. Isso significa que a chave privada usada para assinar os dados corresponde à chave pública usada apenas para descriptografar a assinatura e que os dados não foram alterados desde que os dados foram assinados.
Se os dois resumos não corresponderem, a assinatura não será verificada e as chaves privadas/públicas não corresponderão ou os dados serão alterados desde que os dados foram assinados ou ambos.
Uma única função, CryptVerifyMessageSignature, pode ser usada para verificar uma assinatura, conforme mostrado no procedimento a seguir.
Para verificar uma mensagem assinada
- Obtenha um ponteiro para a mensagem assinada.
- Obtenha o tamanho da mensagem assinada.
- Obter um identificador em um provedor criptográfico.
- Inicialize a estrutura de CRYPT_VERIFY_MESSAGE_PARA .
- Chame CryptVerifyMessageSignature para verificar a assinatura.
O código que implementa esse procedimento está incluído no Exemplo de Programa C: Assinando uma mensagem e verificando uma assinatura de mensagem.