Надежные зашифрованные контейнеры с поддержкой FIDO2 и постквантовой криптографии
Облачные провайдеры любят повторять фразу «ваши данные зашифрованы при хранении». Звучит успокаивающе, пока не вспомнишь, у кого хранятся ключи от этого шифрования. Если ключи у хостинга, то любой запрос от регуляторов, внутренняя утечка или скомпрометированный токен доступа открывают файлы посторонним.
Чтобы не полагаться на доверие к чужому сервису, данные шифруют на клиенте до отправки в сеть. Для этого есть VeraCrypt, gocryptfs или age, но у каждого свои компромиссы: старые форматы, отсутствие поддержки аппаратных ключей или сложности при монтировании контейнера как обычного диска.
Недавно наткнулся на проект LUKSbox, написанный на Rust. Это инструмент для создания зашифрованных файловых контейнеров, который берет лучшие идеи из мира LUKS2, но адаптирует их под облачное хранение, USB-накопители и современные методы аутентификации.
Что внутри контейнера
В основе концепции лежит простой подход: все данные упаковываются в один файл .lbx. Для внешнего наблюдателя или облачного диска этот файл выглядит как случайный шум, в нем нет очевидных заголовков или метаданных, если вынести заголовок в отдельный файл.
При этом контейнер монтируется в операционную систему как обычный диск через FUSE (на Linux и macOS) или WinFsp (на Windows). Вы работаете с ним так же, как с обычной флешкой.
Главная задача проекта, как ее описывают авторы, это создание переносимой защищенной копии. Вы заливаете .lbx в S3, Dropbox или на общую сетевую шару и спокойны: хост физически не способен прочитать содержимое.
Способы разблокировки и защита от квантовых компьютеров
Обычно зашифрованные хранилища требуют пароль. В LUKSbox пароли тоже есть, они хэшируются через Argon2id с серьезными параметрами по умолчанию, но разработчики пошли дальше и добавили слоты для аппаратных ключей.
Вот какие варианты открытия хранилища поддерживаются:
- FIDO2-аутентификаторы. Можно привязать YubiKey, Nitrokey или Google Titan через протокол HMAC-secret. Без физического касания ключа контейнер не откроется.
- TPM 2.0. Привязка к аппаратному чипу вашей материнской платы на Linux и Windows. Удобно, если контейнер должен открываться только на рабочей станции.
- Постквантовый гибридный режим. Защита от сценария «перехвати сейчас, расшифруй потом на квантовом компьютере». LUKSbox умеет совмещать классические алгоритмы с алгоритмом ML-KEM (FIPS 203, бывший Kyber). Для этого создается отдельный файл-ключ
.kyber, который можно держать отдельно от контейнера.
Все эти слоты не шифруют файлы напрямую. Они оборачивают мастер-ключ тома (Master Volume Key). При успешной валидации любого слота мастер-ключ расшифровывается, а из него через HKDF-SHA256 выводятся ключи для метаданных, блоков файлов и проверки целостности.
+-------------------------------------------------------------+
| Пароль / FIDO2 / TPM 2.0 / ML-KEM (.kyber) |
+------------------------------+------------------------------+
|
v
+-------------------------------+
| Master Volume Key (MVK) |
+---------------+---------------+
|
+---------------------+---------------------+
v v v
+-----------------+ +-----------------+ +-----------------+
| Header HMAC Key | | Metadata Key | | Per-file Keys |
+-----------------+ +-----------------+ +-----------------+
Безопасность на уровне деталей
В репозитории приятно удивляет внимание к мелочам, о которых многие разработчики забывают.
По умолчанию для шифрования блоков используется AES-256-GCM-SIV. Добавка SIV дает устойчивость к повторному использованию nonce, что полезно при частых перезаписях. Также можно выбрать ChaCha20-Poly1305 или стандартный AES-256-GCM.
Несколько интересных находок из исходников:
- Защита от подмены блоков. Каждый зашифрованный кусок файла снабжается дополнительными данными аутентификации (AAD), куда входят ID файла, индекс блока и счетчик генерации. Злоумышленник в облаке не сможет тихо подменить новый блок старой версией или поменять куски местами.
- Очистка памяти. В ядре Linux используется системный вызов
memfd_secret, исключающий мастер-ключ из дампов памяти ядра и образов гибернации. На остальных системах применяется связка из блокировки памяти и обнуления буферов через типажиZeroize. - Защита от rollback-атак. Опциональный сайдкар-файл
.anchorхранит подписанный счетчик изменений. Если провайдер откатит весь контейнер до устаревшей версии, программа это заметит. - Отдельный заголовок. Если вынести заголовок в файл
.hdr, основной контейнер.lbxпревращается в массив байт без сигнатур.
Быстрый старт
Проект написан на Rust, поэтому собрать его из исходников можно стандартным cargo build. Для большинства платформ есть готовые пакеты .deb, .rpm, инсталляторы под Windows и бандлы под macOS.
Управлять контейнерами можно тремя путями: через CLI, интерактивный TUI-мастер или графический интерфейс на egui.
Создание обычного контейнера и монтирование:
# Создаем хранилище с настройками по умолчанию
luksbox create my-vault.lbx
# Монтируем как директорию в Linux/macOS
luksbox mount my-vault.lbx /mnt/vault
# Или в отдельный диск в Windows
luksbox mount my-vault.lbx Z:
Добавление аппаратного ключа FIDO2 в уже существующий контейнер:
luksbox enroll my-vault.lbx --kind fido2
Создание постквантового контейнера с гибридным ключом на отдельной флешке:
luksbox create secure-data.lbx --kind hybrid-pq --pq-hybrid /media/usb/key.kyber
Если не хочется запоминать флаги командной строки, команда luksbox wizard запускает пошаговый диалог в терминале.
Практические сценарии
LUKSbox решает задачу безопасной транспортировки и удаленного хранения. Вот ситуации, где проект выглядит удачно:
- Синхронизация через сторонние облака. Вы храните базу паролей, личные ключи или рабочие документы в едином
.lbxфайле внутри папки Google Drive или Яндекс Диска. - Резервные копии на чужих серверах. Скрипт бэкапа монтирует контейнер, складывает туда свежие дампы и отмонтирует диск.
- Обмен секретными архивами. Передача файлов коллеге с требованием физического подтверждения через аппаратный токен.
Текущий статус проекта
Проект находится в стадии pre-1.0. Формат контейнеров v3 уже зафиксирован, в репозитории настроен фаззинг через libFuzzer и AFL++ с миллионами итераций. Проведено 14 внутренних раундов аудита безопасности, хотя сторонний независимый аудит еще впереди.
Авторы честно предупреждают: зашифрованный контейнер — это единая точка отказа. Если файл повредится или потеряются все ключи, данные восстановить невозможно. Поэтому LUKSbox предназначен для защищенных переносимых копий, а не в качестве единственного места хранения критически важных файлов.
Если вам нужен современный кроссплатформенный инструмент для шифрования с поддержкой FIDO2 и заделом на постквантовую эру, к репозиторию определенно стоит присмотреться. Исходный код распространяется под лицензией Apache-2.0.
