Cryptography Next Generation
Cryptography Next Generation (CNG) — это криптографический API (интерфейс прикладного программирования), входящий в состав операционных систем семейства Microsoft Windows, начиная с Windows Vista и Windows Server 2008. CNG пришёл на смену устаревшему API CryptoAPI (Cryptographic Application Programming Interface) и предназначен для обеспечения криптографических операций в приложениях, таких как шифрование, расшифрование, хеширование, создание и проверка цифровых подписей, а также генерация и управление ключами. Разработка CNG велась компанией Microsoft с целью создания модульной, расширяемой и соответствующей современным стандартам безопасности криптографической платформы.
История
Предшественник CNG, CryptoAPI, был представлен в Windows NT 4.0 в 1996 году и долгое время оставался основным криптографическим интерфейсом в Windows. Однако к середине 2000-х годов он устарел: не поддерживал алгоритмы, ставшие стандартами (например, AES с длиной ключа 256 бит, SHA-256, ECDSA), имел жёсткую архитектуру, затруднявшую добавление новых криптопровайдеров, и не соответствовал требованиям Федерального стандарта обработки информации США (FIPS 140-2) для работы в государственных учреждениях.
Разработка CNG началась в 2005 году под кодовым названием «CryptoAPI 2.0». Впервые API был включён в состав бета-версии Windows Vista (Longhorn) и стал доступен разработчикам в 2006 году. Окончательная версия вышла вместе с релизом Windows Vista 30 января 2007 года. В Windows 7 и Windows Server 2008 R2 CNG был значительно расширен: добавлена поддержка эллиптической криптографии (ECC), алгоритмов шифрования с аутентификацией (AES-GCM, AES-CCM) и улучшена интеграция с аппаратными модулями безопасности (HSM). В последующих версиях Windows (8, 8.1, 10, 11) CNG продолжал развиваться, включая поддержку новых алгоритмов, таких как Ed25519 и X25519, а также улучшенную работу с контейнерами ключей и управление сертификатами.
Архитектура и компоненты
CNG построен по модульному принципу, что отличает его от монолитного CryptoAPI. Основные компоненты архитектуры включают:
- CNG Provider Interface (CNG PI) — интерфейс для разработки криптопровайдеров. Провайдеры могут быть программными (реализующими алгоритмы на уровне ядра или пользовательского режима) или аппаратными (взаимодействующими с HSM, смарт-картами или TPM).
- Key Storage Provider (KSP) — провайдеры для хранения и управления ключами. Поддерживаются как программные контейнеры (реестр, файлы), так и аппаратные носители.
- Cryptographic Primitive Provider (CPP) — провайдеры для реализации базовых криптографических примитивов: симметричных и асимметричных алгоритмов, хеш-функций, генераторов случайных чисел.
- CNG API — набор функций, доступных приложениям через библиотеку
bcrypt.dll(для примитивов) иncrypt.dll(для хранения ключей и асимметричных операций).
Модульность позволяет сторонним разработчикам создавать собственные криптопровайдеры, которые могут быть зарегистрированы в системе и использоваться стандартными приложениями Windows без изменения кода последних. Это особенно важно для организаций, использующих сертифицированные криптографические алгоритмы (например, российские ГОСТ Р 34.10-2012 и ГОСТ Р 34.11-2012), которые могут быть реализованы в виде отдельного провайдера CNG.
Поддерживаемые алгоритмы
CNG поддерживает широкий спектр криптографических алгоритмов, соответствующих современным стандартам. Список алгоритмов, встроенных в Windows, включает:
Симметричное шифрование
- AES (Advanced Encryption Standard) с длинами ключей 128, 192 и 256 бит, в режимах ECB, CBC, CFB, OFB, GCM, CCM, XTS.
- DES (Data Encryption Standard) и Triple DES (3DES) — для обратной совместимости, но не рекомендуются к использованию.
- RC4 — устаревший потоковый шифр, отключён в Windows 10 версии 2004 и новее.
Асимметричное шифрование и цифровые подписи
- RSA (Rivest–Shamir–Adleman) с длинами ключей от 1024 до 16384 бит.
- DSA (Digital Signature Algorithm) — устаревший, поддерживается для совместимости.
- ECDSA (Elliptic Curve Digital Signature Algorithm) с кривыми NIST P-256, P-384, P-521, а также с кривыми Brainpool и Edwards (Ed25519, Ed448).
- ECDH (Elliptic Curve Diffie-Hellman) для обмена ключами.
- Diffie-Hellman (DH) — классический протокол обмена ключами.
Хеш-функции
- SHA-1, SHA-256, SHA-384, SHA-512 (семейство SHA-2).
- SHA-3 (поддерживается начиная с Windows 10 версии 1903).
- MD5, MD4, MD2 — устаревшие, поддерживаются для обратной совместимости.
- HMAC (Hash-based Message Authentication Code) на основе указанных хешей.
Генерация случайных чисел
- Криптостойкий генератор псевдослучайных чисел (CSPRNG), соответствующий стандартам FIPS 140-2 и NIST SP 800-90A.
Применение
CNG используется в различных компонентах операционной системы Windows и сторонних приложениях:
- BitLocker Drive Encryption — шифрование дисков с использованием AES через CNG.
- Windows Defender Application Guard — изоляция браузера и приложений с использованием криптографических операций CNG.
- Secure Boot — верификация загрузчиков и драйверов с помощью цифровых подписей, проверяемых через CNG.
- TLS/SSL — протоколы защиты сетевого трафика (например, в Internet Explorer, Microsoft Edge, IIS) используют CNG для шифрования и аутентификации.
- Сертификаты и PKI — управление сертификатами X.509, создание запросов на сертификат (CSR) и проверка цепочек сертификатов.
- Сторонние приложения — разработчики могут использовать CNG для реализации собственных криптографических функций, например, в банковских системах, электронном документообороте, VPN-клиентах.
Преимущества и недостатки
Преимущества
- Модульность — возможность добавления новых алгоритмов и провайдеров без изменения приложений.
- Совместимость с FIPS 140-2 — CNG сертифицирован для использования в государственных учреждениях США.
- Поддержка современных алгоритмов — ECC, AES-GCM, SHA-3, Ed25519.
- Интеграция с аппаратными модулями — TPM, смарт-карты, HSM.
- Производительность — оптимизация для многоядерных процессоров и аппаратного ускорения (например, инструкции AES-NI).
Недостатки
- Привязка к Windows — CNG не является кроссплатформенным решением.
- Сложность разработки — API требует глубокого понимания криптографии и управления памятью.
- Обратная совместимость — старые приложения, использующие CryptoAPI, не могут напрямую работать с CNG без модификации.
- Зависимость от версии ОС — некоторые алгоритмы (например, SHA-3) доступны только в новых версиях Windows.
Сравнение с CryptoAPI
| Характеристика | CryptoAPI | CNG |
|---|---|---|
| Архитектура | Монолитная | Модульная |
| Поддержка алгоритмов | Ограниченная (DES, RSA, SHA-1) | Широкая (AES, ECC, SHA-2/3, Ed25519) |
| Расширяемость | Только через CSP (Cryptographic Service Provider) | Через провайдеры CNG (KSP, CPP) |
| FIPS 140-2 | Сертифицирован (версия 1.0) | Сертифицирован (версия 2.0) |
| Аппаратная поддержка | Ограниченная | Полная (TPM, HSM, смарт-карты) |
| Управление ключами | Через реестр и файлы | Через KSP (включая аппаратные контейнеры) |
Безопасность
CNG разработан с учётом требований безопасности, включая защиту от атак по сторонним каналам (например, timing attacks) и использование криптостойких генераторов случайных чисел. В Windows 10 и 11 компания Microsoft внедрила механизмы изоляции ключей в защищённой памяти ядра, что затрудняет их извлечение даже при компрометации пользовательского режима. Однако, как и любое программное обеспечение, CNG не является абсолютно защищённым: уязвимости могут возникать из-за ошибок в реализации алгоритмов или в сторонних провайдерах. Регулярные обновления безопасности Windows устраняют выявленные проблемы.
Критика
Основные критические замечания в адрес CNG связаны с его закрытостью и привязкой к экосистеме Microsoft. Сторонние разработчики отмечают, что документация по API иногда неполна, а отладка провайдеров CNG сложна из-за ограниченных инструментов. Кроме того, в некоторых версиях Windows наблюдались проблемы с производительностью при работе с большими объёмами данных, особенно при использовании аппаратных провайдеров. В ответ Microsoft выпустила обновления, оптимизирующие работу CNG, и улучшила документацию начиная с Windows 10.
Интересные факты
- CNG поддерживает до 256 одновременных криптографических операций на одном процессоре, что позволяет эффективно использовать многоядерные системы.
- В Windows 10 версии 1809 была добавлена поддержка алгоритма Ed25519, который используется в блокчейн-технологиях и протоколах, таких как Signal.
- Некоторые российские криптопровайдеры, например, «КриптоПро CSP», реализуют алгоритмы ГОСТ через интерфейс CNG, что позволяет использовать их в стандартных приложениях Windows.
- CNG является частью платформы Windows, но также доступен для Windows Embedded и Windows IoT, что расширяет его применение во встраиваемых системах.
Источники
- Microsoft Docs. «Cryptography Next Generation (CNG)». Windows App Development.
- Microsoft Docs. «CNG Architectural Overview». Windows Server Documentation.
- NIST. «FIPS 140-2 Security Requirements for Cryptographic Modules».
- Русскоязычная документация Microsoft. «Обзор CNG (Cryptography Next Generation)».
- Статья «Cryptography Next Generation» в англоязычной Википедии (версия от 2023 года).
- Технический блог Microsoft. «Improvements in Cryptography Next Generation in Windows 10».
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →