Форум КриптоПро
»
Устаревшие продукты
»
КриптоПро CSP 3.6
»
Проверка подписи не по данным а по хешу данных
Статус: Участник
Группы: Участники
Зарегистрирован: 12.01.2011(UTC) Сообщений: 17 Откуда: Москва
|
Добрый день. Подскажите пожалуйста, реализуема ли следующая задача средствами КриптоПро CSP 3.6:
Имеем массив байт и электронную подпись этого массива байт в формате CMS. Необходимо написать сервис проверки этой электронной подписи. Но на вход сервису подаётся подпись в формате CMS и гостовый хеш от данных (т.е. не сами данные, а именно хеш).
Задача связана с тем что сервис проверки централизованный, но не все его клиенты готовы отдавать наружу свои документы.
Не нашёл в WinCryptoApi функции, позволяющей это сделать. Есть ли способы? Как мне видится если CMS не содержит подписываемых атрибутов, это может быть реализуемо. А если подписываемые атрибуты есть, тут могут быть трудности.. Есть ли варианты в этом случае?
Пролейте свет пожалуйста.
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,390 Откуда: КРИПТО-ПРО Сказал «Спасибо»: 37 раз Поблагодарили: 714 раз в 619 постах
|
Придется вручную разбирать CMS сообщение. Если в подписи есть подписанные аттрибуты - то хэш лежит прямо в подписи, если нет (что бывает редко) придется чуть сложнее разбираться. |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 12.01.2011(UTC) Сообщений: 17 Откуда: Москва
|
Максим, спасибо за ответ. Но поясните пожалуйста ещё. Я не понял, почему если есть подписываемые атрибуты, будет проще.
Да, в случае когда есть подписываемые атрибуты, то хеш содержится в одном их них, и проверить соответствие этого хеша значению хеша, которое прислали, просто. Но остаётся же ещё операция проверки значения подписи. И она требуется в обоих случаях - и когда есть подписываемые атрибуты и когда нет.
Я внимательно прочитал rfc3852 (много узнал :-)), и насколько я понимаю, в моём случае (когда при проверке нет данных, а есть только хеш данных), алгоритм должен быть следующий: 1. Расшифровать значение подписи открытым ключом 2. Если подписываемых атрибутов нет, сравнить имеющийся хеш с результатом пункта 1, конец проверки. 3. Если подписываемые атрибуты есть, сравнить имеющийся хеш с хешом из подписываемых атрибутов, посчитать хеш от подписываемых атрибутов, сравнить с результатом пункта 1
Т.е. схема вроде как понятна, но в случае когда есть подписываемые атрибуты, она немного сложней.
Насколько правильный на ваш взгляд приведённый алгоритм проверки подписи?
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,390 Откуда: КРИПТО-ПРО Сказал «Спасибо»: 37 раз Поблагодарили: 714 раз в 619 постах
|
В случае ГОСТ понятие шифрование к подписи неприменимо. Ее лишь можно проверять. Так что алгоритм неверен) |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 12.01.2011(UTC) Сообщений: 17 Откуда: Москва
|
Максим, для подписей, содержащих подписываемые атрибуты всё получилось, спасибо.
Прошу вас подсказать, как быть с подписями, не содержащими подписываемые атрибуты. Проблема в следующем: Для проверки подписи по хешу используется функция CryptVerifySignature. Первым параметром в неё передаётся объект функции хеширования HCRYPTHASH. Этот параметр создаётся (функцией CryptCreateHash) для вычисления хеша исходных подписанных данных. Я не нашёл в описании CryptoAPI способа создать HCRYPTHASH, имея не исходные данные, а готовый хеш. Таким образом мне неоткуда взять HCRYPTHASH, чтобы передать его в CryptVerifySignature, и не могу проверить подпись по хешу. Посоветуйте, что можно сделать, в какую сторону копать?
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,390 Откуда: КРИПТО-ПРО Сказал «Спасибо»: 37 раз Поблагодарили: 714 раз в 619 постах
|
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) Сообщений: 671 Откуда: Йошкар-Ола Сказал «Спасибо»: 3 раз Поблагодарили: 93 раз в 67 постах
|
Автор: dmishin По документации не смог найти такую функциональность в Cryptopro JCP... А что функции типа "CryptSignHash" в JCP нет? |
С уважением, Юрий Строжевский |
|
|
|
Форум КриптоПро
»
Устаревшие продукты
»
КриптоПро CSP 3.6
»
Проверка подписи не по данным а по хешу данных
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close