CryptoAPI 2.0
CryptoAPI 2.0 — это набор криптографических интерфейсов прикладного программирования (API), разработанный компанией Microsoft для операционных систем семейства Windows, начиная с Windows 2000. Он является эволюционным развитием оригинальной CryptoAPI 1.0 и предоставляет разработчикам унифицированные средства для выполнения операций шифрования, хеширования, создания и проверки цифровых подписей, а также управления сертификатами X.509. В отличие от предшественника, CryptoAPI 2.0 был ориентирован на более высокий уровень абстракции, в частности, на упрощение работы с инфраструктурой открытых ключей (PKI) и сертификатами.
История
Первая версия CryptoAPI (1.0) была представлена Microsoft в 1996 году в составе Windows NT 4.0 и Windows 95 OSR2. Она предоставляла базовые криптографические функции, однако требовала от разработчика глубокого понимания криптографических алгоритмов и ручного управления памятью. Основным недостатком CryptoAPI 1.0 была сложность работы с сертификатами и цепочками сертификатов, а также отсутствие встроенной поддержки многих современных на тот момент стандартов.
CryptoAPI 2.0 была выпущена вместе с Windows 2000 (февраль 2000 года) и стала неотъемлемой частью платформы Windows. Главным нововведением стала интеграция с Certificate Store (хранилищем сертификатов) и Certificate Services (службами сертификации). Это позволило разработчикам не реализовывать логику проверки цепочек сертификатов вручную, а делегировать её операционной системе. В последующих версиях Windows (XP, Vista, 7) CryptoAPI 2.0 подвергалась незначительным изменениям, в основном связанным с поддержкой новых алгоритмов (например, AES в Windows Vista) и улучшением производительности.
В Windows 8 и Windows Server 2012 Microsoft представила новую криптографическую платформу — Cryptography API: Next Generation (CNG), которая постепенно заменила CryptoAPI 2.0. Однако CNG сохранила обратную совместимость с функциями CryptoAPI 2.0, и многие приложения, написанные для более старых версий Windows, продолжают использовать старый интерфейс.
Архитектура и компоненты
CryptoAPI 2.0 построена по модульному принципу и состоит из нескольких ключевых компонентов:
Криптографические провайдеры (CSP)
Базовым элементом CryptoAPI является Crypto Service Provider (CSP) — программный или аппаратный модуль, реализующий конкретные криптографические алгоритмы. CSP может быть как встроенным в ОС (например, Microsoft Base Cryptographic Provider, Microsoft Enhanced Cryptographic Provider), так и сторонним (например, от производителей аппаратных токенов или смарт-карт). Каждый CSP имеет уникальное имя и тип, а также поддерживает определённый набор алгоритмов. Разработчик взаимодействует с CSP через единый набор функций, не заботясь о деталях реализации алгоритмов.
Хранилище сертификатов (Certificate Store)
CryptoAPI 2.0 ввела концепцию логических хранилищ сертификатов, которые могут располагаться как в реестре Windows, так и в файлах или на аппаратных носителях. Основные хранилища:
- MY (Личное) — сертификаты, связанные с закрытыми ключами пользователя или компьютера.
- CA (Промежуточные центры сертификации) — сертификаты промежуточных удостоверяющих центров.
- ROOT (Доверенные корневые центры сертификации) — сертификаты корневых УЦ, которым доверяет система.
- SPC (Издатели программного обеспечения) — сертификаты, используемые для подписи кода.
Функции CryptoAPI 2.0 позволяют открывать, закрывать, добавлять, удалять и перечислять сертификаты в этих хранилищах, а также выполнять автоматическую проверку цепочек сертификатов до доверенного корневого УЦ.
Функции подписи и проверки
CryptoAPI 2.0 предоставляет высокоуровневые функции для создания и проверки цифровых подписей. Ключевые из них:
- CryptSignMessage — создаёт подписанное сообщение в формате PKCS#7.
- CryptVerifyMessageSignature — проверяет подпись сообщения.
- CryptSignAndEncodeCertificate — подписывает и кодирует сертификат.
Эти функции автоматически управляют выбором CSP, хешированием и форматированием подписи, что значительно упрощает код разработчика.
Функции шифрования и дешифрования
Для симметричного и асимметричного шифрования используются функции:
- CryptEncrypt и CryptDecrypt — для шифрования/дешифрования данных с использованием ключа, полученного из CSP.
- CryptGenKey — для генерации случайных ключей.
- CryptExportKey и CryptImportKey — для экспорта/импорта ключей в защищённом виде (часто в формате, совместимом с PKCS#8 или PKCS#12).
Применение
CryptoAPI 2.0 широко использовалась в следующих сценариях:
- Подпись кода (Authenticode) — технология Microsoft, позволяющая подписывать исполняемые файлы (.exe, .dll, .cab) для подтверждения их подлинности и целостности. CryptoAPI 2.0 обеспечивала создание и проверку таких подписей.
- Защищённая электронная почта (S/MIME) — шифрование и подпись сообщений в почтовых клиентах, таких как Microsoft Outlook.
- SSL/TLS — хотя в Windows для работы с SSL/TLS используется отдельный стек (Schannel), он также опирается на CryptoAPI 2.0 для управления сертификатами и выполнения криптографических операций.
- Шифрование файлов (EFS) — файловая система EFS в Windows 2000 и XP использовала CryptoAPI 2.0 для шифрования файлов и управления ключами.
- Приложения .NET Framework — ранние версии .NET Framework (до 4.0) использовали CryptoAPI 2.0 через обёртку
System.Security.Cryptography.
Критика и ограничения
Несмотря на широкое распространение, CryptoAPI 2.0 имела ряд недостатков, которые привели к созданию CNG:
- Сложность расширения — добавление нового алгоритма требовало написания полноценного CSP, что было трудоёмко и требовало глубоких знаний архитектуры Windows.
- Отсутствие поддержки современных алгоритмов — изначально CryptoAPI 2.0 поддерживала только RSA, RC4, RC2, DES и MD5. Поддержка AES была добавлена только в Windows Vista, а ECC (эллиптическая криптография) — лишь в Windows 7 через отдельные обновления.
- Проблемы с производительностью — при большом количестве одновременных операций CryptoAPI 2.0 могла создавать узкие места из-за блокировок на уровне хранилища сертификатов.
- Ограниченная поддержка аппаратного ускорения — хотя CSP мог использовать аппаратные модули, API не предоставлял универсального способа для работы с современными аппаратными криптографическими ускорителями.
Наследие и переход на CNG
Начиная с Windows 8, Microsoft рекомендует использовать Cryptography API: Next Generation (CNG) для всех новых разработок. CNG предоставляет более гибкую архитектуру, поддержку ECC, AES-GCM, SHA-3, а также улучшенную производительность и возможность динамической загрузки алгоритмов. Однако CryptoAPI 2.0 остаётся доступной в Windows 10 и Windows 11 для обеспечения обратной совместимости. Многие старые приложения, особенно корпоративные, до сих пор используют CryptoAPI 2.0, и Microsoft не планирует её удалять из системы.
Источники
- Microsoft Developer Network (MSDN) — документация по CryptoAPI 2.0 (архивные разделы).
- "Windows Internals, Part 1" (6th edition) by Mark Russinovich, David A. Solomon, Alex Ionescu — глава, посвящённая криптографическим службам Windows.
- "Cryptography for Developers" by Tom St Denis — раздел, описывающий архитектуру CryptoAPI.
- Спецификация PKCS#7 (RFC 2315) и PKCS#12 (RFC 7292) — стандарты, реализованные в CryptoAPI 2.0.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →