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

Уведомление

Icon
Error

3 Страницы<123>
Опции
К последнему сообщению К первому непрочитанному
Offline sergnns  
#11 Оставлено : 20 февраля 2015 г. 9:31:53(UTC)
sergnns

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

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

Сказал(а) «Спасибо»: 2 раз
Автор: afev Перейти к цитате
Прикрепите подпись тут в виде файла, попробуем узнать тип.


открыл подпись утилитой dumpasn1.exe результат такой:
Цитата:

0 910: SEQUENCE {
4 9: OBJECT IDENTIFIER signedData (1 2 840 113549 1 7 2)
: (PKCS #7)
15 895: [0] {
19 891: SEQUENCE {
23 1: INTEGER 1
26 12: SET {
28 10: SEQUENCE {
30 6: OBJECT IDENTIFIER GOST R 34.11-94 (1 2 643 2 2 9)
: (Crypto Pro Algorithm)
38 0: NULL
: }
: }
40 11: SEQUENCE {
42 9: OBJECT IDENTIFIER data (1 2 840 113549 1 7 1)
: (PKCS #7)
: }
53 857: SET {
57 853: SEQUENCE {
61 1: INTEGER 1
64 279: SEQUENCE {
68 263: SEQUENCE {
72 38: SET {
74 36: SEQUENCE {
76 9: OBJECT IDENTIFIER
: emailAddress (1 2 840 113549 1 9 1)
: (PKCS #9. Deprecated, use an altName extension instead)
87 23: IA5String 'ca@r52.center-inform.ru'
: }
: }
112 11: SET {
114 9: SEQUENCE {
116 3: OBJECT IDENTIFIER countryName (2 5 4 6)
: (X.520 id-at (2 5 4))
121 2: PrintableString 'RU'
: }
: }
125 50: SET {
127 48: SEQUENCE {
129 3: OBJECT IDENTIFIER stateOrProvinceName (2 5 4 8)
: (X.520 id-at (2 5 4))
134 41: UTF8String
: '.......................... ..............'
: }
: }
177 38: SET {
179 36: SEQUENCE {
181 3: OBJECT IDENTIFIER localityName (2 5 4 7)
: (X.520 id-at (2 5 4))
186 29: UTF8String '............ ................'
: }
: }
217 40: SET {
219 38: SEQUENCE {
221 3: OBJECT IDENTIFIER organizationName (2 5 4 10)
: (X.520 id-at (2 5 4))
226 31: UTF8String '........ ......................'
: }
: }
259 45: SET {
261 43: SEQUENCE {
263 3: OBJECT IDENTIFIER
: organizationalUnitName (2 5 4 11)
: (X.520 id-at (2 5 4))
268 36: UTF8String '.... ........ ......................'
: }
: }
306 27: SET {
308 25: SEQUENCE {
310 3: OBJECT IDENTIFIER commonName (2 5 4 3)
: (X.520 id-at (2 5 4))
315 18: PrintableString 'CentrInform Nf (1)'
: }
: }
: }
335 10: INTEGER 2E 13 B5 FC 00 00 00 00 28 6F
: }
347 10: SEQUENCE {
349 6: OBJECT IDENTIFIER GOST R 34.11-94 (1 2 643 2 2 9)
: (Crypto Pro Algorithm)
357 0: NULL
: }
359 473: [0] {
363 24: SEQUENCE {
365 9: OBJECT IDENTIFIER contentType (1 2 840 113549 1 9 3)
: (PKCS #9)
376 11: SET {
378 9: OBJECT IDENTIFIER data (1 2 840 113549 1 7 1)
: (PKCS #7)
: }
: }
389 28: SEQUENCE {
391 9: OBJECT IDENTIFIER signingTime (1 2 840 113549 1 9 5)
: (PKCS #9)
402 15: SET {
404 13: UTCTime 02/07/2014 05:50:07 GMT
: }
: }
419 47: SEQUENCE {
421 9: OBJECT IDENTIFIER messageDigest (1 2 840 113549 1 9 4)
: (PKCS #9)
432 34: SET {
434 32: OCTET STRING
: 53 65 46 91 C7 F9 7A 46 0A 29 1C D8 10 AB 12 3C
: D2 04 11 3C AE FF EE C0 21 DA 02 43 F8 28 C8 F2
: }
: }
468 364: SEQUENCE {
472 11: OBJECT IDENTIFIER '1 2 840 113549 1 9 16 2 47'
485 347: SET {
489 343: SEQUENCE {
493 339: SEQUENCE {
497 335: SEQUENCE {
501 8: SEQUENCE {
503 6: OBJECT IDENTIFIER
: GOST R 34.11-94 (1 2 643 2 2 9)
: (Crypto Pro Algorithm)
: }
511 32: OCTET STRING
: 0B 4E E0 B0 06 35 EF BF E9 63 17 1D 76 F5 AD 56
: BC 79 45 F9 11 EA C4 7B 8C B0 2A 65 0F 85 DA 62
545 287: SEQUENCE {
549 271: SEQUENCE {
553 267: [4] {
557 263: SEQUENCE {
561 38: SET {
563 36: SEQUENCE {
565 9: OBJECT IDENTIFIER
: emailAddress (1 2 840 113549 1 9 1)
: (PKCS #9. Deprecated, use an altName extension instead)
576 23: IA5String 'ca@r52.center-inform.ru'
: }
: }
601 11: SET {
603 9: SEQUENCE {
605 3: OBJECT IDENTIFIER
: countryName (2 5 4 6)
: (X.520 id-at (2 5 4))
610 2: PrintableString 'RU'
: }
: }
614 50: SET {
616 48: SEQUENCE {
618 3: OBJECT IDENTIFIER
: stateOrProvinceName (2 5 4 8)
: (X.520 id-at (2 5 4))
623 41: UTF8String
: '.......................... ..............'
: }
: }
666 38: SET {
668 36: SEQUENCE {
670 3: OBJECT IDENTIFIER
: localityName (2 5 4 7)
: (X.520 id-at (2 5 4))
675 29: UTF8String '............ ................'
: }
: }
706 40: SET {
708 38: SEQUENCE {
710 3: OBJECT IDENTIFIER
: organizationName (2 5 4 10)
: (X.520 id-at (2 5 4))
715 31: UTF8String '........ ......................'
: }
: }
748 45: SET {
750 43: SEQUENCE {
752 3: OBJECT IDENTIFIER
: organizationalUnitName (2 5 4 11)
: (X.520 id-at (2 5 4))
757 36: UTF8String '.... ........ ......................'
: }
: }
795 27: SET {
797 25: SEQUENCE {
799 3: OBJECT IDENTIFIER
: commonName (2 5 4 3)
: (X.520 id-at (2 5 4))
804 18: PrintableString 'CentrInform Nf (1)'
: }
: }
: }
: }
: }
824 10: INTEGER 2E 13 B5 FC 00 00 00 00 28 6F
: }
: }
: }
: }
: }
: }
: }
836 10: SEQUENCE {
838 6: OBJECT IDENTIFIER GOST R 34.10-2001 (1 2 643 2 2 19)
: (Crypto Pro Algorithm)
846 0: NULL
: }
848 64: OCTET STRING
: 61 6C 17 3B B0 95 D7 4A 25 C5 2C A2 D0 87 6F CE
: 3E 54 94 A2 71 6E BB 28 6A 23 23 A8 D7 85 0C 3A
: 7E 3A 94 08 93 27 47 09 8F 71 5C F1 B9 8F FC AF
: 45 8D 73 C7 BF 57 96 FE 32 1D FE 7A F5 E5 6C D7
: }
: }
: }
: }
: }



строки UTF-8 к сожалению показаны точками. Как-то можно с этим бороться?
Но сразу обращает внимание, что два раза перечислены данные издателя сертификата. А вот данных подписанта нет. Это правильно?
Насколько понимаю собственно подпись - это 64 байта, которые и надо направлять как аргумент функции signature.verify() ?
Offline Евгений Афанасьев  
#12 Оставлено : 20 февраля 2015 г. 10:09:35(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 714 раз в 674 постах
Подпись формата PKCS7:
Автор: afev Перейти к цитате
проверка выполняется по-другому (см. samples-sources.jar, пример CMSVerify, ф. CMSVerify).


Offline sergnns  
#13 Оставлено : 20 февраля 2015 г. 10:21:45(UTC)
sergnns

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

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

Сказал(а) «Спасибо»: 2 раз
Это я и сам уже понял.
Теперь код такой:
Цитата:

Path path = Paths.get("d:/sign_pb");
byte[] one_sign_Bytes = Files.readAllBytes(path);

final Asn1BerDecodeBuffer asnBuf = new Asn1BerDecodeBuffer(one_sign_Bytes);
final ContentInfo all = new ContentInfo();
all.decode(asnBuf);
final SignedData cms = (SignedData) all.content;

final SignerInfo info = cms.signerInfos.elements[0];
final byte[] sign = info.signature.value;


path = Paths.get("d:/mess_pb");
byte[] one_mess_Bytes = Files.readAllBytes(path);


path = Paths.get("d:/cert_pb");
byte[] one_cert_Bytes = Files.readAllBytes(path);


CertificateFactory cf= CertificateFactory.getInstance("X.509");
X509Certificate cert =(X509Certificate)cf.generateCertificate(new ByteArrayInputStream(one_cert_Bytes));
PublicKey pubKey =cert.getPublicKey();
// Signature sig=Signature.getInstance("GOST3411withGOST3410EL", "JCP");
// Signature sig = Signature.getInstance("CryptoProSignature", "JCP");
// Signature sig = Signature.getInstance(JCP.GOST_EL_SIGN_NAME, "JCP");
Signature sig = Signature.getInstance(JCP.CRYPTOPRO_SIGN_NAME, "JCP");
sig.initVerify(pubKey);
sig.update(one_mess_Bytes);
boolean result= sig.verify(sign);
System.out.println(result);


опять все закомментированные варианты проверены.
Результат прежний - всегда false.
Можете подсказать куда ещё рыть??
Offline Евгений Афанасьев  
#14 Оставлено : 20 февраля 2015 г. 10:23:27(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 714 раз в 674 постах
Проверьте конкретно с помощью функции CMSVerify, которая в классе CMSVerify.
Offline sergnns  
#15 Оставлено : 20 февраля 2015 г. 10:30:58(UTC)
sergnns

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

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

Сказал(а) «Спасибо»: 2 раз
Так а структура подписи (что я выше представил) правильная с вашей точки зрения?
Offline sergnns  
#16 Оставлено : 20 февраля 2015 г. 10:38:23(UTC)
sergnns

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

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

Сказал(а) «Спасибо»: 2 раз
Автор: afev Перейти к цитате
Проверьте конкретно с помощью функции CMSVerify, которая в классе CMSVerify.


А как её вызывать то правильно?

Насколько понял сертификат она берёт из хранилища java, откуда строку для подписи вообще не понятно.
Куда и в каком формате я должен положить сертификат, подпись и строку для подписи, чтобы функция отработала правильно?????




Offline Евгений Афанасьев  
#17 Оставлено : 20 февраля 2015 г. 10:54:23(UTC)
Евгений Афанасьев

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

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

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

А как её вызывать то правильно?
Насколько понял сертификат она берёт из хранилища java, откуда строку для подписи вообще не понятно.
Куда и в каком формате я должен положить сертификат, подпись и строку для подписи, чтобы функция отработала правильно?????

Все есть в main() в CMSVerify:
Код:

CMSVerify(signdata, certs, null);

signdata - ваша подпись, certs - список сертификатов, которые следует использовать при проверке (предполагается, что какой-то из них должен подойти). Список подается, если он есть. Сертификат подписи может быть в самой подписи. Последний параметр - подписанные данные, если подпись отделенная.

Offline sergnns  
#18 Оставлено : 20 февраля 2015 г. 13:50:46(UTC)
sergnns

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

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

Сказал(а) «Спасибо»: 2 раз
Цитата:

Код:

CMSVerify(signdata, certs, null);

signdata - ваша подпись, certs - список сертификатов, которые следует использовать при проверке (предполагается, что какой-то из них должен подойти). Список подается, если он есть. Сертификат подписи может быть в самой подписи. Последний параметр - подписанные данные, если подпись отделенная.



Что-то получилось...
Но вот непонятно. Verify выдаёт в моём случае true, только если по update задать encBufSignedAttr.getMsgCopy(),
то есть проверяется по-сути не сообщение, а совокупность 4 (в моём случае) атрибутов выдернутых из подписи.
В моём случае это тип подписи, дата подписи, хеш сообщения и хеш сертификата.
А чтобы проверить собственно неизменённость сообщения я должен дополнительно сравнивать его хеш с хешем сообщения из подписи????
Как-то слишком заумно выглядит....
Более простого пути нет?????

Отредактировано пользователем 20 февраля 2015 г. 13:51:27(UTC)  | Причина: Не указана

Offline Евгений Афанасьев  
#19 Оставлено : 20 февраля 2015 г. 14:09:57(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 714 раз в 674 постах
Посмотрите, например, http://en.wikipedia.org/...ographic_Message_Syntax, там есть ссылки на RFC. В вашем случае используются подписанные атрибуты. В CMSVerify все проверяется и сравнивается (хеш сообщения). Более просая подпись - в классе CMS (только хеш данных, без атрибутов).

Отредактировано пользователем 20 февраля 2015 г. 14:10:47(UTC)  | Причина: Не указана

Offline sergnns  
#20 Оставлено : 20 февраля 2015 г. 14:23:17(UTC)
sergnns

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

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

Сказал(а) «Спасибо»: 2 раз
Автор: afev Перейти к цитате
Более просая подпись - в классе CMS (только хеш данных, без атрибутов).

Ну это если и подписывался только хеш данных??
А вот CSP по-умолчанию что подписывает? Только хеш данных или набор атрибутов?
Или это зависит от програмной реализации на клиенте?

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