LUKS 和 dm-crypt 区别职责

Jas*_*per 5 linux encryption data-integrity device-mapper luks

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

但是,我不确定这些现在到底提供什么(即职责是什么)。在作者(Milan Broz)制作的幻灯片中,提到LUKS2还可以提供完整性保护(从而使加密得到验证)。由此看来,并阅读了LUKS1规范,我认为这在 LUKS1 中是不可能的。然而,稍后在幻灯片中它讨论了 dm-crypt 如何允许经过身份验证的加密。这就是我困惑的地方;我们假设我们使用 LUKS2 吗?

我觉得我并没有真正掌握 LUKS 和 dm-crypt 的主要功能和职责。

谢谢!

Voj*_*fny 10

让我们从内核部分开始:

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

现在是用户空间级别:

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

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

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

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