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

Диагностика ГОСТ в GPGSM, libksba и GnuPG НАЙС.ОС

Карта проблем

Признак Возможная причина Что сделать
gpgsm --list-keys показывает сертификат, но --list-secret-keys пуст Импортирован только открытый X.509 Создать/импортировать разрешённый лабораторный PKCS#12; проверить соответствие пары
key type: GOST2001-CryptoPro-A, в ASN.1 ГОСТ-2012/256 Отображаемое внутреннее имя математически эквивалентной кривой Сравнить OID открытого ключа, hash OID, OID параметров; не «чинить» ключ по одному имени
GOODSIG, но TRUST_UNDEFINED Математическая подпись верна, но неполная проверка цепочки/отзыва/политик Проверить доверенный корень, промежуточные УЦ, CRL/OCSP, dirmngr
BADSIG после изменения исходного файла Ожидаемое безопасное поведение Ничего не исправлять; зафиксировать отрицательный тест
Синтаксическая ошибка в URI при CRL Ошибка источника/разбора CRL URL или окружающей среды Отдельный журнал dirmngr, проверить адреса CRL всех сертификатов цепочки, кэш и доступность
При импорте P12: incorrect MAC / bad passphrase Неверный пароль либо неподдерживаемая защита PFX Проверить, каким шифром/MAC защищён контейнер; работать на копии, пароль не записывать в лог
GOST CMS transport requires GOST28147 Несовместимая пара типа получателя и содержимого в legacy-профиле Явно выбрать согласованный ГОСТ-28147 профиль; modern KARI не подразумевается
No secret key при дешифровании Нет ключа, адресату не соответствует контейнер, недоступен agent --list-secret-keys в том же --homedir, проверить agent, соответствие сертификата
Шифрование есть, cmp показывает отличия Неверный вход, повреждённый файл, проблема реализации/режима Сравнить хэши, ASN.1/CMS параметры, не объявлять положительный результат
--p12-cipher неизвестен Установлен не тот GPGSM или патч отсутствует Проверить --dump-options, RPM/SRPM и патч уровня r12

Минимальная безопасная диагностика

rpm -q gnupg libksba libgcrypt
gpgsm --version
gpgconf --list-components
openssl version
openssl engine -t -c gost

В рабочей машине запрещено выкладывать на внешние сервисы тестовые контейнеры, если они содержат реальный секретный ключ или личные данные. Для публичного отчёта достаточно программы, кода ошибки, версии и обезличенного статуса.

Отличаем ошибки формата от криптографических ошибок

  1. Файл начинается не с CMS ContentInfo или повреждён DER/BER → сначала проверить контейнер (openssl asn1parse, на несекретных файлах).
  2. Контейнер прочитан, но получатель не найден → сверить идентификатор сертификата и секретный ключ.
  3. Получатель найден, но VKO/UKM/transport MAC неверен → нельзя выдавать открытый документ; сохранить обезличенный код ошибки и проверить профиль.
  4. Содержимое расшифровано, но нет проверки подписи → отсутствие подписи означает отсутствие гарантий подлинности источника; в документации не писать «подлинность проверена».
  5. Математическая подпись верна, но доверие не пройдено → проблема удостоверяющего центра, доверия, политики или отзыва, не обязательно libksba.

Дополнительный контроль после исправлений

Каждое исправление выполнять на копии лабораторного окружения; повторять и положительные, и отрицательные тесты. После изменения CRL-кэша или доверенных корней — подтверждать поведение с чистым тестовым профилем, а не исключительно с ранее прогретым кэшем.

Основной протокол подтверждённых испытаний должен обновляться только по настоящим журналам. Если результат не воспроизведён, соответствующее утверждение в публичном описании нельзя повышать до «полностью поддерживается».