LUKS 和 dm-crypt 区分职责

LUKS and dm-crypt distinction responsibilities

通读了 dm-crypt 和 LUKS 的文档,我了解到 LUKS 是一种允许 FDE 的格式规范,而 dm-crypt 是一个 dm 目标,它允许对块的写入/读取进行加密/解密设备。

但是,我不确定这些现在究竟提供了什么(即职责是什么)。在 the slides that the author (Milan Broz) made, it mentions that LUKS2 can also provide integrity protection (hence making the encryption authenticated). From this, and also reading the LUKS1 规范中,我认为这在 LUKS1 中是不可能的。但是,稍后在幻灯片中讨论了 dm-crypt 如何允许经过身份验证的加密。这就是我感到困惑的地方;我们假设我们使用 LUKS2 吗?

感觉自己没有真正掌握LUKS和dm-crypt的主要功能和职责。

谢谢!

让我们从内核部分开始:

  • 设备映射器是一个内核 driver,它允许从现有的块设备创建新的块设备。它通过所谓的目标提供多种附加功能,如 RAID、缓存或加密。
  • dm-crypt 是一个提供透明加密的设备映射器目标。这意味着您可以在磁盘或分区之上创建一个块设备,并且您写入这个新设备映射器设备的所有内容都将在数据实际写入磁盘之前进行加密。读取时反之亦然:如果您从设备读取,数据将从磁盘读取并在返回给您之前解密。
  • dm-integrity也是一个device mapper target,这个对于每个块都有一个特殊的元数据区域,用于存储数据块的校验和。这允许检测数据损坏。

现在用户空间级别:

您可以直接使用设备映射器,但它不友好。假设您想直接使用 dm-crypt——访问您需要知道加密算法的数据,使用 IV,当然还有密钥(它不短且容易记住)。在引导期间询问这些不是很实际。

这就是 LUKS 的用武之地。它提供了两件事:header 和存储(和管理)密钥的方法。 Header 允许系统将设备识别为 LUKS 并包含使用该设备所需的所有元数据。密钥管理允许您将加密密钥安全地存储在磁盘上,并通过易于记忆的密码(或密钥文件、TPM、FIDO 令牌等)进行保护。

因此 LUKS 格式仅向系统提供正确设置设备映射器设备所需的所有信息。您很可能会为此使用 cryptsetup——可以读取 LUKS 元数据、解密存储在其中的密钥并正确创建 DM 设备的工具和库。

LUKSv1 和 LUKSv2 的区别在于元数据的格式。 LUKSv2 添加了一些功能,其中之一是经过身份验证的加密,它是 dm-crypt 和 dm-integrity 的组合——完整性提供校验和,而 crypt 确保校验和也被加密,因此不可能简单地更改数据和隐藏更改的校验和(普通完整性不能防止这种情况,它只能用于保护随机数据更改,如 bit rot)。因此,通过将两种技术与 LUKSv2 相结合来提供经过身份验证的加密——LUKSv2 中的元数据 header 说明需要如何配置和组合两个设备映射器目标以获取数据。