gost-engine / engine

A reference implementation of the Russian GOST crypto algorithms for OpenSSL
Apache License 2.0
375 stars 170 forks source link

Не работают элептические кривые :( #458

Open MrKribel opened 6 months ago

MrKribel commented 6 months ago

Что я делаю не так?

1) Клонируем репозиторий с исходным кодом проекта git clone https://github.com/gost-engine/engine.git

2) Переходим в директорию с проектом cd engine

3) Инициализируем и обновляем подмодули git submodule update --init

4) Создаем новую директорию для сборки проекта mkdir build 5) Переходим в директорию сборки cd build

6) Устанавливаем пакеты разработчика для OpenSSL, которые могут понадобиться для сборки проекта sudo apt-get install libssl-dev

7) Запускаем CMake с указанием типа сборки (Release) и использованием родительской директории (..) в качестве корневого каталога проекта cmake -DCMAKE_BUILD_TYPE=Release ..

8) Компилируем проект с использованием типа сборки Release cmake --build . --config Release 9) Устанавливаем скомпилированный проект sudo cmake --build . --target install --config Release

10) Проверяем версию OpenSSL и список доступных движков openssl version -e

11) Выводим список файлов в директории /usr/lib/x86_64-linux-gnu/engines-3 и видим библиотеку gost.so ls /usr/lib/x86_64-linux-gnu/engines-3

Для использования сертификатов OpenSSL с алгоритмами ГОСТ необходимо также отредактировать файл конфигурации /etc/ssl/openssl.cnf:

Добавляем в начало файла:

openssl_conf = openssl_def

[openssl_def]
engines = engine_section

[engine_section]
gost = gost_section

[gost_section]
engine_id = gost
dynamic_path = /usr/lib/x86_64-linux-gnu/engines-3/gost.so
default_algorithms = ALL

Проверяем:

openssl ciphers -v 'GOST2001-GOST89-GOST89'

TLS_AES_256_GCM_SHA384         TLSv1.3 Kx=any      Au=any   Enc=AESGCM(256)            Mac=AEAD
TLS_CHACHA20_POLY1305_SHA256   TLSv1.3 Kx=any      Au=any   Enc=CHACHA20/POLY1305(256) Mac=AEAD
TLS_AES_128_GCM_SHA256         TLSv1.3 Kx=any      Au=any   Enc=AESGCM(128)            Mac=AEAD
GOST2001-GOST89-GOST89         TLSv1   Kx=GOST     Au=GOST01 Enc=GOST89(256)
user@pc:~/engine/build$ openssl genpkey -algorithm GOST2012 -pkeyopt digest:gost2012 -out private.key
Error initializing GOST2012 context
40A7C2668F7F0000:error:0308010C:digital envelope routines:inner_evp_generic_fetch:unsupported:../crypto/evp/evp_fetch.c:349:Global default library context, Algorithm (GOST2012 : 0), Properties (<null>)
user@pc:~/engine/build$ openssl ecparam -genkey -name gost2012_256 -out privatekey_gost2012_256.pem
unable to generate key
40877D4B7E7F0000:error:0800008D:elliptic curve routines:group_new_from_name:invalid curve:../crypto/ec/ec_lib.c:1490:
user@pc:~/engine/build$ openssl genpkey -algorithm gost2012-256 -out private_key_gost2012_256.pem
Error initializing gost2012-256 context
40E73C8B747F0000:error:0308010C:digital envelope routines:inner_evp_generic_fetch:unsupported:../crypto/evp/evp_fetch.c:349:Global default library context, Algorithm (gost2012-256 : 0), Properties (<null>)
user@pc:~/engine/build$ openssl ecparam -name gost2012_256 -genkey -out private_key_gost2012_256.pem
unable to generate key
40B7CDB0597F0000:error:0800008D:elliptic curve routines:group_new_from_name:invalid curve:../crypto/ec/ec_lib.c:1490:
user@pc:~/engine/build$ openssl genpkey -paramfile /etc/ssl/gost/gost2012_256.param -out private_key_gost2012_256.pem
Can't open parameter file /etc/ssl/gost/gost2012_256.param
40E730FA4F7F0000:error:80000002:system library:BIO_new_file:No such file or directory:../crypto/bio/bss_file.c:67:calling fopen(/etc/ssl/gost/gost2012_256.param, r)
40E730FA4F7F0000:error:10000080:BIO routines:BIO_new_file:no such file:../crypto/bio/bss_file.c:75:
vt-alt commented 6 months ago

Куда заинсталлировался новый gost.so?

MrKribel commented 6 months ago

Куда заинсталлировался новый gost.so?

user@pc:~$ ls /usr/lib/x86_64-linux-gnu/engines-3

afalg.so gost.so loader_attic.so padlock.so

0x0000-dot-ru commented 1 month ago

Вы неверно задали алгоритм. В инструкции указаны все доступные параметры (раздел Generation of private key) https://github.com/gost-engine/engine/blob/master/README.gost