머클 트리 (Merkle Tree)

컴퓨터과학·AI
한 줄 정의: 데이터를 잘게 나눠 각각의 해시값을 구하고, 그 해시들을 두 개씩 묶어 다시 해시하는 과정을 반복해 하나의 루트 해시로 요약하는 트리 구조입니다.

쉽게 풀면

수백 페이지짜리 문서 전체가 바뀌지 않았는지 확인해야 한다고 해봅시다. 매번 문서 전체를 처음부터 끝까지 대조하는 건 비효율적입니다. 대신 문서를 여러 조각으로 나눠서 각 조각마다 고유한 지문(해시값)을 만들고, 그 지문들을 두 개씩 짝지어 또 하나의 지문을 만드는 과정을 문서 전체를 대표하는 지문 하나(루트 해시)가 나올 때까지 반복합니다. 이렇게 만들어두면, 조각 하나라도 바뀌면 그 조각의 지문이 바뀌고 이는 위쪽으로 계속 전파되어 최종 루트 해시도 반드시 달라집니다. 그래서 루트 해시만 비교해도 "뭔가 바뀌었다"를 즉시 알 수 있고, 트리를 타고 내려가며 어느 조각이 바뀌었는지도 콕 집어 찾아낼 수 있습니다.

왜 중요한가

머클 트리는 대용량 데이터의 무결성을 적은 통신량과 계산량으로 검증할 수 있게 해주기 때문에, 블록체인·분산 파일시스템·분산 데이터베이스처럼 여러 노드가 동일한 데이터를 신뢰해야 하는 시스템 연구에서 핵심적인 자료구조로 다뤄집니다. 신뢰할 수 없는 네트워크 환경에서 데이터 전체를 주고받지 않고도 "이 데이터가 맞는지"를 증명하는 문제와 직결되기 때문에, 분산 시스템·보안·P2P 프로토콜 논문에서 폭넓게 인용됩니다.

논문에서는 이렇게 쓰입니다

"블록체인의 각 블록은 포함된 거래 내역을 머클 트리로 구성하여, 특정 거래의 포함 여부를 전체 블록 데이터 없이도 루트 해시와 소수의 해시값만으로 검증할 수 있도록 하였다."

이 문장은 어떤 거래 하나가 실제로 블록에 포함되어 있는지를 확인하고 싶을 때, 블록 안의 모든 거래를 다시 다운로드하지 않고도 루트 해시까지 이어지는 몇 개의 해시값만으로 검증할 수 있다는 뜻입니다. 이런 검증 방식을 흔히 "머클 증명(Merkle proof)"이라고 부르며, 데이터 크기가 커질수록 검증에 필요한 정보량이 로그 단위로만 늘어난다는 장점이 있습니다.

"제안하는 분산 파일 저장 시스템은 각 파일 조각의 해시를 머클 트리로 구성하여 저장 노드 간 동기화 시 변경된 조각만을 선별적으로 재전송함으로써 대역폭 사용량을 크게 절감하였다."

분산 파일시스템 연구에서는 파일 전체를 매번 비교하는 대신, 머클 트리의 루트 해시부터 비교해 내려가며 실제로 달라진 조각만 찾아내는 방식으로 동기화 비용을 줄이는 데 활용됩니다.

"인증서 투명성(Certificate Transparency) 로그는 발급된 인증서를 추가 전용 머클 트리에 기록함으로써, 특정 인증서가 로그에 포함되어 있음을 제3자가 독립적으로 검증할 수 있도록 하였다."

보안 분야에서는 데이터가 나중에 몰래 수정되지 않았음을 외부에서도 검증 가능하게 만드는 용도로 머클 트리가 쓰이며, 이는 신뢰할 수 없는 중앙 서버를 감시하는 메커니즘의 기반이 됩니다.

조금 더 깊게 보면

실제 시스템에서는 이진 트리 형태의 기본 머클 트리 외에도, 여러 자식을 갖는 머클 트리나 정렬된 키에 접두사 트리 구조를 결합한 머클 패트리샤 트리(Merkle Patricia Trie)처럼 변형된 형태가 쓰이기도 합니다. 특정 데이터가 트리에 포함되어 있음을 증명할 때 필요한 형제 노드들의 해시 목록을 "머클 증명" 또는 "포함 증명(inclusion proof)"이라 부르며, 트리의 높이에 비례해 증명 크기가 결정되므로 대체로 데이터 개수가 늘어나도 증명 크기는 로그 스케일로만 커진다는 점이 자주 강조됩니다.

주의할 점

머클 트리는 데이터가 위변조되었는지를 빠르게 확인해줄 뿐, 데이터 자체를 암호화하거나 외부로부터 숨겨주지는 않습니다. 값을 저장하고 빠르게 조회하는 것이 목적인 일반적인 해시테이블과 달리, 머클 트리는 전체 데이터를 다시 내려받지 않고도 부분 데이터만으로 무결성을 검증할 수 있다는 점이 핵심적인 차이입니다.

관련 용어