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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline krasnov  
#1 Оставлено : 25 декабря 2018 г. 12:13:16(UTC)
krasnov

Статус: Участник

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

Сказал(а) «Спасибо»: 1 раз
Доброго времени суток всем!

Столкнулись с проблемой с одним сертификатом. При подписи выходит ошибка "Указан неправильный алгоритм. (0x80090008)".

Алгоритм создания подписи:
Берем сертификат. (1.2.643.7.1.1.3.2-ГОСТ Р 34.11-2012/34.10-2012 256 бит.)
CertGetCertificateContextProperty(CERT_KEY_PROV_INFO_PROP_ID), CryptAcquireContext.
Получаем криптопровайдер. (ProvName=Crypto-Pro GOST R 34.10-2012 Cryptographic Service Provider. ProvType=80.) (установлен v4.0.9017 KC1 Release Ver:4.0.9944)
В криптопровайдере ищем первый алгоритм хэширования, находим. (1.2.643.7.1.1.2.2 - ГОСТ Р 34.11-2012 256 бит.)
Кладём всё в CMSG_SIGNER_ENCODE_INFO.
И вот тут при вызове CryptMsgOpenToEncode выходит описанная ошибка.

Подозрение упало на алгоритм открытого ключа, который 512, хотя подпись и хэш пишет 256. В свойствах сертификата:
Цитата:
Алгоритм подписи ГОСТ Р 34.11-2012/34.10-2012 256 бит
Алгорит хеширования ГОСТ Р 34.11-2012 256 бит
Открытый ключ ГОСТ Р 34.10-2012 512 бит


В КриптоАрм ошибка повторяется.
Через командную строку стало интереснее:
Код:
C:\Program Files\Crypto Pro\CSP>csptest -sfsign -sign -add -detached -in file.ext -out file.ext.sig -my "...удалено..."
#0:
Subject: ...удалено...
Valid  : 18.12.2018 07:37:00 - 18.12.2019 07:37:00 (UTC)
Issuer : ...удалено...

A CSP has been acquired.
Source message length: 57408
Calculated signature (or signed message) length: 3684
Signature was done. Signature (or signed message) length: 3684
Output file (file.ext.sig) has been saved
Total: SYS: 0,172 sec USR: 0,109 sec UTC: 2,201 sec
[ErrorCode: 0x00000000]


Но если указать алгоритм хеширования 256, то ошибка повторяется:
Код:
C:\Program Files\Crypto Pro\CSP>csptest -sfsign -sign -add -detached -alg GOST12_256 -in file.ext -out file.ext.alg.sig -my "...удалено..."
#0:
Subject: ...удалено...
Valid  : 18.12.2018 07:37:00 - 18.12.2019 07:37:00 (UTC)
Issuer : ...удалено...

A CSP has been acquired.
Source message length: 57408
An error occurred in running the program.
signtsf.c:596:Signature creation error
Error number 0x80090008 (-2146893816).
Указан неправильный алгоритм.

Total: SYS: 0,140 sec USR: 0,140 sec UTC: 2,335 sec
[ErrorCode: 0x80090008]


Попробовали получить сертификат у вас в тестовом 2012 УЦ, и даже смогли повторить чтобы выдал так же
Цитата:
Алгоритм подписи ГОСТ Р 34.11-2012/34.10-2012 256 бит
Алгорит хеширования ГОСТ Р 34.11-2012 256 бит
Открытый ключ ГОСТ Р 34.10-2012 512 бит

Но ошибка не повторяется только в нашей АС, в КриптоАрме и в вашей командной строке без указания алгоритма.
Если указать -alg GOST12_256, то такая же ошибка.

Заметили еще такое поведение:
1) в панели КриптоПро CSP при просмотре проблемного сертификата в контейнере, когда поиск делаешь по контейнеру в нижнем комбобоксе выбирает 512 (Strong) провайдер, а если поиск по сертификату, то 256, у вашего в обоих случаях 512 (Strong).
2) в КриптоАрме при подписи при выборе проблемного сертификата говорит что он 256, а если выбрать ваш, то 512.

При просмотре сертификатов в ASN1 ничего подозрительного не нашел, алгоритмы обоих совпадают насколько я смог понять :)

Подскажите, как нам быть, в чём может быть проблема? И как правильно поступать с этими битностями? Что дополнительно проверить и приложить?

Прикладываю сертификаты:
Проблемный

Ваш
Offline Максим Коллегин  
#2 Оставлено : 25 декабря 2018 г. 13:53:27(UTC)
Максим Коллегин

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

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

Сказал «Спасибо»: 39 раз
Поблагодарили: 751 раз в 646 постах
Ваш сертификат содержит открытый ключ кривой на поле 512 бит. Это означает, что открытый ключ 1024 бита, закрытый 512.
Annotation 2018-12-25 135315.jpg (10kb) загружен 20 раз(а).
Для хэширования нужно выбирать алгоритм 1.2.643.7.1.1.2.3.
А на алгоритмы подписи сертификата смотреть не нужно, они используются только для проверки сертификата.
Только учитывайте, что выпуск сертификатов с разной длиной, отличающейся от длины ключа УЦ не вполне легитимен.

Отредактировано пользователем 25 декабря 2018 г. 13:54:17(UTC)  | Причина: Не указана

Знания в базе знаний, поддержка в центре поддержки
Offline krasnov  
#3 Оставлено : 25 декабря 2018 г. 14:24:16(UTC)
krasnov

Статус: Участник

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

Сказал(а) «Спасибо»: 1 раз
Автор: Максим Коллегин Перейти к цитате
Ваш сертификат содержит открытый ключ кривой на поле 512 бит. Это означает, что открытый ключ 1024 бита, закрытый 512.
Annotation 2018-12-25 135315.jpg (10kb) загружен 20 раз(а).
Для хэширования нужно выбирать алгоритм 1.2.643.7.1.1.2.3.
А на алгоритмы подписи сертификата смотреть не нужно, они используются только для проверки сертификата.
Только учитывайте, что выпуск сертификатов с разной длиной, отличающейся от длины ключа УЦ не вполне легитимен.

В УЦ выпустивший сертификат напишем.

Но подскажите, как мы можем выбрать алгоритм 1.2.643.7.1.1.2.3, если по сертификату CertGetCertificateContextProperty(CERT_KEY_PROV_INFO_PROP_ID) далее CryptAcquireContext возвращают нам 80 провайдер? В нем же нет 1.2.643.7.1.1.2.3.
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.