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, агентского взаимодействия и тестовой базы. Ниже представлена таблица изменений по подсистемам.
Подсистема | Ключевые изменения | Файлы / функции |
---|---|---|
Алгоритмы |
Добавлены ГОСТ‑алгоритмы:
|
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 не конфликтуют с текущими флагами.
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.