librtpkcs11ecp.so и Ubuntu 12.04

Rutoken ECP, Ubuntu 12.04(x64), opensc 0.12.2, libccid 1.4.5

Попробовал связку pkcs11-tool с нативной библиотекой librtpkcs11ecp.so. В основном работает нормально (truecrypt, firefox)
Но при попытке извлечь публичный ключ возникает ошибка:
pkcs11-tool --module=/opt/librtpkcs11ecp.so -r --type pubkey --label key-linux --output-file key-linux --login
"warning: PKCS11 function C_GetAttributeValue(VALUE) failed: rv = CKR_ATTRIBUTE_TYPE_INVALID (0x12)
error: get CKA_VALUE failed
Aborting."
ключ генерировал так:
pkcs11-tool --module=/opt/librtpkcs11ecp.so --keypairgen --key-type rsa:2048 --login --label key-linux
Еще в выводе команды вместе с данными

pkcs11-tool --module=/opt/librtpkcs11ecp.so -O --login
несколько раз выводиться:
warning: PKCS11 function C_GetAttributeValue(ALWAYS_AUTHENTICATE) failed: rv = CKR_ATTRIBUTE_TYPE_INVALID (0x12)

Re: librtpkcs11ecp.so и Ubuntu 12.04

Такое поведение возникает из-за различия в реализациях библиотек librtpkcs11ecp и opensc-pkcs11:

  • наша библиотека хранит открытый ключ в соответствии со стандартом PKCS#11 в атрибутах CKA_MODULUS, CKA_MODULUS_BITS и CKA_PUBLIC_EXPONENT

  • OpenSC помимо этих атрибутов также хранит значение открытого ключа в CKA_VALUE, откуда производит чтение pkcs11-tool.

В данной ситуации можем предложить либо изменить код pkcs11-tool, либо разработать свое приложение для чтения открытого ключа в соответствии со стандартом и с использованием нашей библиотеки PKCS#11.
Честно говоря, я не представляю, почему в opensc открытый ключ дополнительно хранится в CKA_VALUE.

Re: librtpkcs11ecp.so и Ubuntu 12.04

Я понял что вы предлагаете свою помощь? :) А то я хоть и обладаю некоторыми навыками программирования, но к сожалению совсем не знаком со стандартом PKCS#11.

Если так то я думаю будет лучше и быстрее разработать патч для opensc(я так понимаю он будет небольшой). А все равно собрал сейчас его из git. Так что наложить патч и пересобрать не составит проблем.

Re: librtpkcs11ecp.so и Ubuntu 12.04

С нашей стороны логичнее будет направить баг-репорт разработчикам opensc. Вряд ли мы станем сами разрабатывать патч сами.
Я советую вам описать решаемую задачу, возможно для ваших целей больше подойдет OpenSSL.

(2012-06-05 19:23:57 отредактировано VeRsTaK)

Re: librtpkcs11ecp.so и Ubuntu 12.04

Задачи:
1) Хранить ключи truecrypt
2) Хранения ключей(webmoney и т.д) для firefox
3) PAM аутентификация в Linux

Первые две решил с помощью librtpkcs11ecp. Но вот публичный ключ для PAM аутентификация c помощью pkcs11-tool не удалось извлечь.

Но третью задача решаться с помощью opensc-pkcs11 и pkcs11-tool. Но зато первые две задачи не выполнимы по причине ошибки о которой я писал https://forum.rutoken.ru/topic/1726/.

Может вы подскажите решения без самостоятельного копания в коде. Мне кажется что разработчики opensc без энтузиазма отнесутся к исправлению ошибок возникающих при работе со сторонней библиотекой.

Re: librtpkcs11ecp.so и Ubuntu 12.04

Предлагаю воспользоваться программой XCA. С его помощью можно сгенерировать ключ на токене, записать туда сертификат и экспортировать сертификат обратно в файл.
Вкратце опишу последовательность действий: запускаете XCA (от рута), создаете новую базу данных, в настройках указываете нашу библиотеку PKCS#11 в качестве провайдера PCKS#11, генерируете ключ (выбрав Keytype = токену), затем на основе этого ключа генерируете сертификат и сохраняете его на токене.

Re: librtpkcs11ecp.so и Ubuntu 12.04

XCA в как раз то что я искал. Спасибо! Только раздражает ошибка которая появляется при обращении к рутокену, иногда программа после нее вылетает.

(pki_scard:)
error:25066067:DSO support routines:DLFCN_LOAD:could not load the shared library
error:25070067:DSO support routines:DSO_load:could not load the shared library
error:260B6084:engine routines:DYNAMIC_LOAD:dso not found

(pki_key.cpp:273)

Re: librtpkcs11ecp.so и Ubuntu 12.04

При каких действиях это происходит? По сообщениям похоже, что чего-то не хватает в OpenSSL.

Re: librtpkcs11ecp.so и Ubuntu 12.04

1. Если создаешь новую базу(то есть база пуста) то при первом нажатие на "Токен" - "Управление токенами" возникает ошибка, но приложение продолжает работать и при этом в списке на токене видны не все ключи. При закрытии "Управление токенами" и вовторном открытии ошибки не возникает и видны все ключи.

2. Если восстановить что-нибудь с токена или создать с помощью программы(то есть если что-нибудь есть на вкладках главного окна) и сохранить базу и закрыть приложение. То повторно ее открыть не удается. При открытии возникает данная ошибка и программа сразу завершается.

Re: librtpkcs11ecp.so и Ubuntu 12.04

Странно, у меня такое не повторяется. Проверьте настройки библиотек в базе, он у меня их путал и постоянно подсовывал opensc'шную либу. Две библиотеки указывать тоже не стоит наверно.
Заодно поставьте libengine-pkcs11-openssl, я думаю оно влияет. И я что-то забыл спросить, какой у вас дистрибутив.

Re: librtpkcs11ecp.so и Ubuntu 12.04

Rutoken ECP, Ubuntu 12.04(x64), opensc из git, libccid 1.4.5, pcscd 1.7.4.

libengine-pkcs11-openssl поставил, не помогло. Библиотека прописана одна librtpkcs11ecp.so.

Re: librtpkcs11ecp.so и Ubuntu 12.04

Это похоже на проблемы в XCA, мне тоже один раз удалось повторить ошибку при импорте ключей с токена. У XCA есть какие-то баги при работе с уже созданной базой данных, например, во всех системах он может запомнить токен и потом требовать только его при импорте ключей, или же запомнить путь к последней используемой базе данных и пытаться при старте открыть ее и будет все время падать, если файла бд нет.