Лекция 6. Криптопровайдеры. API для работы с криптосервисами Windows

  • doc
  • 26.04.2020
Публикация на сайте для учителей

Публикация педагогических разработок

Бесплатное участие. Свидетельство автора сразу.
Мгновенные 10 документов в портфолио.

Иконка файла материала 0205. Лекция 6. Криптопровайдеры. API для работы с криптосервисами Windows.doc

Лекция 6. Криптопровайдеры. API для работы с криптосервисами Windows

Цель лекции

·                             Рассмотреть круг задач, на решение которых ориентирован CryptoAPI

·                             Изучить архитектуру CryptoAPI и CNG API

·                             Рассмотреть различные типы криптопровайдеров

·                             Изучить функции и механизм работы DPAPI

Текст лекции

Взрывное развитие электронной коммерции резко усилило потребность в надежных алгоритмах шифрования для защиты конфиденциальной информации. Продолжающаяся эволюция средств защиты способствует появлению новых криптографических сервисов. Современные операционные системы Microsoft содержат множество криптографических подсистем различного назначения как прикладного уровня, так и уровня ядра. Ключевую роль в Windows 2000Windows XPWindows ME играет интерфейс CryptoAPI ( Cryptography APICAPI ). В основе шифрования Windows Vista и Server 2008 лежит новый API шифрования, называемый CNG API ( Cryptography Next Generation - новое поколение криптографии) [9.1]. Первый выпуск CNG в рамках криптографической инфраструктуры предоставляет интерфейсы API и среду, позволяющие добавлять в Windows новые алгоритмы для использования с протоколами Secure Sockets Layer / Transport Layer Security SSL / TLS ) и IPSec ; в будущем планируется реализовать поддержку других возможностей, например S / MIME и EFS. В конечном итоге Microsoft будет использовать этот новый API вместо текущего CryptoAPI, но в Vista и Server 2008 старый и новый API сосуществуют (в основном для совместимости со старыми приложениями).

В данном разделе мы рассмотрим CryptoAPI, после чего перейдем к обзору функциональности CNG. Кроме того, мы уделим внимание интерфейсу DPAPIWindows, начиная с версии 2000, поддерживает встроенный механизм для хранения и защиты секретов. Этот механизм использует машинный ключ, сгенерированный при инсталляции системы специально для шифрования данных. Только локальная операционная система (локальный системный центр авторизации) имеет доступ к машинному ключу. Машинный ключ уникален для каждой инсталляцииWindows поддерживает программный интерфейс Data Protection API для защиты данных этим ключом. Использование этого API не дает прямого доступа к этому ключу, а позволяет отдавать системе команды зашифровать/расшифровать некоторую информацию с использованием этого ключа. Другим вариантом является использование ключа, сгенерированного для текущего пользователя.

Cryptographic Application Programming Interface (CryptoAPI)

Интерфейс Microsoft CryptoAPl 2.0 содержит как функции, осуществляющие базовые криптографические преобразования, так и функции, реализующие преобразования более высокого уровня - работу с сертификатами Х.509, работу с криптографическими сообщениями PKCS#7 [9.49.5] и другие функции, поддерживающие так называемую инфраструктуру открытых ключей ( Public Key Infrastructure ). Набор функций из CryptoAPI 2.0, реализующих базовые криптографические преобразования ( base cryptography functions ), называют также CryptoAPI 1.0 [9.2]. Функции высокого уровня, предназначенные для реализации криптографических преобразований, вызывают именно функции CryptoAPI 1.0. Таким образом, именно интерфейс CryptoAPI 1.0 является криптографическим ядром прикладного уровня современных операционных систем Microsoft.

Круг задач, на решение которых ориентирован CryptoAPI [9.3]:

·                             надежное сокрытие данных;

·                             возможность передачи сокрытых данных третьим лицам;

·                             надежная система проверки достоверности пришедшей от третьих лиц информации;

·                             расшифровывание полученных конфиденциальных данных;

·                             работа с "идентификационными удостоверениями" третьих лиц;

·                             обеспечение работы с признанными криптографическими стандартами;

·                             возможность расширения и работы с пока еще неизвестными алгоритмами.

Реализация всех алгоритмов полностью выведена из состава CryptoAPI и реализуется в независимых динамических библиотеках - " криптопровайдерах " (см. раздел " Криптопровайдеры "). CryptoAPI предоставляет конечному пользователю унифицированный интерфейс работы с функциями криптопровайдера.

CryptoAPI достаточно полно поддерживает набор стандартов "PKCS" [9.6], предложенный компанией RSA Security, и позволяет формировать криптографические приложения, которые могут быть обработаны в дальнейшем любыми программными продуктами. В подсистемах уровня ядра базовые криптографические преобразования происходят непосредственно в драйверах, реализующих эти подсистемы. Функции CryptoAPI в таких случаях используются для вспомогательных операций на прикладном уровне.

Общая архитектура CryptoAPI состоит из пяти основных функциональных групп (см. рис. 9.1):

1.              Базовые криптографические функции:

o          функции шифрования/расшифровывания данных;

o          функции хеширования и получения цифровой подписи данных;

o          функции инициализации криптопровайдера и работы с полученным контекстом;

o          функции генерации ключей;

o          функции обмена ключами.

2.              Функции кодирования/декодирования. Под кодированием в данном случае подразумевается получение на выходе информации, кодированной в формате ASN.1 ( Abstract Syntax Notation One ).

3.              Функции работы с сертификатами.

4.              Высокоуровневые функции обработки криптографических сообщений.

5.              Низкоуровневые функции обработки криптографических сообщений.

Архитектура CrypotAPI


Рис. 9.1. Архитектура CrypotAPI

Для доступа к CryptoAPI можно использовать CAPICOMCAPICOM предоставляет COM интерфейс, использующий основные функции CryptoAPI. Этот компонент является добавлением к COM -интерфейсу Certificate Enrollment Control xenroll ), который реализуют клиентские функции генерации ключей, запросов на сертификаты и обмена с центром сертификации. Данный компонент позволяет получать доступ к функциям формирования и проверки электронной цифровой подписи, построения и проверки цепочек сертификатов, взаимодействия с различными справочниками сертификатов (включая Active Directory ) с использованием Visual BasicC++JavaScriptVBScript и среды разработки DelphiCAPICOM доступен в операционных системах Windows Server 2008VistaWindows XPWindows MeWindows 2000 и Windows 98. В последующих версиях в него могут быть внесены изменения; также неисключено, что Microsoft совсем откажется от использования этого компонента. В связи с этим для реализации криптографической функциональности рекомендуется использовать средства .NET Framework.

Cryptography Next Generation API (CNG)

Служба CNG предоставляет набор интерфейсов API для выполнения основных криптографических операций и благодаря своей модульной архитектуре позволяет создавать, обновлять и использовать собственные алгоритмы шифрования в таких приложениях и технологиях, как служба сертификации Active Directory, технологии SSL и IPsec. Разработчики получают больший контроль над выполнением криптографических операций и совместной работой алгоритмов.

CNG поддерживает все алгоритмы, предлагаемые CryptoAPI, а также новые алгоритмы, включая алгоритмы шифрования, цифровых подписей, обмена ключами и хеширования, перечисленные в своде правил Suite B Агентства национальной безопасности США [9.7] - например, такие алгоритмы, как алгоритм хеширования SHA-256 и алгоритмы шифрования на основе эллиптических кривых ( ECC ). Алгоритмы Suite B используются в службах Certificate Services, чтобы генерировать сертификаты и защитить архив частных ключей в базе данных СА. Чтобы издавать сертификаты с алгоритмами Suite B, в инфраструктуре PKI Windows Vista и Server 2008 расширены свойства шаблона сертификата. Шаблоны сертификата - заготовки сертификатов различных типов, которые может выпускать удостоверяющий центринтегрированный со службой Active Directory (удостоверяющим центром предприятия).

На рис. 9.2 [9.1] приведена общая схема CNGBCrypt ('B' - сокр. от 'base', базовый) - это подмножество CNG, которое предоставляет такие примитивы криптографии, как средства генерации случайных чисел, функции хеширования, подписи и ключи шифрованияNCrypt ('N' - сокр. от 'new', новый) обеспечивает механизмы сохранения асимметричных ключей и поддержки аппаратных средств, таких как смарт-картыBCrypt и NCrypt - имена заголовочных файлов и DLL, предоставляющих базовые сервисы для CNG и высокоуровневую функциональность для хранения ключей соответственно.

Архитектура CNG


Рис. 9.2. Архитектура CNG

В версиях Windows, предшествующих Vista, криптографические технологии, такие как CryptoAPI, работали только в пользовательском режиме, в то время как режим ядра требовал применения совсем других API -интерфейсов. CNG содержит универсальный набор API -интерфейсов, которые впервые предоставляют общую инфраструктуру шифрования для приложений как пользовательского режима, так и режима ядра. Исключение составляют механизмы хранения ключей, предоставляемые NCrypt: они доступны только приложениям пользовательского режима.

Существует два основных подхода к примитивам криптографии, обеспечиваемых CNG [9.1]. В первом подходе они рассматриваются как набор логических объектов, предоставляющих методы, которые можно вызывать, и свойства, которые можно запрашивать и иногда изменять. К этим объектам относятся поставщики алгоритмов, функции хеширования, ключи и секретные соглашения. При другом подходе CNG рассматривается как программный маршрутизатор, или посредник для операций криптографииИнтерфейс API CNG строится на основе набора логических интерфейсов криптографии. В качестве примера можно использовать интерфейс хеширования, в котором нет жестко закодированной реализации конкретного алгоритма хеширования. В большинстве интерфейсов API криптографии используется подход, основанный на алгоритмах, в то время как в CNG используется подход, основанный на интерфейсах. Такой подход обеспечивает большую гибкость как для разработчика, так и для администратора, которым может потребоваться заменить алгоритм, используемый приложением, но оказавшийся ошибочным после выпуска приложения. На рис. 9.3 [9.1] приведено представление CNG на основе интерфейсов.

CNG позволяет разработчикам запрашивать алгоритмы, не указывая поставщиков алгоритмов. Это позволяет администраторам перенастраивать приложения с целью использования других реализаций (подробнее см. раздел "Шаблоны использования криптографических функций в корпоративных приложениях").

Интерфейсы CNG


Рис. 9.3. Интерфейсы CNG

Windows Vista и Server 2008 располагают новым общим провайдером услуг шифрования для подсистем смарт-карт различных поставщиков ( Base Smart Card Cryptographic Service ProviderBase CSP ). Кроме того, новая инфраструктура CNG включает провайдеры хранилищ ключей ( Key Storage ProviderKSP ) для смарт-карт. Благодаря новому общему провайдеру Base CSP поставщики смарт-карт могут быстро и без труда интегрировать свое программное обеспечение с операционной системой Windows без необходимости разработки сложных собственных провайдеров - достаточно небольших модулей, которые встраиваются в архитектуру смарт-карт WindowsМодуль, написанный поставщиком смарт-карт для интеграции своего криптопровайдера, позволит интегрировать и хранилище ключей (см. рис. 9.4 [9.8]).

Инфраструктура Base CSP


Рис. 9.4. Инфраструктура Base CSP

Другое изменение Windows Vista и Server 2008, относящееся к смарт-картам и удобное для пользователей и администраторов, - расширенная поддержка приложений. Например, в файловой системе EFS смарт-карты могут применяться для надежного хранения частного ключа EFS пользователя.

Криптопровайдеры

Криптопровайдер ( Cryptographic Service ProviderCSP ) - это независимый программный модульинтегрированный в MS Windows и содержащий библиотеку криптографических функций со стандартизованным интерфейсом. Криптопровайдер предназначен для авторизации, обеспечения конфиденциальности и юридической значимости электронных документов при обмене ими между пользователями, контроля целостности информации и др.

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

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

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

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

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

Кроме различия в реализуемых стандартах, криптопровайдеры отличаются способом физической организации ключевой базы. С точки зрения программирования, способ физической организации ключевой базы значения не имеет. Однако он весьма важен с точки зрения эксплуатации и безопасности системыКриптопровайдеры могут хранить свою ключевую базу на жестком диске (в Реестре или в файлах) или на смарт-картах. Тем не менее, логическая структура организации ключевой базы, которая, в отличие от физической, определяется самим интерфейсом, для всех криптопровайдеров одинакова. Ключевая база представляется набором ключевых контейнеров (см. рис. 9.1). Каждый ключевой контейнер имеет имя, которое присваивается ему при создании, а затем используется для работы с ним. В ключевом контейнере сохраняется долговременная ключевая информация. В криптопровайдерах Microsoft долговременными являются ключевые пары цифровой подписи и несимметричного обмена ключами, которые также генерируются функциями CryptoAPI.

Криптопровайдер выполняет следующие криптографические функции:

·                             формирование/проверка электронной цифровой подписи (ЭЦП),

·                             шифрование информации,

·                             хранение ключей всех типов.

Таблица 9.1. Криптопровайдеры

Провайдер

Описание

Microsoft Base Cryptographic Provider

Включает большой набор криптографических функций; может экспортироваться за пределы США

Microsoft Strong Cryptographic Provider

Расширяет Microsoft Base Cryptographic Provider ; доступен, начиная с версии Windows 2000

Microsoft Enhanced Cryptographic Provider

Представляет собой Microsoft Base Cryptographic Provider с более длинными ключами и дополнительными криптоалгоритмами.

Microsoft AES Cryptographic Provider

Microsoft Enhanced Cryptographic Provider с поддержкой AES

Microsoft DSS Cryptographic Provider

Предоставляет функции хеширования, генерации и проверки ЭЦП с использованием алгоритмов Secure Hash Algorithm ( SHA ) и Digital Signature Standard DSS )

Microsoft Base DSS and Diffie-Hellman Cryptographic Provider

Помимо функциональности DSS Cryptographic Provider, поддерживает схему обмена ключами Диффи-Хеллмана

Microsoft Enhanced DSS and Diffie-Hellman Cryptographic Provider

Поддерживает схему обмена ключами Диффи-Хеллмана, функции хеширования, генерации и проверки ЭЦП, соответствующие стандарту FIPS 186-2, симметричное шифрование на базе RC4

Microsoft DSS and Diffie-Hellman/Schannel Cryptographic Provide r

Поддерживает хеширование и ЭЦП на базе DSS ; схему обмена ключами Диффи-Хеллмана, генерацию и экспорт этих ключей; получение ключей для протоколов SSL3 и TLS1

Microsoft RSA/Schannel Cryptographic Provider

Поддерживает хеширование и ЭЦП, а также получение ключей для протоколов SSL2PCT1SSL3 и TLS1

Microsoft RSA Signature Cryptographic Provider

Предоставляет функциональность для реализации ЭЦП

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

В составе ОС Windows пользователь получает несколько CSP, которые реализуют наиболее часто используемые методы шифрования. Наряду со стандартными криптопровайдерами, поставляемыми Microsoft (см. табл. 9.1), можно использовать CSP собственной разработки, предварительно сертифицировав его. Например, согласно действующему на территории России законодательству, если организация использует стандартные криптопровайдеры Windows (несертифицированные в России криптографические алгоритмы шифрования и ЭЦП данных), она не может вести обмен документами с государственными учреждениями. Обеспечить юридическую значимость электронных документов при обмене ими между пользователями позволит использование сертифицированного ФСБ криптопровайдера.

Data Protection API (DPAPI)

.NET 2.0 включает отдельные функции для защиты секретной информации на локальной машине или для каждого пользователя посредством полностью управляемых оболочек программного интерфейса Windows Data Protection API ( DPAPI ).

Любое приложение, работающее под ОС Windows, может защитить свои данные посредством обращения к соответствующим функциям DPAPIDPAPI - простой в использовании сервис, полезный разработчикам, когда нужно обеспечить защиту секретных данных приложения - например, паролей или ключей.

Схема работы DPAPI


Рис. 9.5. Схема работы DPAPI

Интерфейс DPAPI является частью crypt32.dll и доступен всем процессам, загрузившим эту библиотеку; crypt32.dll, в свою очередь, является частью CryptoAPIПриложение либо передает открытый текст DPAPI и получает результат зашифрования, либо передает зашифрованный блок бинарных данных и получает результат расшифрования. Процесс схематически изображен на рис. 9.5 [9.9].

Когда приложение обращается к функциям DPAPI, происходит локальный вызов удаленных процедур ( Remote Procedure CallRPC ) локального доверенного центра Local Security Authority ( LSA ). LSA - это системный процесс, существующий с момента загрузки системы вплоть до выключения компьютера. Локальные RPC -вызовы никогда не проходят по сети, поэтому все данные остаются на локальной машине. Конечные точки этих RPC -вызовов - это обращение в private -функциям DPAPI для скрытия или раскрытия данных. Непосредственно зашифрование/расшифрование данных в контексте безопасности LSA эти функции осуществляют посредством обратного вызова CryptoAPI через crypt32.dll.

LSA также включает функции системного уровня для работы с DPAPI. Эти функции доступны любым потокам, запущенным внутри этого LSA, и только им, позволяя LSA -потокам защищать пользовательские данные, которые не должны быть доступны другим потокам, также использующим DPAPI - например, пользовательским приложениям.

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

Чтобы предотвратить ситуацию, когда каждое приложение имеет доступ не только к своим данным, но и к данным всех других приложений, работающих под учетной записью определенного пользователя, DPAPI позволяет приложениям использовать дополнительный "секрет" для защиты своих данных, знание которого необходимо для их расшифрования. Этот "секрет" можно назвать "вторичной энтропией" (secondary entropy): "вторичность" означает, что "секрет" не повышает стойкость ключа шифрования, однако затрудняет доступ к данным для приложений, работающих под той же учетной записью пользователя.

Изначально DPAPI генерирует стойкий ключ, называемый MasterKey (мастер-ключ), для защиты которого используется пароль пользователя. DPAPI использует стандартный процесс под названием "Password-Based Key Derivation", описанный в PKCS #5 [9.10]. Мастер-ключ шифруется ключом, сгенерированным на базе пароля пользователя, с использованием алгоритма TripleDES, и хранится в директории с другими параметрами пользователя.

Для защиты данных используется не мастер-ключ в явном виде, а симметричный сеансовый ключ, который создается на основе мастер-ключа, неких случайных данных и, опционально, дополнительной энтропии (если приложение предоставляет это значение). Сеансовый ключ никогда не сохраняется. Вместо этого в бинарном блоке, содержащем зашифрованные данные, сохраняются случайные данные, использованные при генерации сеансового ключа, что позволяет DPAPI создать его заново при необходимости расшифровать данные.

В целях безопасности каждые три месяца срок действия мастер-ключа истекает, и генерируется новый ключDPAPI никогда не удаляет "устаревшие" мастер-ключи, а хранит их в зашифрованном виде с другими параметрами учетной записи пользователя. В бинарном блоке с зашифрованными данными хранится глобально уникальный идентификатор ( Globally Unique IdentifierGUID ), позволяющий однозначно определить мастер-ключ, использованный для защиты данных.

При смене пароля пользователя DPAPI осуществляет два действия. Во-первых, все мастер-ключи зашифровываются ключом, сгенерированным на базе нового пароля. Во-вторых, старый пароль добавляется в файл " Credential History " в директории, используемой для хранения параметров пользователя. Этот файл шифруется с использованием нового ключа. При необходимости DPAPI может использовать текущий ключ для того, чтобы расшифровать " Credential History ", извлечь старый пароль и попытаться с его помощью расшифровать мастер-ключ. Если это не удается, " Credential History " расшифровывается ключом на основе "старого" пароля, извлекается пароль, который ему предшествовал, и т.д., пока не будет найден пароль, позволяющий расшифровать мастер-ключ.

Криптосервисы для устройств под управлением Windows CE и Windows Mobile

Windows Mobile предоставляет криптосервисы, которые позволяют разработчикам внедрять в приложения функции безопасности, в том числе - использовать CrypoAPIкриптопровайдеры, осуществлять выдачу сертификатов и управление ими, реализовывать настраиваемую инфраструктуру открытых ключей, использовать смарт-карты.

Windows CE включает три криптопровайдера:

·                             Microsoft RSA Base Provider ;

·                             Microsoft Enhanced Cryptographic Provider ;

·                             Smart Card CSP.

Начиная с версии Windows CE .NET 4.1криптопровайдером по умолчанию является Microsoft Enhanced Cryptographic Provider. Есть возможность добавлять собственные криптопровайдеры.

Подсистема поддержки смарт-карт на устройствах под управлением Windows CE, начиная с версии 5.0., обеспечивает связь между аппаратным обеспечением для чтения смарт-карт и приложениями, работающими с ними. Связь обеспечивается динамическими библиотеками ( DLL ), программным интерфейсом ( API ) для управления ресурсами смарт-карт и драйверами устройств для чтения смарт-карт.

Краткие итоги

В лекции подробно изучены принципы работы и архитектура интерфейса CryptoAPI и его преемника - CNG API. Указаны особенности использования технологии в нашей стране. Помимо этого, рассмотрены функции и механизм работы DPAPI


Скачано с www.znanio.ru

Посмотрите также