Нативное ГОСТ CMS-шифрование в GPGSM НАЙС.ОС¶
Подтверждено 24 октября 2026 года: установленный gpgsm (GnuPG) 2.4.8.1-gost с libksba-1.7.0-5.niceosc5 и libgcrypt-1.11.1 успешно создал зашифрованный CMS-файл с алгоритмом GOST28147, а затем расшифровал его без внешней команды OpenSSL. Исходные и восстановленные данные совпали по cmp и SHA-256.
Пользовательская ценность¶
Библиотека libksba понимает структуру CMS, GPGSM управляет операцией через сертификаты и закрытые ключи, libgcrypt выполняет необходимые криптографические преобразования. С точки зрения пользователя это означает наличие штатной команды GPGSM для зашифрованных документов ГОСТ: отдельная консольная оболочка поверх OpenSSL для локального опыта не потребовалась.
Однако это пока локальное испытание внутри одной системы. Оно не доказывает, что каждый продукт КриптоПро примет сформированный контейнер, и не означает универсальную поддержку современных CMS KARI/KExp15.
Исходные данные¶
В лаборатории использована следующая структура:
/root/gost-cms-test/lab/
├── gnupg/ # изолированное хранилище GPGSM
├── niceos-lab.crt.pem # открытый сертификат
├── niceos-lab.p12 # секретный контейнер; НЕ для обмена
├── plain.txt # учебный текст
├── encrypted.p7e # зашифрованный CMS
└── decrypted.txt # восстановленный текст
Важно: P12 и закрытый ключ в реальной лаборатории имели права только для владельца, а получатель заранее был импортирован в тот же --homedir.
Проверенная команда шифрования¶
umask 077
LAB=/root/gost-cms-test/lab
FPR=33BEB8F5B45F947A24F0F1A2A009360D7A99DD5E
printf 'NICEOS-GOST-CMS-ENCRYPTION-TEST\n' > "$LAB/plain.txt"
gpgsm --homedir "$LAB/gnupg" \
--always-trust \
--cipher-algo GOST28147 \
--recipient "$FPR" \
--output "$LAB/encrypted.p7e" \
--encrypt "$LAB/plain.txt"
echo "Encrypt exit code: $?"
Наблюдалось: gpgsm: encrypted data created, код 0. Отпечаток FPR относится только к лабораторному сертификату этого теста. В новой лаборатории укажите отпечаток своего сертификата.
--always-trust разрешает шифровать на самоподписанный тестовый сертификат. Для рабочих документов адресат должен быть проверен по доверенному каналу: подмена открытого сертификата при шифровании передаст секретные данные злоумышленнику.
Проверенная команда расшифрования¶
gpgsm --homedir "$LAB/gnupg" \
--output "$LAB/decrypted.txt" \
--decrypt "$LAB/encrypted.p7e"
echo "Decrypt exit code: $?"
cmp "$LAB/plain.txt" "$LAB/decrypted.txt"
sha256sum "$LAB/plain.txt" "$LAB/decrypted.txt"
Наблюдалось: расшифрование завершилось кодом 0, cmp вернул 0, SHA-256 совпал:
Это положительное испытание полного цикла шифрование → импортированный ГОСТ-ключ → расшифрование. Теперь можно обоснованно писать в документации, что нативный CMS EnvelopedData с ГОСТ 28147 работает в проверенном локальном сценарии НАЙС.ОС.
Что этот тест не покрывает¶
- Обмен зашифрованными контейнерами с КриптоПро, включая UKM, транспортный MAC, параметры кривых и выбор набора замен.
- Проверку tamper-resistance содержимого и транспортных полей. Само EnvelopedData с историческим ГОСТ28147 не является электронной подписью всего документа.
- Надёжность получения открытого сертификата адресата в корпоративной среде.
- Несколько получателей, большие файлы, произвольные бинарные вложения, 2001/512, современные KARI и KExp15.
Для проверки обмена именно с КриптоПро используйте следующее руководство. Для безопасности подпишите документ до его шифрования и проверяйте подпись после расшифрования.