Привет, я Виталик!
Сегодня я узнал как работать с gpg и мне это понравилось. Хочу поделиться и получить обратную связь от более опытных шифровальщиков клуба, я мог что-то понять не правильно и хотелось бы это узнать как можно раньше :)
TLDR
gpg --full-generate-key
- генерация ключейgpg -k
- просмотр публичных ключей в системеgpg -K
- просмотр приватных ключей в системеgpg --export -o my_public_key EEEA6C0F1CD21830AA362B1BBA779CDC6363EC88
- экспорт публичного ключаgpg --export-secret-keys -o my_secret_key
- экспорт приватного ключаgpg import /path/to/key
- импорт ключа (как публичного, так и приватного)gpg -e -r vita@kataev.pro passwords.txt
- шифрование файла password.txt в бинарном видеgpg -e --armor -rvita@kataev.pro password.txt
- шифрование файла password.txt в ascii форматеgpg -c password.txt
- симметричное шифование файла password.txt. Спросит пароль.gpg -d password.txt.gpg
- дешифровка файла как симметричного, так и ассимитричного шифрования)gpg --sign password.txt
- подпись файла (бинарная подпись)gpg --clear-sign password.txt
- подпись файла (ascii подпись)gpg --detach-sign password.txt
- подписание файла (файл подписи в отдельном файле от файла с данными)gpg --verify password.txt.sig
- проверка подписи
Зачем шифровать данные?
Причин может много, например вы хотите зашифровать свою заметку с паролями от соц сеточек, что бы никто не смог их прочитать, спрятать файл от чужих глаз или передать приватные данные по незащищенному каналу связи. Ну или банальная паранойя. Тут каждый найдет для себя причины зачем, я больше хочу сосредоточиться на вопросе "как?"
Ассиметричное vs симметричное шифрование
Наверника вы слышали про симметричные и ассиметричное шифрование. Не погружаясь в теорию просто скажу, что при симметричном шифровании есть один секрет на шифрование и дешифрование данных. Например, вы создали zip архив с паролем. Вот это как раз симметричное шифрование. У него есть ряд серьезных недостатков:
- Если вы хотите передать шифрованные данные разным людям, вам нужно хранить (безопасно) множество секретов для каждого получателя.
- Если вы никогда не виделись с получателем может быть достаточно трудно договориться о секрете. Есть математические методы, но сейчас не про это
Поэтому умные люди подумали и придумали ассиметричное шифрование. В этом случае секрет разделяется на 2 части: публичную и приватную. Приватную знаете только вы и надежно ее храните, а публичную знаю все (есть даже спец. серверы, которые хранят публичные gpg ключи, но об этом дальше). С помощью публичной части происходит шифрование, а с помощью приватной части дешифрование.
Шифрование vs подписание
Нужно разделять 2 этих понятия. Тут все просто: при помощи шифрования полезные данные превращаем в абра-кадабру и без секрета никто не сможет их прочитать
Подписание же в свою очередь решает задачу проверку подлинности полученных данных. То есть позволят гарантировать, что вот эта вот pdf с 2НДФЛ была действительно сгенерирована вашим бухгалтером на работе и никто по дороге до банка не дописал нули к зарплате, что бы одобрили кредит на вторую Бэху.
Установка gpg
Ладно хватит скучной теории, погнали к практике! Я лично устанавливал gpg на Mac и на arch linux.
Для установки на mac os я пользовался brew
brew install gpg2
На арч ставил через pacman
sudo pacman -S gnupg
Для венды есть инсталлятор на официальном сайте, там же есть бинарники на все платформы, можно просто скачать их, дописать в PATH и пользоваться.
После установки проверьте командой gpg --version
. У меня получился такой выхлоп
➜ ~ gpg --version
gpg (GnuPG/MacGPG2) 2.2.34
libgcrypt 1.8.9
Copyright (C) 2022 g10 Code GmbH
License GNU GPL-3.0-or-later <https://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Home: /Users/vita/.gnupg
Supported algorithms:
Pubkey: RSA, ELG, DSA, ECDH, ECDSA, EDDSA
Cipher: IDEA, 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH,
CAMELLIA128, CAMELLIA192, CAMELLIA256
Hash: SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224
Compression: Uncompressed, ZIP, ZLIB, BZIP2
Если будет что-то подобное, значит gpg поставили корректно, можно продолжать
Генерация ключей
Теперь нам нужно сгенерировать наш публичный и приватный ключ. Делается это командой gpg --full-generate-key
. Там будет простой мастер, который спросит тип ключа (я выбрал RSA 4096), имя, почту и комментарий для ключа. Так же спросят пароль от ключа. Это дополнительная степень безопасности если вдруг кто-то получится доступ к вашему ключу ему (и вам тоже) надо будет ввести этот самый пароль. Причем он нужен только на критичные действия, такие как экспорт ключа, подписание и т.п.
Посмотреть свои ключи можно командой gpg -k
которая покажет все публичные ключи в системе и gpg -K
для просмотра приватных ключей
Давайте рассмотрим выхлоп этой команды подробнее, некоторые данные от туда нам понадобятся в будущем. Пример описания одного ключа
➜ gpg -k
/Users/vita/.gnupg/pubring.kbx
------------------------------
pub rsa4096 2020-11-30 [SC]
EEEA6C0F1CD21830AA362B1BBA779CDC6363EC88
uid [ultimate] Vitaliy Kataev <vita@kataev.pro>
sub rsa4096 2022-05-05 [E] [expires: 2026-05-05]
sub rsa4096 2020-11-30 [E]
- pub - значит публичный (там может быть sec - это приватный)
- rsa4096 - алгоритм
- 2020-11-30 - дата генерации ключа
- EEEA6C0F1CD21830AA362B1BBA779CDC6363EC88 - это id ключа. Он нам в будущем понадобится
- uid - в этой строчке находятся идентификационная информация ключя (имя, почта, комментарий)
- ultimate - это степень доверия ключа. Так как ключ был сгенерирован gpg прямо на этом компьютере то он автоматически становится ultimate. Возможны варианты (из документации). Мы сами выставляем эти опции при редактировании ключа
- 1 = I don't know or won't say (undefined)
- 2 = I do NOT trust (never)
- 3 = I trust marginally
- 4 = I trust fully
- 5 = I trust ultimately
- sub - это дополнительные ключи. То есть у нас выше "мастер" ключ и мы можем генерировать sub ключи. Я этим не пользовался, если есть что добавить - го в комментарии
Публикация публичного ключа
gpg может опубликовать ваш публичный ключ на keyserver. Вы можете воспользоваться как вашим приватным сервером, так и открытым, например https://keyserver.ubuntu.com/ или https://keys.openpgp.org/
Я не публиковал свой ключи явно что бы защититься от спама, но дока подсказывает, что делается это командой gpg --keyserver certserver.pgp.com --send-key vita@kataev.pro
, где
- --keyserver certserver.pgp.com - keyserver на котором будет опубликован ключ
- --send-key vita@kataev.pro - какой ключ опубликовать. Тут может быть как почта, так и id ключа
Экспорт и импорт ключей
Что бы экспортировать публичный ключ (например передать кому-нибудь) можно воспользоваться командой gpg --export -o my_public_key EEEA6C0F1CD21830AA362B1BBA779CDC6363EC88
которая создаст файл my_public_key
для ключа EEEA6C0F1CD21830AA362B1BBA779CDC6363EC88
Что бы экспортировать приватный ключ можно воспользоваться командой gpg --export-secret-keys -o my_secret_key
. Тут все аналогично, даже id ключа тот же, что очень удобно.
Для импорта ключа воспользуемся командой gpg import /path/to/key
. Ключ может быть как публичным, так и приватным. GPG сам разберется что куда импортировать.
Ассиметричное шифрование
Давайте уже что-нибудь пошифруем! Допустим у меня есть файл passwords.txt где я храню свои пароль от соцсеточек. Как мне его зашифровать? Да очень просто gpg -e -r vita@kataev.pro passwords.txt
рядом появится файл password.txt.gpg
. Вот и все, теперь можно удалять оригинальный файл password.txt
потому что у нас есть его зашифрованная копия!
Разберем ключи
- -e - флаг encrypt
- -r vita@kataev.pro - это ключ (публичный, помним, да?), которым шифровать. Можно указать как email, так и id ключа
- password.txt - исходны файл, который хотим зашифровать
Тут интересный момент, что файл бинарный. Передать его в мессенджерах не очень удобно, к счастью есть флаг --armor который говорит gpg использоваться ASCII формат для выходного файла gpg -e --armor -r vita@kataev.pro password.txt
. Эта команда создаст файл password.txt.asc
который уже можно посмотреть. Выглядеть он будет примерно так
-----BEGIN PGP MESSAGE-----
hQIMA00QKEJlNSTbAQ/+LPD7lZ1oaOgXnOGec4BBpEuYXJWbWBBDKEWfv1tKeYM3
OlBQZxxBRxSQHB8wpW7X0ay7T+3ZQ3+yluViQwB8ZABKHL8VvI3XSPaEBIHiG7PE
iaa+gbSh3urYdmkl4Bz0CIh6oaVfUak1qFUcQ0eQMf72ZnpmcyWpybQxZEhiTmue
nrNRzOid7tEtSVN22wS7MYzYJwnAHsftrZMXXVqhF2dlWrVkIYUu7dEAzu6TeZJ5
iTrPAylhku616lo/dW/IwlViMg7Wb+ixKmSJ3/QXPHpAriZnEyudpH8mCJSALM1i
1CCRenQW1XPdqV+pQ5cR/bIkTqPwKlA1yoZ7CnlcXoqdrrOvi5EML8OpzAsMvhDV
MJ3wtJDvmuqPcfq3orQlh+LpacZZ8hul0oh14VgG/rpzt6BgXaP3iBygTCXOih1C
q0l7DKYqwv+cy9/qnFR+CNNR4BZ+vW8AVulCvlE69WBlDwyKBGhn3eLTIE0Ou7qA
lVjw2iAwF+gI6/+2HihqHtk/UD6MF1WgoLK77SYDX4VcuOxQGItQnBF2k4qKLIcf
HtyXSgPZfM2ziTpqdmSosq4iAlnZdcUGzBm0h7pCSATrUdZUwvMgSHC6w2GpKRGp
rzGU/3dqwxx+noPj0RY0uAqr3GZi+QA6NN5Gcim2fLVsvPSeSgeyvuxD/d+a1JnS
XAEMlSdq2Oyuphc4DvyXlfFhK3uuwF+hf7kGZ93DMPkml3KFlZ9lSYuljqxHcplJ
hm5IzuSPqjYcotz5J+D2j4SgxI+5UhR04kOOl85kivnPGuIASBIj2A7E1lUn
=E2DL
-----END PGP MESSAGE-----
Такой текст можно передать в мессенджере и расшифровать его сможет только обладатель приватного ключа.
Окей. У нас получилось сделать из полезных данных абра-кадабру. Как же мне теперь вернуть все обратно? Для этого можно воспользоваться командой gpg -d password.txt.gpg
, где
- -d - флаг decrypt
- password.txt.gpg - зашифрованный файл (причем gpg сам разберется с форматом фала. Примет как бинарный, так и ascii формат)
➜ gpg -d password.txt.gpg
gpg: encrypted with 4096-bit RSA key, ID 4D102842653524DB, created 2022-05-05
"Vitaliy Kataev <vita@kataev.pro>"
vk - kek_lol_solidol
➜ gpg -d password.txt.asc
gpg: encrypted with 4096-bit RSA key, ID 4D102842653524DB, created 2022-05-05
"Vitaliy Kataev <vita@kataev.pro>"
vk - kek_lol_solidol
Для коротких сообщений можно воспользоваться repl gpg. Например, мы хотим зашифровать короткое сообщение. Сделать можно так
- выполняем команду
gpg -e --armor -r vita@kataev.pro
- пишем сообщение. Оно может быть многострочным. Как только закончили нажимаем ctrl+d
- тут же получаем ascii представление зашифрованных данных. Дальше его можно тут же скопировать и отправить в мессенджере. Я например так часто передаю какие-нибудь длинные пароли сам себе через Saved messages в телеге.
Пример:
➜ gpg -e --armor -r vita@kataev.pro
првиет
мир
-----BEGIN PGP MESSAGE-----
hQIMA00QKEJlNSTbAQ//VVhJjdLsXN5uXnCbQOPYGbUYtwh3Jfv/6cKIMjcum307
uuiAZEFoE3GroBtHlyX0Aa4wqxxRpHwNBPyXHaKwVYJUnfZq5eqrdYkC5PZd5srd
pqiZJlEL4qH/sT4YzlnIXEpZ47RuJ/gCkDVcmJtRp2GOK47730aHrF1hsPSs7yFi
WHynXGoB4l1Rr2gDk91QzvQ4CazjSQ3IJe7o/UzZLzNOLzVyVNjpmeEghCWj3q4K
K1RFD4nyN7ZfzFN64RTTFIG+wCANh7Ap35VjeaR5ym4C9x8skXp1FWfUn2neSuHF
okHVVmqZ5syoK77dBR5EAH58CnxRk1blbLjwFY1x4shTLhC4GYPKX/g7dOkFSxRS
LmRgBjlsbjlMUk+rqyNpO5SNjkdVggEGnKiprBqyXKDsvML7zfT/nTvb/2zm35od
ToPjbYxADCdKpRP9Pjc9sHJtOE9Lfl2owV+PwtraB6ypmt39gwO9qlj2AmemJ2t+
zvP4lQ7sAui3lkQdHhC69r4W32g5xWA6izF8z/ULrf/dXi3K9aBzydyeK48nY3rK
tWCqSm64FM9YiNgVyqGDCSTz8VGxMuUC9bAbycGuVCVGIrAVnw5qMgPBdCc+JKln
Nk0/LvhSffoBNwcwMZx0FbSaUULDhxiGmykJJgzE4IiUQ/rpJXMeAzVXHkJQHBrS
UgG2kIMn982D4TCDMzOxUJwvOQ4dYptdxDattBLbSuojcfLYtgEdFomCkRA6602t
DGaLw14eKo7x875nNfRIiOXeMtv+BiB3WhJCnHn8SpXDy1Q=
=QW0r
-----END PGP MESSAGE-----
Аналогично можно и расшифровать. Выполняем команду gpg -d
и дальше gpg будет ждать от нас данные. Вставляем сообщение и тут же видим результат. Причем gpg не завершает работу после расшифровки одного сообщения. Он продолжает ждать. Что бы его завершить жмем ctrl+c
➜ gpg -d
-----BEGIN PGP MESSAGE-----
hQIMA00QKEJlNSTbAQ//VVhJjdLsXN5uXnCbQOPYGbUYtwh3Jfv/6cKIMjcum307
uuiAZEFoE3GroBtHlyX0Aa4wqxxRpHwNBPyXHaKwVYJUnfZq5eqrdYkC5PZd5srd
pqiZJlEL4qH/sT4YzlnIXEpZ47RuJ/gCkDVcmJtRp2GOK47730aHrF1hsPSs7yFi
WHynXGoB4l1Rr2gDk91QzvQ4CazjSQ3IJe7o/UzZLzNOLzVyVNjpmeEghCWj3q4K
K1RFD4nyN7ZfzFN64RTTFIG+wCANh7Ap35VjeaR5ym4C9x8skXp1FWfUn2neSuHF
okHVVmqZ5syoK77dBR5EAH58CnxRk1blbLjwFY1x4shTLhC4GYPKX/g7dOkFSxRS
LmRgBjlsbjlMUk+rqyNpO5SNjkdVggEGnKiprBqyXKDsvML7zfT/nTvb/2zm35od
ToPjbYxADCdKpRP9Pjc9sHJtOE9Lfl2owV+PwtraB6ypmt39gwO9qlj2AmemJ2t+
zvP4lQ7sAui3lkQdHhC69r4W32g5xWA6izF8z/ULrf/dXi3K9aBzydyeK48nY3rK
tWCqSm64FM9YiNgVyqGDCSTz8VGxMuUC9bAbycGuVCVGIrAVnw5qMgPBdCc+JKln
Nk0/LvhSffoBNwcwMZx0FbSaUULDhxiGmykJJgzE4IiUQ/rpJXMeAzVXHkJQHBrS
UgG2kIMn982D4TCDMzOxUJwvOQ4dYptdxDattBLbSuojcfLYtgEdFomCkRA6602t
DGaLw14eKo7x875nNfRIiOXeMtv+BiB3WhJCnHn8SpXDy1Q=
=QW0r
-----END PGP MESSAGE-----
gpg: encrypted with 4096-bit RSA key, ID 4D102842653524DB, created 2022-05-05
"Vitaliy Kataev <vita@kataev.pro>"
првиет
мир
^C
gpg: signal Interrupt caught ... exiting
Вот так все просто!
Симметричное шифрование
gpg так же поддерживает и симметричное шифрование. Для этого воспользуемся командой gpg -c password.txt
дальше gpg спросить пароль и его подтверждение. После ввода пароля точно так же получим файл password.txt.gpg
. repl и флаг --armor работают аналогично. Расшифровка так же происходит аналогично, только вместо приватного ключа gpg спросит пароль.
Подписание
Как я уже упоминал выше подписание требуется когда мы хотим удостоверить что данные действительно принадлежат отправителю и не были изменены в процессе пересылки.
Для подписания файла есть несколько способов. Отличаются они видом получаемой подписи.
Первый - бинарный gpg --sign password.txt
. Эта команда создаст рядом файл password.txt.gpg
. Если заглянуть внутрь, то можно увидеть наши исходные данные вперемешку с бинарной подписью.
➜ cat password.txt.gpg
wcc'b
password.txtb|'vk - kek_lol_solidol
!l06+ccb|'
wccsĐROMa@zarJXB-1#oRƑM=3e?Q?T2Gqcl`7̖O8=5BVoFh%O*GyR<{
ЩQZw7 Dg_] )aD|dt1Fx[}Z^cF㠆Ѩl5Nץ9*MtSA+-u+<y Akݦ[8Q{ 儭`eIYIqV)=m7yh~(#~`z8KT$\#R$alGjߌg:"
$Kk<&8twD.gAĠRŞNh
65}@V29J<^0Lt Z"5t:\g
G<L"z1%*gO;
?b^^8}K~,zDS9i`W7*"b*(g%
В целом пользоваться этим можно и этот файл самодостаточен (то есть оригинальный файл password.txt
больше не нужен. Его содержимое есть в файле с подписью), но это не очень удобно, так как мы потеряли оригенальный вид входных данных. Может есть способ как выдрать подпись и привести исходные данные к первоначальному виду, но я его не знаю.
Следующий способ - это clear sign. Делается командой gpg --clear-sign password.txt
. Эта команда создаст файл password.txt.asc
. Если заглянуть внутрь, то можно увидеть, что мы получили нечто подобное флагу --armor, а именно ascii представление подписи.
➜ cat password.txt.asc
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256
vk - kek_lol_solidol
-----BEGIN PGP SIGNATURE-----
iQIzBAEBCAAdFiEE7upsDxzSGDCqNisbunec3GNj7IgFAmJ8za0ACgkQunec3GNj
7Ij04hAAmaUp/lQYCcMLREUKawUouSWJIsiFgANjMjHQg89NaBG/Ix9KoByo/KqY
htzdHmIcLHUlwGHNCxKuFVx+lA3t9bM6Bc+UiTSDCdRNiqFe9d3iogNBRfZx3iUw
iIQPRbDq2wdcbfjdPONMwQ1cKSfi4ewYqbSfVqTmuFWgdNkpIFYQ0pdBag55K+x2
Fn0HZT8VvTJIDAqD9yLGOVp8EDqeosuk+xiAHv9QkLDHZR5X1xyv8Eiq08awu7Sl
SqA+EeZ+nZRT7kSZiRASqyNCaNDQ6UHIwotYiVukTX1uVX46qiD90NDNZB14e+cI
nEj52/zGQDl5BjRjBoqDnJpeMi4AAod0LV0dQ9mWfi3MvoGkOVQHzRF5VEEyTx8g
ksVNauxrqNnCsZsr7zYu3RTubdF8rFNY5rSyiNz/U7lS7OyEssC+95MsD3dBRvFv
E7spEhn1QnzMvN/Y4lRsN3EhptRI21MKK2GuRExNK9QfJStz0EhWX/87T1JnX3ua
MCEtfn0La6SidqX2MuoR5rmSko0ST3vSr/DTktrwgdUJZkArbTR/UKpNuegzuk2u
W/GWtyvKltC4/JJM8nYkEuROal4KJTvj+9tYdIOmDMDQVbGjdVvCfPq/VI3QHmP5
6D3q62+uLarumxT3LavMIHzb/1EpK7gfs0NH+1VgF6rfXpzM690=
=R0Ue
-----END PGP SIGNATURE-----
Как видим в этом случае данные не бьются и мы так же получаем самодостаточный файл. Это намного удобнее предыдущего способа, но все же он ломает изначальный файл. Если формат файла важен, например, это doc или pdf файл, то мы его сломаем.
Плавно переходим к 3 способу - detach sign. Выполняется командой gpg --detach-sign password.txt
. gpg рядом создаст файл password.txt.sig
и если заглянуть внутрь, то там увидим только подпись. То есть этот файл не самодостаточен и используется в паре с оригинальным файлом. В этом случае мы не ломаем оригинальный файл и можно подписывать pdf, doc и любый другие файлы критичные к формату.
Теперь у нас есть подписанный файл (или файл с подписью). Как нам (или нашему получателю) проверить, что файл не изменился по дороге? Очень просто. Для это воспользуемся командой gpg --verify password.txt.sig
, где
- --verify - флаг проверки подписи
- password.txt.sig - файл подписи. Если этот файл получен через detach sign, то рядом должен лежать оригенал файла, так как внутри файла подписи нет контента файла
Пример:
➜ gpg --verify password.txt.sig
gpg: assuming signed data in 'password.txt'
gpg: Signature made Thu May 12 12:09:21 2022 MSK
gpg: using RSA key EEEA6C0F1CD21830AA362B1BBA779CDC6363EC88
gpg: Good signature from "Vitaliy Kataev <vita@kataev.pro>" [ultimate]
Как видим gpg доволен подписью показал кто, подписывалписывал файл. Если я сейчас отредактирую файл password.txt, то получим следующее
➜ gpg gpg --verify password.txt.sig
gpg: assuming signed data in 'password.txt'
gpg: Signature made Thu May 12 12:09:21 2022 MSK
gpg: using RSA key EEEA6C0F1CD21830AA362B1BBA779CDC6363EC88
gpg: BAD signature from "Vitaliy Kataev <vita@kataev.pro>" [ultimate]
То есть gpg увидел подпись, но вот она ему не понравилась, что говорит о том, что файл или подпись по дороге поломались и контенту файла доверять не стоит.
Заключение
В заключении хочу сказать, что я не настоящий шифровальщик, я просто gpg в интетике нашел, поэтому воспринимать это всерьез не стоит. Я просто показал, что я узнал на днях и решил поделиться с вами. Если тут есть какие-то грубые ошибки, которые могут повлиять на безопасность, то с удовольствием жду критики в комментариях.
Привет!
Замечу несколько интересных моментов.
Для экспериментов можно попробовать сгенерировать ключ так:
gpg --expert --full-gen-key
. Так меню выбора типа ключа увеличивается до максимума. Но предупрежу! Флаг "--expert
" там не просто так. Используй на свой страх и риск.Эллептическая криптография (ECC) прекрасна и позволяет сэкономить на размере ключа. В некоторых версиях она может быть скрыта и появиться только при использовании флага "
--expert
", но это из-за отсутствия совместимости. Попробуй сравнить размер своего RSA4096 ключа и размер ключа Werner Koch --- создателя gnupg.У меня в ~/.gnupg/gpg.conf есть строчка "
default-recipient-self
". Эта приписка при каждом асимметричном шифровании добавляет мой ключ в "получателей" и я в будущем сам же смогу прочесть письмо, которое написал.Вот такая штука есть на основе gpg - https://www.passwordstore.org/
Я использовал gpg последний раз лет 10 назад для демонстации студентам принципов шифрования и цифровой подписи. Тогда как раз эстонская ID-карта и электронное голосование были вновинку, а при помощи gpg было удобно на чуть более низком уровне по шагам препарировать процесс и показать как всё устроено.
Мы даже писали простейший емейл-клиент, который работал как-то примерно так:
<user>_pk
user_pk
на домене yourdomain.com и если находил — то шифровал с её помощью содержимое емейла, запрашивал твой приватный ключ для подписи, клал контент в аттачмент, подпись — в сабж письма и отправлял получателю.user_pk
на домене mydomain.com для файла в аттачменте, а потом запрашивал приватный ключ для его расшифровки.То есть мы изобрели DKIM :)
Но это всё конечно было совершенно неюзабельно, зато интересно.
Увы, других (реальных) жизненных ситуациях может потребоваться использовать gpg я так и не нашел и никогда больше им не пользовался.
Для примитивных задач (спрятать от чужих глаз или передать что-то через интернеты) подойдёт zip-архив с паролем. Для общения — мессенджеры с e2e шифрованием. В корпоративном мире — там свои заморочки по шифрованию разделов жёсткого диска специальными утилитами.
А как ключи безопасно передавать? В том же Арче, как их запихать в gnome-keyring, а оттуда в Thunderbird (или в обратную сторону), а потом перекинуть в клиент Delta Chat?