我一直在研究一些方法来确保磁盘加密密钥不会被盗,我遇到的一种方法叫做 TRESOR。使用此内核补丁,您可以创建使用 AES 加密的分区,并且密钥存储在 CPU 缓存中而不是 RAM 中。起初,我认为这很好,但经过进一步询问,我得出结论,任何仍存储在 RAM 中的解密数据都容易受到物理冷启动转储的影响。确保安全的一种潜在方法是使用 TRESOR 加密可用 OS RAM 的内容,然后创建一个加密分区,因为密钥将在加密的 RAM 中,而 RAM 的密钥在 CPU 缓存中。我仍然不知道这是否是一种安全的方法,或者它的声音如何。是否甚至可以防止对全盘加密的物理攻击,
是否可以防止对全盘加密的物理攻击?
为了让 CPU 实际处理数据,数据在某些时候必须是明文形式。TRESOR使用 CPU 寄存器,对于物理攻击者来说可能比 RAM 更难读取,但它的范围仅限于加密密钥:该密钥在寄存器中,但加密或解密的数据仍在 RAM 中。CPU 中只有少数几个寄存器,根本没有空间容纳更多数据。
使用 TRESOR 支持的 RAM 磁盘,您可以快速访问“加密文件”(因为那是 RAM),但在内核和应用程序代码的视图中它们仍然是“文件”。数据将在某个时候在 RAM 中解密。
如果您真的希望始终对所有RAM 进行加密,那么选择是使用包含硬件的 CPU 来进行此类加密(有一些智能卡 CPU 可以做到这一点,但据我所知没有类似 PC 的 CPU) ,或者制作一个完整的虚拟机,其虚拟 CPU 实现类似 TRESOR,在每次内存访问时自动加密和解密。实际的加密模式需要一些周密的思考(在安全地加密数据的同时仍然允许通过随机访问进行快速解密并不容易)。我不知道有任何原型;但理论上是可行的。对学生来说是一个不错的项目(它甚至可能是博士的主要成果)。这会非常缓慢。
好吧,微软有句老话(我知道,不是最好的安全来源)说:
法则 3:如果坏人可以不受限制地物理访问您的计算机,那么它就不再是您的计算机了。
为什么这适用于您的情况?因为如果你有足够的密码学,如果有人偷了你的硬盘是安全的。但是如果这个人可以在你的服务器关闭后立即访问你的 RAM 芯片,他可以尝试在你刚才说的场景中恢复密钥。
正如您所说,将密钥存储在 CPU 缓存中可以将其最小化,但是 RAM 芯片中仍然可以使用未加密的数据。
如果他在你开机之前就可以访问你的电脑怎么办?您是否在启动前考虑物理保护?否则,即使您的整个系统已加密,坏人也可以创建一些虚假的登录屏幕并获取您的密码。或者他可以附加一些键盘记录器。或者他可以连接一些设备并从一开始就克隆你的 RAM 芯片。或者他也可以更改您的 BIOS 并执行此操作。或者...好吧,例如,看看 NSA 目录,以了解潜在的攻击。
因此,您的计算机必须在物理上是安全的。这样一来,这意味着不仅物理访问必须是困难的(例如,给予足够的时间让 RAM 内容消失),而且他无法捕获来自 CPU 或主板或键盘的磁辐射,也不能捕获噪音,也不能捕获来自您键入或移动鼠标的图片。
如果您确实需要从计算机中取出 RAM 芯片的安全级别,那么您可能需要比您预期的更高的安全性。
更新
在您发表评论后:
我需要保护,以便在服务器运行、最近刚关机或已关机一段时间时,无法从服务器物理检索客户的数据。
我认为我可以扩展一点我的答案,只是在这个物理方面思考。
- 在服务器关闭一段时间后保护您的数据:
加密是您的朋友。如果有人取出用强算法和强密码加密的硬盘,他将永远用暴力攻击它。
需要考虑的要点:
a)整个磁盘加密要求您或某些程序在安装时“键入”密码。如果是你,你必须每次都可以打开它。如果是程序,在哪里存储密钥
b)只加密数据/文件夹,同样的问题“在哪里存储密钥以打开它”存在。
- 在服务器最近关闭电源后或在运行时保护数据:
正如Thomas Pornin的回答所解释的那样,在运行时,您需要对HDD-RAM-CPU之间的路径进行加密,并且我不知道任何具有CPU的服务器都可以这样做。而且您需要担心与某些外围设备的兼容性,因为 PCI、PCI express、firewire 等依赖 DMA 来加快速度。因此,您可能会遇到性能问题。
避免这种情况的更简单方法是物理保护您的服务器。就像一些安全的房间,服务器断电并加热到一定温度(以避免有人窃取您的 RAM 芯片)。甚至可以用可控的爆炸或电压峰值破坏芯片。任何使某人更难闯入并在他的怀抱下离开您的服务器的事情。
而且,当然,所有这些都忽略了许多攻击可以远程完成,无需任何物理存在,只需使用软件等等。
我假设 OP 正在构建服务器,并将其运送到 colo 设施。
物理安全包括:
- 使用 PMMA/Al2O3 复合材料嵌入 RAM、CPU 和相关电路(电绝缘、导热且非常耐用)
- 可选地在核子 CPU 和 RAM 上方包括死人电路
- 断开除电源和所需 NIC 之外的所有外部连接器,但不要改变外观
- 安装多个机箱入侵开关,每个开关在触发时都会杀死电源(更好的是,除非远程解除武装,否则让它们核对 CPU 和 RAM)
- 禁用远程管理功能
软件安全将包括:
- 使用 dropbear 远程启动 ssh 到 initramfs
- 启动后,用随机位覆盖 LUKS 键槽和标头(在重新启动之前不需要这些)
- 重新启动时,SSH 到 initramfs 并恢复 LUKS 键槽和标题
- 经常进行安全备份
应该这样做,除非是针对非常坚定和熟练的对手。
物理磁盘加密在阻止许多简单的黑客攻击方面大有帮助。我教计算机科学和网络安全,但有时学校系统极其严格的政策使我不得不绕开他们的安全问题。由于学校系统不使用磁盘加密,我可以在 5 分钟内获得 Windows 机器上的本地管理员访问权限,这要归功于物理访问。如果他们使用全盘加密,我将无法做到这一点。