DM-Verity의 작동 방식을 이해할 수 없습니다.
다음에서 읽기여기또는여기이에 대해 몇 가지 질문이 있습니다.
- dm-verity로 보호되는 전체 블록 파티션을 고려하세요. 데이터에 액세스할 때 루트 해시까지 해시 테이블의 데이터를 확인해야 합니다. dm-verity는 관심 있는 데이터 블록만 확인합니까, 아니면 전체 파티션을 확인합니까? 첫 번째 경우, 일정 시간이 지난 후 dm-verity 보호 파티션의 다른 블록을 확인해야 하는 경우 전체 프로세스가 다시 수행되나요?
- 로 마운트된 dm-verity 보호 blck 파티션이 있습니다
/dev/sda1
./dev/sda1
Linux에서 이 표시되면 전체 파티션이 확인되었음을 의미합니까? /dev/dm*
그것이 무엇이며 왜 필요한지 설명해 주시겠습니까 ?
답변1
면책 조항: 저는 전문가는 아니지만 RPi에서 dm-verity를 설정하면서 배운 내용을 공유합니다. 질문 1과 2에 대해 답변해 드리겠습니다.
- 내가 찾은 dm-verity에 대한 설명이 실제로 다음을 포함하여 알고리즘을 설명한다는 점을 고려하면이 답변, 그들은 인용하여 실제 알고리즘을 설명합니다.머클 트리. 후자의 참조에는 유용한 예가 있습니다.
예를 들어, 그림에서 트리에 이미 해시 0-0과 해시 1이 포함되어 있는 경우 데이터 블록을 해싱한 후 그 결과를 해시 0-0, 해시 1, 최종 결과와 비교하면 데이터 블록 L2의 무결성을 즉시 확인할 수 있습니다. 반복 조합. 결과를 상위 해시와 비교합니다. 마찬가지로 해시 1-1과 해시 0이 이미 트리에 있으면 데이터 블록 L3의 무결성을 확인할 수 있습니다.
dm-verity를 설정할 때 해시 트리를 생성하여 별도의 파티션에 저장합니다. 그런 다음 시스템은 읽고 있는 블록을 확인할 수 있습니다.
- 읽고 있는 블록의 해시를 계산합니다.
- 계산된 해시는 다른 블록에 저장된 해시와 결합되어 상위 해시를 계산합니다.
- 이 상위 계층 해시는 같은 계층에 저장된 해시와 결합되어 다음 상위 계층 해시를 계산합니다.
- 루트 해시가 계산될 때까지 반복
- 계산된 루트 해시를 저장된 루트 해시와 비교
블록이 기록될 때마다 변조를 계속 감지하려면 저장된 해시 트리를 업데이트해야 합니다.
- 나는 그것이 구현에 달려 있다고 생각합니다. 하지만 구현에 있어서cryptsetup-bin 데비안 패키지1부에서 설명했듯이이 참조시작 시 전체 해시를 확인하세요. (이것위키피디아 링크위 내용은 또한 블록의 해시에서 시작하는 해시 트리를 계산하는 것이 전체 데이터 세트에 대한 해시를 계산하는 것보다 단일 블록에 대한 해시 트리를 계산하는 것보다 더 효율적이라고 설명합니다. 이 부분은 아직 파악 중입니다. 내가 이해한 바에 따르면 모든 읽기에서 블록을 확인하도록 구성할 수도 있습니다(참조이 참조).
답변2
작동 방식을 보여주는 다이어그램은 다음과 같습니다.https://source.android.com/security/verifiedboot/dm-verity
아마도 그렇습니다.
/dev/dm* 장치는 장치 매퍼에 속합니다. dm-verity에 관해 말하면 다음이 도움이 될 수 있습니다.https://en.wikipedia.org/wiki/Device_mapper https://www.kernel.org/doc/html/latest/admin-guide/device-mapper/verity.html