03.11.2000 14:30:04Secret key usage Ответов: 5
Serge
Насколько мне известно, отображение секретного ключа в открытый однозначно. Не подскажут ли уважаемые разработчики, как при помощи CryptoAPI получить открытый ключ из проинициализированного контекста CSP
 
Ответы:
03.11.2000 16:44:43Игорь Курепкин
Сергей !
А в каком виде тебе интересен открытый ключ?
Если только открытых ключ, то есть функция
CryptGetUserKey, которая возвращает контекст ключа AT_SIGNATURE | AT_KEYEXCHANGE). После этого выполняется CryptExportKey (в два прохода,первый для определения длины ключа, второй для его экспорта). Параметрами функции являются дескриптор секретного ключа и флаг PUBLICKEYBLOB.
При это открытый ключ сохраняется в формате, определеном только для соответствующего провайдера.
Формат открытого ключа в сертификате (поле SubjectPublicKey) совсем не совпадает с форматом предыдущего и имеест ASN структуру.
Тесты для работы с ключами на уровне CSP и CryptoAPI 1.0 (которое перекрывает только уровень CSP) лежат в файле ctkey.c на сервере.

PS.
А получил ли уважаемый набор утилит, позволяющий пользовать GUI для отображения сертификатов ???
03.11.2000 18:33:08Serge
Ну, видимо, это то что мне нужно. Т.е. средство для поиска в хранилище сертификата, имея только секретный ключ на носителе. Хотя, проблема его загрузки остается (имя контейнера....и const имя CSP).

Про API будет ясно завтра - либо нам скопируют с DVD, либо дадут его на некоторое время.
03.11.2000 18:55:52Игорь Курепкин
Ни фига у вас так не получится.
PUBLIC_KEY_BLOB, получаемый в резултате CryptExportKey никакого отношения не имеет к деровсой нотации ключа в сертификате. У него абсолютно своя структура и собственно открытый ключ 512 (1024) это только часть.

Варианты:
1. Пользуем функцию CryptExportPublicKeyInfoEx(), в качестве ОИДа пользуем идентификатор открытого ключа госта (см. инклюдник) и получаем структуру CERT_PUBLIC_KEY_INFO. После этого пользуем CertFindCertificateInStore с параметром в виде предыдущей структуры.
2. Пользовать CryptCreateKeyIdentifierFromCSP
правда с ограничениями по ОС (см. МСДН). Но я думая, так как мы работаем только с IE5 все будет OK.


15.06.2002 22:40:12Serge3
CryptGetUserKey(...AT_SIGNATURE...)
CryptExport(...PUBLIC_BLOB...);
15.06.2002 22:40:52Serge3
Ага, счаз