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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline Евгений Пономаренко  
#1 Оставлено : 17 июня 2015 г. 10:46:57(UTC)
Евгений Пономаренко

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

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

Сказал(а) «Спасибо»: 46 раз
Поблагодарили: 23 раз в 19 постах
Добрый день.
Проблема в следующем:
При генерации ключа происходит вызов биологического ДСЧ (при отсутствии хардверного), и запрос пин-кода контейнера.
Контейнер создается на смарт-карте. Если пользователь вводит неверный пин, то CryptGenKey возвращает 0x8010006b (SCARD_W_WRONG_CHV)
Приходится заново вызывать CryptGenKey, снова био ДСЧ, и.т.д.
Выход из ситуации видится такой: создать свой диалог ввода пин-кода, его неким образом верифицировать (как вариант логиниться на токен через PKCS11 или APDU), а затем уже вызывать CryptAcquireContext с CRYPT_NEWKEYSET|CRYPT_SILENT.
Вопрос: возможно, я усложняю все, и есть вариант проще?

Код:
if(!CryptAcquireContext(&cryptoProvider,container,provider_string,provider_id,CRYPT_NEWKEYSET))
{
dwError=GetLastError();
}
...
int pin_retries=3;
bool genkey_done=false;
do
{
if(!CryptGenKey(cryptoProvider,AT_KEYEXCHANGE,exportable?CRYPT_EXPORTABLE:0,&hKey))
{
dwError=GetLastError();
#ifdef _DEBUG
showErrorMessage(NULL,L"CryptGenKey failed, error 0x%08x",dwError);
#endif
if(dwError==0x8010006b)
{
// wrong pin
pin_retries--;
if(!pin_retries)
break;
}
else
break;
}
else
genkey_done=true;
}
while(!genkey_done);

Offline Максим Коллегин  
#2 Оставлено : 17 июня 2015 г. 11:08:31(UTC)
Максим Коллегин

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

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

Сказал «Спасибо»: 32 раз
Поблагодарили: 706 раз в 614 постах
Если CSP достаточно свежий, то вызов CryptSetProvParam(PP_KEYSET_SEC_DESCR) приведет к запросу пина.
Знания в базе знаний, поддержка в техподдержке
thanks 1 пользователь поблагодарил Максим Коллегин за этот пост.
Евгений Пономаренко оставлено 17.06.2015(UTC)
Offline Евгений Пономаренко  
#3 Оставлено : 24 июля 2015 г. 9:27:05(UTC)
Евгений Пономаренко

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

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

Сказал(а) «Спасибо»: 46 раз
Поблагодарили: 23 раз в 19 постах
Подниму тему.
Вызов CryptSetProvParam(provider, PP_KEYSET_SEC_DESCR, 0, 0) в некоторых случаях возвращает NTE_BAD_TYPE (0x8009000a)
Условия: CryptoPro CSP 3.6.7777, Win7 SP1 32/64, носитель Rutoken Lite
Зависимость установить не удалось, с eToken проблема отсутствует. Наличие/отсутствие драйверов от Актива на проблему не влияет. Переустановка КриптоПро/драйверов/модуля рутокена для КриптоПро ничего не дает.
CryptGenKey и все остальное работает как положено.
Чем можно попробовать диагностировать проблему?
UPD: Разобрался, это происходит при включенной службе хранения ключей и использовании биологического ДСЧ.

Отредактировано пользователем 24 июля 2015 г. 12:25:45(UTC)  | Причина: Не указана

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