在 dm-verity 中,有一个根哈希用于验证数据存储设备。它是在您运行时创建的veritysetup
。但除了根哈希之外,还给出了盐。为什么?
答案1
如果没有盐,任何数据块都将始终产生相同的块哈希。这意味着如果可以发现该块的哈希冲突,则可以使用它。鉴于块大小是固定的,这种可能性很低,但对于使用差异更新进行更新的长期分区,单个块可能多年不变。通过在每次更新时更改盐,使所有块哈希值在每次更新时都发生变化,盐可以让您轻松地不用担心这一点。
由于 dm-verity 生成的哈希树不受信任且在设备上生成,因此设备生成它所需的只是盐和数据。然后最终的根节点应该与提供的根哈希匹配。
(Fwiw,原始版本的 dm-verity 缺乏对 salt 的支持。)
答案2
创建存储在设备上的摘要时,盐会与哈希值结合在一起。哈希值将是相同的(对于给定的内容),因此盐是使摘要不同的一种方式。
运行时dm-verity
,它会与哈希列表进行比较,因此您需要盐来将哈希与存储的摘要进行匹配。
进一步阅读:
- 内核文档
dm-verity
- dm 验证文章发表于《LWN》