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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline Арамис  
#1 Оставлено : 12 апреля 2018 г. 12:04:07(UTC)
Арамис

Статус: Новичок

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

Добрый день.

Имеется подписанный файл "C:\answer_from_nbki.xml", имеется сертификат "C:\tlab17b64.cer".
Делаем: cryptcp.exe -f c:\tlab17b64.cer -verify -nochain -norev c:\answer_from_nbki.xml c:\ololo.xml
Получаем файл "c:\ololo.xml" со снятой и проверенной подписью.

Импортируем сертификат открытого ключа в Java хранилище с альясом: nbki_test.
Пытаюсь реализовать на Java:

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.security.InvalidKeyException;
import java.security.KeyStore;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.NoSuchProviderException;
import java.security.PublicKey;
import java.security.Signature;
import java.security.SignatureException;
import java.security.cert.Certificate;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;

public class Secur {

static KeyStore ks;
static InputStream fis;
static PublicKey pub_key;
static Certificate cert;
static X509Certificate x509;
static Signature sign;
// ГОСТ
private static final String GOST3411withGOST3410EL = "GOST3411withGOST3410EL";

// Имя хранилища подписи (сертификат)
public static final String alias = "nbki_test";
public static void main(String[] args) throws KeyStoreException, FileNotFoundException, IOException, NoSuchAlgorithmException, CertificateException, InvalidKeyException, SignatureException {

// Указывает хранилище - дефолтное
ks = KeyStore.getInstance(KeyStore.getDefaultType());
// Запихиваем хранилище ключей
fis = new FileInputStream(System.getProperty("user.home") + File.separator + ".keystore");
// Загружаем ключевые носители (сертификаты и т.д.)
ks.load(fis, "13031303".toCharArray());
// загружаем сертификат
cert = ks.getCertificate(alias);
x509 = (X509Certificate) cert;

sign = Signature.getInstance(GOST3411withGOST3410EL);
System.out.println("------------------------------------------------------------------------");

// Берем подписанный XML
System.out.println("---ПОДПИСАННЫЙ ФАЙЛ---");
FileInputStream xml_sig = new FileInputStream("C:/answer_from_nbki.xml");
byte [] byte_sig = new byte[xml_sig.available()];
xml_sig.read(byte_sig, 0, xml_sig.available());
xml_sig.close();
System.out.println("------------------------------------------------------------------------");

// Инициализация проверки
sign.initVerify(cert);
// Снятие подписи
sign.update(byte_sig);

System.out.println(new String(byte_sig, "Cp1251"));
}
}


Вопросы:
1. Правильно ли я понимаю, что update должен снимать подпись?
2. Подпись содержится в подписанном файле, как её взять (и другой вопрос, зачем если она уже имеется в поданном файле), чтобы подать в метод verify для проверки достоверности хешей?
3. Следующим кодом я могу запринтить данные отделенные от подписи, подпись и др. инфо, но при подаче данной подписи на verify, позвращается всегда false, пробовал переворачивать подпись, результат тот же.
ASN1InputStream bIn = new ASN1InputStream(new ByteArrayInputStream(byte_sig));
ASN1Primitive obj = bIn.readObject();
System.out.println(ASN1Dump.dumpAsString(obj, true).intern());

Пояснение:
1. Использую адгоритмы GOST3411withGOST3410EL т.к. при парсинге подписанного файла через ASN1Dump, вижу IOD'ы явно указывающие госты:
ObjectIdentifier(1.2.643.2.2.9) --->> szOID_CP_GOST_R3411
ObjectIdentifier(1.2.643.2.2.3) --->> szOID_CP_GOST_R3411_R3410EL (Алгоритм цифровой подписи ГОСТ Р 34.10-2001)

PS: Прошу сильно не ругать, в программировании новичок :(
Offline Евгений Афанасьев  
#2 Оставлено : 12 апреля 2018 г. 14:25:32(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 714 раз в 674 постах
Здравствуйте.
Что представляет собой файл answer_from_nbki.xml? Как осуществлялась подпись?
1. Проверка подписи выполняется с помощью verify, подпись - sign (методы Signature). update - метод для передачи в Signature данных, которые подписывались. В verify подается подпись - 64 или 128 байт (в зависимости от алгоритма). Примеры же подписи XMLDSig есть в samples-sources.jar, пакеты xmlSign и JCPxml.
2. Зависит от формата. См. п.1 про примеры.
3. Неизвестно, что в подписи и какого она формата.
Offline Арамис  
#3 Оставлено : 12 апреля 2018 г. 15:37:30(UTC)
Арамис

Статус: Новичок

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

Автор: afev Перейти к цитате
Здравствуйте.
Что представляет собой файл answer_from_nbki.xml? Как осуществлялась подпись?
1. Проверка подписи выполняется с помощью verify, подпись - sign (методы Signature). update - метод для передачи в Signature данных, которые подписывались. В verify подается подпись - 64 или 128 байт (в зависимости от алгоритма). Примеры же подписи XMLDSig есть в samples-sources.jar, пакеты xmlSign и JCPxml.
2. Зависит от формата. См. п.1 про примеры.
3. Неизвестно, что в подписи и какого она формата.


Bezymjannyjj.jpg (147kb) загружен 14 раз(а).

Само подписание документа не интересует, интересует именно снятие с файла подписи и её проверка.
Примеры в указанных пакетах не удовлетворяют запросу т.к. в примерах либо отцепленная подпись в одном из полей xml-файла (что было бы не трудно изъять), либо подпись берется из объекта требующий закрытый ключ (закрытого ключа у меня нет, т.к. я не подписант, а клиент).

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

PS: Подпись встроенная в файл, т.е. раскидана не читаемыми символами по всему файлу.
При формировании файла в asn1 формат, можно увидеть отдельно подпись, данные и т.д.
Формат подписи PKCS7.

Отредактировано пользователем 12 апреля 2018 г. 16:26:13(UTC)  | Причина: Не указана

Offline Евгений Афанасьев  
#4 Оставлено : 12 апреля 2018 г. 17:08:55(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 714 раз в 674 постах
Автор: Арамис Перейти к цитате
Формат подписи PKCS7.

Тогда смотрите примеры проверки с помощью CAdES.jar в пакете CAdES или пример CMSVerify в пакете CMS_samples, архив samples-sources.jar.

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