Работа с ФСС по передаче данных о больничном

Планировали для передачи данных в ФСС о больничном использовать продукт Рутокен-ЭЦП 2.0.

Если интересно, то спецификация тут

Успешно формируем с помощью продукта ЭЦП на клиенте. Споткнулись с пунктом шифрования данных.
Для шифрования требуется сформировать сессионный ключ и передать его в зашифрованном виде с помощью несимметричного алгоритма (с помощью сертификата ФСС) внутри XML структуры. С помощью этого же сессионного ключа также требуется зашифровать сами данные симметричным алгоритмом (ГОСТ 28147-89).

Возникли следующие вопросы:
1. Как сформировать с помощью rutoken-plugin сессионный ключ
2. Как произвести несимметричное шифрование сессионного ключа с помощью сертификата адресата
3. Как произвести симметричное шифрование данных с помощью сессионного ключа

Re: Работа с ФСС по передаче данных о больничном

Добрый день, paulish.

Изучили эту спецификацию. Как в ней указано, для шифрования используется XML Encryption Syntax and Processing.
Этот стандарт не является широко распространенным. И если решение по XML DSig у нас есть, то по шифрованию к сожалению нет. На сколько нам известно на рынке есть только одно решение, которое поддерживает подобную спецификацию - плагин от компании КриптоПро.

Что удивительно, для подписи используется ГОСТ Р 34.10-2001, который прекращает свое действие после декабря текущего года.

Re: Работа с ФСС по передаче данных о больничном

Спасибо за оперативный ответ.

Тем не менее, с точки зрения простоты использования нам больше нравится рутокен ЭЦП. С нашей точки зрения он требует меньше поддержки на местах в медицинских учреждениях. Формировать программно куски XML для нас не составляет существенной проблемы. К тому же вопрос подписания этого XML нами уже успешно решен и протестирован на сервисах ФСС.

Возвращаясь к моим вопросам, нет ли какой-либо возможности использовать rutoken для формирования сессионного ключа и блочного шифрования по госту?

Что если использовать rutoken в связке с openssl? Возможно ли найти решение используя оба инструмента?

Re: Работа с ФСС по передаче данных о больничном

Это уже сложный технический вопрос, не для форума. Написал Вам на почту.

Re: Работа с ФСС по передаче данных о больничном

Владимир Салыкин пишет:

Это уже сложный технический вопрос, не для форума. Написал Вам на почту.

Добрый день!
Тоже интересуют ответы на эти вопросы.
Кстати, у них уже есть новая спецификация, с поддержкой ГОСТ 2012

Re: Работа с ФСС по передаче данных о больничном

DmitriyAleksandrov пишет:
Владимир Салыкин пишет:

Это уже сложный технический вопрос, не для форума. Написал Вам на почту.

Добрый день!
Тоже интересуют ответы на эти вопросы.
Кстати, у них уже есть новая спецификация, с поддержкой ГОСТ 2012

Дмитрий, написал Вам на почту.

Re: Работа с ФСС по передаче данных о больничном

Владимир Салыкин пишет:

Это уже сложный технический вопрос, не для форума. Написал Вам на почту.

Добрый день!
Занимаемся разработкой ПО для передачи данных в ФСС из медицинских учреждений с использованием Рутокен-ЭЦП 2.0.
Также требуются ответы на эти вопросы.

Re: Работа с ФСС по передаче данных о больничном

Ирина Казакевич пишет:
Владимир Салыкин пишет:

Это уже сложный технический вопрос, не для форума. Написал Вам на почту.

Добрый день!
Занимаемся разработкой ПО для передачи данных в ФСС из медицинских учреждений с использованием Рутокен-ЭЦП 2.0.
Также требуются ответы на эти вопросы.

Ирина, написал Вам на почту.

Re: Работа с ФСС по передаче данных о больничном

paulish, подскажите удалось выполнить шифрование по требованиям ФСС?

С какими параметрами вызываете вызываете функции С_DeriveKey, C_WrapKey и C_EncryptInit.

У нас подпись учреждения ГОСТ 2012. Сервис ФСС отвечает, что не может расшифровать сообщение.

Re: Работа с ФСС по передаче данных о больничном

Ирина Казакевич, по шифрованию есть нюанс. Создаваемая ключевая пара, должна иметь парамсет
exchange A. У сервера ФСС есть такая проверка.

Для ГОСТ-2012 надо использовать парамсет z. Шаблон (на С#):

// Шаблон для импорта симметричного ключа ГОСТ 28147-89 (маскируемого ключа)
        static readonly List<ObjectAttribute> SessionKeyAttributes = new List<ObjectAttribute>
        {
            // Метка ключа
            new ObjectAttribute(CKA.CKA_LABEL, SampleConstants.WrappedKeyLabel),
            // Идентификатор ключа
            new ObjectAttribute(CKA.CKA_ID, SampleConstants.GostSecretKeyId),
            // Класс - секретный ключ
            new ObjectAttribute(CKA.CKA_CLASS, CKO.CKO_SECRET_KEY),
            // Тип ключа - ГОСТ 28147-89
            new ObjectAttribute(CKA.CKA_KEY_TYPE, (uint) Extended_CKK.CKK_GOST28147),
            // Ключ является объектом сессии
            new ObjectAttribute(CKA.CKA_TOKEN, false),
            // Ключ может быть изменен после создания
            new ObjectAttribute(CKA.CKA_MODIFIABLE, true),
            // Ключ доступен только после аутентификации на токене
            new ObjectAttribute(CKA.CKA_PRIVATE, true),
            // Ключ может быть извлечен в зашифрованном виде
            new ObjectAttribute(CKA.CKA_EXTRACTABLE, true),
            // Ключ может быть извлечен в открытом виде
            new ObjectAttribute(CKA.CKA_SENSITIVE, false),
            new ObjectAttribute(CKA.CKA_GOST28147_PARAMS, params28147)
        };

Еще - использует CBC без мешинга -- CRYPT_MODE_CBC (а не CRYPT_MODE_CBCRFC4357).
В SDK у нас пример с мешингом.

(2019-12-08 20:13:17 отредактировано Ирина Казакевич)

Re: Работа с ФСС по передаче данных о больничном

Павел Анфимов, спасибо.
Обратила внимание, что для выработки ключа обмена должен использоваться эфемерный ключ.
В КриптоПро это команда вида
CryptGenKey(hProv, CALG_DH_GR3410_12_256_EPHEM, CRYPT_EXPORTABLE, &hEphemeralKey)

Как это будет выглядеть для Рутокен 2.0?

Так же для заполнения KeyInfo требуется session MAC key.

Re: Работа с ФСС по передаче данных о больничном

Ирина, напишите, пожалуйста на hotline@rutoken.ru

Re: Работа с ФСС по передаче данных о больничном

Здравствуйте.
Возникла проблема с Рутокен ЭЦП 2.0 2000.

На Рутокен ЭЦП 2.0 2100 успешно проходит подпись и шифрование.

Но на Рутокен ЭЦП 2.0 2000 проходит успешно подпись, а при шифровании
выдаёт ошибку при использовании функции C_DeriveKey: CKR_KEY_FUNCTION_NOT_PERMITTED.
При попытке найти privateKey с аттрибутом CKA_DERIVE=True таких ключей не находит.
В чём может быть причина, как исправить?

Re: Работа с ФСС по передаче данных о больничном

Ирина Казакевич, добрый день!

CKA_DERIVE – должен быть TRUE.
Изменить этот параметр после генерации уже нельзя.

Re: Работа с ФСС по передаче данных о больничном

То есть имеющийся ключ сгенерирован уже с таким параметром?
Нужно обращаться к тому, кто выдал ключ?

Можно с помощью какой-то утилиты в этом убедится, что эта ЭЦП 2.0 имеет такой параметр False?