我应该使用 LUKS1 还是 LUKS2 进行分区加密?

我应该使用 LUKS1 还是 LUKS2 进行分区加密?

在我的 Ubuntu 分区上设置 LUKS 加密的过程中,我--type luks2在 cryptsetup 手册页中看到了该选项。从我读过的内容来看,似乎没有理由不使用 LUKS2,但 cryptsetup 仍然默认使用 LUKS1。

我不应该使用 LUKS2 有什么原因吗?

谢谢。

答案1

您绝对应该尽可能使用 LUKS2。它是较新的标头格式,克服了(旧版)LUKS1 标头的限制。自 cryptsetup 版本 2.1 以来,它一直是默认设置,但仅凭这一点并不能说明什么。基于密码的密钥派生函数(PBKDF)是一个巨大的变化。

如果您使用 PBKDF2 算法,那么拥有 LUKS1 还是 LUKS2 标头其实并不重要(尽管 LUKS2 更具弹性,因为它具有关键数据的备份副本)。cryptsetup 版本 2.0 引入的较新的 Argon2i 或 Argon2id 算法占用更多空间,这就是 Argon2 不适合较小的 LUKS1 标头的原因。

此外,Argon2 是一种较新的算法,可能比 PBKDF2 更安全,但它会消耗更多的内存(RAM),并且需要 LUKS2 标头。

来自cryptsetup.8手册页:

对于 PBKDF2,仅涉及时间成本(迭代次数)。对于 Argon2i/id,还涉及内存成本(密钥派生过程中所需的内存)和并行成本(密钥派生过程中并行运行的线程数)。

由于 cryptsetup 2.1 默认使用更大的 LUKS2 标头,因此它似乎也默认使用 Argon2i 而不是 PBKDF2。我最近在我的 Debian Linux 上手动创建了一个 LUKS 分区,当前稳定版本为 10.4(截至撰写本文时;当我创建 LUKS 分区时可能是 10.2 或 10.3),并使用 Argon2i 将其设置为 LUKS2。

问题是 GRUB2 在大多数发行版上都不支持 LUKS2(截至撰写本文时),因此默认安装无论如何都会(必须)默认为 LUKS1,至少在 /boot 受到影响时是如此,否则无法启动。本指南关于如何在 Debian 10“Buster”上正确执行此操作。Ubuntu 最初基于 Debian,因此可能类似。诀窍是拥有一个单独的 LUKS 分区,其中包含一个单独的 /boot 分区,并将此分区转换回 LUKS1,以便 GRUB2 找到 Linux 内核和 initramfs。或者,如果根分区包含 /boot 并且是 LUKS2,则可以将其全部转换回 LUKS1。在这两种情况下,最好为一个额外的 LUKS 密钥槽添加一个密钥文件,并将此密钥文件复制到 initramfs 中(或配置 initramfs 以查找密钥文件)。GRUB2 将要求输入 /boot 的密码,但在启动内核和 initramfs 时,必须再次输入密码 - 如果 /boot 位于根分区上,则密码与同一分区相同(如果 / 与 /boot 分区不同,则密码为另一个)。如果 initramfs 使用密钥文件(该文件无论如何都安全地存储在加密的 /boot 上),则可以避免这种情况。

同样值得注意的是:2020 年 1 月 GRUB2有一个补丁并且现在能够处理 LUKS2 标头,但只能使用传统的 PBKDF2 算法。这里有两个问题。首先,这种补丁需要时间才能发布,而分发则需要更长的时间。例如,Debian 10.4(稳定分支)仍然有一个旧版本的 GRUB2,无法处理 LUKS2。其次,即使使用上述初始 LUKS2 补丁,GRUB2 也不支持 Argon2。

如果您要创建 LUKS2 /boot 分区,则很有可能默认为 Argon2i。对于 /boot,您必须--pbkdf pbkdf2在为 GRUB2(使用 LUKS2 补丁)创建新的键槽时指定才能使其正常工作。

cryptsetup luksAddKey --pbkdf pbkdf2 /dev/<device>

我强烈建议阅读建筑维基页面以获取有关如何使用 cryptsetup 和 LUKS 卷的更多信息。

答案2

根据文档的正式草案

LUKS2 是用于磁盘加密管理的 Linux 统一密钥设置的第二个版本。它是 LUKS1 [1, 2] 格式的后续版本,扩展了磁盘格式的功能并消除了一些已知问题和限制。LUKS1 的大多数基本概念仍保留在硬盘加密新方法中设计的位置2作者:Clemens Fruhwirth。LUKS 在磁盘上的专用区域提供通用密钥存储,能够使用多个密码 1 来解锁存储的密钥。LUKS2 扩展了这一概念,以更灵活地存储元数据、冗余信息(以便在元数据区域损坏时提供恢复)以及用于存储外部管理元数据以与其他工具集成的接口。虽然 LUKS2 的实现旨在与基于 Linux 的 dm-crypt 一起使用3磁盘加密,它是一种通用格式

基本上,虽然它已经可用,但根据用户/定义标准,它是一种正在开发中的格式。进一步引用 cryptsetup 2.0.0 版本的官方发行说明,仅仅 6 个月前(重点是我的):

Cryptsetup 2.0.0 发行说明

具有实验性功能的稳定版本。

此版本引入了一种新的磁盘 LUKS2 格式。

传统的 LUKS(称为 LUKS1)将永远得到完全支持,以及传统的、完全向后兼容的格式。

注意:此版本更改了 libcryptsetup 库的 soname,并增加了所有公共符号的主版本。大多数旧函数完全向后兼容,因此只需重新编译程序即可。

请注意,经过身份验证的磁盘加密、非加密数据完整性保护(dm-integrity)、使用 Argon2 基于密码的密钥派生函数以及 LUKS2 磁盘格式本身都是新功能,可能包含一些错误。

为了提供经过身份验证的加密的所有安全功能,我们需要在内核中采用更好的 nonce 重用抗算法(请参阅下面的注释)。目前,请使用经过身份验证的加密作为实验性功能。

请不要在没有正确配置备份的情况下使用 LUKS2,或者 需要与旧系统兼容的生产系统。

因此,除非你需要某个新功能,否则最好、最安全的选择是使用默认/稳定版本LUKS1。另一方面,如果你不介意一些测试或设置问题,你可以选择LUKS2选项,并将您发现的任何问题报告给cryptsetup 问题追踪器

答案3

自 2020 年 1 月 10 日起,GRUB 支持 LUKS2因此,如果您使用 GRUB 解锁 /boot 分区或加密磁盘 - GRUB 可以满足您的需求。至于功能,请参阅利奥的回答

答案4

  1. GRUB 尚不支持 LUKS2。如果您的 /boot 目录位于 LUKS 加密的设备上,并且您使用 GRUB 作为引导加载程序,则它将无法工作。
  2. [小问题] 旧版 cryptsetup (1.xy) 无法处理 LUKS2,因此安装了 2 之前版本的 cryptsetup 的 Live CD/USB 无法用来解密 LUKS2 分区。

相关内容