05.10.2004 11:46:27Алгоритмы хеширования. Как их получить из существующего сертификта? Ответов: 57
Кирилл
Проблема такая - при, например, подписывании, надо явно указывать этот алгоритм:
CRYPT_SIGN_MESSAGE_PARA SParam;
SParam.HashAlgorithm.pszObjId = OID;

Например, для сертификата, созданного с помощью криптопровайдера CryptoPro, возможные алгоритмы в нем - это всевозможные ГОСТы. Но вот если я захочу подписать файл с помощью сертификата, созданного при помощи MS_DEV_PROV, то с прежним OID сделать это не получится, ругнется на неизвестный криптографический алгоритм. Как можно решить эту проблему? И при создании сертификатов самоподписанных такая же проблема.
 
Ответы:
05.10.2004 14:25:35Kirill Sobolev
Из существующего сертификата получить нельзя - его там нет. Можно перебрать все доступные алгоритмы (CryptEnumOIDInfo) и каждый проверить, будет ли он работать с открытым ключом из сертификата (CryptFindOIDInfo (CRYPT_OID_INFO_SIGN_KEY,..,..)).
06.10.2004 14:00:19Кирилл
С помощью CryptEnumOIDInfo я получаю все алгоритмы в данной группе (например, CRYPT_HASH_ALG_OID_GROUP_ID). А зачем использовать CryptFindOIDInfo (с помощбю нее же не проверить возможность работы, т.к. никаких указателей на сертификаты мы в нее не передаем)? Я не уловил мысль.
И каким образом проверять возможность работы полученного OID с открытым ключем сертификата? Каждый раз менять параметр SParam.HashAlgorithm.pszObjId и потом подставлять в функцию и смотреть возращаемое значение? Или есть более элегантный способ?
06.10.2004 14:07:15Kirill Sobolev
Вы невнимательно прочитали описание CryptFindOIDInfo. Если ей передать первым параметром CRYPT_OID_INFO_SIGN_KEY, а вторым алгоритм хэша и открытого ключа, то она как раз вернет алгоритм подписи (если такой существует). Потом из всех доступных алгоритмов можно выбрать какой-нибудь один. Это самый элегантный способ, если неизвестен алгоритм хэширования или подписи.
06.10.2004 14:59:48Кирилл
Что-то не получается, я что-то не так делаю.
void* pvKey[2];
pvKey[0] = szOID_RSA_MD5RSA;
pvKey[1] = pUserCert->pCertInfo->SubjectPublicKeyInfo.PublicKey;
CryptFindOIDInfo(CRYPT_OID_INFO_SIGN_KEY, pvKey, CRYPT_HASH_ALG_OID_GROUP_ID);

Ошибка при компиляции происходит, "cannot convert from ’CRYPT_BIT_BLOB’ to ’void *’". Или я не правильно указываю на PubKey AlgId?
06.10.2004 15:08:26Kirill Sobolev
Да, неправильно. Параметры должны быть не char*, а ALG_ID, и передавать надо не блоб открытого ключа а только его алгоритм. Искать надо среди алгоритом подписи, а не хэша. Т.е. это выглядеть должно так

ALG_ID pvKey[2];
pvKey[0] = CALG_MD5;
pvKey[1] = CertOIDToAlgID(pUserCert->pCertInfo->SubjectPublicKeyInfo.Algorithm.pszObjId);
CryptFindOIDInfo(CRYPT_OID_INFO_SIGN_KEY, pvKey, CRYPT_SIGN_ALG_OID_GROUP_ID);

09.10.2004 14:46:45Кирилл
Спасибо, все работает!
А при создании самоподписанного сертификата надо действовать таким же способом?
09.10.2004 19:36:05Kirill
2Kirill
Хм, поспешил я... Не работает так, как должно было бы.
Я сделал все, как Вы посоветовали, для сертификатов, созданных при помощи Сrypto-Pro провайдере такой способ находит какие-то алгоритмы (по-моему не все). Но вот когда я создал сертификат самоподписанный сертификат с помощью MS Base Cryptographic Provider 1.0, то такой способ вообще не дал никаких результатов, к сожалению, т.е. все предложенные алгоритмы были функцией CryptFindOIDInfo отвергнуты, как непоходящие.
Вот ссылка к проекту и этому сертификату, минимум кода.
kirjkl.narod.ru/test1.rar
Если возможно, то помогите с этим разобраться, пожалуйста.
11.10.2004 11:41:25Kirill Sobolev
Ну правильно. У этого сертификата алгоритм открытого ключа CALG_RSA_KEYX, соотвествующих ему алгоритмов подписи нет.
11.10.2004 20:36:27Кирилл
Но ведь я с его помощью могу подписывать! И подписываю. Как это нет алгоритмов? Или вот, например, когда я получаю сертификат с помощью вашего "Тестового центра", то такая же ерунда получается (если не Крипто-Про провайдер использую).
Или в таких случаях никак не сказать, какие алгоритмы можно использовать с сертификатом? Даже и не верится как-то.
12.10.2004 12:57:08Kirill Sobolev
Да, действительно... Возможно, MS считает, что если в ALG_ID присутствует ALG_TYPE_RSA, то этим ключом можно и шифровать и подписывать (без проверки CryptFindOIDInfo).
12.10.2004 19:58:40Кирилл
Так а как быть в таких вот случаях? Это же неправильно - без определенности писать что-то.
13.10.2004 10:43:28Kirill Sobolev
Если алгоритм ключа RSA то использовать хэш sha1 или md5, будет работать.
28.10.2007 2:37:16oqxad
indiana-search.html">City kokomo
30.10.2007 13:33:48ocglvs
http://newb222.tripod.com/ [url=http://newb222.tripod.com]sitemap[/url]
30.10.2007 13:33:48ocglvs
http://newb222.tripod.com/ [url=http://newb222.tripod.com]sitemap[/url]
30.10.2007 13:33:49ocglvs
http://newb222.tripod.com/ [url=http://newb222.tripod.com]sitemap[/url]
30.10.2007 13:33:49ocglvs
http://newb222.tripod.com/ [url=http://newb222.tripod.com]sitemap[/url]
30.10.2007 13:33:50ocglvs
http://newb222.tripod.com/ [url=http://newb222.tripod.com]sitemap[/url]
30.10.2007 13:33:51ocglvs
http://newb222.tripod.com/ [url=http://newb222.tripod.com]sitemap[/url]
30.10.2007 13:33:52ocglvs
http://newb222.tripod.com/ [url=http://newb222.tripod.com]sitemap[/url]
30.10.2007 13:33:52ocglvs
http://newb222.tripod.com/ [url=http://newb222.tripod.com]sitemap[/url]
30.10.2007 13:33:53ocglvs
http://newb222.tripod.com/ [url=http://newb222.tripod.com]sitemap[/url]
30.10.2007 13:33:53ocglvs
http://newb222.tripod.com/ [url=http://newb222.tripod.com]sitemap[/url]
30.10.2007 18:34:15ocglvs
http://newb222.tripod.com/ [url=http://newb222.tripod.com]sitemap[/url]
30.10.2007 18:34:16ocglvs
http://newb222.tripod.com/ [url=http://newb222.tripod.com]sitemap[/url]
30.10.2007 18:34:17ocglvs
http://newb222.tripod.com/ [url=http://newb222.tripod.com]sitemap[/url]
30.10.2007 18:34:18ocglvs
http://newb222.tripod.com/ [url=http://newb222.tripod.com]sitemap[/url]
30.10.2007 18:34:19ocglvs
http://newb222.tripod.com/ [url=http://newb222.tripod.com]sitemap[/url]
30.10.2007 18:34:19ocglvs
http://newb222.tripod.com/ [url=http://newb222.tripod.com]sitemap[/url]
30.10.2007 18:34:20ocglvs
http://newb222.tripod.com/ [url=http://newb222.tripod.com]sitemap[/url]
30.10.2007 18:34:20ocglvs
http://newb222.tripod.com/ [url=http://newb222.tripod.com]sitemap[/url]
30.10.2007 18:34:21ocglvs
http://newb222.tripod.com/ [url=http://newb222.tripod.com]sitemap[/url]
30.10.2007 18:34:21ocglvs
http://newb222.tripod.com/ [url=http://newb222.tripod.com]sitemap[/url]
31.10.2007 1:03:29ocglv
http://newb222.tripod.com/sitemap.html [url=http://newb222.tripod.com/sitemap.html]sitemap[/url]
31.10.2007 1:03:29ocglv
http://newb222.tripod.com/sitemap.html [url=http://newb222.tripod.com/sitemap.html]sitemap[/url]
31.10.2007 1:03:30ocglv
http://newb222.tripod.com/sitemap.html [url=http://newb222.tripod.com/sitemap.html]sitemap[/url]
31.10.2007 1:03:30ocglv
http://newb222.tripod.com/sitemap.html [url=http://newb222.tripod.com/sitemap.html]sitemap[/url]
31.10.2007 1:03:31ocglv
http://newb222.tripod.com/sitemap.html [url=http://newb222.tripod.com/sitemap.html]sitemap[/url]
31.10.2007 1:03:31ocglv
http://newb222.tripod.com/sitemap.html [url=http://newb222.tripod.com/sitemap.html]sitemap[/url]
31.10.2007 1:03:32ocglv
http://newb222.tripod.com/sitemap.html [url=http://newb222.tripod.com/sitemap.html]sitemap[/url]
31.10.2007 1:03:32ocglv
http://newb222.tripod.com/sitemap.html [url=http://newb222.tripod.com/sitemap.html]sitemap[/url]
31.10.2007 1:03:33ocglv
http://newb222.tripod.com/sitemap.html [url=http://newb222.tripod.com/sitemap.html]sitemap[/url]
31.10.2007 1:03:33ocglv
http://newb222.tripod.com/sitemap.html [url=http://newb222.tripod.com/sitemap.html]sitemap[/url]
31.10.2007 20:33:26dhgfjfgj
http://megamap.tripod.com/sitemap.html [url=http://megamap.tripod.com/sitemap.html]sitemap[/url]
31.10.2007 20:33:26dhgfjfgj
http://megamap.tripod.com/sitemap.html [url=http://megamap.tripod.com/sitemap.html]sitemap[/url]
31.10.2007 20:33:27dhgfjfgj
http://megamap.tripod.com/sitemap.html [url=http://megamap.tripod.com/sitemap.html]sitemap[/url]
31.10.2007 20:33:28dhgfjfgj
http://megamap.tripod.com/sitemap.html [url=http://megamap.tripod.com/sitemap.html]sitemap[/url]
31.10.2007 20:33:28dhgfjfgj
http://megamap.tripod.com/sitemap.html [url=http://megamap.tripod.com/sitemap.html]sitemap[/url]
31.10.2007 20:33:29dhgfjfgj
http://megamap.tripod.com/sitemap.html [url=http://megamap.tripod.com/sitemap.html]sitemap[/url]
31.10.2007 20:33:29dhgfjfgj
http://megamap.tripod.com/sitemap.html [url=http://megamap.tripod.com/sitemap.html]sitemap[/url]
31.10.2007 20:33:30dhgfjfgj
http://megamap.tripod.com/sitemap.html [url=http://megamap.tripod.com/sitemap.html]sitemap[/url]
31.10.2007 20:33:30dhgfjfgj
http://megamap.tripod.com/sitemap.html [url=http://megamap.tripod.com/sitemap.html]sitemap[/url]
31.10.2007 20:33:31dhgfjfgj
http://megamap.tripod.com/sitemap.html [url=http://megamap.tripod.com/sitemap.html]sitemap[/url]
07.11.2007 4:32:55ydfru
or-personals.html">Adult eugene
10.11.2007 17:02:51jnkyu
tn-summer-teen.html">Camp memphis
12.11.2007 20:32:25sttwr
000.html">No credit check loan 10
17.11.2007 23:11:54uattq
perak.html">Malaysia map taiping