GnuPG с поддержкой ГОСТ

GnuPG — это ключевая криптографическая система с открытым исходным кодом, лежащая в основе цифровых подписей, шифрования электронной почты, безопасности пакетов и доверенной аутентификации. Мы добавили в неё полноценную поддержку российских алгоритмов ГОСТ: ЭЦП на ГОСТ Р 34.10-2012 (256 и 512 бит), хэш-функцию ГОСТ Р 34.11-2012 (Сtribog), симметричный шифр ГОСТ 28147-89 и обёртку ключей (key wrap) на базе ГОСТ ECDH. Это значит, что теперь можно создавать и проверять подписи, шифровать данные и генерировать ключи с ГОСТ-алгоритмами напрямую — без сторонних патчей или провайдеров. Всё работает «из коробки» в Kleopatra, Thunderbird, GpgOL, RPM/DEB-сборках и CI/CD-сценариях. Разработчики получают стабильный CLI и API-интерфейс для создания ГОСТ-совместимых решений на Linux, Windows и macOS.

1. Зачем ГОСТ в 2025‑м?

ГОСТ-алгоритмы по-прежнему являются обязательными стандартами для криптографической защиты информации в России — от ЭЦП и СМЭВ до внутренних документов компаний. Их применение закреплено нормативно:

  • Федеральный закон № 63-ФЗ «Об электронной подписи» — определяет юридическую силу электронной подписи;
  • Приказ ФСБ № 795 — устанавливает перечень допустимых криптографических алгоритмов (включая ГОСТ Р 34.10-2012, 34.11-2012);
  • Профиль ТК‑26 — уточняет допустимые OID, кривые, EKU, структуры сертификатов и подписей.

Новая сборка GnuPG с поддержкой ГОСТ позволяет использовать российские криптоалгоритмы в типовых сценариях:

  • подписание и проверка электронных документов (PDF, XML, ZIP);
  • интеграция в почтовые клиенты (Kleopatra, Thunderbird, Outlook через GpgOL);
  • подпись пакетов в rpm / deb , а также в CI/CD конвейерах;
  • зашифрованные каналы и данные (CMS, ECDH-GOST, GOST28147).

⚠️ Важно: версия не сертифицирована

Текущая реализация ГОСТ в GnuPG не проходила сертификацию ФСБ или ФСТЭК и предназначена для использования:

  • в разработке и тестировании решений под ГОСТ;
  • в образовательных и исследовательских целях;
  • в пилотных внедрениях и при оценке интеграции с существующей ГОСТ‑инфраструктурой.
Мы планируем технически подготовить релиз для возможной сертификации в будущем.

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

2. Что такое GnuPG и где он живёт

GnuPG (GNU Privacy Guard) — это мощный криптографический инструмент с открытым исходным кодом, реализующий стандарты OpenPGP и X.509/CMS. Он используется для цифровой подписи, шифрования, генерации ключей и управления ими. GnuPG лежит в основе многих защищённых коммуникаций и инфраструктур доверия.

Базовые компоненты GnuPG:

  • gpg — основная CLI-утилита для OpenPGP: подпись, шифрование, экспорт/импорт ключей;
  • gpgsm — инструмент для работы с сертификатами X.509 и подписями CMS (S/MIME);
  • gpg-agent — фоновый процесс для хранения секретных ключей и взаимодействия с токенами/смарткартами;
  • dirmngr — компонент для работы с CRL, OCSP и каталогами сертификации;
  • Kleopatra — графическая оболочка для GnuPG (Windows, Linux);
  • GpgOL — плагин для Microsoft Outlook с поддержкой OpenPGP и S/MIME;
  • Thunderbird (с плагином Enigmail или встроенным GPG) — широко используемый клиент с поддержкой подписи и шифрования почты;
  • Пакетные менеджеры — GnuPG используется для подписи пакетов и метаданных в rpm , dpkg , pacman и других системах.

До внедрения поддержки ГОСТ, GnuPG работал с алгоритмами:

  • RSA, DSA, ElGamal — классические алгоритмы для подписи и шифрования;
  • ECC — на кривых NIST P-256/384/521 и Brainpool (RFC 5639);
  • Поддержка X.509 (через gpgsm ) включала CMS, но не поддерживала алгоритмы ГОСТ .

Это означало, что до недавнего времени GnuPG не мог ни проверить, ни сгенерировать подпись по российским криптоалгоритмам. Добавление ГОСТ устраняет этот пробел и позволяет использовать GnuPG в российских реалиях без дополнительных «костылей» или внешних провайдеров.

3. Что именно мы добавили

Для реализации полной поддержки ГОСТ в GnuPG были затронуты все ключевые компоненты — от криптографического ядра до CLI, агентского взаимодействия и тестовой базы. Ниже представлена таблица изменений по подсистемам.

Подсистема Ключевые изменения Файлы / функции
Алгоритмы Добавлены ГОСТ‑алгоритмы:
  • Хэш: Stribog 256/512;
  • ЭЦП: GOST R 34.10‑2012 (256/512);
  • Шифрование: GOST 28147‑89;
  • Обёртка ключей (ECGOST).
common/gost-util.c, common/gost-util.h
OpenPGP (g10) Генерация ключей с кривыми GOST2012-* через gpg --full-generate-key;
подпись с использованием --digest-algo stribog512;
шифрование и обмен ключами через ECGOST.
g10/gost.c, g10/keygen.c, g10/sig.c
S/MIME (sm) Поддержка CMS-подписей и шифрования с использованием ГОСТ‑OID и Stribog в X.509. sm/certcheck.c, sm/cms.c, sm/gost.c
gpg-agent Обработка инверсии R/S;
Поддержка хэшей ГОСТ (Stribog) в PKCS#11‑подписях;
взаимодействие с токенами и смарт-картами.
agent/pksign.c, agent/call-scd.c
dirmngr Поддержка загрузки и проверки CRL, подписанных ГОСТ‑УЦ. dirmngr/crlcache.c, dirmngr/server.c
Документация Добавлены описания новых опций, кривых и алгоритмов ГОСТ в официальную документацию. doc/gpg.texi
Тесты Новые тесты OpenPGP/ГОСТ: генерация ключей, подпись, шифрование (ECDH). tests/openpgp/gost-*

Благодаря этим изменениям, GnuPG теперь поддерживает ГОСТ на уровне полноценного гражданского криптопровайдера — от CLI-интерфейса до CMS/PKI и аппаратных ключей.

4. Как это меняет жизнь

Добавление поддержки ГОСТ в GnuPG открывает новые возможности для пользователей, администраторов и разработчиков. Ниже — чем это полезно для каждого из них.

👤 Пользователь

  • Проверка и создание ГОСТ-подписей теперь доступны прямо в Kleopatra (GUI для Windows/Linux), Thunderbird (через встроенный GnuPG) и Microsoft Outlook (через GpgOL).
  • Вместо сообщений об ошибках вроде:
            unsupported algorithm 1.2.643.7.1.1.3.2
          
    пользователь теперь получает корректную верификацию подписи с «зелёной галкой» и именем ГОСТ-алгоритма.
  • Работают подписи и шифрование документов, писем и файлов, полученных от российских организаций и удостоверяющих центров.

🧰 Системный администратор

  • Можно использовать официальные сборки GnuPG без дополнительных патчей или проприетарных решений.
  • Поддержка ГОСТ-алгоритмов в подписи пакетов rpm, deb и pkg.tar.zst облегчает интеграцию в CI/CD и управление внутренними репозиториями.
  • Существенно снижается технический долг: не требуется поддерживать форки, пересобирать пакеты вручную или использовать сторонние скрипты для подписи.

👨‍💻 Разработчик / интегратор

  • Единая криптографическая база на основе Libgcrypt + GnuPG упрощает внедрение ГОСТ в существующие приложения.
  • CLI-интерфейс удобен для автоматизации:
            gpg --full-generate-key --curve GOST2012-256-A
            gpg --sign --digest-algo stribog256
            gpg --recipient user@example.org --cipher-algo GOST28147 --encrypt file.txt
          
  • Возможна интеграция с внешними токенами, PKCS#11 и OpenSC, без глубокого погружения в ASN.1 или реализацию ГОСТ на стороне приложения.

Итог: поддержка ГОСТ в GnuPG делает ГОСТ-подписи и шифрование доступными «из коробки» — без ручной сборки, сторонних библиотек и трудозатратных интеграций.

5. Под капотом (детали реализации)

Поддержка ГОСТ в GnuPG реализована с учётом всех тонкостей работы с российскими алгоритмами, включая особенности представления подписей, идентификаторов и совместимости с библиотеками. Ниже — ключевые инженерные решения.

🔁 Инверсия координат R/S и flip_buffer()

ГОСТ-подписи, в отличие от RFC-стандартизованных ECC, используют инверсный порядок байт при представлении координат R и S. Внутри GnuPG добавлена функция flip_buffer(), которая обеспечивает корректное «отзеркаливание» значений при импорте и экспорте подписей. Это обеспечивает совместимость с libgcrypt, аппаратными токенами и форматами X.509/CMS.

📐 Отображение кривых в OID и выбор digest

При генерации ключей и подписи GnuPG автоматически определяет OID кривой (например, GOST2012‑256‑A → 1.2.643.7.1.2.1.1.1), а также подбирает нужную хеш-функцию (например, stribog256 для кривых 256-бит, stribog512 — для 512-бит). Это избавляет пользователя от ручного указания алгоритмов и делает команды CLI более интуитивными.

⚙️ Сборка с Libgcrypt ≥ 1.11-gost

Поддержка ГОСТ в GnuPG требует, чтобы библиотека libgcrypt была собрана с включённой реализацией алгоритмов ГОСТ (патчи Alt Linux / RuCrypto). При конфигурации выполняется автоматическая проверка доступности нужных алгоритмов (через gcry_md_map_name() и gcry_pk_map_name()). Если ГОСТ недоступен, соответствующий функционал в GnuPG отключается на этапе сборки.

🔒 Обратная совместимость и ABI

Все добавленные функции, связанные с ГОСТ (например, gost_sign(), gost_kdf()), реализованы так, чтобы не нарушать существующий ABI:

  • новые поля добавлены в конец структур;
  • существующие вызовы остаются без изменений;
  • опции CLI не конфликтуют с текущими флагами.
Это означает, что любые внешние приложения, использующие GnuPG, не требуют перекомпиляции и продолжают работать как прежде.

6. Производительность: RSA vs ГОСТ

Одним из распространённых опасений при внедрении ГОСТ-алгоритмов является возможная потеря производительности. Мы провели базовые бенчмарки подписи, проверки и шифрования с использованием RSA и ГОСТ‑алгоритмов в составе GnuPG. Тесты выполнялись на x86‑64 (Intel Core i7, 3.2 ГГц, 16 ГБ RAM) в пользовательском пространстве без аппаратного ускорения.

Операция RSA-2048 / SHA256 ECGOST-512 / Stribog512 Разница
Создание подписи ~0.68 мс ~0.75 мс +10%
Проверка подписи ~0.43 мс ~0.49 мс +14%
Шифрование файла (1 КБ) ~0.32 мс ~0.34 мс +6%
Расшифровка ~0.35 мс ~0.38 мс +9%

Как видно, разница между RSA и ГОСТ составляет от 6 до 14 % в сторону RSA, что вполне допустимо для большинства практических задач, включая CI-подписи, почтовые клиенты, ЭДО и S/MIME-рассылки.

ГОСТ-алгоритмы демонстрируют предсказуемое и стабильное поведение без пиков задержек, а при аппаратном ускорении (например, через КриптоПРО CSP или PKCS#11-токены) производительность может быть значительно выше.

Вывод: ГОСТ-подписи и шифрование в GnuPG пригодны для реального применения, включая массовую обработку и сценарии с ограничениями по времени.

7. Как начать пользоваться

Поддержка ГОСТ в GnuPG включается автоматически при наличии libgcrypt с ГОСТ-алгоритмами. Ниже — пошаговые инструкции по сборке, проверке и использованию.

🔧 Сборка из исходников

Убедитесь, что libgcrypt ≥ 1.11 собрана с поддержкой ГОСТ (например, патчи Alt Linux или RuCrypto).

git clone https://gnupg.org/git/gnupg.git
cd gnupg
./autogen.sh
./configure --enable-maintainer-mode --enable-gost
make -j$(nproc)
sudo make install
  

Проверить доступные алгоритмы можно через:

gpg --version | grep -i gost
  

🖥️ Использование из CLI

1. Генерация ГОСТ-ключа (OpenPGP):

gpg --full-generate-key
# Выберите: ECC (9), затем GOST2012-256-A или GOST2012-512-A
  

2. Подпись файла с использованием Stribog:

gpg --digest-algo stribog512 --sign документ.pdf
  

3. Шифрование файла с использованием GOST28147:

gpg --recipient user@example.com --cipher-algo GOST28147 --encrypt файл.txt
  

4. Проверка ГОСТ-подписи:

gpg --verify документ.pdf.sig
  

🖱️ Использование в GUI

  • Kleopatra: генерирует ГОСТ-ключи (OpenPGP) при выборе ECC-кривой GOST2012;
  • Thunderbird: с GnuPG-интеграцией поддерживает ГОСТ-подпись и шифрование писем;
  • GpgOL (Outlook): корректно отображает ГОСТ-подписи и поддерживает CMS;
  • Интеграция с смарт-картами: поддержка ГОСТ через PKCS#11 работает при правильной настройке gpg-agent и scdaemon.

Рекомендация: для комфортной работы с ГОСТ-ключами в GUI-клиентах, рекомендуется установить свежую версию Kleopatra с поддержкой соответствующих кривых.

8. Интеграция в НАЙС.ОС

Поддержка ГОСТ-алгоритмов в GnuPG уже полностью встроена в дистрибутив НАЙС.ОС начиная с редакции Server 2025.1. Это означает, что пользователи и разработчики могут использовать ГОСТ-функциональность «из коробки» — без ручной пересборки или установки нестабильных патчей.

📦 Что включено в поставку

  • gnupg — скомпилирован с включённой поддержкой ГОСТ-алгоритмов;
  • libgcrypt ≥ 1.11-gost — с поддержкой Stribog, ECGOST, GOST28147, VKO, keywrap;
  • Kleopatra — с возможностью генерации ГОСТ-ключей и проверки подписей;
  • PKCS#11-модули — для аппаратной работы с ГОСТ-ключами (при наличии токенов);
  • Интеграция с RPM — возможность подписывать пакеты с использованием ГОСТ, если выбран соответствующий алгоритм;
  • Документация и man-страницы — включают новые параметры --curve, --digest-algo, --cipher-algo.

🛠️ Платформенная доступность

Поддержка ГОСТ в GnuPG официально доступна только в составе НАЙС.ОС. Поддержка других дистрибутивов (Debian, Ubuntu, Fedora и т.д.) в настоящий момент не планируется, однако возможна при желании стороннего мейнтейнера или сборщика.

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

⚠️ Внимание: текущая версия GnuPG с ГОСТ-поддержкой в НАЙС.ОС не сертифицирована. Она предназначена для ознакомления, разработки, CI и тестирования. Использование в продуктивных СКЗИ-средах требует отдельной оценки.

9. Что дальше / Как внести вклад

Работа над поддержкой ГОСТ в GnuPG продолжается. Ниже — ключевые направления развития и возможности участия для разработчиков, исследователей и интеграторов.

🗺️ Дорожная карта

  • Унификация CMS‑EncryptedData с реализацией шифрования по ГОСТ Р 34.12‑2015 (Кузнечик, режим CTR-ACPKM);
  • Полноценный PKCS#11 proxy в gpg-agent — для аппаратной генерации и подписи ГОСТ-ключами через токены (JaCarta, Рутокен, eToken);
  • Поддержка ГОСТ‑KDF в ECDH (ГОСТ VKO/KDF) для CMS и S/MIME-шифрования на базе ГОСТ-ключей;
  • Upstream-мердж в GnuPG 2.6 — поэтапная интеграция в основную ветку проекта, при соблюдении стиля и политики безопасности проекта GnuPG.

👥 Как внести вклад

  • Протестировать сборку с поддержкой ГОСТ в реальных сценариях (Kleopatra, Thunderbird, CI);
  • Открыть issue или предложить pull-request через GitHub проекта;
  • Участвовать в разработке PKCS#11-интеграции, особенно если вы работаете с токенами ГОСТ;
  • Протестировать совместимость с ПО, использующим CMS (S/MIME, PDF, XML-ЭЦП);
  • Участвовать в подготовке технической документации и русскоязычных туториалов.

Контакт: Для предложений и технических вопросов можно писать на адрес: dev@niceos.ru или присоединиться к чату сообщества НАЙС.ОС.

🤝 Мы открыты к сотрудничеству
Если вы разрабатываете СКЗИ, систему документооборота, криптопровайдер или внедряете ГОСТ в CI/CD — мы будем рады обсудить потребности вашей платформы и планы по доработке GnuPG.
Комментарии
Обратная связь

Нашли ошибку или хотите предложить улучшение? Напишите нам.

Отправить отзыв

НАЙС.ОС включена в реестр российского ПО (#23155) и готова к сертификации ФСТЭК. Свидетельство о государственной регистрации программы для ЭВМ №2025612870 от 05 февраля 2025 г.