Менеджер паролей с GPG шифрованием: настройка PASS на iOS + Git

Наверняка многим из вас знакомы работы Филиппа Циммерманна, а в частности, самая известная из них — PGP (Pretty Good Privacy — Почти Полная Конфиденциальность), опубликованная в далеком 1991 году. Изначально PGP как пакет программного обеспечения предназначался для шифрования электронной почты и до сегодняшнего момента алгоритм (ы) шифрования, заложенные в PGP еще не были взломаны.
yvympxlcm05pks_4iw_aqecjonk.png

В этом году PGP исполняется 30 лет и в связи с этой знаменательной датой я с вашего позволения напишу свой опыт взаимодействия с PGP в качестве основы для менеджера паролей.

Небольшая ремарка: PGP был отжат корпоратами и стал проприетарным, а альтернативная версия с открытым исходным кодом стала носить имя GnuPG (сокр. GPG). Далее в этой статье буду пользоваться аббревиатурой GPG.


Каждый из вас наверняка пользуется менеджером паролей, а если не пользуется, то точно слышал об этом.

Если у вас нет менеджера паролей, то вы наверняка:

  • запомнили пару десятков паролей с изменяющейся структурой мастер-пароля и вам хватает
  • количество сервисов и вариативности пароля не достигло предела :)
  • не заботитесь об анонимности и приватности (не знаете, для чего это нужно)
  • не знаете как выбрать из многообразия парольных менеджеров

У меня все эти проблемы были, и, количество сервисов, на которых я регистрировался, разрослось до более чем 357. Я Осознал — надо что-то менять…
Начал задумываться о категоризации всего этого хозяйства.
Пароли у меня хранились в памяти, в e-mail сообщениях в черновиках, на обрывках бумажек, отрывных блокнотиках, листках формата А4, сложенных вдвое, на флешках в файлах *.txt и т.д.

▍У меня было несколько требований:


  • менеджер паролей должен быть OpenSource с внушительным Community
  • поддерживать бесшовную синхронизацию и кроссплатформенность
  • иметь возможность хранения всей базы паролей на своем сервере/локальном компьютере/флешке/диске
  • возможность делать быстрый backup паролей
  • сильное шифрование без бэкдоров
  • возможность выбора алгоритма или связки алгоритмов шифрования
  • легкая и понятная структура хранения паролей с категоризацией

▍Что такое PASS


PASS — это небольшой bash-скрипт, созданный Джейсоном Доненфельдом, хранящий пароли в обычных текстовых файлах, зашифрованных с помощью GPG. Официальный сайт — www.passwordstore.org

Может хранить в зашифрованном виде не только логины/пароли, но и любую текстовую информацию.
Шифрование всей информации производится с помощью GPG, запросы паролей осуществляет gpg-agent, за контроль версий и поддержку удаленного репозитория отвечает Git, а сама утилита написана на языке bash. Таким образом, у вас есть возможности, за которые можно не беспокоиться. На самом деле, если вы хотите, вы можете получить доступ к репозиторию Git и файлам Gnupg напрямую, вообще не используя PASS.

▍Пререквизиты для GPG, PASS, Pass for iOS:


  • PC с OS на ядре Linux
  • смартфон с iOS с установленным Pass for iOS
  • прямые руки

На официальном сайте PASS www.passwordstore.org есть множество клиентов под разные OS.

▍Пререквизиты для Gitea:


  • самый дешевый VPS или одноплатник

Для того, чтобы настроить и развернуть связку PASS и Git, я использовал Gitea (свободный аналог github, gitlab).
Для разворачивания Gitea достаточно будет самых минимальных требований, например можно взять тариф Старт Хит (240р/мес. на момент написания статьи) на ruvds.com. К тому же у них есть услуга — 3 дня VPS на тест бесплатно. Можно развернуть Gitea на одноплатниках, хоть на малинке RaspberryPi (2,3,4 версий), хоть на банане Banana PI.
Подробно останавливаться в этой статье на установке Gitea не будем, есть подробнейшая документация со всевозможными способами установки:
eukhcrgqswdexyap2h3q9-9mram.png
Документация Gitea — варианты установки

Привязку Gitea к собственному домену, установку SSL-сертификата в этой статье рассматривать не буду. Укажу лишь отличный бесплатный вариант, который я использовал:


Используемые данные Gitea в статье:
Gitea установлен на zil02.ml
login: gitlog
e-mail, указанный при создании gpg связки ключей: gitlog@zil02.ml

▍Настройка, установка GPG (GnuPG):


На странице со списком свободных OS можно выбрать приглянувшуюся —
www.gnu.org/distros/free-distros.html#for-pc я установил Dragora как основную Linux систему. У вас это может быть любая OS на ядре Linux. Самая распространенная Ubuntu, но это не значит, что самая безопасная. В Ubuntu на уровне ядра есть проприетарные компоненты, которые противоречат философии свободного программного обеспечения.

Итак, открываем терминал. Обновим репозитории и установим gpg и gnupg:

sudo apt update && sudo apt upgrade -y
sudo apt install gpg
sudo apt install gnupg

Смотрим версию установленного GPG:
gpg --version

furhfyzviawhwyejdjkjzapwkre.png
У меня версия gpg (GnuPG) 2.2.12

Для того чтобы посмотреть публичный и приватный ключи:

gpg -k #публичный ключ
gpg -K #приватный ключ

w0aagaaght1gty26gs0hwbiudnq.png
Убеждаемся, что ключей нет

Теперь давайте их создадим. Делается это командой:

gpg --full-generate-key

Выбираем — 1 (default)
Ставим максимальную длину — 4096
Не ограничиваем валидность ключа временем: ставим 0

cmrsspqaktl0gol874pcwjch0ym.pngПодтверждаем свой выбор.

kf4ivcdildqj0sh2d8wyq92znbo.png
Вводим Имя, Фамилию, e-mail. Подтверждаем выбор.

Далее Вас спросят придумать мастер-пароль

cbspycepodfba8ik-eiz9rzojya.png
Это главный пароль для доступа в Вашей связке ключей! Делайте его максимально сложным и запомните, запишите в надежном месте.

uwgavvgm9nvxikuqipqmxtajtvg.png
Введя легкий пароль, вы увидите сообщение:

gikzgo7ha6hcxsz_pracu8j4jey.png
Ваш ключ создался!

▍Установим менеджер паролей PASS


Установим PASS:
apt install -y pass

Посмотрим, где у нас лежит PASS (в /usr/bin/pass):
which pass

Проинициализируем хранилище паролей, всю связку ключей, созданных ранее с e-mail: gitlog@zil02.ml:
pass init gitlog@zil02.ml

Создалась директория /.password-store
В этой директории будет лежать скрытый файл .gpg-id в нем будет одна строчка с идентификатором ключа. Именно им и будут шифроваться все ваши пароли.

flonqcdcmwl4j4ysb9f2grhchuc.png

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

Например, добавим пароль на email:

pass insert Email/gmail.com

где Email — это папка, через »/» gmail.com — текстовый файл с паролем.
Введем для примера пароль 1234

cepbkzdnkrd1xj3zzwivhmkn6yu.png

Создался зашифрованный бинарник gmail.com.gpg в директории /root/.password-store/Email
Для просмотра зашифрованного пароля вводим свой мастер-пароль от gpg ключа:

pass Email/gmail.com

bzcxms-xgmizsipcnx5rnl-r7bo.png
Проверим через редактор в WinCSP
Бинарник имеет нечитаемый вид
в PASS есть возможность сохранять пароли в ASCII.
В настройках Pass for iOS это Settings-> Advanced
включить опцию "Encrypt in ASCII-Armored"

zl88hh6hwdqzpzcgyw17vrtqjiy.png
Тогда зашифрованные данные примут человеческий вид

▍Настройка Gitea:


Теперь нам нужно настроить Git (Gitea) на локальной машине, берем user и email из настроек gitea выше:
git config --global user.name "gitlog”
git config --global user.email "gitlog@zil02.ml”

На всякий случай указываем правильный путь до gpg:
git config --global gpg.program gpg2

вместо «gpg2» у вас может быть просто «gpg»
И тестируем, подписываются ли наши сообщения:
echo "test” | gpg --clearsign

dz3wth_vewfpzn8cv6rbpzmdw7c.png
Если сообщения не подписываются, и возникает ошибка «gpg: signing failed: Inappropriate ioctl for device»
ww_0_u85osirllgwu9vtgebgp6a.png
Отлично! Продолжаем:

Добавляем первоначальный конфиг в /root/.gnupg/gpg.conf:

keyid-format 0xlong
throw-keyids
no-emit-version
no-comments

dxhgnv_pffbaqimshva7p6q9l-q.png

Теперь выбираем, каким ключом будут подписываться наши коммиты
проверяем:

gpg -k

rwatij1j3p6skdkgnndf-ksz1l4.png

возьмем rsa4096/0×4B0659102A08305B:

git config --global user.signingkey 0x4B0659102A08305B
git config --global commit.gpgsign true

Создадим git репозиторий
wweeqg8qgcqnjr4fmumz-oskrig.png

▍Настроим связку PASS-Gitea на локальной машине

Инициализируем гит:

pass git init

Добавляем тот путь, который нам показал Gitea после установки Gitea (заменив дефолтный путь 127.0.0.1:22022 на имя домена):
pass git remote add origin https://zil02.ml/gitlog/habr_ruvds.git

Коммитим изменения. Для того чтобы закачать изменения, пользуемся стандартным методом.
cd .password-store/
git add .
git commit -m "123”
git push -u origin master

Если все сделали правильно, должно получиться следующее:
omu7hiyzmiuqmabt1doj63dpjiq.png

Открываем репозиторий:

rd9nmfc_v4gsm-anqx7hdyj_ouw.png

Ура! Все изменения из нашего православного менеджера паролей PASS синхронизировались с нашим Gitea. (Все содержимое папки * /.password-store)

▍Установим Pass for iOS


Официальный сайт приложения — mssun.github.io/passforios

Экспортнем public и secret ключ и перенесем на iPhone:

gpg --export -a 0x4B0659102A08305B > 8305Bpub.gpg
gpg --export-secret-keys -a 0x4B0659102A08305B > 8305Bsecret.gpg

ewee3wq1sjscdatpztxzcfuc3zy.jpeg

Пропишем настройки git репозитория:

j1mm58e1xbvryb0vlcwlht1h9qs.jpeg

Детальные скриншоты с настройками
Обновим табу Passwords и увидим нашу папку Email с файлом gmail.com
mpl9dgllsn0y4suhp3xg_vmodo4.jpeg

ew5ayokquomv6hwg3qd3gxbubsa.jpeg


Поздравляю Вас, мы справились на Отлично!

В этой пошаговой статье мы с Вами установили собственный git репозиторий, пакет GPG и менеджер паролей PASS на локальную систему (Linux) и на iPhone (Pass for iOS). Теперь мы можем создавать, изменять пароли с PC, айфона, синхронизировать изменения через git, использовать автозаполнение логинов-паролей на iPhone в браузерах для входа в различные онлайн сервисы.
Можем хранить любые данные помимо паролей.

Очень простой формат организации и хранения паролей дает нам достаточно широкие возможности:

  • мы можем просматривать и редактировать пароли
  • мы можем писать свои скрипты для работы с паролями
  • мы можем хранить все изменения паролей в системе контроля версий git и синхронизировать пароли на разных компьютерах через неё же.

Менеджер паролей PASS имеет большую поддержку со стороны сообщества. Есть бесшовная синхронизация через git между экземплярами PASS на компе, ноутах, телефонах. Существуют реализации программы для Android и iOS, плагины для веб-браузеров Chrome и Firefox, графические клиенты для Windows, Mac и Linux, расширения для Alfred, dmenu, rofi и Emacs, скрипты для импорта паролей из других менеджеров паролей!
PASS покрывает возможность хранения всей базы паролей на своем сервере/локальном компьютере/флешке/диске.
Поддерживается возможность делать быстрый backup паролей. Вы вольны выбирать какой тип шифрования использовать для сокрытия ваших паролей и любой другой приватной информации!
Вы можете придумать и реализовать свою структуру хранения паролей с категоризацией!

В первую очередь этой статьей хотел вызвать интерес к открытому программному обеспечению и правильному хранению Вашей персональной информации! Хранить пароли в месте, защищенном от хитрого взора корпораций, считаю хорошей практикой!

oug5kh6sjydt9llengsiebnp40w.png

© Habrahabr.ru