Статус: Новичок
Группы: Участники
Зарегистрирован: 12.04.2018(UTC) Сообщений: 3 ![Российская Федерация Российская Федерация](/forum2/Content/images/flags/RU.png) Откуда: Москва
|
Добрый день.
Имеется подписанный файл "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: Прошу сильно не ругать, в программировании новичок :(
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,004 ![Российская Федерация Российская Федерация](/forum2/Content/images/flags/RU.png) Откуда: Крипто-Про Сказал(а) «Спасибо»: 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. Неизвестно, что в подписи и какого она формата. |
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 12.04.2018(UTC) Сообщений: 3 ![Российская Федерация Российская Федерация](/forum2/Content/images/flags/RU.png) Откуда: Москва
|
Автор: afev ![Перейти к цитате Перейти к цитате](/forum2/Themes/soclean/icon_latest_reply.gif) Здравствуйте. Что представляет собой файл answer_from_nbki.xml? Как осуществлялась подпись? 1. Проверка подписи выполняется с помощью verify, подпись - sign (методы Signature). update - метод для передачи в Signature данных, которые подписывались. В verify подается подпись - 64 или 128 байт (в зависимости от алгоритма). Примеры же подписи XMLDSig есть в samples-sources.jar, пакеты xmlSign и JCPxml. 2. Зависит от формата. См. п.1 про примеры. 3. Неизвестно, что в подписи и какого она формата. ![](/forum2/Themes/soclean/icon_file.gif) Bezymjannyjj.jpg (147kb) загружен 14 раз(а).Само подписание документа не интересует, интересует именно снятие с файла подписи и её проверка. Примеры в указанных пакетах не удовлетворяют запросу т.к. в примерах либо отцепленная подпись в одном из полей xml-файла (что было бы не трудно изъять), либо подпись берется из объекта требующий закрытый ключ (закрытого ключа у меня нет, т.к. я не подписант, а клиент). Файл со скриншотом приложил, чтобы иметь хотя бы визуальное представление о ситуации. PS: Подпись встроенная в файл, т.е. раскидана не читаемыми символами по всему файлу. При формировании файла в asn1 формат, можно увидеть отдельно подпись, данные и т.д. Формат подписи PKCS7. Отредактировано пользователем 12 апреля 2018 г. 16:26:13(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,004 ![Российская Федерация Российская Федерация](/forum2/Content/images/flags/RU.png) Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 714 раз в 674 постах
|
Автор: Арамис ![Перейти к цитате Перейти к цитате](/forum2/Themes/soclean/icon_latest_reply.gif) Формат подписи PKCS7. Тогда смотрите примеры проверки с помощью CAdES.jar в пакете CAdES или пример CMSVerify в пакете CMS_samples, архив samples-sources.jar. |
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close