Все про использование GPG
gpg — это инструмент шифрования и электронного подписывания. В его работе используется ассиметричное шифрование, основанное на двух ключах: приватный и публичный. Приватный ключ иногда называют секретным. А публичный ключ называют открытым.
Суть работы в общих чертах следующая: любой желающий может сгенерировать себе пару ключей. Публичный ключ (как это можно понять из названия), не является секретным — этот ключ может находиться в открытом доступе. С помощью этого ключа можно шифровать сообщения и файлы. Причём сообщения и файлы шифруются только «в одну сторону» - расшифровать их, даже используя этот самый публичный ключ, уже невозможно. Их расшифровка возможна только при использовании соответствующего приватного ключа.
Таким образом, если вы хотите отправить секретное сообщение или зашифрованный файл определённому лицу, то вы берёте публичный ключ этого лица (который может быть в свободном доступе), зашифровываете информацию и отправляете ему эту зашифрованную информацию — кроме владельца соответствующего приватного ключа её уже никто не сможет узнать.
Если обменяться публичными ключами, то вы с этим лицом можете вести зашифрованную беседу:
- вы шифруете свои сообщения публичным ключом вашего собеседника и отправляете ему
- он с помощью своего приватного ключа читаете эти сообщения
- ваш собеседник шифрует свои сообщения вашим публичным ключом и отправляет вам
- вы с помощью своего приватного ключа читаете свои сообщения
- и так далее
Приватный ключ умеет делать ещё один интересный фокус: он умеет подписывать файлы. Причём, как можно уже догадаться, проверять подпись можно соответствующим публичным ключом.
Итак, gpg — это OpenPGP часть GNU Privacy Guard (GnuPG). Этот инструмент обеспечивает цифровое шифрование и службы подписи используя стандарт OpenPGP. gpg имеет функции полного управления ключами, а также все приблуды, которые вы можете ожидать от реализации OpenPGP.
Предупреждение по использованию GPG
Используйте хороший пароль для вашего пользовательского аккаунта и хорошую парольную фразу для защиты вашего секретного ключа. Эта парольная фраза является самой слабой частью всей системы. Касательно GPG, вам нужно защитить от постороннего доступа папку "~/.gnupg/".
Для использования в скриптах, у gpg есть хорошо документированная реализация API, чтобы активировать этот интерфейс используйте опции --with-colons и --status-fd. Также для определённых операция может пригодиться опция --command-fd.
Каким публичным GPG ключам можно доверять?
Создать пару публичный-приватный ключ можно у себя на компьютере для любого имени. Это примерно как SSL сертификаты: можно создать для любого сайта, но такой самоподписанный сертификат не будет вызывать доверие у браузеров. Поэтому привлекается третья сторона — корневой центр сертификации (root certification authority, CA) (там чуть сложнее, также имеются промежуточные доверенные центры авторизации (trusted certificate authority)). Собственно, эта услуга и является платной при покупке SSL сертификата для сайта — сгенерировать сертификат можно самому за секунду на любом Linux.
Аналогичная ситуация и с GPG ключами: они могут быть созданы на любое имя. Поэтому когда вы скачиваете публичный GPG ключ для проверки цифровой подписи, вы должны быть полностью уверены, что он именно от того лица, от кого вы думаете. Иначе вся процедура теряет смысл.
После самого первого обмена публичными ключами, дальнейший обмен более надёжен: другая сторона, чтобы подтвердить, что новый публичный ключ исходит от неё, подпишет этот самый новый публичный ключ своим предыдущим приватным ключом. Таким образом, получив новый публичный ключ от вашего собеседника, вы можете проверить подпись предыдущим публичным ключом, и если подпись верна, то, следовательно, можно доверять и новому ключу, который должен заменить предыдущий публичный ключ.
Как сгенерировать пару публичный-приватный ключ в GPG
Всё начинается с генерации ключей. Вы это можете сделать на своём компьютере.
Для генерирования пары ключей запустите команду:
gpg --gen-key
Вам нужно будет ввести:
- Ваше полное имя
- Адрес электронной почты
Затем программа покажет выбранный вами идентификатор пользователя и спросит, всё ли правильно? Если всё правильно, вам нужно будет ввести O.
Затем программа попросит ввести пароль.
Вы можете задать вопрос: какой ещё пароль, если для зашифровки и расшифровки используется ассиметричный алгоритм с файлами ключей? Да, всё верно, вводимый пароль не будет участвовать в процессе шифрования и расшифровки, он нужен для защиты вашего ключа, поскольку он храниться у вас на компьютере в домашней папке. На тот случай, если злоумышленник получит физический доступ к вашему компьютеру, он не сможет просто воспользоваться вашим приватным ключом — ему сначала нужно будет подобрать пароль. Поэтому пароль придумайте надёжный. Кстати, если вы экспортируете приватный ключ в файл (команды для этого будут показаны ниже) чтобы, например, перенести его на другой компьютер, то при импорте этого ключа на другой компьютер нужно будет ввести пароль от этого приватного ключа.
Затем программа покажет совет:
Необходимо получить много случайных чисел. Желательно, чтобы Вы в процессе генерации выполняли какие-то другие действия (печать на клавиатуре, движения мыши, обращения к дискам); это даст генератору случайных чисел больше возможностей получить достаточное количество энтропии.
Вместо --gen-key можно использовать опцию --full-generate-key, которая также сгенерирует пару ключей, но покажет больше опций. При использовании --gen-key некоторые значений опций используются по умолчанию.
Как посмотреть или сохранить свой публичный (открытый) ключ в GPG
У меня плохо с фантазией, поэтому далее в командах в качестве имени пользователя (точнее, идентификаторая пользователя) я использую Alex Collins — замените эту строку на ваше значение.
Чтобы посмотреть публичный ключ используйте опцию --export, а также опцию -a, которая означает, что выводимые данные должны быть не в бинарном формате, а в ASCII (то есть текстовом, пригодном для копирования-вставки в сообщение мессенджера или электронной почты), в конце укажите имя пользователя:
gpg --export
-a "Alex Collins"
Для сохранения публичного ключа в файл используйте перенаправление вывода:
gpg --export
-a "Alex Collins"
> public.key
В результате публичный ключ будет сохранён в файл public.key.
Или используйте опцию -o, после которой укажите имя файла:
gpg --export
-a -o public.key "Alex Collins"
Кстати, обратите внимание, что для вывода публичного ключа не запрашивается пароль.
Как посмотреть или сохранить свой приватный (секретный) ключ в GPG
Для этого используется опция --export-secret-key:
gpg --export-secret-key -a "Alex Collins"
Для сохранения в файл:
gpg --export-secret-key -a "Alex Collins"
> private.key
Или с опцией -o:
gpg --export-secret-key -a -o private.key "Alex Collins"
Как импортировать ключи GPG
Для импорта публичного ключа выполните:
gpg --import
public.key
Эта команда добавит публичный ключ, который находится в файле "public.key".
Для добавления приватного ключа из файла private.key выполните команду:
gpg --import
private.key
Как просмотреть список ключей GPG
Для просмотра всех публичных ключей в вашей системе выполните:
gpg --list-keys
Для просмотра всех приватных ключей в вашей системе выполните:
gpg --list-secret-keys
Как удалить ключи GPG
Для удаления публичного ключа выполните:
gpg --delete-key "Alex Collins"
Помните: если на компьютере имеется приватный ключ, ассоциированный с этим публичным ключом, то вы получите ошибку! Вы должны удалить приватный ключ этой пары, а затем можно удалять публичный ключ.
Для удаления приватного ключа:
gpg --delete-secret-key "Alex Collins"
Для чего нужны fingerprint (отпечатки) в GPG
Fingerprint (отпечатки) ключей в gpg имеют примерно следующий вид:
D743 875D 1BB6 095A 366B B81F 3BFD 8738 3926 AC69
Отпечаток может выполнять функцию идентификатора ключа — то есть вместо указания имени пользователя (в моём примере это Alex Collins) можно использовать отпечаток.
Например для удаления секретного ключа, используя в качестве идентификатора отпечаток:
gpg --delete-secret-key 'D743 875D 1BB6 095A 366B B81F 3BFD 8738 3926 AC69'
Вторая функция применения отпечатка — это верификация публичного ключа. В качестве примера приводится следующая история: Алиса передала Бобу клочок бумаги, на котором записан отпечаток (ну или позвонила по телефону и продиктовала отпечаток). Затем Алиса переслала Бобу свой публичный ключ. Но так как ключ пришёл из Интернета — то непонятно, от кого он именно? Не был ли этот ключ подменён по пути? После импорта ключа, можно просмотреть его отпечаток. Поскольку у Боба есть отпечаток, который он получил из доверенного источника (Алиса продиктовала его своим голосом или лично передала записку с отпечатком), то Боб теперь может сравнить эти два отпечатка — если отпечатки идентичные, значит публичный ключ действительно отправлен Алисой и значит ему можно доверять.
Посмотреть опечаток для ключа определённого пользователя можно командой:
gpg --fingerprint 'Alex Collins'
Шифрование файлов и данных с GPG
Про шифрование в gpg нужно знать, что оно может быть:
- ассиметричным (шифруется публичным ключом, расшифровывается приватным)
- симметричным (шифруется и расшифровывается приватным ключом, шифруется и расшифровывается одной и той же парольной фразой)
Второе, что нужно знать: шифрование можно совмещать с подписыванием файла. Подписывание файла и проверку подписи мы рассмотрим далее. Также далее мы рассмотрим одновременное шифрование и подпись файла.
Третье: зашифровать можно одним или более публичными ключами.
Для шифрования файла используя симметричный метод с паролем используйте опцию -c (либо её длинный аналог --symmetric):
Следующая команда для шифрования файла test.php паролем в gpg:
gpg -c test.php
В результате шифрования будет создан файл с расширением .gpg (в данном случае это будет файл test.php.gpg).
Для того, чтобы зашифровать файл симметричным шифрованием с возможностью расшифровки приватным ключом (в этом случае его можно будет расшифровать приватным ключом, либо паролем) нужно использовать сразу несколько опций:
- -e — означает шифрование данных
- -c — означает симметричное шифрование
- -r 'id' — означает зашифровать данные для пользователя с определённым id
Пример команды симметричного шифрования файла test.php для пользователя Alex Collins с возможностью его расшифровки приватным ключом ЛИБО для расшифровки паролем:
gpg -e -c -r 'Alex Collins'
test.php
Точнее говоря, комбинирование двух опций -e и -c шифрует ключ сессии публичным ключом и симметричным шифром, поэтому для расшифровки может использоваться И приватный ключ, И пароль (на выбор). Если на другом компьютере, где вы расшифровываете файл, имеется ваш приватный ключ, то при расшифровке будет запрошен пароль приватного ключа. Если приватный ключ отсутствует, то будет запрошен пароль, который использовался при шифровании файла.
Для шифрования публичным ключом (-e), чтобы файл (test.php) мог расшифровать только владелец соответствующего парного приватного ключа (-r 'Alex Collins'):
gpg -e -r 'Alex Collins'
test.php
Вместо опции -r 'Имя Адресата' можно использовать опцию -R 'Имя Адресата' или её длинный аналог --hidden-recipient 'Имя Адресата'. Она также шифрует файл для указанного адресата, но имя этого адресата шифруется. Кстати, следует упомянуть, что даже в зашифрованном файле имя адресата может посмотреть кто угодно — о том, как это сделать, будет сказано ниже.
Пример шифрования файла test.php публичным ключом пользователя Alex Collins, но с зашифрованным именем адресата.
gpg -e -R 'Alex Collins'
test.php
Обратите внимание, что во всех случаях шифрования оригинальный файл остаётся!!! Вам самим нужно решать, что с ним делать, например, удалить его.
Чтобы каждый раз не вводить имя получателя, можно установить значение по умолчанию опцией --default-recipient. Также с ней в комплекте идут опции --default-recipient-self и --no-default-recipient.
Как в GPG шифровать файлы, чтобы их можно было отправить в виде сообщения
По умолчанию файлы сохраняются в бинарный формат OpenPGP. Кстати, в этом формате файл может занимать значительно меньше места (в разы!) чем исходный файл до шифрования. Если вы откроете зашифрованный файл, то убедитесь, что это бинарные данные, которые невозможно передать копированием-вставкой без потери их функциональности.
Но иногда может возникнуть необходимость переслать зашифрованный файл или сообщение по почте или в мессенджере в виде обычного текста. Это возможно с помощью опции -a, которая создаёт зашифрованный файл в формате ASCII.
gpg -e -a -r 'Alex Collins'
test.php
В результате будет создан файл с расширением .asc (в данном случае это файл test.php.asc).
Как в GPG зашифровать сообщение
Для зашифровки сообщения используйте следующую конструкцию:
echo
'ТЕКСТ СООБЩЕНИЯ'
| gpg -e -a -r 'ПОЛУЧАТЕЛЬ СООБЩЕНИЯ'
Обратите внимание, что я добавил опцию -a — для того, чтобы зашифрованное сообщение можно было скопировать и вставить в мессенджер или в email (или распечатать на принтере). Без этой опции будут выведены бинарные данные.
Зашифрованное сообщение будет выведено в стандартный вывод, то есть в терминал. Если вы хотите сохранить зашифрованное сообщение в файл, то используйте конструкцию:
echo
'ТЕКСТ СООБЩЕНИЯ'
| gpg -e -a -r 'ПОЛУЧАТЕЛЬ СООБЩЕНИЯ'
> ФАЙЛ_С_ШИФРОМ
Пример использования:
echo
'Я нашёл клад'
| gpg -e -a -r 'Alex Collins'
Как расшифровать файлы в GPG
Для расшифровки используется опция -d:
gpg -d test.php.gpg
Причём данные будут выведены прямо в стандартный вывод! То есть в терминал. Чтобы сохранить данные в файл используйте опцию -o, после которой укажите имя нового расшифрованного файла:
gpg -d -o test.php test.php.gpg
Либо используйте конструкцию вида:
gpg -d ЗАШИФРОВАННЫЙ_ФАЙЛ > РАСШИФРОВАННЫЙ_ФАЙЛ
Пример:
gpg -d test.php.gpg > test.php
Вроде это тоже нормально работает (для текстовых файлов уж точно).
GPG: Невозможно ввести пароль после неправильной попытки
При симметричном шифровании пароли кэшируются, чтобы не нужно было вводить много раз один и тот же пароль. Не знаю, как это соотносится с безопасностью, но можно сильно попасть впросак, если ввести неверный пароль — при последующих попытках открыть этот же файл, система вместо того, чтобы спрашивать у вас новый вариант, будет использовать кэшированную версию, то есть просто будет выдавать ошибку:
gpg: decryption failed: Недопустимый алгоритм симметричного шифрования
Чтобы побороть эту ситуацию, нужно явно указать не использовать кэш, для этого имеется опция --no-symkey-cache, пример использования:
gpg -d --no-symkey-cache test.php.gpg
Как посмотреть получателей зашифрованного в GPG файла
Если вы не хотите расшифровывать файл (а может быть просто не можете из-за отсутствия приватного ключа), но хотите посмотреть, кому он предназначен (это можно сделать даже для зашифрованных файлов, если специально не зашифрованы получатели как это показано выше), то для этого имеется опция --list-only.
Вместе с этой опцией нужно использовать опцию -d, а также указать проверяемый файл, пример:
gpg --list-only -d test.php.gpg
Может быть выведено:
gpg: зашифровано 2048-битным ключом RSA с идентификатором 0E5137A9EF8E8F15, созданным 2019-03-22
Или без локализации:
gpg: encrypted with 2048-bit RSA key, ID 0x0E5137A9EF8E8F15, created 2019-03-22
Это сообщение означает, что выполнено ассиметричное шифрование для пользователя Alex Collins
При симметричном шифровании сообщение будет таким:
gpg: сеансовый ключ зашифрован по AES
gpg: зашифровано одной фразой-паролем
gpg: зашифровано 2048-битным ключом RSA с идентификатором 0E5137A9EF8E8F15, созданным 2019-03-22
Или без локализации:
gpg: AES encrypted session key
gpg: encrypted with 1 passphrase
gpg: encrypted with 2048-bit RSA key, ID 0x0E5137A9EF8E8F15, created 2019-03-22
Причём вплоть до 2019 года, почти до самых последних версий gpg, у опции --list-only есть интересный баг: если на компьютере, где выполняется проверка, имеется приватный ключ пользователя, кому предназначен данный файл, то не выводиться ничего. Это может запутать, поскольку также ничего не выводиться в случае, если получатель зашифрован. Я нашёл упоминание об этой ошибке в 2013 году (смотрите список источников), и она до сих присутствует в 2019 в самой последней версии Tails. Чтобы обойти этот баг, используйте опцию -v, получается примерно следующая команда:
gpg --list-only -v
-d test.php.gpg
Будет выведено что-то вроде:
gpg: public key is 0x0E5137A9EF8E8F15
И уже по идентификатору публичного ключа можно найти пользователя.
В самых последних версиях gpg (например в Arch Linux и BlackArch) эта ошибка уже исправлена. То есть --list-only работает именно так, как это интуитивно ожидается и костыля в виде опции -vбольше не требуется.
Выбор приватного ключа для расшифровки
Как мы уже выяснили, даже зашифрованная информация в GPG содержит имя получателя (если оно специально не удалено). Поэтому процедура расшифровки файлов понятна: GPG смотрит получателя и использует его приватный ключ для извлечения данных.
А как это происходит в случае, если получатель зашифрован? В этом случае GPG просто перебирает все имеющиеся в системе приватные ключи и смотрит, какой из них подойдёт (такой своеобразный брут-форсинг).
Вы можете помочь программе используя опцию --try-secret-key ИМЯ, вместо ИМЕНИ нужно указать идентификатор пользователя с закрытым ключом, для которого зашифрован файл.
Думаю, вы уже понимаете, что зашифрованная информация содержит как минимум такие части как: 1) идентификатор получателя, 2) «полезная нагрузка» - сами зашифрованные данные. Идентификатор получателя может быть поддельным — то есть для шифрования использовались публичные ключи одного лица, а в качестве получателя указано другое лицо. Это приведёт к тому, что попытка расшифровки в GPG завершиться неудачей.
Для расшифровки таких файлов с поддельным ключевым ID, используется опция --try-all-secrets. Как можно понять из названия самой опции, она не будет смотреть на ключевой идентификатор в сообщении, а будет пробовать все секретные ключи, пока не найдёт правильный для расшифровки. То есть поведение будет в точности таким же, как если бы получатель (или получатели) не были указаны вовсе. То есть как если бы данные шифровались с использованием опций --throw-keyids или --hidden-recipient.
Как в GPG подписать файл
Как было сказано выше, для подписи файла используется приватный ключ. Поскольку приватный (секретный) ключ хранится (очевидно же) в секрете владельцем, то исходя из предположения, что никто кроме владельца не имеет доступ к приватному ключу, мы можем быть уверены, что файл, который подписан этим приватным ключом, исходит от этого определённого лица. Если файл как либо после подписи был изменён, то эта подпись перестаёт быть верной (валидной) для данного файла. Поэтому, проверка подписи позволяет гарантировать:
- файл исходит от того лица, которое её подписало;
- файл не был как либо модифицирован с момента подписи.
Для проверки подписи определённого лица у вас должен быть публичный ключ этого лица.
Для подписи файла используется опция -s или её более длинный вариант --sign. Если у вас на компьютере только один приватный ключ, то он будет выбран автоматически.
Если у вас на компьютере несколько приватных ключей, то нужно использовать также опцию -u ИМЯ или её более длинный вариант --local-user ИМЯ. Эта опция перезаписывает значение --default-key.
Кстати про --default-key. Она устанавливает ключ, который будет использоваться по умолчанию, чтобы его не нужно было вводить каждый раз.
Итак, я хочу подписать файл test.php, приватным ключом пользователя Alex Collins, тогда моя команда следующая:
gpg -u 'Alex Collins'
-s test.php
Будет создан файл с расширением .gpg, в моём случае это файл test.php.gpg. Этот файл включает И исходный файл, И его цифровую подпись. Новый файл в бинарном формате — то есть даже если ранее это было сообщение или текстовый файл, то он становится нечитаемым.
С помощью опции --clear-sign (другое её написание --clearsign) можно создать файл в виде обычного текста.
gpg -u 'Alex Collins'
--clear-sign test.php
Будет создан файл test.php.asc, который будет содержать исходный текст после -----BEGIN PGP SIGNED MESSAGE-----
Текстовое содержимое можно извлечь без сторонних инструментов, а для проверки подписи всё равно нужна программа PGP.
В реальной жизни публичные программы и другие файлы намного чаще распространяются в виде пары: исходный файл программы + отдельно подпись. Можно догадаться почему: большинству пользователей до фонаря эта электронная подпись и они не смогли бы извлечь файлы из .gpg формата. В принципе, их позиция понятна: какой смысл проверять подпись, если мы всё равно лично не знаем тех, кто именно подписал файл, да и тех, кто удостоверяет подлинность публичного ключа мы тоже не знаем. Разве что, можно быть уверенным, что файл действительно подписан автором программы, а не хакером, который взломал сервер, где хранятся файлы для скачивания, и что хакер не подменил файл в процессе его «путешествия» к нам на компьютер.
Так вот, чтобы делать такую пару (точнее говоря, нам нужно сделать только отдельный файл подписи — с исходным файлом вообще ничего не происходит) в PGP есть опция -b (или более длинное написание --detach-sign), которая применяется следующим образом:
gpg -u 'Alex Collins'
-b test.php
Будет создан дополнительный файл .sig (в моём случае это test.php.sig). В этом файле нет ничего, кроме цифровой подписи. Поэтому вам нужно предоставлять и оригинальный файл, и файл .sig.
Редактирования ключей GPG
Для редактирования ключа определённого пользователя выполните команду (замените 'Alex Collins' на желаемый идентификатор пользователя):
gpg --edit-key 'Alex Collins'
Ключ --gen-revoke создаёт сертификат отзыва (кстати, сертификат отзыва генерируется с самого начала, при создании пары ключей), который при распространении среди людей и серверов ключей говорит им, что ваш ключ больше не является валидным.
Для отключения или включения публичного ключа в своём собственном public key ring:
gpg --batch --edit-key USERID disable
И:
gpg --batch --edit-key USERID enable
Для смены пароля приватного ключа (замените 'Alex Collins' на ваш идентификатор пользователя):
gpg --batch --edit-key 'Alex Collins'
passwd
Изменить уровень доверия владельцу:
gpg --edit-key 'Alex Collins'
trust
Будет выведено сообщение:
Укажите, насколько Вы доверяете данному пользователю в вопросах проверки достоверности ключей других пользователей (проверяет паспорт, сверяет отпечатки ключей из разных источников и т.п.)
И вам нужно будет сделать выбор, введя одну из следующих цифр:
1 = Не знаю или не буду отвечать
2 = НЕ доверяю
3 = Доверяю ограниченно
4 = Полностью доверяю
5 = Абсолютно доверяю
Как указать идентификатор пользователя в GPG
Идентификатор пользователя можно указать различными способами:
- полное имя и фамилия
- полный адрес электронной почты
- отпечаток ключа
- полный идентификатор пользователя (имя и фамилия, а также адрес электронной почты, например Heinrich Heine <heinrichh@uni-duesseldorf.de>)
- частичное указание имени пользователя или адреса электронной почты
- другие способы (в целом их довольно много, причём, поддерживается множество операторов сравнения и тестирования условий)
Файлы GPG
Имеется несколько конфигурационных файлов для контроля определённых аспектов операций gpg. Если не сказано другое, ожидается что они размещены в домашней директории текущего пользователя.
gpg.conf
Стандартный конфигурационный файл, который gpg считывает при запуске. Он может содержать любое количество валидных длинных опций; можно не вводить начальные две чёрточки, нельзя использовать короткую запись опции. В командной строке можно изменить значение по умолчанию. Следует делать резервную копию этого файла.
~/.gnupg
Это домашняя папка по умолчанию, которая используется если не установлено другое в переменной окружения GNUPGHOME или опцией --homedir.
~/.gnupg/pubring.gpg
Публичный киринг (public keyring). Следует иметь резервную копию этого файла
~/.gnupg/pubring.gpg.lock
Файл блокировки для публичного киринга.
~/.gnupg/pubring.kbx
Публичный киринг использует различные форматы. Этот файл поделён с gpgsm. Следует иметь резервную копию этого файла. Фактически, это база данных, где хранятся все ключи. Структуру этого файла можно посмотреть командой:
kbxutil ~/.gnupg/pubring.kbx
~/.gnupg/pubring.kbx.lock
Файл блокировки для ‘pubring.kbx’.
~/.gnupg/secring.gpg
Секретный киринг используемой GnuPG версией до 2.1. Он не используется GnuPG 2.1 и более поздними.
~/.gnupg/secring.gpg.lock
Файл блокировки для секретного киринга.
~/.gnupg/.gpg-v21-migrated
Файл, показывающий, что сделан переход на GnuPG 2.1.
~/.gnupg/trustdb.gpg
Доверенная база данных. Нет нужды делать резервную копию этого файла; лучше делать резервную копию значений ownertrust, смотрите опцию --export-ownertrust.
~/.gnupg/trustdb.gpg.lock
Файл блокировки для доверенной базы данных.
~/.gnupg/random_seed
Файл, используемый для сохранения состояния внутреннего пула случайных чисел.
~/.gnupg/openpgp-revocs.d/
Директория, где хранятся предварительно сгенерированные сертификаты отзыва. Имя файла соответствует отпечатку OpenPGP ключа, для которого этот сертификат. У каждого, у кого есть доступ к этим файлам, может отозвать ваши ключи. Поэтому эти файлы нужно хранить в секрете и иметь их резервные копии.