DM-Verity 如何运作?

DM-Verity 如何运作?

我不明白 DM-Verity 是如何工作的。

读自这里或者这里我对此有几个疑问:

  1. 考虑到受 dm-verity 保护的整个块分区:在访问数据时,它应该验证哈希表中的数据直至根哈希。 dm-verity 只验证感兴趣的数据块还是整个分区?在第一种情况下,如果我需要在一段时间后验证 dm-verity 受保护分区中的另一个块,是否会再次执行整个过程?
  2. 我有一个 dm-verity 保护的 blck 分区安装为/dev/sda1.当我/dev/sda1在linux上看到a时,是否意味着整个分区已被验证?
  3. 您能解释一下它们/dev/dm*是什么以及为什么需要它们吗?

答案1

免责声明:我不是专家,但分享我在 RPi 上设置 dm-verity 时学到的知识。我将尝试解决问题 1 和 2。

  1. 考虑到我发现的 dm-verity 的解释实际上描述了该算法,包括这个答案,他们通过引用来解释实际的算法默克尔树。后一个参考文献有一个有用的示例:

在此输入图像描述

例如,图中,如果树中已包含哈希0-0和哈希1,则可以立即验证数据块L2的完整性,方法是对数据块进行哈希处理,然后将结果与哈希0-0、哈希1、最后迭代组合。将结果与顶部哈希进行比较。类似地,如果树中已有哈希1-1和哈希0,则可以验证数据块L3的完整性。

设置 dm-verity 时,您将创建一个哈希树并将其存储在单独的分区上。然后系统可以验证正在读取的块

  • 计算正在读取的块的哈希值
  • 将计算出的哈希值与另一个块保存的哈希值相结合,以计算上层哈希值。
  • 将这个上层哈希值与同一层保存的哈希值相结合来计算下一个上层哈希值。
  • 重复直到计算出根哈希值
  • 将计算出的根哈希值与保存的根哈希值进行比较

每次写入任何块时,您都需要更新存储的哈希树,以便继续能够检测篡改。

  1. 我想这取决于实现。但实施中cryptsetup-bin Debian 软件包正如第一部分中所解释的这个参考在启动时检查整个哈希值。 (这维基百科链接上面还解释了从块的哈希开始计算哈希树比计算单个块的哈希树比计算整个数据集的哈希更有效——我仍在试图弄清楚这一部分)。据我了解,您还可以将其配置为在每次读取时验证一个块(请参阅这个参考)。

答案2

  1. 这是它的工作原理图:https://source.android.com/security/verifiedboot/dm-verity

  2. 很可能是的。

  3. /dev/dm* 设备属于设备映射器。说到 dm-verity,这可能会有所帮助:https://en.wikipedia.org/wiki/Device_mapper https://www.kernel.org/doc/html/latest/admin-guide/device-mapper/verity.html

相关内容