Статус: Активный участник
Группы: Участники
Зарегистрирован: 16.02.2015(UTC) Сообщений: 43 ![Российская Федерация Российская Федерация](/forum2/Content/images/flags/RU.png) Сказал(а) «Спасибо»: 2 раз
|
Автор: afev ![Перейти к цитате Перейти к цитате](/forum2/Themes/soclean/icon_latest_reply.gif) Прикрепите подпись тут в виде файла, попробуем узнать тип. открыл подпись утилитой 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() ?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,003 ![Российская Федерация Российская Федерация](/forum2/Content/images/flags/RU.png) Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 714 раз в 674 постах
|
Подпись формата PKCS7: Автор: afev ![Перейти к цитате Перейти к цитате](/forum2/Themes/soclean/icon_latest_reply.gif) проверка выполняется по-другому (см. samples-sources.jar, пример CMSVerify, ф. CMSVerify). |
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 16.02.2015(UTC) Сообщений: 43 ![Российская Федерация Российская Федерация](/forum2/Content/images/flags/RU.png) Сказал(а) «Спасибо»: 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. Можете подсказать куда ещё рыть??
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,003 ![Российская Федерация Российская Федерация](/forum2/Content/images/flags/RU.png) Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 714 раз в 674 постах
|
Проверьте конкретно с помощью функции CMSVerify, которая в классе CMSVerify. |
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 16.02.2015(UTC) Сообщений: 43 ![Российская Федерация Российская Федерация](/forum2/Content/images/flags/RU.png) Сказал(а) «Спасибо»: 2 раз
|
Так а структура подписи (что я выше представил) правильная с вашей точки зрения?
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 16.02.2015(UTC) Сообщений: 43 ![Российская Федерация Российская Федерация](/forum2/Content/images/flags/RU.png) Сказал(а) «Спасибо»: 2 раз
|
Автор: afev ![Перейти к цитате Перейти к цитате](/forum2/Themes/soclean/icon_latest_reply.gif) Проверьте конкретно с помощью функции CMSVerify, которая в классе CMSVerify. А как её вызывать то правильно? Насколько понял сертификат она берёт из хранилища java, откуда строку для подписи вообще не понятно. Куда и в каком формате я должен положить сертификат, подпись и строку для подписи, чтобы функция отработала правильно?????
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,003 ![Российская Федерация Российская Федерация](/forum2/Content/images/flags/RU.png) Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 714 раз в 674 постах
|
Автор: sergnns ![Перейти к цитате Перейти к цитате](/forum2/Themes/soclean/icon_latest_reply.gif) А как её вызывать то правильно? Насколько понял сертификат она берёт из хранилища java, откуда строку для подписи вообще не понятно. Куда и в каком формате я должен положить сертификат, подпись и строку для подписи, чтобы функция отработала правильно?????
Все есть в main() в CMSVerify: Код:
CMSVerify(signdata, certs, null);
signdata - ваша подпись, certs - список сертификатов, которые следует использовать при проверке (предполагается, что какой-то из них должен подойти). Список подается, если он есть. Сертификат подписи может быть в самой подписи. Последний параметр - подписанные данные, если подпись отделенная. |
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 16.02.2015(UTC) Сообщений: 43 ![Российская Федерация Российская Федерация](/forum2/Content/images/flags/RU.png) Сказал(а) «Спасибо»: 2 раз
|
Цитата:Код:
CMSVerify(signdata, certs, null);
signdata - ваша подпись, certs - список сертификатов, которые следует использовать при проверке (предполагается, что какой-то из них должен подойти). Список подается, если он есть. Сертификат подписи может быть в самой подписи. Последний параметр - подписанные данные, если подпись отделенная. Что-то получилось... Но вот непонятно. Verify выдаёт в моём случае true, только если по update задать encBufSignedAttr.getMsgCopy(), то есть проверяется по-сути не сообщение, а совокупность 4 (в моём случае) атрибутов выдернутых из подписи. В моём случае это тип подписи, дата подписи, хеш сообщения и хеш сертификата. А чтобы проверить собственно неизменённость сообщения я должен дополнительно сравнивать его хеш с хешем сообщения из подписи???? Как-то слишком заумно выглядит.... Более простого пути нет????? Отредактировано пользователем 20 февраля 2015 г. 13:51:27(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,003 ![Российская Федерация Российская Федерация](/forum2/Content/images/flags/RU.png) Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 714 раз в 674 постах
|
|
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 16.02.2015(UTC) Сообщений: 43 ![Российская Федерация Российская Федерация](/forum2/Content/images/flags/RU.png) Сказал(а) «Спасибо»: 2 раз
|
Автор: afev ![Перейти к цитате Перейти к цитате](/forum2/Themes/soclean/icon_latest_reply.gif) Более просая подпись - в классе CMS (только хеш данных, без атрибутов). Ну это если и подписывался только хеш данных?? А вот CSP по-умолчанию что подписывает? Только хеш данных или набор атрибутов? Или это зависит от програмной реализации на клиенте?
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close