Шифрование OpenSSL по ГОСТ (GOST) в Debian 12

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

 

Друзья помогите этому контенту стать доступнее в социальных сетях.

Не проходи мимо жмакни по кнопке возможно кому то еще он будет полезен!