Перейти к содержанию

CMS и ГОСТ: как устроена подписанная электронная документация

CMS (Cryptographic Message Syntax) — универсальный формат для хранения электронных подписей и криптографически защищённых сообщений. Он применяется в архивах, документообороте, обмене подписанными файлами и других системах с сертификатами X.509.

Смысл CMS — сохранить вместе с подписью необходимые для проверки реквизиты: алгоритм, сведения о подписанте, иногда сам сертификат и подписываемое содержимое. libksba в НАЙС.ОС обрабатывает структуру CMS, а криптографические алгоритмы ГОСТ используются при проверке подписи и целостности.

Что входит в подпись

Обычно структура SignedData содержит:

  1. Информацию об алгоритмах хэширования.
  2. Подписываемое содержимое либо указание на отдельный файл.
  3. Сертификаты подписантов (если они включены).
  4. Данные SignerInfo: идентификатор подписанта, атрибуты и само значение подписи.
  5. Дополнительные сведения, включая подтверждения времени и сведения об отзыве — если они предусмотрены профилем электронного документооборота.

Присоединённая подпись содержит исходный документ внутри CMS. Отсоединённая подпись хранит только подпись и атрибуты: для проверки нужен отдельный исходный документ, совпадающий побайтно с подписанным.

Как ГОСТ участвует в проверке

Сначала определяется схема подписи: ГОСТ Р 34.10-2001 или 2012/256/512. Затем вычисляется указанный хэш, например Стрибог-256. В сертификате извлекается публичный ключ, определяется набор кривой и производится криптографическая проверка значения подписи.

У ГОСТ-подписей важно правильно разобрать саму двоичную подпись. В X.509 она записывается в виде двух компонентов фиксированной длины, расположенных последовательно (s || r). Внутреннему криптографическому механизму нужны разделённые компоненты r и s. libksba выполняет требуемое преобразование.

Почему иногда CMS успешно разбирается, но подпись не проходит проверку

  • Исходный документ изменился хотя бы на один байт.
  • Пользователь передал не тот файл к отсоединённой подписи.
  • Ошибочно выбран сертификат или публичный ключ.
  • Программа не поддерживает профиль ГОСТ, набор параметров или CMS-атрибуты.
  • В цепочке отсутствует промежуточный сертификат.
  • Истёк срок действия сертификата либо отсутствует требуемое подтверждение статуса отзыва.

Проверка криптографической подписи и доверие к подписанту — разные этапы. Даже математически правильная подпись не доказывает, что удостоверяющему центру следует доверять.

Практическая проверка

Если файл подготовлен в формате CMS и используется OpenSSL, см. руководство по CMS и S/MIME. Там описаны команды создания и проверки сообщения. Не меняйте содержимое исходного документа во время переноса между программами: автоматическое изменение кодировки, переводов строк или метаданных может нарушить проверку.

Для задач GnuPG с сертификатами X.509 используйте инструмент gpgsm. Команда диагностики:

gpgsm --version
gpgsm --list-keys

Для конкретного действия выбирайте инструкции используемого профиля документооборота; команды OpenPGP (gpg --sign) не эквивалентны подписанию CMS.

Продолжение

Сертификаты X.509 · Совместимость · Диагностика.