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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline daryaNeko  
#1 Оставлено : 13 декабря 2016 г. 17:37:07(UTC)
daryaNeko

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

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

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

У меня есть два файла - xml документ и открепленная подпись, полученные из Росреестра. Необходимо проверить соответствие подписи и документа, реализовать проверку на java.
Проверяла через сайт https://www.gosuslugi.ru/pgu/eds/ - подпись верна, только сертификат просрочен, но для моей задачи это непринципиально.

Самого файла сертификата у меня нет.

Выполняю код:

Код:
Path sigPath = Paths.get("/home/user/tmp/xml/doc2188772.xml.sig");
byte[] signature = Files.readAllBytes(sigPath);
		
Path path = Paths.get("/home/user/tmp/xml/doc2188772.xml");
byte[] data = Files.readAllBytes(path);

PKCS7 pkcs7 = new PKCS7(signature);
X509Certificate[] certs = pkcs7.getCertificates();
     
final String signAlg = JCP.CRYPTOPRO_SIGN_NAME;
Signature sig = Signature.getInstance(signAlg);
			
X509Certificate cert = certs[0];
sig.initVerify(cert.getPublicKey());
sig.update(data);
result = sig.verify(signature);


Проверка всегда возвращает false, в чем может быть ошибка?

Файлы во вложении.

doc2188772.xml (327kb) загружен 3 раз(а). doc2188772.xml.sig (5kb) загружен 4 раз(а).
Offline Андрей Писарев  
#2 Оставлено : 13 декабря 2016 г. 18:04:03(UTC)
Андрей *

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

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 13,479
Мужчина
Российская Федерация

Сказал «Спасибо»: 553 раз
Поблагодарили: 2243 раз в 1749 постах
Здравствуйте.

А если использовать certs[1]?

Внутри doc2188772.xml.sig вложены сертификаты: УЦ и тем, которым необходимо проверять.
Техническую поддержку оказываем тут
Наша база знаний
Offline daryaNeko  
#3 Оставлено : 13 декабря 2016 г. 18:10:31(UTC)
daryaNeko

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

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

Тоже пробовала, результат тот же самый.
Алгоритм пробовала разный, тоже не помогло.. А как вообще определить, какой алгоритм необходим для проверки?
Провайдера тоже пробовала указать при создании подписи
Offline Евгений Афанасьев  
#4 Оставлено : 13 декабря 2016 г. 18:40:21(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 714 раз в 674 постах
Здравствуйте.
Посмотрите примеры CMS, CMSSign, CMSVerify в пакете CMS в архиве samples-sources.jar (в дистрибутиве JCP). В них создание и проверка подписи.
P.S. Возможно, у объекта PKCS7 есть методы для проверки подписи. И главное - вы в sig.verify(signature); подаете signature, а это и есть CMS подпись. Подавать нужно "голую" подпись длиной 64 байта, ее, вероятно, можно извлечь из того же объекта PKCS7. Но опять же подпись проверится при условии, что она сделана с данных, а не атрибутов.

Отредактировано пользователем 13 декабря 2016 г. 18:43:53(UTC)  | Причина: Не указана

Offline daryaNeko  
#5 Оставлено : 13 декабря 2016 г. 18:46:36(UTC)
daryaNeko

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

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

Что есть голая подпись?

Я загрузила данные (неподписанные), я отдала файл подписи - они должны сопоставиться, разве нет?
Примеры смотрела, verify оттуда и взят

Отредактировано пользователем 13 декабря 2016 г. 18:49:07(UTC)  | Причина: Не указана

Offline Евгений Афанасьев  
#6 Оставлено : 13 декабря 2016 г. 18:52:55(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 714 раз в 674 постах
Автор: daryaNeko Перейти к цитате
Что есть голая подпись?

Я загрузила данные (неподписанные), я отдала файл подписи - они должны сопоставиться, разве нет?
Примеры смотрела, verify оттуда и взят

Есть разные форматы подписи, оформленные в в виде структур (PKCS7, CMS, CAdES). В чистом виде подпись имеет длину 64 байта (128 для ГОСТ 2012 (512)). Именно ее можно создать и проверить, используя Signature. Вы. вероятно, имеете дело с PKCS7. Эта подпись более сложная (поищите RFC), содержит атрибуты и т.п. Для ее проверки см. примеры из поста выше (там она выполняется иначе). Просто выполнить Signature недостаточно (с неправильными входящими данными).
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.