Открыть сервис

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 использует два типа провайдеров:

  1. Algorithm Providers (Primitives Providers): Реализуют конкретные алгоритмы (например, AES, RSA, SHA-256). Они регистрируются в системе и могут быть заменены или дополнены сторонними разработчиками. Каждый провайдер может поддерживать несколько алгоритмов.
  2. 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, хотя и обширна, иногда считается недостаточно структурированной и содержит мало примеров для сложных сценариев.

Источники

  1. Microsoft Docs: Cryptography API: Next Generation (CNG).
  2. Microsoft Docs: CNG Architectural Overview.
  3. Microsoft Docs: BCrypt Functions.
  4. Microsoft Docs: NCrypt Functions.
  5. Книга: «Windows Internals, Part 1» (7th Edition) — Pavel Yosifovich, Alex Ionescu, Mark E. Russinovich, David A. Solomon.
  6. Статья: «Cryptography API: Next Generation» — Wikipedia (английская версия).
  7. Спецификация: NIST SP 800-90A (Recommendation for Random Number Generation Using Deterministic Random Bit Generators).
  8. Спецификация: FIPS PUB 140-2 (Security Requirements for Cryptographic Modules).

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →