系统加密密钥在 RAM 中保留多长时间

信息安全 加密 监视 dma 攻击
2021-08-30 07:56:50

线程标题说,我想知道系统加密密钥将在 RAM 或 CPU 中保留多长时间,因此可以使用引导攻击提取。我在某处读到,Linux 和 LUKS 的加密是由 CPU afaik 处理的虚拟内存处理的......

我真的不知道磁盘加密或系统加密是如何工作的,当我在启动过程中输入密码时,我的系统将被完全解密,直到我关闭计算机,或者它仍然处于加密状态并且系统是否始终需要处理文件的关键?在最后一种情况下,密钥通常在 RAM 或 CPU 中使用是合乎逻辑的,因此是可提取的。

问题背后的背景是,我想在我的 PC 上安装一个能够抵抗引导攻击和 DMA 攻击的小型监控系统。我想离线录制照片,因为众所周知,互联网连接可能会突然中断。

我正在考虑一个没有 pci 插槽的上网本,这将使 DMA 攻击变得不可能,并修补 linux 内核以让 CPU 处理加密以及一个 sdmem 脚本,该脚本覆盖 RAM 中可能残留的屏幕锁密码 - 这就足够了吗?

1个回答

磁盘加密是关于始终加密磁盘上的数据;将解密后的文件写回磁盘会导致数据泄露的风险(如果当时机器被盗),并且需要在关机时重新加密。请注意,典型的机械硬盘以大约 120 MB/s 的速度读取和写入数据,因此仅 128 GB 的硬盘将需要 15 分钟以上才能完全解密,即使假设解密过程比这更快,并且磁盘是瓶颈。当您启动机器时,您当然不会等待 15 分钟。

所有这些都意味着在读取文件时会即时进行解密。结果是只要机器启动并运行,解密就会发生,因此解密密钥必须在 RAM 中的某个位置,并留在那里。

同样,如果您修改了一些文件并想保存它们(以便在下次重新启动后恢复新文件),则必须使用加密密钥。

但是,有(至少)两种方法可以让您设想不将密钥保留在 RAM 中:

  • 您可以将完整的文件系统读取并解密到基于 RAM 的磁盘中。在那里,可以进行一次解密,然后丢弃密钥。当然,这将文件系统的总大小限制在 RAM 中可以容纳的大小,例如 1 或 2 GB。此外,所有写入都将被丢弃(从概念上讲,可以使用非对称加密来保存修改,以便在下次启动时合并到加密文件系统中,但这可能是一项重大的设计和开发工作)。

  • TRESOR项目旨在通过将密钥保存在 CPU 寄存器中来进行加密和解密,并且不允许将这些寄存器刷新到 RAM 这是为了防御冷启动攻击,在这种攻击中,攻击者可以很好地查看整个 RAM 内容,但不能像攻击前那样查看 CPU 寄存器。已经注意到,可以进行 DMA 的攻击者可以注入恶意代码,从寄存器中提取密钥,因此在这种情况下不能认为保护是完整的。

要考虑的重要一点是,您使用磁盘加密来保持数据的机密性——但是当您访问数据时,您仍然将其拉入 RAM 以进行处理。例如,如果您查看某个文本文档的内容,那么,当您查看它时,文档数据必然存在于查看器应用程序空间中,并且图形卡内存中也存在未加密的内容。保护加密密钥没问题,但如果假设攻击者能够读取您的 RAM,那么他可能会直接掠夺数据。因此,专注于加密密钥的下落,而不是解决数据的大局问题有点没抓住重点。在大多数实际情况下,担心冷启动攻击检索磁盘加密密钥并没有多大意义——即使世界上有所有的 TRESOR,冷启动攻击仍然几乎同样令人担忧。