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

Уведомление

Icon
Error

2 Страницы12>
Опции
К последнему сообщению К первому непрочитанному
Offline Дмитрий И  
#1 Оставлено : 4 марта 2010 г. 3:36:18(UTC)
Дмитрий И

Статус: Участник

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

Добрый вечер,
использую CSP 3.6, но должно работать и в 3.0
Чтобы запомнить пароль доступа к конейнеру
открываю контекст контейнера
CryptAcquireContext( CRYPT_SILENT )
устанваливаю пароль
CryptSetProvParam( PP_KEYEXCHANGE_PIN )

Контекст не освобождаю, до тех пор пока нужен доступ к контейнеру.
В данном процессе в реестре создаются ветки, например
HKEY_LOCAL_MACHINE\SOFTWARE\Crypto Pro\Settings\Users\S-1-5-21-1268367499-517865807-3063332009-1003\KeyDevices\passwords\00011457
где 00011457 - ключевой контейнер (находится на смарт карте)
Интересно, что если не использовать SILENT режим и устанавливать в окошке ввода PIN кода "запомнить пароль" ветки создаются примерно такие
...KeyDevices\passwords\SCARD...
то есть используется уникальное наименование контейнера
1) В чем разница? Правильно ли запоминаю пароль в SILENT режиме?

Далее про удаление запомненного пароля
CryptSetProvParam( PP_KEYEXCHANGE_PIN, NULL )
то есть вместо пароля передаю NULL и освобождаю контекст
CryptReleaseContext()
Пароль забывается, но ветки в реестре остаются. Ветки удаляются только, если удалять запомненные пароли через КриптоПро.
2) Как правильно удалять запомненные пароли?
И еще интересен такой нюанс
Запоминаю пароль доступа к контейнеру
Сохраняю сертификат с карты со ссылкой на закрытый ключ в локальное хранилище пользователя
Далее вытаскиваю карту из считывателя
Делаю ЭЦП с использованием CAPICOM и сертификата
Подпись выполняется успешно! При этом обращения к считывателю не происходит
3) Это как так получается?
Offline Челпанов А.  
#2 Оставлено : 4 марта 2010 г. 11:52:55(UTC)
Челпанов А.

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

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

Поблагодарили: 2 раз в 2 постах
Цитата:
Чтобы запомнить пароль доступа к конейнеру
открываю контекст контейнера
CryptAcquireContext( CRYPT_SILENT )
устанваливаю пароль
CryptSetProvParam( PP_KEYEXCHANGE_PIN )
Этот код только запоминает пароль внутри контекста, проверки пароля не происходит. Поэтому, если Вы хотите закешировать контейнер (а кешируется именно полностью контейнер, а не пароль), то лучше еще загрузить ключ: подписать что-то, например, или вызвать специальную функцию
Код:
DWORD intprov; CryptGetProvParam(PP_HCRYPTPROV, (BYTE*)&intprov, 4)
. Контейнер остается закешированным до тех пор, пока он открыт хотя бы раз. Это поведение не зависит от флага SILENT, сервис/не сервис, включенности кеширования, но только для пользовательских ключей (ключи MACHINE_KEYSET ведут себя чуть по другому).

Цитата:
Контекст не освобождаю, до тех пор пока нужен доступ к контейнеру.
В данном процессе в реестре создаются ветки, например
HKEY_LOCAL_MACHINE\SOFTWARE\Crypto Pro\Settings\Users\S-1-5-21-1268367499-517865807-3063332009-1003\KeyDevices\passwords\00011457
где 00011457 - ключевой контейнер (находится на смарт карте)
Интересно, что если не использовать SILENT режим и устанавливать в окошке ввода PIN кода "запомнить пароль" ветки создаются примерно такие
...KeyDevices\passwords\SCARD...
то есть используется уникальное наименование контейнера
1) В чем разница? Правильно ли запоминаю пароль в SILENT режиме?

в ветке HKEY_LOCAL_MACHINE\SOFTWARE\Crypto Pro\Settings\Users\SID_пользователя\passwords сохраняется два типа информации: shortcut и пароль.
Shortcut - это соответствие между именем контейнера и уникальным именем контейнера. Shortcut ускоряет поиск контейнера, если контейнер не был уже открыт (если был, то контейнер закеширован и shortcut не участвует). В Вашем случае, поиск будет происходить только на считывателях смарт картах (не будет обращений, например к дисководу), только на карте с заданным сериным номером (он указан в уникальном номере контейнера), только в Application карты, который так же присутствует в уникальном номере.
Password сохраняется HKEY_LOCAL_MACHINE\SOFTWARE\Crypto Pro\Settings\Users\SID_пользователя\passwords\ТИП_носителя\уникальный_номер_контейнера\уникальный_номер_приложения\passwd
при установке галочки "запомнить пароль". При доступе к ключу (если контейнер не закеширован), если требуется пароль, и он не установлен при помощи PP_KEYEXCHANGEPIN (PP_SIGNATUREPIN)? и он есть в приведенном выше ключе реестра, используется именно он. В SILENT режиме при неправильно установленном пароле (PIN) функция вернет ошибке, а в оконном режиме, попросит ввести правильный.
Цитата:
Далее про удаление запомненного пароля
CryptSetProvParam( PP_KEYEXCHANGE_PIN, NULL )
то есть вместо пароля передаю NULL и освобождаю контекст
CryptReleaseContext()
Пароль забывается, но ветки в реестре остаются
Правильно.
Цитата:
2) Как правильно удалять запомненные пароли?

Удалением соответствующих веток реестра; можно только shortcut, можно только пароль; можно по контейнерам, можно все сразу.
Цитата:
И еще интересен такой нюанс
Запоминаю пароль доступа к контейнеру
Сохраняю сертификат с карты со ссылкой на закрытый ключ в локальное хранилище пользователя
Далее вытаскиваю карту из считывателя
Делаю ЭЦП с использованием CAPICOM и сертификата
Подпись выполняется успешно! При этом обращения к считывателю не происходит
3) Это как так получается?

Вариант 1. Остался открытым контейнер.
Вариант 2. Установлено хранение ключей в сервисе и включено кеширование.
С уважением, Александр.
Offline Дмитрий И  
#3 Оставлено : 5 марта 2010 г. 5:45:05(UTC)
Дмитрий И

Статус: Участник

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

Цитата:
Цитата:
Чтобы запомнить пароль доступа к конейнеру
открываю контекст контейнера
CryptAcquireContext( CRYPT_SILENT )
устанваливаю пароль
CryptSetProvParam( PP_KEYEXCHANGE_PIN )

Этот код только запоминает пароль внутри контекста, проверки пароля не происходит. Поэтому, если Вы хотите закешировать контейнер (а кешируется именно полностью контейнер, а не пароль), то лучше еще загрузить ключ: подписать что-то, например, или вызвать специальную функцию
Код:
DWORD intprov; CryptGetProvParam(PP_HCRYPTPROV, (BYTE*)&intprov, 4)

Контейнер остается закешированным до тех пор, пока он открыт хотя бы раз. Это поведение не зависит от флага SILENT, сервис/не сервис, включенности кеширования, но только для пользовательских ключей (ключи MACHINE_KEYSET ведут себя чуть по другому).

Как раз для проверки PIN кода использую CryptSignHash( AT_KEYEXCHANGE ), получается в данном случае кэшируется контейнер
Цитата:
Цитата:
Контекст не освобождаю, до тех пор пока нужен доступ к контейнеру.
В данном процессе в реестре создаются ветки, например
HKEY_LOCAL_MACHINE\SOFTWARE\Crypto Pro\Settings\Users\S-1-5-21-1268367499-517865807-3063332009-1003\KeyDevices\passwords\00011457
где 00011457 - ключевой контейнер (находится на смарт карте)
Интересно, что если не использовать SILENT режим и устанавливать в окошке ввода PIN кода "запомнить пароль" ветки создаются примерно такие
...KeyDevices\passwords\SCARD...
то есть используется уникальное наименование контейнера
1) В чем разница? Правильно ли запоминаю пароль в SILENT режиме?


в ветке HKEY_LOCAL_MACHINE\SOFTWARE\Crypto Pro\Settings\Users\SID_пользователя\passwords сохраняется два типа информации: shortcut и пароль.
Shortcut - это соответствие между именем контейнера и уникальным именем контейнера. Shortcut ускоряет поиск контейнера, если контейнер не был уже открыт (если был, то контейнер закеширован и shortcut не участвует). В Вашем случае, поиск будет происходить только на считывателях смарт картах (не будет обращений, например к дисководу), только на карте с заданным сериным номером (он указан в уникальном номере контейнера), только в Application карты, который так же присутствует в уникальном номере.
Password сохраняется HKEY_LOCAL_MACHINE\SOFTWARE\Crypto Pro\Settings\Users\SID_пользователя\passwords\ТИП_носителя\уникальный_номер_контейнера\уникальный_номер_приложения\passwd
при установке галочки "запомнить пароль". При доступе к ключу (если контейнер не закеширован), если требуется пароль, и он не установлен при помощи PP_KEYEXCHANGEPIN (PP_SIGNATUREPIN)? и он есть в приведенном выше ключе реестра, используется именно он. В SILENT режиме при неправильно установленном пароле (PIN) функция вернет ошибке, а в оконном режиме, попросит ввести правильный.

В приведенном выше способе кэширования контейнера в реестре создается только shortcut, и получается, что данная информация не может быть использована для получения доступа к контейнеру, а только лишь для ускорения поиска?
Цитата:
Цитата:

Далее про удаление запомненного пароля
CryptSetProvParam( PP_KEYEXCHANGE_PIN, NULL )
то есть вместо пароля передаю NULL и освобождаю контекст
CryptReleaseContext()
Пароль забывается, но ветки в реестре остаются

Правильно.
Цитата:

2) Как правильно удалять запомненные пароли?

Удалением соответствующих веток реестра; можно только shortcut, можно только пароль; можно по контейнерам, можно все сразу.

Я правильно понимаю, что на shortcuts можно не обращать внимание? И что с помощью CryptoAPI их удалить нельзя?
Цитата:
Цитата:

И еще интересен такой нюанс
Запоминаю пароль доступа к контейнеру
Сохраняю сертификат с карты со ссылкой на закрытый ключ в локальное хранилище пользователя
Далее вытаскиваю карту из считывателя
Делаю ЭЦП с использованием CAPICOM и сертификата
Подпись выполняется успешно! При этом обращения к считывателю не происходит
3) Это как так получается?

Вариант 1. Остался открытым контейнер.
Вариант 2. Установлено хранение ключей в сервисе и включено кеширование.

В моем случае вариант 1
Спасибо большое за подробную информацию, многое прояснилось...
То есть получается, что данный алгоритм годится для запоминания и удаления пароля доступа к контейнеру?
Offline Челпанов А.  
#4 Оставлено : 5 марта 2010 г. 16:27:35(UTC)
Челпанов А.

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

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

Поблагодарили: 2 раз в 2 постах
Цитата:
Как раз для проверки PIN кода использую CryptSignHash( AT_KEYEXCHANGE ), получается в данном случае кэшируется контейнер
да
Цитата:
В приведенном выше способе кэширования контейнера в реестре создается только shortcut, и получается, что данная информация не может быть использована для получения доступа к контейнеру, а только лишь для ускорения поиска?
Да
Цитата:
Я правильно понимаю, что на shortcuts можно не обращать внимание? И что с помощью CryptoAPI их удалить нельзя?
Да. Чаше всего про shortcut вспоминают, когда требуется создать контейнер с именем, который уже использовался ранее, но был не совсем корректно удален.
Цитата:
То есть получается, что данный алгоритм годится для запоминания и удаления пароля доступа к контейнеру?
Да, запоминание в окне, работа с контейнером без оконного ввода пароля.

Отредактировано пользователем 5 марта 2010 г. 16:28:12(UTC)  | Причина: Не указана

С уважением, Александр.
Offline Дмитрий И  
#5 Оставлено : 14 мая 2010 г. 2:38:11(UTC)
Дмитрий И

Статус: Участник

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

Поясните пожалуйста следующую ситуацию, выполняю кэширование контейнера (находится на карте)
CryptAcquireContext( CRYPT_SILENT )
CryptSetProvParam( PP_KEYEXCHANGE_PIN )
CryptSignHash( AT_KEYEXCHANGE )
Сохраняю сертификат с карты со ссылкой на закрытый ключ в локальное хранилище пользователя
Контекст не освобождаю, далее
Windows XP, CSP 3.0 и CSP 3.6
Делаю ЭЦП с использованием CAPICOM, PIN код не запрашивается
Windows 7 и CSP 3.6
Делаю ЭЦП с использованием CAPICOM, PIN код запрашивается
А в случае установки SSL соединения с 2ух сторонней аутентификацией на основании сертификата,
PIN код запрашивается в любом случае.

Получается, что кэширование контейнера действует только в рамках текущего процесса?
Если это так, то остается вариант кэширования контейнера в реестре
Что нужно записывать в ключ passwd?
Offline Челпанов А.  
#6 Оставлено : 14 мая 2010 г. 14:20:48(UTC)
Челпанов А.

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

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

Поблагодарили: 2 раз в 2 постах
Цитата:
Получается, что кэширование контейнера действует только в рамках текущего процесса?

Зависит от того, где вы храните ключи: в сервисе или приложении. При использовании CSP уровня KC2 всегда используется хранение ключей в сервисе и кеширование осуществляется для всех процессов данного пользователя, кроме того в CSP 3.6 для уровня KC1 можно настроить хранение ключей в сервисе (при помози контрольной панели КриптоПро CSP). Для CSP 3.0 сборки KC1, а так же при соответствующей настройке CSP 3.6 KC1 (по умолчанию) для хранения используется память каждого приложения, и кеширование будет ограничено рамками этого приложения.
Цитата:
Что нужно записывать в ключ passwd?

Для CSP 3.0 в ключ passwd записывается пароль в чистом виде, для CSP 3.6 он перешифрован. В любом случае, формат этого ключа реестра не документирован, и может быть изменен в дальнейшем. Используйте галочку в окне запроса пароля.
С уважением, Александр.
Offline Дмитрий И  
#7 Оставлено : 17 мая 2010 г. 12:23:34(UTC)
Дмитрий И

Статус: Участник

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

Челпанов А. написал:
Для CSP 3.0 в ключ passwd записывается пароль в чистом виде, для CSP 3.6 он перешифрован. В любом случае, формат этого ключа реестра не документирован, и может быть изменен в дальнейшем. Используйте галочку в окне запроса пароля.

К сожалению в условиях решаемой задачи нельзя использовать интерфейс КриптоПро CSP. Есть ли возможность программной установки галочки при установке пароля через CryptSetProvParam( PP_KEYEXCHANGE_PIN )? Или хотя бы алгоритм...
Сейчас я вижу одно решение проблемы - для CSP 3.6 KC1 настроить хранение ключей в сервисе, для CSP 3.0 KC1 использовать ветку реестра passwd
Offline Челпанов А.  
#8 Оставлено : 17 мая 2010 г. 12:58:43(UTC)
Челпанов А.

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

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

Поблагодарили: 2 раз в 2 постах
Строковый параметр реестре
Цитата:
HKEY_LOCAL_MACHINE\SOFTWARE\Crypto Pro\Settings\USERS\{SID}\KeyDevices\passwords\{MADIA}\{UNIQUE}\{FOLDER}\passwd
для CSP 3.0 содержит пароль.
{SID} - SID пользователя
{MEDIA} - тип носителя (REGISTRY, FAT12, ...)
{UNIQUE} - уникальный номер носителя
{FOLDER} - папка в которой находится ключ
Подробнее о частях уникального номера можнео почитать в КриптоПро CSP SDK 3.0: Интерфейс Крипто провайдера КриптоПро CSP/Дополнительные параметры и определения/Имя контейнера.
Если носитель не содержит какую-то часть имени, то создание дополнительного ключа реестра опускается, например, для ключа с именем TestContainer1 в реестре будет создан ключ
Цитата:
HKEY_LOCAL_MACHINE\SOFTWARE\Crypto Pro\Settings\USERS\{SID}\KeyDevices\passwords\REGISTRY\TestContainer1

С уважением, Александр.
Offline Дмитрий И  
#9 Оставлено : 17 мая 2010 г. 14:19:54(UTC)
Дмитрий И

Статус: Участник

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

Спасибо!
Offline Saratov  
#10 Оставлено : 17 февраля 2011 г. 14:02:27(UTC)
Saratov

Статус: Новичок

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

Цитата:
Цитата:
И еще интересен такой нюанс
Запоминаю пароль доступа к контейнеру
Сохраняю сертификат с карты со ссылкой на закрытый ключ в локальное хранилище пользователя
Далее вытаскиваю карту из считывателя
Делаю ЭЦП с использованием CAPICOM и сертификата
Подпись выполняется успешно! При этом обращения к считывателю не происходит
3) Это как так получается?

Вариант 1. Остался открытым контейнер.
Вариант 2. Установлено хранение ключей в сервисе и включено кеширование.


1 вариант. Какие действия необходимо проделать, чтобы закрыть контейнер?
Крипто Про CSP 3.0. Вставляем ЭЦП, подписываем 1 раз запрашивает пароль, затем можно вынуть ЭЦП и все равно будет подписывать, пароль не запрашивая. Я думаю кешируется пароль и контейнер.

Отредактировано пользователем 17 февраля 2011 г. 14:03:17(UTC)  | Причина: Не указана

RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
2 Страницы12>
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.