Проверка подписанного сообщения
Эти действия проверяют подпись подписанных данных. На следующем рисунке показаны отдельные задачи, которые необходимо выполнить, как показано в следующем списке.
Проверка подписи подписанного сообщения
Получение указателя на подписанное сообщение.
Откройте хранилище сертификатов.
Используя идентификатор подписывателя, содержащийся в сообщении, получите сертификат отправителя и дескриптор его открытого ключа.
В качестве альтернативы шагам 2 и 3 можно использовать сертификат, содержащийся в сообщении, для получения открытого ключа подписывателя.
С помощью открытого ключа подписывателя расшифрует цифровую подпись, создав исходный дайджест данных в сообщении.
С помощью хэш-алгоритма, содержащегося в сообщении, хэшируются данные, содержащиеся в сообщении, что приводит к получению нового дайджеста.
Сравните хэш, полученный из сообщения, с новым хэшом, только что созданным.
Если два дайджеста совпадают, подпись проверяется. Это означает, что закрытый ключ , который использовался для подписывания данных, соответствует открытому ключу, который только что использовался для расшифровки подписи, и что данные не изменились с момента подписания данных.
Если два хэша не совпадают, подпись не проверяется, либо закрытые и открытые ключи не совпадают, либо данные были изменены с момента подписания данных, либо и то, и другое.
Для проверки подписи можно использовать одну функцию CryptVerifyMessageSignature, как показано в следующей процедуре.
Проверка подписанного сообщения
- Получение указателя на подписанное сообщение.
- Получение размера подписанного сообщения.
- Получение дескриптора для поставщика шифрования.
- Инициализируйте структуру CRYPT_VERIFY_MESSAGE_PARA .
- Вызовите CryptVerifyMessageSignature , чтобы проверить подпись.
Код, реализующий эту процедуру, включен в пример программы C: подписывание сообщения и проверка подписи сообщения.