Модель данных
Данные в Пассворке организованы в четырёхуровневую иерархию с собственными криптографическими ключами на каждом уровне.
Иерархия объектов
Пользователь
└── Сейф
└── Папка [опционально]
└── Запись
├── Стандартные поля
├── Дополнительные поля
└── Вложения
Уровень 1: Пользователь
Каждый пользователь имеет:
- Учётные данные для входа в систему (логин, пароль или SSO/LDAP)
- Мастер-пароль для клиентского шифрования (при включённом CSE)
- Пару RSA-ключей (п убличный и зашифрованный приватный)
- Параметры PBKDF2 (соль, количество итераций)
Уровень 2: Сейф
Сейф — основной контейнер для группировки записей.
Типы сейфов:
- Корпоративные сейфы — общие хранилища с настраиваемыми правами доступа
- Личные сейфы — индивидуальные хранилища пользователей
Атрибуты сейфа:
| Атрибут | Описание |
|---|---|
| Название | Имя сейфа |
| Описание | Текстовое описание |
| Ключ сейфа | Симметричный ключ для шифрования записей |
| Права доступа | Список пользователей и их ролей |
| Настройки | Лимиты, политики и другие параметры |
Уровень 3: Папки и записи
Папки служат для логической организации записей внутри сейфа. Папки могут быть вложенными (неограниченная глубина). Папки не имеют собственных ключей шифрования.
Запись — единица хранения секретной информации.
Уровень 4: Поля и вложения
Каждая запись содержит набор полей и может иметь вложения (файлы).
Структура записи
Поля записи
Запись содержит:
- Стандартные поля: название, логин, пароль, URL, описание, теги, цвет
- Дополнительные поля: произвольные пары «имя-значение»
- TOTP-секрет: для двухфакторной аутентификации
- Вложения: пр икреплённые файлы
Не все поля шифруются на клиенте — некоторые защищены только серверным шифрованием для обеспечения поиска и сортировки. Подробная таблица шифрования полей — в разделе Область шифрования.
Связь объектов с ключами
Каждый уровень иерархии имеет свой ключ шифрования.
Структура ключей
Иерархия объектов и их криптографические ключи образуют дерево:
Пользователь имеет мастер-ключ (производный от мастер-пароля через PBKDF2) и пару RSA-ключей (публичный + приватный, зашифрованный мастер-ключом).
Сейф имеет ключ сейфа (256 бит). Для каждого пользователя с доступом создаётся копия ключа сейфа, зашифрованная его публичным RSA-ключом.
Запись имеет ключ записи, зашифрованный ключом сейфа.
Данные записи (поле пароля, дополнительные поля, TOTP) шифруются ключом записи.
Вложения имеют собственный ключ вложения, зашифрованный ключом записи. Содержимое файла шифруется ключом вложения.
Таблица ключей по уровням
| Уровень | Объект | Ключ | Тип ключа | Чем защищён |
|---|---|---|---|---|
| 1 | Пользователь | Мастер-ключ | Симметричный, 512 бит | PBKDF2 от мастер-пароля |
| 1 | Пользователь | RSA-ключи | Асимметричные, 2048 бит | Приватный зашифрован мастер-ключом |
| 2 | Сейф | Ключ сейфа | Симметричный, 256 бит | RSA-ключом каждого пользователя |
| 3 | Запись | Ключ записи | Симметричный | Ключом сейфа |
| 4 | Вложение | Ключ вложения | Симметричный, 256 бит | Ключом записи |
Жизненный цикл д анных
Создание записи
- Пользователь создаёт запись в сейфе
- Генерируется случайный ключ записи (256 бит)
- Шифруемые поля (пароль, доп. поля, TOTP) шифруются ключом записи (AES-256-CBC)
- Ключ записи шифруется ключом сейфа
- Данные отправляются на сервер
- Сервер применяет серверное шифрование (AES-256-CFB) перед сохранением в БД
Добавление вложения
- Пользователь прикрепляет файл к записи
- Генерируется случайный ключ вложения (256 бит)
- Файл шифруется ключом вложения (AES-256-CBC)
- Ключ вложения шифруется ключом записи
- Зашифрованный файл и зашифрованный ключ отправляются на сервер
Чтение записи
- Клиент запрашивает запись с сервера
- Сервер расшифровывает серверное шифрование и отправляет данные
- Клиент расшифровывает ключ сейфа своим приватным RSA-ключом (WebCrypto)
- Расшифровывает ключ записи ключом сейфа (AES-256-CBC)
- Расшифровывает поля записи ключом записи (AES-256-CBC)
- Для вложений: расшифровывает ключ вложения → расшифровывает файл
Особенности модели
Изоляция ключей
- Компрометация одной записи не раскрывает другие записи
- Компрометация одного вложения не раскрывает другие вложения
- Каждый объект имеет уникальный ключ шифрования
Гранулярный доступ
- Доступ к сейфу даёт доступ ко всем записям внутри
- Возможен доступ к отдельной записи без доступа к сейфу (раздел «Входящие»)
- Внешние ссылки позволяют поделиться записью без учётной записи
Шифрование полей
Подробная информация о том, какие поля шифруются на клиенте, а какие только на сервере — в разделе Область шифрования.