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

Импорт закрытого ГОСТ-ключа через 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-пароли. Не переносите на этот стенд действующие приватные ключи КЭП: такие контейнеры могут иметь запрет экспорта и юридические ограничения использования.