如何加密硬盘上的所有数据(包括 /boot 和 1MB BIOS 启动分区)?如何创建带加密的 GRUB 可启动 BIOS 分区?我的硬盘现在是空的。我现在无法使用这台笔记本电脑。
答案1
您无法加密 BIOS 启动分区;使用 GRUB 启动 Ubuntu(或任何其他 Linux)的基于 BIOS 的计算机上的启动过程如下:
- CPU 开机并执行 BIOS 代码,该代码不理解加密。
- BIOS 读取硬盘的第一个扇区(MBR),该扇区必然是未加密的。
- MBR 代码很小,它读取存储在其他地方的更广泛的引导加载程序代码——通常是在 GPT 磁盘上的 GRUB 的情况下在 BIOS 引导分区中。
- GRUB 通常从 读取其配置文件
/boot/grub/grub.cfg
。它还可能从 中存储的模块加载其他代码/boot/grub
。 - GRUB 读取内核和初始 RAM 磁盘 (initrd) 文件,然后执行内核。
- 内核在 initrd 中运行启动脚本。
- 主文件系统已安装,并从那里控制进一步的启动过程。
由于 BIOS 不支持加密,因此无法加密 MBR。理论上,MBR 可以包含加密代码,因此可以加密 BIOS 引导分区;然而,实际上这是不切实际的,也许是极端的,因为 MBR 引导代码总共有 440 个字节(如果稍微扩展一下定义,则为 446 个字节)。请注意,字节,不是 KiB、MiB 或其他值。GRUB 使用 BIOS 启动分区,因为 440 字节不足以做任何事情,只能将启动过程引导到这个更大的位置;将加密软件塞进那个空间是一个超出实际范围的障碍(也许完全不可能)。
因此,加密最早在实际应用中是在读取 BIOS 启动分区之后,事实上,GRUB 确实支持读取加密文件系统,因此您的 Linux 内核可以存储在加密文件系统上。(至少,这是我听说的;我自己从未尝试过。)
还要注意,加密 BIOS 启动分区将为您提供有限的或没有额外的隐私保护。那里的大部分内容是开源软件。它可能针对您的特定系统进行了调整和定制,但这主要只是为了识别保存 Linux 根 ( /
) 或/boot
文件系统的分区,并且可能包括特定计算机所需的驱动程序。据我所知,BIOS 启动分区中没有密码、用户名或其他敏感数据。如果可能的话,加密 BIOS 启动分区可能会使恶意软件更难接管它 - 但在这种情况下,恶意软件只需要调整 MBR 以将启动过程重定向到其自己的代码,或者使用其自己的加密密钥完全重写 BIOS 启动分区。
也就是说,理论上整个磁盘可以如果磁盘本身或连接的控制器支持此功能,则该磁盘将被加密。这将要求磁盘或控制器在 BIOS 级别“之下”进行加密和解密。我不确定密码如何传送到连接到标准控制器的磁盘,但如果您有一个带有加密磁盘控制器的插入卡,它必然会与常规 BIOS 交互,因此可以在启动时提示输入密码。对于操作系统来说,磁盘看起来就像一个普通的未加密磁盘。我依稀记得听说过这样的解决方案,但我从未研究过它们,而且我不知道现在是否有这样的硬件。(我可能记得虚假软件的声明。)
还要注意的是,EFI/UEFI 的工作方式与 BIOS 非常不同;但据我所知,EFI/UEFI 也不支持 100% 加密磁盘——引导加载程序仍然必须驻留在未加密的EFI 系统分区 (ESP)。不过,EFI 比 BIOS 大得多,也复杂得多,所以我可能不知道一个鲜为人知的功能,将来在 EFI 规范中添加此类支持可能会更容易。不过,如果您有兴趣加密 BIOS 启动分区以防止恶意软件篡改,那么大多数现代 UEFI 的安全启动功能旨在解决此问题。通过对从磁盘读取的第一个启动代码进行签名并提供到操作系统的签名链,安全启动(理论上)可以防止篡改。