기반답변, 분명히 dm-verity는 블록에 액세스하려고 할 때 블록을 확인하려고 시도합니다. 블록이 검증되면 루트 해시를 검증하기 위해 해시 트리로 올라갑니다.
그냥 접근 중인 블록의 해시를 검증하는 것으로 끝내면 되지 않을까요?
답변에 따르면 dm-verity 해시 트리(머클 트리)에는 실제로 각 리프에 있는 각 블록의 해시 값이 포함되어 있음을 나타내는 것으로 보입니다. 리프에 있는 모든 블록의 해시가 있는 경우 액세스되는 블록만이 아니라 모든 블록 액세스에 대해 전체 블록 장치를 확인해야 하는 이유는 무엇입니까?
답변1
이제 수행해야 할 작업부터 시작해 보겠습니다. 블록 장치(이미지)가 예상한 장치인지 암호화 방식으로 확인합니다.
이렇게 하려면 디스크의 모든 비트를 암호화하여 서명해야 합니다. 한 비트가 변경되면 이를 감지할 수 있는 방법이 필요합니다.
따라서 블록 장치를 동일한 길이의 청크로 분할하고 각 청크에 대한 체크섬을 계산하는 것만으로는 충분하지 않습니다. 파일 시스템 이미지를 수정하고 싶다면 나중에 맞도록 체크섬도 분명히 변경해야 합니다!
대신 체크섬에 서명해야 합니다(작업이 정의되었다고 가정하면 오늘날 우리가 알고 있는 암호화 수학을 사용하여 확인하는 데 오랜 시간이 걸리기 때문에 전체 블록에 서명하는 것보다 낫습니다).
따라서 각 체크섬을 개별적으로 서명하거나 모든 체크섬의 체크섬을 계산한 다음 서명할 수 있습니다.
따라서 후자를 선택합니다.
그러나 실제로 서명된 하나의 루트 해시를 제공하기 위해 해당 블록의 해시를 다른 해시와 결합하는 대신 단일 블록만 확인하는 경우 상태 블록의 장치 이미지를 수정하는 방법으로 돌아갑니다. 그리고 분명히 그 블록의 해시도 고칠 것입니다. 서명되지 않았으므로 아무도 찾을 수 없습니다.