API шифрования: следующее поколение

Цель

API шифрования: следующее поколение (CNG) является долгосрочной заменой cryptoAPI. CNG разработан с возможностью расширения на разных уровнях, а его поведение не зависит от конкретных криптографических алгоритмов.

Аудитория разработчика

CNG предназначен для использования разработчиками приложений, которые позволят пользователям создавать и обмениваться документами и другими данными в безопасной среде, особенно в небезопасных носителях, таких как Интернет. Разработчики должны быть знакомы с языками программирования C и C++ и средой программирования на основе Windows. Хотя это и не обязательно, рекомендуется знание криптографии и тем, связанных с безопасностью.

Если вы разрабатываете поставщик криптографических алгоритмов CNG или поставщик хранилища ключей, необходимо скачать пакет средств разработки поставщиков шифрования от Майкрософт.

Требования к среде выполнения

CNG поддерживается начиная с Windows Server 2008 и Windows Vista. Сведения о требованиях среды выполнения для определенного элемента программирования см. в разделе "Требования " эталонной страницы для этого элемента.

В этом разделе

В следующих разделах содержатся сведения о CNG и его использовании в приложениях:

Тема Описание
О CNG Описание функций CNG, криптографических примитивов и хранилища ключей, извлечения, импорта и экспорта.
Использование CNG Объясняет, как использовать функции конфигурации шифрования для CNG и типичного программирования CNG.
Справочник по CNG Подробные описания элементов программирования CNG. Эти страницы содержат справочные описания API для работы с CNG.

Когда следует использовать CNG

Используйте CNG, если требуется прямой контроль над криптографическими операциями в Windows приложениях. Следующие рекомендации помогут выбрать соответствующий API:

Scenario Рекомендуемый API
Симметричное шифрование и расшифровка (AES, ChaCha20-Poly1305) CNG (BCryptEncrypt / BCryptDecrypt)
Хэширование (SHA-256, SHA-384, SHA-512) CNG (BCryptCreateHash)
Асимметричные операции (RSA, ECDSA, ML-DSA) CNG (BCryptSignHash, BCryptVerifySignature)
Защита данных пользователя при хранении (в контексте отдельного пользователя или всего компьютера) DPAPI (проще, управление ключами не требуется)
Защита данных, доступных нескольким пользователям или компьютерам DPAPI-NG (NCryptProtectSecret)
ПОДКЛЮЧЕНИЯ TLS/SSL Schannel (внутренне использует CNG)
Устаревший код, который уже использует CryptoAPI Продолжайте использовать CryptoAPI для обслуживания, но запланируйте миграцию на CNG для новых функций

Warning

Распространенные криптографические ловушки, чтобы избежать:

  • Не используйте режим блочного шифра ECB — он раскрывает шаблоны открытого текста. Используйте CBC со случайным вектором инициализации (IV) или, что предпочтительнее, аутентифицированный режим, например GCM.
  • Не следует жестко кодировать ключи шифрования в исходном коде. Используйте поставщики хранилища ключей или DPAPI для защиты ключей.
  • Не используйте MD5 или SHA-1 для обеспечения целостности или безопасности. Используйте SHA-256 или сильнее.
  • Всегда проверяйте коды возврата из функций CNG. Сбой криптографической операции, которая автоматически игнорируется, может привести к хранению незашифрованных данных.

Комплект средств разработки поставщиков шифрования

CryptoAPI