diff --git a/public/uk/gostcoin-on-fedora-linux.gmi b/public/uk/gostcoin-on-fedora-linux.gmi new file mode 100644 index 0000000..b5c8355 --- /dev/null +++ b/public/uk/gostcoin-on-fedora-linux.gmi @@ -0,0 +1,54 @@ +# Особливості запуску GOSTcoin на Fedora + +Якщо запустити гаманець на Fedora 43, то можна побачити помилку: + +> error loading wallet.dat: wallet corrupted + +А в журналі: + +``` ~/.gostcoin/debug.log +Error reading wallet database: CPrivKey corrupt +``` + +Це пов'язано з тим, що в дистрибутивах сімейства Red Hat - використовується відмінна від оригінальної версія OpenSSL, через що гаманець не може застосувати криптографічний алгоритм GOST через функцію d2i_ECPrivateKey: + +=> https://github.com/GOSTSec/gostcoin/issues/65 + +* Самостійно, я вгепав у це питання близько тижня і спочатку почав копати в бік користувацьких "рушіїв" та "провайдерів" криптографічних алгоритмів системного OpenSSL. Такий підхід я згодом виніс в окрему нотатку, але з сабжем вона виявилась не пов'язаною: +=> openssl-provider-setup-on-fedora-using-gost-engine-example.gmi Підключення користувацьких алгоритмів OpenSSL на прикладі провайдера "GOST engine" + +## Рішення + +Згідно поради @original, для розпізнавання криптографічних кривих GOST, достатньо зібрати OpenSSL з вихідного коду, вказавши змінну оточення LD_LIBRARY_PATH при запуску гаманця GOSTcoin. + +### OpenSSL + +``` bash +wget https://github.com/openssl/openssl/archive/refs/tags/openssl-3.5.4.zip +unzip openssl-3.5.4.zip +cd openssl-3.5.4 +./Configure --prefix=/usr/local/ssl --openssldir=/usr/local/ssl '-Wl,-rpath,$(LIBRPATH)' +make +sudo make install +``` + +=> https://github.com/openssl/openssl/blob/master/NOTES-UNIX.md#shared-libraries-and-installation-in-non-default-locations + +### GOSTcoin + +``` bash +git clone https://github.com/GOSTSec/gostcoin.git +cd gostcoin +/usr/lib64/qt5/bin/qmake "USE_QRCODE=1" +make +``` +* `/usr/lib64/qt5/bin/qmake` - тому що в мене система чомусь не бачить `qmake` +* `USE_QRCODE=1` - опціонально, якщо потрібна функціональність QR-кодів + +=> https://github.com/GOSTSec/gostcoin#building-gostcoin + +### Запуск гаманця + +``` bash +LD_LIBRARY_PATH=/usr/local/ssl/lib64:/usr/local/ssl/lib:$LD_LIBRARY_PATH gostcoin-qt +``` \ No newline at end of file diff --git a/public/uk/gostcoin-on-fedora-with-native-openssl.gmi b/public/uk/gostcoin-on-fedora-with-native-openssl.gmi deleted file mode 100644 index c9c3008..0000000 --- a/public/uk/gostcoin-on-fedora-with-native-openssl.gmi +++ /dev/null @@ -1,183 +0,0 @@ -# Особливості збірки GOSTcoin на Fedora 43 - -> Я вгепав у це питання близько тижня і вже тричі переписував даний матеріал-пам'ятку. Утім, я досі не запустив старий гаманець GOSTCoin, але назбирав купу нотаток і нового досвіду. - -Прочитавши допис @acetone "GOSTCoin - первая криптовалюта в I2P" поставив собі цей гаманець на Debian 13: все працювало згідно інструкцій README. Але згодом, перебої зі світлом перегнали мене на іншу машину вже на базі Fedora 43, де запуск гаманця з підсунутим файлом `~/.gostcoin/wallet.dat` - вилітав з помилкою: - -> error loading wallet.dat: wallet corrupted - -Переглянувши журнал, знайшов там: - -``` ~/.gostcoin/debug.log -Error reading wallet database: CPrivKey corrupt -``` - -Створив відповідний репорт і отримав вичерпну вичерпну пораду збирати OpenSSL "під себе" -=> https://github.com/GOSTSec/gostcoin/issues/65 - -Я мало знайомий з нутрощами OpenSSL, але оскільки GOSTcoin - єдина відома мені валюта з альтернативним алгоритмом over SAM, вирішив заморочитись. З того що вияснив, OpenSSL v3 (як і Fedora) з коробки постачається тільки з "надійними" алгоритмами криптографії, все інше - застаріле, сумнівне та користувацьке - виведено на рівень модулів "engines" і "providers". - -Більше того, починаючи з Fedora 43, функціональність "engines" вважається застарілою: -=> https://discussion.fedoraproject.org/t/f43-change-proposal-disabling-support-of-building-openssl-engines-system-wide Fedora 43: Disabling support of building OpenSSL engines - -Тому на перспективу лишиться тільки "providers", API яких ще не всюди підтримується. GOSTcoin - тут не виключення: наприклад, інтерфейс `EC_GROUP*` - не бачитиме криптографічних кривих від "провайдерів" і схоже потребуватиме додаткового патчу або ж компіляції якоїсь старої версії OpenSSL... Стару версію я не хочу, бо й так завжди можу підняти старий Debian на віртуалці; мені цікаво саме актуалізуватись. - -## 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 - -Щоб уникнути проблеми зі знаходженням на 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". - -Далі я опишу збірку гаманця і планую доповнити матеріал згодом, коли натягну це діло ймовірно вже на форк з підтримкою провайдерів, а не допотопної версії OpenSSL. - -## GOSTcoin - -Тут все згідно інструкції в README: - -``` bash -git clone https://github.com/GOSTSec/gostcoin.git -cd gostcoin -/usr/lib64/qt5/bin/qmake "USE_QRCODE=1" -make -``` -* `/usr/lib64/qt5/bin/qmake` - тому що в мене система чомусь не бачить `qmake` -* `USE_QRCODE=1` - опціонально, якщо потрібна функціональність QR-кодів - -Якщо використовується власна збірка OpenSSL в `/opt/openssl`, шлях до неї вказується так: - -``` bash -git clone https://github.com/GOSTSec/gostcoin.git -cd gostcoin -/usr/lib64/qt5/bin/qmake \ - "USE_QRCODE=1" \ - "INCLUDEPATH += /opt/openssl/include" \ - "LIBS += -L/opt/openssl/lib64 -lssl -lcrypto" \ - "QMAKE_LFLAGS += -Wl,-rpath,/opt/openssl/lib64" -make -``` - -В корені буде створено бінарник `gostcoin-qt` який запускаємо після i2pd. - -## Посилання - -=> https://github.com/gost-engine/engine/discussions/479#discussioncomment-13296401 Порада збирати OpenSSL v1.1 разом з GOST engine (LEGACY) -=> https://github.com/gost-engine/engine/issues/362 Openssl 3 + Gost Engine #362 -=> https://github.com/gost-engine/engine/blob/master/README.gost -=> https://github.com/majek/openssl/blob/master/engines/ccgost/README.gost -=> https://devel.fedoraproject.narkive.com/jls58kln/fedora-dnssec-and-gost-ecc-like-algorithms-with-openssl -=> https://github.com/gost-engine/engine/blob/master/INSTALL.md -=> https://www.reddit.com/r/OPNsenseFirewall/comments/126cmk4/question_how_can_i_install_gost_encryption/ -=> https://discussion.fedoraproject.org/t/strong-crypto-settings-how-best-to-define-apply/22600 -=> https://github.com/gost-engine/engine/discussions/478 \ No newline at end of file diff --git a/public/uk/index.gmi b/public/uk/index.gmi index be8607c..ee5cc78 100644 --- a/public/uk/index.gmi +++ b/public/uk/index.gmi @@ -16,7 +16,9 @@ ### Нотатки -=> gostcoin-on-fedora-with-native-openssl.gmi 2026-01-28 Особливості збірки GOSTcoin на Fedora 43 + +=> gostcoin-on-fedora-linux.gmi 2026-01-29 Особливості запуску GOSTcoin на Fedora +=> openssl-provider-setup-on-fedora-using-gost-engine-example.gmi 2026-01-29 Підключення користувацьких алгоритмів OpenSSL на прикладі провайдера "GOST engine" => ufw-exception-for-multicast-peer-discovery.gmi 2026-01-26 Правило ufw для пошуку сусідніх пірів через мультикаст => connecting-deltachat-to-alternative-yggdrasil-server.gmi 2026-01-23 Підключення DeltaChat до альтернативного сервера Yggdrasil => block-direct-internet-connections-but-openvpn-tun-with-ufw.gmi 2026-01-21 Блокування прямих з'єднань на Інтернет окрім як через тунель OpenVPN з ufw diff --git a/public/uk/openssl-provider-setup-on-fedora-using-gost-engine-example.gmi b/public/uk/openssl-provider-setup-on-fedora-using-gost-engine-example.gmi new file mode 100644 index 0000000..246583a --- /dev/null +++ b/public/uk/openssl-provider-setup-on-fedora-using-gost-engine-example.gmi @@ -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 + +Щоб уникнути проблеми зі знаходженням на 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) \ No newline at end of file