Рутокен ЭЦП 2.0/3.0, GnuPG и сертификаты ГОСТ

Здравствуйте!

Почитал я как заводить Рутокен вместе с демоном gnupg для работы через библиотеку PKSC#11, но что-то я уперся в какую ерунду.

Дело в том, что на токене хранится ГОСТ сертификат, сгенерированный в режиме PKSC#11. И когда я вызываю gpg, получают такой вот ответ

$gpg --card-status
gpg: Карта OpenPGP недоступна: Bad certificate

Я понимаю, что он может не знать про ГОСТ. Но не отказываться же работать со всем токеном из-за того, что там (по его мнению) левый сертификат хранится?

Re: Рутокен ЭЦП 2.0/3.0, GnuPG и сертификаты ГОСТ

dmitrmax, добрый день!

К сожалению, GnuPG работает, если на токене находятся только RSA-ключи и сертификаты. Наличие ГОСТ-ключей
и сертификатов сделает невозможным работу с устройством через GnuPG.

Re: Рутокен ЭЦП 2.0/3.0, GnuPG и сертификаты ГОСТ

Спасибо, Павел!

А стоит ли пробовать завести ЭЦП 3.0 с GnuPG, при условии, что на ней есть ГОСТ-ключи в режиме ФКН?

Re: Рутокен ЭЦП 2.0/3.0, GnuPG и сертификаты ГОСТ

dmitrmax, вероятно должно сработать, т.к. объекты ФКН не перечисляются librtpkcs11ecp.

Re: Рутокен ЭЦП 2.0/3.0, GnuPG и сертификаты ГОСТ

Павел Анфимов пишет:

dmitrmax, вероятно должно сработать, т.к. объекты ФКН не перечисляются librtpkcs11ecp.

А есть ли вообще техническая возможность что-нибудь сделать с ключами ФКН, рабатая через pkcs11? Там не знаю.... как-нибудь отформатировать носитель? Или в целом это безопасно для ФКН-ключей?

Re: Рутокен ЭЦП 2.0/3.0, GnuPG и сертификаты ГОСТ

Для установки защищенного канала, нужно безопасным образом, хранить в ОС ключи, которые участвуют в шифровании канала. На текущий момент это может криптопровайдер, но не PKCS11.

Re: Рутокен ЭЦП 2.0/3.0, GnuPG и сертификаты ГОСТ

Павел Анфимов пишет:

Для установки защищенного канала, нужно безопасным образом, хранить в ОС ключи, которые участвуют в шифровании канала. На текущий момент это может криптопровайдер, но не PKCS11.

То ли вы меня не поняли, то ли я вас. Я имел ввиду: возможно ли случайно через PKCS11 дать носителю какую-либо команду, которая, например, удалит контейнеры ФКН? Я просто не знаю архитектуру носителя и не понимаю как в нём разделяются ресурсы для различных апплетов (вроде бы так называются конкретные приложения на картах). Но память под контейнеры, как я понимаю, общая, и было бы логичным предположить, что, допустим, отформатировать носитель может любой апплет. Вот и боюсь, что один апплет может, допустим, удалить контейнеры другого апплета, если демон gnupg-pkcs11-scd какой-то APDU ему пошлет.

Re: Рутокен ЭЦП 2.0/3.0, GnuPG и сертификаты ГОСТ

dmitrmax

PKCS11 не сможет "точечно" удалить контейнеры ФКН, т.к. не работает с ними. Объект PKCS11 и ФКН хранятся изолированно, в разных папках.

Функция инициализации памяти из стандарта PKCS11 С_InitToken, которую в теории может позвать демон nupg-pkcs11-scd:

  • сбрасывает счетчик неверных попыток ввода пин-кода пользователя,

  • устанавливает PIN-код по умолчанию для пользователя,

  • очищает папку для объектов PKCS#11,

  • устанавливает метку токена.

Нестандартная функция расширения С_EX_InitToken удалит все, но крайне маловероятно, что в gnupg-pkcs11-scd встроен ее вызов.

При этом, "точечно" удалять объекты правильней всего через тот интерфейс, который их создал. Только он знает правильную структуру объектов их размещение. Т.е. удалять контейнеры ФКН нужно через КриптоПро CSP.

Re: Рутокен ЭЦП 2.0/3.0, GnuPG и сертификаты ГОСТ

Ага, стало понятнее. Спасибо.

Re: Рутокен ЭЦП 2.0/3.0, GnuPG и сертификаты ГОСТ

Павел Анфимов пишет:

dmitrmax, добрый день!

К сожалению, GnuPG работает, если на токене находятся только RSA-ключи и сертификаты. Наличие ГОСТ-ключей
и сертификатов сделает невозможным работу с устройством через GnuPG.

В следующем релизе, который будет после 0.10.0, должны полностью поправить эту проблему, включив игнорирование неподдерживаемых и неизвестных сертификатов.

Но у меня возникла другая проблема, что при создании самоподписанного сертификата RSA, который нужен для gnupg-pkcs11-scd, при использовании rteninge выдаётся ошибка:

OPENSSL_CONF=openssl.cnf openssl  req -x509 -new -engine rtengine -keyform engine -key "pkcs11:model=Rutoken%20ECP;manufacturer=Aktiv%20Co.;serial=411d5727;token=Rutoken%20ECP%20%3Cno%20label%3E;id=%98;object=GnuPG" -sha512 -subj "DN=/CN=GnuPG" -days 365 -out gnupg.crt
Engine "rtengine" set.
Enter PKCS#11 token PIN: 
Could not read private key from org.openssl.engine:rtengine:pkcs11:model=Rutoken%20ECP;manufacturer=Aktiv%20Co.;serial=411d5727;token=Rutoken%20ECP%20%3Cno%20label%3E;id=%98;object=GnuPG
4077C5B7427F0000:error:408000E6:lib(129):ERR_RTENG_error:unknown key type:engine/p11/gost_key.c:52:
4077C5B7427F0000:error:408000F0:lib(129):ERR_RTENG_error:wrong key:engine/ec.c:53:
4077C5B7427F0000:error:13000080:engine routines:ENGINE_load_private_key:failed loading private key:../crypto/engine/eng_pkey.c:79:

Если я использую движок pkcs11, ошибок нет.

Версии пакетов:

openssl: 3.0.7-1
librtengine3: 3.1.1
librtpkcs11ecp: 2.6.1.0

Re: Рутокен ЭЦП 2.0/3.0, GnuPG и сертификаты ГОСТ

OlegShtch, добрый день!

rtengine поддерживает работу только с ГОСТ-ключами. Для работы с RSA можно использовать pkcs11-engine из состава OpenSC