logo
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

4 Страницы123>»
Опции
К последнему сообщению К первому непрочитанному
Offline alegul  
#1 Оставлено : 27 сентября 2012 г. 18:55:47(UTC)
alegul

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

Группы: Участники
Зарегистрирован: 12.01.2011(UTC)
Сообщений: 17
Мужчина
Откуда: Москва

Добрый день. Подскажите пожалуйста, реализуема ли следующая задача средствами КриптоПро CSP 3.6:

Имеем массив байт и электронную подпись этого массива байт в формате CMS.
Необходимо написать сервис проверки этой электронной подписи. Но на вход сервису подаётся подпись в формате CMS и гостовый хеш от данных (т.е. не сами данные, а именно хеш).

Задача связана с тем что сервис проверки централизованный, но не все его клиенты готовы отдавать наружу свои документы.

Не нашёл в WinCryptoApi функции, позволяющей это сделать.
Есть ли способы?
Как мне видится если CMS не содержит подписываемых атрибутов, это может быть реализуемо.
А если подписываемые атрибуты есть, тут могут быть трудности.. Есть ли варианты в этом случае?

Пролейте свет пожалуйста.
Offline Максим Коллегин  
#2 Оставлено : 27 сентября 2012 г. 19:04:09(UTC)
Максим Коллегин

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

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

Сказал «Спасибо»: 11 раз
Поблагодарили: 535 раз в 485 постах
Придется вручную разбирать CMS сообщение. Если в подписи есть подписанные аттрибуты - то хэш лежит прямо в подписи, если нет (что бывает редко) придется чуть сложнее разбираться.
Знания в базе знаний, поддержка в техподдержке
Offline alegul  
#3 Оставлено : 20 октября 2012 г. 19:42:10(UTC)
alegul

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

Группы: Участники
Зарегистрирован: 12.01.2011(UTC)
Сообщений: 17
Мужчина
Откуда: Москва

Максим, спасибо за ответ. Но поясните пожалуйста ещё.
Я не понял, почему если есть подписываемые атрибуты, будет проще.

Да, в случае когда есть подписываемые атрибуты, то хеш содержится в одном их них, и проверить соответствие этого хеша значению хеша, которое прислали, просто.
Но остаётся же ещё операция проверки значения подписи. И она требуется в обоих случаях - и когда есть подписываемые атрибуты и когда нет.

Я внимательно прочитал rfc3852 (много узнал :-)), и насколько я понимаю, в моём случае (когда при проверке нет данных, а есть только хеш данных), алгоритм должен быть следующий:
1. Расшифровать значение подписи открытым ключом
2. Если подписываемых атрибутов нет, сравнить имеющийся хеш с результатом пункта 1, конец проверки.
3. Если подписываемые атрибуты есть, сравнить имеющийся хеш с хешом из подписываемых атрибутов, посчитать хеш от подписываемых атрибутов, сравнить с результатом пункта 1

Т.е. схема вроде как понятна, но в случае когда есть подписываемые атрибуты, она немного сложней.

Насколько правильный на ваш взгляд приведённый алгоритм проверки подписи?
Offline Максим Коллегин  
#4 Оставлено : 21 октября 2012 г. 21:10:04(UTC)
Максим Коллегин

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

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

Сказал «Спасибо»: 11 раз
Поблагодарили: 535 раз в 485 постах
В случае ГОСТ понятие шифрование к подписи неприменимо. Ее лишь можно проверять. Так что алгоритм неверен)
Знания в базе знаний, поддержка в техподдержке
Offline alegul  
#5 Оставлено : 6 декабря 2012 г. 2:22:18(UTC)
alegul

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

Группы: Участники
Зарегистрирован: 12.01.2011(UTC)
Сообщений: 17
Мужчина
Откуда: Москва

Максим, для подписей, содержащих подписываемые атрибуты всё получилось, спасибо.

Прошу вас подсказать, как быть с подписями, не содержащими подписываемые атрибуты.
Проблема в следующем:
Для проверки подписи по хешу используется функция CryptVerifySignature.
Первым параметром в неё передаётся объект функции хеширования HCRYPTHASH. Этот параметр создаётся (функцией CryptCreateHash) для вычисления хеша исходных подписанных данных. Я не нашёл в описании CryptoAPI способа создать HCRYPTHASH, имея не исходные данные, а готовый хеш. Таким образом мне неоткуда взять HCRYPTHASH, чтобы передать его в CryptVerifySignature, и не могу проверить подпись по хешу.
Посоветуйте, что можно сделать, в какую сторону копать?
Offline Максим Коллегин  
#6 Оставлено : 6 декабря 2012 г. 13:45:44(UTC)
Максим Коллегин

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

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

Сказал «Спасибо»: 11 раз
Поблагодарили: 535 раз в 485 постах
CryptSetHashParam HP_HASHVAL
Знания в базе знаний, поддержка в техподдержке
Offline alegul  
#7 Оставлено : 6 декабря 2012 г. 14:38:50(UTC)
alegul

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

Группы: Участники
Зарегистрирован: 12.01.2011(UTC)
Сообщений: 17
Мужчина
Откуда: Москва

Спасибо!
Offline dmishin  
#8 Оставлено : 22 октября 2013 г. 7:30:49(UTC)
dmishin

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

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

Сказал(а) «Спасибо»: 4 раз
Поблагодарили: 6 раз в 6 постах
Кто-нибудь может поделиться полным примером кода на Java для проверки подписи по хешу?
Offline dmishin  
#9 Оставлено : 23 октября 2013 г. 12:32:54(UTC)
dmishin

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

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

Сказал(а) «Спасибо»: 4 раз
Поблагодарили: 6 раз в 6 постах
По документации не смог найти такую функциональность в Cryptopro JCP...
Offline Юрий  
#10 Оставлено : 23 октября 2013 г. 12:39:12(UTC)
Юрий

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

Группы: Участники
Зарегистрирован: 22.01.2008(UTC)
Сообщений: 657
Мужчина
Российская Федерация
Откуда: Йошкар-Ола

Сказал «Спасибо»: 2 раз
Поблагодарили: 83 раз в 65 постах
Автор: dmishin Перейти к цитате
По документации не смог найти такую функциональность в Cryptopro JCP...

А что функции типа "CryptSignHash" в JCP нет?
С уважением,
Юрий Строжевский
Offline dmishin  
#11 Оставлено : 23 октября 2013 г. 13:18:00(UTC)
dmishin

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

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

Сказал(а) «Спасибо»: 4 раз
Поблагодарили: 6 раз в 6 постах
Как я понял - нет, но хотел бы услышать мнение более опытных участников форума
Offline dmishin  
#12 Оставлено : 24 октября 2013 г. 8:12:54(UTC)
dmishin

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

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

Сказал(а) «Спасибо»: 4 раз
Поблагодарили: 6 раз в 6 постах
Есть тут кто работал с Cryptopro JCP и может дать однозначный ответ?
Offline dmishin  
#13 Оставлено : 24 октября 2013 г. 8:30:50(UTC)
dmishin

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

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

Сказал(а) «Спасибо»: 4 раз
Поблагодарили: 6 раз в 6 постах
Или лучше задам вопрос по другому - Какими средствами можно проверить отделенную подпись по хешу?
Один вариант есть: тут приведен пример на C++ под Windows.
Offline Евгений Афанасьев  
#14 Оставлено : 24 октября 2013 г. 8:34:10(UTC)
Евгений Афанасьев

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

Группы: Участники
Зарегистрирован: 06.12.2008(UTC)
Сообщений: 2,733
Российская Федерация
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 13 раз
Поблагодарили: 385 раз в 380 постах
Здравствуйте.
Посмотрите примеры в samples-sources.jar дистрибутива JCP, в пакете CMS есть различные примеры подписи CMS.
Техническую поддержку оказываем тут
Наша база знаний
Offline dmishin  
#15 Оставлено : 24 октября 2013 г. 8:35:01(UTC)
dmishin

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

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

Сказал(а) «Спасибо»: 4 раз
Поблагодарили: 6 раз в 6 постах
Последние 2 дня этим и занимался. Это утверждение что в JCP это возможно? или предположение что там это есть?

Отредактировано пользователем 24 октября 2013 г. 8:36:01(UTC)  | Причина: Не указана

Offline Евгений Афанасьев  
#16 Оставлено : 24 октября 2013 г. 8:58:41(UTC)
Евгений Афанасьев

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

Группы: Участники
Зарегистрирован: 06.12.2008(UTC)
Сообщений: 2,733
Российская Федерация
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 13 раз
Поблагодарили: 385 раз в 380 постах
CMS.java - подпись хеша данных, CMSSign.java -
а) подпись хеша атрибутов с передачей данных для хеширования
б) CAdES-BES
в) подпись хеша атрибутов, куда может быть передан хеш данных, а не данные для последующего хеширования
и др.
Техническую поддержку оказываем тут
Наша база знаний
Offline dmishin  
#17 Оставлено : 24 октября 2013 г. 9:24:53(UTC)
dmishin

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

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

Сказал(а) «Спасибо»: 4 раз
Поблагодарили: 6 раз в 6 постах
Вы только про подпись? Вопрос был про проверку.
Offline dmishin  
#18 Оставлено : 1 ноября 2013 г. 14:11:15(UTC)
dmishin

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

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

Сказал(а) «Спасибо»: 4 раз
Поблагодарили: 6 раз в 6 постах
Ок. Добрался до C++. Кто-нибудь портировал под линукс логику проверки подписи по хешу?
Offline Юрий  
#19 Оставлено : 1 ноября 2013 г. 14:25:06(UTC)
Юрий

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

Группы: Участники
Зарегистрирован: 22.01.2008(UTC)
Сообщений: 657
Мужчина
Российская Федерация
Откуда: Йошкар-Ола

Сказал «Спасибо»: 2 раз
Поблагодарили: 83 раз в 65 постах
Автор: dmishin Перейти к цитате
Ок. Добрался до C++. Кто-нибудь портировал под линукс логику проверки подписи по хешу?

А что там портировать?
Функции "CryptSignHash" и "CryptVerifySignature" в CAPILite есть - значит всё будет работать как в примерах с MSDN.

Вы пробуйте, а если будут проблемы - спрашивайте.
С уважением,
Юрий Строжевский
Offline dmishin  
#20 Оставлено : 5 ноября 2013 г. 10:36:40(UTC)
dmishin

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

Группы: Участники
Зарегистрирован: 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)  | Причина: Не указана

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