Для меня идеальным менеджером паролей должно быть:

  • Открытый исходный код
  • Бесплатно программное обеспечение
  • Простой и быстрый в использовании
  • Легко настраивается
  • Интеграция с браузером
  • Поделиться с другими пользователями
  • Возможность хранить не только пароли веб-сайтов
  • Ключи на устройство (подробности ниже)

Pass

Pass - Это простой и открытый исходный код - каждый пароль представляет собой просто зашифрованный текстовый файл PGP. Он поддерживает несколько ключей PGP и может упорядочивать пароли с использованием иерархии файловой системы ОС.

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

.password-store/
├── family
├── personal
└── work

work зашифрована ключами «мой + коллеги», personal зашифрованы только моими ключами, а family зашифрованы ключами «мои + члены семьи».

Интеграция с браузером обеспечивается browserpass, который работает в Firefox в Linux/OS X.

Почему ключи устройства?

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

Доверять

Доверие к этой системе (частично) обеспечивается Keybase. Keybase уже имеет аналогичную структуру (ключи устройств), но, к сожалению, они используют ключи NaCl, которые не работают с pass. Я использовал keybase cli для генерации (и подписи) ключей PGP устройства, которые любой может проверить, перейдя в мою учетную запись Keybase. Каждый ключ PGP устройства генерируется локально и подписывается с помощью ключа NaCl устройства, который никогда не покидает устройство. Кто угодно может проверить мои ключи, посетив Keybase.

Пошаговая инструкция

  1. Создайте учетную запись Keybase.
  2. Установите клиент Keybase на каждое устройство. Это гарантирует, что на вашем устройстве есть ключ NaCl.
  3. На каждом устройстве сгенерируйте ключ PGP:
keybase pgp gen --multi
  1. Keybase сгенерирует ключ PGP и отправит его на серверы базы ключей. Он также импортирует его в вашу локальную связку ключей. Проверьте, импортирован ли он, запустив
gpg -K --fingerprint

и сравнивая его с секретными ключами в базе ключей

keybase pgp list

Примечание: Показанные идентификаторы ключей PGP могут быть в одном из трех форматов - коротком, длинном или отпечатке пальца. Короткая и длинная - это последние 8 и 16 шестнадцатеричных цифр отпечатка пальца (последнее примечание).

  1. Если ваш секретный ключ не импортирован в вашу локальную связку ключей, введите его с помощью:
keybase pgp export -q <key-id> -s | gpg --import
  1. Повторите вышеуказанные шаги для каждого вашего устройства.
  2. На каждом устройстве теперь извлекайте все открытые ключи других устройств. Это необходимо для того, чтобы каждое устройство могло зашифровать ваш магазин для других устройств.
keybase pgp export -q <key-id> | gpg --import
  1. Когда все устройства будут иметь свои собственные ключи PGP, инициализируйте хранилище паролей. Используйте идентификаторы ключей всех ваших устройств, например:
pass init -p personal <key-id-1> <key-id-2> ..

Это должно создать хранилище паролей, зашифрованное всеми ключами вашего устройства.

  1. Следуйте документации pass по вводу паролей в ваш магазин.
  2. Установите browserpass, чтобы с легкостью использовать свои пароли на веб-сайтах.

Недостаток

Главный недостаток паролей в том, что они статичны. Злоумышленник, получивший контроль и над моим хранилищем паролей, и над ключом устройства, может очень легко подобрать парольную фразу, чтобы получить доступ ко всем паролям.

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

Это врожденный недостаток паролей. Единственное исправление - изменить все зашифрованные пароли в магазине при отзыве ключа. Таким образом, злоумышленник получит доступ только к старым паролям, которые будут ему бесполезны. К сожалению, в настоящее время нет простого способа сделать это на всех сайтах.

Альтернативный способ - хранить ключ и хранилище отдельно друг от друга; они объединяются только тогда, когда вам нужно расшифровать пароль. Например, хранилище может находиться в общей файловой системе ключевой базы (KBFS) (которая передается на устройство). Если вы потеряете устройство, вы можете очень быстро прекратить доступ, отозвав ключ устройства, отозвав доступ устройства к общему ресурсу и повторно зашифровав хранилище.

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

mv ~/.password-store/personal /keybase/private/<username>/password-store/personal
ln -s /keybase/private/<username>/password-store/personal ~/.password-store/personal

Улучшения

На выяснение этого ушло около дня, и я подумал:

  • Почему это так сложно?
  • Почему по умолчанию не у каждого устройства есть ключ?
  • Почему мы по умолчанию не используем аппаратные устройства (например, TPM) для выполнения вышеуказанных задач?
  • Как во всем этом разобраться нетехнический пользователь?
  • И, наконец, (снова), почему достойная безопасность так сложна?

У нас уже есть все технологические элементы, но похоже, что еще предстоит проделать работу, чтобы «склеить» все части во что-то, что поймет средний пользователь. Многие решения имеют закрытый исходный код или изолированы от конкретной платформы, и из-за этого ограничения вы не можете доверять ей данные.

Большое спасибо таким проектам, как pass, keybase, keepass, keepassxc, chrome/firefox password manager, которые помогают распространить шифрование. Надеюсь, однажды у нас будет парольная нирвана, о которой я мечтаю.