
Для компаний с государственными контрактами, организаций под надзором ФСТЭК и субъектов критической информационной инфраструктуры (КИИ) ГОСТ-криптография — это рабочая необходимость.
Федеральный закон № 149-ФЗ «Об информации», приказы ФСТЭК и требования по импортозамещению последовательно сужают пространство для западных алгоритмов в государственных и критических системах. Это затрагивает ИТ, телекоммуникации, энергетику и финансовый сектор.
Проблема не в самих алгоритмах. ГОСТ-стек хорошо специфицирован и охватывает все необходимые примитивы: шифрование, хеширование, электронную подпись, согласование ключей. Сложность в интеграции: ГОСТ затрагивает весь стек сразу, от TLS-профиля и форматов сертификатов до хранения ключей и клиентских приложений. Большинство неожиданностей возникают не при изучении стандарта, а при столкновении с конкретной реализацией.
Разбираем весь стек: стандарты и OID-ы, механику шифрования, точки отказа при интеграции, нормативные требования с конкретными ссылками.
Главное
- Актуальный ГОСТ-стек — четыре стандарта. «Кузнечик» и «Магма» — шифрование, «Стрибог» — хеширование, ГОСТ Р 34.10-2012 — подпись и согласование ключей, ГОСТ Р 34.13-2015 — режимы работы включая CTR-ACPKM. Всё остальное — устаревшие версии или режимы этих четырёх.
- Асимметричная криптография в ГОСТ данные не шифрует. ГОСТ Р 34.10-2012 формирует подпись и вырабатывает общий ключ по VKO. Шифрование данных — всегда симметричное, «Кузнечиком».
- «Магма» — не для шифрования данных. 64-битный блок создаёт риск атаки SWEET32 при объёме ~32 ГБ на ключ. Область применения — имитовставка и Key Wrap внутри CMS.
- openssl-gost-engine и КриптоПро — для разных задач. openssl-gost-engine не является сертифицированным СКЗИ. Для аттестованных систем и работы с КЭП нужен сертифицированный стек.
- Класс СКЗИ определяет модель угроз, а не администратор. Установить ПО с сертификатом КС2 без выполнения организационных требований этого класса — значит классу не соответствовать.
- Лицензия ФСБ нужна при работе с клиентами. Использовать КриптоПро для внутренних нужд можно без лицензии. Встроить СКЗИ в продукт для клиентов или обслуживать СКЗИ у клиентов — лицензируемая деятельность по ПП РФ № 313.
- ГОСТ затрагивает весь стек. Меняются TLS-профиль, форматы сертификатов, хранение ключей, клиентские приложения. Жизненный цикл КЭП требует отдельных процессов — сертификат действует год.
- Постквантовая миграция потребует переработки крипто-слоя. Российские постквантовые стандарты ожидаются в 2026–2027 годах. Проектируйте крипто-слой с абстракцией над алгоритмом — иначе миграция затронет всю кодовую базу.
Что такое ГОСТ-алгоритмы
ГОСТ-алгоритмы — серия криптографических стандартов, утверждённых Федеральным агентством по техническому регулированию и метрологии (Росстандарт). Каждый стандарт определяет математическую конструкцию алгоритма, параметры и допустимые режимы работы — так, чтобы реализации от разных производителей давали идентичный результат и могли взаимодействовать без потери безопасности.
В отличие от международных стандартов NIST (AES, SHA) и RSA, ГОСТ-алгоритмы построены на независимых математических основаниях и прошли отдельный криптоанализ. Для государственных информационных систем, объектов критической инфраструктуры и организаций под надзором ФСБ и ФСТЭК применение ГОСТ-криптографии является нормативным требованием.
Ключевые отличия от западных стандартов
| Характеристика | ГОСТ | AES/RSA |
|---|---|---|
| Происхождение | Российский государственный стандарт (Росстандарт) | Международные стандарты (NIST, ISO) |
| Длина ключа | 256 бит — фиксировано | 128–256 бит — зависит от алгоритма |
| Математическая основа | Эллиптические кривые с российскими параметрами кривых | Зависит от алгоритма: блочные сети, факторизация, ECDH |
| Асимметричное шифрование | Данные напрямую не шифруются — только подпись и выработка общего ключа (VKO) | RSA шифрует данные напрямую |
| Аппаратное ускорение | Только в специализированных СКЗИ | AES-NI в каждом Intel/AMD с 2010 года |
| Требование в РФ | Обязателен для госсектора и объектов КИИ | Допускается в коммерческих системах |
| Сертификация | ФСБ (криптография), ФСТЭК (техническая защита) | NIST, BSI и др. |
| Скорость программной реализации | Сопоставима с AES при отсутствии AES-NI | Выше за счёт аппаратного ускорения |
| Международная стандартизация | RFC 7801, 8891, 6986, 7091; «Стрибог» в ISO/IEC 10118-3 | Основа большинства международных протоколов |
Как устроены ГОСТ-алгоритмы: четыре стандарта и их OID-ы
OID (Object Identifier) — числовой идентификатор вида 1.2.643.7.1.1.5.2, который криптобиблиотеки и сертификаты используют для обозначения алгоритма. Когда OpenSSL встречает в сертификате незнакомый OID, он не может его обработать — отсюда unknown signature algorithm при вызове openssl verify без ГОСТ-движка. OID-ы нужно знать, когда разбираешь совместимость или отлаживаешь парсинг.
Весь актуальный ГОСТ-стек строится на четырёх стандартах — остальное либо устаревшие версии, либо режимы работы этих четырёх.
ГОСТ Р 34.12-2015: «Кузнечик» и «Магма»
ГОСТ Р 34.12-2015 — национальный стандарт Российской Федерации, устанавливающий алгоритмы двух блочных симметричных шифров: «Кузнечик» с размером блока 128 бит и «Магма» с размером блока 64 бита. Стандарт фиксирует математические конструкции, параметры и допустимые режимы работы, чтобы реализации от разных производителей СКЗИ давали идентичный результат и могли взаимодействовать без потери криптографической стойкости.
Кузнечик (RFC 7801, OID 1.2.643.7.1.1.5.2) — основной шифр для защиты данных. 128-битный блок, 256-битный ключ, SP-сеть (Substitution-Permutation) с 10 раундами.
Архитектура та же, что у AES: нелинейная замена байт плюс линейное перемешивание на каждом раунде. Принципиальное отличие от AES — отсутствие аппаратного ускорения на массовых процессорах. AES-NI встроен в каждый Intel/AMD с 2010 года, для «Кузнечика» аналог есть только в специализированных СКЗИ. На больших объёмах данных разрыв в производительности становится заметным.
Магма (RFC 8891, OID 1.2.643.7.1.1.5.1) — ГГОСТ 28147-89 с зафиксированными таблицами подстановок. 64-битный блок, 256-битный ключ, 32 раунда.
Размер блока определяет границу безопасного применения. При шифровании порядка 2³² блоков одним ключом (~32 ГБ) вероятность того, что два разных блока открытого текста дадут одинаковый шифртекст, становится статистически значимой (парадокс дней рождений и атака «дней рождений»). Наблюдатель, накапливающий зашифрованный трафик, может использовать эти совпадения для восстановления данных (атака SWEET32).
Поэтому «Магма» не шифрует данные. Её область применения — операции с заведомо малыми объёмами: имитовставка (выработка кода аутентификации сообщения, который подтверждает целостность и подлинность данных) и упаковка ключа (Key Wrap, шифрование одного ключа другим) внутри CMS.
Что такое SP-сеть?
SP-сеть (Substitution-Permutation Network) — криптографическая структура, используемая в блочных шифрах, которая состоит из чередующихся операций подстановки (S-блоки) и перестановки (P-блоки). Подстановка заменяет биты входных данных согласно таблице замен, а перестановка переставляет биты для перемешивания данных. Такая архитектура обеспечивает криптографическую стойкость и используется в известных алгоритмах, таких как AES (Advanced Encryption Standard).
Что такое AES?
AES (Advanced Encryption Standard) — современный стандарт симметричного шифрования, принятый в качестве федерального стандарта США в 2001 году. Работает с блоками данных размером 128 бит и поддерживает ключи длиной 128, 192 или 256 бит. AES использует архитектуру SP-сети с чередованием операций подстановки и перестановки, обеспечивая высокую криптографическую стойкость и широко применяется в защите информации по всему миру.
Что такое имитовставка?
Имитовставка — криптографический код аутентификации сообщения (MAC), который добавляется к зашифрованным данным для проверки их целостности и подтверждения источника. Вычисляется на основе открытого текста и секретного ключа, позволяя получателю убедиться, что сообщение не было изменено и отправлено легитимным источником. Используется в режимах шифрования с аутентификацией, таких как GCM.
Что такое атака «дней рождений» (Birthday Attack)?
Атака «дней рождений» (Birthday Attack) — криптографическая атака, основанная на парадоксе дней рождений, которая позволяет найти коллизии (два разных входа с одинаковым выходом) в хеш-функциях и блочных шифрах значительно быстрее, чем полный перебор. Для хеш-функции с выходом n бит требуется примерно 2^(n/2) попыток вместо 2^n. Например, для 128-битного хеша нужно ~2⁶⁴ попыток вместо 2¹²⁸. Атака демонстрирует, что размер выхода криптографической функции должен быть достаточно большим для обеспечения практической безопасности.
Парадокс дней рождений
Парадокс дней рождений — вероятностный феномен, при котором в группе всего из 23 человек вероятность того, что у двух людей совпадает день рождения, превышает 50%. Это кажется парадоксальным, так как 23 намного меньше, чем 365 дней в году. Математически это объясняется тем, что количество возможных пар растёт квадратично (n(n-1)/2), а не линейно. Этот принцип применяется в криптографии для анализа вероятности коллизий.
Что такое Sweet32?
Sweet32 — практическая криптографическая атака на блочные шифры с размером блока 64 бита (например, 3DES, Blowfish), опубликованная в 2016 году. Атака использует парадокс дней рождения для восстановления открытого текста после обработки примерно 2³² блоков данных в одном сеансе. Демонстрирует, что 64-битные блоки недостаточны для современных требований безопасности и рекомендует переход на 128-битные шифры.
ГОСТ Р 34.11-2012 «Стрибог»: хеширование
ГОСТ Р 34.11-2012 «Стрибог» (RFC 6986) — хеш-функция. OID 256-битного варианта — 1.2.643.7.1.1.2.2, 512-битного — 1.2.643.7.1.1.2.3. В 2018 году «Стрибог» вошёл в ISO/IEC 10118-3 — это единственный российский криптографический алгоритм с международной стандартизацией на уровне ISO.
256-битный вариант закрывает большинство задач. 512-битный применяется там, где данные должны оставаться защищёнными через 15–20 лет: долгосрочные архивы, юридически значимые документы.
ГОСТ Р 34.10-2012: электронная подпись и выработка ключа
ГОСТ Р 34.10-2012 (RFC 7091) — алгоритм электронной подписи на эллиптических кривых, используемый во всех российских криптографических профилях. OID 256-битного варианта — 1.2.643.7.1.1.1.1, 512-битного — 1.2.643.7.1.1.1.2.
Алгоритм на эллиптических кривых, используемый во всех российских криптографических профилях. По классу — родственник ECDSA, но с другими параметрами кривых, стандартом и кодированием. Приравнивать их напрямую нельзя.
Ключевое архитектурное отличие от RSA: асимметричная криптография в российской модели данные не шифрует. Она решает две задачи — формирование подписи и выработка общего ключа по протоколу VKO (Выработка Ключа Общего). VKO — российский аналог Diffie-Hellman: обе стороны обмениваются открытыми частями и независимо вычисляют один и тот же секрет, не передавая его по каналу. Шифрование данных всегда симметричное — «Кузнечиком».
Что такое VKO (Выработка Ключа Общего)?
VKO (Выработка Ключа Общего) — процесс криптографического согласования общего секретного ключа между двумя или более сторонами через открытый канал связи без предварительного обмена секретами. Используется в протоколах обмена ключами, таких как Diffie-Hellman или ECDH, для установления безопасной сессии. Каждая сторона использует свой приватный ключ и открытые параметры другой стороны для вычисления одного и того же общего ключа.
Что такое Diffie-Hellman?
Diffie-Hellman — криптографический протокол выработки общего ключа, разработанный в 1976 году. Две стороны выбирают простое число $ p $ и первообразный корень $ g $, затем каждая генерирует приватный ключ и вычисляет открытый ключ как $ g^{a} \bmod p $. Обменявшись открытыми ключами, обе стороны вычисляют общий секрет как $ (g^{b})^{a} \bmod p = (g^{a})^{b} \bmod p $. Безопасность основана на сложности задачи дискретного логарифма.
Что такое ECDSA?
ECDSA (Elliptic Curve Digital Signature Algorithm) — алгоритм цифровой подписи на основе эллиптических кривых. Использует пару ключей: приватный ключ для создания подписи и открытый ключ для её проверки. Подпись состоит из двух компонентов $ (r, s) $ и вычисляется на основе хеша сообщения и приватного ключа. ECDSA обеспечивает аутентификацию и неотказуемость при меньшем размере ключа, чем RSA (256-битный ключ ECDSA эквивалентен 3072-битному RSA). Используется в Bitcoin, Ethereum и многих других криптографических системах.
CTR-ACPKM: механизм без западного аналога
ГОСТ Р 34.13-2015 вводит режим CTR-ACPKM (OID 1.2.643.7.1.1.4.2 для «Кузнечика», 1.2.643.7.1.1.4.3 для «Магмы»). Он решает проблему, которую стандартный CTR не решает.
CTR шифрует последовательный счётчик и накладывает результат на данные по XOR. Чем дольше работает один ключ, тем больше статистики накапливает наблюдатель — и тем выше риск атаки. ACPKM (Acyclic Pseudo-random Key Modification) периодически перегенерирует внутренние раундовые ключи прямо в процессе шифрования. Для прикладного кода это невидимо: ключ в API не меняется, поведение интерфейса не меняется. Меняется только внутреннее состояние шифра.
Прямого аналога в западных стандартах нет. Конкретные лимиты данных на ключ и обязательность ACPKM определяет профиль протокола: PKCS#5/PBES2 — RFC 9337, TLS 1.2 — RFC 9189, TLS 1.3 — RFC 9367.
Что такое CTR?
CTR (Counter Mode) — режим работы блочного шифра, в котором каждый блок открытого текста шифруется путём XOR с результатом шифрования счётчика. На каждой итерации счётчик инкрементируется, что позволяет преобразовать блочный шифр в поточный. Основное преимущество — параллелизуемость (все блоки можно шифровать одновременно) и отсутствие необходимости в дополнении данных. CTR обеспечивает конфиденциальность, но не аутентификацию, поэтому часто используется в комбинации с кодами аутентификации (например, в режиме GCM).
Как работает ГОСТ-шифрование изнутри

ГОСТ использует гибридную схему. Стороны вырабатывают общий симметричный ключ по открытому каналу через протокол VKO — российский аналог Diffie-Hellman на эллиптических кривых. Данные шифруются этим симметричным ключом («Кузнечиком»), но не напрямую: сначала симметричный ключ упаковывается в отдельный зашифрованный контейнер — Key Wrap. Получатель сначала распаковывает ключ, затем расшифровывает данные.
Всё это происходит внутри формата CMS (Cryptographic Message Syntax) — стандартной ASN.1-структуры для зашифрованных и подписанных сообщений (RFC 5652). CMS — это то, что СКЗИ фактически передаёт при шифровании файлов и почты: не просто шифртекст, а контейнер, в котором упакованы зашифрованный ключ, параметры алгоритма и сами данные.
Схема шифрования в формате ГОСТ

Отправитель:
- Генерирует эфемерную пару ключей (
ec_ephemeral_priv,ec_ephemeral_pub). «Эфемерная» — одноразовая: создаётся для одного сообщения и уничтожается после использования. При реальном уничтожении это даёт прямую секретность (forward secrecy): если завтра утечёт основной ключ, вчерашние сообщения расшифровать не получится. - Генерирует случайный CEK (Content Encryption Key, 256 бит) — симметричный ключ для шифрования данных.
- Генерирует UKM (User Keying Material, 8 байт) — случайная соль, которая делает каждое соединение уникальным даже при одинаковых ключах.
- Вырабатывает общий секрет по протоколу VKO:
Z = VKO(ec_ephemeral_priv, recipient_pub_key, UKM). Обе стороны независимо вычисляют одну и ту же точку на эллиптической кривой, не передавая секрет по каналу. - Выводит ключ шифрования ключа через KDF:
KEK = HKDF-Стрибог(Z, UKM, ...)KDF (функция выработки ключа) превращает сырой общий секретZв ключ нужной длины. KEK (Key Encryption Key) используется для шифрования CEK. - Упаковывает CEK:
WrappedCEK = Магма-CBC-MAC(CEK) + Магма-ECB(CEK)наKEKCEK шифруется на KEK алгоритмом «Магма» с добавлением имитовставки для контроля целостности. - Шифрует данные:
CipherText = Кузнечик-CTR(CEK, IV, plaintext) - Формирует и отправляет CMS
EnvelopedData:{ec_ephemeral_pub, UKM, WrappedCEK, IV, CipherText} ec_ephemeral_privуничтожается.
Получатель:
- Вычисляет тот же общий секрет:
Z = VKO(recipient_priv_key, ec_ephemeral_pub, UKM) - Выводит тот же KEK через KDF.
- Распаковывает CEK (Key Unwrap): проверяет имитовставку, расшифровывает CEK на KEK.
- Расшифровывает данные на CEK.
Что такое CEK (Content Encryption Key)?
CEK (Content Encryption Key) — ключ шифрования содержимого, используемый для прямого шифрования данных или сообщений. Это симметричный ключ, который применяется к открытому тексту для получения зашифрованного текста. CEK обычно генерируется случайно для каждого сообщения и затем сам шифруется с помощью KEK (ключа шифрования ключей) для безопасной передачи или хранения. Использование отдельного CEK для каждого сообщения повышает безопасность системы.
Что такое UKM (User Keying Material)?
UKM (User Keying Material) — пользовательский материал для выработки ключей, случайное значение (обычно 8-16 байт), которое используется в процессе согласования общего ключа для повышения безопасности. UKM передаётся в открытом виде и служит входным параметром для функции выработки ключа (KDF), обеспечивая уникальность результата даже при использовании одних и тех же приватных ключей. Применяется в протоколах VKO (например, в ГОСТ 34.10-2012).
Что такое KDF (функция выработки ключа)?
KDF (Key Derivation Function) — криптографическая функция, которая преобразует исходный материал (пароль, общий секрет или случайные данные) в один или несколько криптографических ключей нужной длины. KDF применяет криптографические примитивы (хеш-функции, HMAC) для получения стойкого ключа с хорошими статистическими свойствами. Используется для выработки ключей шифрования из результата протокола Diffie-Hellman, расширения паролей в ключи и других целей. Примеры: PBKDF2, bcrypt, Argon2.
Что такое KEK (Key Encryption Key)?
KEK (Key Encryption Key) — ключ шифрования ключей, используемый для защиты других ключей (например, CEK). KEK обычно является долгоживущим ключом, который хранится защищённо и используется только для шифрования/расшифрования других ключей, а не самих данных. Такой двухуровневый подход позволяет безопасно передавать и хранить рабочие ключи. KEK часто хранится в аппаратных модулях безопасности (HSM) или защищённых хранилищах.
Три момента, которые часто упускают
- VKO — это не просто ECDH. В стандартном ECDH стороны перемножают ключи. В VKO дополнительно учитываются UKM и идентификатор алгоритма — это влияет на итоговый общий секрет. КриптоПро и ViPNet исторически интерпретировали некоторые детали по-разному, отсюда проблемы совместимости при межсистемном взаимодействии.
- Key Wrap через «Магму» обязателен по стандарту — даже если основные данные шифруются «Кузнечиком». Старый ГОСТ Key Wrap описан в RFC 4357; для сценариев с PBES2/PBKDF2 — RFC 9337.
- UKM должен быть настоящим случайным материалом из ГПСЧ СКЗИ (аппаратный или программный генератор псевдослучайных чисел, сертифицированный ФСБ). Детерминированное значение или нули в UKM — схема формально работает, но теряет часть защитных свойств.
openssl-gost-engine: что работает, что нет
Для разработки и несертифицированных сценариев подходит openssl-gost-engine. Но здесь есть контекст, который обычно упускают в инструкциях.
ENGINE API устарел
OpenSSL поддерживает два способа подключить сторонние алгоритмы:
- Engine API — динамически загружаемый
.so-файл, регистрирующий реализации через устаревший внутренний интерфейс - Provider API — более изолированная архитектура, представленная в OpenSSL 3.0
OpenSSL 3.0 пометил Engine API как deprecated. gost-engine по-прежнему использует именно его — миграция на Provider API идёт (issue #496), но неспешно. В OpenSSL 4.0 ENGINE API уберут. Пока работает, но это нужно учитывать при планировании.
Поддержка по дистрибутивам
| Дистрибутив | Что делать |
|---|---|
| Astra Linux 1.8 | Пакет libgost-astra, есть и engine, и provider |
| РЕД ОС | openssl-gost-engine в дистрибутиве, включается через update-crypto-policies |
| Debian 12, Ubuntu 24.04 | Пакета нет, сборка из исходников |
| Ubuntu 22.04 | libengine-gost-openssl1.1 в репозитории, но не работает с системным OpenSSL 3 (разные ABI) — тоже сборка из исходников |
| Ubuntu 20.04 | libengine-gost-openssl1.1 работает |
Сборка (Debian 12 / Ubuntu 24.04)
# CMake >= 3.18 обязателен для OpenSSL 3.x
sudo apt install cmake libssl-dev git
git clone https://github.com/gost-engine/engine gost-engine
cd gost-engine
git submodule update --init
mkdir build && cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
cmake --build . --config Release
sudo cmake --install .Путь к .so непредсказуем — всегда проверяйте:
find /usr /lib /usr/local -name "gost.so" 2>/dev/nullНастройка openssl.cnf
Добавьте в начало файла:
openssl_conf = openssl_def
[openssl_def]
engines = engine_section
[engine_section]
gost = gost_section
[gost_section]
engine_id = gost
dynamic_path = /usr/lib/x86_64-linux-gnu/engines-3/gost.so
default_algorithms = ALLCRYPT_PARAMS, встречающийся в старых инструкциях — устаревший параметр для ГОСТ 28147-89, сейчас не нужен.
# Проверка что движок живой
openssl engine -t gost
# Актуальные имена cipher suites (они менялись между версиями движка)
openssl ciphers | tr ':' '\n' | grep -i gost
# GOST2012-KUZNYECHIK-KUZNYECHIKOMAC, GOST2012-MAGMA-MAGMAOMAC, ...Ключи и подпись
# paramset:A — параметры эллиптической кривой (конкретная кривая из стандарта).
# ГОСТ определяет несколько предопределённых наборов (A, B, C и ещё несколько),
# paramset:A — стандартный выбор для большинства задач.
openssl genpkey -algorithm gost2012_256 \
-pkeyopt paramset:A \
-out gost_private.pem
# Самоподписанный сертификат для тестов
openssl req -x509 -newkey gost2012_256 \
-pkeyopt paramset:A \
-nodes -keyout key.pem -out cert.pem \
-md_gost12_256 \
-subj "/C=RU/CN=test"
# Подпись и проверка
openssl dgst -md_gost12_256 -sign gost_private.pem \
-out signature.bin document.pdf
openssl dgst -md_gost12_256 -verify gost_public.pem \
-signature signature.bin document.pdfPython: PyGOST
from pygost.gost3412_2015 import GOST3412Grasshopper
from pygost.gost34112012 import GOST34112012256
h = GOST34112012256(b"hello, gost")
print(h.hexdigest())
key = bytes(range(32))
cipher = GOST3412Grasshopper(key)
encrypted = cipher.encrypt(bytes(16))API менялся между версиями 6.x и 7.x — проверяйте документацию при обновлении.
КриптоПро и сертифицированный стек
Когда нужна сертификация ФСБ — openssl-gost-engine не подходит. Нужны коммерческие средства криптографической защиты информации (СКЗИ): сертифицированные криптобиблиотеки и HSM-устройства.
КриптоПро CSP 5.0 — стандарт. Под Windows работает через CryptoAPI, под Linux — через собственный демон cprocspd. Есть версии для Astra Linux, Альт, РЕД ОС.
Конфигурация OpenSSL для КриптоПро:
[openssl_init]
engines = engine_section
[engine_section]
gost = gost_section
[gost_section]
engine_id = gost
dynamic_path = /opt/cprocsp/lib/amd64/cp_gost.so
default_algorithms = ALL
Хранение ключей
Ключи хранятся в /var/opt/cprocsp/keys/<username>/. Ключевой контейнер — это директория из шести файлов, а не один файл:
container_name.000/
├── header.key
├── masks.key
├── masks2.key
├── name.key
├── primary.key
└── primary2.keyViPNet CSP — альтернатива от ИнфоТеКС. На уровне PKCS#11 и CryptoAPI совместим с КриптоПро, но детали VKO реализованы немного иначе. При межсистемном взаимодействии (КриптоПро на одной стороне, ViPNet на другой) — проверяйте матрицу совместимости на tc26.ru перед выбором архитектуры. Там публикуются протоколы испытаний. Известен случай, когда Континент TLS Client 2 не распознавал КриптоПро CSP 5 как провайдера.
Где ломается интеграция

nginx и ГОСТ TLS
Долгое время ГОСТ-криптография в TLS была ограничена версией 1.2: RFC 9189 определяет наборы шифров (cipher suites) и механизмы согласования ключей именно для этого протокола. В 2022 году вышел RFC 9367, распространивший поддержку ГОСТ на TLS 1.3.
На практике разрыв между стандартом и реализацией остаётся значительным. Большинство сертифицированных СКЗИ по состоянию на 2026 год работают с TLS 1.2 — фактическая поддержка TLS 1.3 зависит от конкретного стека, версии криптобиблиотеки и браузера. Актуальный статус уточняйте у поставщика СКЗИ.
КриптоПро CSP 5.0 R2 поставляет патченный nginx (cpnginx):
ssl_certificate /etc/nginx/certs/server.crt;
ssl_certificate_key /etc/nginx/certs/server.key;
ssl_protocols TLSv1.2;
ssl_ciphers GOST2012-KUZNYECHIK-KUZNYECHIKOMAC:GOST2012-MAGMA-MAGMAOMAC:LEGACY-GOST2012-GOST8912-GOST8912;
ssl_prefer_server_ciphers on;Проблема с кешем сессий. Общий кеш TLS-сессий между воркерами не работает. Каждый воркер держит свой кеш — при балансировке между ними происходит полный handshake. Директива ssl_session_cache shared:SSL:10m; работает не так, как ожидается. Решения: включить ssl_session_tickets on; или вынести TLS-терминацию на выделенный шлюз (NGate, С-Терра, Континент TLS).
Второй вариант — поставить ГОСТ-шлюз перед обычным nginx. Он терминирует ГОСТ TLS, дальше идёт обычный HTTPS. Заодно решает проблему с session cache и убирает из nginx зависимость от СКЗИ.
Браузеры
Chromium и Firefox ГОСТ не поддерживают. Для пользовательского доступа к ГОСТ-сайтам нужен Яндекс Браузер или Chromium-GOST — open-source форк, есть Linux-сборки.
Важно разделять две разные задачи: ГОСТ TLS (защита соединения) и подпись документов в браузере. Для второго нужно расширение КриптоПро ЭЦП Browser Plugin — отдельный компонент, никак не связанный с TLS.
Docker
КриптоПро в контейнере требует конкретных флагов, без которых cprocspd не стартует:
docker run -d \
--privileged \
--security-opt seccomp=unconfined \
--tmpfs /run \
--tmpfs /run/lock \
-v /sys/fs/cgroup:/sys/fs/cgroup:ro \
my-cryptopro-image
--tmpfs /run и --tmpfs /run/lock обязательны — без них cprocspd не создаёт lock-файлы. Ключи монтируются через volume:
volumes:
- /var/opt/cprocsp/keys:/var/opt/cprocsp/keys:roЛицензия привязана к физическому хосту, а не к контейнеру. Пересоздание контейнера повторной активации не требует — смена хоста требует. Тестовая лицензия активируется автоматически на 3 месяца.
Если сертификация не нужна, проще использовать openssl-gost-engine в контейнере — без лицензионных ограничений. В репозитории gost-engine есть готовые Dockerfile для Debian и Alpine.
Сертификаты
ГОСТ-сертификаты формально являются X.509, но без ГОСТ-движка их не прочитать:
Signature Algorithm: GOST R 34.11-2012 with GOST R 34.10-2012 (256 bit)
OID: 1.2.643.7.1.1.3.2
Public Key Algorithm: GOST R 34.10-2012 (256 bit)
OID: 1.2.643.7.1.1.1.1
Parameters: GOST R 34.10-2012 256-bit ParamSet A
OID: 1.2.643.7.1.2.1.1.1openssl verify без движка выдаст unknown signature algorithm. Это ошибка среды, не сертификата.
Классы СКЗИ: КС1, КС2, КС3
ФСБ устанавливает шесть классов защиты СКЗИ — КС1, КС2, КС3, КВ1, КВ2, КА1. Шкала идёт от минимальных программных требований до защиты от атак спецслужб с физическим доступом к оборудованию. Для большинства коммерческих задач актуальны первые три.
| Класс | Требования | Применение |
|---|---|---|
| КС1 | Программная реализация без физической защиты | ИСПДн 3–4 уровня, КриптоПро CSP в обычном режиме |
| КС2 | Контроль физического доступа к машине: журналы, режим помещения, список допущенных лиц | Повышенные требования к физической безопасности |
| КС3 | Аппаратный модуль доверенной загрузки | КИИ второй категории и выше |
Требуемый класс определяется моделью угроз — документом, который составляется при аттестации системы и описывает актуальные векторы атак. Именно модель угроз диктует минимально допустимый класс СКЗИ, а не выбор администратора.
КЭП и форматы подписей
Квалифицированная электронная подпись (КЭП) по Федеральному закону № 63-ФЗ «Об электронной подписи» — строго регламентированная конструкция: алгоритм ГОСТ Р 34.10-2012, сертифицированное СКЗИ, сертификат от аккредитованного удостоверяющего центра (УЦ). С 2022 года КЭП юридических лиц выдаёт УЦ ФНС России.
Форматы подписей:
- CAdES (Advanced Electronic Signatures поверх CMS) — основной стандарт для государственных систем, СМЭВ, ФНС и большинства регуляторных интеграций.
- XAdES — то же самое для XML-документов.
- PAdES — подпись встраивается непосредственно в PDF-файл, без отдельного файла подписи.
Реализовывать эти форматы с нуля не нужно — существуют готовые решения. КриптоПро PDF и Office Signature закрывают задачи подписания документов. КриптоПро CAdES BES/T используется для интеграции со СМЭВ. КриптоПро DSS обеспечивает серверную подпись через REST API — актуально для систем, где подписание происходит на стороне сервера без участия пользователя.
Если ваша система хранит корпоративные учётные данные и должна соответствовать требованиям ФСТЭК, Пассворк реализует контроль доступа, журнал аудита и соответствие регуляторным требованиям в единой архитектуре. Протестировать можно бесплатно
Постквантовый горизонт

ГОСТ Р 34.10-2012 уязвим к алгоритму Шора — как RSA и ECDSA. Квантовый компьютер достаточной мощности появится не раньше 2030–2035 годов по оптимистичным оценкам. Однако уже сейчас актуальна стратегия «harvest now, decrypt later»: противник перехватывает и сохраняет зашифрованный трафик сегодня, чтобы расшифровать его после появления нужных вычислительных мощностей. Для данных с горизонтом конфиденциальности 15+ лет это риск, который требует проработки уже на этапе проектирования.
Симметричные алгоритмы устойчивее. Алгоритм Гровера снижает стойкость симметричных шифров вдвое по экспоненте: 256-битный ключ «Кузнечика» деградирует до ~128-битной эффективной стойкости — уровня, который по-прежнему считается достаточным.
В российском контуре постквантовую стандартизацию ведёт технический комитет ТК 26. Компания «Криптонит» опубликовала реализацию постквантовой схемы «Шиповник» на основе кодовой криптографии. Выход российских стандартов ожидается в 2026–2027 годах.
Практический вывод для архитектора: проектируйте криптографический слой с абстракцией над алгоритмом. Захардкоженный вызов VKO с конкретными параметрами кривой в нескольких местах кодовой базы превращает будущую миграцию на постквантовые алгоритмы в болезненный рефакторинг.
Что ломается первым: пять системных проблем
- ГОСТ затрагивает весь стек, а не один компонент. Хранение ключей, форматы сертификатов, TLS-профиль, форматы подписей, клиентские приложения, reverse proxy — всё это меняется. Большинство систем мониторинга не понимают ГОСТ TLS и просто не видят соединения.
- интетические бенчмарки вводят в заблуждение. Реальная производительность складывается из TLS handshake + десериализация CMS + VKO + Key Unwrap + расшифровка. На бенчмарке вы измеряете только расшифровку.
- Жизненный цикл ключей остаётся без внимания. Сертификат КЭП действует год. У ключевых носителей тоже есть срок. Нужны процессы: кто инициирует перевыпуск, кто едет в УЦ, как обновляется в системе, что происходит в переходный период.
- openssl-gost-engine берут там, где нужна сертификация. Он технически корректен, но не является сертифицированным СКЗИ — это разные требования, и их нельзя смешивать.
- Придумывают собственную схему поверх стандарта. «Мы берём Кузнечик, но упаковку ключей сделали по-своему» — ломает безопасность (нестандартные схемы не проходили криптоанализ), совместимость и юридическую легитимность.
Лицензии ФСБ и ФСТЭК

Граница лицензирования неочевидна — не потому что её прячут, а потому что она действительно нетривиальна.
Основной документ — Постановление Правительства РФ № 313 от 16.04.2012 (редакция от 28.08.2023). В приложении — 28 видов лицензируемой деятельности: разработка СКЗИ, производство, распространение, монтаж и настройка на объектах клиентов, техническое обслуживание для третьих лиц, услуги в области шифрования.
ПП № 313 прямо исключает из лицензирования техническое обслуживание СКЗИ для обеспечения собственных нужд юридического лица. Использовать КриптоПро для собственного ЭДО, VPN между офисами, внутреннего инструмента — можно без лицензии. Как только вы начинаете делать это для клиентов — устанавливать, настраивать, обслуживать, продавать встроенную защищённую систему — нужна лицензия.
| Ситуация | Лицензия |
|---|---|
| КриптоПро для собственного ЭДО и VPN | не нужна |
| Внутренний инструмент с ГОСТ-шифрованием | не нужна |
| SaaS с TLS на уровне облака (не разрабатывает СКЗИ) | не нужна |
| Продукт с встроенным СКЗИ — продаёте клиентам | нужна |
| Устанавливаете и настраиваете СКЗИ у клиентов | нужна |
| Обслуживаете СКЗИ у клиентов | нужна |
| Аутсорс-бухгалтер подписывает отчёты клиентов своей КЭП | нужна |
Если вы разрабатываете приложение, интегрируете в него КриптоПро CSP через API и передаёте это приложение клиентам — вы распространяете «защищённую с использованием шифровальных средств информационную систему» по смыслу п. 2 Постановления Правительства № 313. Это требует лицензии ФСБ на разработку и распространение СКЗИ — даже если само СКЗИ клиент приобретает напрямую у КриптоПро.
Разграничение регуляторов
ФСБ регулирует криптографию: шифрование, электронную подпись, управление ключами. ФСТЭК — техническую защиту информации без криптографии: межсетевые экраны, контроль доступа, DLP, аттестацию информационных систем.
Два основных вида лицензий ФСТЭК:
- ТЗКИ — для организаций, оказывающих услуги по аттестации и монтажу средств защиты информации.
- СЗКИ — для разработчиков средств защиты информации (СЗИ) без криптографии. Если вы планируете получить сертификат ФСТЭК на собственный продукт, лицензия СЗКИ нужна как условие подачи заявки.
Требования к получению обеих лицензий:
- не менее 3 штатных сотрудников с профильным образованием в области информационной безопасности;
- аттестованное помещение;
- аттестованные автоматизированные рабочие места (АРМ) разработчиков;
- выездная проверка ФСТЭК.
Ответственность
- Ст. 13.13 КоАП («Незаконная деятельность в области защиты информации»): граждане — 500–1 000 руб., должностные лица — 4 000–5 000 руб., юрлица — 30 000–40 000 руб. с возможной конфискацией средств защиты информации. Суммы по ч. 1 выглядят небольшими, но конфискация СКЗИ и оборудования означает остановку деятельности.
- Ст. 14.1 КоАП: ч. 2 (деятельность без лицензии) — штраф для юрлиц 40 000–50 000 руб.; ч. 3 (грубое нарушение лицензионных требований при наличии лицензии) — штраф до 200 000 руб. или административное приостановление деятельности до 90 суток.
- Ст. 171 УК наступает при совокупности условий: предпринимательская деятельность без лицензии и либо причинение крупного ущерба (от 2 250 000 руб.), либо извлечение дохода в крупном размере (от 2 250 000 руб.). Ч. 1 — штраф до 300 000 руб. или арест до 6 месяцев. Ч. 2 (организованная группа или особо крупный размер — от 9 000 000 руб.) — до 5 лет лишения свободы.
Заключение

Корпоративные системы в российском правовом поле сталкиваются с ГОСТ-криптографией на каждом уровне стека: выбор СКЗИ, модель угроз, жизненный цикл ключей, лицензионные требования, совместимость компонентов. Большинство проблем возникают из-за архитектурных решений, принятых до того, как стало понятно, что именно потребует регулятор.
Практический первый шаг — аудит текущего крипто-слоя: какие алгоритмы используются, где хранятся ключи, какие компоненты потребуют доработки при переходе на сертифицированный стек.
Пассворк включён в реестр отечественного ПО, сертифицирован ФСТЭК России и имеет лицензии ФСТЭК (ТЗКИ и СЗКИ) и ФСБ на работу с криптографией. Разворачивается на серверах организации или в облаке, поддерживает ролевое управление доступом и ведёт журнал аудита всех операций. Протестировать можно бесплатно
Часто задаваемые вопросы

Чем openssl-gost-engine отличается от КриптоПро CSP?
openssl-gost-engine — открытая реализация ГОСТ-алгоритмов для OpenSSL, подходящая для разработки и тестирования. КриптоПро CSP — коммерческое СКЗИ с сертификатом ФСБ. Для систем, требующих аттестации или работы с квалифицированной электронной подписью, openssl-gost-engine не подходит: наличие корректной реализации алгоритма и наличие сертификата — разные требования.
Почему «Магму» нельзя использовать для шифрования больших объёмов данных?
64-битный блок «Магмы» создаёт birthday bound: при шифровании ~32 ГБ одним ключом вероятность коллизии двух блоков становится статистически значимой. Это основа атаки SWEET32. «Магма» предназначена для операций с заведомо малыми объёмами — имитовставки и Key Wrap внутри CMS. Для шифрования данных используется «Кузнечик» с 128-битным блоком.
Нужна ли лицензия ФСБ, если КриптоПро встроен в продукт для клиентов?
Да. Встраивая СКЗИ в продукт и передавая его клиентам, вы распространяете «защищённую с использованием шифровальных средств информационную систему» по смыслу п. 2 Постановления Правительства РФ № 313 от 16.04.2012. Лицензия требуется даже если клиент приобретает СКЗИ у КриптоПро напрямую — факт встраивания и распространения уже образует лицензируемую деятельность.
Как правильно перенести ключевой контейнер КриптоПро?
Ключевой контейнер КриптоПро — это директория из шести файлов (header.key, masks.key, masks2.key, name.key, primary.key, primary2.key), а не один файл. При переносе копируется вся директория целиком из /var/opt/cprocsp/keys/<username>/. Перенос отдельных файлов не работает — контейнер станет нечитаемым.
Что такое forward secrecy в контексте ГОСТ CMS и зачем уничтожать эфемерный ключ?
При шифровании в формате ГОСТ CMS отправитель генерирует одноразовую эфемерную пару ключей для каждого сообщения и уничтожает приватную часть после отправки. Если в будущем утечёт основной ключ, расшифровать прошлые сообщения не получится — эфемерного ключа уже не существует. Forward secrecy работает только при условии, что реализация действительно уничтожает ключ, а не сохраняет его в памяти или логах.
Что изменится при переходе на постквантовые стандарты?
ГОСТ Р 34.10-2012 уязвим к алгоритму Шора — как RSA и ECDSA. Российские постквантовые стандарты ожидаются в 2026–2027 годах. «Кузнечик» с 256-битным ключом под алгоритмом Гровера деградирует до ~128-битной стойкости — этого по-прежнему достаточно. Главный практический вывод: проектируйте крипто-слой с абстракцией над алгоритмом — захардкоженные вызовы VKO с конкретными параметрами кривой превратят миграцию в болезненный рефакторинг всей кодовой базы.
Как работает ГОСТ TLS и какие браузеры его поддерживают?
ГОСТ TLS 1.2 стандартизирован в RFC 9189, TLS 1.3 — в RFC 9367 (2022). На практике большинство сертифицированных СКЗИ в 2026 году работают с TLS 1.2. Chromium и Firefox ГОСТ не поддерживают. Для пользовательского доступа к ГОСТ-сайтам подходят Яндекс Браузер или Chromium-GOST. Подпись документов в браузере — отдельная задача, требующая КриптоПро ЭЦП Browser Plugin, не связанного с TLS.
Чем ТЗКИ отличается от СЗКИ и когда нужна каждая лицензия ФСТЭК?
ТЗКИ (техническая защита конфиденциальной информации) — лицензия для организаций, оказывающих услуги по аттестации и монтажу средств защиты информации у клиентов. СЗКИ (средства защиты конфиденциальной информации) — лицензия для разработчиков СЗИ без криптографии; она обязательна как условие подачи заявки на сертификацию собственного продукта во ФСТЭК. Обе лицензии требуют минимум трёх штатных сотрудников с профильным образованием, аттестованного помещения и прохождения выездной проверки.


