Спонсор: Microsoft
Опубликован: 25.06.2010 | Уровень: специалист | Доступ: платный
Лекция 6:

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

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

Криптопровайдер ( 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 (несертифицированные в России криптографические алгоритмы шифрования и ЭЦП данных), она не может вести обмен документами с государственными учреждениями. Обеспечить юридическую значимость электронных документов при обмене ими между пользователями позволит использование сертифицированного ФСБ криптопровайдера.

Data Protection API (DPAPI)

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

Любое приложение, работающее под ОС Windows, может защитить свои данные посредством обращения к соответствующим функциям DPAPI. 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 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

Евгений Виноградов
Евгений Виноградов

Прошел экстерном экзамен по курсу перепордготовки "Информационная безопасность". Хочу получить диплом, но не вижу где оплатить? Ну и соответственно , как с получением бумажного документа?

Илья Сидоркин
Илья Сидоркин

Добрый день! Подскажите пожалуйста как и когда получить диплом, после сдичи и оплаты?????

Денис Овчинников
Денис Овчинников
Россия
Павел Артамонов
Павел Артамонов
Россия, Москва, Московский университет связи и информатики, 2016