Перейти к основному содержимому
Версия: 7.0

Модель данных

Данные в Пассворке организованы в четырёхуровневую иерархию с собственными криптографическими ключами на каждом уровне.

Иерархия объектов

Пользователь
└── Сейф
└── Папка [опционально]
└── Запись
├── Стандартные поля
├── Дополнительные поля
└── Вложения

Уровень 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 битКлючом записи

Жизненный цикл данных

Создание записи

  1. Пользователь создаёт запись в сейфе
  2. Генерируется случайный ключ записи (256 бит)
  3. Шифруемые поля (пароль, доп. поля, TOTP) шифруются ключом записи (AES-256-CBC)
  4. Ключ записи шифруется ключом сейфа
  5. Данные отправляются на сервер
  6. Сервер применяет серверное шифрование (AES-256-CFB) перед сохранением в БД

Добавление вложения

  1. Пользователь прикрепляет файл к записи
  2. Генерируется случайный ключ вложения (256 бит)
  3. Файл шифруется ключом вложения (AES-256-CBC)
  4. Ключ вложения шифруется ключом записи
  5. Зашифрованный файл и зашифрованный ключ отправляются на сервер

Чтение записи

  1. Клиент запрашивает запись с сервера
  2. Сервер расшифровывает серверное шифрование и отправляет данные
  3. Клиент расшифровывает ключ сейфа своим приватным RSA-ключом (WebCrypto)
  4. Расшифровывает ключ записи ключом сейфа (AES-256-CBC)
  5. Расшифровывает поля записи ключом записи (AES-256-CBC)
  6. Для вложений: расшифровывает ключ вложения → расшифровывает файл

Особенности модели

Изоляция ключей

  • Компрометация одной записи не раскрывает другие записи
  • Компрометация одного вложения не раскрывает другие вложения
  • Каждый объект имеет уникальный ключ шифрования

Гранулярный доступ

  • Доступ к сейфу даёт доступ ко всем записям внутри
  • Возможен доступ к отдельной записи без доступа к сейфу (раздел «Входящие»)
  • Внешние ссылки позволяют поделиться записью без учётной записи

Шифрование полей

Подробная информация о том, какие поля шифруются на клиенте, а какие только на сервере — в разделе Область шифрования.