Поделиться через


Криптографические примитивы

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

CNG реализует множество криптографических алгоритмов. Каждый алгоритм или класс алгоритмов предоставляет собственный примитивный API. Одновременно можно установить несколько реализаций заданного алгоритма; однако только одна реализация будет использоваться по умолчанию в любое время.

Каждый класс алгоритма в CNG представлен примитивным маршрутизатором. Приложения, использующие примитивные функции CNG, будут связываться с двоичным файлом маршрутизатора Bcrypt.dll в пользовательском режиме или Ksecdd.sys в режиме ядра перед вызовом функций. Различные подпрограммы маршрутизатора управляют всеми примитивами алгоритмов. Эти маршрутизаторы отслеживают каждую реализацию алгоритма, установленную в системе, и перенаправят каждый вызов функции в соответствующий модуль поставщика примитивов.

CNG предоставляет примитивы для следующих классов алгоритмов.

Класс Алгоритма Описание
генератор случайных чисел
Подключаемое случайное поколение чисел (RNG).
Хэширование
Алгоритмы, используемые для хэширования, например SHA1 и SHA2.
симметричное шифрование
Алгоритмы, используемые для симметричного шифрования, например AES, 3DES и RC4.
асимметричное шифрование
Асимметричные алгоритмы (открытый ключ), поддерживающие шифрование, например RSA.
подпись
Алгоритмы подписи, такие как DSA и ECDSA. Этот класс также можно использовать с RSA.
соглашение о секрете
Алгоритмы секретного соглашения, такие как Diffie-Hellman (DH) и многоточие кривой Diffie-Hellman (ECDH).

На следующем рисунке показана конструкция и функция криптографических примитивов CNG.

проектирование и функция криптографических примитивов cng

Файл заголовка Bcrypt.h определяет константу MS_PRIMITIVE_PROVIDER как "Поставщик Microsoft Primitive". Чтобы использовать поставщик Microsoft Primitive, передайте это значение в BCryptOpenAlgorithmProvider.