mirror of
https://codeberg.org/postscriptum/gemlog.git
synced 2026-02-18 22:12:40 +00:00
separate articles
This commit is contained in:
parent
4d8cd83432
commit
5e06621a43
4 changed files with 188 additions and 184 deletions
|
|
@ -0,0 +1,131 @@
|
|||
# Підключення користувацьких алгоритмів 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)
|
||||
Loading…
Add table
Add a link
Reference in a new issue