14.04.2006 15:46:53Как правильно задать путь+имя к контейнеру на eToken Ответов: 17
Халтобин Евгений
Необходимо создать контейнер на eToken PRO. Создается без проблем с таким именем: \\.\AKS ifdh <число>\ContName, где ContName имя контейнера (уникальное имя после создания SCARD\ETOKEN_PRO16_<serial>\CC00\<набор каких-то чисел>). Но нужно различать eToken по серийному номеру! Для этого имя задаю так: \\.\AKS ifdh <число>\SCARD\ETOKEN_PRO16_<serial>\ContName. Функции создания контейнера и генерация пар отрабатывают без ошибок, но контейнер не создается! Помогите, как мне правильно задать имя контейнера.
 
Ответы:
15.04.2006 13:45:10Алексей
Хотел поинтересоваться поподробнее, как вам удалось установить такой считыватель и
носитель еТокен в КриптоПро? Под какой ОС?
17.04.2006 9:41:35Халтобин Евгений
ОС Windows XP, а насчет установки, добавлял носитель и считыватель в Крипто-Про.
17.04.2006 14:54:18Василий
Есть следующие типы имени контейнера (в примерах имена одного и того же контейнера):
1) Дружественное - просто имя без префиксов (например, 95fc070f-a0c4-4366-a181-b27b818036f9)
2) Уникальное - имя с привязкой к конкретному носителю с его характеристиками (название, сер. номер, метка)
(например, SCARD\ETOKEN_PRO_000daa08\CC00\A127)
3) FQCN имя (Full Qualified Container Name) - имя контейнера с указанием считывателя (например, \\.\AKS ifdh 0\95fc070f-a0c4-4366-a181-b27b818036f9)
4) FQCN уникальное имя (например, \\.\AKS ifdh 0\SCARD\ETOKEN_PRO_000daa08\CC00\A127)

Так вот. В уникальном имени используется контрольная сумма (последние цифры). Т.к. заранее эти цифры неизвестны, то создание контейнера по уникальному имени невозможно.
Для контроля серийного номера вставленного токена используйте внешние средства (интерфейс работы с токеном). Или, если на токене уже есть контейнер - информацию из его уникального имени.
19.04.2006 11:03:23Халтобин Евгений
Встала другая проблема. Если на Токене есть контейнер, и я пытаюсь создать еще один, то на ф-ции CryptGenKey(hCryptProv,AT_SIGNATURE,CRYPT_EXPORTABLE,&hKey) постоянно выскакивает окно вставьте ключевой носитель <имя нового контейнера>. Имя нового контейнера задаю так:\\.\AKS ifdh 0\<имя контейнера>
19.04.2006 11:08:46Халтобин Евгений
Добавление к предыдущему вопросу. Появляется окно биологического датчика, задаю ПИН к контейнеру. О появляются и исчезают окна вставьте ключевой контейнер
20.04.2006 12:59:35Василий
1. Сколько свободной памяти на токене (eToken Properties скажет).
2. При создании нового контейнера используется имя, которого не было ранее на этом компьютере?
3. CryptGenKey делается для контейнера, открытого с флажком CRYPT_NEWKEYSET ?
20.04.2006 15:03:24Халтобин Евгений
Да дело в свободной памяти. Спасибо!
20.04.2006 15:03:30Халтобин Евгений
Да дело в свободной памяти. Спасибо!
20.04.2006 15:04:00Халтобин Евгений
Да дело в свободной памяти. Спасибо!
20.04.2006 15:04:04Халтобин Евгений
Да дело в свободной памяти. Спасибо!
20.04.2006 15:04:06Халтобин Евгений
Да дело в свободной памяти. Спасибо!
10.05.2006 11:12:35Халтобин Евгений
Новая проблема, с именами. Перечисляю считыватели:
CryptGetProvParam(hProv, PP_ENUMREADERS, pbData, &pdwDataLen, flag). Получаю список ("Реестр","AKS ifdh 0","Дисковод, A"). Создаю контейнер:
CryptAcquireContext(&hCryptProv, "\\\\.\\Реестр\\<имя контейнера>", ProvName, ProvType, CRYPT_NEWKEYSET). Выдает ошибку NTE_BAD_KEYSET_PARAM( 0x8009001FL ). С "AKS ifdh 0" все нормально. Почему не проходит с считывателем реестра?
10.05.2006 12:10:12maxdm
попробуйте Registry. "Реестр" - это nickname
10.05.2006 12:30:47Халтобин Евгений
Но мне надо использовать "nickname". Я получаю список считывателей, установленных в системе. Как будет называться считыватель реестра(\\.\REGISTRY\) не известно! Создавать контейнер надо с использованием nickname.
11.05.2006 11:15:51Халтобин Евгений
В реестре нашел ветки:
HKEY_LOCAL_MACHINE\SOFTWARE\Crypto Pro\Cryptography\CurrentVersion\KeyDevices\PCSC\AKS ifdh 0\Default\Name = "Считыватель еТокен"
HKEY_LOCAL_MACHINE\SOFTWARE\Crypto Pro\Cryptography\CurrentVersion\KeyDevices\Registry\Default\Name = "Реестр" …
Список “Name” возвращает функция CryptGetProvParam(hProv, PP_ENUMREADERS, pbData, &pdwDataLen, flag). Если Name подставить в CryptAcquireContext(&hCryptProv, "\\\\.\\Name\\<имя контейнера>", ProvName, ProvType, CRYPT_NEWKEYSET), где Name=”Реестр” то выдает ошибку NTE_BAD_KEYSET_PARAM. А если подставить имя которое находится в HKEY_LOCAL_MACHINE\SOFTWARE\Crypto Pro\Cryptography\CurrentVersion\KeyDevices например CryptAcquireContext(&hCryptProv, "\\\\.\\Registry\\<имя контейнера>", ProvName, ProvType, CRYPT_NEWKEYSET),то все работает. Как мне получить список не “Name”, а имена которые прописаны в ветке реестра [HKEY_LOCAL_MACHINE\SOFTWARE\Crypto Pro\Cryptography\CurrentVersion\KeyDevices]?
11.05.2006 14:20:10cav
1. Немного попроавлю предыдущие ответы (перепутали терминологию).
У считывателя есть nickname, он зависит только от самого считывателя и всегда одинаков, для реестра это registry, это имя case insansative. Есть еще имя соединения, оно зависит от самого считывателя, например для реестра его просто нет, для дисковода это буква имени диска, например "A". Пара nickname и имя соединения используется для получения FQCN имени, для дисковода это будет \\.\FAT12_A, для реестра \\.\REGISTRY\. Есть еще одно имя - имя считывателя, так как его задал пользователь, это имя может отличаться на разных машинах, по умолчанию для registry "Реестр", но можно и задать "Это хранилище ключей в моем реестре". Пользовательское имя используется только для отображению пользователю, просто для удобства, сравнение этих имен в CSP нет.
2. Функция CryptGetProvParam( ... PP_ENUMREADERS ... ) возвращает, не одно имя, а структуру состоящую из двух имен (строка заканчивающаяся нулем в текущей кодировке пользовательского имени считывателя, за которой следует ASCIIZ строка nickname+имя соединения) и далее байт флагов считывателя.
11.05.2006 14:30:55cav
И еще одна поправка, в уникальном имени последние 4 символа действительно контрольная сумма дружественного имени контейнера, она возвращается для тех контейнеров, которые имеют дружественное имя. Но, при открытии контейнера (на чтение или на создание) ее можно не указывать.
Если Вы попытаетесь создать контейнер по уникальному имени он будет создан, а дружественное имя будет совпадать с уникальным.
Если Вы попытаетесь открыть контейнер по уникальному имени без указания контрольной суммы, который содержит и уникальное и дружественное имя, то будет открыт первый попавшийся контейнер, который соответствует уникальному имени. Ситуация когда есть два контейнера с одинаковыми уникальными именами встречается не очень часто, но возможна.