1

Тема: Формат подписи для обмена с ЦБ

Здравствуйте,
в примерах подписи xml-файлов для обмена с ЦБ фигурируют очень короткие подписи, кодированные в base64 - явно не pkcs7-формат, там гораздо больше сопроводительной информации, плюс обычно всегда внедряется сертификат подписанта. Навскидку - около сотни байт.
При этом нигде в доках ЦБ нигде явно не указано, что формат подписи - пропраетарный.
Я правильно понимаю, что нужно использовать Ваш "простой" формат ЭЦП, который 96 байт?
Если да - то пара вопросов:
- как добиться формирования именно такой ЭЦП через утилиту командной строки (чтобы иметь возможность сравнивать результат с вызовом апи)
- как проверять такие подписи, если мы не имеем в явном виде сертификата подписанта и не передаем его в параметрах командной строки?
- можно ли создать/проверить такие подписи через стандартный Win CryptAPI (он без проблем генерирует детаченый pkcs7, но вот заставить его сгенерить ваш чудо-формат у меня не вышло)
- сказываются ли параметры, заданные через conf-файл, на работе СКЗИ при вызовах через API, или они влияют только на утилиту командной строки?
- есть ли где-то полный актуальный список параметров командной строки утилиты и настроек конфиг-файла?
Спасибо.

2

Re: Формат подписи для обмена с ЦБ

Добрый день,

СКАД Сигнатура 5 не формирует ЭП в "простом" формате, осталась только возможность проверки. Формирование ЭП происходит в формате PKCS7.
Вероятно в примерах было действительно использована ЭП "простом" формате.
Полный актуальный список параметров утилиты командной строки и настроек конфигурационного файла описан в документации в документе "ИСПОЛНЯЕМЫЙ МОДУЛЬ КОМАНДНОЙ СТРОКИ
ДЛЯ ОПЕРАЦИОННОЙ СИСТЕМЫ WINDOWS. РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ" (ВАМБ.00106-01 92 02)

3

Re: Формат подписи для обмена с ЦБ

Спасибо за ответ,
но тогда выходит, что избыточность формируемых хмл будет просто зашкаливать (на каждый маленький блочок данных будет лепиться бОльший по размеру pkcs7-контейнер, да еще и в base64). Глупость какая-то выходит, если честно...
Кому имеет смысл задавать вопросы, например, о совместимости (может ли прийти от ЦБ файл с ЭП в старом формате) - Вам или ЦБ?
Еще вопрос - а ком-объекты еще поддерживаются или нет? Не нашел их после установки Вашего СКЗИ.

4

Re: Формат подписи для обмена с ЦБ

PKCS7 выбран для совместимости между различными СКЗИ по формату ЭП.
По формату УФЭБС вопросы лучше адресовать ЦБ.
Ком объект поддерживается, также есть интерфейс к .Net и Java. SDK необходимо запрашивать в ЦБ.

5

Re: Формат подписи для обмена с ЦБ

Да я не к тому писал, что PKCS7 плохо, как раз стандарт - это хорошо, а к тому, что внедрение такого количества полноформатных подписей в небольшие блоки xml - попросту неразумно. Ну да ладно, ЦБ виднее:) Тогда остальные вопросы по форматам уже будут к ЦБ.
Интерфейсов к джаве и дотнету, честно говоря, в Вашем SDK я не обнаружил. Только несколько сишных примеров. Возможно, у меня какой-то усеченный вариант.

6

Re: Формат подписи для обмена с ЦБ

.Net  и Java идут отдельными самостоятельными  дистрибутивами. Надо спрашивать в ЦБ, если отдадут.

7

Re: Формат подписи для обмена с ЦБ

Ясно, спасибо большое за ответы!

8

Re: Формат подписи для обмена с ЦБ

И снова здравствуйте,
еще вопросик возник, вдруг подскажете:
1. формируем подпись средствами Сигнатуры через стандартный Win Crypt API, с нужным алгоритмом хэширования (гост 2012), выкинув из контейнера сертификаты подписанта и оставив только signer info (серийник и сабжект издателя), как требует ЦБ
2. Проверяем ее средствами того же Win Crypt API (подсунув обратно сертификат подписанта) - получаем ошибку "Параметр задан неверно".
3. Проверяем ту же подпись утилитой командной строки - всё чудесно проверяет, выдает ОК
4. Берем пример подписи ЦБ - имеем то же "параметр задан неверно"
5. Меняем данные перед проверкой - получаем честную ошибку "неверное значение хэша" (то есть практически вся криптография отработала - до сверки хэша включительно)
6. Контейнер PCKS7 также разбирается на ура - выдается и список подписантов, и алгоритмы, и прочее

Собственно, вопрос по п.2 и 4 - с чем может быть связано? Ровно тем же кодом подписи от крипто-про, випнета и прочего проверяются без проблем.

9

Re: Формат подписи для обмена с ЦБ

А какой у Вас провайдер и его версия?

10

Re: Формат подписи для обмена с ЦБ

А как корректнее определить версию? По какой-то из dll? По реестру?
Я тоже грешил на то, что версия старовата - но командный утиль наверняка использует ровно то же ядро, и ему всё нравится.

11

Re: Формат подписи для обмена с ЦБ

5.0.332.0    18:33:48   04.07.2016  C:\Windows\system32\scrypt.dll
  5.0.332.0    19:27:52   04.07.2016  C:\Windows\system32\spki.dll
  5.0.332.0    19:27:52   04.07.2016  C:\Windows\system32\spkissl.dll
  5.0.332.0    19:27:54   04.07.2016  C:\Windows\system32\spki1.dll
  5.0.332.0    19:28:34   04.07.2016  C:\Windows\system32\spkicom.dll
  5.0.332.0    19:28:02   04.07.2016  C:\Windows\system32\scertui.dll
  5.0.332.0    19:18:02   04.07.2016  C:\Windows\system32\vcertmsg.dll
   0.14.6.0    11:02:00   28.01.2014  C:\Windows\system32\intl8.dll
    1.8.1.2    18:46:34   27.06.2014  C:\Windows\system32\gdbm8.dll
   1.13.0.0    11:02:00   28.01.2014  C:\Windows\system32\iconv8.dll
  5.0.340.0    20:17:10   09.11.2016  C:\Program Files\Validata\VDCSP\hashfile.exe
  5.0.269.1    15:07:38   26.04.2016  C:\Program Files\Validata\VDCSP\vdcspe.dll
  5.0.342.0    12:03:26   07.11.2016  C:\Program Files\Validata\VDCSP\vdkeys16.dll
  5.0.342.0    12:03:28   07.11.2016  C:\Program Files\Validata\VDCSP\vdkeys17.dll
  5.0.341.0    12:28:20   03.11.2016  C:\Program Files\MDPREI\spki\spki1utl.exe

Вот в слегка подрезанном виде то, что выдает Ваш утиль. Как я понимаю, некой общей версии провайдера нет, но таковой можно считать 5.0.332

12

Re: Формат подписи для обмена с ЦБ

Поставьте модуль "СКЗИ СКАД Сигнатура TLS - интеграция с ОС" по умолчанию он не ставится.
Через панель управления -> Установка удаление программ  -> СКЗИ СКАД Сигнатура -> изменить

13

Re: Формат подписи для обмена с ЦБ

Не помогло:(
Ну и главное - что утиль же проверяет. Может, надо не добавлять фичу, а снести и переставить заново? Или это не играет роли?

14

Re: Формат подписи для обмена с ЦБ

Возможно поможет перезагрузка. А другие СКЗИ на машине есть?

15

Re: Формат подписи для обмена с ЦБ

Других СКЗИ нет (до сигнатуры, возможно, стояла криптопро). После добавления фичи - перезагружали, естественно.
А можно тогда чуток по-другому вопрос переформулировать: раз Ваши предположения сразу идут в сторону установки того или этого - Вы уже сталкивались именно с такой ошибкой у других клиентов/партнеров? Просто я не вижу очевидной связи между, например, TLS и проверкой ЭП (разве что кроме возможной попытки сигнатуры выйти в сеть и получить свежий CRL).
Чтобы знать, куда копать.
Ну и смущает, что утилита прекрасно проверяет и НЕ выдает ошибки.

16

Re: Формат подписи для обмена с ЦБ

Просто Вы используете Win Crypt API а для этого нужна интеграция с ОС, фича "СКЗИ СКАД Сигнатура TLS - интеграция с ОС" устанавливает поддержку TLS и интеграцию с ОС. Утилита же (spki1utl.exe), работает без Win Crypt API. Кстати, а какой утилитой Вы пользовались spki1utl.exe или testcsp.exe?

17

Re: Формат подписи для обмена с ЦБ

Первой (spki1utl.exe)

18

Re: Формат подписи для обмена с ЦБ

testcsp.exe использует  Win Crypt API, попробуйте с ее помощью

19

Re: Формат подписи для обмена с ЦБ

Этот второй утиль, видимо, только для очень упорных, судя по количеству параметров smile

CryptGetProvParam(129) failed: 80090011
Name: "Validata GOST R 34.10-2012 CSP" Type: 80 SC: 0 Version: 5.0.332.0
Operation started at: Wed Aug 02 13:38:46 2017
CertFindCertificateInStore("MY") failed: 80092004
CertFindCertificateInStore("TrustedPeople") failed: 80092004
CertFindCertificateInStore("AddressBook") failed: 80092004

Operation result: [80092004]:Объект или свойство не найдено.

При этом, сертификат подписанта передается ему через параметр -my в виде файла -cer. Он же есть и в AddressBook (который "другие пользователи"). Проходит проверку по цепочке, если это важно.

20

Re: Формат подписи для обмена с ЦБ

А CRL там есть?

21

Re: Формат подписи для обмена с ЦБ

Так Win CryptAPI по умолчанию CRL не проверяет - для этого отдельно уже вызывается функция CertGetCertificateChain построения цепочки с кучей доп. флажков (искать ли CRL в онлайне, до какого места цепочки проверять и т.д.), без явной настройки которых она как сферический конь в вакууме.
Ну и что-то мне подсказывает, что результат в этом случае имел бы хоть какое-то упоминание невозможности построить цепочку (это отдельные коды ошибок CryptAPI).
Но в любом случае - поглядим.

22

Re: Формат подписи для обмена с ЦБ

Если справочник сертификатов у Вас запускается, попробуйте Сервис->Экспортировать сертификаты в системное хранилище. Все будет скопировано в MS хранилище.

23

Re: Формат подписи для обмена с ЦБ

После экспорта справочников в хранилище винды (включая CRL) - Ваш утиль что писал, то и пишет, а вот наш код вроде как побежал дальше (и споткнулся чуть позже), что уже прогресс. И да, перед этим пришлось выполнить следующие шаманские действия: переставить полностью (сразу с опцией TLS) СКАД, экспортировать серты в систему и открыть уже экспортированный сертификат подписанта на просмотр через сигнатуру(?!).
В общем, огромное спасибо за наводку, но лучше бы Ваш СКЗИ давал чуть менее завуалированные сообщения о причинах ошибок:)

24

Re: Формат подписи для обмена с ЦБ

Могу предложить использовать SDK СКАД Сигнатура, а не  Win CryptAPI,  тогда все станет менее завуалировано (можно получить более подробные сообщения об ошибках и тд) да и проще будет.
smile