加密保险库
Encryption-at-Rest Vault
本地密钥管理、数据加密存储、seal/unseal 状态机与密钥恢复
子问题
1.DEK 密钥派生与包装
2.seal/unseal 状态机
3.recovery key 备份恢复
4.内存密钥清零
5.版本化密文格式与算法迁移路径
6.AAD 域分离防止密文跨上下文重放
7.明文数据透明迁移(SQL行级+文件级)
8.KDF 参数序列化与未来可调整性
各项目的解法1 solutions
Signals
横向对比
| 维度 | Moltis |
|---|---|
| 加密算法 | XChaCha20-Poly1305 AEAD,24字节随机nonce |
| 密钥派生 | Argon2id KDF,64MiB/3次迭代,参数可序列化 |
| 密钥架构 | DEK/KEK双层分离,密码变更O(1)不重加密数据 |
| 状态管理 | 三态状态机 Uninitialized→Sealed→Unsealed,RwLock并发 |
| 恢复机制 | 128-bit RecoveryKey独立Argon2id路径包装DEK |
| 内存安全 | Zeroizing<[u8;32]>自动清零,Drop时擦除密钥 |
| 版本迁移 | 密文首字节version_tag,Cipher trait可插拔替换 |
| 数据迁移 | 透明迁移:SQL行级+文件级,.bak备份+0o600权限 |
| 域分离 | AAD上下文绑定(env:KEY_NAME / dek-wrap / provider_keys) |
最佳实践
1.XChaCha20-Poly1305 优于 AES-GCM(nonce 更长)
2.Argon2id KDF 抗 GPU 攻击
3.Zeroize 确保密钥不残留内存
4.DEK/KEK 分离使密码变更 O(1) 无需重加密数据
5.密文首字节嵌入 version_tag 支持未来算法无缝迁移
6.Recovery Key 使用较轻 KDF 参数因其本身已有 128-bit 熵
7.迁移时原文件重命名为 .bak 而非删除,Unix 下 .enc 设置 0o600 权限