加密模型
.rkvey v5 格式:序言、按隔间 AEAD、仅追加提交与密钥隔离。
.rkvey v5 格式(Rust Key Vault)按 HKDF 与 AEAD 最佳实践实现多层加密模型。概念模型:主密码 → 主密钥 → 子密钥 → 加密隔间。
每个条目分为 隔间(元数据、受保护密钥、清单与附件文件),各自拥有独立 HKDF 密钥。解密一个隔间不会暴露其他隔间。
QubKey v5 加密模型
主密码
用户输入 (UTF-8) — 从未以明文形式存储
氩气2id
盐
16 字节(前导码)
记忆
64MB
迭代
3
并行性
4
输出
256位
万能钥匙
256 位·保险库根密钥
HKDF-SHA256
信息=“人类发展报告”
标题键
标头键
HKDF-SHA256
信息=“idx”
索引键
索引键
HKDF-SHA256
信息=“车厢”
车厢钥匙
隔间钥匙
每个条目 (v5)
HKDF(master_key, salt=file∥entry_id, info=kind∥sub_id) → 分区密钥
加密隔间
密钥派生
派生将主密码转换为可用的密码学密钥。Argon2id 有意消耗时间与内存(约 500 ms、64 MB)以限制离线暴力破解。在 v5 中,每个条目隔间随后通过 HKDF 获得独立密钥。
用户输入 → 主密码(UTF-8)
Argon2id → 带随机 Salt 的 master_key(256 位)
HKDF-SHA256 → B-Tree 的 index_key
HKDF-SHA256 → 按条目与隔间类型(元数据、密钥、附件…)的 compartment_key
| 参数 | 值 | 说明 | 默认 |
|---|---|---|---|
Variant | Argon2id | OWASP 推荐的混合变体 —— 抗 GPU 与侧信道 | — |
Memory | 64 MB | 每次派生占用内存 —— 提高并行攻击硬件成本 | 65536 KB |
Iterations | 3 | 内存遍历次数 —— 安全/性能(约 500 ms) | — |
Parallelism | 4 | 并行线程 | — |
Output | 32 bytes | 派生密钥长度 | — |
Salt | 16 bytes | 序言中的随机 Salt | — |
AEAD 加密
AES-256-GCM(默认)
- 现代 CPU 的 AES-NI 硬件加速
- Nonce:12 字节,认证标签:16 字节
- 理论上限:每密钥约 64 GB 加密数据
适用场景:具备 AES 硬件加速的机器、日常使用。
多数平台上的默认算法,性能最优。
XChaCha20-Poly1305(可选)
- 扩展 Nonce:24 字节(碰撞概率可忽略)
- 不依赖硬件 —— 所有 CPU 上性能稳定
- 推荐用于长期存档保险库
适用场景:归档保险库、无 AES-NI 的机器、偏好 ChaCha20。
可在高级保险库设置中启用。
文件结构
结构说明(v5):
preamble—— 魔数、格式版本、Argon2id Saltheader.enc—— 加密的保险库元数据(名称、创建日期、设置)index/—— 加密 B-Tree,O(log n) 搜索且无需解密密钥compartments/—— 按类型的 AEAD 块:元数据、受保护密钥、清单、附件append/—— 提交区域:新隔间 + 索引快照 + 已验证页脚
完整性与提交
容错能力
仅追加提交 保证中断时的完整性:
- 将新隔间追加到文件末尾
- 写入加密索引快照
- 同步到磁盘(fsync)
- 已验证页脚 完成提交(一致性点)
真实场景:编辑条目时断电导致写入中断。重启后 QubKey 找到最新有效页脚 —— 无数据丢失、无静默损坏。过时空间过多时定期压缩写入干净文件。
按隔间隔离
通过 HKDF-SHA256,每个隔间拥有从主密钥按条目 ID 与隔间类型派生的独立 compartment_key。实际效果:
- 查看条目仅解密 元数据;密钥保持掩码直至显式显示
- 附件 单独加载(下载/预览),打开保险库时不加载
- B-Tree 索引使用与数据分离的
index_key - 修改密钥时不一定重写未变更的附件文件
该隔离原生内建于 .rkvey v5 格式。
密码学原语
| 原语 | 用途 | 库 |
|---|---|---|
| Argon2id | 密码 → 密钥派生 | argon2 (RustCrypto) |
| HKDF-SHA256 | 密钥 → 子密钥派生 | hkdf (RustCrypto) |
| AES-256-GCM | AEAD 加密 | aes-gcm (RustCrypto) |
| XChaCha20-Poly1305 | AEAD 加密(备选) | chacha20poly1305 (RustCrypto) |
| HMAC-SHA256 | 文件完整性 | hmac (RustCrypto) |
| CSPRNG | 随机数生成 | getrandom (OS) |