124 lines
11 KiB
Markdown
124 lines
11 KiB
Markdown
---
|
||
title: "Менеджер паролей с Pass, Keybase и PGP ключами для каждого устройства"
|
||
date: 2021-01-16T11:16:38+05:00
|
||
draft: false
|
||
tags: ["password manager", "pass"]
|
||
categories: ["Linux"]
|
||
description: "Давайте поговорим о паролях. В основном, это то, что вы должны использовать для каждой учетной записи в Интернете."
|
||
image: ""
|
||
---
|
||
|
||
Для меня идеальным менеджером паролей должно быть:
|
||
|
||
- Открытый исходный код
|
||
- Бесплатно программное обеспечение
|
||
- Простой и быстрый в использовании
|
||
- Легко настраивается
|
||
- Интеграция с браузером
|
||
- Поделиться с другими пользователями
|
||
- Возможность хранить не только пароли веб-сайтов
|
||
- Ключи на устройство (подробности ниже)
|
||
|
||
## Pass
|
||
|
||
Pass - Это простой и открытый исходный код - каждый пароль представляет собой просто зашифрованный текстовый файл PGP. Он поддерживает несколько ключей PGP и может упорядочивать пароли с использованием иерархии файловой системы ОС.
|
||
|
||
<!--more-->
|
||
|
||
Это значит, что я могу шифровать разные папки разными ключами (рабочий, личный). Это также позволяет мне делиться секретами с коллегами, имея отдельный каталог, который зашифрован ключами всех членов команды. Например, у меня может быть хранилище паролей, которое выглядит так:
|
||
|
||
```
|
||
.password-store/
|
||
├── family
|
||
├── personal
|
||
└── work
|
||
```
|
||
|
||
`work` зашифрована ключами «мой + коллеги», `personal` зашифрованы только моими ключами, а `family` зашифрованы ключами «мои + члены семьи».
|
||
|
||
Интеграция с браузером обеспечивается [browserpass](https://github.com/browserpass/browserpass-extension), который работает в 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
|
||
```
|
||
4. Keybase сгенерирует ключ PGP и отправит его на серверы базы ключей. Он также импортирует его в вашу локальную связку ключей. Проверьте, импортирован ли он, запустив
|
||
|
||
```
|
||
gpg -K --fingerprint
|
||
```
|
||
и сравнивая его с секретными ключами в базе ключей
|
||
|
||
```
|
||
keybase pgp list
|
||
```
|
||
|
||
> **Примечание:** Показанные идентификаторы ключей PGP могут быть в одном из трех форматов - коротком, длинном или отпечатке пальца. Короткая и длинная - это последние 8 и 16 шестнадцатеричных цифр отпечатка пальца (последнее примечание).
|
||
|
||
5. Если ваш секретный ключ не импортирован в вашу локальную связку ключей, введите его с помощью:
|
||
|
||
```
|
||
keybase pgp export -q <key-id> -s | gpg --import
|
||
```
|
||
|
||
6. Повторите вышеуказанные шаги для каждого вашего устройства.
|
||
7. На каждом устройстве теперь извлекайте все открытые ключи других устройств. Это необходимо для того, чтобы каждое устройство могло зашифровать ваш магазин для других устройств.
|
||
|
||
```
|
||
keybase pgp export -q <key-id> | gpg --import
|
||
```
|
||
8. Когда все устройства будут иметь свои собственные ключи PGP, инициализируйте хранилище паролей. Используйте идентификаторы ключей всех ваших устройств, например:
|
||
|
||
```
|
||
pass init -p personal <key-id-1> <key-id-2> ..
|
||
```
|
||
|
||
Это должно создать хранилище паролей, зашифрованное всеми ключами вашего устройства.
|
||
|
||
9. Следуйте [документации pass](https://www.passwordstore.org/) по вводу паролей в ваш магазин.
|
||
10. Установите [browserpass](https://addons.mozilla.org/en-US/firefox/addon/browserpass-ce/), чтобы с легкостью использовать свои пароли на веб-сайтах.
|
||
|
||
## Недостаток
|
||
|
||
Главный недостаток паролей в том, что они статичны. Злоумышленник, получивший контроль и над моим хранилищем паролей, и над ключом устройства, может очень легко подобрать парольную фразу, чтобы получить доступ ко всем паролям.
|
||
|
||
Например, если я потеряю свое устройство, которое содержит как ключ, так и хранилище паролей, отзыв ключа устройства не помешает злоумышленнику получить доступ ко всем паролям в хранилище, которые действительны до момента, когда я потеряю свой ноутбук.
|
||
|
||
Это врожденный недостаток паролей. Единственное исправление - изменить все зашифрованные пароли в магазине при отзыве ключа. Таким образом, злоумышленник получит доступ только к старым паролям, которые будут ему бесполезны. К сожалению, в настоящее время нет простого способа сделать это на всех сайтах.
|
||
|
||
Альтернативный способ - хранить ключ и хранилище отдельно друг от друга; они объединяются только тогда, когда вам нужно расшифровать пароль. Например, хранилище может находиться в общей файловой системе ключевой базы ([KBFS](https://book.keybase.io/docs/files)) (которая передается на устройство). Если вы потеряете устройство, вы можете очень быстро прекратить доступ, отозвав ключ устройства, отозвав доступ устройства к общему ресурсу и повторно зашифровав хранилище.
|
||
|
||
Один из способов добиться этого - переместить хранилище паролей в kbfs и создать символьную ссылку туда, где его ожидает `pass`:
|
||
|
||
```
|
||
mv ~/.password-store/personal /keybase/private/<username>/password-store/personal
|
||
ln -s /keybase/private/<username>/password-store/personal ~/.password-store/personal
|
||
```
|
||
|
||
## Улучшения
|
||
|
||
На выяснение этого ушло около дня, и я подумал:
|
||
|
||
- Почему это так сложно?
|
||
- Почему по умолчанию не у каждого устройства есть ключ?
|
||
- Почему мы по умолчанию не используем аппаратные устройства (например, [TPM](https://ru.wikipedia.org/wiki/Trusted_Platform_Module)) для выполнения вышеуказанных задач?
|
||
- Как во всем этом разобраться нетехнический пользователь?
|
||
- И, наконец, (снова), почему достойная безопасность так сложна?
|
||
|
||
У нас уже есть все технологические элементы, но похоже, что еще предстоит проделать работу, чтобы «склеить» все части во что-то, что поймет средний пользователь. Многие решения имеют закрытый исходный код или изолированы от конкретной платформы, и из-за этого ограничения вы не можете доверять ей данные.
|
||
|
||
Большое спасибо таким проектам, как pass, keybase, keepass, keepassxc, chrome/firefox password manager, которые помогают распространить шифрование. Надеюсь, однажды у нас будет парольная нирвана, о которой я мечтаю.
|