(2011-03-01 11:24:22 отредактировано alex107)

RuToken 32K150Z, *nix, Key length/algorithm not supported by card

Пытаюсь приспособить rutoken для использования под *nix. На OpenSUSE 11.3 при установке из репозитария openct и opensc токен работал совсем странно - при попытке форматирования умирал и лечился только под Windows методом форматирования Вашей программой без любого другого обращения (если даже просто запросить информацию о нем начинал усердно моргать и вешал порт). После сборки софта с сайта разработчика стало возможным отформатировать токен и проинициализировать его(хотя есть один момент не описанный ни в одном месте в интернете - при запускеpkcs15-init --create-pkcs15 --so-pin '87654321' --so-puk '' без указания --pin программа спрашивает user pin раз 8).
Проблема, не поддающаяся решению - генерация либо импорт RSA ключа. При любой попытке генерации пары софт валится в кору:
pkcs11-tool -k --pin 12345678 -d 46 --key-type rsa:1024
Using slot 1 with a present token (0x1)
Ошибка сегментирования
При попытке импорта готового ключа пишет что алгоритм не поддерживается:
pkcs15-init --store-private-key cert.p12 --format pkcs12 --auth-id 2
Using reader with a card: Rutoken S driver
Importing 1 certificates:
  0: /C=RU/ST=Xxxxxx/L=Xxxxxx/O=XxXxxXxxx/CN=Xxxx Xxxxxxx/emailAddress=xxxx@xxxxx.xx
Failed to store private key: Key length/algorithm not supported by card
Сертификат при этом импортируется на ура.
Версии софта:
openct-0.6.20
opensc-0.12.0
OpenSSL 1.0.0
P.S.: OS x64. Для чистоты эксперимента пробовал на FreeBSD 8.2 x64 пакеты все ставил из портов, версии 0.12.0 и 0.6.18(не точно) - результат тотже.
P.P.S.: rutoken-tool работает с ключем нормально:
rutoken-tool -p 12345678 -g -k 48
Using reader with a card: Rutoken S driver
rutoken-tool -s
Using reader with a card: Rutoken S driver
Type: 0
Version: 2.0
Memory: 32 Kb
Protocol version: 2
Software version: 21
Order: 0
Serial number: XXXXXXXX
rutoken-tool -m -i /etc/fstab -k 48 -p 12345678
Using reader with a card: Rutoken S driver
D5FB6159

Re: RuToken 32K150Z, *nix, Key length/algorithm not supported by card

Здравствуйте.
Начиная с версии OpenSC 0.12 возможность работы с RSA ключами у Рутокенов S  отсутствует.
Воспользуйтесь версией 0.11.13. Все что Вы описываете должно работать.

Re: RuToken 32K150Z, *nix, Key length/algorithm not supported by card

Большое спасибо за ответ. Все заработало. Не подскажете, данная проблема временна или в более поздних версиях софта также будет отсуствовать поддержка rsa для rutoken?

Re: RuToken 32K150Z, *nix, Key length/algorithm not supported by card

Ситуация уже, к сожалению, необратима. 
Начиная, с версии 0.12 OpenSC не будет программно выполнять криптографические функции. Если они не не присутствуют в каком либо токене аппаратно - их поддержка убирается.
Последней сборкой с работающим RSA для Рутокенов S остается 0.11.13
Однако, с этими проблемами Вы не столкнетесь если будете использовать Рутокены ЭЦП.
Рутокен ЭЦП реализует RSA аппаратно и проблем с OpenSC в будущем не предвидится.

Re: RuToken 32K150Z, *nix, Key length/algorithm not supported by card

Точно такая же проблема, за исключением того, что метка ключа 32K200Z, ну и соответственно

user@ak49:~$ rutoken-tool -s
Using reader with a card: Rutoken S driver
Type: 0
Version: 3.0
Memory: 32 Kb
Protocol version: 2
Software version: 32
Order: 0
Serial number: xxxxxx


Как я понимаю, opensc версии 0.11.x не работает с ruToken третьей версии?
А версия 0.12.x не поддерживает генерацию и импорт RSA в ruToken S.
Замкнутый круг?

Re: RuToken 32K150Z, *nix, Key length/algorithm not supported by card

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

Рутокены S третьей версии должны работать в предыдущих версиях.

В чем конкретно проявляются проблемы?

(2012-01-10 11:52:47 отредактировано nkrasnoyarsky)

Re: RuToken 32K150Z, *nix, Key length/algorithm not supported by card

nikl@ak49:~$ /usr/bin/pkcs15-init -E
Using reader with a card: Aktiv Rutoken S 00 00
nikl@ak49:~$ /usr/bin/pkcs15-init -C --so-pin "87654321" --so-puk ""
Using reader with a card: Aktiv Rutoken S 00 00
Unspecified PIN [reference 2] required.
Please enter Unspecified PIN [reference 2]: 
nikl@ak49:~$ /usr/bin/pkcs15-init --store-pin --label "User PIN" --auth-id 02 --pin "12345678" --puk ""
Using reader with a card: Aktiv Rutoken S 00 00
nikl@ak49:~$ /usr/bin/pkcs15-init --store-private-key carina/nkrasnoyarsky.key --auth-id 02 --id 45 --label 'nkrasnoyarsky'
Using reader with a card: Aktiv Rutoken S 00 00
Failed to store private key: Unknown error
nikl@ak49:~$ /usr/bin/pkcs15-init --store-certificate carina/nkrasnoyarsky.crt --auth-id 02 --id 45 --label 'nkrasnoyarsky'
Using reader with a card: Aktiv Rutoken S 00 00
User PIN required.
Please enter User PIN:
nikl@ak49:~$ /usr/bin/pkcs15-tool --list-certificatesUsing reader with a card: Aktiv Rutoken S 00 00
X.509 Certificate [nkrasnoyarsky]
    Flags    : 2
    Authority: no
    Path     : 3f0050150345
    ID       : 45
nikl@ak49:~$ /usr/bin/pkcs15-tool --list-keys
Using reader with a card: Aktiv Rutoken S 00 00

т.е. в результате сертификат засасывается в токен, приватный ключ - нет

Re: RuToken 32K150Z, *nix, Key length/algorithm not supported by card

Спасибо за информацию.

Можно ли посмотреть на вывод этих команд при включенной отладке OpenSC?

(в файле /etc/opensc.conf параметр debug = 6)

Re: RuToken 32K150Z, *nix, Key length/algorithm not supported by card

Для команды
$ /usr/bin/pkcs15-init --store-private-key carina/nkrasnoyarsky.key --auth-id 02 --id 45 --label 'nkrasnoyarsky' > token.debug

вывод
http://pastebin.com/sx7cmhi7

Для остальных надо?

Re: RuToken 32K150Z, *nix, Key length/algorithm not supported by card

судя по логу, "sc_rutoken_get_bin_from_prkey returned -1"
покопался в исходниках, нашел такое:

static int rutoken_get_bin_from_prkey(const struct sc_pkcs15_prkey_rsa *rsa,
                        u8 *bufkey, size_t *bufkey_size)
{
        const uint32_t bitlen = rsa->modulus.len * 8;
        size_t i, len;

        if (    rsa->modulus.len  != bitlen/8
             || rsa->p.len        != bitlen/16
             || rsa->q.len        != bitlen/16
             || rsa->dmp1.len     != bitlen/16
             || rsa->dmq1.len     != bitlen/16
             || rsa->iqmp.len     != bitlen/16
             || rsa->d.len        != bitlen/8
             || rsa->exponent.len > sizeof(uint32_t)
        )
                return -1;

        if (*bufkey_size < 14 + sizeof(uint32_t) * 2 + bitlen/8 * 2 + bitlen/16 * 5)
                return -1;

Видимо, что-то не так с форматом ключа?

Re: RuToken 32K150Z, *nix, Key length/algorithm not supported by card

добавил в функцию немного отладки, получил такие цифры:

bitlen 1024 rsa->modulus.len 128, rsa->p.len 64, rsa->q.len 64, rsa->dmp1.len 64, rsa->dmq1.len 64, rsa->iqmp.len 63, rsa->d.len 128, rsa->exponent.len 3

Смущает, что rsa->iqmp.len 63, разумеется оно не проходит в проверку rsa->iqmp.len != bitlen/16

Re: RuToken 32K150Z, *nix, Key length/algorithm not supported by card

Короче, я закомментировал строку '|| rsa->iqmp.len != bitlen/16' , пересобрал opensc.
В результате, у меня все залезло в токен.

Но это же неправильно?

Re: RuToken 32K150Z, *nix, Key length/algorithm not supported by card

Действительно, неправильно то, что rsa->iqmp.len получился 63
Этого вроде бы быть не должно.

Если ключ не критичен, не могли бы вы его показать?
Чем он был сгенерирован? OpenSSL?

Есть подозрение что возникла какая то проблема при парсинге pem формата закрытого ключа где-то на верхних уровнях OpenSC.

Re: RuToken 32K150Z, *nix, Key length/algorithm not supported by card

Кирилл Мещеряков пишет:

Если ключ не критичен, не могли бы вы его показать?
Чем он был сгенерирован? OpenSSL?

Есть подозрение что возникла какая то проблема при парсинге pem формата закрытого ключа где-то на верхних уровнях OpenSC.

Ключ пока критичен, но все-же попробую его ревокнуть и отдать вам на растерзание.

Re: RuToken 32K150Z, *nix, Key length/algorithm not supported by card

чисто теоретически, iqmp мог получиться < 64

Однако, навряд ли OpenSSL смог бы сделать такое.

Мы посмотрим что там произошло, Ваш ключик нам бы очень в этом помог.