Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход. Новые регистрации запрещены.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline Gorilka  
#1 Оставлено : 6 октября 2009 г. 18:57:21(UTC)
Gorilka

Статус: Активный участник

Группы: Участники
Зарегистрирован: 08.07.2009(UTC)
Сообщений: 31

День добрый, суть задачи в том чтобы не привязываясь к конкретному крипто провайдеру реализовать ЭЦП по имеющемуся сертификату.
Застрял на выборе алгоритма хэширования, почитал форум, вроде понял как реализовать, но все равно возникла проблема

Вот код Delphi:
Цитата:
function TFSCryptoCertificates.CertContextToSignAlgorithms(ipCertContext:PCCERT_CONTEXT; var oHashAlg, oSignAlg:ALG_ID):boolean;
var cHashAlgorithms:array of ALG_ID;
vKeyAlgorithm:array [1..2] of ALG_ID;
vKeyOIDInfo:PCRYPT_OID_INFO;
vInd:integer;
const cHashAlgCount=5;
begin
//Инициализируем структуру алгоритмов хэширования, которые будут перебираться
SetLength(cHashAlgorithms, cHashAlgCount);
cHashAlgorithms[0]:=CALG_SHA1;
cHashAlgorithms[1]:=CALG_MD5;
cHashAlgorithms[2]:=CALG_MD4;
cHashAlgorithms[3]:=CALG_MD2;
cHashAlgorithms[4]:=CALG_MAC;
//Структура перебора хэш функций создана
Result:=false;
oHashAlg:=0;
oSignAlg:=0;
vKeyOIDInfo:=nil;
vKeyAlgorithm[2]:=CertOIDToAlgId(ipCertContext.pCertInfo.SubjectPublicKeyInfo.Algorithm.pszObjId);
//Если алгоритм подписи RSA то сразу переключаемся на хэширование SHA1
if vKeyAlgorithm[2]=CALG_RSA_KEYX then
begin
oHashAlg:=CALG_SHA1;
oSignAlg:=vKeyAlgorithm[2];
Result:=true;
Exit;
end;
//А теперь перебираем алгоритмы хэширования и пробуем найти нужный
for vInd:=0 to cHashAlgCount do
begin
vKeyAlgorithm[1]:=cHashAlgorithms[vInd];
vKeyOIDInfo:=CryptFindOIDInfo(CRYPT_OID_INFO_SIGN_KEY, @vKeyAlgorithm, CRYPT_SIGN_ALG_OID_GROUP_ID);
if Assigned(vKeyOIDInfo) then
begin
oHashAlg:=vKeyAlgorithm[1];
oSignAlg:=vKeyAlgorithm[2];
Result:=true;
Exit;
end else
vKeyOIDInfo:=nil;
end;
Result:=Assigned(vKeyOIDInfo);
end;


Основная закавыка в функции CryptFindOIDInfo, она постоянно возвращает nil.
Как я понимаю она перебирает все зарегистрированные вариации HashAlg+SignAlg и если находит совпадение с маской (@vKeyAlgorithm), то возвращает указатель на структуру. С сертификатами на основе стандартных криптопровайдеров винды проблем не возникло, а вот с CryptoPro вышла заморочка, не находит он такую пару. Алгоритм подписи имеет значение 11811, к сожалению не знаю как его перевести в вид CALG_XXX, если это вообще возможно.
Если не сложно, подскажите, в чем суть?

Отредактировано пользователем 6 октября 2009 г. 18:58:16(UTC)  | Причина: Не указана

Offline Gorilka  
#2 Оставлено : 6 октября 2009 г. 19:09:29(UTC)
Gorilka

Статус: Активный участник

Группы: Участники
Зарегистрирован: 08.07.2009(UTC)
Сообщений: 31

Ну вот, так обычно, сначала задаешь вопрос, структурируешь свои мысли, а потом приходит озарение ))) Естественно не нашел, потому что среди перебираемых алгоритмов хэширования, не было ГОСТа, каюсь )
Offline Kirill Sobolev  
#3 Оставлено : 6 октября 2009 г. 21:37:19(UTC)
Кирилл Соболев

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 25.12.2007(UTC)
Сообщений: 1,733
Мужчина
Откуда: КРИПТО-ПРО

Поблагодарили: 177 раз в 168 постах
CALG_XXX и есть идентификатор алгоритма, так что значение 11811 никуда переводить не надо, им можно пользоваться напрямую.
Техническую поддержку оказываем тут
Наша база знаний
Offline Gorilka  
#4 Оставлено : 6 октября 2009 г. 22:58:42(UTC)
Gorilka

Статус: Активный участник

Группы: Участники
Зарегистрирован: 08.07.2009(UTC)
Сообщений: 31

Да это я понимаю, просто как правило приятнее работать с константами, код читабельнее получается, но все равно спасибо.
Раз уж поднялась тема, порекомендуйте чтонибудь из бесплатных сторонних программ для следующего
1. Декодировать и просматривать сертификаты
2. Генерировать подпись на основе сертификата (чтоб потом можно было сравнить со своим результатом)
3. Генерировать хэш
Помню что на форуме было несколько упоминаний, но никак не получается найти. Вобщем нужны достаточно специфичные инструменты, гугл тоже не улавливает чего я хочу )))
Offline Kirill Sobolev  
#5 Оставлено : 7 октября 2009 г. 19:17:53(UTC)
Кирилл Соболев

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 25.12.2007(UTC)
Сообщений: 1,733
Мужчина
Откуда: КРИПТО-ПРО

Поблагодарили: 177 раз в 168 постах
Цитата:
1. Декодировать и просматривать сертификаты

dumpasn1
По 2-3 про сторонние не подскажу, но это умеют csptest и cpverify соответственно, входят в состав КриптоПро CSP.
Техническую поддержку оказываем тут
Наша база знаний
Offline Gorilka  
#6 Оставлено : 8 октября 2009 г. 16:14:09(UTC)
Gorilka

Статус: Активный участник

Группы: Участники
Зарегистрирован: 08.07.2009(UTC)
Сообщений: 31

B опять спасибо
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.