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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline ac  
#1 Оставлено : 24 декабря 2008 г. 1:58:38(UTC)
ac

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

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

Не получается программно поменять пароль на контейнер (точнее поменять получается, а воспроизвести этот пароль потом и получить доступ к ключам уже нет).

Все по порядку: Имеется несколько разных контейнеров с одинаковым паролем и на одном носителе (они принадлежат одному лицу). Надо программно уметь менять пароль одним разом на всех этих контейнерах.

1) Создаем ключ:

CryptAcquireContext(&hProv,"Container",NULL,PROV_GOST_2001_DH, CRYPT_NEWKEYSET);
CryptSetProvParam(hProv,PP_SIGNATURE_PIN,(BYTE *)"123",0);
CryptGenKey(hProv,AT_SIGNATURE,0,&hKey);

Все отлично, пароль 123.

2) Можем использовать ключ:

CryptAcquireContext(&hProv," \\\\.\\FAT12_A\\Container",NULL,PROV_GOST_2001_DH, CRYPT_SILENT);
CryptSetProvParam(hProv,PP_SIGNATURE_PIN,(BYTE *)"123",0);
CryptGetUserKey(hProv,AT_SIGNATURE,&hKey);
...

3) Можем поменять пароль:

static char Password[] = "12345";
CRYPT_PIN_PARAM param;

param.type = CRYPT_PIN_PASSWD;
param.dest.passwd = Password;

CryptAcquireContext(&hProv," \\\\.\\FAT12_A\\Container",NULL,PROV_GOST_2001_DH, CRYPT_SILENT);
CryptSetProvParam(hProv,PP_SIGNATURE_PIN,(BYTE *)"123",0);
CryptSetProvParam(hProv,PP_CHANGE_PIN,(BYTE *)&param,0);

Последняя функция выполняется успешно и все: больше к контейнеру пароля не подобрать (в т.ч. через панель управления)… хотя должен был стать 12345. Последующие операции возвращают код 0x8010006B. Остается только удалить контейнер.

Причем если вместо CRYPT_PIN_PASSWD поставить CRYPT_PIN_CLEAR, пароль успешно сбросится, а если CRYPT_PIN_QUERY (не в режиме CRYPT_SILENT), то запросит пароль через UI и успешно поменяет (но этот вариант не подходит).

Видел тему: http://www.cryptopro.ru/...t.aspx?g=posts&t=128 но она немного не про то.
Помогите, не могу понять, что я делаю не так. Кстати, а в чем существенная разница между PP_CHANGE_PIN и PP_SET_PIN ?

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