Безопасность

Архитектура безопасности

Стек Rust/Tauri, формат .rkvey v5, компартменты, отложенное расшифрование и модель угроз.

Безопасность QubKey основана на многоуровневой архитектуре и принципе эшелонированной защиты: файловая система, формат .rkvey v5, криптография и ядро приложения на Rust защищают ваши секреты на каждом этапе — от хранения до разблокировки.

Каждый уровень даёт дополнительную гарантию. Если отсутствует системная защита (например, шифрование диска), уровни приложения и криптографии по-прежнему защищают хранилище. В формате v5 секреты записи расшифровываются только когда вы их просматриваете или копируете — не при открытии хранилища и не в списке.

UI

Интерфейс (React + Таури)

  • Сейф
  • Папки
  • Поиск
  • Генератор
  • Одноразовые коды
  • Панель управления
  • Синхронизировать
  • Совместное использование
  • Расширение для браузера
Core

Ядро ржавчины (QubKey Core)

  • Формат .rkvey v5
  • Вывод Argon2id
  • Аутентифицированное шифрование
  • Индекс поиска
  • Безопасные коммиты
  • Очистка памяти
  • Восстановление после сбоя
Storage

Файл .rkvey v5 в файловой системе

  • Преамбула
  • Зашифрованный заголовок
  • Зашифрованный индекс
  • Секретные отсеки
  • Вложения
  • История коммитов

Уровни безопасности

Поток разблокировки

Разблокировка следует строгому конвейеру: мастер-пароль попадает в ядро Rust, Argon2id выводит мастер-ключ, производные ключи расшифровывают заголовок и индекс B-Tree. Компартменты записи (секреты, вложения) остаются зашифрованными и читаются только по запросу. При блокировке все ключи и секреты удаляются из памяти.

Мастер-пароль + соль

.rkvey преамбула (открытый текст)

  • Введено в ядро ​​Rust (Tauri IPC) — никогда не отображается в WebView.
  • Случайная соль хранится в преамбуле (16 байт).
КДФ

Аргон2ид

  • 64 МБ ОЗУ · 3 итер · p=4 (по умолчанию `KdfParams`)
  • Сопротивление графического процессора/ASIC
  • Калибровка ~250–500 мс в зависимости от платформы

Мастер-ключ

256 бит · `KeyManager::derive_master_key`

Получение подраздела

HKDF-SHA256(master, salt=файл∥запись, информация=вид)

заголовок_ключ

Безопасный заголовок

индексный_ключ

Индекс B-дерева

ключ_отсека

Отделения

AEAD расшифровка

  • AES-256-GCM или XChaCha20-Poly1305
  • Заголовок · Указатель · Отделения (по запросу)

Память после разблокировки

  • Список/просмотр: только метаданные
  • Секреты и вложения расшифровываются только по требованию

Замок

  • `KeyManager::clear_keys()` + обнулить
  • Секреты стерты и буфер обмена очищен.

Модель угроз

QubKey рассчитан на самые частые сценарии угроз локального менеджера. Таблица описывает вектор атаки и встроенную защиту (формат .rkvey v5).

УгрозаВекторОтвет QubKey
Несанкционированный доступ к файлуКража или копия .rkveyAEAD-шифрование + вывод Argon2id
Сетевая утечка данныхПерехват в облаке / MITMLocal-first: QubKey не загружает ваши секреты
Повреждение данныхСбой при записиПроверенные append-only коммиты + восстановление при запуске
Манипуляция хранилищемРучное изменение файлаAEAD-аутентификация на компартмент + контрольные суммы
Снимок памяти (навигация)Хранилище открыто, список / просмотрСекреты остаются зашифрованными, пока вы их не просмотрите
Слабый мастер-парольОфлайн-попыткиКалиброванный Argon2id (~500 мс) + индикатор энтропии
Повторное использование пароляУтечки на других сайтахПанель безопасности (локальное обнаружение)
Утечки через буфер обменаКопирование секретаТаймаут буфера (30 с) + очистка при блокировке
Атака по побочному каналуТайминг криптографических операцийРеализации с постоянным временем (RustCrypto)

Лучшие практики

Эта модель покрывает угрозы, которые QubKey адресует напрямую через свою архитектуру. Для оптимальной защиты сочетайте QubKey с системными best practices: включённое шифрование диска, актуальная ОС и надёжный мастер-пароль.

Комплексная защита

ОбластьКак QubKey защищает ваши данные
Данные в покоеAEAD (AES-256-GCM / XChaCha20), ключ Argon2id, отдельные ключи на компартмент
Целостность хранилищаПроверенные append-only коммиты, контрольные суммы и атомарные записи
КонфиденциальностьZero-knowledge: ваши секреты остаются зашифрованными на устройстве
Отложенное расшифрованиеСписок и просмотр без секретов; показ / копирование только по запросу
Вывод ключаКалиброванный Argon2id (~500 мс, 64 МБ) для защиты мастер-пароля
ПриложениеИзолированное ядро Rust, UI через Tauri IPC, zeroization при блокировке
Расширение браузераЛокальный Native Messaging — расширение никогда не получает мастер-пароль
SyncОпциональная зашифрованная мультиустройственная синхронизация (облако или self-host) или зашифрованный файл .rkvey (облако, USB, NAS)

Архитектура доверия

Zero-knowledge

QubKey организует доверие на нескольких дополняющих уровнях:

  1. Вы контролируете доступ — мастер-пароль и при необходимости ключ восстановления управляют доступом к хранилищу. QubKey не может их прочитать или сбросить.

  2. Интеграция с системой — QubKey использует безопасность ОС: права на файлы, шифрование диска (FileVault, BitLocker, LUKS), защищённое хранилище (Keychain, Credential Manager) и изоляцию процессов.

  3. Разделение Rust / UI — Вся криптография выполняется в ядре Rust с безопасностью памяти на этапе компиляции. React UI взаимодействует через Tauri IPC; WebView не имеет прямого доступа к мастер-паролю.

  4. Осторожная работа с памятью (v5) — При разблокировке расшифровываются только заголовок и индекс. Секреты и вложения остаются зашифрованными до явного действия (просмотр, копирование, загрузка). При блокировке: zeroization и очистка буфера обмена.

  5. Расширение браузера — Локальный Native Messaging; расширение никогда не получает мастер-пароль.

Функции защиты

Автоблокировка

Хранилище блокируется после настраиваемого периода бездействия (по умолчанию: 5 мин.). Запускает zeroization и очистку буфера обмена.

Отложенное расшифрование

Секреты записи расшифровываются только когда вы их просматриваете или копируете. Список и просмотр не показывают защищённые поля.

Zeroization

Секреты удаляются из RAM при блокировке (Rust crate zeroize); кэши очищаются, только эфемерное расшифрование по запросу.

Таймаут буфера обмена

Буфер обмена автоматически очищается через 30 секунд. Настраивается в параметрах хранилища.