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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline Rainokvsy  
#1 Оставлено : 4 мая 2022 г. 17:00:08(UTC)
Rainokvsy

Статус: Новичок

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

Сказал(а) «Спасибо»: 6 раз
Добрый день!
Имеется ресурс, общение с которым производится по средствам JWT.
Header представляет структуру Json кодированную в строку Base64.
Signature представляет закодированную в Base64 ЭП по ГОСТ 34.10-2012 строку . ЭП имеет формат «detached PKCS #7».
Для Jwt = Header.Signature
Так вот когда я беру Header и в ручную его подписываю на сайте проверки плагина
тогда формируется корректная строка и JWT токен принимается. Если же я формирую в скрипте python (как в примере), то формируется не корректно и сервис ругается на невалидность подписи.
смена pycades.CADESCOM_CADES_BES на pycades.CADESCOM_PKCS7_TYPE не помогает.
СryptoPro 5.0, python 3.8, Ubuntu 20.04

Отредактировано пользователем 4 мая 2022 г. 17:01:15(UTC)  | Причина: Не указана

Offline Санчир Момолдаев  
#2 Оставлено : 4 мая 2022 г. 17:59:01(UTC)
Санчир Момолдаев

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

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

Сказал(а) «Спасибо»: 74 раз
Поблагодарили: 191 раз в 186 постах
Добрый день!

обратите внимание на статью
т.е. примерно так
Код:
hashedData = pycades.HashedData()
hashedData.Algorithm = pycades.CADESCOM_HASH_ALGORITHM_CP_GOST_3411_2012_256
hashedData.DataEncoding = pycades.CADESCOM_BASE64_TO_BINARY
with open('data.txt', 'rb') as binary_data_file:
    content = base64.b64encode(binary_data_file.read()).decode()
hashedData.Hash(content)
Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Санчир Момолдаев за этот пост.
Rainokvsy оставлено 19.05.2022(UTC)
Offline Rainokvsy  
#3 Оставлено : 5 мая 2022 г. 18:36:50(UTC)
Rainokvsy

Статус: Новичок

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

Сказал(а) «Спасибо»: 6 раз
Не помогает. Различие в подписи генерируемой на сайте и при помощи модуля. Какие настройки надо указать, что бы генерировалась подпись как на сайте?
Offline Санчир Момолдаев  
#4 Оставлено : 6 мая 2022 г. 0:44:20(UTC)
Санчир Момолдаев

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

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

Сказал(а) «Спасибо»: 74 раз
Поблагодарили: 191 раз в 186 постах
может им нужна сырая подпись RawSignature
вы пример подписи покажите какая им нужна
Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Санчир Момолдаев за этот пост.
Rainokvsy оставлено 19.05.2022(UTC)
Offline Rainokvsy  
#5 Оставлено : 6 мая 2022 г. 8:53:43(UTC)
Rainokvsy

Статус: Новичок

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

Сказал(а) «Спасибо»: 6 раз
Header представляет структуру Json кодированную в строку Base64.
Payload – непосредственно сами данные сообщения (приведены данные для примера вида записи), представляет собой структуру XML кодированную в строку Base64.
Signature представляет закодированную в Base64 ЭП по ГОСТ 34.10-2012 строку . ЭП имеет формат «detached PKCS #7». Для Jwt "Header.Payload.Signature" подписываемая последовательность представляет собой конкатенацию части Header и Payload разделенных символом точка "Header.Payload". Разделитель "." входит в последовательность.
Вот инструкция по формированию JWT. У меня в первом запросе Payload нет, потому нужно подписать только Header.
Я перевел Header в base64, и на странице формирую подпись, там формируется так как надо:


А вот подписываемая строка
ew0KIk9ncm4iIDogIjEwMjM0MDM0NTc0MTciLA0KIktwcCIgOiAiMzQ0NDAxMDAxIg0KfQ==.
Offline Андрей *  
#6 Оставлено : 6 мая 2022 г. 9:45:47(UTC)
Андрей *

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

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

Сказал «Спасибо»: 425 раз
Поблагодарили: 1718 раз в 1324 постах
Автор: Rainokvsy Перейти к цитате

А вот подписываемая строка
ew0KIk9ncm4iIDogIjEwMjM0MDM0NTc0MTciLA0KIktwcCIgOiAiMzQ0NDAxMDAxIg0KfQ==.



Почему в подписываемых данных точка в конце?
Этот JWT принимает система? Тогда авторам задайте вопрос, почему по документации написано detached, а проверяется присоединенная.


Периодически всплывают темы на форуме:
https://www.cryptopro.ru...aspx?g=posts&t=19377
Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Андрей * за этот пост.
Rainokvsy оставлено 19.05.2022(UTC)
Offline Андрей *  
#7 Оставлено : 6 мая 2022 г. 9:50:09(UTC)
Андрей *

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

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

Сказал «Спасибо»: 425 раз
Поблагодарили: 1718 раз в 1324 постах
Автор: Rainokvsy Перейти к цитате
Header представляет структуру Json кодированную в строку Base64.
Payload – непосредственно сами данные сообщения (приведены данные для примера вида записи), представляет собой структуру XML кодированную в строку Base64.
Signature представляет закодированную в Base64 ЭП по ГОСТ 34.10-2012 строку . ЭП имеет формат «detached PKCS #7». Для Jwt "Header.Payload.Signature" подписываемая последовательность представляет собой конкатенацию части Header и Payload разделенных символом точка "Header.Payload". Разделитель "." входит в последовательность.
Вот инструкция по формированию JWT. У меня в первом запросе Payload нет, потому нужно подписать только Header.
Я перевел Header в base64, и на странице формирую подпись, там формируется так как надо:
[SPOILER]MIIdIwYJKoZIhvcNAQcCoIIdFDCCHRA
///
А вот подписываемая строка
ew0KIk9ncm4iIDogIjEwMjM0MDM0NTc0MTciLA0KIktwcCIgOiAiMzQ0NDAxMDAxIg0KfQ==.





Цитата:
У меня в первом запросе Payload нет, потому нужно подписать только Header.

Интересная ситуация. Теперь понятно
Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Андрей * за этот пост.
Rainokvsy оставлено 19.05.2022(UTC)
Offline Rainokvsy  
#8 Оставлено : 11 мая 2022 г. 10:55:46(UTC)
Rainokvsy

Статус: Новичок

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

Сказал(а) «Спасибо»: 6 раз
Автор: Андрей * Перейти к цитате
Автор: Rainokvsy Перейти к цитате

А вот подписываемая строка
ew0KIk9ncm4iIDogIjEwMjM0MDM0NTc0MTciLA0KIktwcCIgOiAiMzQ0NDAxMDAxIg0KfQ==.



Почему в подписываемых данных точка в конце?
Этот JWT принимает система? Тогда авторам задайте вопрос, почему по документации написано detached, а проверяется присоединенная.


Периодически всплывают темы на форуме:
https://www.cryptopro.ru...aspx?g=posts&t=19377


Тему читал, не помогло.
С авторами разговаривать бесполезно, они оправляют в документацию, содержание которой я процитировал. Да я и не понимаю о чем разговаривать с людьми, которые уверенны, что корректность данных должно не из API проверять, а это моя задача и задача моей информационной системы.

Если знаете, подскажите как сформировать такую же подпись как на сайте, я уже что придумал, все перепробовал, остается только предположение что у меня что-то криво стоит. Но с другой стороны, на сайте же работает. Уже если честно не важно, atachet или detachet и каким алгоритмом о все остальное, Главное как получить туже подпись как на сайте.
Offline two_oceans  
#9 Оставлено : 11 мая 2022 г. 13:08:39(UTC)
two_oceans

Статус: Эксперт

Группы: Участники
Зарегистрирован: 05.03.2015(UTC)
Сообщений: 1,536
Российская Федерация
Откуда: Иркутская область

Сказал(а) «Спасибо»: 105 раз
Поблагодарили: 375 раз в 354 постах
Добрый день.
Из приложенного примера вижу, что подпись присоединенная (attached) и в ней включена вся цепочка сертификатов.
Для включения всей цепочки попробуйте для объекта Signer установить свойство Options в CAPICOM_CERTIFICATE_INCLUDE_WHOLE_CHAIN (или значение 1).

Ключевые моменты с демостраницы можно посмотреть в исходном коде.
https://www.cryptopro.ru...s/cades/demopage/Code.js
https://www.cryptopro.ru...cades/cadesplugin_api.js

Они не особо отличаются от примера Питона (без обработки ошибок и вывода на страницу вышло примерно так, версия NPAPI), разве что используется сразу SignCades вместо сочетания HashedData и SignHash. В случае Питона ContentEncoding Content относятся к HashedData (соответственно DataEncoding и строка передаваемая в метод Hash):

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

thanks 1 пользователь поблагодарил two_oceans за этот пост.
Rainokvsy оставлено 19.05.2022(UTC)
Offline Rainokvsy  
#10 Оставлено : 16 мая 2022 г. 14:14:06(UTC)
Rainokvsy

Статус: Новичок

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

Сказал(а) «Спасибо»: 6 раз
Не получается ничего. Я уже попробовал поместить требуемую строку в файл и подписать ее с помощью cryptcp.
Можно ли по первым знакам подписи понять какие параметры подписи?

Код:
cryptcp -sign -thumbprint 73af17e557895972b00d76967a32ecb01b6184a9 -strict -detached -addchain file


При этом в начале сформированной подписи

MIIctwYJKoZIhvcNAQcCoIIcqDCCHKQCAQExDDAKBggqhQMHAQECAjALBgkqhkiG9w0BBwGg

У корректной

MIIdIwYJKoZIhvcNAQcCoIIdFDCCHRACAQExDDAKBggqhQMHAQECAjBYBgkqhkiG9w0BBwGg

далее идут сильные отличия.

Возможно ли, что выделенные отличия связаны с какими-то конкретными опциями при формировании?
Offline two_oceans  
#11 Оставлено : 17 мая 2022 г. 10:50:54(UTC)
two_oceans

Статус: Эксперт

Группы: Участники
Зарегистрирован: 05.03.2015(UTC)
Сообщений: 1,536
Российская Федерация
Откуда: Иркутская область

Сказал(а) «Спасибо»: 105 раз
Поблагодарили: 375 раз в 354 постах
Цитата:
Для включения всей цепочки попробуйте для объекта Signer установить свойство Options в CAPICOM_CERTIFICATE_INCLUDE_WHOLE_CHAIN (или значение 1).
Вот это попробовали добавить к примеру? Это аналог -addchain для cryptcp. От включения цепочки существенно зависит размер подписи.
Автор: Rainokvsy Перейти к цитате
Не получается ничего.
Не надо расстраиваться. Как будто хоть у кого-то с ЭП все получалось с первого раза. Как в той рекламе: нет, это фантастика.
Автор: Rainokvsy Перейти к цитате
Можно ли по первым знакам подписи понять какие параметры подписи?
Нет. Вначале контейнер-матрешка с указанием длины каждой вложенной части, настоящие параметры могут быть и в середине результата и даже ближе к концу. Частично они даже не формализованы как параметры - просто часть может присутствовать, а может быть что-то другое вместо нее. Части, что Вы выделили, это на 90% отличия в длине вложенных частей, а вот дальше где "сильные отличия", там то самое интересное. Более того, у двух программ подписания при идентичных параметрах могут быть разные строки просто из-за разной формы кодирования ASN.1. Кроме того, даже одной программой 10 раз подпишите одни данные с указанием одного сертификата - результат будет немного отличаться в силу специфики ГОСТ.

Просто забудьте об анализе параметров подписи по первым байтам строки base64. Это примерно как гадать как устроен двигатель автомобиля по форме облака выхлопных газов.

Загрузите строку base64 в нормальную программу просмотра ASN.1 - есть онлайн просмотрщики, в которые как раз подойдет строка base64. Там уже сможете увидеть, чем именно отличаются подписи (где только длина, где добавится лишний блок, например, блок с цепочкой сертификатов).

thanks 1 пользователь поблагодарил two_oceans за этот пост.
Rainokvsy оставлено 19.05.2022(UTC)
Offline Rainokvsy  
#12 Оставлено : 19 мая 2022 г. 9:00:28(UTC)
Rainokvsy

Статус: Новичок

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

Сказал(а) «Спасибо»: 6 раз
В общем пошел по обходному пути, данные укладываю в файл и его подписываю утилитой
Код:
csptest -sfsign -sign -detached -add
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.