Лекция 6. Криптопровайдеры. API для работы с криптосервисами Windows
· Рассмотреть круг задач, на решение которых ориентирован CryptoAPI
· Изучить архитектуру CryptoAPI и CNG API
· Рассмотреть различные типы криптопровайдеров
· Изучить функции и механизм работы DPAPI
Взрывное развитие электронной коммерции резко усилило потребность в надежных алгоритмах шифрования для защиты конфиденциальной информации. Продолжающаяся эволюция средств защиты способствует появлению новых криптографических сервисов. Современные операционные системы Microsoft содержат множество криптографических подсистем различного назначения как прикладного уровня, так и уровня ядра. Ключевую роль в Windows 2000, Windows XP, Windows ME играет интерфейс CryptoAPI ( Cryptography API, CAPI ). В основе шифрования 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. Кроме того, мы уделим внимание интерфейсу DPAPI. Windows, начиная с версии 2000, поддерживает встроенный механизм для хранения и защиты секретов. Этот механизм использует машинный ключ, сгенерированный при инсталляции системы специально для шифрования данных. Только локальная операционная система (локальный системный центр авторизации) имеет доступ к машинному ключу. Машинный ключ уникален для каждой инсталляции. Windows поддерживает программный интерфейс Data Protection API для защиты данных этим ключом. Использование этого API не дает прямого доступа к этому ключу, а позволяет отдавать системе команды зашифровать/расшифровать некоторую информацию с использованием этого ключа. Другим вариантом является использование ключа, сгенерированного для текущего пользователя.
Интерфейс Microsoft CryptoAPl 2.0 содержит как функции, осуществляющие базовые криптографические преобразования, так и функции, реализующие преобразования более высокого уровня - работу с сертификатами Х.509, работу с криптографическими сообщениями PKCS#7 [9.4, 9.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. Низкоуровневые функции обработки криптографических сообщений.
Рис. 9.1. Архитектура CrypotAPI
Для доступа к CryptoAPI можно использовать CAPICOM. CAPICOM предоставляет COM интерфейс, использующий основные функции CryptoAPI. Этот компонент является добавлением к COM -интерфейсу Certificate Enrollment Control ( xenroll ), который реализуют клиентские функции генерации ключей, запросов на сертификаты и обмена с центром сертификации. Данный компонент позволяет получать доступ к функциям формирования и проверки электронной цифровой подписи, построения и проверки цепочек сертификатов, взаимодействия с различными справочниками сертификатов (включая Active Directory ) с использованием Visual Basic, C++, JavaScript, VBScript и среды разработки Delphi. CAPICOM доступен в операционных системах Windows Server 2008, Vista, Windows XP, Windows Me, Windows 2000 и Windows 98. В последующих версиях в него могут быть внесены изменения; также неисключено, что Microsoft совсем откажется от использования этого компонента. В связи с этим для реализации криптографической функциональности рекомендуется использовать средства .NET Framework.
Служба 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] приведена общая схема CNG. BCrypt ('B' - сокр. от 'base', базовый) - это подмножество CNG, которое предоставляет такие примитивы криптографии, как средства генерации случайных чисел, функции хеширования, подписи и ключи шифрования. NCrypt ('N' - сокр. от 'new', новый) обеспечивает механизмы сохранения асимметричных ключей и поддержки аппаратных средств, таких как смарт-карты. BCrypt и NCrypt - имена заголовочных файлов и DLL, предоставляющих базовые сервисы для 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 позволяет разработчикам запрашивать алгоритмы, не указывая поставщиков алгоритмов. Это позволяет администраторам перенастраивать приложения с целью использования других реализаций (подробнее см. раздел "Шаблоны использования криптографических функций в корпоративных приложениях").
Рис. 9.3. Интерфейсы CNG
Windows Vista и Server 2008 располагают новым общим провайдером услуг шифрования для подсистем смарт-карт различных поставщиков ( Base Smart Card Cryptographic Service Provider, Base CSP ). Кроме того, новая инфраструктура CNG включает провайдеры хранилищ ключей ( Key Storage Provider, KSP ) для смарт-карт. Благодаря новому общему провайдеру Base CSP поставщики смарт-карт могут быстро и без труда интегрировать свое программное обеспечение с операционной системой Windows без необходимости разработки сложных собственных провайдеров - достаточно небольших модулей, которые встраиваются в архитектуру смарт-карт Windows. Модуль, написанный поставщиком смарт-карт для интеграции своего криптопровайдера, позволит интегрировать и хранилище ключей (см. рис. 9.4 [9.8]).
Рис. 9.4. Инфраструктура Base CSP
Другое изменение Windows Vista и Server 2008, относящееся к смарт-картам и удобное для пользователей и администраторов, - расширенная поддержка приложений. Например, в файловой системе EFS смарт-карты могут применяться для надежного хранения частного ключа EFS пользователя.
Криптопровайдер ( Cryptographic Service Provider, CSP ) - это независимый программный модуль, интегрированный в 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 |
Поддерживает хеширование и ЭЦП, а также получение ключей для протоколов SSL2, PCT1, SSL3 и TLS1 |
Microsoft RSA Signature Cryptographic Provider |
Предоставляет функциональность для реализации ЭЦП |
Каждый криптопровайдер характеризуется собственным именем и типом. Имя - это строка, по которой система распознает криптопровайдер. Тип криптопровайдера - это целое число, значение которого идентифицирует набор поддерживаемых алгоритмов [9.2]. В общем случае, тип криптопровайдера ничего не сигнализирует обычному пользователю и служит лишь для вспомогательной группировки провайдеров. Исключение составляет тип PROV_RSA_FULL (его номер - 1), который присваивают себе только те криптопровайдеры, которые полностью поддерживают работу со стандартом RSA.
В составе ОС Windows пользователь получает несколько CSP, которые реализуют наиболее часто используемые методы шифрования. Наряду со стандартными криптопровайдерами, поставляемыми Microsoft (см. табл. 9.1), можно использовать CSP собственной разработки, предварительно сертифицировав его. Например, согласно действующему на территории России законодательству, если организация использует стандартные криптопровайдеры Windows (несертифицированные в России криптографические алгоритмы шифрования и ЭЦП данных), она не может вести обмен документами с государственными учреждениями. Обеспечить юридическую значимость электронных документов при обмене ими между пользователями позволит использование сертифицированного ФСБ криптопровайдера.
.NET 2.0 включает отдельные функции для защиты секретной информации на локальной машине или для каждого пользователя посредством полностью управляемых оболочек программного интерфейса Windows Data Protection API ( DPAPI ).
Любое приложение, работающее под ОС Windows, может защитить свои данные посредством обращения к соответствующим функциям DPAPI. DPAPI - простой в использовании сервис, полезный разработчикам, когда нужно обеспечить защиту секретных данных приложения - например, паролей или ключей.
Рис. 9.5. Схема работы DPAPI
Интерфейс DPAPI является частью crypt32.dll и доступен всем процессам, загрузившим эту библиотеку; crypt32.dll, в свою очередь, является частью CryptoAPI. Приложение либо передает открытый текст DPAPI и получает результат зашифрования, либо передает зашифрованный блок бинарных данных и получает результат расшифрования. Процесс схематически изображен на рис. 9.5 [9.9].
Когда приложение обращается к функциям DPAPI, происходит локальный вызов удаленных процедур ( Remote Procedure Call, RPC ) локального доверенного центра 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 Identifier, GUID ), позволяющий однозначно определить мастер-ключ, использованный для защиты данных.
При смене пароля пользователя DPAPI осуществляет два действия. Во-первых, все мастер-ключи зашифровываются ключом, сгенерированным на базе нового пароля. Во-вторых, старый пароль добавляется в файл " Credential History " в директории, используемой для хранения параметров пользователя. Этот файл шифруется с использованием нового ключа. При необходимости DPAPI может использовать текущий ключ для того, чтобы расшифровать " Credential History ", извлечь старый пароль и попытаться с его помощью расшифровать мастер-ключ. Если это не удается, " Credential History " расшифровывается ключом на основе "старого" пароля, извлекается пароль, который ему предшествовал, и т.д., пока не будет найден пароль, позволяющий расшифровать мастер-ключ.
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
Материалы на данной страницы взяты из открытых источников либо размещены пользователем в соответствии с договором-офертой сайта. Вы можете сообщить о нарушении.