pass. Хранение ключей gpg

2026-07-27 · 3 мин. для прочтения
blog computer-science

pass. Хранение ключей gpg

Содержание

1 Общая информация

  • Для хранения GPG-ключей в pass подход аналогичен SSH (см. pass. Хранение ключей ssh).
  • Но есть специфика GPG.
  • GPG-ключи обычно привязаны к идентичностям (email, имя) и используются для шифрования, подписи и аутентификации.
  • Хранить их в gopass удобно как резервную копию или для переноса между машинами.
  • Можно хранить только приватные ключи (публичные легко восстановить из приватного), но лучше сохранять оба для удобства.

2 Структура хранения

  • Можно группировать ключи по владельцу/идентичности или назначению (например, рабочие и личные):
gpg/
├── identities/
│   ├── work@company.com/
│   │   ├── private.asc
│   │   └── public.asc
│   └── personal@gmail.com/
│       ├── private.asc
│       └── public.asc
└── subkeys/
    ├── signing/
    │   ├── private.asc
    │   └── public.asc
    └── encryption/
        ├── private.asc
        └── public.asc

3 Экспорт GPG-ключей

  • Перед сохранением экспортируйте ключи в текстовый формат (armor), который можно вставить в gopass.

3.1 Приватный ключ

gpg --export-secret-keys --armor <key-id или email> > ~/private_key.asc

3.2 Публичный ключ

gpg --export --armor <key-id или email> > ~/public_key.asc
  • Субключи (если у вас раздельные ключи для подписи и шифрования) экспортируйте отдельно с опцией --export-options export-minimal или используйте идентификаторы субключей.

4 Сохранение в gopass

  • Для каждого ключа создайте запись (в редакторе):

    # Приватный ключ
    gopass insert gpg/identities/work@company.com/private.asc
    # Вставьте содержимое private_key.asc (включая -----BEGIN PGP PRIVATE KEY BLOCK----- ...)
    
    # Публичный ключ
    gopass insert gpg/identities/work@company.com/public.asc
    # Вставьте содержимое public_key.asc
    
  • Можно сохранить ключи из командной строки:

    gopass insert -f gpg/identities/work/private.asc < ~/private_key.asc
    gopass insert -f gpg/identities/work/public.asc < ~/public_key.asc
    

5 Извлечение и импорт ключей

  • Когда нужно восстановить ключ на новой машине или временно использовать.

5.1 Восстановить в систему

  • Извлеките содержимое и передайте в gpg --import:
    gopass show gpg/identities/work@company.com/private.asc | gpg --import
    gopass show gpg/identities/work@company.com/public.asc | gpg --import
    

5.2 Временное использование без импорта

  • GPG не поддерживает прямую работу с ключами из памяти, как ssh-agent.
  • Однако можно сохранить во временный файл и использовать с опцией --keyring:
TMP_KEY=$(mktemp)
gopass show gpg/identities/work/private.asc > "$TMP_KEY"
gpg --homedir /tmp/gpg_temp --import "$TMP_KEY"
gpg --homedir /tmp/gpg_temp --list-keys
# ... используйте с --homedir

6 Управление несколькими GPG-ключами

6.1 Выбор ключа по умолчанию

  • В ~/.gnupg/gpg.conf можно указать default-key <key-id>.

6.2 Использование разных ключей для разных задач

  • Например, один ключ для подписи коммитов в Git, другой для шифрования файлов.
  • Настройте git config user.signingkey и gpg.conf соответственно.

7 Автоматизация импорта всех ключей при входе в систему

  • Создайте скрипт import-gpg-keys.sh, который будет извлекать все приватные ключи из gopass и импортировать их:
#!/bin/bash
for key in $(gopass list gpg/identities/ | grep '/private.asc$'); do
    echo "Импорт $key"
    gopass show "$key" | gpg --import
done
  • Можно добавить его в .bashrc или .profile.

  • Если ключи в gopass зашифрованы вашим GPG-ключом, то при импорте они будут расшифрованы автоматически

8 Пример

  • Допустим, у вас есть рабочий ключ work@company.com и личный personal@gmail.com.
# Экспорт с текущей машины
gpg --export-secret-keys --armor work@company.com > work_private.asc
gpg --export --armor work@company.com > work_public.asc
gpg --export-secret-keys --armor personal@gmail.com > personal_private.asc
gpg --export --armor personal@gmail.com > personal_public.asc

# Сохранение в gopass
gopass insert gpg/identities/work/private.asc < work_private.asc
gopass insert gpg/identities/work/public.asc < work_public.asc
gopass insert gpg/identities/personal/private.asc < personal_private.asc
gopass insert gpg/identities/personal/public.asc < personal_public.asc

# Проверка
gopass show gpg/identities/work/public.asc | head -n 5

# На новой машине
gopass show gpg/identities/work/private.asc | gpg --import
gopass show gpg/identities/personal/private.asc | gpg --import
# Установить доверие
gpg --edit-key work@company.com trust quit

9 Хранение только приватных ключей

  • Публичные ключи можно восстановить из приватных командой gpg --export, поэтому можно хранить только приватные, а публичные генерировать при необходимости.
Дмитрий Сергеевич Кулябов
Authors
Профессор кафедры теории вероятностей и кибербезопасности
Работаю профессором на кафедре теории вероятностей и кибербезопасности Российского университета дружбы народов им. Патриса Лумумбы. Научные интересы относятся к области теоретической физики и математического моделирования.