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

CryptoAPI 2.0

CryptoAPI 2.0 — это набор криптографических интерфейсов прикладного программирования (API), разработанный компанией Microsoft для операционных систем семейства Windows, начиная с Windows 2000. Он является эволюционным развитием оригинальной CryptoAPI 1.0 и предоставляет разработчикам унифицированные средства для выполнения операций шифрования, хеширования, создания и проверки цифровых подписей, а также управления сертификатами X.509. В отличие от предшественника, CryptoAPI 2.0 был ориентирован на более высокий уровень абстракции, в частности, на упрощение работы с инфраструктурой открытых ключей (PKI) и сертификатами.

История

Первая версия CryptoAPI (1.0) была представлена Microsoft в 1996 году в составе Windows NT 4.0 и Windows 95 OSR2. Она предоставляла базовые криптографические функции, однако требовала от разработчика глубокого понимания криптографических алгоритмов и ручного управления памятью. Основным недостатком CryptoAPI 1.0 была сложность работы с сертификатами и цепочками сертификатов, а также отсутствие встроенной поддержки многих современных на тот момент стандартов.

CryptoAPI 2.0 была выпущена вместе с Windows 2000 (февраль 2000 года) и стала неотъемлемой частью платформы Windows. Главным нововведением стала интеграция с Certificate Store (хранилищем сертификатов) и Certificate Services (службами сертификации). Это позволило разработчикам не реализовывать логику проверки цепочек сертификатов вручную, а делегировать её операционной системе. В последующих версиях Windows (XP, Vista, 7) CryptoAPI 2.0 подвергалась незначительным изменениям, в основном связанным с поддержкой новых алгоритмов (например, AES в Windows Vista) и улучшением производительности.

В Windows 8 и Windows Server 2012 Microsoft представила новую криптографическую платформу — Cryptography API: Next Generation (CNG), которая постепенно заменила CryptoAPI 2.0. Однако CNG сохранила обратную совместимость с функциями CryptoAPI 2.0, и многие приложения, написанные для более старых версий Windows, продолжают использовать старый интерфейс.

Архитектура и компоненты

CryptoAPI 2.0 построена по модульному принципу и состоит из нескольких ключевых компонентов:

Криптографические провайдеры (CSP)

Базовым элементом CryptoAPI является Crypto Service Provider (CSP) — программный или аппаратный модуль, реализующий конкретные криптографические алгоритмы. CSP может быть как встроенным в ОС (например, Microsoft Base Cryptographic Provider, Microsoft Enhanced Cryptographic Provider), так и сторонним (например, от производителей аппаратных токенов или смарт-карт). Каждый CSP имеет уникальное имя и тип, а также поддерживает определённый набор алгоритмов. Разработчик взаимодействует с CSP через единый набор функций, не заботясь о деталях реализации алгоритмов.

Хранилище сертификатов (Certificate Store)

CryptoAPI 2.0 ввела концепцию логических хранилищ сертификатов, которые могут располагаться как в реестре Windows, так и в файлах или на аппаратных носителях. Основные хранилища:

  • MY (Личное) — сертификаты, связанные с закрытыми ключами пользователя или компьютера.
  • CA (Промежуточные центры сертификации) — сертификаты промежуточных удостоверяющих центров.
  • ROOT (Доверенные корневые центры сертификации) — сертификаты корневых УЦ, которым доверяет система.
  • SPC (Издатели программного обеспечения) — сертификаты, используемые для подписи кода.

Функции CryptoAPI 2.0 позволяют открывать, закрывать, добавлять, удалять и перечислять сертификаты в этих хранилищах, а также выполнять автоматическую проверку цепочек сертификатов до доверенного корневого УЦ.

Функции подписи и проверки

CryptoAPI 2.0 предоставляет высокоуровневые функции для создания и проверки цифровых подписей. Ключевые из них:

  • CryptSignMessage — создаёт подписанное сообщение в формате PKCS#7.
  • CryptVerifyMessageSignature — проверяет подпись сообщения.
  • CryptSignAndEncodeCertificate — подписывает и кодирует сертификат.

Эти функции автоматически управляют выбором CSP, хешированием и форматированием подписи, что значительно упрощает код разработчика.

Функции шифрования и дешифрования

Для симметричного и асимметричного шифрования используются функции:

  • CryptEncrypt и CryptDecrypt — для шифрования/дешифрования данных с использованием ключа, полученного из CSP.
  • CryptGenKey — для генерации случайных ключей.
  • CryptExportKey и CryptImportKey — для экспорта/импорта ключей в защищённом виде (часто в формате, совместимом с PKCS#8 или PKCS#12).

Применение

CryptoAPI 2.0 широко использовалась в следующих сценариях:

  1. Подпись кода (Authenticode) — технология Microsoft, позволяющая подписывать исполняемые файлы (.exe, .dll, .cab) для подтверждения их подлинности и целостности. CryptoAPI 2.0 обеспечивала создание и проверку таких подписей.
  2. Защищённая электронная почта (S/MIME) — шифрование и подпись сообщений в почтовых клиентах, таких как Microsoft Outlook.
  3. SSL/TLS — хотя в Windows для работы с SSL/TLS используется отдельный стек (Schannel), он также опирается на CryptoAPI 2.0 для управления сертификатами и выполнения криптографических операций.
  4. Шифрование файлов (EFS)файловая система EFS в Windows 2000 и XP использовала CryptoAPI 2.0 для шифрования файлов и управления ключами.
  5. Приложения .NET Framework — ранние версии .NET Framework (до 4.0) использовали CryptoAPI 2.0 через обёртку System.Security.Cryptography.

Критика и ограничения

Несмотря на широкое распространение, CryptoAPI 2.0 имела ряд недостатков, которые привели к созданию CNG:

  • Сложность расширения — добавление нового алгоритма требовало написания полноценного CSP, что было трудоёмко и требовало глубоких знаний архитектуры Windows.
  • Отсутствие поддержки современных алгоритмов — изначально CryptoAPI 2.0 поддерживала только RSA, RC4, RC2, DES и MD5. Поддержка AES была добавлена только в Windows Vista, а ECC (эллиптическая криптография) — лишь в Windows 7 через отдельные обновления.
  • Проблемы с производительностью — при большом количестве одновременных операций CryptoAPI 2.0 могла создавать узкие места из-за блокировок на уровне хранилища сертификатов.
  • Ограниченная поддержка аппаратного ускорения — хотя CSP мог использовать аппаратные модули, API не предоставлял универсального способа для работы с современными аппаратными криптографическими ускорителями.

Наследие и переход на CNG

Начиная с Windows 8, Microsoft рекомендует использовать Cryptography API: Next Generation (CNG) для всех новых разработок. CNG предоставляет более гибкую архитектуру, поддержку ECC, AES-GCM, SHA-3, а также улучшенную производительность и возможность динамической загрузки алгоритмов. Однако CryptoAPI 2.0 остаётся доступной в Windows 10 и Windows 11 для обеспечения обратной совместимости. Многие старые приложения, особенно корпоративные, до сих пор используют CryptoAPI 2.0, и Microsoft не планирует её удалять из системы.

Источники

  1. Microsoft Developer Network (MSDN) — документация по CryptoAPI 2.0 (архивные разделы).
  2. "Windows Internals, Part 1" (6th edition) by Mark Russinovich, David A. Solomon, Alex Ionescu — глава, посвящённая криптографическим службам Windows.
  3. "Cryptography for Developers" by Tom St Denis — раздел, описывающий архитектуру CryptoAPI.
  4. Спецификация PKCS#7 (RFC 2315) и PKCS#12 (RFC 7292) — стандарты, реализованные в CryptoAPI 2.0.

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

На главную BFOmetr →