Статус: Активный участник
Группы: Участники
Зарегистрирован: 19.10.2022(UTC) Сообщений: 30  Сказал(а) «Спасибо»: 4 раз Поблагодарили: 2 раз в 2 постах
|
У меня есть следующий код, который подписывает данные: https://github.com/navro...pto/blob/master/main.cpp . Сертификат и ключ я сделал так и импортировал в контейнер CSP: Код:openssl-1_1 req -x509 -newkey gost2012_256 -pkeyopt paramset:A -nodes -keyout key.pem -out cert.pem -days 365
openssl-1_1 pkcs12 -export -engine gost -inkey key.pem -in cert.pem -out test_gost12_256.pfx -password pass:123456 -macalg md_gost12_256 -keypbe gost89 -certpbe gost89 -name test_gost12_256 -keysig
/opt/cprocsp/bin/amd64/certmgr -install -pfx -file test_gost12_256.pfx -pin 123456 -to-container
Создал тестовые данные для подписи: Код:echo "test data" > test_data
Запустил тестовое приложение: И проверил подпись: Код:openssl-1_1 x509 -pubkey -in cert.pem -out pubkey.pem
openssl-1_1 dgst -c -md_gost12_256 -verify pubkey.pem -keyform PEM -signature signature test_data
В результате получил "Verification Failure" Если я подписываю через openssl, то верификация проходит "Verified OK": Код:openssl-1_1 dgst -md_gost12_256 -sign key.pem -keyform PEM test_data > openssl_signature
openssl-1_1 dgst -c -md_gost12_256 -verify pubkey.pem -keyform PEM -signature openssl_signature test_data
Что я делаю не так, что упустил? PS: хэши сверил, что при помощи CSP я получаю, что и при помощи openssl - совпадают. Здесь полный код проекта: https://github.com/navrocky/test_cryptoptoОтредактировано пользователем 24 апреля 2023 г. 19:15:22(UTC)
| Причина: Не указана
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 24.04.2023(UTC) Сообщений: 4  Сказал(а) «Спасибо»: 1 раз Поблагодарили: 1 раз в 1 постах
|
У меня тоже не получается верифицировать сырую подпись с openssl. В моем случае подпись формируется в браузере с плагином cadesplugin. Исходник страницы тут https://gist.github.com/...86da5c9cd610cb6716fa0e8eПолучаемая подпись приходит в виде Код:14769BB28F8CEAFE5A0166D6B439870569BFD296565D47AB040F48BFE80CE79A7AE541FF9A94C8BB6EC6989393C3BC51C05B31F2A4DAA83FD1F8535ADF3B52AE
Дальше ее преобразую в бинарный вид с командой Код:$ xxd -r -p message.txt.sig.hex > message.txt.sig
$ openssl dgst -md_gost12_256 -verify ../pubkey.pem -signature message.txt.sig message.txt
Verification failure
809B6343567F0000:error:4000007B:lib(128):ERR_GOST_error:signature mismatch:./gost_ec_sign.c:413:
На соседних страницах советовали перевернуть текст подпись и/или поменять порядок байт. (получилось 4 варианта (как оказалось тут у меня была ошибка!)) Во всех случаях openssl выдает Verification failure. (UPD) Помогло следуюущее:Код:$ cat message.txt.sig.hex | fold -w 2 | tac | xxd -p -r > message.txt.sig.r
$ openssl dgst -md_gost12_256 -verify ../pubkey.pem -signature message.txt.sig.r message.txt
Verified OK
Отредактировано пользователем 24 апреля 2023 г. 17:57:19(UTC)
| Причина: добавил пример с рабочей проверкой подписи
|
 1 пользователь поблагодарил Eduard Iskandarov за этот пост.
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 19.10.2022(UTC) Сообщений: 30  Сказал(а) «Спасибо»: 4 раз Поблагодарили: 2 раз в 2 постах
|
Автор: Eduard Iskandarov  На соседних страницах советовали перевернуть текст подпись и/или поменять порядок байт. (получилось 4 варианта)
Хм, помог переворот результирующей подписи. Спасибо! Скорее всего переворот данных не поможет, так как повлияет на хэш. А хэш вычисляется одинаково в обоих библиотеках. Ещё остается вопрос с CMS подписью, она тоже не валидируется, но как её перевернуть?  Да, и последний вопрос, а какой порядок всё-таки правильный, перевернутый или нет относительно openssl? Так как подпись потом может использоваться в JWT, например. Отредактировано пользователем 24 апреля 2023 г. 14:28:54(UTC)
| Причина: Не указана
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 24.04.2023(UTC) Сообщений: 4  Сказал(а) «Спасибо»: 1 раз Поблагодарили: 1 раз в 1 постах
|
о, мне тоже помог разворот бинарного файла с подписью 🎉 Код:$ < message.txt.sig xxd -p -c1 | tac | xxd -p -r > message.txt.sig.r
$ openssl dgst -md_gost12_256 -verify ../pubkey.pem -signature message.txt.sig.r message.txt
Verified OK
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 24.04.2023(UTC) Сообщений: 4  Сказал(а) «Спасибо»: 1 раз Поблагодарили: 1 раз в 1 постах
|
про CMS подпись не знаю. вероятно можно отредактировать файл и развернуть подпись в нем
напишите пожалуйста сюда что получилось
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 19.10.2022(UTC) Сообщений: 30  Сказал(а) «Спасибо»: 4 раз Поблагодарили: 2 раз в 2 постах
|
Автор: Eduard Iskandarov  про CMS подпись не знаю. вероятно можно отредактировать файл и развернуть подпись в нем
напишите пожалуйста сюда что получилось Пока вижу только один способ: собирать CMS руками с развернутой подписью, используя ASN1 функции ( Вообще странно всё это очень. Хотелось бы чтобы кто-нибудь из разработчиков прокомментировал UPD. CMS подпись я победил. Оказалось, что CSP тут не виновата. Проблема у меня была в OpenSSL коде, я не указал флаг CMS_BINARY при создании и верификации подписи. С этим флагом все кросс верификации проходят между OpenSSL и CSP. Отредактировано пользователем 25 апреля 2023 г. 16:13:07(UTC)
| Причина: Не указана
|
 1 пользователь поблагодарил navrocky за этот пост.
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 24.04.2023(UTC) Сообщений: 4  Сказал(а) «Спасибо»: 1 раз Поблагодарили: 1 раз в 1 постах
|
Цитата:Да, и последний вопрос, а какой порядок всё-таки правильный, перевернутый или нет относительно openssl?
В браузер плагин от рутокен, сырая подпись не требует преобразований(кроме hex -> bin) для проверки в openssl. https://plugin.api.rutok...ryptoPlugin.html#rawSign
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 19.10.2022(UTC) Сообщений: 30  Сказал(а) «Спасибо»: 4 раз Поблагодарили: 2 раз в 2 постах
|
Автор: Eduard Iskandarov  Цитата:Да, и последний вопрос, а какой порядок всё-таки правильный, перевернутый или нет относительно openssl?
В браузер плагин от рутокен, сырая подпись не требует преобразований(кроме hex -> bin) для проверки в openssl. https://plugin.api.rutok...ryptoPlugin.html#rawSign Серийный номер сертификата в CSP тоже надо разворачивать для правильного отображения на экране. Видимо это какое-то общее правило.
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close