Skip to content

Vault Service

Файл: backend/src/services/vault.rs

Сервис управления криптографическим хранилищем (vault). Обеспечивает PIN-авторизацию, блокировку/разблокировку, восстановление через BIP39 фразу и управление состоянием защищённого хранилища секретов.

Эндпоинты

МетодПутьФункцияОписание
POST/api/vault/setupsetup_vault_with_recovery_svcНастроить vault с recovery-фразой
POST/api/vault/setup-pinsetup_pin_svcНастроить PIN (первичный/смена)
POST/api/vault/unlockunlock_vault_with_pin_svcРазблокировать по PIN
POST/api/vault/unlock-recoveryunlock_vault_with_recovery_svcРазблокировать по recovery-фразе
POST/api/vault/locklock_vault_svcЗаблокировать vault
POST/api/vault/change-pinchange_vault_pin_svcСменить PIN
POST/api/vault/reset-pinreset_pin_state_svcСбросить состояние попыток PIN
GET/api/vault/pin-stateget_pin_state_svcСостояние попыток PIN
GET/api/vault/is-pin-setis_pin_set_svcУстановлен ли PIN
GET/api/vault/is-unlockedis_unlocked_svcРазблокирован ли vault
GET/api/vault/statusget_vault_status_svcПолный статус vault
POST/api/vault/heartbeatvault_heartbeat_svcHeartbeat: продление сессии
POST/api/vault/auto-lockset_auto_lock_timeout_svcТаймаут автоблокировки
GET/api/vault/has-recovery-phrasehas_recovery_phrase_svcЕсть ли сохранённая recovery-фраза
GET/api/vault/recovery-phraseget_recovery_phrase_svcПолучить recovery-фразу
POST/api/vault/confirm-recovery-backupconfirm_recovery_backup_svcПодтвердить бэкап фразы
GET/api/vault/background-operation-modeget_background_operation_mode_svcРежим фоновых операций
POST/api/vault/background-operation-modeset_background_operation_mode_svcУстановить режим фоновых операций
POST/api/vault/resetreset_vault_svcПолный сброс vault

Зависимости

  • VaultManager — криптографические операции (Argon2, ChaCha20Poly1305)
  • DeviceManager — извлечение приватного ключа устройства
  • IdentityManager — flush pending signing key после разблокировки

setup_vault_with_recovery_svc

POST /api/vault/setup

Настраивает vault с предоставленной recovery-фразой и PIN-кодом. Используется при ручном восстановлении.

Параметры

ИмяТипОписание
wordsStringBIP39 recovery-фраза (12 слов через пробел)
pinString4-значный PIN-код
vault_managerArc<Mutex<VaultManager>>Менеджер хранилища
device_managerArc<Mutex<DeviceManager>>Менеджер устройств
identity_managerArc<Mutex<IdentityManager>>Менеджер идентичности

Логика

  1. Валидирует PIN (ровно 4 цифры)
  2. Парсит recovery-фразу из строки
  3. Извлекает приватный ключ устройства (до блокировки vault)
  4. Вызывает vault.setup_with_recovery_phrase(&phrase, &pin)
  5. Сохраняет приватный ключ устройства в vault
  6. Flush'ит pending identity signing key
  7. Записывает метрики

setup_pin_svc

POST /api/vault/setup-pin

Универсальный эндпоинт настройки PIN. При первом вызове генерирует BIP39 фразу и создаёт vault; при повторном — меняет PIN.

Возвращает

Result<SetupPinResponse, String> — содержит words: Vec<String> (пустой при смене PIN)

Логика

  1. Валидирует PIN (4 цифры)
  2. Если vault не настроен:
    • Генерирует новую BIP39 recovery-фразу
    • Создаёт vault с фразой и PIN
    • Сохраняет зашифрованную фразу в БД
    • Сохраняет приватный ключ устройства
    • Flush'ит pending signing key
    • Возвращает слова фразы
  3. Если vault уже настроен:
    • Проверяет, что vault разблокирован
    • Меняет PIN
    • Возвращает пустой список слов
plantuml Diagram

unlock_vault_with_pin_svc

POST /api/vault/unlock

Разблокирует vault по PIN-коду.

Возвращает

Result<UnlockResponse, String> — содержит success: bool и remaining_attempts: u32

Логика

  1. Вызывает vault.unlock_with_pin(&pin)
  2. Если успешно — flush'ит pending signing key
  3. Записывает метрики (успех/ошибка + длительность)
plantuml Diagram

unlock_vault_with_recovery_svc

POST /api/vault/unlock-recovery

Разблокирует vault по BIP39 recovery-фразе (используется при забытом PIN).

Логика

  1. Парсит recovery-фразу
  2. Вызывает vault.unlock_with_recovery_phrase(&phrase)
  3. Flush'ит pending signing key
  4. Записывает метрики
plantuml Diagram

lock_vault_svc

POST /api/vault/lock

Блокирует vault — секреты становятся недоступны до следующей разблокировки.

plantuml Diagram

change_vault_pin_svc

POST /api/vault/change-pin

Меняет PIN-код (vault должен быть разблокирован).

Логика

  1. Валидирует новый PIN (4 цифры)
  2. Вызывает vault.change_pin(&new_pin)

reset_pin_state_svc

POST /api/vault/reset-pin

Сбрасывает счётчик неудачных попыток PIN. Требует текущий PIN для верификации.

Логика

  1. Верифицирует текущий PIN через unlock_with_pin
  2. Вызывает vault.reset_pin_state()

get_pin_state_svc

GET /api/vault/pin-state

Возвращает состояние PIN: количество оставшихся попыток, время блокировки.


is_pin_set_svc / is_unlocked_svc

GET /api/vault/is-pin-set / GET /api/vault/is-unlocked

Проверки состояния: настроен ли vault, разблокирован ли. Это status endpoints — они не вызывают touch_activity() и не продлевают сессию auto-lock.


get_vault_status_svc

GET /api/vault/status

Возвращает полный статус vault: is_setup, is_unlocked, secrets_count, auto_lock_timeout, background_operation_mode. Это status endpoint — не продлевает сессию auto-lock.

plantuml Diagram

vault_heartbeat_svc

POST /api/vault/heartbeat

Единственный внешний способ продлить сессию auto-lock. Вызывается frontend activity tracker (mousemove/keydown/pointerdown, throttle 30s). Обновляет last_activity_at через touch_activity() и возвращает текущий статус unlock.

Возвращает

Result<bool, String>true если vault разблокирован

plantuml Diagram

set_auto_lock_timeout_svc

POST /api/vault/auto-lock

Устанавливает таймаут автоматической блокировки vault (в секундах).


has_recovery_phrase_svc / get_recovery_phrase_svc / confirm_recovery_backup_svc

Управление recovery-фразой:

  • has_recovery_phrase_svc — проверяет, есть ли сохранённая (незабэкапленная) фраза
  • get_recovery_phrase_svc — возвращает слова фразы (vault должен быть разблокирован)
  • confirm_recovery_backup_svc — удаляет фразу из БД (пользователь подтвердил, что записал)
plantuml Diagram

get_background_operation_mode_svc

GET /api/vault/background-operation-mode

Возвращает текущий режим фоновых операций: "continue" или "pause".


set_background_operation_mode_svc

POST /api/vault/background-operation-mode

Устанавливает режим фоновых операций при заблокированном vault.

Параметры

ИмяТипОписание
modeString"continue" или "pause"

Режимы

РежимОписание
continue(default) Фоновые задачи получают ScopedKey при старте и продолжают работу при auto-lock
pauseФоновые задачи используют кэш ключей из менеджеров, при lock — пауза, при unlock — resume

Связано: VaultManager.set_background_operation_mode(), ScopedKey


reset_vault_svc

POST /api/vault/reset

Полный сброс vault. Требует текущий PIN для верификации. Удаляет все секреты.

plantuml Diagram