>_ DevTrendszh

语言

首页

语言

板块

前端 后端 移动端 DevOps AI / ML 游戏开发 区块链 嵌入式 安全
Rust

使用 FIDO2 和后量子密码学的可靠加密容器

LUKSbox

云服务商喜欢重复"您的数据在静态时已加密"这句话。这听起来很让人安心,直到你想起谁掌握着加密的密钥。如果托管服务商拥有密钥,那么任何监管请求、内部泄露或被攻破的访问令牌都会让你的文件暴露给外部人员。

为了避免依赖对他人服务的信任,数据在发送前会在客户端进行加密。VeraCrypt、gocryptfs 和 age 等工具可以完成这项工作,但每种方案都有其权衡:格式过时、缺乏硬件密钥支持,或在将容器挂载为常规磁盘时遇到困难。

我最近发现了 LUKSbox,这是一个用 Rust 编写的项目。它是一种创建加密文件容器的工具,借鉴了 LUKS2 的最佳理念,但针对云存储、U 盘和现代身份验证方式进行了调整。


容器内部有什么

核心概念很简单:所有数据被打包成单个文件 .lbx。对于外部观察者或云盘来说,只要将头部存储在单独的文件中,这个文件看起来就像随机噪声,没有明显的头部或元数据。

同时,容器可以通过 FUSE(在 Linux 和 macOS 上)或 WinFsp(在 Windows 上)在操作系统中挂载为常规磁盘。你可以像使用普通 U 盘一样操作它。

Penthertz

项目的主要目标,正如作者所描述的,是创建可移植的安全副本。你上传 .lbx 到 S3、Dropbox 或共享网络驱动器,然后高枕无忧:主机在物理上无法读取内容。


解锁方式和量子计算机防护

通常,加密存储需要密码。LUKSbox 也有密码,通过 Argon2id 进行哈希处理,使用了相当严格的默认参数,但开发者进一步添加了硬件密钥插槽。

以下是支持的存储解锁选项:

  1. FIDO2 认证器。你可以通过 HMAC-secret 协议绑定 YubiKey、Nitrokey 或 Google Titan。没有物理接触密钥,容器就无法打开。
  2. TPM 2.0。绑定到 Linux 和 Windows 上主板的硬件芯片。如果容器只应在工作站上打开,这很方便。
  3. 后量子混合模式。防止"现在收集,以后用量子计算机解密"的场景。LUKSbox 可以将经典算法与 ML-KEM 算法(FIPS 203,原 Kyber)结合使用。会为此创建一个单独的密钥文件 .kyber,你可以将其与容器分开保存。

这些插槽都不会直接加密文件。它们用于包装主卷密钥。任何插槽验证成功后,主密钥被解密,并通过 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 上,mlock 系统调用将主密钥排除在内核内存转储和休眠镜像之外。在其他系统上,使用内存锁定和通过 Drop 特性清零缓冲区的组合。
  • 回滚攻击保护。可选的侧边文件 .anchor 存储签名变更计数器。如果提供商将整个容器回滚到旧版本,程序会注意到。
  • 分离头部。如果你将头部移动到 .hdr 文件,主容器 .lbx 就变成了没有签名的字节数组。

快速开始

项目使用 Rust 编写,因此你可以用标准 cargo 方式从源码构建。大多数平台都有预编译包 .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

在单独的 U 盘上创建带有混合密钥的后量子容器:

luksbox create secure-data.lbx --kind hybrid-pq --pq-hybrid /media/usb/key.kyber

如果你不想记住命令行参数,luksbox create 命令会在终端启动逐步对话。


实际场景

LUKSbox 解决了安全传输和远程存储的问题。以下是项目看起来很适合的场景:

  1. 通过第三方云同步。你将密码数据库、个人密钥或工作文档存储在 Google Drive 或 Yandex Disk 文件夹内的单个 .lbx 文件中。
  2. 外部服务器备份。备份脚本挂载容器,放入新的转储文件,然后卸载磁盘。
  3. 分享保密档案。向同事发送文件,并要求通过硬件令牌进行物理确认。

当前项目状态

项目处于 pre-1.0 阶段。容器格式 v3 已冻结,模糊测试通过 libFuzzer 和 AFL++ 配置了数百万次迭代。已完成十四轮内部安全审计,尽管独立第三方审计仍在进行中。

作者坦诚警告:加密容器是单一故障点。如果文件损坏或所有密钥丢失,数据将无法恢复。因此,LUKSbox 设计用于受保护的便携式副本,而不是作为重要文件的唯一存储位置。

如果你需要具有 FIDO2 支持和后量子安全性的现代跨平台加密工具,代码库绝对值得一看。源代码采用 Apache-2.0 许可证发布。

相关项目