Перейти к содержанию

ГОСТ Engine и Provider: как выбрать интерфейс

OpenSSL предоставляет приложениям криптографические реализации через несколько API. В НАЙС.ОС доступны модули gost.so (ENGINE) и gostprov.so (Provider). Для оператора это чаще всего означает два способа загрузки ГОСТ и некоторые различия в поведении криптографических форматов.

Engine — привычные команды работы с ключами

ENGINE применяется в классических сценариях openssl genpkey, openssl req, openssl dgst, X.509 и PKCS#12. В НАЙС.ОС режим ГОСТ подключается системной конфигурацией OpenSSL.

openssl engine -t -c gost
openssl engine -vvvv gost
openssl version -e

Первая команда проверяет загрузку модуля и перечисляет предоставляемые классы алгоритмов. -vvvv печатает управляющие команды ENGINE.

Provider — расширяемый механизм OpenSSL

Для приложений, использующих интерфейс Provider, ГОСТ загружается через gostprov.so. Команды перечисления доступны через OpenSSL:

openssl list -providers -verbose
openssl list -digest-algorithms -provider gostprov -provider default
openssl list -cipher-algorithms -provider gostprov -provider default

При явно заданных Provider подключайте и default, если приложению нужны стандартные алгоритмы, случайные числа или операции кодирования из этого провайдера.

Сравнение

Вопрос Engine Provider
Как загружается Конфигурация ENGINE Конфигурация providers / -provider
Основной файл gost.so gostprov.so
Создание ГОСТ-ключей и подписи EVP + ENGINE EVP + keymgmt/signature
ГОСТ-хэши и блочные шифры Да Да
PKCS#12 Команды Engine; современный формат зависит от функций реализации Поддержка современного PBE также использует взаимодействие с libcrypto
CMS и старые протоколы Традиционный путь EVP/ENGINE Отдельные сценарии зависят от интеграции OpenSSL с Provider
Новые приложения Через абстракции EVP Основной расширяемый интерфейс OpenSSL

Не смешивайте две конфигурации без необходимости: сначала выберите один профиль и проверьте им весь сценарий от создания ключа до импорта получателем.

Сравнение профилей в изоляции

Создайте два файла конфигурации по инструкции, затем выполните диагностику, не изменяя глобальные настройки сервера:

OPENSSL_CONF="$HOME/gost-lab/engine.cnf" \
  openssl engine -t -c gost

OPENSSL_CONF="$HOME/gost-lab/provider.cnf" \
  openssl list -providers -verbose

Если приложение продолжает использовать собственный OPENSSL_CONF, разберитесь, какой конфигурационный файл реально читается процессом. Глобальная настройка и окружение отдельной службы могут различаться.

Что использовать для разных задач

Для создания ГОСТ-ключа и подписи начните с системного режима НАЙС.ОС и команд genpkey/dgst. Для исследования нового поставщика алгоритмов, а также чтения специфичных контейнеров PFX КриптоПро, используйте изолированный Provider-профиль. Для интеграции с приложением предпочтительны универсальные вызовы EVP вместо прямого обращения к внутренним структурам ENGINE.

Upstream: README.gost, README.prov.md, README.pkcs12.md.