머클 블록 (Merkle Block)
머클 블록(Merkle Block)은 블룸 필터와 일치하는 트랜잭션을 블록의 머클 루트에 연결하는 부분 머클 트리입니다. 비트코인에서는 BIP37에 정의된 P2P 메시지(merkleblock)로, 블록 헤더와 부분 머클 트리를 함께 담아 경량 클라이언트가 전체 블록 없이 트랜잭션 포함 여부를 확인하게 합니다.
장점:
- 대역폭 감소: 전체 블록을 다운로드하는 대신 요청과 관련된 작은 부분만 전송됩니다.
- 더 빠른 검증: 전체 블록 데이터 없이 트랜잭션을 검증할 수 있습니다.
- 효율성 향상: 특히 저장 공간과 처리 능력이 제한된 라이트 클라이언트 또는 장치에 유용합니다.
단점:
- 개인 정보 보호 문제: 블룸 필터는 확률적이므로 사용자의 트랜잭션 내역에 대한 정보를 누설할 수 있습니다.
- 복잡성: 머클 트리와 블룸 필터를 구현하고 이해하려면 기술 전문 지식이 필요합니다.
- 완전 노드의 부담: 필터 처리는 응답하는 완전 노드의 자원을 사용합니다. 이 때문에 비트코인 코어는 0.19 버전부터 BIP37 블룸 필터 서비스를 기본값으로 끄고 있습니다.
활용 분야:
- 경량 클라이언트(SPV 지갑): 전체 블록체인을 다운로드하지 않고 트랜잭션을 검증할 수 있습니다.
- 체인 간 검증(관련 개념): 일부 브리지나 사이드체인은 다른 체인의 트랜잭션 포함 여부를 확인할 때 머클 증명을 사용합니다. 이는 머클 블록 메시지 자체가 아니라 같은 원리의 머클 포함 증명입니다.
특정 트랜잭션 찾기
모든 트랜잭션이 기록된 공개 원장에서 특정 트랜잭션을 찾는 경우를 생각해 볼 수 있습니다. 원장은 매우 크기 때문에 전체를 내려받아 검색하려면 많은 시간과 저장 공간이 필요합니다.
이때 쓰이는 것이 머클 블록입니다.
머클 트리로 점 연결
머클 트리를 트랜잭션의 가계도라고 생각하세요. 맨 아래에는 모든 개별 트랜잭션이 있습니다. 트랜잭션 쌍은 함께 해시되고 해시는 트리를 따라 이동하여 결국 맨 위에 있는 단일 머클 루트에 도달합니다. 이 루트는 블록의 모든 트랜잭션을 나타냅니다.
블룸 필터의 역할
경량 클라이언트는 전체 트리를 받지 않고 원하는 트랜잭션만 받기 위해 블룸 필터를 사용합니다. 필터를 대조하는 쪽은 클라이언트가 아니라 완전 노드입니다.
- 경량 클라이언트가 관심 있는 주소, 공개키, 트랜잭션 식별자 등으로 블룸 필터를 만듭니다.
- 클라이언트는 이 필터를 연결된 완전 노드에 보냅니다(filterload 메시지).
- 완전 노드는 블록의 트랜잭션을 필터와 대조해 일치하는 것만 고르고, 머클 블록과 해당 트랜잭션을 클라이언트에 돌려줍니다.
- 블룸 필터에는 거짓 양성이 있어 관련 없는 트랜잭션도 일부 섞여 전달됩니다. 이는 관심 대상을 어느 정도 숨기는 효과가 있지만, 보호 수준은 충분하지 않은 것으로 알려져 있습니다.
핵심: 부분 머클 트리
클라이언트가 머클 블록을 요청하면 전체 트리 대신 부분 머클 트리를 받게 됩니다. 부분 머클 트리에는 다음만 포함됩니다.
- 블룸 필터와 일치하는 트랜잭션의 해시.
- 이러한 트랜잭션을 블록의 머클 루트에 연결하기에 충분한 머클 트리의 분기
클라이언트는 이 분기로 머클 루트를 다시 계산해 블록 헤더의 값과 비교합니다. 이렇게 하면 전체 블록체인을 다운로드하지 않고도 특정 트랜잭션이 블록에 포함되어 있음을 확인할 수 있습니다.
실제 예를 통해 머클 블록 이해하기
머클 블록은 특정 트랜잭션이 더 큰 세트의 일부임을 증명하는 간소화된 방법과 같습니다. 모든 항목을 확인할 필요 없이 대규모 컬렉션에서 특정 항목을 확인하는 방법이라고 상상해 보세요.
개념 설명
다음과 같이 생각해보세요.
- 거대한 도서관(블록체인)에 책(블록)이 가득합니다.
- 특정 페이지(트랜잭션)가 실제로 특정 책의 일부임을 증명하고 싶지만 책 전체를 읽을 필요는 없습니다.
- 머클 블록은 이러한 페이지가 해당 책에 속해 있음을 확인하는 데 필요한 부분만 표시하는 색인 역할을 합니다.
일상 생활의 비유: 식료품점 영수증
- 전체 영수증: 식료품점 영수증에는 구매한 모든 항목이 나열되어 있다고 상상해 보세요. 이것은 전체 블록에 모든 트랜잭션이 포함된 방식과 유사합니다.
- 쇼핑 목록: 쇼핑 목록의 특정 항목만 확인하는 데 관심이 있습니다. 블룸 필터는 전체 블록에서 관련 트랜잭션을 식별하는 것처럼 전체 영수증에서 이러한 항목을 식별하는 데 도움이 됩니다.
- 강조 표시된 항목: 전체 영수증을 보여주는 대신 쇼핑 목록에서 해당 항목만 강조 표시하고 총 지출 금액과의 관계를 보여줍니다. 이 강조 표시 프로세스는 머클 블록이 특정 트랜잭션을 블록의 머클 루트로 다시 연결하는 방식과 유사합니다.
이 선택적 검증은 필요한 부분만 주고받으므로 효율적입니다. 마치 구매한 다른 모든 항목을 보여 주지 않고 필요한 식료품만 확인하는 것과 같습니다. 다만 앞서 설명했듯 블룸 필터는 사용자가 관심 있는 트랜잭션에 대한 정보를 노출할 수 있습니다.
기술적인 측면 단순화
- 머클 트리: 대규모 데이터 세트(예: 블록의 모든 트랜잭션)를 효율적으로 요약하고 검증하는 데 사용되는 구조입니다.
- 머클 루트: 이 트리 구조의 모든 기본 데이터를 나타내는 최상위 해시 값으로, 기본적으로 모든 것을 요약합니다.
- 블룸 필터: 요소가 세트의 일부인지 빠르게 확인하는 데 사용되는 확률적 자료 구조로, 완전 노드가 클라이언트와 관련된 트랜잭션을 고르는 데 쓰입니다.
이러한 구성 요소는 함께 대량의 데이터를 처리하는 경우에도 모든 것을 검색하지 않고도 개별 부분을 검증할 수 있게 합니다. 경량 클라이언트는 이 기능을 이용해 동작합니다.
이 글은 학습을 위한 일반 정보이며 투자 권유나 법률 자문이 아닙니다. 가상자산은 가격 변동이 크고 원금 손실 위험이 있습니다.