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


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

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

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

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

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

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

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

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

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