pkcs#11

При вызове функции C_InitToken возвращается CKR_DEVICE_ERROR. Это нормально?

Re: pkcs#11

Какая у Вас версия драйверов?
Какая у Вас версия библиотеки rtPKCS11.dll?

После установки новых драйверов (версии 2.22.01.0227) должна быть версия rtPKCS11.dll  2.21.0.0

Re: pkcs#11

Установил свежий драйвер. Ситуация не изменилась.

Re: pkcs#11

Версию DLL проверили?

Re: pkcs#11

2.21.00.
Но вызывая C_GetInfo, я получаю следующие версии:
CryptokiVersion:  2.1
LibraryVersion:    2.0

Re: pkcs#11

Вы проверяли - сам токен рабочий?

Re: pkcs#11

Да, проверял, на одном из ваших примеров на создание объектов - токен корректно отработал. Вообще у меня три рутокена и ведут себя они одинаково - вылетает CKR_DEVICE_ERROR при вызове C_InitToken, все остальные функции, которые успел попробовать работают нормально.

Re: pkcs#11

Пришлите, пожалуйста, Ваш пример, который выдает ошибку на адрес hotline@rutoken.ru

Re: pkcs#11

Это пример InitToken из SDK.

Re: pkcs#11

Здравствуйте!
   
     Согласно стандарту PKCS #11 (текущей версии v 2-20), появление ошибки CKR_DEVICE_ERROR при вызове какой-либо функции должно сигнализировать о том, что произошел сбой в работе токена или слота. Однако, поскольку ошибка возникает именно при вызове функции C_InitToken и имеющиеся токены исправны, то возможен такой вариант.
     Если при попытке инициализации токена с помощью C_InitToken Cryptoki обнаружит, что у некоторого приложения открыт сеанс с токеном, то функция завершится с ошибкой CKR_SESSION_EXISTS, а токен не будет инициализирован. К сожалению, сам Cryptoki не всегда способен определить наличие открытого сеанса с токеном. В этом случае поведение и последствия вызова функции C_InitToken не определены. В связи с этим, не могли бы Вы уточнить:
     - имеются ли в системе какие-либо приложения, также использующие интерфейс PKCS #11;
     - установлено ли в системе ПО для токенов других производителей;
     - что происходит при вызове криптографических функций (генерация ключей, шифрование, расшифрование) из наших примеров?

Re: pkcs#11

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

- нет, по-крайней мере вашу реализацию;
- нет;
- они корректно отрабатывают.

Пока пользуюсь инициализацией через утилиту администрирования. Работает.
Насколько я понимаю, утилита работает через тот же низкоуровненый интерфейс, что и pkcs#11?

Re: pkcs#11

Да, утилита и библиотека используют тот же низкоуровневый интерфейс. Однако, выполняемые ими операции вовсе неэквивалентны.
     Утилита администрирования позволяет инициализировать всю файловую систему токена, создавая дерево предопределенных папок со служебными файлами и объекты, хранящие PIN-коды пользователя и администратора. Т.е. в этом случае полностью перезаписывается вся память токена.
     Функция C_InitToken всего лишь подготавливает структуру папок для хранения объектов PKCS #11, которые располагаются в предопределенной папке 3F00\0000\0000\0001. Фактически C_InitToken только удаляет содержимое этой папки и задает символьное имя токена.
     Поэтому такое поведение весьма странно.
     Скажите, а попытка вызова C_InitToken для предварительно инициализированного с помощью утилиты администрирования токена тоже заканчивается ошибкой CKR_DEVICE_ERROR?

Re: pkcs#11

Вопрос снят. Спасибо.

Я инициализировал токен со следующим параметром:
"PIN-код Пользователя имеют право менять" *Администратор.

Не обратил внимание на сообщение, примите извинения за отобранное время.  Я инициализировал токен до этого с правом смены у пользователя и, видимо, приложению просто не хватило полномочий для сброса пин-кода при инициализации.