CPGenKey

Возвращаемые значения

При успешном завершении функция возвращает TRUE, в противном случае возвращается FALSE. Если возвращается FALSE, соответствующий код ошибки (см. таблицу) может быть получен через функцию GetLastError().

Коды возвратаОписание
ERROR_INVALID_PARAMETERОдин из параметров содержит некорректное значение. Чаще всего это некорректный указатель.
NTE_BAD_ALGIDПараметр AlgId определяет алгоритм, не поддерживаемый криптопровайдером. Эта ошибка возвращается также в случае попытки генерации пользовательских ключей AT_KEYEXCHANGE и AT_SIGNATURE криптопровайдером, сертифицированным по уровню KC2 и выше, при отсутствии физического ДСЧ в составе СКЗИ.
NTE_BAD_FLAGSВеличина dwFlags имеет ошибочное значение.
NTE_NO_MEMORYКриптопровайдер во время операции исчерпал память.
NTE_FAILОшибка при считывании данных из системного реестра. см. Дополнительные параметры и определения .
SCARD_W_CANCELLED_BY_USERПользователь прервал операцию нажатием клавиши Cancel
SCARD_W_WRONG_CHVПользователь ввёл неправильный пароль или пароль, установленный функцией SetProvParam(), неправильный
SCARD_E_INVALID_CHVПользователь ввёл пароль с нарушением формата или пароль, установленный функцией SetProvParam(), имеет неправильный формат. Например, пароль имеет недопустимую длину или содержит недопустимые символы.
SCARD_W_CHV_BLOCKEDВвод Pin-кода был заблокирован смарт-картой, т.к. исчерпалось количество попыток разрешенное картой для ввода.
NTE_TOKEN_KEYSET_STORAGE_FULLНедостаточно места на носителе для сохранения информации.
NTE_SILENT_CONTEXTОперация не может быть выполнена без пользовательского интерфейса.
SCARD_W_REMOVED_CARDНоситель контейнера был удален из считывателя.
NTE_EXISTSПопытка создания ключа в контейнере, где ключ уже существует.

Примечания

Если при запросе функции CPAcquireContext() был создан ключевой контейнер с признаком CRYPT_VERIFYCONTEXT, прикладные программы не могут создавать долговременные ключевые пары. В этом случае функция CPGenKey() возвращает код ошибки NTE_PERM.

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

Функция CPGenKey() получает ключ с программного ДСЧ контекста криптопровайдера hProv, который инициализируется при выполнении функции CPAcquireContext() c накопленного в контейнере ключевого носителя состояния ДСЧ и установленного в системе физического ДСЧ.

В случае, если контекст криптопровайдера открыт в режиме CRYPT_VERIFYCONTEXT, и в системе не установлено физического ДСЧ, программный ДСЧ инициализируется с накапливаемого в реестре общесистемного состояния ДСЧ и накопленных состояний ДСЧ всех открытых ранее контейнеров ключевых носителей в рамках времени жизни разделяемой библиотеки «КриптоПро CSP 4.0».

Функция CPGenKey() при выработке долговременных ключевых пар всегда использует физический ДСЧ. В случае, если контекст криптопровайдера hProv открыт в режиме CRYPT_SILENT (запрет UI, необходимый БиоДСЧ), и в системе не установлен физический ДСЧ, выдаётся ошибка.

Ключи AT_UECSYMMETRICKEY, CALG_UECSYMMETRIC, CALG_UECSYMMETRIC_EPHEM имеют ограниченный функционал, предназначены для использования в ключевых системах Универсальных Электронных Карт. Данные ключи не рекомендуется использоваться в иных системах.

Заметим, что, в соответствии с общепринятой мировой практикой, в качестве длины ключа при создании указывается именно длина открытого ключа, а не присутствующая в идентификаторах алгоритмов и oid’ах длина модуля, по которому производятся операции. В отличие от, например, алгоритма RSA (в реализациях которого открытая экспонента, как правило, фиксирована, а открытый ключ представляет собой модуль n), длина открытого ключа в стандартах подписи, основанных на операциях в группе точек эллиптической кривой (ECDSA, ГОСТ Р 34.10-2001, ГОСТ Р 34.10-2022), в два раза превосходит длину модуля.

При генерации ключа подписи/обмена выбор соответствующего алгоритма производится в зависимости от типа используемого провайдера. Провайдер типа PROV_GOST_2001_DH создает ключи в соответствии с алгоритмом ГОСТ Р 34.10-2001, используется функция хэширования в соответствии с ГОСТ Р 34.11-94.

Провайдер типа PROV_GOST_2022_256 создает ключи длины 256 бит в соответствии с алгоритмом ГОСТ Р 34.10-2022, в качестве алгоритма хэширования использует алгоритм ГОСТ Р 34.11-2022 (256 бит). Провайдер типа PROV_GOST_2022_512 создает ключи длины 512 бит в соответствии с алгоритмом ГОСТ Р 34.10-2022, в качестве алгоритма хэширования использует алгоритм ГОСТ Р 34.11-2022 (512 бит).

См. также

CPCDestroyKey() ,CPCExportKey() ,CPCImportKey() ,CPCGetKeyParam() ,CPCSetKeyParam() ,CPCReleaseContext() ,CPGenKey в MS CSPWorld Wide Web linkCryptGenKey в MS CryptoAPI 2.0World Wide Web link

Требования:

AIX: 5/6/7 или выше. FreeBSD: 7/8/9 или выше. Linux: LSB 3.1 (RHEL 4, SuSE 10) или выше. Solaris: 10 или выше. Mac OSX: 10.7/8 или выше. iOS: 6/7 или выше.

Windows 2000 или выше: Необходимо Windows 2000 SP4 или старше с Internet Explorer 6.0 или старше. Файл описания: Прототип описан в файле wincsp.h. Ядро ОС: Вместо неё используется аналогичная функция CPCGenKey .

Оцените статью
ЭЦП64
Добавить комментарий