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

OpenPGP: ГОСТ-ключи, подпись и шифрование

Инструмент gpg позволяет подписывать документы и шифровать сообщения с использованием ключей OpenPGP. В НАЙС.ОС доступны российские ГОСТ-кривые для соответствующих криптографических операций.

Проверка алгоритмов

gpg --version
gpg --with-colons --list-config curve
gpg --with-colons --list-config digestname
gpg --with-colons --list-config ciphername

Проверяйте присутствие GOST2012-256-A, алгоритмов GOST3411-12-256 / GOST3411-12-512 и GOST28147 на конкретном узле.

Учебная ключевая пара

Для обучения используйте изолированный каталог GnuPG, чтобы не затронуть рабочие ключи:

umask 077
export GNUPGHOME="$(mktemp -d)"
chmod 700 "$GNUPGHOME"

gpg --quick-generate-key \
  'NiceOS GOST Lab <lab@example.invalid>' \
  GOST2012-256-A sign 1d

gpg --list-keys --with-fingerprint

Команда может запросить парольную фразу через pinentry. Используйте отдельную учебную фразу, не совпадающую с производственными. После завершения эксперимента удалите только созданный вами временный каталог, предварительно проверив значение GNUPGHOME.

Подпись и проверка документа

printf '%s\n' 'Тестовый документ НАЙС.ОС' > document.txt

gpg --armor --detach-sign \
  --digest-algo GOST3411-12-256 \
  --output document.txt.asc document.txt

gpg --verify document.txt.asc document.txt

Для проверки целостности измените копию документа и повторите gpg --verify: проверка должна завершиться ошибкой. Не путайте отсутствие доверия к владельцу открытого ключа с ошибкой математической проверки подписи: это независимые результаты.

Шифрование и расшифрование

Создайте отдельный подключ с назначением шифрования и затем используйте его:

FPR=$(gpg --with-colons --list-secret-keys \
  'NiceOS GOST Lab' | awk -F: '$1=="fpr"{print $10; exit}')

gpg --quick-add-key "$FPR" GOST2012-256-A encr 1d

gpg --recipient "$FPR" \
  --output document.txt.gpg --encrypt document.txt

gpg --output restored.txt --decrypt document.txt.gpg
cmp document.txt restored.txt

Для данного профиля GnuPG применяет собственную реализацию согласования ключа и симметричного шифрования. При обмене с внешними пользователями проверяйте поддержку такого же OpenPGP-профиля принимающей стороной.

Особенности эксплуатации

Не экспортируйте закрытый ключ без необходимости. Для переносимых открытых ключей используйте gpg --armor --export, предварительно проверив отпечаток по независимому каналу. Не направляйте лабораторные ключи на публичные keyserver.