Импорт закрытого ГОСТ-ключа через PKCS#12¶
Чтобы расшифровать CMS EnvelopedData, адресованный сертификату НАЙС.ОС, необходимо иметь закрытый ключ именно этого получателя. Импорт открытого сертификата X.509 недостаточен. На стенде НАЙС.ОС успешно выполнен перенос лабораторного ГОСТ-2012/256 ключа между OpenSSL и GPGSM через защищённый PKCS#12 (.p12).
Чем отличается ГОСТ-ключ от защиты P12¶
PKCS#12 объединяет сертификат и закрытый ключ и защищает их паролем. При этом алгоритм ключа внутри контейнера и алгоритм его парольной защиты независимы.
На проверенной НАЙС.ОС использован ГОСТ-2012/256 ключ, но сам контейнер шифровался AES-256-CBC, а целостность проверялась HMAC-SHA256. Из успешного импорта такого файла нельзя заключить, что уже проверены специализированные ГОСТ-PFX алгоритмы из RFC 9548 и RFC 9337.
| Компонент | Испытанный вариант |
|---|---|
| Ключ получателя | ГОСТ Р 34.10-2012/256 |
| Защита закрытого ключа внутри P12 | AES-256-CBC |
| Защита сертификата внутри P12 | AES-256-CBC |
| Контроль целостности P12 | SHA-256 |
| Программа формирования | OpenSSL 3.5.6 + GOST Engine |
| Программа импорта | GPGSM NiceSOFT 2.4.8.1-gost |
Создание P12 на тестовой машине¶
Используйте сертификат и закрытый ключ, созданные в лаборатории. Работайте только в каталоге с правами 0700:
umask 077
LAB=/root/gost-cms-test/lab
cd "$LAB"
openssl pkcs12 \
-export \
-inkey niceos-lab.key.pem \
-in niceos-lab.crt.pem \
-keypbe AES-256-CBC \
-certpbe AES-256-CBC \
-macalg sha256 \
-out niceos-lab.p12
OpenSSL интерактивно попросит пароль дважды. Не указывайте пароли как текст аргумента, не добавляйте .p12 в Git и не включайте его в общедоступные архивы.
Изолированный импорт в GPGSM¶
umask 077
LAB=/root/gost-cms-test/lab
[ -d "$LAB/gnupg" ] || mkdir -m 700 "$LAB/gnupg"
gpgsm --homedir "$LAB/gnupg" \
--import "$LAB/niceos-lab.p12"
gpgsm --homedir "$LAB/gnupg" \
--list-secret-keys
В реальном тесте получено:
gpgsm: всего обработано: 2
gpgsm: импортировано: 1
gpgsm: прочитано секретных ключей: 1
gpgsm: импортировано секретных ключей: 1
Эти сообщения доказывают, что импорт завершился, а ключ был зарегистрирован в хранилище GPGSM. Дополнительно пригодность закрытого ключа подтверждена в локальном шифровании и расшифровании.
Проверка в эксплуатации¶
После импорта сравните сертификат, который видит GPGSM, с исходным открытым сертификатом по отпечатку и дате действия. Не полагайтесь на краткий Key ID из списка — используйте полный SHA-256 или SHA-1 отпечаток.
При ошибке проверьте: пароль P12, доступность gpg-agent, правильность домашнего каталога GPGSM, способ парольной защиты и наличие поддерживаемого ГОСТ-профиля ключа. Сохраните код ошибки, но не выводите секреты, содержимое .key, P12 и пароль в журнал.
Что предстоит проверить отдельно¶
Специальные GOST-PFX по RFC 9548, парольная защита с ГОСТ-PBE/OMAC, совместимость PFX КриптоПро ↔ GPGSM, неверный пароль, повреждённый MAC и Unicode-пароли. Не переносите на этот стенд действующие приватные ключи КЭП: такие контейнеры могут иметь запрет экспорта и юридические ограничения использования.