Резервное копирование и перенос ключа
Приватный ключ контрибьютора существует только у него: он не хранится ни в репозитории, ни в CI/CD, ни у Lead Maintainer. Поэтому ответственность за сохранность ключа целиком лежит на его владельце. Утеря ключа без резервной копии — это организационная процедура отзыва и перерегистрации pgp_key_id в CONTRIBUTORS.json (ADR 0004), а для maintainer — еще и возможная задержка релиза (ADR 0005).
1. Что входит в резервную копию
| Артефакт | Команда получения | Зачем |
|---|---|---|
| Приватный ключ (первичный + подключи) | gpg --export-secret-keys --armor KEYID | Восстановление возможности подписывать и расшифровывать |
| Публичный ключ | gpg --export --armor KEYID | Удобство восстановления (можно взять и из публикаций) |
| База доверия (ownertrust) | gpg --export-ownertrust | Восстановление уровней доверия к своему и чужим ключам |
| Сертификат отзыва | создан при генерации: ~/.gnupg/openpgp-revocs.d/<FPR>.rev | Возможность отозвать ключ при его утере |
2. Создание резервной копии
# Приватный ключ (запросит passphrase)
gpg --export-secret-keys --armor 556B41333653BD5A > netgap-secret-key.asc
# Публичный ключ
gpg --export --armor 556B41333653BD5A > netgap-public-key.asc
# База доверия
gpg --export-ownertrust > netgap-ownertrust.txt
# Сертификат отзыва — просто скопируйте готовый файл
cp ~/.gnupg/openpgp-revocs.d/6B835E5BB72CBC2AA35F2E10556B41333653BD5A.rev .
Правила хранения:
- носитель — офлайн и зашифрованный: аппаратно шифруемая флешка, зашифрованный образ (VeraCrypt, LUKS, зашифрованный DMG). Файл
netgap-secret-key.ascзащищен вашей passphrase, но не полагайтесь только на нее; - два экземпляра в разных местах (например, сейф дома и банковская ячейка / офисный сейф) — защита от пожара и утери носителя;
- сертификат отзыва — отдельно от приватного ключа: тот, кто получит оба файла, сможет и подписываться от вашего имени, и отзывать ключ;
- для долгосрочного хранения можно сделать бумажную копию (распечатка ASCII-armored файла или
paperkey) — бумага не страдает от деградации носителей; - после записи на носитель удалите временные файлы с рабочей машины:
shred -u netgap-secret-key.asc(macOS:rm -P); - обновляйте копию после изменений ключа (продление срока, новые подключи).
Чего не делать никогда
Не коммитьте приватный ключ в репозитории (даже приватные), не храните его в облачных заметках и почте, не передавайте по мессенджерам. Резервная копия приватного ключа существует только на офлайн-носителях под вашим контролем.
3. Перенос ключа между своими машинами
Типовой сценарий: новая рабочая машина или необходимость подписывать коммиты и релизы с двух машин. Схема та же, что и у бекапа: экспорт → защищенная передача → импорт.
На старой машине
gpg --export-secret-keys --armor 556B41333653BD5A > transfer-secret.asc
gpg --export-ownertrust > transfer-ownertrust.txt
Передайте оба файла защищенным способом: зашифрованная флешка либо прямое копирование по SSH между своими машинами (scp transfer-secret.asc user@new-machine:~/). Не пересылайте через почту, мессенджеры и облачные диски.
На новой машине
# 1. Импорт приватного ключа (запросит passphrase)
gpg --import transfer-secret.asc
# 2. Импорт базы доверия
gpg --import-ownertrust transfer-ownertrust.txt
# 3. Если доверие не восстановилось — установить ultimate для своего ключа
gpg --edit-key 556B41333653BD5A
gpg> trust
# выберите: 5 = I trust ultimately
gpg> quit
# 4. Проверка: ключ на месте, secret-часть присутствует
gpg --list-secret-keys --keyid-format=long
Затем настройте git (Подпись коммитов) и сделайте пробную подпись:
echo test | gpg --clearsign > /dev/null && echo "OK: ключ работает"
Завершение
# Удалите временные файлы на обеих машинах
shred -u transfer-secret.asc transfer-ownertrust.txt # Linux
rm -P transfer-secret.asc transfer-ownertrust.txt # macOS
Если старая машина выводится из эксплуатации — удалите с нее приватный ключ:
gpg --delete-secret-keys 556B41333653BD5A
Альтернатива: перенос каталога ~/.gnupg целиком
Можно скопировать весь каталог ~/.gnupg (закрыв gpg-agent: gpgconf --kill gpg-agent). Это переносит и ключи, и доверие, и настройки, но также тянет кеши и служебные файлы. После копирования проверьте права: chmod 700 ~/.gnupg && chmod 600 ~/.gnupg/*. Способ с export/import чище и рекомендуется.
4. Восстановление из резервной копии
Процедура идентична «на новой машине»: gpg --import приватного ключа, gpg --import-ownertrust, при необходимости trust → 5, проверка gpg --list-secret-keys. Если восстановить ключ не удалось (носитель утрачен/поврежден):
- импортируйте сертификат отзыва и опубликуйте отозванный ключ (WKD,
authors.yml,gpg.asc); - сообщите Lead Maintainer — запись
pgp_key_idвCONTRIBUTORS.jsonбудет заменена; - создайте новый ключ и пройдите регистрацию заново.
Чеклист: резервная копия
- Экспортированы: приватный ключ, публичный ключ, ownertrust.
- Скопирован сертификат отзыва из
~/.gnupg/openpgp-revocs.d/. - Копии записаны на два офлайн-носителя (зашифрованных), хранящихся раздельно.
- Сертификат отзыва хранится отдельно от приватного ключа.
- Временные файлы удалены с рабочей машины (
shred -u/rm -P). - Восстановление проверено хотя бы один раз (тестовый импорт).
Чеклист: перенос на новую машину
- Ключ и ownertrust экспортированы на старой машине.
- Передача — только зашифрованный носитель или scp между своими машинами.
- На новой машине:
--import,--import-ownertrust, довериеultimate. -
gpg --list-secret-keysпоказывает ключ, пробная подпись работает. - git настроен (
user.signingkey,commit.gpgsign), тестовый коммит подписан. - Временные файлы удалены на обеих машинах.
- При выводе старой машины из эксплуатации приватный ключ с нее удален.