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

Как устроена криптография ГОСТ в электронных документах

Электронная подпись и зашифрованный документ — это не просто байты, обработанные алгоритмом ГОСТ. Для обмена между разными программами необходим согласованный формат криптографического сообщения. В нём записано, что именно подписано, каким алгоритмом вычислялся хэш, чей сертификат следует использовать, как получателю получить сеансовый ключ и как восстановить исходный документ.

Таким форматом является CMS (Cryptographic Message Syntax). Он используется при обмене подписанными файлами, в электронной почте S/MIME, в системах электронного документооборота и в некоторых архивных форматах. CMS определяет структуру сообщения; ГОСТ определяет применяемые криптографические операции и идентификаторы алгоритмов.

Маршрут чтения

Статья Что станет понятно
Что такое CMS и как устроен контейнер Чем отличаются подпись, шифрование, MAC и отсоединённое содержимое
Исторический профиль ГОСТ — RFC 4490 Как описывались ГОСТ 2001, ГОСТ94, ГОСТ 28147 и CryptoPro-профили
ГОСТ 2012 и проект рекомендаций ТК26 Как появились «Стрибог», ГОСТ Р 34.10-2012 и новые параметры CMS
Подписанные сообщения Что реально проверяет электронная подпись, как читать SignerInfo
Зашифрованные сообщения и управление ключами Что такое CEK, KEK, VKO, UKM и почему важно шифрование ключей
ASN.1, DER, OID и диагностика Как прочитать структуру .p7s/.p7m без знания внутреннего двоичного формата
S/MIME и совместимость Почему одинаковый ГОСТ ещё не означает совместимость приложений
Практическая проверка и типовые ошибки Как безопасно исследовать полученный контейнер в НАЙС.ОС

Какие документы изучаем

RFC 4490 — опубликованный в мае 2006 года профиль использования ГОСТ 28147-89, ГОСТ Р 34.11-94 и ГОСТ Р 34.10-94/2001 в CMS. Он особенно важен для разбора исторических форматов.

Проект рекомендаций ТК26 «Использование алгоритмов ГОСТ … в криптографических сообщениях формата CMS» — первая редакция, апрель 2014 года, 37 страниц. В ней подробно рассматриваются ГОСТ Р 34.10-2012, ГОСТ Р 34.11-2012, VKO и S/MIME. Это именно проект, а не подтверждённая действующая окончательная редакция рекомендаций: в тексте указан предел актуальности проекта — январь 2015 года.

Для понимания самого формата полезен RFC 5652, а для современных ГОСТ-сертификатов — RFC 9215. Это разные уровни спецификации: общий синтаксис CMS, криптографический профиль и формат сертификатов.

Связь с НАЙС.ОС

В НАЙС.ОС CMS обрабатывается на уровне пользовательских криптографических библиотек и программ: OpenSSL, GnuPG/GPGSM, libksba и связанной с ними криптографии. Встроенные ГОСТ-алгоритмы ядра и LUKS2 — другая подсистема. Наличие «Кузнечика» в Kernel Crypto API само по себе не означает поддержку любого CMS-профиля в openssl cms.

Практические команды создания CMS находятся в разделе OpenSSL: CMS и S/MIME, разбор структур и сертификатов — в libksba: CMS, работа с gpgsm — в GnuPG: X.509 и CMS. В этой главе сосредоточены теория, чтение стандарта и понимание совместимости, чтобы не дублировать практические руководства.

Карта знаний: от математического алгоритма к защищённому документу

[Кузнечик / Магма] ──────┐
                        ├── [режим + ключ] ──> EnvelopedData ──> .p7m / письмо
[Стрибог] ──> [ГОСТ Р 34.10] ──────────────> SignedData ─────> .p7s / подпись
      │                       ↑                      │
      └──> [KDF / VKO] ───────┘                      ├── X.509 + цепочка + CRL/OCSP
                │                                   └── атрибуты + OID + DER
                └──> [обёртывание CEK]

ASN.1 / DER ──> байтовая совместимость;
S/MIME ───────> почтовая оболочка CMS;
RFC и Р 1323565.1.025-2019 ──> правила профиля;
ПО НАЙС.ОС ──> реализация и испытания, а не источник математического определения.

Что не следует считать эквивалентными понятиями

Одинаковое название «ГОСТ» ещё не означает одинаковый AlgorithmIdentifier, набор параметров, порядок байтов, профиль сертификата и способ создания RecipientInfo. Работающий шифр в Crypto API ядра не даёт автоматической поддержки CMS в OpenSSL. Наличие SignedData не доказывает юридической значимости подписи.

Выберите цель

Задача читателя Теоретический материал Практика НАЙС.ОС
Проверить подпись .p7s SignedData, проверка доверия OpenSSL CMS, GPGSM
Расшифровать документ .p7m EnvelopedData, согласование ключей OpenSSL CMS, libksba
Сопоставить две реализации OID и DER, матрица совместимости Обмен с КриптоПро
Понять риск подмены документа модель угроз, SignedData сценарии контроля
Разобрать почтовое письмо S/MIME, CMS OpenSSL S/MIME
Выбрать нормативную базу история RFC 4490, ТК26 2014 Рекомендации 2019

Алгоритмы, форматы и протоколы — три плоскости

Математика. Стрибог формирует хэш, ГОСТ Р 34.10-2012 — подпись, Кузнечик — блочное шифрование, VKO — общий секрет. Каждый примитив имеет отдельный набор параметров и собственный первоисточник.

Контейнер. CMS хранит идентификаторы, получателей, подписантов и байтовое представление объектов. Его базовый синтаксис закреплён в RFC 5652, дополнительный authenticated-envelope — в RFC 5083.

Прикладной профиль. RFC 4490 описывает исторические комбинации ГОСТ в CMS (документ Standards Track). Р 1323565.1.025-2019 является действующими российскими рекомендациями по форматам защищённых сообщений. RFC 9215 определяет форматные правила ГОСТ-2012 для X.509, а не общую схему CMS.

Два маршрута изучения

Администратору: CMS → ASN.1 и OID → диагностика → проверка доверия → руководство OpenSSL.

Разработчику и интегратору: источники профилей → SignedData → EnvelopedData → S/MIME → матрица совместимости → модель угроз.

Правила сопровождения этой главы

  1. Описание формата и его требований хранится здесь, описание шифра — на странице самого алгоритма, а команды — в руководстве программы.
  2. Каждая спецификация сопровождается номером RFC или обозначением ГОСТ/рекомендаций; для проекта документа всегда явно указывается статус «проект».
  3. В примерах различаются синтаксический разбор, криптографическая проверка, проверка цепочки доверия и организационное признание подписи.
  4. Возможность конкретного установленного пакета следует брать из матрицы испытаний НАЙС.ОС, а не выводить из наличия OID.

Маршрут чтения: Устройство CMS → Подписи → Шифрование → Матрица интеграции