dm-verity には、データストレージデバイスを検証するために使用されるルートハッシュがあります。実行すると生成されますveritysetup
。しかし、ルートハッシュに加えて塩も提供されます。なぜ?
答え1
ソルトがない場合、すべてのデータブロックは常に同じブロックハッシュを生成します。これは、そのブロックのハッシュ衝突が見つかった場合に使用できることを意味します。ブロックサイズが固定されていることを考慮すると、この可能性は低いですが、差分更新を使用して更新される長期パーティションでは、単一ブロックが長年にわたって変更されない可能性があります。ソルトを使用すると、更新するたびにソルトを変更し、更新するたびにすべてのブロックハッシュが変更されるため、これを心配する必要はありません。
dm-verityで生成されたハッシュツリーは信頼できず、デバイスで生成されるため、これを生成するために必要なものはすべてソルトとデータです。最終ルートノードは提供されたルートハッシュと一致する必要があります。
(Fwiw、dm-verityの元のバージョンはソルトサポートを欠いていました。)
答え2
ソルトは、デバイスに保存されているダイジェストを作成するときにハッシュ値と結合されます。ハッシュは(与えられたコンテンツに対して)同じであるため、ソルトはダイジェストを異ならせる方法です。
run を実行するとdm-verity
ハッシュリストと比較されるため、ハッシュを保存されたダイジェストと一致させるにはソルトが必要です。
追加資料:
- カーネル文書
dm-verity
- DM確認「LWN」に掲載された記事