Cryptography API: Next Generation
Cryptography API: Next Generation (сокращённо CNG, также BCrypt — по имени основной библиотеки) — это криптографический интерфейс прикладного программирования (API) в операционных системах Microsoft Windows, начиная с Windows Vista и Windows Server 2008. CNG является преемником устаревшей CryptoAPI (CAPI) и предоставляет разработчикам и системным компонентам единый, модульный и расширяемый набор функций для шифрования, хеширования, цифровых подписей, генерации случайных чисел и управления ключами. API спроектирован для поддержки современных криптоалгоритмов, включая алгоритмы, одобренные Национальным институтом стандартов и технологий США (NIST), а также для соответствия требованиям Федерального стандарта обработки информации (FIPS 140-2).
История и предпосылки создания
Криптографическая подсистема Windows долгое время базировалась на CryptoAPI (CAPI), впервые представленной в Windows NT 4.0 (1996 год). К середине 2000-х годов CAPI продемонстрировала ряд архитектурных ограничений:
- Закрытая архитектура: CAPI использовала провайдеры криптографических служб (CSP), которые были монолитными и трудно расширяемыми. Замена или добавление одного алгоритма требовала замены всего CSP.
- Ограниченная поддержка алгоритмов: CAPI изначально была ориентирована на алгоритмы 1990-х годов (RSA, DES, MD5, SHA-1) и не имела встроенной поддержки эллиптической криптографии (ECC), алгоритмов Advanced Encryption Standard (AES) с длинными ключами и новых хеш-функций, таких как SHA-2 и SHA-3.
- Проблемы с производительностью: Многопоточная работа с CAPI была затруднена из-за глобального состояния, хранящегося в CSP.
- Отсутствие поддержки аппаратного ускорения: CAPI не имела унифицированного интерфейса для использования аппаратных криптографических модулей (например, TPM или специализированных плат расширения).
Разработка CNG началась в середине 2000-х годов как часть инициативы по модернизации ядра безопасности Windows. Первая публичная версия была включена в Windows Vista (2006 год) и Windows Server 2008. В последующих версиях Windows (7, 8, 10, 11) CNG постоянно расширялась, добавляя поддержку новых алгоритмов (например, Curve25519, Ed25519 в Windows 10 версии 1903) и улучшая интеграцию с другими компонентами ОС.
Архитектура и ключевые компоненты
Архитектура CNG является модульной и основана на модели поставщика (provider model). В отличие от CAPI, где криптографические функции были встроены в CSP, CNG разделяет логику на несколько уровней.
Основные библиотеки (DLL)
- BCrypt.dll (Cryptographic Primitives Library): Ядро CNG. Предоставляет базовые криптографические примитивы: симметричное и асимметричное шифрование, хеширование, генерацию случайных чисел, создание и проверку цифровых подписей. Название происходит от «Basic Cryptography».
- NCrypt.dll (Key Storage and Retrieval): Отвечает за хранение, извлечение и управление ключами. Поддерживает как программное хранение (через Key Storage Provider — KSP), так и аппаратное (через смарт-карты, TPM, HSM). NCrypt также реализует функции для работы с сертификатами и протоколами, такими как SSL/TLS.
- Cryptographic Service Provider (CSP) Bridge: Обеспечивает обратную совместимость, позволяя приложениям, написанным для CAPI, использовать провайдеры CNG.
Модель провайдеров (Providers)
CNG использует два типа провайдеров:
- Algorithm Providers (Primitives Providers): Реализуют конкретные алгоритмы (например, AES, RSA, SHA-256). Они регистрируются в системе и могут быть заменены или дополнены сторонними разработчиками. Каждый провайдер может поддерживать несколько алгоритмов.
- Key Storage Providers (KSP): Отвечают за безопасное хранение ключей. Стандартный программный KSP (Microsoft Software Key Storage Provider) хранит ключи в зашифрованном виде в реестре или файловой системе. Аппаратные KSP обеспечивают работу с ключами, которые никогда не покидают защищённое устройство (например, TPM).
Ключевые отличия от CryptoAPI (CAPI)
| Характеристика | CryptoAPI (CAPI) | Cryptography API: Next Generation (CNG) |
|---|---|---|
| Архитектура | Монолитная (CSP) | Модульная (провайдеры алгоритмов и KSP) |
| Поддержка алгоритмов | Ограничена (RSA, DES, MD5, SHA-1) | Широкая (AES, ECC, SHA-2/3, ChaCha20, Poly1305) |
| Управление ключами | Встроено в CSP | Отдельный слой (KSP) |
| Многопоточность | Проблематична (глобальное состояние) | Поддерживается (каждый провайдер имеет своё состояние) |
| Аппаратное ускорение | Ограничено | Встроенная поддержка через KSP и аппаратные провайдеры |
| Расширяемость | Сложная (замена всего CSP) | Простая (добавление нового провайдера) |
| Стандарты | FIPS 140-1 (устаревший) | FIPS 140-2 (актуальный) |
Основные функции и возможности
CNG предоставляет широкий набор криптографических операций, которые можно разделить на несколько категорий.
Симметричное шифрование
Поддерживаются все основные блочные и поточные шифры, включая:
- AES (с размерами ключей 128, 192, 256 бит) в режимах ECB, CBC, CFB, OFB, CCM, GCM, XTS.
- 3DES (Triple DES) для обратной совместимости.
- ChaCha20 (современный поточный шифр, добавлен в Windows 10).
- RC4 (устаревший, не рекомендуется к использованию).
Асимметричное шифрование и цифровые подписи
- RSA (с размерами ключей до 4096 бит и более).
- Эллиптическая криптография (ECC) с поддержкой стандартных кривых (NIST P-256, P-384, P-521) и современных кривых (Curve25519, Ed25519 — добавлены в Windows 10 версии 1903).
- DSA (Digital Signature Algorithm) для обратной совместимости.
- Диффи-Хеллмана (DH) и эллиптический вариант (ECDH) для обмена ключами.
Хеширование и аутентификация сообщений
- SHA-1, SHA-256, SHA-384, SHA-512 (семейство SHA-2).
- SHA-3 (добавлен в Windows 11 версии 22H2).
- MD2, MD4, MD5 (устаревшие, только для обратной совместимости).
- HMAC (Hash-based Message Authentication Code) на основе любого поддерживаемого хеша.
Генерация случайных чисел
CNG предоставляет криптографически стойкий генератор псевдослучайных чисел (CSPRNG), реализованный в функции BCryptGenRandom. Этот генератор использует энтропию из системных источников (например, процессорный генератор случайных чисел RDRAND, системные прерывания) и соответствует стандартам NIST SP 800-90A.
Управление ключами и сертификатами
- Создание, импорт, экспорт и удаление ключей через KSP.
- Поддержка контейнеров ключей (key containers) для долговременного хранения.
- Интеграция с хранилищем сертификатов Windows (Certificate Store).
- Поддержка аппаратных ключей (смарт-карты, TPM, HSM) через сторонние KSP.
Применение в Windows и сторонних приложениях
CNG является фундаментом для всех криптографических операций в современных версиях Windows.
Системные компоненты
- BitLocker Drive Encryption: Использует CNG для шифрования дисков (AES-XTS) и управления ключами восстановления.
- Secure Boot и Measured Boot: Используют CNG для проверки цифровых подписей загрузчиков и измерения целостности системы.
- Windows Hello и Biometric Authentication: Используют CNG для генерации и хранения ключей на TPM.
- Schannel (Secure Channel): Реализация протоколов SSL/TLS в Windows использует CNG для всех криптографических операций.
- IPsec (Internet Protocol Security): Использует CNG для шифрования и аутентификации сетевых пакетов.
Разработка приложений
Разработчики могут использовать CNG через Win32 API (функции BCrypt и NCrypt) или через обёртки, такие как .NET Framework (класс System.Security.Cryptography). CNG позволяет создавать:
- Приложения для защищённого обмена сообщениями.
- Системы электронного документооборота с цифровыми подписями.
- Клиенты и серверы VPN.
- Программные и аппаратные криптографические модули.
Безопасность и соответствие стандартам
CNG спроектирована с учётом современных требований безопасности. Она поддерживает:
- FIPS 140-2: Microsoft предоставляет сертифицированные версии CNG для использования в государственных учреждениях США и других странах, требующих соответствия этому стандарту.
- Suite B: Набор криптографических алгоритмов, рекомендованных АНБ США, полностью поддерживается в CNG.
- Изоляция ключей: Аппаратные KSP (например, TPM) гарантируют, что закрытые ключи никогда не покидают защищённую среду.
- Защита от побочных каналов: Реализации алгоритмов в CNG включают меры против атак по времени и по энергопотреблению (например, постоянное время выполнения для сравнения MAC-кодов).
Критика и ограничения
Несмотря на значительные улучшения по сравнению с CAPI, CNG имеет ряд недостатков:
- Сложность API: Для разработчиков, не знакомых с криптографией, CNG может показаться излишне сложным из-за большого количества параметров и структур.
- Обратная совместимость: Некоторые старые приложения, написанные для CAPI, не могут быть легко перенесены на CNG без переписывания кода. CSP Bridge решает эту проблему частично, но не для всех сценариев.
- Зависимость от платформы: CNG является проприетарным API, привязанным к Windows. Приложения, использующие CNG, не могут быть легко перенесены на другие операционные системы (Linux, macOS) без использования кроссплатформенных библиотек (например, OpenSSL).
- Документация: Документация Microsoft по CNG, хотя и обширна, иногда считается недостаточно структурированной и содержит мало примеров для сложных сценариев.
Источники
- Microsoft Docs: Cryptography API: Next Generation (CNG).
- Microsoft Docs: CNG Architectural Overview.
- Microsoft Docs: BCrypt Functions.
- Microsoft Docs: NCrypt Functions.
- Книга: «Windows Internals, Part 1» (7th Edition) — Pavel Yosifovich, Alex Ionescu, Mark E. Russinovich, David A. Solomon.
- Статья: «Cryptography API: Next Generation» — Wikipedia (английская версия).
- Спецификация: NIST SP 800-90A (Recommendation for Random Number Generation Using Deterministic Random Bit Generators).
- Спецификация: FIPS PUB 140-2 (Security Requirements for Cryptographic Modules).
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →