Проверка КриптоПро CMS-подписи средствами Рутокен

Здравствуйте.

Просьба подсказать корректно ли проверять CMS подпись, сформированную через КриптоПро CSP, средствами Рутокен (рутокен-плагин)?
И может ли для проверки на Рутокен плагине подойти вариант подписи, сформированный через КриптоПро Рутокен CSP?

P.S. На портале для разработчиков (https://aktivco.github.io/rutoken-plugin-demo/) выдается ошибка при проверке CMS-подписи, сформированной через КриптоПро CSP:
Ошибка: Ошибка декодирования ASN1 структуры

Re: Проверка КриптоПро CMS-подписи средствами Рутокен

Добрый день, mARIo120988.

Проблем быть не должно. Какую версию Рутокен Плагин Вы используете? Можете прислать нам подпись, которую вы пытаетесь проверить? Я правильно понимаю, что это прикрепленная подпись?

(2018-10-23 15:25:16 отредактировано mARIo120988)

Re: Проверка КриптоПро CMS-подписи средствами Рутокен

Добрый день.

CMS подпись КриптоПро CSP:

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

ГОСТ 2001, detached = true, подписываем строку: Тестовый текст
Версия CSP 4.0.9944

Re: Проверка КриптоПро CMS-подписи средствами Рутокен

mARIo120988, будем разбираться.

С ходу видно, что для ключей подписи был использован paramset cryptoProSignXA, который служит только для создания сессионных ключей. Но тогда ошибка должна быть другой.

Re: Проверка КриптоПро CMS-подписи средствами Рутокен

Т.е. все-таки Рутокен может и должен проверять подпись, сформированной через КриптоПро CSP?
И то, что он не может декодировать, это ошибка продукта Рутокен?

Тогда подскажите пжста, когда мне можно ждать информации по данной ошибке?

Re: Проверка КриптоПро CMS-подписи средствами Рутокен

Добрый день, mARIo120988.

Да, конечно Рутокен может и должен проверять подпись, сформированной через КриптоПро CSP.
Здесь на самом деле похоже ошибка из за отсутствия символов переноса в этой подписи.
Скорее всего они просто не передались при копировании-вставке и если буфер передавать программно, то проблемы не будет.
Сценарий с копированием тоже исправим, чтобы было удобнее. Проблема уже в работе.

Re: Проверка КриптоПро CMS-подписи средствами Рутокен

Мы проверили подпись с помощью КриптоПро CSP и вывели ее в файл (скрин во вложении, сам файл прикрепить не могу). Переносов в ней нет, в режиме дебага это строка тоже их не содержит.
Валидация через КриптоПро CSP такой подписи без переносов проходит успешно.
Уточните пжста про какие переносы идет речь?https://forum.rutoken.ru/uploads/images/2018/10/8b39a432b395b164aeb7945717d3f338.jpg

Re: Проверка КриптоПро CMS-подписи средствами Рутокен

Разобрались о каких переносах идет речь.
Вы в строке подписи в формате Base64 добавляете переносы через каждые 64 символа, зачем?

Re: Проверка КриптоПро CMS-подписи средствами Рутокен

Добрый день, mARIo120988.

Это не совсем мы добавляем. Такой формат использует openssl и некоторые другие криптографические библиотеки. А так как в мире множество ПО использует внутри себя openssl, то было сделано совместимо.
Но вы правы, это действительно проблема. Сделаем так чтобы работало и с переносами и без них. Следите за релизами новых версий Рутокен Плагин.

(2018-10-30 18:16:15 отредактировано mARIo120988)

Re: Проверка КриптоПро CMS-подписи средствами Рутокен

Ok.

Подскажите пжста при проверке подписи выставил признак проверки сертификата, записал на Рутокен корневой сертификат УЦ, выпустивший сертификат проверки подписи, проверяю подпись на портале https://aktivco.github.io/rutoken-plugin-demo/, где выдается ошибка: Неподдерживаемое назначение сертификата. Что это означает? Что с ним не так?

Тестовый корневой сертификат КриптоПро:

-----BEGIN CERTIFICATE-----
MIICTDCCAfugAwIBAgIQK24zUf1usq1IIAIDy1uhQTAIBgYqhQMCAgMwfzEjMCEG
CSqGSIb3DQEJARYUc3VwcG9ydEBjcnlwdG9wcm8ucnUxCzAJBgNVBAYTAlJVMQ8w
DQYDVQQHEwZNb3Njb3cxFzAVBgNVBAoTDkNSWVBUTy1QUk8gTExDMSEwHwYDVQQD
ExhDUllQVE8tUFJPIFRlc3QgQ2VudGVyIDIwHhcNMTQwODA1MTM0NDI0WhcNMTkw
ODA1MTM1NDAzWjB/MSMwIQYJKoZIhvcNAQkBFhRzdXBwb3J0QGNyeXB0b3Byby5y
dTELMAkGA1UEBhMCUlUxDzANBgNVBAcTBk1vc2NvdzEXMBUGA1UEChMOQ1JZUFRP
LVBSTyBMTEMxITAfBgNVBAMTGENSWVBUTy1QUk8gVGVzdCBDZW50ZXIgMjBjMBwG
BiqFAwICEzASBgcqhQMCAiMBBgcqhQMCAh4BA0MABEDgUgrcR9wpvdcgXwxIfO/U
jR52JdC9UgWOrc3Ky2YMpunm+lAm5JIgbnCASrzW/Q43EMfmhQGy7dZijrm3zcee
o1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUFTF8
sI0a3mbXFZxJUpcXJLkBeoMwEAYJKwYBBAGCNxUBBAMCAQAwCAYGKoUDAgIDA0EA
2MocS+lhIGVHLNXI6jiI3s3scchFv7+c5d7/VVp3JJnt4Lki0avn90/m0G97j1oq
407pZA2QUDLB8eO0SRJX1Q==
-----END CERTIFICATE-----

Re: Проверка КриптоПро CMS-подписи средствами Рутокен

Добрый день, mARIo120988.

Этот сертификат вообще не имеет keyUsage. Скорее всего ожидается, что его можно использовать для подписи чего-либо (digitalSignature) и для подписи других сертификатов (keyCertSign).
Уточню еще у разработчиков, но вы можете сами попробовать выставить эти 2.

Re: Проверка КриптоПро CMS-подписи средствами Рутокен

Здравствуйте.

Уточнили у разработчиков по моему комментарию #10?

Вы пишите, что сертификат вообще не имеет keyUsage когда как в данном корневом сертификате есть атрибут использование ключа: Цифровая подпись, Подписывание сертификатов, Автономное подписание списка отзыва (CRL), Подписывание списка отзыва (CRL) (86). И предлагаете выставить digitalSignature, keyCertSign, которые уже есть.
Какого назначения не хватает тогда?

Корневой сертификат был получен на сайте КриптоПро:
https://www.cryptopro.ru/certsrv/certrqma.asp (формирование запроса)
http://www.cryptopro.ru/certsrv/ (выпуск тестовой цепочки сертификатов в том числе корневого)

Re: Проверка КриптоПро CMS-подписи средствами Рутокен

Здравствуйте, mARIo120988.

Похоже я посмотрел не тот сертификат. Передал всю информацию об этой проблеме разработчикам.
Разберемся в чём тут дело.

Подскажите, каким именно способом была создана CMS? Прямой вызов к API КриптоПро CSP, с помощью каких-то программ или еще как-то?

Re: Проверка КриптоПро CMS-подписи средствами Рутокен

Владимир Салыкин пишет:

Подскажите, каким именно способом была создана CMS? Прямой вызов к API КриптоПро CSP, с помощью каких-то программ или еще как-то?

Прямой вызов к АПИ КриптоПро CSP

Re: Проверка КриптоПро CMS-подписи средствами Рутокен

Добрый вечер, mARIo120988.

Если в сертификате есть Extended Key Usage (EKU) - Client Authentication, то openssl, который мы используем считает, что на таком сертификате нельзя проверять подпись. Если к такому сертификату добавить еще и EKU - Email protection, то проверка будет проходить успешно.

Это поведение также определено в openssl. Попробуем со своей стороны разобраться почему разработчики openssl приняли такое решение. Вы пока можете просто добавить еще один EKU к сертификату для работы.