(2014-07-23 13:48:28 отредактировано Ахат)

Ключевые контейнеры через pkcs#11 или его расширение?

Можно ли с помощью pkcs#11 или его расширения (без использования криптопровайдера) получить информацию о ключевых контейнерах на рутокене, записанных с помощью криптопровайдера, например, КриптоПро?
Если нет, то с помощью чего?
Как это делает "Панель управления Рутокен" во вкладке "Сертификаты"?
Ключевой контейнер не виден как CKO_CERTIFICATE, CKO_DATA, ...
Есть ли где-то пример или тема на форуме?

Re: Ключевые контейнеры через pkcs#11 или его расширение?

Ахат пишет:

Можно ли с помощью pkcs#11 или его расширения (без использования криптопровайдера) получить информацию о ключевых контейнерах на рутокене, записанных с помощью криптопровайдера, например, КриптоПро?
Если нет, то с помощью чего?
Как это делает "Панель управления Рутокен" во вкладке "Сертификаты"?
Ключевой контейнер не виден как CKO_CERTIFICATE, CKO_DATA, ...
Есть ли где-то пример или тема на форуме?

Добрый день!

Контейнер КриптоПро CSP хранится в файлах несовместимых с интерфейсом PKCS#11.
Поэтому с КриптоПро CSP так сделать не получится.

С СигналКОМ CSP, ViPNet CSP и Лисси CSP контейнеры записываются через PKCS#11 и поэтому их можно прочитать и использовать через PKCS#11 интерфейс.

(2014-07-23 17:10:16 отредактировано Ахат)

Re: Ключевые контейнеры через pkcs#11 или его расширение?

Спасибо за ответ.
Вообще, минимальная задача определить пуст рутокен или нет. Пуст - значит нет не только объектов pkcs#11, но и ключевых контейнеров типа от КриптоПро.
Но даже после его форматирования (через Панель управления рутокен) далее через pkcs#11 получаю "Public memory  free: 30368, total: 32768;   Private memory   free: 30368, total: 32768".
Как определить отсутствие каких-либо пользовательских данных на рутокене?

Re: Ключевые контейнеры через pkcs#11 или его расширение?

Ахат пишет:

Спасибо за ответ.
Вообще, минимальная задача определить пуст рутокен или нет. Пуст - значит нет не только объектов pkcs#11, но и ключевых контейнеров типа от КриптоПро.
Но даже после его форматирования (через Панель управления рутокен) далее через pkcs#11 получаю "Public memory  free: 30368, total: 32768;   Private memory   free: 30368, total: 32768".
Как определить отсутствие каких-либо пользовательских данных на рутокене?

Это довольно просто.
Контейнер КриптоПро CSP вместе с ключами занимает порядка 4Кб. По оставшемуся объему свободной памяти Вы можете довольно точно оценить - есть он там или нет.

Re: Ключевые контейнеры через pkcs#11 или его расширение?

На только что отформатированном (через Панель управления Рутокен) "Rutoken lite 64K" оказалось "Public memory    free: 61728, total: 65536
Private memory    free: 61728, total: 65536" , это уже почти 4Кб.
Это какие-то служебные данные? Каков их точный порог, если он есть? Как определить, что это не ключевой контейнер?
Вообще, минимальная задача определить отсутствие каких-либо пользовательских данных на рутокене. Как это делать? Через какой интерфейс проще? Есть примеры, близкие к ответу?
А лучше определять наличие ключевых контейнеров, например от КриптоПро. Как это делает "Панель управления Рутокен" во вкладке "Сертификаты"?

Re: Ключевые контейнеры через pkcs#11 или его расширение?

Добрый день.
Вы никогда не сможете сделать так чтобы на Рутокене Lite было ровно 64 кб памяти :) Конечно, есть служебные данные, есть место съедаемое файловой системой. Вы всегда можете рассчитвать на ~61700 байт на отформатированном чистом Рутокене Lite.

Если Вы хотите решить задачу определить наличие контейнера КриптоПро CSP более конкретно, то не обойтись без написания кода.
Мы для этого используем интерфейс ISO 7816, алгоритм можем подсказать.

Re: Ключевые контейнеры через pkcs#11 или его расширение?

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

Если Вы хотите решить задачу определить наличие контейнера КриптоПро CSP более конкретно, то не обойтись без написания кода.
Мы для этого используем интерфейс ISO 7816, алгоритм можем подсказать.

Подскажите, пожалуйста, можно на мою почту архив с близкими примерами и документацией.

Вообще, способы решения задачи определения наличия пользовательских данных (точнее любых не pkcs#11 пользовательских объектов, например, ключевых контейнеров КриптоПро) на рутокене вижу такие:
1. Ориентироваться на общую и свободную память рутокена. Но этот способ не точный, зависит от конкретного устройства. Нужен способ, годный и для будущих ваших устройств. Но это самый простой способ, годный как временное решение. Поэтому скажите, пожалуйста, каков размер на служебные данные в зависимости от токенов, выпускаемых сейчас и раньше? Это 4*1024 байт или 4*1000 байт для всех ваших токенов? Если занятый объем больше, значит там есть пользовательские данные?
2. Использовать криптопровайдер. Но тут надо использовать именно тот криптопровайдер, чьи контейнеры могут быть на токене, а этого мы не знаем заранее. Но пусть знаем, например, КриптоПро. Тут еще проблема: как через криптографические функции WinAPI получить серийный номер устройства (нам он нужен)? Можно конечно получить полное имя ключевого контейнера CryptGetProvParam(...PP_UNIQUE_CONTAINER...), но там нет серийного номера.
3. Низкоуровневый подход (ISO 7816, APDU команды). Пришлите, пожалуйста, на мою почту архив с близкими к этой задаче примерами и документацией, например APDU команд, поддерживаемых всеми рутокенами.

Re: Ключевые контейнеры через pkcs#11 или его расширение?

Здравствуйте.
1) предсказать то что случится в будущем я не возьмусь. Для существующих токенов легко померить. Общей формулы нет.
2) CryptGetProvParam(PP_ENUMREADERS)
http://cpdn.cryptopro.ru/content/csp36/ … 1106d.html
http://cpdn.cryptopro.ru/content/csp36/ … d_i_a.html
3) я Вам обещал алгоритм, а Вы просите примеры. Это слегка разные вещи. Если всё таки нужен именно код, то мы, конечно, можем сделать его на заказ, но не бесплатно.

Re: Ключевые контейнеры через pkcs#11 или его расширение?

Добрый день!

Если не сложно, проясните пожалуйста, для какой цели эта задача решается. Очень интересно.
Спасибо!

Re: Ключевые контейнеры через pkcs#11 или его расширение?

Vladimir Ivanov пишет:

Добрый день!

Если не сложно, проясните пожалуйста, для какой цели эта задача решается. Очень интересно.
Спасибо!

Токен должен быть пуст (у меня такое в тз). Если он не пуст, то выводится сообщение об этом, далее пользователь либо меняет токен, либо его инициализирует. Далее на токен записывается ключевой контейнер КриптоПро. Еще токенов может быть не один, с помощью второго подписывается.

Я ошибся, оказывается КриптоПро в PP_UNIQUE_CONTAINER возвращает и серийный номер токена. Но в msdn это не документировано.
Видимо придется так и делать. Недостаток подхода: на токене в принципе может быть ключевой контейнер не КриптоПро, а криптопровайдера, который даже не установлен в системе. Можете сказать, какие еще криптопровайдеры, кроме КриптоПро, записывают на токен не pkcs#11 объекты, наподобие ключевых контейнеров?
И еще один недостаток: нужно перебирать все ключевые контейнеры КриптоПро, но при переборе иногда происходит зависание на несколько секунд и более, видимо КриптоПро ожидает подключения отсоединенных токенов с ключевыми контейнерами. Надеюсь это решаемо.

Re: Ключевые контейнеры через pkcs#11 или его расширение?

Ахат пишет:
Vladimir Ivanov пишет:

Добрый день!

Если не сложно, проясните пожалуйста, для какой цели эта задача решается. Очень интересно.
Спасибо!

Токен должен быть пуст (у меня такое в тз). Если он не пуст, то выводится сообщение об этом, далее пользователь либо меняет токен, либо его инициализирует. Далее на токен записывается ключевой контейнер КриптоПро. Еще токенов может быть не один, с помощью второго подписывается.

Я ошибся, оказывается КриптоПро в PP_UNIQUE_CONTAINER возвращает и серийный номер токена. Но в msdn это не документировано.
Видимо придется так и делать. Недостаток подхода: на токене в принципе может быть ключевой контейнер не КриптоПро, а криптопровайдера, который даже не установлен в системе. Можете сказать, какие еще криптопровайдеры, кроме КриптоПро, записывают на токен не pkcs#11 объекты, наподобие ключевых контейнеров?
И еще один недостаток: нужно перебирать все ключевые контейнеры КриптоПро, но при переборе иногда происходит зависание на несколько секунд и более, видимо КриптоПро ожидает подключения отсоединенных токенов с ключевыми контейнерами. Надеюсь это решаемо.

Спасибо большое за пояснение!
Тут ситуация еще более интересная получается. Кроме криптопровайдеров, которые могут хранить свои контейнеры на токене, может существовать еще масса приложений, которые могут хранить не только ключевые пары и сертификаты, но и различного рода идентификаторы, симметричные ключи, какие-то еще данные. И если подходить к вопросу со всей тщательностью, задачу в поставленных условиях можно и не решить надежным способом. Разве что проверить существование на токене каких-либо файлов и папок, которые созданы после его форматирования, то есть не существуют на токене по умолчанию, сразу после его форматирования. для этого придется сравнить дерево файлов и папок, которое получается на токене непосредственно после форматирования с текущим деревом для конкретного токена.
Отсюда вопрос - не является ли требование обязательного отсутствия объектов на токене избыточным для задачи?