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

ФГБОУ ВПО «Воронежский государственный технический университет»

Кафедра систем информационной безопасности

Методические указания

к выполнению лабораторных работ по дисциплине «Методы программирования» для студентов специальности 090301 «Компьютерная безопасность» очной формы обучения

Воронеж 2013

Составитель С.С. Куликов

УДК 004.056.5: 004.42

Методические указания к выполнению лабораторных работ по дисциплине «Методы программирования» для студентов специальности 090301 «Компьютерная безопасность» очной формы обучения / ФГБОУ ВПО «Воронежский государственный технический университет»; сост. С.С. Куликов. Воронеж, 2013. 42 с.

Методические указания посвящены исследованию функций программного интерфейса CryptoAPI для взаимодействия с криптографической подсистемой операционных систем Windows XP и Windows 7.

Методические указания подготовлены в электронном виде в текстовом редакторе MW-2007 и содержатся в файле CryptoAPI.docx.

Табл. 6. Ил. 8. Библиогр.: 4 назв.

Рецензент д-р техн. наук, проф. А.Г. Остапенко

Ответственный за выпуск зав. кафедрой д-р техн. наук, проф. А.Г. Остапенко

Издается по решению редакционно-издательского совета Воронежского государственного технического университета

© ФГБОУ ВПО «Воронежский государственный технический

университет», 2013

Лабораторная работа №1 Инициализация дескриптора криптопровайдера

Цель лабораторной работы заключается в исследовании базовых объектов криптографической системы Windows - криптопровайдеров.

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

  • понять концепцию интерфейса Crypto API;

  • рассмотреть понятие криптопровайдера и особенности работы с ним;

  • рассмотреть понятие и назначение дескриптора криптопровайдера;

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

  • написать программу генерации последовательности случайных чисел.

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

Концепция Crypto API (The Cryptographic Application Programming Interface, CAPI) подразумевает сокрытие от программиста всех тонкостей и нюансов процесса шифрования данных. В Crypto API эта задача решена с помощью вывода реализации всех криптографических алгоритмов (шифрования, цифровой подписи и т.п.) из состава самого Crypto API в отдельные, независимые динамические библиотеки – криптопровайдеры (Cryptographic Service Provider, CSP).

Криптопровайдером называется независимый модуль, реализующий определенные криптографические алгоритмы и позволяющий осуществлять криптографические операции в операционных системах Windows, управление которым происходит с помощью функций Crypto API.

Каждый криптопровайдер должен обеспечивать:

  • реализацию стандартного интерфейса криптопровайдера;

  • работу с ключами шифрования, предназначенными для обеспечения работы алгоритмов, специфичных для данного криптопровайдера;

  • невозможность вмешательства третьих лиц в схему работы алгоритмов.

Криптопровайдеры реализуются в виде динамически загружаемых библиотек (DLL) и должны экспортировать набор обязательных функций, которые формируют системный программный интерфейс Crypto SPI (The Cryptographic System Programming Interface), при этом каждая из этих функций соответствует определенной функции Crypto API (рис. 1). Минимальный состав криптопровайдера – одна DLL, хранящаяся обычно в папке \WINDOWS\system32\. Кроме стандартных функций Crypto API, криптопровайдер может поддерживать набор собственных функций. Если собственные функции не реализованы, то DLL действует, по сути, как промежуточный слой между операционной системой и исполнителем криптографических операций.

Рис. 1. Структура криптографической системы Windows

Приложения, выполняемые в операционной системе, не работают напрямую с криптопровайдером. Вместо этого они вызывают функции Crypto API из библиотек Advapi32.dll и Crypt32.dll. Операционная система фильтрует вызовы этих функций и вызывает соответствующие им функции Crypto SPI, которые уже непосредственно и работают с криптопровайдером.

Так же у криптопровайдера отсутствуют параметры, изменением которых можно было бы управлять его работой. С помощью этой особенности решается задача обеспечения целостности алгоритмов криптопровайдера. А поскольку все компоненты криптосистемы Windows должны иметь цифровую подпись, то становится практически невозможным изменение алгоритма, реализованного в криптопровайдере – при проверке цифровой подписи это будет сразу обнаружено.

Сведения об установленных в операционной системе криптопровайдерах содержатся в ветке реестра SOFTWARE\\Microsoft\\Cryptography\\Defaults раздела HKEY_LOCAL_MACHINE.

В Crypto API криптопровайдеры принято группировать по их названиям (строковые величины), а также по номерам их типов. Тип криптопровайдера, в общем случае, не сообщает ни какой информации обычному пользователю и служит лишь для вспомогательной группировки провайдеров. Исключение составляет тип PROV_RSA_FULL (номер 1), который присваивают себе только те криптопровайдеры, которые полностью поддерживают работу со стандартом RSA. Перечни идентификаторов имен и идентификаторов типов базовых криптопровайдеров приведены в соответствующих приложениях.

Для получения информации о доступных криптопровайдерах используется функция CryptEnumProviders, а для перечисления типов криптопровайдеров, установленных в системе, можно использовать функцию CryptEnumProviderTypes. Прототипы этих и всех остальных криптографических функций содержатся в заголовочном файле Wincrypt.h.

«Вызов» криптопровайдера для использования его криптографических алгоритмов выполняется через специальный идентификатор, так называемый дескриптор криптопровайдера. Инициализация дескриптора конкретного криптопровайдера осуществляется с помощью функции CryptAcquireContext. В качестве параметров этой функции можно указать тип и/или имя запрашиваемого криптопровайдера, в случае если криптопровайдер с таким типом и именем доступен, то функция CryptAcquireContext создаст его дескриптор. Если имя криптопровайдера не указано, то будет вызван криптопровайдер «по-умолчанию» для указанного типа.

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

После завершения работы с криптопровайдером созданный дескриптор необходимо удалить с помощью функцию CryptReleaseContext.

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

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

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

Используя функции CryptEnumProvidersи CryptEnumProviderTypes необходимо вывести на экран сведения (имя, тип, название типа) обо всех криптопровайдерах, установленных в операционной системе. Допускается реализация каждой функции в отдельном приложении.

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

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

  1. Строение и возможности криптографической системы Windows.

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

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

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

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

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

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

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

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

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