Форум КриптоПро
»
Средства криптографической защиты информации
»
Встраивание
»
Получение данных с Web сервиса ФСС по электронному больничному листу в системе SAP
Статус: Участник
Группы: Участники
Зарегистрирован: 16.08.2017(UTC) Сообщений: 19   Откуда: Санкт-Петербург Сказал «Спасибо»: 2 раз
|
Еще вдогонку вот что у меня получается после шифрования ключа: https://lapo.it/asn1js/#Как я понял, вот это вектор инициализации: OBJECT IDENTIFIER 1.2.643.2.2.21 gostCipher (GOST 28147-89 (symmetric key block cipher)) SEQUENCE (2 elem) OCTET STRING (8 byte) ECCCB62C6F797C0DА вот это данные: OBJECT IDENTIFIER 1.2.643.2.2.31.1 cryptoProCipherA (CryptoPro params A (default, variant 'Verba-O') for GOST 28147-89) [0] (32 byte) 930C0B9EEB04CE3896A6026C85E466F40297EAD51E65E622F41B23B001626CAAХотя смущает надпись (default, variant 'Verba-O')....
|
|
|
|
Статус: Эксперт
Группы: Участники
Зарегистрирован: 05.03.2015(UTC) Сообщений: 1,602  Откуда: Иркутская область Сказал(а) «Спасибо»: 110 раз Поблагодарили: 395 раз в 366 постах
|
Автор: Михаил К.  Т.е. алгоритм такой: формирую случайный ключ, шифрую на нем данные запроса, потом применяю паддинг к ключу, шифрую его на открытой части сертификата ФСС. Получаю данные в формате ASN.1(PKCS7). Разбираю их и необходимые куски вставляю в итоговый XML? Если все так, то вот еще вопросы: есть ли требования к формированию ключа? Шифровать на нем данные надо до применения к нему паддинга? или после? И надо ли применять паддинг к данным, которые шифрую на ключе? Паддинг прежде всего добавляется к данным, а не к ключу. Сам сессионный ключ и так по длине кратен 8 байтам, то есть паддинг не нужен, шифрование самого ключа проходит без паддинга симметричным алгоритмом и длина "зашифрованного сессионного ключа" не меняется, а "обвязка ключа" наложенная после шифрования сессионного ключа (блоб ключа) не выравнивается. Схема обмена ключей гост "немного сложнее".
Полная схема примерно такая (вроде на этот раз правильно пишу): вход: исходные данные, сертификат (или открытый ключ) получателя, закрытый ключ отправителя. Шаги: применяется паддинг к исходным данным; генерируется сессионный ключ; им шифруются данные с паддингом; из открытого ключа получателя, закрытого ключа отправителя и случайного вектора инициализации формируется ключ шифрования ключей; сессионный ключ шифруется ключом шифрования ключей и экспортируется в блоб (с обвязкой говорящей об алгоритме и других параметрах). Выход: вектор инициализации, блоб зашифрованного сессионного ключа и зашифрованные данные. В xml вектор объединили с данными, блоб так и остался и добавили отдельно сертификат отправителя. Другая сторона соответственно в обратном порядке: восстанавливает ключ шифрования ключей, расшифровывает сессионный ключ ключем шифрования ключей, расшифровывает данные сессионным ключом, убирает паддинг из данных.
Цитата:Хотя смущает надпись (default, variant 'Verba-O').... Да, меня тоже она смущает, ведь у ключа параметры TK26Z, надо наверно стандарты полистать или попробовать скормить утилитам работающим через крипто апи. Данные не коротковаты?
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 16.08.2017(UTC) Сообщений: 19   Откуда: Санкт-Петербург Сказал «Спасибо»: 2 раз
|
Автор: two_oceans  Автор: Михаил К.  Т.е. алгоритм такой: формирую случайный ключ, шифрую на нем данные запроса, потом применяю паддинг к ключу, шифрую его на открытой части сертификата ФСС. Получаю данные в формате ASN.1(PKCS7). Разбираю их и необходимые куски вставляю в итоговый XML? Если все так, то вот еще вопросы: есть ли требования к формированию ключа? Шифровать на нем данные надо до применения к нему паддинга? или после? И надо ли применять паддинг к данным, которые шифрую на ключе? Паддинг прежде всего добавляется к данным, а не к ключу. Сам сессионный ключ и так по длине кратен 8 байтам, то есть паддинг не нужен, шифрование самого ключа проходит без паддинга симметричным алгоритмом и длина "зашифрованного сессионного ключа" не меняется, а "обвязка ключа" наложенная после шифрования сессионного ключа (блоб ключа) не выравнивается. Схема обмена ключей гост "немного сложнее".
Полная схема примерно такая (вроде на этот раз правильно пишу): вход: исходные данные, сертификат (или открытый ключ) получателя, закрытый ключ отправителя. Шаги: применяется паддинг к исходным данным; генерируется сессионный ключ; им шифруются данные с паддингом; из открытого ключа получателя, закрытого ключа отправителя и случайного вектора инициализации формируется ключ шифрования ключей; сессионный ключ шифруется ключом шифрования ключей и экспортируется в блоб (с обвязкой говорящей об алгоритме и других параметрах). Выход: вектор инициализации, блоб зашифрованного сессионного ключа и зашифрованные данные. В xml вектор объединили с данными, блоб так и остался и добавили отдельно сертификат отправителя. Другая сторона соответственно в обратном порядке: восстанавливает ключ шифрования ключей, расшифровывает сессионный ключ ключем шифрования ключей, расшифровывает данные сессионным ключом, убирает паддинг из данных.
Цитата:Хотя смущает надпись (default, variant 'Verba-O').... Да, меня тоже она смущает, ведь у ключа параметры TK26Z, надо наверно стандарты полистать или попробовать скормить утилитам работающим через крипто апи. Данные не коротковаты? Ага, стало понятнее про ключ. А вот с шифрованием не совсем! Дело в том, что я реализую шифрование в SAP, а там это встроенный функциональный модуль (который просто передает данные в КриптоПро через специальную прослойку), на вход которому я подаю свой случайный ключ, и идентификатор ключа(сертификата) из личного хранилища (в данном случае ФСС). И на выходе получаю бинарные данные в формате PKCS7. Никаких векторов инициализации я не создаю и не передаю. По всей видимости КриптоПро это делает за меня. Вот я и пытаюсь понять, могу я использовать стандарт SAP и просто потом парсить выходные данные и раскладывать их в запрос. Или же надо что-то свое стороннее делать и вызывать из SAP этот функционал.
Попробую выудить данные из PKCS7 и собрать запрос с ними, посмотрим что ФСС ответит...
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 10.10.2016(UTC) Сообщений: 2
Сказал(а) «Спасибо»: 1 раз
|
Добрый день!
Я пытаюсь отправить запрос в ФСС для получения данных по электронному больничному листу. Использую SSF (версия SSF 1.0.118832, CSP 5.0.11455). Дайджест составляю с помощью SSF_DIGEST, подпись SSF_SIGN, в формате RAW_GOST, хэш-алгоритм GOST2012-256.
Заметил, что формат RAW_GOST_INVERTED выдает то же значение, что и RAW_GOST (проверил на SSF_DIGEST). Почему так? Какой все-таки формат нужен? Хотя пробовал вручную поменять порядок байт подписи на обратный, не помогло.
Получаю из ФСС ответ: ORA-20001: Некорректная подпись головной организации: ЭЦП неверна. INVALID_SIGNATURE ЭП недействительна. Обратитесь к разработчику программного обеспечения, на котором осуществлялось подписание данных.
Подскажите, в какую сторону копать? Что еще можно и как проверить? (дайджест проверил на примере из ФСС-спецификации - совпадает для алгоритма GOST3411, порядок тэгов совпадает, сам xml-аргумент каноникализирован).
|
|
|
|
Статус: Эксперт
Группы: Участники
Зарегистрирован: 05.03.2015(UTC) Сообщений: 1,602  Откуда: Иркутская область Сказал(а) «Спасибо»: 110 раз Поблагодарили: 395 раз в 366 постах
|
Добрый день! Сложно сказать без самого файла. Тег Signature как формируете, если получаете RAW_GOST? Гадание на кофейной гуще: в файле может быть несколько подписей к разным фрагментам файла и возможно перепутали какой фрагмент к какой подписи должен относиться. ФСС проверяет подписи несколько странно и в обход некоторых деталей стандартов: рекомендуемые атрибуты невалидны по стандартам, но их приходится использовать. Кстати, посмотрите что у Вас получилось в итоге, не исказился ли исходный текст (раз уж он "заранее каноникализирован"). Еще теоретически ФСС в своей реализации проверки вполне может взять фрагмент не смотря на reference URI (взять тот который должен быть подписан по мнению ФСС) и в этом случае выдаст что неверная ЭП, даже если у Вас подпись верна, но верна для другого фрагмента. Перепроверьте еще раз что нигде не спутали, какой именно фрагмент подписывается подписью с определенным actor . Отредактировано пользователем 11 марта 2020 г. 11:41:59(UTC)
| Причина: Не указана
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 10.10.2016(UTC) Сообщений: 2
Сказал(а) «Спасибо»: 1 раз
|
Пример очень элементарный (1 набор данных, 1 подпись, 1 актор). Данные вообще взяты из примера спецификации самой ФСС. Весь запрос и SignedInfo во вложении.  for_sign.xml (1kb) загружен 14 раз(а). XML_PI_to_FSS.XML (4kb) загружен 22 раз(а).SignatureValue формирую вызовом SSF_SIGN. На входе формат RAW_GOST, хэш-алгоритм GOST2012-256, мой сертификат, в качестве данных для подписи - тэг SignedInfo. Отредактировано пользователем 11 марта 2020 г. 12:40:39(UTC)
| Причина: Не указана
|
|
|
|
Статус: Эксперт
Группы: Участники
Зарегистрирован: 05.03.2015(UTC) Сообщений: 1,602  Откуда: Иркутская область Сказал(а) «Спасибо»: 110 раз Поблагодарили: 395 раз в 366 постах
|
Проверка: значение хэша в референсе совпадает с действительным, значение хэша от SignedInfo не проверяется по SignatureValue и сертификату. Проверяем глазами SignedInfo и выходит что for_sign.xml не каноничен, не хватает определения пространства имен у корневого тега фрагмента. Должно быть: Код:<SignedInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
Фрагмент должен быть самодостаточным и содержать все объявления использованных пространств имен. Собственно для SignedInfo как правило одно пространство, если нет заковыристых трансформов с параметрами. Это достаточно частая ошибка, так как если был тег с префиксом, парсер бы указал что в "куске" документа ("кусок", а не "фрагмент", потому что получен строковыми операциями) префикс неопределен, но тут тег без префикса и парсер считает что это пространство имен по умолчанию, а не пространство имен "http://www.w3.org/2000/09/xmldsig#", соответственно при каноникализации куска ошибки не выдалось, но в собранном документе каноническая форма будет уже с пространством имен. Кстати, почему в подписанном документе объявление пространства имен в SignedInfo есть? Добавили после подписания (при сборке) и тем самым нарушили подпись? Рекомендую сделать SignedInfo (и дочерние теги) с тем же префиксом ds что и Signature. Работает конечно и с разными, но могут быть такие недетектируемые коллизии. Отредактировано пользователем 11 марта 2020 г. 16:48:38(UTC)
| Причина: Не указана
|
 1 пользователь поблагодарил two_oceans за этот пост.
|
Eugeny оставлено 12.03.2020(UTC)
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 16.08.2017(UTC) Сообщений: 19   Откуда: Санкт-Петербург Сказал «Спасибо»: 2 раз
|
Добрый день. А не поможете "правильно" привести тег <ROW> к каноническому виду, а то все некорректная подпись...  row_.xml (2kb) загружен 13 раз(а).
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 16.08.2017(UTC) Сообщений: 19   Откуда: Санкт-Петербург Сказал «Спасибо»: 2 раз
|
Автор: Михаил К.  Добрый день. А не поможете "правильно" привести тег <ROW> к каноническому виду, а то все некорректная подпись...  row_.xml (2kb) загружен 13 раз(а). Отвечу сам себе (разобрался за полдня). Вот такой должен быть тег <ROW>:  template_canonical_row_new.xml (2kb) загружен 26 раз(а).
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 04.03.2022(UTC) Сообщений: 1  Откуда: Москва Сказал(а) «Спасибо»: 1 раз
|
Добрый день! Можно ли верифицировать подпись формата "RAW_GOST_INVERTED" средствами SSF и как это сделать?
|
|
|
|
Форум КриптоПро
»
Средства криптографической защиты информации
»
Встраивание
»
Получение данных с Web сервиса ФСС по электронному больничному листу в системе SAP
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close