DM-Verity는 어떻게 작동하나요?

DM-Verity는 어떻게 작동하나요?

DM-Verity의 작동 방식을 이해할 수 없습니다.

다음에서 읽기여기또는여기이에 대해 몇 가지 질문이 있습니다.

  1. dm-verity로 보호되는 전체 블록 파티션을 고려하세요. 데이터에 액세스할 때 루트 해시까지 해시 테이블의 데이터를 확인해야 합니다. dm-verity는 관심 있는 데이터 블록만 확인합니까, 아니면 전체 파티션을 확인합니까? 첫 번째 경우, 일정 시간이 지난 후 dm-verity 보호 파티션의 다른 블록을 확인해야 하는 경우 전체 프로세스가 다시 수행되나요?
  2. 로 마운트된 dm-verity 보호 blck 파티션이 있습니다 /dev/sda1. /dev/sda1Linux에서 이 표시되면 전체 파티션이 확인되었음을 의미합니까?
  3. /dev/dm*그것이 무엇이며 왜 필요한지 설명해 주시겠습니까 ?

답변1

면책 조항: 저는 전문가는 아니지만 RPi에서 dm-verity를 ​​설정하면서 배운 내용을 공유합니다. 질문 1과 2에 대해 답변해 드리겠습니다.

  1. 내가 찾은 dm-verity에 대한 설명이 실제로 다음을 포함하여 알고리즘을 설명한다는 점을 고려하면이 답변, 그들은 인용하여 실제 알고리즘을 설명합니다.머클 트리. 후자의 참조에는 유용한 예가 있습니다.

여기에 이미지 설명을 입력하세요.

예를 들어, 그림에서 트리에 이미 해시 0-0과 해시 1이 포함되어 있는 경우 데이터 블록을 해싱한 후 그 결과를 해시 0-0, 해시 1, 최종 결과와 비교하면 데이터 블록 L2의 무결성을 즉시 확인할 수 있습니다. 반복 조합. 결과를 상위 해시와 비교합니다. 마찬가지로 해시 1-1과 해시 0이 이미 트리에 있으면 데이터 블록 L3의 무결성을 확인할 수 있습니다.

dm-verity를 ​​설정할 때 해시 트리를 생성하여 별도의 파티션에 저장합니다. 그런 다음 시스템은 읽고 있는 블록을 확인할 수 있습니다.

  • 읽고 있는 블록의 해시를 계산합니다.
  • 계산된 해시는 다른 블록에 저장된 해시와 결합되어 상위 해시를 계산합니다.
  • 이 상위 계층 해시는 같은 계층에 저장된 해시와 결합되어 다음 상위 계층 해시를 계산합니다.
  • 루트 해시가 계산될 때까지 반복
  • 계산된 루트 해시를 저장된 루트 해시와 비교

블록이 기록될 때마다 변조를 계속 감지하려면 저장된 해시 트리를 업데이트해야 합니다.

  1. 나는 그것이 구현에 달려 있다고 생각합니다. 하지만 구현에 있어서cryptsetup-bin 데비안 패키지1부에서 설명했듯이이 참조시작 시 전체 해시를 확인하세요. (이것위키피디아 링크위 내용은 또한 블록의 해시에서 시작하는 해시 트리를 계산하는 것이 전체 데이터 세트에 대한 해시를 계산하는 것보다 단일 블록에 대한 해시 트리를 계산하는 것보다 더 효율적이라고 설명합니다. 이 부분은 아직 파악 중입니다. 내가 이해한 바에 따르면 모든 읽기에서 블록을 확인하도록 구성할 수도 있습니다(참조이 참조).

답변2

  1. 작동 방식을 보여주는 다이어그램은 다음과 같습니다.https://source.android.com/security/verifiedboot/dm-verity

  2. 아마도 그렇습니다.

  3. /dev/dm* 장치는 장치 매퍼에 속합니다. dm-verity에 관해 말하면 다음이 도움이 될 수 있습니다.https://en.wikipedia.org/wiki/Device_mapper https://www.kernel.org/doc/html/latest/admin-guide/device-mapper/verity.html

관련 정보