基于此回答,显然 dm-verity 在尝试访问块时尝试验证块。当验证一个块时,它会沿着哈希树向上验证根哈希。
为什么不直接验证正在访问的块的哈希值来结束呢?
根据答案,似乎表明 dm-verity 哈希树(merkle 树)实际上包含每个叶子中每个块的哈希值。如果您拥有叶子中所有块的哈希值,为什么需要为每个块访问验证整个块设备,而不是仅验证正在访问的块?
答案1
那么,让我们从它应该做什么开始:以加密方式验证块设备(图像)是否是您期望的设备。
为此,您需要对磁盘上的每一位进行加密签名;如果有一点变化,就需要有一种方法来检测它。
因此,仅仅将我的块设备分割成相同长度的块,并对每个块计算校验和是不够的。如果我想修改文件系统映像,那么我显然也会更改校验和,以使其适合事后!
相反,您需要签署校验和(这比签署整个块更好,因为,假设操作甚至被定义,使用我们今天知道的加密数学来验证将需要很长时间)。
因此,您可以单独签署每个校验和,也可以计算所有校验和的校验和,然后对其进行签名。
所以,你选择后者。
但是,如果您只验证单个块,而不是将该块的哈希值与其他哈希值一起实际组合起来给出实际已签名的一个根哈希值,那么您就会回到如果我修改该块的状态块中的设备图像,显然我也会修复该块的哈希值。它没有签名,所以没有人会发现它。