gemlog/public/uk/openssl-provider-setup-on-fedora-using-gost-engine-example.gmi
2026-01-29 20:07:41 +02:00

131 lines
No EOL
5.9 KiB
Text
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Підключення користувацьких алгоритмів OpenSSL на прикладі провайдера "GOST engine"
Нотатку було створено в процесі пошуку рішення для виправлення помилки декодування гаманця GOSTcoin:
> error loading wallet.dat: wallet corrupted
Якщо ви шукаєте рішення саме цієї проблеми, то вам сюди:
=> gostcoin-on-fedora-linux.gmi Особливості запуску GOSTcoin на Fedora
В матеріалі нижче - описані кроки, які я виконував в процесі пошуку; вони виявились ніяк не пов'язаними з рішенням для гаманця GOSTcoin, утім, можуть бути корисними для підключення будь яких інших "провайдерів" та "рушіїв" до нативного OpenSSL, тим само дозволяючи розширити системний набір криптографічних алгоритмів.
## gost-engine
=> https://github.com/gost-engine/engine
Проєкт реалізує "engine" і "provider", є два варіанти його встановлення.
### Репозиторій Fedora
=> https://src.fedoraproject.org/rpms/openssl-gost-engine
Чомусь інсталяція не містить в собі деяких алгоритмів при оновленні політики (про що згодом)
``` bash
sudo dnf install openssl-gost-engine
```
### Збірка з початкового коду
=> https://github.com/gost-engine/engine/blob/master/INSTALL.md
Щоб уникнути проблеми зі знаходженням <openssl/engine.h> на Fedora, потрібно додати пакунок:
``` bash
sudo dnf install openssl-devel-engine
```
=> https://github.com/gost-engine/engine/pull/511 згодом, додав нотатку до README
``` bash
git clone https://github.com/gost-engine/engine
cd engine
git submodule update --init
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
cmake --build . --config Release
sudo cmake --build . --target install --config Release
```
* або `sudo make install`
### Підключення engine
``` /etc/ssl/openssl.cnf
[openssl_init]
engines = engine_section
[engine_section]
gost = gost_section
[gost_section]
engine_id = gost
dynamic_path = /usr/lib64/engines-3/gost.so
default_algorithms = ALL
# ще не впевнений, чи ці параметри дійсно потрібні і є правильними
# CRYPT_PARAMS = id-Gost28147-89-CryptoPro-A-ParamSet
# activate = 1
```
* шлях `dynamic_path` можна визначити командою `openssl version -e`
### Підключення provider
``` /etc/ssl/openssl.cnf
[provider_sect]
default = default_sect
gost = gost_sect
[gost_sect]
module = /usr/lib64/ossl-modules/gostprov.so
activate = 1
```
* шлях `module` можна визначити командою `openssl info -modulesdir`
### Оновлення політики
Стандартною політикою на Fedora 43 є DEFAULT. Тому для використання сертифікатів GOST, її потрібно знизити до LEGACY:
``` bash
sudo update-crypto-policies --set LEGACY
```
Дана команда змінить наступні рядки у файлі /etc/crypto-policies/back-ends/openssl.config:
* `CipherString` - `SECLEVEL` буде переключено з `2` на `1` і додано `aGOST:aGOST01:kGOST:GOST94:GOST89MAC`
* `Groups` - додано `gost2012_256:gost2012_512`
* `rh-allow-sha1-signatures` буде встановлено як `yes`
Напряму файл `openssl.config` редагувати не варто, бо його рано чи пізно буде перезаписано системою: при оновленні кешу або використанні утиліти вище.
### Тестування
``` bash
$ openssl engine
(dynamic) Dynamic engine loading support
(gost) Reference implementation of GOST engine
$ openssl engine gost -t -c
(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, magma-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]
[ available ]
$ openssl ciphers|tr ':' '\n' | grep GOST
GOST2012-MAGMA-MAGMAOMAC
GOST2012-KUZNYECHIK-KUZNYECHIKOMAC
LEGACY-GOST2012-GOST8912-GOST8912
IANA-GOST2012-GOST8912-GOST8912
GOST2001-GOST89-GOST89
$ openssl list -public-key-algorithms | grep GOST
IDs: { 1.2.643.2.2.19, GOST R 34.10-2001, gost2001 } @ gost
IDs: { 1.2.643.2.2.98, GOST R 34.10-2001 DH, id-GostR3410-2001DH } @ gost
IDs: { 1.2.643.7.1.1.1.1, GOST R 34.10-2012 with 256 bit modulus, gost2012_256 } @ gost
IDs: { 1.2.643.7.1.1.1.2, GOST R 34.10-2012 with 512 bit modulus, gost2012_512 } @ gost
$ openssl ecparam -list_curves | grep -i GOST
```
* остання команда з `ecparam` - нічого не виводить тому, що ми використовуємо не вбудовані алгоритми а саме API "engine" та "provider" (але через брак досвіду, я можу помилятись)
## Посилання
=> https://discussion.fedoraproject.org/t/f43-change-proposal-disabling-support-of-building-openssl-engines-system-wide F43 change Proposal: Disabling support of building OpenSSL engines (system-wide)