dm-verity에는 데이터 저장 장치를 확인하는 데 사용되는 루트 해시가 있습니다. 실행하면 생성됩니다 veritysetup
. 그러나 루트 해시 외에도 소금도 제공됩니다. 왜?
답변1
솔트가 없으면 모든 데이터 블록은 항상 동일한 블록 해시를 생성합니다. 이는 해당 블록에 대한 해시 충돌이 발견되면 사용할 수 있음을 의미합니다. 블록 크기가 고정되어 있다는 점을 고려하면 이러한 가능성은 낮지만 차등 업데이트를 사용하여 업데이트되는 장기 파티션의 경우 단일 블록이 수년 동안 변경되지 않을 수 있습니다. 솔트를 사용하면 업데이트할 때마다 솔트를 변경하여 업데이트할 때마다 모든 블록 해시가 변경되므로 이에 대해 걱정하지 않아도 됩니다.
dm-verity에서 생성된 해시 트리는 신뢰할 수 없으며 기기에서 생성되므로 이를 생성하는 데 필요한 모든 것은 솔트와 데이터입니다. 최종 루트 노드는 제공된 루트 해시와 일치해야 합니다.
(Fwiw, dm-verity의 원래 버전에는 솔트 지원이 부족했습니다.)
답변2
솔트는 장치에 저장되는 다이제스트를 생성할 때 해시 값과 결합됩니다. 해시는 (주어진 콘텐츠에 대해) 동일하므로 솔트는 다이제스트를 다르게 만드는 방법입니다.
run 을 실행하면 dm-verity
해시 목록과 비교되므로 해시를 저장된 다이제스트와 일치시키려면 솔트가 필요합니다.
추가 자료:
- 커널 문서
dm-verity
- DM 확인"LWN"에 게재된 기사