Диагностика ГОСТ в 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
В рабочей машине запрещено выкладывать на внешние сервисы тестовые контейнеры, если они содержат реальный секретный ключ или личные данные. Для публичного отчёта достаточно программы, кода ошибки, версии и обезличенного статуса.
Отличаем ошибки формата от криптографических ошибок¶
- Файл начинается не с CMS ContentInfo или повреждён DER/BER → сначала проверить контейнер (
openssl asn1parse, на несекретных файлах). - Контейнер прочитан, но получатель не найден → сверить идентификатор сертификата и секретный ключ.
- Получатель найден, но VKO/UKM/transport MAC неверен → нельзя выдавать открытый документ; сохранить обезличенный код ошибки и проверить профиль.
- Содержимое расшифровано, но нет проверки подписи → отсутствие подписи означает отсутствие гарантий подлинности источника; в документации не писать «подлинность проверена».
- Математическая подпись верна, но доверие не пройдено → проблема удостоверяющего центра, доверия, политики или отзыва, не обязательно libksba.
Дополнительный контроль после исправлений¶
Каждое исправление выполнять на копии лабораторного окружения; повторять и положительные, и отрицательные тесты. После изменения CRL-кэша или доверенных корней — подтверждать поведение с чистым тестовым профилем, а не исключительно с ранее прогретым кэшем.
Основной протокол подтверждённых испытаний должен обновляться только по настоящим журналам. Если результат не воспроизведён, соответствующее утверждение в публичном описании нельзя повышать до «полностью поддерживается».