- •Конспект лекций
- •Волгоград 2017 Рекомендуемая литература домашинные методы шифрования
- •История шифрования
- •Шифры замены
- •Шифр Цезаря
- •Шифр Цезаря с ключевым словом
- •Аффинная криптосистема
- •Шифр Полибия
- •Методы вскрытия одноалфавитных систем
- •Частотный анализ
- •Метод полосок
- •Многоалфавитные системы
- •Шифр Вернама
- •Шифр Виженера
- •Шифр c автоключом
- •Шифры перестановки
- •Простой столбцевой перестановочный шифр
- •Перестановочный шифр с ключевым словом
- •Комбинированное использование шифра перестановки и замены
- •Шифровальная машина «Энигма»
- •Системы блочного шифрования и симметричные шифры
- •Режимы шифрования блочных шифров
- •Алгоритм гост 28147-89
- •Простая замена
- •Выработка имитовставки к массиву данных
- •Особенности программной реализации гост 28147-89
- •Стандарт шифрования данных des (Data Encryption Standard)
- •Начальная перестановка
- •Преобразования ключа
- •Перестановка с расширением
- •Подстановка с помощью s-блоков
- •Перестановка с помощью p-блоков
- •Дешифрирование des
- •Режимы des
- •Однонаправленные функции
- •Однонаправленные хэш‑функции
- •Цифровые подписи
- •Алгоритм безопасного хэширования (Secure Hash Algorithm, sha) - скомпрометирован
- •Гост р 34.11‑94
- •Инфраструктура открытых ключей Основы инфраструктуры открытых ключей Идея криптографии с открытым ключом
- •Основные преимущества открытых ключей
- •Сертификат открытого ключа
- •Алгоритмы с открытыми ключами
- •Алгоритм цифровой подписи (digital signature algorithm, dsa)
- •Алгоритм цифровой подписи гост р 34.10-94
- •Система криптографической защиты в ос ms windows
- •Концепция криптопровайдера, интерфейс CryptoApi 1.0
- •Описание интерфейса CryptoApi 2.0
- •Варианты применения криптопровайдеров Защищенная файловая система (Encrypted File System).
- •Криптография при работе в сети.
- •Шифрование ip-трафика.
- •Защищенные соединения.
- •Шифрование и цифровая подпись сообщений электронной почты.
- •Подпись исполняемых модулей.
- •Обзор существующих отечественных криптопровайдеров России
- •Протокол tls/ssl
- •Элементы протокола Криптографические операции
- •Нмас и псевдослучайная функция
- •Протокол Записи
- •Состояния соединения
- •Фрагментация
- •Компрессия и декомпрессия
- •Защита полезной информации записи
- •Вычисление ключей
- •Протокол Рукопожатия
- •Протокол изменения шифрования
- •Криптографические вычисления
- •Архитектура семейства протоколов Ipsec
- •Обзор системы
- •Как работает iPsec
- •Где может размещаться iPsec
- •Безопасные Ассоциации
- •Базы данных безопасной ассоциации
- •Sa и Управление Ключом
- •Ручные технологии
- •Автоматические sa и Управление Ключом
- •Проблемы выполнения
Система криптографической защиты в ос ms windows
На всех рабочих станциях и серверах, которые работают под управлением операционных систем Windows 2000/XP и Windows NT, и на всех рабочих станциях, которые работают под управлением операционных систем Windows 95 и Windows 98 обеспечена поддержка приложений, использующих криптографию с открытыми ключами. На рисунке (Рисунок 6.2.) показана блок‑схема служб, формирующих поддержку таких приложений. Краеугольный камень этих служб — криптографический интерфейс CryptoAPI 1.0. Он обеспечивает стандартный доступ к функциям криптографических модулей CSP (Cryptographic Service Provider). CSP могут быть программными или работающими совместно с аппаратными криптографическими устройствами. Они способны поддерживать разнообразные криптографические алгоритмы и степени защиты ключей. Выше уровня криптографических служб находится набор служб управления сертификатами. Они поддерживают сертификаты, соответствующие стандарту X.509 версии 3. Имеются также службы для обработки криптографических сообщений, поступающих в стандартных форматах. Эти службы поддерживают форматы PKCS, используемые для криптографии с открытыми ключами, развивающуюся инфраструктуру открытых ключей, определяемую рекомендациями IETF и использующую сертификаты X.509 (PKIX).
Другие службы используют интерфейс CryptoAPI с целью обеспечения дополнительных возможностей разработчикам приложений. Защищенный канал (Schannel) поддерживает аутентификацию и шифрование передаваемых по сети данных с помощью протоколов TLS (Transport Layer Security) и SSL (Secure Sockets Layer), ставших отраслевыми стандартами. Доступ к этим функциям осуществляется через интерфейс WinInet для протокола HTTP (HTTPS) и через интерфейс SSPI (Security Support Provider Interface) для других протоколов. Технология Authenticode реализует механизмы создания электронной цифрой подпись компонентов и ее проверку. Она используется в основном для определения источника и целостности, загружаемых через Интернет компонентов, но может быть использована и в других целях. Поддерживаются также универсальные интерфейсы для смарт‑карт. Они используются для интегрирования смарт‑карт независимо от конкретных приложений и служат основой для системы регистрации в домене с помощью смарт‑карт.
Рисунок 6.2. ‑ Службы поддержки приложений, использующих инфраструктуру открытых ключей
Концепция криптопровайдера, интерфейс CryptoApi 1.0
Ранее в этой лекции уже упоминалось понятие криптопровайдера. Это концептуальная идея, лежащая в основе криптографической защиты операционных систем семейства Windows.
Криптопровайдер, или Cryptographic Service Provider (кратко - CSP), в ОС Windows – это библиотека криптографических алгоритмов, доступных прикладным программистам посредством интерфейса CryptoAPI (Cryptographic Application Programming Interface). При взаимодействии с CSP приложения вызывают функции CryptoAPI, которые обращаются к библиотекам Crypt32.dll и Advapi32.dll операционной системы. Последняя фильтрует вызовы этих функций и передаёт их далее соответствующим функциям CSP через CryptoSPI (Cryptographic System Program Interface).
CryptoAPI 1.0 это так называемый уровень криптографических примитивов - определенный набор функций реализующих основные криптографические операции — шифрование/расшифрование данных, хеширование данных, генерация и проверка электронной цифровой подписи (ЭЦП) и работу с ключевой информацией.
С точки зрения операционной системы криптопровайдер представляется как библиотека динамической линковки (dll). Набор экспортируемых функций этой библиотеки должен соответствовать интерфейсу криптопровайдера (cryptographic service provider interface —CryptoSPI), который приведен ниже в таблицах.
Таблица 6.1. – Группы функций интерфейс криптопровайдера CryptoSPI
Группа функций |
Описание |
Инициализация и параметры криптопровайдера |
Функции инициализации и параметры. Предназначены для установления сессии прикладного ПО с криптопровайдером и получения (установки) параметров сессии. |
Функции генерации и работы с ключами |
Функции генерации и работы с ключами предназначены для генерации парных и обработки различных типов ключей, используемых в криптопровайдере. |
Функции шифрования/расшифрования данных |
Функции шифрования/расшифрования данных предназначены для выполнения операций, шифрования и расшифрования данных. |
Функции хэширования и ЭЦП |
Функции хэширования и ЭЦП предназначены для вычисления значения хэш‑функции и формирования/проверки ЭЦП данных. |
Интерфейс криптопровайдера стандартизирован с целью абстрагирования конечного приложения от конкретной реализации криптографических функций. Основной архитектурной особенностью криптографических ядер, разработанноых по принципу криптопровайдера, является то, что прикладное программное обеспечение не имеет непосредственного доступа к ключевой и криптографически-опасной информации. Все операции с сессионными и долговременными закрытыми и симметричными ключами, незавершёнными значениями хэш-функций и т. п. осуществляется через дескрипторы соответствующих объектов. Это позволяет обеспечить корректность операций над этими объектами, так как дескриптор объекта непосредственно не содержит его адреса.
Использующее криптопровайдер прикладное программное обеспечение вызывает «абстрактные» функции CryptoAPI 1.0, которые экспортируются системной библиотекой advapi32.dll. На рисунке (Рисунок 6.3) показана схема вызова функций CryptoAPI 1.0, и последующий вызов криптопровайдера.
Рисунок 6.3.– Схема вызова криптопровайдера
Функции, экспортируемые библиотекой advapi32.dll по параметрам фактически полностью совпадают с функциями экспортируемыми криптопровайдером. Параметрами, главным образом отличаются функция CryptoAPI 1.0 CryptAcquireContext() (Рисунок 6.4) и функция CryptoSPI CPAcquireContext() (Рисунок 6.5).
BOOL WINAPI CryptAcquireContext(
HCRYPTPROV *phProv,
LPCTSTR pszContainer,
LPCTSTR pszProvider,
DWORD dwProvType,
DWORD dwFlags
);
Рисунок 6.4. – Параметры вызова CryptAcquireContext()
BOOL CPAcquireContext(
HCRYPTPROV* phProv,
CHAR* pszContainer,
DWORD dwFlags,
PVTableProvStruc pVTable
);
Рисунок 6.5 – Параметры вызова CPAcquireContext()
В параметре pszProvider предается имя криптопровайдера. Имена всех зарегистрированных в системе криптопровайдеров находятся в разделе системного реестра:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\Defaults\Provider\
Имя папок в этом разделе имеет особый смысл. При вызове CryptAcquireContext() в этом разделе ищется папка имя которой совпадает со строкой преданно в параметре pszProvider. В этой папке находится ключ Image Path, в котором содержится путь библиотеки криптопровайдера.
Функция CryptAcquireContext() возвращает дескриптор контекста (сессии) по указателю phProv. При дальнейших вызовах всех Crypt* функций дескриптор контекста будет входным параметром. Дескриптор контекста определяет при вызовах других функций CrytoAPI 1.0 тот криптопровайдер, который был указан при инициализации контекста. Таким образом, вызов функции Crypt* перенаправляется в библиотеку найденную по имени при вызове CryptAcquireContext(), в самом начале работы с CrytoAPI 1.0. Собственно, все вызовы криптографических функций CrytoAPI 1.0 «обрамляются» вызовами двух функций — CryptAcquireContext() и CryptReleaseContext(), — открытие и закрытие сессии работы с криптопровайдером.
CryptoSPI регламентирует состав параметров вызова функций криптопровайдра, а также регламентирует некоторый стандартный (закрепленный) набор флагов и значений параметров вызова. Также регламентируется набор возвращаемых ошибок. Однако разработчикам разрешается добавлять собственные параметры и флаги вызовов. Есть также набор необязательных параметров и флагов, которые разрабатываемый криптопровайдер может или игнорировать или не поддерживать.
Для завершения описания функциональности криптопровайдера ниже приведены таблицы, описывающие внутренний интерфейс криптопровайдера CryptoSPI.
Таблица 6.2. – Функции инициализации и параметров криптопровайдера
Название |
Описание |
CPAcquireContext() |
Используется для создания дескриптора криптопровайдера с именем ключевого контейнера. |
CPReleaseContext() |
Используется для удаления дескриптора криптопровайдера, созданного функцией CPAcquireContext(). |
CPGetProvParam() |
Производит возвращение параметров криптопровайдера. |
CPSetProvParam() |
Устанавливает параметры криптопровайдера. |
Таблица 6.3. ‑ Функции генерации и работы с ключами
Название |
Описание |
CPGenKey() |
Производит случайные криптографические ключи или парные (секретный/открытый) ключи. |
CPDestroyKey() |
Удаляет ключ. После удаления ключ (дескриптор ключа) не может использоваться. |
CPDeriveKey() |
Производит криптографические ключи сессии на основе значения хэш-функции, вычисленной по другим ключам, паролям или любым другим данным пользователя. |
CPDuplicateKey() |
Создает копию заданного ключа, включая все его переменные, определяющие внутреннее состояние ключа (например, синхропосылки). |
CPExportKey() |
Используется для экспорта криптографических ключей из ключевого контейнера криптопровайдера, сохраняя их в защищённом виде. |
CPGenRandom() |
Используется для заполнения буфера случайными байтами. |
CPGetKeyParam() |
Возвращает параметры ключа. |
CPGetUserKey() |
Возвращает дескриптор одной из постоянных ключевых пар в ключевом контейнере. |
CPImportKey() |
Используется для импорта криптографического ключа из ключевого блоба в контейнер криптопровайдера. |
CPSetKeyParam() |
Устанавливает параметры ключа. |
Таблица 6.4. ‑ Функции шифрования/расшифрования данных
Название |
Описание |
CPEncrypt() |
Производит зашифрование данных. Одновременно может быть произведено их хэширование. |
CPDecrypt() |
Расшифровывает данные, предварительно зашифрованные функцией CPEncrypt(). Одновременно может быть произведено хэширование данных. |
Таблица 6.5. ‑ Функции хэширования и ЭЦП
Название |
Описание |
CPCreateHash() |
Инициализирует дескриптор нового объекта функции хэширования потока данных. |
CPDestroyHash() |
Разрушает объект функции хэширования. |
CPDuplicateHash() |
Создает точную копию объекта функции хэширования, включая все его переменные, определяющие внутреннее состояние объекта функции хэширования. |
CPGetHashParam() |
Возвращает параметры объекта функции хэширования и значение функции хэширования. |
CPHashData() |
Передаёт данные указанному объекту функции хэширования. |
CPHashSessionKey() |
Передаёт криптографический ключ указанному объекту функции хэширования. Это позволяет хэшировать ключи сессии без передачи ключа приложению. |
CPSetHashParam() |
Устанавливает параметры объекта хэширования. |
CPSignHash() |
Возвращает значение электронной цифровой подписи от значения функции хэширования. |
CPVerifySignature() |
Осуществляет проверку цифровой подписи, соответствующей объекту функции хэширования. |
