BTRFS 可以在加密磁盘上提供身份验证吗?

信息安全 验证 linux 磁盘加密 正直 卢克斯
2021-08-27 13:32:37

磁盘加密的问题之一是提供身份验证。有权访问密文的攻击者可以随意修改密文而不会产生任何后果。鉴于,这不是一种可能的攻击,但仍然是一种可能的攻击。

我想到了一个有趣的想法。我的磁盘在 AES-CBC ESSIV 模式下使用 LUKS 加密。然后我在加密磁盘内部运行 LVM,然后在内部逻辑卷上运行 BTRFS。如果攻击者在数据静止时修改了密文,我通常无法注意到它已经发生了。然而,由于 BTRFS 校验和元数据和数据,当试图读取该文件时,文件系统本身可能会注意到损坏。

诚然,BTRFS 使用 CRC-32 作为哈希算法,但我的理论或多或少准确吗?我是否通过在 LUKS 卷中使用 BTRFS 来获得身份验证?

2个回答

在某种程度上,是的。但是,btrfs 将在可能的情况下静默修复数据,因此除非出现不可恢复的错误,否则您不会知道。由于您使用 LVMbtrfs,因此数据很可能会被碎片化,从而使攻击者更难以一致地更改它。btrfs 文件系统的离线密码分析本身就足够复杂,因为在我看来,文件系统的可预测性较差。

关于这一点,题外话 - 在 btrfs 下使用 LVM 是多余的。Btrfs 具有 LVM 的所有优点以及更多功能。就性能而言,这并不是最优的——btrfs 使用它自己的范围,而没有意识到 LVM 的范围。这可能会导致中等程度的碎片化。它可能看起来像一个“安全”功能,但实际上并非如此。

如果您想在文件系统上“经过身份验证”数据,唯一的方法是对它们进行签名,或者至少对整个块设备或设备上的任何和所有块子集进行离线哈希。

不,因为 CRC 校验和提供完整性而不是身份验证。CRC 算法具有在密码学中称为延展性的属性。即使数据被加密并且未知,它也可以与任意位进行异或,然后校验和必须与这些位的某个函数进行异或。这允许在不知道数据是什么的情况下伪造 CRC 校验和。这适用于流密码和某些块模式,不确定它是否适用于 ESSIV。

此外,经过短暂的研究,我发现了磁盘加密理论文章:

虽然 CBC(带或不带 ESSIV)可确保机密性,但不能确保加密数据的完整性。如果攻击者知道明文,则可以每隔两个明文块将其更改为攻击者选择的值,而将其间的块更改为随机值。这可用于在 CBC 或 CBC-ESSIV 模式下对磁盘加密进行实际攻击。