FDE(全盘加密)如何运行得如此之快?

Hew*_*bot 13 encryption security dmcrypt

我很好奇 Ubuntu 的全盘加密是如何在幕后工作的。下面是一个例子:

将以下字符串视为磁盘的所有内容:

hello world
Run Code Online (Sandbox Code Playgroud)

在应用某种加密方法后,它看起来像这样:(
我在这个例子中使用了带有 +1 移位的凯撒密码,例如 A ? B; B?C ...)

ifmmp xpsme
Run Code Online (Sandbox Code Playgroud)

据我了解,当计算机关闭时,驱动器的内容将是上面的字符串。但是当它重新打开时,Ubuntu 需要再次返回其内容hello world才能成功启动。

我真正不明白的是,在现实世界中,磁盘的内容要多得多,加密算法也更复杂,我发现计算机很难在几秒钟内完全加密/解密所有内容(启动或关闭不需要更长的时间)。

这怎么可能?

Xen*_*050 11

AES / Rijndael 加密一般如何工作?

这个页面有一个有趣的高级加密标准 (AES) 简笔画指南,看起来很容易理解,虽然它看起来是 50 多个图像,例如这两个:

在此处输入图片说明

在此处输入图片说明

在这里复制它太多了,但如果你必须拥有一个多合一的图像,那就是这个:

在此处输入图片说明


或者,http://www.password-depot.com/know-how/blowfish_and_rijndael.htm上有更简洁的解释

Rijndael 加密方法基于对字节的替换、更改和执行异或操作。该方法如下所示:

  • Rijndael 根据 128 位密钥生成 10 个密钥,每个密钥为 128 位。
  • 这些键放置在 4x4 阵列中。
  • 纯文本也分为 4x4 数组(每个数组 128 位)。
  • 每个 128 位纯文本项目都在 10 轮中处理(10 轮用于 128 位密钥,12 轮用于 192,14 轮用于 256)。
  • 第 10 轮后生成代码。
  • 每个单个字节在一个 S 盒中被替换,并被 GF (2 8) 上的倒数替换。
  • 然后应用逐位模 2 矩阵,然后是与 63 的异或运算。
  • 矩阵的行循环排序。
  • 矩阵乘法的列在 GF (2 8) 上互换。
  • 每一轮的子密钥都经过异或运算。

如果使用不同的子密钥多次执行 Rijndael,则此加密方法的安全级别会增加。


Ubuntu 的全盘加密是如何工作的?

相信它的工作原理是使用 LUKS(AES 的默认设置)加密一个分区,然后使用 LVM 将一些卷放在它上面(例如/,swap),并在您输入密码后在启动时解密和安装它们。并且有一个常规的(未加密的)引导分区,其引导足以要求输入密码。

the_simple_computer's Guide to Full Disk Encryption with Ubuntu(2015 年 6 月 28 日更新)说这是关于默认安装程序加密的工作方式,并提到双引导不起作用(至少不是开箱即用),驱动器必须使用 MBR,因此“如果您的计算机具有 UEFI,则发行版将安装在传统 BIOS 模式下,因此您无法使用安全启动”并且“还为您提供与系统 RAM 相等的交换大小(通常是不必要的),并且您无法选择使用哪种加密。


加密速度有多快?

如果你运行cryptsetup benchmark它会运行测试并告诉你单独加密的速度有多快,注意(当前)默认的 aes-xts 行:

#  Algorithm | Key |  Encryption |  Decryption
     aes-xts   256b    150.0 MiB/s    145.0 MiB/s
Run Code Online (Sandbox Code Playgroud)

硬盘驱动器的平均读取速度可能为 80-160 MB/s,因此您的读取时间不会比常规读取长多少,而且可能刚读取的扇区已经被解密,而您仍在等待硬盘阅读更多。

SSD可能更快,可能是 200-550MB/s,所以您可能会注意到它。但是,随机读取可能会更慢,我已经读到 SSD 速度在使用后会变慢(也许当驱动器完全填满并且必须开始“擦除”扇区时?)

计算机如何在短短几秒钟内完全加密/解密所有驱动器(启动或关闭不需要更长的时间)?

它不必先解密所有内容。加密 (LUKS) 适用于数据块,可以随机解密任何块,并且就像驱动器的加密数据和文件系统看到的数据之间的一层。

当文件系统想要查看任何数据块时,LUKS 首先解密该块,然后将解密后的数据提供给文件系统。您首先等待驱动器读取数据块(就像不使用加密一样),并且只有额外的延迟才能解密该单个数据块(或几个数据块) - 如果解密速度比驱动器快可以读取,解密可以在驱动器读取下一个数据块之前完成。

所以,就像一个普通的文件系统并不需要阅读整个驱动器读取文件,当添加加密并不需要或者读取整个驱动器,它不会使事情很多慢。

硬盘驱动器上的数据始终加密的,因此关机时除了忘记密钥外无事可做。