Структура хранения ключей

Описание структуры хранения ключей при установке GnuPG

1. База данных и структура хранения GnuPG на компьютере

GnuPG не использует единую базу данных в традиционном понимании (как SQLite или MySQL). Вместо этого он использует набор файлов в специальном каталоге (обычно ~/.gnupg/ в Linux/macOS или %APPDATA%\gnupg в Windows). Это портативная и простая в резервном копировании структура.

Вот ключевые файлы и их назначение:

Файл / Каталог Назначение и описание
~/.gnupg/ Домашний каталог GnuPG. Основное место хранения всех данных. Его местоположение можно изменить через переменную окружения GNUPGHOME или опцию --homedir.
pubring.kbx Основной файл с открытыми ключами (публичными). Это ключевой файл в современном формате “keybox” (KBX), который используется по умолчанию в версиях GnuPG 2.1 и новее. Хранит импортированные открытые ключи.
trustdb.gpg База данных доверия (Trust DB). Это самая близкая к “базе данных” часть. Она не содержит самих ключей, а хранит информацию о уровне доверия, который вы назначили владельцам ключей (например, “полное”, “ограниченное”, “недоверенное”), и вычисленные на основе этой информации валидности ключей (ultimate, full, marginal, expired, revoked и т.д.).
private-keys-v1.d/ Каталог с секретными ключами. Это очень важный каталог. В современных версиях каждый секретный ключ (закрытый) хранится в отдельном файле с расширением .key. Файлы зашифрованы с использованием вашей парольной фразы. Это то, что нужно бэкопировать в первую очередь и максимально защищать!
openpgp-revocs.d/ Каталог с предварительно сгенерированными отзывными сертификатами. Когда вы создаете новый ключ, GnuPG автоматически генерирует сертификат для его отзыва (чтобы вы могли объявить ключ недействительным, если забыли пароль или потеряли доступ к нему). Имена файлов соответствуют отпечаткам ключей.
gpg.conf Главный файл конфигурации для команды gpg. Сюда можно прописать все часто используемые опции (например, используемый keyserver, алгоритмы по умолчанию и т.д.).
dirmngr.conf Файл конфигурации для dirmngr — демона, отвечающего за взаимодействие с keyserver-ами и проверку сертификатов OCSP.
gpg-agent.conf Файл конфигурации для gpg-agent — демона, который управляет секретными ключами, кэширует парольные фразы и обеспечивает безопасность их использования.

Устаревшие файлы (встречаются в старых системах или после обновления):

  • pubring.gpg, secring.gpg: Публичные и секретные ключи в старом формате. Современные версии GnuPG (>2.1) используют pubring.kbx и каталог private-keys-v1.d/ вместо secring.gpg.

Как это работает вместе?

  1. Когда вы выполняете gpg --list-keys, программа читает список открытых ключей из pubring.kbx.
  2. Когда вы проверяете подпись, gpg сверяется с trustdb.gpg, чтобы узнать, насколько ключ, которым подписан файл, валиден с точки зрения вашей сети доверия.
  3. Когда вы подписываете или расшифровываете что-либо, gpg обращается к gpg-agent.
  4. gpg-agent находит нужный секретный ключ в каталоге private-keys-v1.d/, запрашивает у вас пароль для его расшифровки (если он еще не закэширован) и выполняет криптографическую операцию.

2. Что устанавливается при установке GnuPG

При установке GnuPG (пакет gnupg, gnupg2 или установщик для Windows) устанавливается не одна программа, а целый набор взаимосвязанных компонентов:

Компонент Назначение
gpg / gpg2 Основная программа (бинарник). Это командная утилита, с которой взаимодействует пользователь. Именно она вызывает все остальные компоненты для выполнения задач. В версиях 2.x основной бинарник называется gpg2, но часто существует символьная ссылка gpg на него для совместимости.
gpg-agent Агент управления ключами. Это фоновый процесс (демон), который:
• Управляет секретными ключами.
• Кэширует введенные парольные фразы в течение заданного времени (чтобы не вводить пароль каждый раз).
• Перенаправляет запросы на ввод пароля на правильный PIN-entry.
Это ключевой компонент для безопасности и удобства.
gpg-connect-agent Утилита для отладки и отправки команд gpg-agentу напрямую.
gpgconf Утилита для управления конфигурацией runtime-процессов GnuPG (например, для перезагрузки агента или просмотра используемых опций).
dirmngr Менеджер каталогов. Еще один фоновый процесс, который отвечает за:
• Связь с keyserver-ами (получение ключей, отправка ключей, поиск).
• Проверку отозванных сертификатов (CRL/OCSP) для технологии S/MIME (используется в gpgsm).
gpgsm Утилита для работы с сертификатами S/MIME (стандарт, часто используемый в почтовых клиентах). Работает с X.509 сертификатами, а не с OpenPGP ключами.
gpgparsemail, gpgscm и др. Вспомогательные скрипты и утилиты для обработки почты и тестирования.
pinentry-* Набор программ для ввода пароля. Это отдельные пакеты (например, pinentry-gtk2, pinentry-qt, pinentry-curses, pinentry-tty), которые должны быть установлены вместе с GnuPG. Агент gpg-agent вызывает pinentry, чтобы показать графический или текстовый диалог ввода пароля. Это сделано для изоляции и безопасности — сам gpg-agent не имеет доступа к дисплею.

Итог: Установка GnuPG — это установка целой экосистемы (gpg, gpg-agent, dirmngr), которая работает вместе, чтобы предоставить полнофункциональную криптографическую инфраструктуру. Данные хранятся в виде набора файлов в домашнем каталоге, а не в единой монолитной базе, что упрощает резервное копирование и перенос.