Для меня идеальным менеджером паролей должно быть:
- Открытый исходный код
- Бесплатно программное обеспечение
- Простой и быстрый в использовании
- Легко настраивается
- Интеграция с браузером
- Поделиться с другими пользователями
- Возможность хранить не только пароли веб-сайтов
- Ключи на устройство (подробности ниже)
Pass
Pass - Это простой и открытый исходный код - каждый пароль представляет собой просто зашифрованный текстовый файл PGP. Он поддерживает несколько ключей PGP и может упорядочивать пароли с использованием иерархии файловой системы ОС.
Это значит, что я могу шифровать разные папки разными ключами (рабочий, личный). Это также позволяет мне делиться секретами с коллегами, имея отдельный каталог, который зашифрован ключами всех членов команды. Например, у меня может быть хранилище паролей, которое выглядит так:
|
|
work
зашифрована ключами «мой + коллеги», personal
зашифрованы только моими ключами, а family
зашифрованы ключами «мои + члены семьи».
Интеграция с браузером обеспечивается browserpass, который работает в Firefox в Linux/OS X.
Почему ключи устройства?
Мне нужны ключи, указанные для устройства, чтобы я мог отозвать ключ устройства в случае его пропажи, но при этом сохранил возможность доступа к своим паролям с помощью других устройств, находящихся в моем распоряжении. Например, если у меня есть 3 устройства (рабочий компьютер, домашний компьютер, ноутбук) и я потеряю свой ноутбук, я могу очень быстро отозвать ключ ноутбука и повторно зашифровать свое хранилище паролей.
Доверять
Доверие к этой системе (частично) обеспечивается Keybase. Keybase уже имеет аналогичную структуру (ключи устройств), но, к сожалению, они используют ключи NaCl, которые не работают с pass. Я использовал keybase cli для генерации (и подписи) ключей PGP устройства, которые любой может проверить, перейдя в мою учетную запись Keybase. Каждый ключ PGP устройства генерируется локально и подписывается с помощью ключа NaCl устройства, который никогда не покидает устройство. Кто угодно может проверить мои ключи, посетив Keybase.
Пошаговая инструкция
- Создайте учетную запись Keybase.
- Установите клиент Keybase на каждое устройство. Это гарантирует, что на вашем устройстве есть ключ NaCl.
- На каждом устройстве сгенерируйте ключ PGP:
|
|
- Keybase сгенерирует ключ PGP и отправит его на серверы базы ключей. Он также импортирует его в вашу локальную связку ключей. Проверьте, импортирован ли он, запустив
|
|
и сравнивая его с секретными ключами в базе ключей
|
|
Примечание: Показанные идентификаторы ключей PGP могут быть в одном из трех форматов - коротком, длинном или отпечатке пальца. Короткая и длинная - это последние 8 и 16 шестнадцатеричных цифр отпечатка пальца (последнее примечание).
- Если ваш секретный ключ не импортирован в вашу локальную связку ключей, введите его с помощью:
|
|
- Повторите вышеуказанные шаги для каждого вашего устройства.
- На каждом устройстве теперь извлекайте все открытые ключи других устройств. Это необходимо для того, чтобы каждое устройство могло зашифровать ваш магазин для других устройств.
|
|
- Когда все устройства будут иметь свои собственные ключи PGP, инициализируйте хранилище паролей. Используйте идентификаторы ключей всех ваших устройств, например:
|
|
Это должно создать хранилище паролей, зашифрованное всеми ключами вашего устройства.
- Следуйте документации pass по вводу паролей в ваш магазин.
- Установите browserpass, чтобы с легкостью использовать свои пароли на веб-сайтах.
Недостаток
Главный недостаток паролей в том, что они статичны. Злоумышленник, получивший контроль и над моим хранилищем паролей, и над ключом устройства, может очень легко подобрать парольную фразу, чтобы получить доступ ко всем паролям.
Например, если я потеряю свое устройство, которое содержит как ключ, так и хранилище паролей, отзыв ключа устройства не помешает злоумышленнику получить доступ ко всем паролям в хранилище, которые действительны до момента, когда я потеряю свой ноутбук.
Это врожденный недостаток паролей. Единственное исправление - изменить все зашифрованные пароли в магазине при отзыве ключа. Таким образом, злоумышленник получит доступ только к старым паролям, которые будут ему бесполезны. К сожалению, в настоящее время нет простого способа сделать это на всех сайтах.
Альтернативный способ - хранить ключ и хранилище отдельно друг от друга; они объединяются только тогда, когда вам нужно расшифровать пароль. Например, хранилище может находиться в общей файловой системе ключевой базы (KBFS) (которая передается на устройство). Если вы потеряете устройство, вы можете очень быстро прекратить доступ, отозвав ключ устройства, отозвав доступ устройства к общему ресурсу и повторно зашифровав хранилище.
Один из способов добиться этого - переместить хранилище паролей в kbfs и создать символьную ссылку туда, где его ожидает pass
:
|
|
Улучшения
На выяснение этого ушло около дня, и я подумал:
- Почему это так сложно?
- Почему по умолчанию не у каждого устройства есть ключ?
- Почему мы по умолчанию не используем аппаратные устройства (например, TPM) для выполнения вышеуказанных задач?
- Как во всем этом разобраться нетехнический пользователь?
- И, наконец, (снова), почему достойная безопасность так сложна?
У нас уже есть все технологические элементы, но похоже, что еще предстоит проделать работу, чтобы «склеить» все части во что-то, что поймет средний пользователь. Многие решения имеют закрытый исходный код или изолированы от конкретной платформы, и из-за этого ограничения вы не можете доверять ей данные.
Большое спасибо таким проектам, как pass, keybase, keepass, keepassxc, chrome/firefox password manager, которые помогают распространить шифрование. Надеюсь, однажды у нас будет парольная нирвана, о которой я мечтаю.