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.