Перейти к содержанию

Безопасность данных

BlackMark использует модель zero-knowledge (слепое хранилище) для чувствительных данных пользователя. Это означает, что ключи шифрования генерируются и хранятся только на стороне клиента; сервер не может расшифровать содержимое хранилища.

Компоненты

Файл Назначение
static/vault.js Криптографическая логика: генерация ключа, шифрование, расшифровка, взаимодействие с API.
static/vault_ui.js Интерфейс хранилища: настройка, разблокировка, сохранение и восстановление снимков.
app.py Backend-эндпоинты для хранения и получения зашифрованных данных.

Ключевые принципы

  • Ключ у пользователя. Мастер-ключ шифрования генерируется в браузере и не покидает его в открытом виде.
  • Recovery key. При настройке выдаётся резервный ключ для восстановления доступа.
  • Шифротекст на сервере. Сервер хранит только зашифрованные данные и не имеет доступа к ключам.
  • Флаг активации. Интерфейс хранилища отображается только если window.VAULT_ENABLED === true.

Технические детали

Криптография в static/vault.js:

  • AES-GCM с 256-битным ключом.
  • Ключ извлекается из пароля через PBKDF2 с солью и 150 000 итераций.
  • Случайный IV (инициализирующий вектор) для каждой операции шифрования.

Backend-эндпоинты

  • GET /api/vault/status — статус хранилища.
  • POST /api/vault — сохранить зашифрованную запись.
  • GET /api/vault — список записей.
  • GET /api/vault/<id> — получить запись.
  • DELETE /api/vault/<id> — удалить запись.
  • POST /api/vault/keys — сохранить обёрнутый ключ.
  • GET /api/vault/keys — получить обёрнутые ключи.
  • POST /api/vault/reset — полный сброс хранилища.

Что хранится в хранилище

По умолчанию — снимок localStorage текущей сессии: черновики форм, локальные настройки и промежуточные данные. Содержимое зашифровывается перед отправкой.

Ограничения и риски

  • Потеря пароля и recovery key равнозначна потере данных в хранилище.
  • Аккаунт, оплата и основные функции сервиса не зависят от хранилища.
  • Для работы шифрования требуется современный браузер с поддержкой Web Crypto API.

Пароли

При регистрации и сбросе пароля действуют следующие требования:

  • минимум 10 символов;
  • символы минимум из трёх из четырёх групп: строчные латинские, заглавные латинские, цифры, спецсимволы;
  • пароль не должен совпадать с логином или содержать его;
  • пароль не должен входить в локальный список распространённых/утекших паролей.