| ||||
| ||||
Можно ли снять флаг CRYPT_EXPORTABLE в контейнере секретного ключа, ключ в котором был сгенерирован с этим флагом? Я пытался это делать следующим образом: HCRYPTPROV hProv; HCRYPTKEY phUserKey; // Получаем контекст криптопровайдера BOOL b=CryptAcquireContext (&hProv, "REQUEST_CONT", CP_DEF_PROV, PROV_GOST_DH,0); if (!b) { AfxMessageBox("Err CryptAcquireContext"); return; } //Получаем хендл ключа b=CryptGetUserKey(hProv,AT_KEYEXCHANGE,&phUserKey); if (!b) { AfxMessageBox("Err CryptGetUserKey"); CryptReleaseContext (hProv, 0); return; } DWORD dwFlag=0; DWORD dwLen=4; //Считываем установленные флаги if (!CryptGetKeyParam (phUserKey, KP_PERMISSIONS,(UCHAR*)&dwFlag,&dwLen, 0)) { AfxMessageBox("Error set cert"); } //Сбрасываем флаг CRYPT_EXPORTABLE и пытаемся установить новые свойства dwFlag&=~CRYPT_EXPORT; if (!CryptSetKeyParam (phUserKey, KP_PERMISSIONS,(UCHAR*)&dwFlag, 0)) { AfxMessageBox("Error set cert"); } CryptDestroyKey(phUserKey); CryptReleaseContext(hProv, 0); Вроде говорит, что CryptSetKeyParam прошла успешно, но на самом деле сброса флага не происходит. | ||||
Ответы: | ||||
| ||||
А какой CSP (номер версии и номер сборки)? | ||||
| ||||
2.0, 2049 | ||||
| ||||
Тут дело в том, что флажок, разрешающий копирование контейнера и флажок, разрешающий экспорт ключа - не одно и то же. У ключа есть дополнительный атрибут - признак возможности копирования в составе контейнера. И этот атрибут выставляется по значению флага CRYPT_EXPORTABLE при создании контейнера. Тогда как флажок CRYPT_EXPORT говорит о возможности или невозможности экспорта ключа в блоб (зашифрованный на ключе Диффи-Хеллмана). Если Вы хотите, сохранив то же значение ключа, снять признак возможности копирования контейнера, то единственный путь - экспорт этого ключа в блоб (PRIVATEKEYBLOB) и затем импорт его из блоба (он перезапишется и снимется атрибут, разрешающий копирование контейнера). | ||||
| ||||
Пробовал на основе вашего кода по копированию контейнера. Везде где есть флаги CRYPT_EXPORTABLE установил их в 0(в том числе и в функции CryptImportKey). Всеравно контейнер копируется. | ||||
| ||||
Можете исходник примера скинуть на e-mail? | ||||