我被要求在一台需要无人值守的机器上实现磁盘加密。这台机器有两个磁盘。第一个磁盘有一个引导分区和一个OS分区,而第二个磁盘只有一个分区,用于存储应用程序。这样做的目的是保护存储分区中的数据不被读取,如果有人决定窃取磁盘。
我的计划是使用Linux的dm模块加密操作系统和存储分区。我认为对每个加密的分区使用密钥是最有意义的。然而,我正在努力找出存储每个密钥的最佳方法。
对于存储分区的密钥,将其存储在OS分区中似乎是安全的。但是,存储OS分区密钥的唯一选项似乎是将其保存在引导分区中。如果机器上有某种TPM或其他存储,那就太好了,但不幸的是,没有其他可用的存储空间。
因此,由于我需要使用initramfs来解密OS磁盘,所以我想我会将OS分区的密钥存储在initramfs中,这将嵌入内核中,内核将被存储在引导分区中。这将防止从碰巧想偷一些磁盘的随机的人那里读取数据。但是,我意识到这并不理想,因为知识足够丰富的攻击者将能够从内核中提取initramfs,并从initramfs映像中提取密钥。
在我看来,无论我想出的方案多么复杂,我都需要能够告诉机器如何执行解密例程;攻击者只需读取解密例程就可以确定如何解密系统。
有了可用的存储空间,是否有更好的方法来加密分区,使其能够更好地抵御拥有磁盘的攻击者的攻击?
发布于 2017-06-14 15:45:23
这是一个没完没了的问题:我知道如何安全地加密,但我应该把钥匙藏在哪里呢?不幸的是,没有很好的解决方案,因为如果您希望允许无人值守的重新启动,则必须从机器上访问密钥。这意味着你只能依靠你拥有的东西。
换句话说,如果仅存储磁盘被盗,您的系统将是安全的,但如果这两个磁盘都是,攻击者将拥有他所需的一切解密。
我能想象的最好的技术解决方案是使用HSM来解密密钥。但它只是增加了安全性,如果你可以希望HSM不会被偷与磁盘。这意味着唯一有效的方法是提高数据中心的物理安全性。
发布于 2019-02-27 06:58:00
实际上,使用initramfs的解决方案有很多:
这是Mandos系统,它允许计算机拥有加密的根文件系统,同时能够远程和/或无人值守地重新启动。计算机在初始RAM磁盘环境中运行一个小型客户端程序,该程序将通过网络与服务器通信。所有网络通信都使用TLS加密。客户端由服务器使用OpenPGP密钥标识;每个客户端都有唯一的客户端。服务器向客户端发送加密密码。客户端使用相同的OpenPGP密钥对加密的密码进行解密,然后使用该密码解锁根文件系统,从而使计算机能够继续正常启动。
https://wiki.recompile.se/wiki/Mandos#Documentation
https://manpages.ubuntu.com/manpages/bionic/man8/intro.8mandos.html
杜鹃(
)
Clevis是一个用于自动解密的可插件框架。它可以用来自动解密数据,甚至可以自动解锁LUKS卷。
https://github.com/latchset/clevis
Tang是一种服务器实现,它提供加密绑定服务,而不需要托管。克莱夫斯完全支持唐。
https://github.com/latchset/tang
使用这种方法,您可以将ssh输入到计算机中,并通过输入密码解锁LUKS。安装过程因操作系统的版本和所使用的包而大不相同。
发布于 2017-06-14 15:23:37
“密码系统应该是安全的,即使系统的所有内容,除了密钥,都是公共知识。”克尔霍夫原理。
既然已经有了一个很好的答案,我就在这里指出:算法的保密性有多大价值?
https://security.stackexchange.com/questions/161974
复制相似问题