[ @gpg @kgpg ]
Подразумевается, что концепция ключей шифрования уже понятна:
Для порядка уточним, что в 1991-ом году появилась программа для шифрования сообщений «PGP» (Pretty Good Privacy), что переводится как «Достаточно надежная конфиденциальность», и да, в этом есть ирония. В 1999 году появилась свободная реализация этой «PGP» по стандартам OpenPGP, которую назвали «GnuPG» (GNU Privacy Guard), сокращённо «GPG». Сегодня все по-умолчанию пользуются «GPG», само слово стало синонимом технологии шифрования файлов и почтовых сообщений с помощью публичного и личного ключа.
Есть консольная утилита:
- gpg (GnuPG, по-умолчанию установлен в системе)
- если постоянно надо взаимодействовать с ключами, может быть удобен необязательный gpg-agent (GNU privacy guard)
Есть GUI-утилиты:
- kgpg (графический интерфейс к консольной утилите 'gpg', тоже установлен в Debian по-умолчанию, https://zenway.ru/page/kgpg )
- kleopatra (в основе всё то же самое, что и у KGpg, https://habr.com/ru/post/551138/ )
В KDE было бы логично управлять ключами gpg в KWallet, но он для такого не предназначен.
Установка
Обычно это входит в стандартный набор, поэтому можно даже начать с проверки версии:
gpg --version && kgpg --version
Создать новую связку ключей
gpg --generate-key
Пойдут запросы на информацию об авторе ключей — надо указать имя автора и емайл. Учесть, что далее они будут повсюду отображаться в открытом виде.
Выбор размера ключа и алгоритма его шифрования всегда зависят от окружения, в котором будущий ключ будет использоваться. По-умолчанию принято генерировать ключи с размером 2048 по алгоритму «RSA & RSA». Может показаться, что чем больше эти значения, тем лучше, но есть системы/сервера, в которых тип и макс. значения шифровальных ключей ограничены по каким-то соображениям — это надо выяснять заранее.
В базе данных появится информация про новый ключ. Позже эту информацию можно будет экспортировать в два отдельных файла:
- «private key» — его надо хранить в секрете, на флэшке, в сейфе, в банке, на Аляске.
- «public key» — его можно раздавать кому угодно, в том числе и опубликовать у себя на сайте.
Наладить постоянный экспорт содержимого каталога /~/.gnupg
Посмотреть существующие ключи
gpg --list-keys
Если в системе не зарегистрирован ни один ключ, в ответ вернется тишина.
Файл-БД для хранения всех gpg-ключей:
/home/$USER_NAME/.gnupg/pubring.kbx
Можно прочитать его содержимое и так:
gpg --list-secret-keys --keyid-format LONG
- “sec” (secret) укажет количество бит в шифре (например, rsa2048), ID ключа, дату его создания и код “[SC]” или “[E]” или “[A]”:
- E = ready for encrypt/decrypt (decrypt a message you received encrypted for you to read)
- S = ready for sign (sign data. For example a file or to send signed e-mail)
- C = ready for certify (sign another key, establishing a trust-relation)
- A = ready for authentication (log in to SSH with a PGP key; this is relatively new usage).
- key fingerprint.
- “uid” — ID (имя) владельца ключа.
- “ssb” — секретный subkey ключа, который используется для encrypt/decrypt.
Посмотреть только публичные ключи
gpg --list-public-keys
Будет прочитан файл /~/.gnupg/pubring.kbx
Посмотреть только личные ключи
gpg --list-secret-keys
Будет прочитан файл /~/.gnupg/pubring.kbx
Посмотреть определённый ключ
gpg --fingerprint $USER_EMAIL
Значением переменной $USER_EMAIL может быть и полное имя, и его часть, или (любая) часть указанного при создании емайла. Разумно указывать полностью емайл, чтобы не ошибиться.
Отредактировать определённый ключ
gpg --edit-key $USER_EMAIL
Здесь тот самый момент, когда GUI-приложение (KGpg или Kleopatra) может быть удобнее. Но и из консоли можно делать всякое, то же добавление/удаление фотографии владельца. Да, в файл ключа можно добавить фотографию. Она влияет на итоговый размер файла, поэтому должна быть маленькой, ч/б и не более 100х100 пикселей.
Удалить определённый ключ
gpg --delete-keys $USER_EMAIL
Также работает команда --delete-key
$USER_EMAIL может быть и полное имя, и его часть, или (любая) часть указанного при создании емайла.
Если надо удалить связку ключей, надо сперва использовать опцию --delete-secret-keys
Всегда надо учитывать, что после удаления ключа открыть файлы/сообщения, которые были им зашифрованы, будет невозможно.
Экспортировать ключи в plain text
Ещё это называют ASCII format, но суть одна — содержимое файлов с ключами можно буквально экспортировать из системной базы данных в текстовые файлы. Личный ключ, конечно, нельзя никому показывать, а публичный можно кому-то послать в виде файла или просто открытым текстом.
Экспортировать публичный ключ
- Перейти в каталог, в котором будем хранить ключи
- gpg --armor --output $PUBLIC.key --export $USER_EMAIL
После экспорта можно сразу проверить содержимое нового файла:
cat public.key
Экспортировать личный ключ
- Перейти в каталог, в котором будем хранить ключи
- gpg --output $PRIVATE.key --export-secret-key $USER_EMAIL
Здесь опция armor точно не нужна, и даже итоговое название файла хорошо бы придумать поскучнее.
Импортировать ключи в систему
Восстановить весь каталог с ключами
Обычно это делается после переустановки системы. Надо просто достать из бэкапа весь каталог ‘/~/.gnupg’ и целиком скопировать его в новое окружение. Всё подхватится автоматически.
Также можно перетащить содержимое этого каталога на новый компьютер.
Восстановить/установить ключи по-отдельности (импорт)
- Перейти в каталог с бэкапом своих ключей. Условно там находятся два файла — “public.key” и “private.key”.
- Выполнить импорт:
- gpg --batch --import private.key
- gpg --import public.key
Проверить существующие ключи.
Установить новые
Предположим, что кто-то прислал нам свой ключ в файле “external_public.key”
gpg --import external_public.key
Если по каким-то причинам надо импортировать личный ключ (свой, конечно), то команда та же, просто будет предложено сообщить и пароль.
Зашифровать файл с помощью ключа GPG
Зашифруем условный файл Confeta.txt
gpg --encrypt --recipient $USER_EMAIL --output Confeta_Encoded.txt.enc Confeta.txt
Если в системе есть только один личный ключ, команда будет проще:
gpg --encrypt --sign --output Confeta_Encoded.txt.enc Confeta.txt
Расшифровать файл с помощью ключа GPG
Расшифруем условный файл Confeta_Encoded.txt.enc
gpg --decrypt Confeta_Encoded.txt.enc > 123.txt
На диске появится новый файл 123.txt, а также будет выведено сообщение о ключе, которым файл был зашифрован. Он же будет использован для декодирование.
Настройка KGpg
При первом запуске KGpg будет предложено указать расположение исполняемого файле GnuPG
/usr/bin/gpg2
и будет создан конфигурационный файл GnuPG
/~/.gnupg/gpg.conf
Запрет открывания KGpg в трее
KGpg запускается в трее, и при первом запуске возникнет ложное ощущение о том, что ничего не происходит. Развернуть «Системный лоток», тыкнуть по иконке «KGpg» — откроется окно «Key Management».
Настройка
> Настроить KGpg
> Misc
> Applet & Menus
> System Tray Applet
Убрать галочку «Show system tray icon».
Отображение ключей в KGpg
В системе уже наверняка есть несколько ключей, которые пришли вместе со всяким ПО — они и отобразятся. Принадлежность некоторых из них будет понятна по названию, другие называются по имени их авторов и где они используются совершенно непонятно. Их можно проигнорировать.
Можно скрыть отображение этих «системных» ключей — останутся только свои (если есть).
Вид > Поставить галочку «Show Only Secret Keys» (Только закрытые ключи)
Группирование ключей в KGpg
Можно разнести ключи по группам, если создано ключей с десяток.
Закатать в группы можно только те ключи, которые помечены Full Trust — это ограничение настраивается одной галочкой.
Делается это так:
- выделить нужные ключи одиночными кликами
- Groups > Create group…
В итоге будут отображаться все ключи А ТАКЖЕ условные группы, которые можно раскрыть/свернуть.