
ZKeys 推出托管服务,让加密磁盘服务器能无人值守重启
来源标题:Unattended Reboots with Encrypted Disks
ZKeys 是一项托管服务,将加密口令存储在异地,让家庭服务器或 NAS 在加密磁盘的情况下也能自动重启并获取密钥。它旨在兼顾自动重启的便利与磁盘加密的保护,避免密钥随机器一同被盗。客户端机器在启动时从该服务获取加密密钥。
以下正文由 AI 翻译自 Hacker News 最新(原文版权归原站所有),可能存在偏差,重要内容请以原文为准。
你运行着一台小型家用服务器或 NAS,里面存着珍贵的照片和敏感文件吗?如果是的话,我猜硬盘肯定加密了吧?但这样一来……你能在不手动输入密码短语的情况下重启机器,然后重新访问文件吗?
如果你对上面的问题回答“是”——为了图方便,这很常见——那就意味着加密密钥就存放在机器上,这……多少让磁盘加密失去了意义,对吧?小偷可以闯进你家,把整个盒子搬走(现在的设备都很小,是吧),插到别处通电,就能随意翻看你的文件了。
那么,到底选哪条路?是允许自动重启换来简单可靠,还是把密钥记在脑子里换来数据保护?有了 ZKeys——我今天刚发布的一个小项目——你可以两者兼得。
一个关于操作系统、编程语言、测试、构建系统、我自己的软件项目乃至个人生产力的博客。具体涉及 FreeBSD、Linux、Rust、Bazel 和 EndBASIC。
ZKeys 是一项托管服务,将加密密码短语存储在异地。客户端机器从该服务获取加密密钥,并通过定期的 keepalive 消息让密钥保持存活(解锁状态)。
如果服务器长时间收不到这些消息(例如因为机器作为盗窃的一部分被拔掉了电源),对密钥的访问就会自动锁定。这样你既能享受自动的、无需密码的重启,又能保护数据免受真实事件的影响。
大约一年前,我在短暂使用 Synology 设备之后,重新安装了 FreeBSD 家用服务器来充当 NAS。在这个过程中,我决定为 ZFS 数据池启用加密。但这么做的时候,我面临一个问题:如何让机器在重启后自动提供数据服务?我可以把密钥放在本地文件中,FreeBSD 通过 ZFS 的 keylocation 选项支持这种做法,但那会让磁盘加密几乎形同虚设。
于是有了一个想法:如果把密钥放在我家以外的另一台机器上呢?这样我就能让 NAS 去获取密钥来挂载硬盘。如果有人偷走了服务器,我可以在他们重新插电之前擦除远程密钥,让数据无法读取。我把这个想法发到了 Twitter 上,确实引起了一些兴趣:
愚蠢还是聪明?我写了一个启动 rc.d 脚本,通过从远程服务器获取密钥来自动挂载加密的 ZFS 池。我想防范的是“硬盘从家中被盗”这种情况。如果发生了,我可以迅速删除密钥。https://t.co/eZle2nJlXW
但是……你注意到我上面说的有什么问题了吗?在发现出问题之后手动擦除密钥是有问题的,因为这两个事件之间的时间差可能很大。如果我正在度长假,根本没办法注意到机器被盗了呢?那就完蛋了。
于是我改进了这个想法:如果有一个服务在远程存储密钥,并要求使用密钥的机器频繁发送 ping 来保持密钥解锁,会怎样?这样一来,如果机器被盗,它很可能会离线超过几分钟,服务就能自动判定出了问题,并锁定密钥,阻止后续访问。而这正是 ZKeys 所做的。
在深入细节之前,有必要先说明一点:ZKeys 的设计使得攻破服务器不足以获取或重建你的密钥。这通过两种方式实现:
拆分密钥:ZKeys 服务器只存储用于解锁卷的密码短语的一半。另一半保留在客户端机器上。zkeys 客户端程序将两半合并,生成完整的密码短语。
静态加密:密钥在静态存储时使用密码加密,zkeys 客户端在检索时必须提供该密码,并通过 HTTPS 安全传输。该密码只在服务器内存中短暂存在。
代价很简单:你必须在自己的第三个位置备份完整的加密密钥(保险柜里的一张纸、密码管理器,随便什么)。如果 ZKeys 宕机,或者你丢失了远程密钥密码,我绝对无能为力。事先警告过你了。后面的设置说明会告诉你如何备份密钥。
ZKeys 服务可在 https://zkeys.jmmv.dev/ 访问,开源客户端——以及 FreeBSD 和 Fedora 的系统集成——位于我的 jmmv/zkeys 仓库中。
免责声明:ZKeys 免费提供给你使用。我不对其可靠性、可用性或任何其他方面做任何承诺。我之所以开放给你使用,是因为我预计支持少量额外用户不会是什么大问题。但如果支持成为负担,或者负载变得难以管理,我就不得不重新评估这里的选择。这意味着,目前你必须使用有限的 LAUNCH50 优惠码才能开始使用!
设置 ZKeys 的基本思路如下:
就这么简单,但目前这些步骤相当手动,因为还没有上游操作系统提供软件包。服务文档详细介绍了 FreeBSD 和 Fedora 的几种场景,所以我在这里不再赘述。
现在说说技术细节,因为你们就是冲着这个来的:
CLI 当然是 Rust 写的,但它必须附带一堆 shell 脚本来与 FreeBSD 的 rc.d 系统以及 Fedora 的 systemd 和 dracut 集成。这些集成点是客户端包中最棘手的部分,也是最难自动验证的部分,这就是为什么我只为我日常使用的两个系统提供支持。不过,将 ZKeys 集成到任何其他类 Unix 操作系统应该是可行的。
(原文较长,此处译出前 6000 字,完整内容请点「打开原文」。)
正文由 探How 从来源站点 RSS 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。