Windows CryptoAPI
Windows CryptoAPI (также известная как Cryptographic Application Programming Interface, CAPI) — это программный интерфейс приложений, входящий в состав операционной системы Microsoft Windows, предназначенный для выполнения криптографических операций, таких как шифрование, расшифрование, хеширование, создание и проверка цифровых подписей, а также управление сертификатами. CryptoAPI предоставляет разработчикам единый набор функций для работы с криптографией, абстрагируя их от конкретных реализаций алгоритмов и аппаратных криптографических модулей.
История
CryptoAPI была впервые представлена компанией Microsoft в составе Windows NT 4.0 (1996 год) и Windows 95 OSR2 (1997 год). Её создание было обусловлено необходимостью стандартизации криптографических функций в экосистеме Windows, чтобы разработчики приложений могли безопасно использовать шифрование без необходимости интеграции сторонних библиотек. В последующих версиях Windows (2000, XP, Vista) интерфейс расширялся: добавлялись новые алгоритмы (например, поддержка AES в Windows Vista), улучшалась работа с сертификатами и хранилищами ключей.
Ключевым этапом развития стало появление Cryptography API: Next Generation (CNG) в Windows Vista (2006 год). CNG является эволюцией CryptoAPI, предлагая более гибкую архитектуру, поддержку современных алгоритмов (включая эллиптическую криптографию) и улучшенную изоляцию криптографических операций. Несмотря на это, классическая CryptoAPI (CAPI) остаётся доступной для обратной совместимости и используется в устаревших приложениях.
Архитектура и компоненты
CryptoAPI построена по модульному принципу и состоит из нескольких ключевых компонентов:
Криптографические сервис-провайдеры (CSP)
Основой CryptoAPI являются криптографические сервис-провайдеры (CSP) — программные или аппаратные модули, реализующие конкретные криптографические алгоритмы. Каждый CSP представляет собой библиотеку DLL, зарегистрированную в системе, и предоставляет набор функций для шифрования, хеширования, подписи и генерации ключей. Windows поставляется с несколькими встроенными CSP, включая:
- Microsoft Base Cryptographic Provider — поддерживает алгоритмы RC2, RC4, DES, MD5, SHA-1.
- Microsoft Enhanced Cryptographic Provider — расширенная версия с поддержкой 128-битных ключей.
- Microsoft Strong Cryptographic Provider — поддерживает AES, 3DES, SHA-256/384/512.
- Microsoft Smart Card Key Storage Provider — для работы с аппаратными токенами и смарт-картами.
Разработчики могут создавать собственные CSP для интеграции уникальных алгоритмов или аппаратных устройств (например, HSM — аппаратные модули безопасности).
Хранилища сертификатов
CryptoAPI включает систему управления сертификатами X.509, которая организует их в логические хранилища (certificate stores). Основные хранилища:
- My (личные сертификаты пользователя).
- Root (доверенные корневые центры сертификации).
- CA (промежуточные центры сертификации).
- Trusted Publishers (доверенные издатели программного обеспечения).
Хранилища могут быть локальными (для текущего пользователя) или машинными (для всех пользователей системы). Операции с сертификатами (импорт, экспорт, поиск, проверка цепочек) выполняются через функции CryptoAPI.
Функции шифрования и хеширования
CryptoAPI предоставляет функции для:
- Симметричного шифрования — алгоритмы RC2, RC4, DES, 3DES, AES (через CSP).
- Асимметричного шифрования — RSA, Diffie-Hellman (для обмена ключами).
- Хеширования — MD5, SHA-1, SHA-2 (256, 384, 512), а также HMAC (хеширование с ключом).
- Цифровых подписей — создание и проверка подписей с использованием RSA или DSA.
Управление ключами
Ключи могут быть временными (сессионными) или постоянными (хранящимися в CSP). CryptoAPI поддерживает генерацию ключей, их импорт/экспорт в защищённом формате (например, через PFX/PKCS#12), а также привязку к сертификатам.
Применение
CryptoAPI широко используется в операционной системе Windows и сторонних приложениях для обеспечения безопасности:
Защита данных
- Шифрование файлов — через EFS (Encrypting File System), которая использует CryptoAPI для шифрования файлов на NTFS-томах.
- Шифрование дисков — BitLocker (в более поздних версиях Windows) использует CNG, но в ранних реализациях опирался на CAPI.
- Защита сетевого трафика — протоколы TLS/SSL в Windows (например, в Internet Explorer или IIS) используют CryptoAPI для управления сертификатами и выполнения криптографических операций.
Аутентификация и подписи
- Цифровые подписи кода — Authenticode, используемый для подписания исполняемых файлов (.exe, .dll) и драйверов, базируется на CryptoAPI.
- Аутентификация пользователей — через смарт-карты и сертификаты (например, в Active Directory или VPN).
- Подпись электронной почты — S/MIME (Secure/Multipurpose Internet Mail Extensions) использует CryptoAPI для подписи и шифрования сообщений.
Безопасность приложений
Разработчики вызывают функции CryptoAPI (например, CryptEncrypt, CryptDecrypt, CryptHashData, CryptSignMessage) для интеграции криптографии в свои программы. Это позволяет создавать защищённые каналы связи, хранить пароли в хешированном виде, проверять целостность данных.
Критика и уязвимости
Несмотря на широкое распространение, CryptoAPI подвергалась критике по нескольким причинам:
Проблемы безопасности
- Уязвимость CVE-2020-0601 (январь 2020 года) — в реализации проверки сертификатов ECC (эллиптической криптографии) в Windows CryptoAPI (CNG) была обнаружена ошибка, позволявшая злоумышленникам подделывать цифровые подписи, выдавая себя за доверенные центры сертификации. Уязвимость затрагивала Windows 10, Windows Server 2016/2019 и была закрыта в экстренном обновлении.
- Уязвимость CVE-2001-0342 — в ранних версиях CryptoAPI (Windows 2000) была найдена проблема с генерацией случайных чисел, что делало ключи предсказуемыми.
- Отсутствие поддержки современных алгоритмов в классической CAPI (например, ECDSA, Ed25519) — это ограничение было устранено в CNG, но устаревшие приложения остаются уязвимыми.
Ограничения архитектуры
- Сложность управления CSP — регистрация и настройка сторонних CSP может быть нетривиальной.
- Проблемы с обратной совместимостью — некоторые функции CAPI устарели, но продолжают использоваться, что создаёт риск для безопасности.
- Зависимость от реализации CSP — если CSP содержит ошибки, это может скомпрометировать все операции, выполняемые через него.
Критика со стороны сообщества
- Закрытость исходного кода — до 2019 года Microsoft не публиковала исходный код CryptoAPI, что затрудняло аудит безопасности. В 2019 году компания открыла часть кода CNG на GitHub.
- Политика экспортных ограничений — в 1990-х годах Microsoft была вынуждена поставлять версии CryptoAPI с ослабленным шифрованием (40-битные ключи) для экспорта в страны, не входящие в зону свободной торговли США, что снижало безопасность.
Сравнение с CNG
Cryptography API: Next Generation (CNG) — это преемник CryptoAPI, представленный в Windows Vista. Основные отличия:
- Модульная архитектура — CNG использует модель поставщиков (providers), которые могут быть заменены без изменения кода приложения.
- Поддержка современных алгоритмов — ECDSA, ECDH, AES-GCM, SHA-3 (начиная с Windows 10).
- Улучшенная изоляция — криптографические операции выполняются в режиме ядра или пользовательском режиме с минимальными привилегиями.
- Поддержка аппаратного ускорения — через TPM (Trusted Platform Module) и HSM.
Несмотря на преимущества CNG, классическая CryptoAPI остаётся критически важной для обратной совместимости с приложениями, написанными до Windows Vista.
Интересные факты
- CryptoAPI стала основой для реализации PKI (Public Key Infrastructure) в Windows, включая службы сертификации Active Directory Certificate Services.
- В 2002 году Microsoft выпустила Windows XP Service Pack 2, который значительно усилил безопасность CryptoAPI, добавив проверку цепочек сертификатов по умолчанию.
- Уязвимость CVE-2020-0601, известная как «CurveBall», была обнаружена Агентством национальной безопасности США (NSA) и могла использоваться для атак на критическую инфраструктуру.
- В Windows 10 и Windows 11 Microsoft рекомендует использовать CNG вместо CAPI для новых разработок, но классическая CryptoAPI остаётся доступной для совместимости.
Источники
- Microsoft Docs: «Cryptography API (CryptoAPI)» — документация по функциям и архитектуре.
- Microsoft Security Response Center: «CVE-2020-0601» — описание уязвимости и исправления.
- «Windows Internals, Part 1» (7th edition) — Pavel Yosifovich, Mark Russinovich, David Solomon, Alex Ionescu.
- «Cryptography in the Windows Operating System» — статья в журнале «MSDN Magazine» (2005).
- «A History of Windows Cryptography» — блог Microsoft Security (2019).
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →