如果你在家用服务器上跑ZFS,大概率已经习惯了这种妥协:磁盘加密本身很香——数据静态保护、压缩去重照样工作、还能按数据集细粒度加密——但密钥放哪儿,始终是个头疼事。
常见的做法有两种,各有各的别扭。
第一种,每次开机让管理员SSH进去输密码。安全性尚可,密钥不落地,但无人值守重启就崩了。凌晨三点服务器挂了,你人在外地,数据只能干等。更隐蔽的问题是,这逼着你选那种手机键盘能敲出来的弱密码。
第二种,把密钥明文丢在未加密分区的文件里,开机自动读取。卖硬盘或报废时数据是安全的,但只要有人物理接触机器,或者能读到那个分区,密钥白送。对某些威胁模型够用,但严格来说这不算加密,只是报废卫生。
我想要的是:密钥不以明文存于服务器,不需要SSH解锁,手机 anywhere 点一下就能授权。这是我做 Revaulter 的初衷,下面讲具体怎么用它实现ZFS开机自动解锁。
Revaulter 我已经用了几年,用来把密钥从磁盘和环境变量里清出去。本月初发布的 v2 几乎是完全重写,最大变化是改用通行密钥(WebAuthn PRF 扩展)直接在浏览器派生加密密钥。旧版依赖 Azure Key Vault 托管密钥,能用,但运维负担重得多。
流程概览:
• 服务器脚本调用 revaulter-cli 请求加解密操作
• Revaulter 向你推送通知(Discord、Slack 或任意 HTTPS 端点)
• 你在电脑或手机上打开 Web UI
• 用通行密钥认证并批准请求
加密方案的几个关键点(完整文档见密码学架构文档):
• 浏览器本地执行实际加密运算,密钥由通行密钥派生,结果端到端加密回传 CLI。Revaulter 服务端永不接触明文,也不持有密钥。
• 加密信封(envelope)采用混合方案:X25519 做密钥封装,AES-256-GCM 做数据封装。X25519 的私钥通过 PRF 扩展从通行密钥导出,这意味着只有同一通行密钥能解密。
热门跟贴