是否可以对启动盘进行加密,但在系统启动时不需要用户输入密码?我在偏远地区有一些无头盒子,我不能保证它们会被安全处理掉。
我想避免有人能够取出磁盘驱动器并将其连接到另一个设备并查看其上的内容,但同时系统必须能够在没有用户交互的情况下(重新)启动。
我在加密方面的经验很少,但我正在考虑将密钥存储在 UEFI 中,但我找不到任何关于这种事情是否可能的信息。
我使用的是 Ubuntu 18.04 LTS,但如果需要我可以升级。
答案1
要将磁盘驱动器绑定到给定主机,并允许在不需要手动输入密码的情况下对其进行解密,您通常需要将加密密钥存储或绑定到主机的 TPM(可信平台模块)或等效项。通过这样的设置,如果将磁盘从其主机中删除,则无法解密该磁盘。
如果网络是可信的,另一种可能的解决方案是将加密密钥绑定到网络(严格来说,是网络上的某种密钥服务器)。通过这样的设置,如果磁盘的主机不在正确的网络上,则无法解密该磁盘。
这两者均由以下机构支持U形夹。 U 形夹可以使用 TPM2 或唐用于密钥绑定,甚至可以使用 Shamir 秘密共享组合多个密钥源。在这两种情况下,都通过在过程中的某个时刻使用不可访问的密钥来确保机密性:无法从中提取存储在 TPM 中的密钥,也无法提取存储在网络其他位置的主机上的密钥。
还存在其他工具,例如TPM-LUKS。
答案2
将加密密钥存储在 USB 闪存驱动器上。
这不像 TPM 解决方案那么安全,因为密钥只是标准文件系统中的二进制文件,但如果您的目标只是使驱动器与计算机的其余部分分开处理,那么它就足够了。
不幸的是,您不能使用第三列,/etc/crypttab
因为闪存驱动器必须已经安装,但它不能,因为您fstab
位于加密分区上 - 造成了先有鸡还是先有蛋的问题。但是您应该能够使用键盘脚本(请参阅man crypttab
)或initramfs 钩子。
请注意,无论您选择哪种方法,启动过程的第一阶段(内核+initramfs)都必须保持未加密状态。除非您使用超级秘密的内核补丁,否则这通常不是什么大问题(埃克姆 GPL 埃克姆;) )或在 initramfs 中存储敏感内容。因此,不要将加密密钥直接存储在密钥脚本或挂钩中,因为它们嵌入在 initramfs 中。
答案3
将操作系统与磁盘分开。从 NET 将操作系统加载到 RAM 中。您将发送带有磁盘密钥的操作系统。当计算机打开时,它将通过网络(PXE)寻找操作系统。如果有人关闭没有操作系统的计算机,您就会意识到计算机已被黑客入侵。
https://superuser.com/questions/484849/is-it-possible-to-boot-from-internet
答案4
可以选择在 initramfs 中安装 dropbear(一个简约的 SSH 服务器),然后启动到启用 dropbear 的模式,该模式等待您通过 SSH 连接到它并提供加密密钥。
查看这个示例博客文章。