17.05.2004 10:00:31проверка подписи Ответов: 3
Александр
На сколько я понял из примера csptest для получения провайдера по сертификату как для создания подписи так и для её проверки рекомендуется использовать CryptAcquireCertificatePrivateKey, но тут возникает следующая проблема - если на машине существует сертификат с закрытым ключом, то требуется ввести пароль для доступа к закрытому ключу, что при проверке подписи является несколько избыточным. Подскажите есть ли другой способ получения провайдера по сертификату именно для проверки подписи ?
 
Ответы:
17.05.2004 11:14:25Василий
Для проверки подписи не требуется доступ к закрытому ключу. Можно использовать CryptAcquireContext с параметром CRYPT_VERIFYCONTEXT. В примере использован вызов CryptAcquireCertificatePrivateKey для автовыбора параметров контекста, а именно, имени и типа CSP, которые берутся из сертификата.
Вы можете использовать:
для КриптоПро CSP 1.1:
CryptAcquireContext(&hProv, NULL, NULL, 2, CRYPT_VERIFYCONTEXT)

для КриптоПро CSP 2.0:
CryptAcquireContext(&hProv, NULL, NULL, 2, CRYPT_VERIFYCONTEXT)
или, для ГОСТ Р 34.10-94
CryptAcquireContext(&hProv, NULL, NULL, 71, CRYPT_VERIFYCONTEXT)
или, для ГОСТ Р 34.10-2001
CryptAcquireContext(&hProv, NULL, NULL, 75, CRYPT_VERIFYCONTEXT)
17.05.2004 11:47:05Александр
Спасибо, уверен что это сработает. Но в этом случае придется выбирать провайдер независимо от сертификата, я пробовал получить провайдер через свойства аля CERT_KEY_PROV_INFO_PROP_ID, но оно не всегда есть (например после установки сертификата без закрытого ключа). Вы не подскажите каким образом функции высокого уровня все-таки получают нужный провайдер по сертификату ?
17.05.2004 13:19:43Василий
Однозначного решения здесь быть не может. Как правило, есть несколько криптопровайдеров, которые умеют работать с определенным алгоритмом ключа, записанным в сертификате - поле CRYPT_ALGORITHM_IDENTIFIER в SubjectPublicKeyInfo структуры CERT_INFO. Если OID алгоритма - один из зарегистрированных для ГОСТ Р 34.10-94(2001) -
1.2.643.2.2.20,
1.2.643.2.2.19
- то можно использовать наш CSP (соответственно, 71 и 75).