Ключевое слово в защите информации
ключевое слово
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход. Новые регистрации запрещены.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline Maxim Korobov  
#1 Оставлено : 21 апреля 2010 г. 21:52:44(UTC)
Maxim Korobov

Статус: Активный участник

Группы: Участники
Зарегистрирован: 19.02.2008(UTC)
Сообщений: 66
Откуда: Москва

В приложении использую сокращённые дружественные имена контейнеров сертификатов, а там где надо ввести пин-код за пользователя получаю список уникальных названий контейнеров.

Как можно преобразовать одно название к другому? FQCN -> Frendly.
Offline Челпанов А.  
#2 Оставлено : 22 апреля 2010 г. 13:23:44(UTC)
Челпанов А.

Статус: Активный участник

Группы: Участники
Зарегистрирован: 24.12.2007(UTC)
Сообщений: 390
Мужчина
Откуда: КриптоПро

Поблагодарили: 2 раз в 2 постах
Существуют 4 имени контейнера
- Дружественное
- Уникальное
- FQCN дружественно
- FQCN уникальное

(FQCN дружественное)==\\.\(Имя считывателя)\(Дружественное имя)
(FQCN уникальное)==\\.\(Имя считывателя)\(уникальное имя)
Имя считывателя не содержит символов \

В общем случае функции преобразования из дружественного в уникальное и из уникального в дружественное не существует. Для реестра
(Уникальное имя)==REGISTRY\\(Дружественное имя).
Для остальных считывателей, пользоваться такими преобразованиями я бы не рекомендовал, но, для примера, приведу для дискеты
(Уникальное имя)==FAT12\[SERIAL]_[VOLUME]\(8 первых символов имени контейнера).(NNN)\(CRC дружественного имени).
Подробное описание полей, а так же описание уникального имени для части других носителей есть в CSP SDK.

Есть два основных способа преобразовать имя контейнера в уникальное имя и обратно. Оба этих способа требуют наличия вставленного ключевого носителя.
1. CryptAcquireContext(одно из известных имен), CryptGetProvParam(PP_CONTAINER, PP_UNIQUE_CONTAINER, PP_FQCN )
2. CryptAcquireContext(CRYPT_VERIFYCONTEXT), CryptGetProvParam(PP_ENUMCONTAINERS)
при указании флага CRYPT_UNIQUE в CryptGetProvParam будут возвращаться пары (уникальное имя)(дружественное имя) разделенные символов \0.
Кроме того, при добавлении флага CRYPT_FQCN будут возвращаться пары FQCN имен

поэксперементировать с переименованием можно при помощи утилиты csptest
csptest -keyset -enum_containers -verifycontext -unique
csptest -keyset -enum_containers -verifycontext -unique -fqcn
С уважением, Александр.
Offline Maxim Korobov  
#3 Оставлено : 22 апреля 2010 г. 19:20:24(UTC)
Maxim Korobov

Статус: Активный участник

Группы: Участники
Зарегистрирован: 19.02.2008(UTC)
Сообщений: 66
Откуда: Москва

Спасибо большое за оперативный, исчерпывающий и бесплатный ответ!

Благодаря указанным сведениям получилось сделать то, что нужно.
Замечу следующее:
1. В CSP 2.0 вызов CryptAcquireContext с флагом CRYPT_SILENT работает одинаково успешно с любым из возможных типов FQCN-имени контейнера;
2. В общем случае, чтобы провести аутентификацию пользователей, приходится обращаться к контейнеру (в моём случае, токену) 3 раза:
2.1. Перечисление контейнеров с флагом CRYPT_FQCN (как вы сказали, если нет флага CRYPT_UNIQUE, то будут возвращаться дружественные имена);
2.2. Открытие контекста для каждого контейнера из полученного списка для получения дружественного имени;
2.3. Обращение к содержимому выбранного контейнера. Обращение с помощью FQCN-имени и флага CRYPT_SILENT, чтобы отображать собственное окно ввода пароля. При этом, показ пользователю дружественного имени.
Offline Челпанов А.  
#4 Оставлено : 23 апреля 2010 г. 12:41:45(UTC)
Челпанов А.

Статус: Активный участник

Группы: Участники
Зарегистрирован: 24.12.2007(UTC)
Сообщений: 390
Мужчина
Откуда: КриптоПро

Поблагодарили: 2 раз в 2 постах
Цитата:
2.1. Перечисление контейнеров с флагом CRYPT_FQCN (как вы сказали, если нет флага CRYPT_UNIQUE, то будут возвращаться дружественные имена);
2.2. Открытие контекста для каждого контейнера из полученного списка для получения дружественного имени;

Не понял зачем пункт 2.2, повторю
Цитата:
при указании флага CRYPT_UNIQUE в CryptGetProvParam будут возвращаться пары (уникальное имя)(дружественное имя) разделенные символов \0
То есть сразу за строкой уникального имени следует строка дружественного имени. Оба имени соответствую одному и тому же контейнеру.
С уважением, Александр.
Offline Maxim Korobov  
#5 Оставлено : 23 апреля 2010 г. 20:15:15(UTC)
Maxim Korobov

Статус: Активный участник

Группы: Участники
Зарегистрирован: 19.02.2008(UTC)
Сообщений: 66
Откуда: Москва

Понял. Достаточно одного вызова и разбора строки.
Так как ключи CRYPT_UNIQUE и CRYPT_FQCN определены в модуле Крипто-Про, подобного поведения не стоит ожидать при использовании других криптопровайдеров, да?

Ещё небольшой вопрос: возможно ли избежать показа окна с доступными носителями при создании контейнера (CryptAcquireContext с флагом CRYPT_NEWKEYSET), если передать в качестве названия FQCN-имя нового контейнера?

Отредактировано пользователем 23 апреля 2010 г. 20:17:33(UTC)  | Причина: Не указана

Offline Челпанов А.  
#6 Оставлено : 26 апреля 2010 г. 13:51:04(UTC)
Челпанов А.

Статус: Активный участник

Группы: Участники
Зарегистрирован: 24.12.2007(UTC)
Сообщений: 390
Мужчина
Откуда: КриптоПро

Поблагодарили: 2 раз в 2 постах
Цитата:
Так как ключи CRYPT_UNIQUE и CRYPT_FQCN определены в модуле Крипто-Про, подобного поведения не стоит ожидать при использовании других криптопровайдеров, да?

Уникальные имена контейнеров и FQCN имена контейнеров изобретение не наше, а Microsoft. Но различий много.
1. У microsoft FQCN имена существуют только для смарт-карт, по этим именам можно и открывать контейнер.
2. У microsoft получить FQCN имя нельзя ни перечислением, ни с помощью CryptGetProvParam (и ключи CRYPT_UNIQUE и CRYPT_FQCN не поддерживаются)
3. Формат уиникального имени и FQCN имени у microsoft не специфицирован.
Это не полный список.

Цитата:
Ещё небольшой вопрос: возможно ли избежать показа окна с доступными носителями при создании контейнера (CryptAcquireContext с флагом CRYPT_NEWKEYSET), если передать в качестве названия FQCN-имя нового контейнера?

Да. Передавать лучше FQCN дружественное имя, FQCN уникальное будет сгенерировано.
С уважением, Александр.
Offline chikory  
#7 Оставлено : 16 января 2013 г. 14:20:18(UTC)
chikory

Статус: Активный участник

Группы: Участники
Зарегистрирован: 17.11.2011(UTC)
Сообщений: 35
Откуда: Екатеринбург

Добрый день.
Не подскажите, есть ли форма записи, чтобы результат работы CryptGetProvParam(PP_ENUMCONTAINERS)был похож на результат работы утилиты csptest с параметрами -keyset -enum_containers -verifycontext -unique -fqcn.
Например вот так:
mail CryptoPro | SCARD\ETOKEN_PRO_27cca10d351b\CC00\A29B
или
\\.\AKS ifdh 0\mail CryptoPro | \\.\AKS ifdh 0\SCARD\ETOKEN_PRO_27cca10d351b\CC00\A29B
Я как не пытал CryptGetProvParam () выдает только:
\\.\AKS ifdh 0\SCARD\ETOKEN_PRO_27cca10d351b\CC00\A29B
не могу понять как вывести пару (уникальное имя)(дружественное имя)
Пишу на C#
Последняя испробованная форма записи функции:
CryptGetProvParam(hProv, PP_ENUMCONTAINERS, sb, ref pdwDataLen, dwFlags | CRYPT_UNIQUE | CRYPT_FQCN))

Автор: Челпанов А. Перейти к цитате
Существуют 4 имени контейнера
2. CryptAcquireContext(CRYPT_VERIFYCONTEXT), CryptGetProvParam(PP_ENUMCONTAINERS)
при указании флага CRYPT_UNIQUE в CryptGetProvParam будут возвращаться пары (уникальное имя)(дружественное имя) разделенные символов \0.
Кроме того, при добавлении флага CRYPT_FQCN будут возвращаться пары FQCN имен

поэксперементировать с переименованием можно при помощи утилиты csptest
csptest -keyset -enum_containers -verifycontext -unique
csptest -keyset -enum_containers -verifycontext -unique -fqcn

Отредактировано пользователем 16 января 2013 г. 14:21:11(UTC)  | Причина: Не указана

Offline Максим Коллегин  
#8 Оставлено : 16 января 2013 г. 15:46:48(UTC)
Максим Коллегин

Статус: Сотрудник

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 6,457
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 39 раз
Поблагодарили: 750 раз в 645 постах
Код:
| CRYPT_UNIQUE | CRYPT_FQCN
используется в csptest

Отредактировано пользователем 16 января 2013 г. 15:47:27(UTC)  | Причина: Не указана

Знания в базе знаний, поддержка в центре поддержки
Offline chikory  
#9 Оставлено : 17 января 2013 г. 10:27:19(UTC)
chikory

Статус: Активный участник

Группы: Участники
Зарегистрирован: 17.11.2011(UTC)
Сообщений: 35
Откуда: Екатеринбург

Добрый день.
Автор: maxdm Перейти к цитате
Код:
| CRYPT_UNIQUE | CRYPT_FQCN
используется в csptest


Не совсем понял, что вы хотели этим сказать.
В нескольких темах на форуме написано, что с помощью CryptGetProvParam(...,PP_ENUMCONTAINERS,...,...,CRYPT_FIRST|CRYPT_UNIQUE ) можно получить связку (дружественное имя)(уникальное имя) контейнера, но у меня выдает только уникальное. Может я не правильно толку смысл подобных фраз?
Челпанов А. написал:

Если добавить к CRYPT_FIRST еще и CRYPT_UNIQUE(0x08) будем получать, кроме имен контейнеров, еще и уникальные имена контейнеров (они будут возвращаться второй строкой внутри возвращаемых данных) и сможем отфильтровать те имена, которые содержат "SCARD\rutoken_"
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.