Архивы: по дате | по разделам | по авторам

Крипто в операционных системах Microsoft

Архив
автор : МАКСИМ СМИРНОВ    22.02.2000

Порядок взаимодействия приложений с криптографическими модулями операционной системы регламентирует документ, который называется Microsoft Cryptographic Application Programming Interface ...

Архитектура Crypto API/CSP

Порядок взаимодействия приложений с криптографическими модулями операционной системы регламентирует документ, который называется Microsoft Cryptographic Application Programming Interface (MS Crypto API). Функции, описанные в нем, поддерживаются Windows 95/98, Windows NT и Windows 2000. В последней ОС функции Crypto API содержатся в модулях crypt32.dll и advapi32.dll. На самом деле эти модули не реализуют криптографические алгоритмы, а обращаются к другим модулям, называемым Cryptographic Service Providers (CSP). Одновременно в операционной системе можно установить несколько CSP. При первом обращении к Crypto API прикладная программа выбирает, с каким именно модулем CSP она будет работать, в зависимости от того, какие криптографические алгоритмы ей необходимы (см. рис. 1).


Не оспаривая преимущества такой архитектуры, следует обратить внимание на три тонких момента.

Во-первых, вы не сумеете просто так встроить в Windows разработанный вами CSP: чтобы этот модуль работал, его необходимо заверить цифровой подписью Microsoft [1].

Во-вторых, даже если вы получите лицензию и встроите свой CSP в Windows, прикладные программы сторонних разработчиков не обязаны использовать именно ваш CSP. Вы не обнаружите, например в Outlook Express, кнопку, позволяющую выбрать CSP для шифрования сообщения электронной почты. Outlook Express будет использовать только тот CSP, который в полном объеме реализует алгоритмы, рекомендуемые открытыми Internet-стандартами защиты электронной почты S/MIME. Конечно же, можно написать свою программу отправки e-mail-сообщений, которая будет вызывать ваш CSP, но сможете ли вы убедить пользователя работать именно с вашей программой?

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

Функциональность CRYPTO API

Целью Crypto API является предоставить разработчику программ универсальный способ для использования криптографических модулей, поэтому интерфейс не ограничен какими-либо конкретными алгоритмами. Модули Crypto API не содержат функций, позволяющих зашифровать текст, например, с использованием именно алгоритма DES. Выбор конкретного алгоритма задается параметрами функции и зависит от используемого CSP, а универсальный набор функций определен для каждого типа криптографических операций, основные из которых перечислены ниже.

Шифрование и расшифровка данных. Crypto API позволяет шифровать данные, размещенные в оперативной памяти в виде последовательности байтов. Для шифрования могут быть использованы как симметричные, так и асимметричные алгоритмы. В первом случае для шифрования и расшифровки [2] используются одинаковые ключи, во втором - разные. Ключ шифрования данных может быть известен многим (поэтому его обычно называют открытым ключом, public key), а ключ для расшифровки известен только одному лицу (личный, или закрытый, ключ, private key). Асимметричные алгоритмы используются для обмена сеансовыми ключами. Зашифровав сообщение электронной почты симметричным алгоритмом, вы добавляете к зашифрованному сообщению сам сеансовый ключ, зашифрованный на открытом ключе получателя с использованием асимметричного алгоритма. Это позволяет вам уничтожить сеансовый ключ сразу же после шифрования сообщения. Даже если ваш компьютер подвергнется взлому, злоумышленник все равно не узнает содержание сообщения. (Конечно же, если вы не оставили себе незашифрованную копию.)

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

Аутентификация. Аутентификация является важным средством обеспечения безопасности при взаимодействии через незащищенные сети. Суть аутентификации состоит в том, что вы требуете от другого участника взаимодействия определенных доказательств того, что он действительно является тем, за кого себя выдает. Вы должны быть абсолютно уверены, что запущенное вами приложение обменивается данными именно с тем сервером сети, с которым необходимо. Такая уверенность может быть достигнута только при использовании цифровых сертификатов (цифровых удостоверений) и соответствующих сетевых протоколов, базирующихся на криптографических методах. Цифровой сертификат является набором данных, который объединяет название организации или имя частного лица и его открытый ключ. Сертификаты формируются надежной организацией, называемой Certificate authority (орган сертификации, издательство сертификатов), только после того, как она проверит соответствие указанного в сертификате имени и открытого ключа. Чтобы избежать подделки, сертификаты заверяются цифровой подписью издателя сертификатов. Начиная с версии 2.0, Crypto API предоставляет набор функций для работы с цифровыми сертификатами и списками отозванных сертификатов (certificate revocation lists).

Кодирование и декодирование данных. Международные стандарты на формат зашифрованных или заверенных цифровой подписью сообщений электронной почты, формат цифровых сертификатов и ряд других объектов разработаны в абстрактной форме с использованием языка Abstract Syntax Notation One (ASN.1). Так, документ CCITT X.509, определяющий формат цифрового сертификата, описывает назначение и типы полей, которые должен включать сертификат, но не детализирует способ представления конкретных значений. Другие рекомендации определяют порядок представления сертификатов в двоичной или какой-либо другой форме, например, для передачи по электронной почте используется представление сертификатов в кодировке base64, не содержащей неотображаемых символов. Кроме того, абстрактное задание формата позволяет легко его расширять, не нарушая совместимость с предыдущими версиями программ. Crypto API содержит функции для работы с данными в форме ASN.1, преобразования таких данных в "родные" для Windows байтовые последовательности и обратного преобразования.

Выработка и хранение криптографических ключей. Защищенность ключей является обязательным условием использования криптографических средств. Функции выработки и хранения ключей возлагаются на CSP. Различные CPS реализуют различные меры безопасности при хранении ключей, например разграничение доступа к ключам средствами операционной системы, дополнительное шифрование ключа на пароле и пр. С Windows 2000 поставляются специальные CSP, которые позволяют хранить ключи на пластиковых картах.

Кроме того, стойкость зашифрованных данных зависит не только от алгоритма шифрования, но и от того, насколько случайно выбран ключ. Выработка действительно случайных ключей является большой проблемой. Для всех используемых ключей Crypto API предусматривает специальные функции экспорта и импорта, тем самым давая разработчику прикладной программы возможность расширять средства выработки ключей, предлагаемые CSP.

Что умеет CSP

Эффективность криптозащиты зависит не только от использования определенных механизмов (криптопротоколов), таких как шифрование или цифровая подпись, но и от выбора конкретных алгоритмов (криптопримитивов), реализуемых конкретным CSP. Список всех CSP (криптопровайдеров), установленных в Windows 2000, можно получить в разделе HKEY_LOCAL_MACHINE\SOFTWARE\ Microsoft\Cryptography\Defaults\Provider системного реестра Windows. Репертуары примитивов, реализуемых некоторыми CSP, приведены в таблице, и можно видеть, чем Base CSP, который до недавнего времени только и можно было экспортировать, отличается от полнофункционального Enhanced CSP, который поставлялся лишь "своим".

Большинство сетевых протоколов требует использования конкретных криптоалгоритмов. Для того чтобы прикладные программы соответствовали общепринятым стандартам, Crypto API вводит специальные типы CSP, например PROV_RSA_FULL или PROV_RSA_SCHANNEL. Криптопровайдер указанного типа должен реализовывать все криптоалгоритмы, определенные соответствующим стандартом. Так, к примеру, PROV_RSA_SCHANNEL используется для реализации протокола SSL и должен поддерживать алгоритм RSA для цифровой подписи и обмена ключами, алгоритмы хэширования SHA и MD5 и специальную функцию CALG_SSL3_SHAMD5.

Алгоритмы, реализуемые Microsoft Base CSP и Microsoft Enhanced CSP.

АлгоритмТип алгоритмаДлина ключа (для хэш-функции - размер блока)
Microsoft Base Cryptographic Provider v.1.0
RC2Шифрование (encrypt)40
RC4Шифрование (encrypt)40
DESШифрование (encrypt)56
SHA-1Хэширование (hash)160
MD2Хэширование (hash)128
MD4Хэширование (hash)128
MD5Хэширование (hash)128
SSL3 SHAMD5Хэширование (hash)288
MACХэширование (hash)64
RSA_SIGNЦифровая подпись (signature)512
RSA_KEYXШифрование сеансового ключа (exchange)512
HMACХэширование (hash)0
Microsoft Enchanced Cryptographic Provider v.1.0
RC2Шифрование (encrypt)128
RC4Шифрование (encrypt)128
DESШифрование (encrypt)56
3DES TWO KEYШифрование (encrypt)112
3DESШифрование (encrypt)168
SHA-1Хэширование (hash)160
MD2Хэширование (hash)128
MD4Хэширование (hash)128
MD5Хэширование (hash)128
SSL3 SHAMD5Хэширование (hash)288
MACХэширование (hash)64
RSA_SIGNЦифровая подпись (signature)1024
RSA_KEYXШифрование сеансового ключа (exchange)1024
HMACХэширование (hash)0


Технологии и приложения

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

Защищенная файловая система (Encrypted File System). Обычно к шифрованию файлов и дисков прибегают для обеспечения конфиденциальности данных, опасаясь того, что злоумышленник может получить физический доступ к жесткому диску компьютера. Иногда такая процедура полезна для предотвращения несанкционированного доступа к файлам при загрузке компьютера с флоппи-диска или с установленной на том же компьютере другой операционной системы. Защищенная файловая система (EFS) базируется на технологии шифрования с открытым ключом, поддерживаемой Crypto API. Для шифрования каждого файла используется симметричный алгоритм и уникальный ключ. Ключ шифрования файла зашифровывается на открытом ключе каждого из пользователей, которым разрешен доступ к файлу, и хранится вместе с файлом. Шифрование файлов возможно только на файловой системе NTFS. Работа с зашифрованными файлами возможна как на локальном, так и на удаленном компьютере и прозрачна для пользователя. Первоначальное шифрование файла или группы файлов осуществляется при помощи утилиты cipher.exe или функции интерфейса Windows Explorer.

Криптография при работе в сети. Архитектура взаимодействия открытых систем (ISO/OSI) предлагает рассматривать взаимодействие программ на разных уровнях или "слоях"; соответственно, в разных слоях реализуется и защита сетевых взаимодействий. В зависимости от уровня, на котором используются криптографические средства, информационная система может противостоять тем или иным атакам. Так, аутентификация на сетевом уровне позволит вам убедиться, что вы действительно работаете с нужным компьютером. Однако аутентифицировать конкретное приложение вы сможете только на транспортном уровне, а конкретного человека - на прикладном. Уровни защиты сетевых взаимодействий, реализованные в продуктах Microsoft, приведены на рис. 2.


Шифрование IP-трафика. Для обеспечения защиты данных на сетевом уровне Windows 2000 поддерживает протокол IPSec, утвержденный Рабочей группой инженеров Internet (IETF) в качестве стандартного расширения безопасности для протокола IP. IPSec поддерживает аутентификацию на сетевом уровне (аутентификацию хостов сети), конфиденциальность и целостность данных [3].

Защищенные соединения. Стандартом де-факто обеспечения безопасности для сетевых приложений, взаимодействующих в архитектуре "клиент-сервер" (таких как Web-приложения или системы электронной почты), является протокол SSL [4]. С незначительными изменениями он закреплен IETF в спецификации RFC2246 Transport Layer Security и рекомендован разработчикам Internet-приложений. Этот протокол обеспечивает аутентификацию взаимодействующих приложений, конфиденциальность и целостность передаваемой информации.

Программные продукты Microsoft, такие как Internet Explorer, Outlook Express, Internet Information Server, в общем соответствуют рекомендациям IETF RFC2246, однако на ряд моментов следует обратить внимание.

Во-первых, взаимная аутентификация клиента и сервера предусмотрена только в продуктах, реализующих протокол HTTP (Internet Explorer и IIS). Другие продукты Microsoft (такие как серверы SMTP и NNTP и почтовый клиент Outlook Express) реализуют SSL/TLS только в режиме аутентификации сервера. Во-вторых, в клиентских программах отсутствуют средства для выработки ключей и цифровых сертификатов, необходимых при использовании SSL/TLS протоколов [5].

Шифрование и цифровая подпись сообщений электронной почты. На сегодня существуют два открытых стандарта шифрования и цифровой подписи сообщений электронной почты: OpenPGP и S/MIME. Почтовые программы Microsoft Outlook и Outlook Express реализуют S/MIME. Для того чтобы заверять свои сообщения цифровой подписью, вам необходимо получить цифровой сертификат в формате X.509. Для шифрования сообщения необходимо наличие цифровых сертификатов его получателей. Нужно отметить, что последние версии почтовых программ Microsoft реализуют не только S/MIME (IETF RFC2633), но и расширения этой спецификации (IETF RFC2634), включающие, например, такой сервис, как достоверное подтверждение получения сообщения (квитирование) [6].

Подпись исполняемых модулей. Internet позволяет эффективно распространять программное обеспечение, но при этом возникает несколько очевидных угроз. Пользователь должен быть уверен в том, что программа не была изменена при передаче по Сети, а автором программы действительно является указанное лицо или фирма. Для решения этой задачи разработана технология authenticode, позволяющая добавлять цифровую подпись в файлы исполняемых модулей, динамически подключаемых библиотек и компонентов ActiveX. Любой разработчик программного обеспечения для Windows может выработать свой ключ цифровой подписи, получить сертификат authenticode и подписывать программы цифровой подписью. Широкое применение этой технологии способно существенно снизить распространение вирусов, а также увеличить ответственность разработчиков программ.

Инфраструктура открытых ключей. Роль криптографических средств в информационных системах постоянно растет. Сегодня уже совершенно недостаточно программ, которые умеют только шифровать или подписывать данные. Наиболее актуальными становятся средства, позволяющие эффективно распределять открытые ключи в больших информационных системах. IETF уже приняла ряд стандартов, объединенных общим названием "инфраструктура распределения открытых ключей" (Public Key Infrastructure, PKI). Для поддержки этих стандартов Microsoft предлагает продукт Certificate Server, входящий в поставку Windows 2000 Server.

Сейчас еще рано говорить о том, насколько удачным является этот продукт. Дело в другом. Сама концепция Crypto API, а также ее реализация в приложениях в сочетании с Certificate Server ориентированы на создание полноценных и самодостаточных безопасных информационных систем. Такие системы соответствуют Internet-стандартам и, следовательно, могут быть реализованы в Internet. По сути, завершается еще один цикл развития информационных технологий. Криптография, используемая недавно только в правительственных и финансовых приложениях, становится частью всех сетевых информационных систем. И, похоже, в Microsoft опять "угадали", сделав Crypto API частью своей операционной системы.



1 (обратно к тексту) - Как объясняет Microsoft, это сделано для того, чтобы Министерство торговли США (U.S. Department of Commerce) могло контролировать разработку криптомодулей для операционной системы Windows. Необходимым условием разработки CSP для неамериканских фирм является наличие специальной лицензии, выдаваемой Бюро экспортного контроля Министерства торговли США (U.S. Commerce Department, Bureau of Export Administration).

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

3 (обратно к тексту) - Подробнее о протоколе IPSec см. Максим Отставнов. "Ниже пояса" ("КТ" #315).

4 (обратно к тексту) - См. Максим Отставнов. "SSL: техника безопасного Web'а" ("КТ" #244).

5 (обратно к тексту) - Чтобы создать ключ для программ Internet Explorer или Outlook Express, необходимо либо самостоятельно написать программу, напрямую вызывающую функции Crypto API, либо воспользоваться ActiveX-компонентом xenroll.dll, входящим в состав Microsoft Certificate Server. Подробнее о выработке клиентских ключей и сертификатов см. статью "Цифровые сертификаты X.509v3 в IIS 5.0" (www.activeserverpages.ru/articles/article.asp?id=26).

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



© ООО "Компьютерра-Онлайн", 1997-2022
При цитировании и использовании любых материалов ссылка на "Компьютерру" обязательна.