Статус: Участник
Группы: Участники
Зарегистрирован: 12.01.2011(UTC) Сообщений: 17  Откуда: Москва
|
Добрый день. Подскажите пожалуйста, реализуема ли следующая задача средствами КриптоПро CSP 3.6:
Имеем массив байт и электронную подпись этого массива байт в формате CMS. Необходимо написать сервис проверки этой электронной подписи. Но на вход сервису подаётся подпись в формате CMS и гостовый хеш от данных (т.е. не сами данные, а именно хеш).
Задача связана с тем что сервис проверки централизованный, но не все его клиенты готовы отдавать наружу свои документы.
Не нашёл в WinCryptoApi функции, позволяющей это сделать. Есть ли способы? Как мне видится если CMS не содержит подписываемых атрибутов, это может быть реализуемо. А если подписываемые атрибуты есть, тут могут быть трудности.. Есть ли варианты в этом случае?
Пролейте свет пожалуйста.
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC) Сообщений: 5,640  Откуда: КРИПТО-ПРО Сказал «Спасибо»: 12 раз Поблагодарили: 545 раз в 495 постах
|
Придется вручную разбирать CMS сообщение. Если в подписи есть подписанные аттрибуты - то хэш лежит прямо в подписи, если нет (что бывает редко) придется чуть сложнее разбираться. |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 12.01.2011(UTC) Сообщений: 17  Откуда: Москва
|
Максим, спасибо за ответ. Но поясните пожалуйста ещё. Я не понял, почему если есть подписываемые атрибуты, будет проще.
Да, в случае когда есть подписываемые атрибуты, то хеш содержится в одном их них, и проверить соответствие этого хеша значению хеша, которое прислали, просто. Но остаётся же ещё операция проверки значения подписи. И она требуется в обоих случаях - и когда есть подписываемые атрибуты и когда нет.
Я внимательно прочитал rfc3852 (много узнал :-)), и насколько я понимаю, в моём случае (когда при проверке нет данных, а есть только хеш данных), алгоритм должен быть следующий: 1. Расшифровать значение подписи открытым ключом 2. Если подписываемых атрибутов нет, сравнить имеющийся хеш с результатом пункта 1, конец проверки. 3. Если подписываемые атрибуты есть, сравнить имеющийся хеш с хешом из подписываемых атрибутов, посчитать хеш от подписываемых атрибутов, сравнить с результатом пункта 1
Т.е. схема вроде как понятна, но в случае когда есть подписываемые атрибуты, она немного сложней.
Насколько правильный на ваш взгляд приведённый алгоритм проверки подписи?
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC) Сообщений: 5,640  Откуда: КРИПТО-ПРО Сказал «Спасибо»: 12 раз Поблагодарили: 545 раз в 495 постах
|
В случае ГОСТ понятие шифрование к подписи неприменимо. Ее лишь можно проверять. Так что алгоритм неверен) |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 12.01.2011(UTC) Сообщений: 17  Откуда: Москва
|
Максим, для подписей, содержащих подписываемые атрибуты всё получилось, спасибо.
Прошу вас подсказать, как быть с подписями, не содержащими подписываемые атрибуты. Проблема в следующем: Для проверки подписи по хешу используется функция CryptVerifySignature. Первым параметром в неё передаётся объект функции хеширования HCRYPTHASH. Этот параметр создаётся (функцией CryptCreateHash) для вычисления хеша исходных подписанных данных. Я не нашёл в описании CryptoAPI способа создать HCRYPTHASH, имея не исходные данные, а готовый хеш. Таким образом мне неоткуда взять HCRYPTHASH, чтобы передать его в CryptVerifySignature, и не могу проверить подпись по хешу. Посоветуйте, что можно сделать, в какую сторону копать?
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC) Сообщений: 5,640  Откуда: КРИПТО-ПРО Сказал «Спасибо»: 12 раз Поблагодарили: 545 раз в 495 постах
|
CryptSetHashParam HP_HASHVAL |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 12.01.2011(UTC) Сообщений: 17  Откуда: Москва
|
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 07.08.2012(UTC) Сообщений: 123
Сказал(а) «Спасибо»: 4 раз Поблагодарили: 6 раз в 6 постах
|
Кто-нибудь может поделиться полным примером кода на Java для проверки подписи по хешу?
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 07.08.2012(UTC) Сообщений: 123
Сказал(а) «Спасибо»: 4 раз Поблагодарили: 6 раз в 6 постах
|
По документации не смог найти такую функциональность в Cryptopro JCP...
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 22.01.2008(UTC) Сообщений: 657   Откуда: Йошкар-Ола Сказал «Спасибо»: 2 раз Поблагодарили: 83 раз в 65 постах
|
Автор: dmishin  По документации не смог найти такую функциональность в Cryptopro JCP... А что функции типа "CryptSignHash" в JCP нет? |
С уважением, Юрий Строжевский |
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 07.08.2012(UTC) Сообщений: 123
Сказал(а) «Спасибо»: 4 раз Поблагодарили: 6 раз в 6 постах
|
Как я понял - нет, но хотел бы услышать мнение более опытных участников форума
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 07.08.2012(UTC) Сообщений: 123
Сказал(а) «Спасибо»: 4 раз Поблагодарили: 6 раз в 6 постах
|
Есть тут кто работал с Cryptopro JCP и может дать однозначный ответ?
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 07.08.2012(UTC) Сообщений: 123
Сказал(а) «Спасибо»: 4 раз Поблагодарили: 6 раз в 6 постах
|
Или лучше задам вопрос по другому - Какими средствами можно проверить отделенную подпись по хешу? Один вариант есть: тут приведен пример на C++ под Windows.
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 2,894  Откуда: Крипто-Про Сказал(а) «Спасибо»: 14 раз Поблагодарили: 430 раз в 421 постах
|
Здравствуйте. Посмотрите примеры в samples-sources.jar дистрибутива JCP, в пакете CMS есть различные примеры подписи CMS. |
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 07.08.2012(UTC) Сообщений: 123
Сказал(а) «Спасибо»: 4 раз Поблагодарили: 6 раз в 6 постах
|
Последние 2 дня этим и занимался. Это утверждение что в JCP это возможно? или предположение что там это есть? Отредактировано пользователем 24 октября 2013 г. 8:36:01(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 2,894  Откуда: Крипто-Про Сказал(а) «Спасибо»: 14 раз Поблагодарили: 430 раз в 421 постах
|
CMS.java - подпись хеша данных, CMSSign.java - а) подпись хеша атрибутов с передачей данных для хеширования б) CAdES-BES в) подпись хеша атрибутов, куда может быть передан хеш данных, а не данные для последующего хеширования и др. |
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 07.08.2012(UTC) Сообщений: 123
Сказал(а) «Спасибо»: 4 раз Поблагодарили: 6 раз в 6 постах
|
Вы только про подпись? Вопрос был про проверку.
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 07.08.2012(UTC) Сообщений: 123
Сказал(а) «Спасибо»: 4 раз Поблагодарили: 6 раз в 6 постах
|
Ок. Добрался до C++. Кто-нибудь портировал под линукс логику проверки подписи по хешу?
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 22.01.2008(UTC) Сообщений: 657   Откуда: Йошкар-Ола Сказал «Спасибо»: 2 раз Поблагодарили: 83 раз в 65 постах
|
Автор: dmishin  Ок. Добрался до C++. Кто-нибудь портировал под линукс логику проверки подписи по хешу? А что там портировать? Функции "CryptSignHash" и "CryptVerifySignature" в CAPILite есть - значит всё будет работать как в примерах с MSDN. Вы пробуйте, а если будут проблемы - спрашивайте. |
С уважением, Юрий Строжевский |
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 07.08.2012(UTC) Сообщений: 123
Сказал(а) «Спасибо»: 4 раз Поблагодарили: 6 раз в 6 постах
|
Пытаюсь запустить пример sdk\samples\CSP\SigningHash: CSP context acquired. The signature key has been acquired. CryptoPro CSP: Type password for container "ARTO" Password: Size of the BLOB for the public key determined. Contents have been written to the BLOB. Hash object created. Size of the BLOB determined. Parameters have been written to the pbHash. The data buffer has been hashed. Error number : 0x65b Error description: Error during CryptSignHash. Для запуска примера достаточно создания тестового контейнера? Или нужен личный сертификат привязанный к контейнеру (пробовал и так, но результат такой же)? Отредактировано пользователем 5 ноября 2013 г. 12:51:01(UTC)
| Причина: Не указана
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close