使用磁盘加密进行预启动身份验证在技术上是如何工作的?

使用磁盘加密进行预启动身份验证在技术上是如何工作的?

我正在寻找一种解决方案来完全加密我的双启动 SSD 驱动器(它仍然是新的且空的,我想在放置任何内容之前设置加密)。

虽然网上关于这个问题有很多混乱,但看起来 TrueCrypt 可能能够做到这一点,尽管我可能需要在额外的启动磁盘上使用它的启动加载程序。据我所知,一些 Linux 工具(包括一些修改后的 GRUB2)也可能能够做到这一点。

但是,我有疑问,我读过的文章没有真正深入到足以回答一个基本问题:如果整个磁盘都被加密,并且某些预启动工具要求用户提供密钥来解密它,不是吗?是否意味着该工具必须在要启动的操作系统下运行?换句话说,是否有工具可以让操作系统不知道它看到的磁盘实际上是加密的?

如果没有这样的工具,这是否意味着解密工具必须以某种方式在启动时将解密信息传递给操作系统?我可以想象这很难跨平台实现。

答案1

如果整个磁盘都被加密,并且某些预启动工具要求用户提供密钥来解密它,这是否意味着该工具必须在要启动的操作系统下运行?

是的,差不多。基于硬件的全盘加密这样做:加密完全由设备(硬盘/闪存)或可能在通向物理设备的链上的控制器中处理,并且对操作系统不“可见”。
有了这个,操作系统的 I/O 操作就像处理普通的、未加密的设备一样,神奇的事情发生在硬件(和/或固件 - 无论如何“低于”操作系统)中。

如果没有这样的工具,这是否意味着解密工具必须以某种方式在启动时将解密信息传递给操作系统?

如果加密不能在操作系统“下方”完成(如上所述,或者可能使用虚拟化技术,但随后您可能会运行两个(或更多)操作系统),那么确实必须有某种形式的信息传输。是的,这意味着跨操作系统很困难。
如果您没有硬件/固件帮助,您还需要未加密引导程序代码(至少是引导加载程序)。

维基百科磁盘加密文章有更多相关内容。

答案2

如果您有支持加密驱动器的硬件(或更准确地说固件,即 BIOS),那么您可以使用固件加密整个磁盘。这样做有缺点:周围支持磁盘加密的计算机并不多,并且它会将您与特定固件联系起来(或者更糟糕的是,如果您的计算机有 TPM 并且加密密钥位于 TPM 中,它会将您与特定固件联系起来)此特定主板,除非您已备份存储加密密钥)。

如果操作系统进行了加密,那么磁盘上必须有一小块未加密的空间,用于存储操作系统的初始部分。 Linux 的常见配置是拥有一个单独的明文/boot分区,并对每个其他分区进行加密。 “全磁盘加密”有点用词不当:它通常用来表示“全卷加密”,其中卷通常是一个分区而不是磁盘。全盘加密是指您不单独加密每个文件(或至少一个目录树)。

Linux下全盘加密的标准工具是加密。它在所有主要发行版中均可用,并集成在许多安装程序中。

答案3

是的,使用 Grub2/boot分区可以由 LUK 加密:

  • /boot/作为LUK 加密分区上的文件夹
  • /boot在分区上加密的 LUK 上
  • 依此类推,由于Linux允许您使用任何非排序块列表作为设备,并且可以作为根(initramfs为此类非排序块列表进行配置非常复杂,但可以做到,这是一种偏执的方式)

/boot我还测试了具有多个层的偏执加密方式(何时是分区):

  1. /dev/sda5作为磁盘上唯一的逻辑分区(MBR 仅具有两个扩展分区/boot/
  2. /dev/sda5我把 LUK 级别 1 放在上面,映射到/dev/mapper/level_0001
  3. /dev/mapper/level_0001我把 LUK 级别 2 放在上面,映射到/dev/mapper/level_0002
  4. /dev/mapper/level_0002我把 LUK 级别 3 放在上面,映射到/dev/mapper/level_0003
  5. 依此类推,/dev/mapper/level_####我把 LUK 级别####+1映射到/dev/mapper/level_####+1
  6. 我把/dev/mapper/level_3436LUK 级别 3437 映射到/dev/mapper/level_3436
  7. 我在上面/dev/mapper/level_3437放了一个 Ext4,安装为/boot
  8. /boot运行后我安装了Grub2echo GRUB_CRYPTODISK_ENABLE=y >> /etc/default/grub
  9. 我只/dev/sda6放了/一层 LUK

启动时它会询问我 3437 个不同的密码,每个密码都超过 32 个字符。

这只是一个概念验证,启动时间很糟糕。

但如果我做同样的事情,/那么所有系统的读/写速度也很糟糕,但至少 Linux 可以工作。我也测试过一万多关;它部分工作,我的 CPU 上的读/写速度下降到 10KiB/s(是的,真的很糟糕),启动需要一整天,并且在进行在线访问(冲浪等)时,由于磁盘超时,应用程序往往会崩溃。 。

因此,放置三级或四级 LUK 是可以接受的,也可以是十级,这在很大程度上取决于您的 CPU 以及您使用 CPU 与 DISK、3D 渲染与巨大数据扰乱等的情况。

PD:您还可以在每个级别的 LUK 上使用不同的哈希函数和算法,并且还可以使用--iter-time=#来增加挂载时间(警告:在 Grub2 预启动时,挂载时间会增加三到四倍,使用大约一万个值会导致预启动时接近三十秒)。

相关内容