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

Модель шифрования

Формат .rkvey v5: преамбула, AEAD на компартмент, append-only коммиты и изоляция секретов.

Формат .rkvey v5 (Rust Key Vault) реализует многоуровневую модель шифрования по best practices HKDF и AEAD. Ментальная модель: мастер-пароль → мастер-ключ → производные ключи → зашифрованные компартменты.

Каждая запись разделена на компартменты (метаданные, защищённые секреты, манифест и файлы вложений), каждый со своим ключом HKDF. Расшифрование одного компартмента не раскрывает остальные.

Модель шифрования QubKey v5

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

Пользовательский ввод (UTF-8) — никогда не сохраняется в виде открытого текста.

КДФ

Аргон2ид

Соль

16 байт (преамбула)

Память

64 МБ

Итерации

3

Параллелизм

4

Выход

256 бит

Мастер Ключ

256 бит · корневой ключ хранилища

ХКДФ-SHA256

информация="hdr"

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

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

ХКДФ-SHA256

информация="idx"

Индексный ключ

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

ХКДФ-SHA256

информация="отсек"

Ключ от отсека

ключ_отсека

За запись (v5)

HKDF(master_key, salt=file∥entry_id, info=kind∥sub_id) → Ключ отсека

Метаданные
Секреты
Атт. манифестировать
AES-256-GCM

Зашифрованные отсеки

Вывод ключа

Вывод преобразует мастер-пароль в пригодные криптографические ключи. Argon2id намеренно затратен по времени и памяти (~500 мс, 64 МБ), чтобы ограничить офлайн-атаки. В v5 каждый компартмент записи затем получает свой ключ через HKDF.

Ввод пользователя → мастер-пароль (UTF-8)

Argon2idmaster_key (256 бит) со случайной солью

HKDF-SHA256index_key для B-Tree

HKDF-SHA256compartment_key на запись и тип компартмента (метаданные, секреты, вложение…)

ПараметрЗначениеОписаниеПо умолчанию
VariantArgon2idГибридный вариант, рекомендованный OWASP — устойчив к GPU и атакам по побочным каналам
Memory64 MBПамять на вывод — повышает аппаратные затраты параллельных атак65536 KB
Iterations3Проходы по памяти — безопасность/производительность (~500 мс)
Parallelism4Параллельные потоки
Output32 bytesДлина выведенного ключа
Salt16 bytesСлучайная соль в преамбуле

AEAD-шифрование

AES-256-GCM (по умолчанию)

  • Аппаратная поддержка AES-NI на современных процессорах
  • Nonce: 12 байт, тег аутентификации: 16 байт
  • Теоретический предел: ~64 ГБ зашифрованных данных на ключ

Когда выбирать: машины с аппаратным ускорением AES, ежедневное использование.

Шифр по умолчанию на большинстве платформ для оптимальной производительности.

XChaCha20-Poly1305 (опционально)

  • Расширенный nonce: 24 байта (пренебрежимо мала вероятность коллизий)
  • Нет зависимости от железа — стабильная производительность на всех CPU
  • Рекомендуется для долгоживущих ключей

Когда выбирать: архивные хранилища, машины без AES-NI, предпочтение ChaCha20.

Включается в расширенных настройках хранилища.

Структура файла

preamble
header.enc
btree_root.enc
btree_nodes.enc
core_meta.enc
protected_secrets.enc
attachment_manifest.enc
attachment_blob_*.enc
commit_N
footer (validated)

Описание структуры (v5):

  • preamble — Magic Bytes, версия формата, соль Argon2id
  • header.enc — зашифрованные метаданные хранилища (имя, дата создания, настройки)
  • index/ — зашифрованный B-Tree для поиска O(log n) без расшифрования секретов
  • compartments/ — AEAD-блоки по типу: метаданные, защищённые секреты, манифест, вложения
  • append/ — регион коммитов: новые компартменты + снимок индекса + проверенный footer

Целостность и коммиты

Устойчивость

Append-only коммиты гарантируют целостность при прерывании:

  1. Новые компартменты добавляются в конец файла
  2. Записывается зашифрованный снимок индекса
  3. Данные синхронизируются на диск (fsync)
  4. Проверенный footer завершает коммит (точка согласованности)

Реальный сценарий: вы редактируете запись и питание отключается во время записи. При перезапуске QubKey находит последний действительный footer — без потери данных, без тихой порчи. Периодическая компактификация записывает чистый файл, когда накапливается слишком много устаревших данных.

Изоляция на компартмент

Через HKDF-SHA256 каждый компартмент получает свой compartment_key, выведенный из мастер-ключа с ID записи и типом компартмента. Практические последствия:

  • Просмотр записи расшифровывает только метаданные; секреты остаются скрытыми до явного раскрытия
  • Вложения загружаются по отдельности (загрузка / предпросмотр), не при открытии хранилища
  • Индекс B-Tree использует свой index_key, отдельный от данных
  • Изменение секрета не обязательно перезаписывает неизменённые файлы вложений

Эта изоляция нативно реализована в формате .rkvey v5.

Криптографические примитивы

ПримитивИспользованиеБиблиотека
Argon2idПароль → вывод ключаargon2 (RustCrypto)
HKDF-SHA256Ключ → вывод производного ключаhkdf (RustCrypto)
AES-256-GCMAEAD-шифрованиеaes-gcm (RustCrypto)
XChaCha20-Poly1305AEAD-шифрование (alt)chacha20poly1305 (RustCrypto)
HMAC-SHA256Целостность файлаhmac (RustCrypto)
CSPRNGГенерация случайностиgetrandom (OS)