Заметка про gpg. Шифруем свои данные.

 Публичный пост
12 мая 2022  1566

Привет, я Виталик!

Сегодня я узнал как работать с gpg и мне это понравилось. Хочу поделиться и получить обратную связь от более опытных шифровальщиков клуба, я мог что-то понять не правильно и хотелось бы это узнать как можно раньше :)

TLDR

  1. gpg --full-generate-key - генерация ключей
  2. gpg -k - просмотр публичных ключей в системе
  3. gpg -K - просмотр приватных ключей в системе
  4. gpg --export -o my_public_key EEEA6C0F1CD21830AA362B1BBA779CDC6363EC88 - экспорт публичного ключа
  5. gpg --export-secret-keys -o my_secret_key - экспорт приватного ключа
  6. gpg import /path/to/key - импорт ключа (как публичного, так и приватного)
  7. gpg -e -r vita@kataev.pro passwords.txt - шифрование файла password.txt в бинарном виде
  8. gpg -e --armor -rvita@kataev.pro password.txt - шифрование файла password.txt в ascii формате
  9. gpg -c password.txt - симметричное шифование файла password.txt. Спросит пароль.
  10. gpg -d password.txt.gpg - дешифровка файла как симметричного, так и ассимитричного шифрования)
  11. gpg --sign password.txt - подпись файла (бинарная подпись)
  12. gpg --clear-sign password.txt - подпись файла (ascii подпись)
  13. gpg --detach-sign password.txt - подписание файла (файл подписи в отдельном файле от файла с данными)
  14. gpg --verify password.txt.sig - проверка подписи

Зачем шифровать данные?

Причин может много, например вы хотите зашифровать свою заметку с паролями от соц сеточек, что бы никто не смог их прочитать, спрятать файл от чужих глаз или передать приватные данные по незащищенному каналу связи. Ну или банальная паранойя. Тут каждый найдет для себя причины зачем, я больше хочу сосредоточиться на вопросе "как?"

Ассиметричное vs симметричное шифрование

Наверника вы слышали про симметричные и ассиметричное шифрование. Не погружаясь в теорию просто скажу, что при симметричном шифровании есть один секрет на шифрование и дешифрование данных. Например, вы создали zip архив с паролем. Вот это как раз симметричное шифрование. У него есть ряд серьезных недостатков:

  1. Если вы хотите передать шифрованные данные разным людям, вам нужно хранить (безопасно) множество секретов для каждого получателя.
  2. Если вы никогда не виделись с получателем может быть достаточно трудно договориться о секрете. Есть математические методы, но сейчас не про это

Поэтому умные люди подумали и придумали ассиметричное шифрование. В этом случае секрет разделяется на 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. Например, мы хотим зашифровать короткое сообщение. Сделать можно так

  1. выполняем команду gpg -e --armor -r vita@kataev.pro
  2. пишем сообщение. Оно может быть многострочным. Как только закончили нажимаем ctrl+d
  3. тут же получаем 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 в интетике нашел, поэтому воспринимать это всерьез не стоит. Я просто показал, что я узнал на днях и решил поделиться с вами. Если тут есть какие-то грубые ошибки, которые могут повлиять на безопасность, то с удовольствием жду критики в комментариях.

Связанные посты
19 комментариев 👇
Михаил Гусаров Инженегр-погромист 12 мая 2022
  Развернуть 1 комментарий

@dottedmag, занятно, спасибо. Кстате там рекоменуют age и ты второй человек, который говорит "посмотри на age он лучше".

  Развернуть 1 комментарий

Давайте тогда я буду первым человеком, который заметит, что age существует с 2019. Да, он почти точно проще и при разработке сложнее прыгнуть в грабли (C vs Go), но криптографические инструменты проверяются временем. The age of age is questionable.

  Развернуть 1 комментарий

@dottedmag, Добавлю ещё одну ссылку в тему, собственно потом этот человек и написал age

https://words.filippo.io/giving-up-on-long-term-pgp/

  Развернуть 1 комментарий

@dottedmag, неожиданно wormhole оказался шикарным инструментом, спасибо

  Развернуть 1 комментарий

Привет!

Замечу несколько интересных моментов.

Для экспериментов можно попробовать сгенерировать ключ так: gpg --expert --full-gen-key. Так меню выбора типа ключа увеличивается до максимума. Но предупрежу! Флаг "--expert" там не просто так. Используй на свой страх и риск.

Эллептическая криптография (ECC) прекрасна и позволяет сэкономить на размере ключа. В некоторых версиях она может быть скрыта и появиться только при использовании флага "--expert", но это из-за отсутствия совместимости. Попробуй сравнить размер своего RSA4096 ключа и размер ключа Werner Koch --- создателя gnupg.

У меня в ~/.gnupg/gpg.conf есть строчка "default-recipient-self". Эта приписка при каждом асимметричном шифровании добавляет мой ключ в "получателей" и я в будущем сам же смогу прочесть письмо, которое написал.

  Развернуть 1 комментарий

@oskar, default-recipient-self офигенно. спасибо. Крайне полезная опция на мой взглад

  Развернуть 1 комментарий

Вот такая штука есть на основе gpg - https://www.passwordstore.org/

  Развернуть 1 комментарий

@andrey__abramov, Ага, ковырял ее. Показалась не очень удобнй потому что нет формата для пассвордов внутри. То есть это именно заметки, сделать что нибудь типа pass facebook | pbcopy и получить внутри пароль от фейсбука не получится, потому что скопируется вся заметка целиком. А я наверника хочу внутри хранить ещё не только парол, но и логин\почту\чтоугодноещё.

А ещё не понравилось то он показывает весь выхлоп на экране. Правильные password менеджеры умеют скрывать sense данные за зведочками на случай если кто то смотрит в экран. Этот же выдаст все сразу в терминале.

В общем как пассворд менежер не годиться, а шифровать заметки мне не к чему, поэтому не прижилось (лично мне, популярность этой штуки говорит о том, что какую то свою нисшу они нашли и это круто)

  Развернуть 1 комментарий

@Vita, не знаю как вы смотрели, но это в первую очередь именно менеджер паролей)) Там внутри полноценная иерархия, так что можно делать pass mail/atwork@work.com и pass mail/personal@gmail.com.

А чтобы пароль не светить и сразу в буфер копировать без пайпа в pbcopy там же флаг есть - pass -c path/to/secret.

И между устройствами через гит можно синхронизировать - есть приложения и для андроида, и для айфона.

  Развернуть 1 комментарий

@andrey__abramov, я понимаю. Ну напимер я создл social/facebook и положил там что то вроде

login: facebook_login
pass: p@a$$w0rd

и когда выолню pass social/facebook | pbcopy то в буфере окажется все целиком, а не тлько пароль или логин. Получается мне надо либо логин хранить в иерархии, что небезопасно, либо помнить его наизусть, но у меня 3 почтовы ящика + один ящик помойка, куда летит все, что не падает в первые 3, я обычно регаюсь как нибудь servicename@kataev.pro и он улетает в ящик помойку. И вот каждый раз вспоминать что я тут указал как почту мне сложно.

  Развернуть 1 комментарий

@Vita, так ведь можно вот так:

$ pass -c social/fb/login
$ pass -c social/fb/pass
  Развернуть 1 комментарий

@andrey__abramov, А, блин! А я не догадался, спасибо!

  Развернуть 1 комментарий

@andrey__abramov, поддержу.

Использую pass уже 3 года. Между телефоном и ноутом синхронизацию провожу редко и только в одну сторону (из ноута в телефон), использую для этого syncthing.

Нравится, что в pass все пароли по факту обычные файлы. Когда я хочу переместить большое количество паролей, я залезаю в ~/.password-store и оперирую привычными утилитами.

В иерархии счастье! Но надо смириться, что с первого раза иерархия будет строиться больно. У меня до сих пор есть свалка-директория "other".

Unix-way решения в массы! pass не умеет шифровать --- зато это очень хорошо умеет gnupg, pass не умеет синхронизировать --- зато это очень хорошо умеет git. И вместе они волшебны.

  Развернуть 1 комментарий

@Vita, саркарм?)))

А если серьезно, то я pass в основном использую для хранения очень важных секретов, обычно связанных с деньгами. Остальное болтается в хроме и/или маковском кейринге, потому что я не хочу каждый раз анлокать пасс, чтобы залогиниться в твиттер...

  Развернуть 1 комментарий

@andrey__abramov, нет конечно, я правда не догадался так использовать. Но я уже слишком првиык к 1 password и все было там, пока они не ушли из России. Теперь переехал в bitwarden, как ближайший аналог и заселфхостил его у себя. Теперь и пароли у меня лежат и пользоваться удобно. А самое удобное, что даже софт компухтеры ставить не надо, схатает расширения в браузер. В общем я доволен и слезать пока не планирую.

  Развернуть 1 комментарий

и есть совместимая с ним, несколько более удобная, альтернативная реализация gopass

  Развернуть 1 комментарий

Я использовал gpg последний раз лет 10 назад для демонстации студентам принципов шифрования и цифровой подписи. Тогда как раз эстонская ID-карта и электронное голосование были вновинку, а при помощи gpg было удобно на чуть более низком уровне по шагам препарировать процесс и показать как всё устроено.

Мы даже писали простейший емейл-клиент, который работал как-то примерно так:

  • в TXT-запись своего домена каждый клал свой публичный ключ (в HEX) под именем <user>_pk
  • когда отправляешь емейл юзеру user@yourdomain.com с ящика user@mydomain.com, то клиент искал TXT-запиcь user_pk на домене yourdomain.com и если находил — то шифровал с её помощью содержимое емейла, запрашивал твой приватный ключ для подписи, клал контент в аттачмент, подпись — в сабж письма и отправлял получателю.
  • клиент получателя если видел письмо с аттачментом, то проверял, что подпись из сабжа бьётся с ключом отправителя из TXT-запиcи user_pk на домене mydomain.com для файла в аттачменте, а потом запрашивал приватный ключ для его расшифровки.

То есть мы изобрели DKIM :)

Но это всё конечно было совершенно неюзабельно, зато интересно.

Увы, других (реальных) жизненных ситуациях может потребоваться использовать gpg я так и не нашел и никогда больше им не пользовался.

Для примитивных задач (спрятать от чужих глаз или передать что-то через интернеты) подойдёт zip-архив с паролем. Для общения — мессенджеры с e2e шифрованием. В корпоративном мире — там свои заморочки по шифрованию разделов жёсткого диска специальными утилитами.

  Развернуть 1 комментарий
Никита Копылов Business Analysis and Compliance 12 мая 2022

А как ключи безопасно передавать? В том же Арче, как их запихать в gnome-keyring, а оттуда в Thunderbird (или в обратную сторону), а потом перекинуть в клиент Delta Chat?

  Развернуть 1 комментарий

😎

Автор поста открыл его для большого интернета, но комментирование и движухи доступны только участникам Клуба

Что вообще здесь происходит?


Войти  или  Вступить в Клуб