使用 luks,实际加密或解密是在何时执行的,是在 luksFormat、luksOpen 中,还是在 /dev/mapper 上创建文件系统期间?

使用 luks,实际加密或解密是在何时执行的,是在 luksFormat、luksOpen 中,还是在 /dev/mapper 上创建文件系统期间?

我很好奇加密/解密任务何时真正开始,以便更好地了解 luks 的内部工作原理。我开始怀疑这一点,当使用分离的标头时,我尝试(故意)使用错误的标头来解密磁盘。运行 luksOpen 时,它是成功的,但在 /dev/mapper 路径上运行 mount 时,它失败,并出现有关可能坏的 fs 或子块的错误。使用正确的标头时,它是成功的。我看到,当运行 luksFormat 时,使用直接指向标头文件的路径,它说它将覆盖该文件并想知道这是否可行(通过输入大写的 yes),而不是说它将覆盖驱动器本身。

那么为什么当 luks 设备的标头错误时,luksOpen 会成功,尽管密码正确? luksOpen 是否仅执行标头的解密,将加密密钥放在 RAM 中,并且只有使用正确的主密钥解密时,mount 命令才会成功?

谢谢

答案1

我自己也想知道,如果替换标题是否可以完成我认为你正在测试的任务,并且发现它有助于彻底理解解锁或解密方法发生的过程,这有助于我获得你可能正在寻求的必要清晰度。Darell Tan 撰写的文章从更广义上很好地解释:

  1. 用户提供的密码经过标准的基于密码的密钥派生函数 2(PBKDF2),并使用 LUKS 标头中指定的参数。
  2. 这样就形成了一个密钥,然后该密钥用于解密(使用指定的分组密码和模式)存储在防取证 (AF) 条带中的加密主密钥 (MK)。AF 条带导致密钥存储在大量磁盘空间中,因此擦除单个条带会导致密钥无法恢复。
  3. 一旦主密钥(MK)被解密,就可以使用它来解密存储在卷中的数据。
  4. LUKS 提供了一种通过存储 MK 摘要来验证主密钥的方法。此摘要也是使用 PBKDF2 计算的,但使用一组不同的参数。通过将计算出的 MK 摘要与存储在标头中的摘要进行比较,可以验证 MK(以及用户密码)的正确性。

这种解释或多或少概括了整个过程,并基于TKS1,一种反取证、两级、迭代密钥设置方案虽然 LUKS 实际上是 TKS2 的实现,是 TKS1 的变体,但它仍然被认为是一个概念证明,有助于理解所应用的基本加密方法,这有助于打破LUKS1 规格更容易,如果你有机会阅读它,但如果没有,那么这里有一个简化的回答尝试给你:

那么为什么当 luks 设备的标题错误但密码正确时 luksOpen 仍会成功?

首先我们要明确一点,“成功“luksOpen 只是接受用户为该特定标题输入的密码,但由于驱动器上的标题是错误的,因此它不会成功(不会)给你访问数据受 LUKS 加密保护。

这是因为 LUKS 设备卷上的数据由主密钥加密,而主密钥并非来自 LUKS 密码。这就是 Darell Tan 在第 2 点的解释可能被误解的地方,因为他提到“这构成了解密主密钥的密钥”,但它众所周知密码本身不是主密钥,也不能用于导出主密钥。(Cryptsetup 常见问题解答,第 1.2 节警告第 11 段)

可以肯定的是,我不会交替使用“密码短语”和“主密钥”(或“密钥短语”)。但是,我会交替使用“密码短语”和“密码”。

因此,当您说 luksOpen 成功时,这仅表示您输入了正确的标头密码。这就是为什么它可以与...好吧,“正确”的密码一起使用。

luksOpen 是否仅执行标头的解密,将加密密钥放在 RAM 中,并且只有使用正确的主密钥解密,mount 命令才会成功?

简单而概括的答案是肯定的,并且除了次要的语义之外,概念化是正确的。

在其布局中,LUKS 分区从标题开始,后面跟着 8 个“密钥材料”槽,这些“密钥材料”与 8 个可用的“密钥”槽相关联,或者代表可以使用的 8 个可能的密码,在“密钥材料”之后,您将找到由主密钥加密的大量数据。

大多数人只使用一个“密钥槽”,也就是说只使用一个密码。但对于每个处于活动状态的“密钥槽”,也就是每个用给定密码填充的槽,都会在其密钥材料部分。而该加密副本则由用户密码锁定。当您提供正确的密码时,它会解锁密钥材料的解密,该密钥材料存储主密钥。主密钥反过来会解锁批量数据。对于密钥槽,所有参数如何解密它是密钥材料具有给定用户密码的密码盐,迭代深度)。

探索LUKS 之旅:Linux 统一密钥设置

LUKS 操作

答案2

您之所以能够成功打开带有错误分离标头的 LUKS 卷,可能是因为您的密码不会解密卷上的实际数据,它只会解密标头中包含的主密钥,而主密钥又用于解密卷。LUKS1 中的主密钥长度为 256 位,比人类可以记住的普通密码强得多。

因此,当您执行 luksOpen 时,它实际上只检查密码是否正确(或是否存在于某个密钥槽中),然后使用它来解密主密钥。据我所知,实际数据量只是以“纯文本”模式加密,主密钥作为密码。这意味着它“不知道”用于解密的密钥是否正确。

这就是为什么覆盖标题部分通常足以销毁 LUKS 加密卷的原因,因为使用 256 位密码几乎不可能对其进行暴力破解。

你可能已经找到了,但是这里是一些关于 LUKS 如何工作的有价值的信息。

相关内容