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

Уведомление

Icon
Error

2 Страницы12>
Опции
К последнему сообщению К первому непрочитанному
Offline Oleg_tgl  
#1 Оставлено : 30 ноября 2012 г. 15:18:57(UTC)
Oleg_tgl

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

Группы: Участники
Зарегистрирован: 22.11.2012(UTC)
Сообщений: 77
Откуда: Тольятти

есть код, генерируемые файлы не проходят проверку на сайте http://notary.cryptopro.ru/Detached.aspx
но программно проверка не проходит
не подскажете что не так?
.........
как программно узнать в какой кодировке подпись?


Код:
							final PrivateKey[] PrivKeys = new PrivateKey[2];
							RutokenStore = KeyStore.getInstance("RutokenStore");
							RutokenStore.load(null, null);
							System.out.println("size()="+RutokenStore.size());// если 0 то ключа нет

							if (RutokenStore.size() > 0){
							 char[] SIGN_KEY_PASSWORD =		{'1'};		     
							 PrivKeys[1] =(PrivateKey) RutokenStore.getKey("XX",SIGN_KEY_PASSWORD);
//							 X509Certificate c = (X509Certificate) RutokenStore.getCertificate("XX");
							 Certificate cert = RutokenStore.getCertificate("XX");
							 PublicKey publicKey2012 = cert.getPublicKey();
								
								// подписываем SAMPLE_TEXT    //* Создание подписи "GOST3411withGOST3410EL"
								final Signature sig = Signature.getInstance(Constants.SIGN_EL_ALG);
								sig.initSign(PrivKeys[1]);
								sig.update(SAMPLE_TEXT.getBytes());
								final byte[] signEL = sig.sign();
								Array.writeFile("F:/J_crypto_sample/CMS_samples2/data/sig1.sig", signEL);
								Array.writeFile("F:/J_crypto_sample/CMS_samples2/data/data1.dat", SAMPLE_TEXT.getBytes());						 
								// проверка подписи
								final Signature sigVerify = Signature.getInstance(Constants.SIGN_EL_ALG);
								sigVerify.initVerify(publicKey2012);
//								sigVerify.initVerify(publicKey2011);
								sigVerify.update(SAMPLE_TEXT.getBytes());
								final boolean signELver = sigVerify.verify(signEL);

								System.out.println("Signature verifies (signEL) is: " + signELver);						
								System.out.println("sigVerify.getAlgorithm(): " + sigVerify.getAlgorithm());
								System.out.println("sigVerify.getProvider(): " + sigVerify.getProvider());
							
							}



Код:
30.11.2012 12:08:32 ru.CryptoPro.JCP.tools.Starter check
INFO: Loading JCP 1.0.53
30.11.2012 12:08:32 ru.CryptoPro.JCP.tools.Starter check
INFO: JCP loaded.
size()=2
30.11.2012 12:08:34 ru.CryptoPro.JCP.tools.AbstractLicense checkSerialHash
INFO: Check license without company name: true
Signature verifies (signEL) is: true
sigVerify.getAlgorithm(): GOST3411withGOST3410EL
sigVerify.getProvider(): JCP version 1.0
Вложение(я):
data1.dat (1kb) загружен 5 раз(а).
sig1.sig (1kb) загружен 6 раз(а).

У Вас нет прав для просмотра или загрузки вложений. Попробуйте зарегистрироваться.
Offline Андрей Писарев  
#2 Оставлено : 30 ноября 2012 г. 15:25:57(UTC)
Андрей *

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

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

Сказал «Спасибо»: 579 раз
Поблагодарили: 2307 раз в 1807 постах
Требования к форматам проверяемых сертификатов и электронных документов

это не PKCS7


Цитата:

как программно узнать в какой кодировке подпись?

В данном случае - кодировка не используется (ASN1 или Base64(ASN1))

Отредактировано пользователем 30 ноября 2012 г. 15:35:53(UTC)  | Причина: Не указана

Техническую поддержку оказываем тут
Наша база знаний
Offline Oleg_tgl  
#3 Оставлено : 30 ноября 2012 г. 15:37:21(UTC)
Oleg_tgl

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

Группы: Участники
Зарегистрирован: 22.11.2012(UTC)
Сообщений: 77
Откуда: Тольятти

а есть возможность программно определить какой тип подписи на входе?
и выдать сообщение пользователю
.....
Offline Андрей Писарев  
#4 Оставлено : 30 ноября 2012 г. 15:39:11(UTC)
Андрей *

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

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

Сказал «Спасибо»: 579 раз
Поблагодарили: 2307 раз в 1807 постах
Oleg_tgl написал:
а есть возможность программно определить какой тип подписи на входе?
и выдать сообщение пользователю
.....


Есть

Техническую поддержку оказываем тут
Наша база знаний
Offline Oleg_tgl  
#5 Оставлено : 30 ноября 2012 г. 15:43:17(UTC)
Oleg_tgl

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

Группы: Участники
Зарегистрирован: 22.11.2012(UTC)
Сообщений: 77
Откуда: Тольятти

а как? :-)

может гдето в самплах есть пример

подскажите плиз
Offline Евгений Афанасьев  
#6 Оставлено : 30 ноября 2012 г. 15:49:36(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 727 раз в 685 постах
Например, пробуйте декодировать подпись, предполагая, что это PKCS7:
Код:

    // Из примера samples.jar, CMS_samples/CMSVerify
    final Asn1BerDecodeBuffer asnBuf = new Asn1BerDecodeBuffer(buffer);
    final ContentInfo all = new ContentInfo();
    all.decode(asnBuf);

Если декодировалась, то это PKCS7, иначе подпись неправильного (неподходящего) формата.

Отредактировано пользователем 30 ноября 2012 г. 15:51:02(UTC)  | Причина: Не указана

Offline Андрей Писарев  
#7 Оставлено : 30 ноября 2012 г. 15:51:10(UTC)
Андрей *

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

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

Сказал «Спасибо»: 579 раз
Поблагодарили: 2307 раз в 1807 постах
afev написал:
Например, пробуйте декодировать подпись, предполагая, что это PKCS7:
Код:

    // Из примера samples.jar, CMS_samples/CMSVerify
    final Asn1BerDecodeBuffer asnBuf = new Asn1BerDecodeBuffer(buffer);
    final ContentInfo all = new ContentInfo();
    all.decode(asnBuf);

Иначе подпись неправильного (неподходящего) формата.


+
проверить размер "подписи" и если 64 байт - то проверять по алгоритму и первого сообщения
Техническую поддержку оказываем тут
Наша база знаний
Offline Oleg_tgl  
#8 Оставлено : 30 ноября 2012 г. 15:55:04(UTC)
Oleg_tgl

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

Группы: Участники
Зарегистрирован: 22.11.2012(UTC)
Сообщений: 77
Откуда: Тольятти

здесь она естественно выдает ошибку,
и как тогда понять что у меня на входе?

или подобные подписи не используются?


Код:
								// проверка подписи
								final Signature sigVerify = Signature.getInstance(Constants.SIGN_EL_ALG);
								sigVerify.initVerify(publicKey2012);
//								sigVerify.initVerify(publicKey2011);
								sigVerify.update(SAMPLE_TEXT.getBytes());
								final boolean signELver = sigVerify.verify(signEL);

								System.out.println("Signature verifies (signEL) is: " + signELver);						
								System.out.println("sigVerify.getAlgorithm(): " + sigVerify.getAlgorithm());
								System.out.println("sigVerify.getProvider(): " + sigVerify.getProvider());

							    final Asn1BerDecodeBuffer asnBuf = new Asn1BerDecodeBuffer(signEL);
							    final ContentInfo all = new ContentInfo();
							    try {
									all.decode(asnBuf);
									System.out.println("contentType================"+all.contentType.value);
								} catch (Asn1Exception e) {
									// TODO Auto-generated catch block
									e.printStackTrace();
								}								


Код:
com.objsys.asn1j.runtime.Asn1TagMatchFailedException: ASN.1 decode error @ offset 0:
Tag match failed: expected [UNIVERSAL 16], parsed [19]
	at com.objsys.asn1j.runtime.Asn1Type.matchTag(Asn1Type.java:449)
	at com.objsys.asn1j.runtime.Asn1Type.matchTag(Asn1Type.java:466)
	at ru.CryptoPro.JCP.ASN.CryptographicMessageSyntax.ContentInfo.decode(ContentInfo.java:55)
	at com.objsys.asn1j.runtime.Asn1Type.decode(Asn1Type.java:218)
	at CMS_samples.test_3.main(test_3.java:69)
sigVerify.getProvider(): JCP version 1.0

Offline Андрей Писарев  
#9 Оставлено : 30 ноября 2012 г. 15:57:43(UTC)
Андрей *

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

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

Сказал «Спасибо»: 579 раз
Поблагодарили: 2307 раз в 1807 постах
Oleg_tgl написал:
здесь она естественно выдает ошибку,
и как тогда понять что у меня на входе?
или подобные подписи не используются?


1. Проверять размер, если 64 байта - это не pkcs7 + нужен публичный ключ для проверки
2. Пробовать декодировать и проверять
Техническую поддержку оказываем тут
Наша база знаний
Offline Oleg_tgl  
#10 Оставлено : 30 ноября 2012 г. 16:11:38(UTC)
Oleg_tgl

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

Группы: Участники
Зарегистрирован: 22.11.2012(UTC)
Сообщений: 77
Откуда: Тольятти

дико извиняюсь, :-)
этого будет достаточно или еще какаято поверка нужна
Код:

								System.out.println("signEL="+signEL.length);
								if (signEL.length!=64){//если 64  - это не pkcs7
									//Требования к форматам проверяемых сертификатов и электронных документов
									//http://notary.cryptopro.ru/Notary_Help.htm
									//приказом Министерства связи и массовых коммуникаций Российской Федерации от 23.03.2009 № 41 
									//  "Требования к технологиям, форматам, протоколам информационного взаимодействия, 
									//  унифицированным программно-техническим средствам подсистемы удостоверяющих центров 
									//  общероссийского государственного информационного центра"
									final Asn1BerDecodeBuffer asnBuf = new Asn1BerDecodeBuffer(signEL);
									final ContentInfo all = new ContentInfo();
									try {
										all.decode(asnBuf);
										System.out.println("contentType================"+all.contentType.value);
									} catch (Asn1Exception e) {
										System.out.println("это не pkcs7");
										e.printStackTrace();
									}	
							    } else {System.out.println("это не pkcs7");}					
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
2 Страницы12>
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.