GOST-engine – это модуль для OpenSSL, реализующий поддержку российских криптографических алгоритмов в соответствии с ГОСТ Р 34.10-2012, ГОСТ Р 34.11-2012 и другими стандартами. Он позволяет использовать ГОСТ-алгоритмы для цифровых подписей, хэширования, симметричного и асимметричного шифрования.
Основные возможности:
- Поддержка алгоритмов электронной подписи (GOST R 34.10-2001, GOST R 34.10-2012).
- Реализация хэш-функций (GOST R 34.11-94, GOST R 34.11-2012).
- Симметричное шифрование (GOST 28147-89, Кузнечик, Магма).
- Использование ГОСТ-алгоритмов в TLS-соединениях.
Официальная страница GOST-engine на Github — https://github.com/gost-engine/engine
Ниже пошагово разберем как собрать и установить GOST-engine самой актуальной версии на Debian 12 и выпустим тестовый сертификат по ГОСТ.
Установка зависимостей
Устанавливаем необходимые пакеты зависимостей:
apt-get install g++ gcc make pkg-config git curl libssl-dev -y
Установка CMake
Для сборки GOST-engine нужна версия CMake 3.0 или новее. Выполним установку актуального релиза.
Клонируем репозиторий CMake с GitHub и переходим в клонированный репозиторий:
git clone https://github.com/Kitware/CMake.git CMakecd CMake
Переключаемся на актуальный релиз выполнив команду:
LATEST_TAG=$(curl -s curl -s https://api.github.com/repos/Kitware/CMake/releases/latest | grep -oP ‘»tag_name»: «K[^»]+’)git checkout $LATEST_TAG
Выполняем сборку CMake:
./bootstrap —prefix=/usrmake -j$(nproc)make installcd ..
Для проверки, выведем информация об установленной версии:
cmake —version
OpenSSL
Проверяем установленную версию OpenSSL, она должна быть выше 3.0:
openssl version -vOpenSSL 3.0.15 3 Sep 2024 (Library: OpenSSL 3.0.15 3 Sep 2024)
Установка GOST-engine
Клонируем репозиторий GOST-engine с GitHub и переходим в клонированный репозиторий:
git clone https://github.com/gost-engine/engine.git gost-enginecd gost-engine/
Переключаемся на актуальный релиз выполнив команду:
LATEST_TAG=$(curl -s https://api.github.com/repos/gost-engine/engine/releases/latest | grep -oP ‘»tag_name»: «K[^»]+’)git checkout $LATEST_TAG
Сборка
Выполняем сборку и установку gost-engine:
git submodule update —initmkdir build && cd buildcmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usrcmake —build . —config Releasecmake —build . —target install —config Release
Настройка
Настроим openssl на работу с gost-engine, для этого в конфигурационный файл /etc/ssl/openssl.cnf в глобальном разделе, перед первым заголовком раздела заключенным в квадратные скобки, добавляем:
/etc/ssl/openssl.cnfopenssl_conf=openssl_def
В конец того же файла добавляем следующие параметры:
/etc/ssl/openssl.cnf[openssl_def]engines = engine_section[engine_section]gost = gost_section[gost_section]engine_id = gostdynamic_path = /usr/lib/x86_64-linux-gnu/engines-3/gost.sodefault_algorithms = ALL
Проверка
Выведем список доступных криптографических движков, в выводе должен присутствовать GOST:
openssl engine(rdrand) Intel RDRAND engine(dynamic) Dynamic engine loading support(gost) Reference implementation of GOST engine
Выведем список доступных шифров GOST:
openssl ciphers | tr ‘:’ ‘n’ | grep GOSTGOST2012-MAGMA-MAGMAOMACGOST2012-KUZNYECHIK-KUZNYECHIKOMACLEGACY-GOST2012-GOST8912-GOST8912IANA-GOST2012-GOST8912-GOST8912GOST2001-GOST89-GOST89
Выведем доступные GOST провайдеры:
openssl engine -c | grep gost | tr -d ‘[]’ | tr ‘,’ ‘n'(gost) Reference implementation of GOST engine gost89 gost89-cnt gost89-cnt-12 gost89-cbc kuznyechik-ecb kuznyechik-cbc kuznyechik-cfb kuznyechik-ofb kuznyechik-ctr magma-ecb kuznyechik-mgm magma-cbc magma-ctr magma-ctr-acpkm magma-ctr-acpkm-omac magma-mgm kuznyechik-ctr-acpkm kuznyechik-ctr-acpkm-omac magma-kexp15 kuznyechik-kexp15 md_gost94 gost-mac md_gost12_256 md_gost12_512 gost-mac-12 magma-mac kuznyechik-mac kuznyechik-ctr-acpkm-omac gost2001 id-GostR3410-2001DH gost-mac gost2012_256 gost2012_512 gost-mac-12 magma-mac kuznyechik-mac magma-ctr-acpkm-omac kuznyechik-ctr-acpkm-omac
Выпуск сертификата GOST
Сгенерируем закрытый ключ и создадим сертификат с подписью ГОСТ следующей командой:
openssl req -x509 -newkey gost2012_256 -pkeyopt paramset:A -nodes -keyout key.pem -out cert.pem -md_gost12_256
Выведем информацию о выпущенном сертификате:
openssl x509 -in cert.pem -text -noout
Вывод:
Certificate: Data: Version: 3 (0x2) Serial Number: 6b:e9:a1:34:89:77:3a:80:6d:fb:7d:15:f7:46:2b:27:e5:f7:47:e0 Signature Algorithm: GOST R 34.10-2012 with GOST R 34.11-2012 (256 bit) Issuer: C = RU, ST = Moscow, L = Moscow, O = Internet Widgits Pty Ltd, CN = gost.jakondo.ru Validity Not Before: Mar 10 11:23:30 2025 GMT Not After : Apr 9 11:23:30 2025 GMT Subject: C = RU, ST = Moscow, L = Moscow, O = Internet Widgits Pty Ltd, CN = gost.jakondo.ru Subject Public Key Info: Public Key Algorithm: GOST R 34.10-2012 with 256 bit modulus Public key: X:5F6B78DF32D5CFCEB349076D8532A1365308CBD15A7523B5B826A1F6AB440DC1 Y:AE32622F9789D29C11F8CEA06A78F999E0807389C2A338D1A26FCB0F744A7E0A Parameter set: id-GostR3410-2001-CryptoPro-A-ParamSet X509v3 extensions: X509v3 Subject Key Identifier: F3:16:33:E4:8D:E2:4E:7F:42:27:91:1B:85:F6:08:11:76:A3:C7:06 X509v3 Authority Key Identifier: F3:16:33:E4:8D:E2:4E:7F:42:27:91:1B:85:F6:08:11:76:A3:C7:06 X509v3 Basic Constraints: critical CA:TRUE Signature Algorithm: GOST R 34.10-2012 with GOST R 34.11-2012 (256 bit) Signature Value: 19:07:10:f0:02:5d:35:2f:8c:79:64:6f:09:db:25:f1:d9:89: 85:9f:26:3d:16:92:ec:1a:59:1e:74:d8:b6:69:49:fd:84:a7: 19:5f:cc:e5:df:74:c5:89:2d:0b:69:72:1b:62:7e:f8:df:0b: 34:da:72:95:19:f7:1e:a6:68:6e