Архитектура безопасности
Стек Rust/Tauri, формат .rkvey v5, компартменты, отложенное расшифрование и модель угроз.
Безопасность QubKey основана на многоуровневой архитектуре и принципе эшелонированной защиты: файловая система, формат .rkvey v5, криптография и ядро приложения на Rust защищают ваши секреты на каждом этапе — от хранения до разблокировки.
Каждый уровень даёт дополнительную гарантию. Если отсутствует системная защита (например, шифрование диска), уровни приложения и криптографии по-прежнему защищают хранилище. В формате v5 секреты записи расшифровываются только когда вы их просматриваете или копируете — не при открытии хранилища и не в списке.
Интерфейс (React + Таури)
- Сейф
- Папки
- Поиск
- Генератор
- Одноразовые коды
- Панель управления
- Синхронизировать
- Совместное использование
- Расширение для браузера
Ядро ржавчины (QubKey Core)
- Формат .rkvey v5
- Вывод Argon2id
- Аутентифицированное шифрование
- Индекс поиска
- Безопасные коммиты
- Очистка памяти
- Восстановление после сбоя
Файл .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 |
|---|---|---|
| Несанкционированный доступ к файлу | Кража или копия .rkvey | AEAD-шифрование + вывод Argon2id |
| Сетевая утечка данных | Перехват в облаке / MITM | Local-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 организует доверие на нескольких дополняющих уровнях:
-
Вы контролируете доступ — мастер-пароль и при необходимости ключ восстановления управляют доступом к хранилищу. QubKey не может их прочитать или сбросить.
-
Интеграция с системой — QubKey использует безопасность ОС: права на файлы, шифрование диска (FileVault, BitLocker, LUKS), защищённое хранилище (Keychain, Credential Manager) и изоляцию процессов.
-
Разделение Rust / UI — Вся криптография выполняется в ядре Rust с безопасностью памяти на этапе компиляции. React UI взаимодействует через Tauri IPC; WebView не имеет прямого доступа к мастер-паролю.
-
Осторожная работа с памятью (v5) — При разблокировке расшифровываются только заголовок и индекс. Секреты и вложения остаются зашифрованными до явного действия (просмотр, копирование, загрузка). При блокировке: zeroization и очистка буфера обмена.
-
Расширение браузера — Локальный Native Messaging; расширение никогда не получает мастер-пароль.
Функции защиты
Автоблокировка
Хранилище блокируется после настраиваемого периода бездействия (по умолчанию: 5 мин.). Запускает zeroization и очистку буфера обмена.
Отложенное расшифрование
Секреты записи расшифровываются только когда вы их просматриваете или копируете. Список и просмотр не показывают защищённые поля.
Zeroization
Секреты удаляются из RAM при блокировке (Rust crate zeroize); кэши очищаются, только эфемерное расшифрование по запросу.
Таймаут буфера обмена
Буфер обмена автоматически очищается через 30 секунд. Настраивается в параметрах хранилища.