Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебник 163.docx
Скачиваний:
34
Добавлен:
30.04.2022
Размер:
293.01 Кб
Скачать

Лабораторная работа №5 Создание и проверка цифровой подписи

Цель лабораторной работы заключается в изучении методов формирования и проверки цифровой подписи.

Задачи лабораторной работы:

  • рассмотреть понятия цифровой подписи;

  • изучить описание и исследовать возможности группы функций интерфейса CryptoAPI, реализующих создание и проверку цифровой подписи;

  • написать программу, осуществляющую вычисление цифровой подписи;

  • написать программу, осуществляющую проверку цифровой подписи.

Теоретические сведения

Дополнительное преимущество от использования криптосистем с открытым ключом состоит в том, что они предоставляют возможность создания цифровых подписей (ЦП). Цифровая подпись позволяет получателю информации убедиться в достоверности источника информации, а также проверить, соответствует ли полученная информация переданной и не изменилась ли она при передаче. Таким образом, ЦП является средством аутентификации и контроля целостности данных. Кроме того, ЦП несёт принцип невозможности отказа от авторства, который означает, что отправитель, подписавший исходные данные, не может отказаться от факта своего авторства подписанной им информации.

Вычисление ЦП фактически представляет собой асимметричное шифрование хеша исходных подписываемых данных (файла). При этом подписывающая сторона использует секретный, известный только ей, ключ ключевой пары AT_SIGNATURE. Таким образом, процесс формирования ЦП начинается с вычисления хеш-значения подписываемых данных, представленных в виде массива типа BYTE. На следующем шаге необходимо получить дескриптор секретно ключа, соответствующего выбранному криптопровайдеру и алгоритму формирования ЦП. Затем дескриптор хеш-объекта и дескриптор ключа передаются в функцию CryptSignHash, которая непосредственно вычисляет ЦП и записывает её в указанный массив типа BYTE.

Поскольку смысл ЦП – подтверждение подлинности и целостности подписываемых данных, то вполне очевидно, что сторона, проверяющая ЦП, должна обладать такими данными и непосредственно самим значением ЦП. Проверка ЦП начинается с вычисления хеша проверяемых данных. После извлечения открытого ключа, соответствующего секретному ключу, с помощью которого ЦП была получена, дескриптор полученного хеш-объекта и дескриптор открытого ключа передаются в функцию CryptVerifySignature, которая проверяет соответствие ЦП полученным данным. В процессе своего исполнения функция CryptVerifySignature фактически расшифровывает ЦП, получает хеш-значение, которое гарантированно принадлежит подписанным данным, и сверяет его с хешем от полученных данных. Если оба хеша совпадают, то цифровая подпись верна, а полученные данные полностью соответствуют отправленным.

Обобщенная схема взаимодействия криптографических функций, реализующий вычисление и проверку ЦП представлена на рис. 8.

Рис. 8. Схема взаимодействия криптографических функций при вычислении и проверке цифровой подписи

Задание и контрольные вопросы

  1. Используя функции хеширования, CryptGetUserKey, CryptSignHash и иные необходимые функции, реализовать вычисление цифровой подписи для файла любого формата.

  2. Используя функции хеширования, CryptGetUserKey, CryptVerifySignature и иные необходимые функции, реализовать проверку цифровой подписи.

При защите результатов лабораторной работы необходимо представить содержащий их отчет и продемонстрировать свои теоретические знания и практические навыки согласно выполненному заданию.

Перечень категорий вопросов при защите результатов лабораторной работы:

  1. Схема взаимодействия криптографических функций при вычислении и проверке цифровой подписи.

  2. Описание и назначение криптографического типа данных HCRYPTPROV.

  3. Описание и назначение криптографического типа данных ALG_ID.

  4. Описание и назначение криптографического типа данных HCRYPTKEY.

  5. Описание и назначение криптографического типа данных HCRYPTHASH.

  6. Описание функции CryptCreateHash и её параметров.

  7. Описание функции CryptHashDataи её параметров.

  8. Описание функции CryptGetUserKey и её параметров.

  9. Описание функции CryptSignHash и её параметров.

  10. Описание функции CryptVerifySignature и её параметров.

  11. Прочие вопросы, связанные с особенностями применения языков программирования C/C++ при работе с CryptoAPI.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]