비트코인은 수천 건의 거래를 하나하나 확인하지 않고 어떻게 검증하는가
머클 트리가 비트코인에서 수천 건의 거래를 단 몇 밀리초 만에 검증하는 방법. 이 우아한 자료구조의 작동 원리와 중요성.
비트코인 블록 하나에는 수천 건의 거래가 담길 수 있습니다. 내 거래가 포함되었는지 확인하려면 블록의 모든 거래를 다운로드해서 하나씩 대조해야 할까요? 그건 느리고, 데이터도 많이 쓰고, 스마트폰에서는 사실상 불가능합니다.
대신 비트코인은 1979년 랄프 머클이 발명한 자료구조를 사용합니다: 머클 트리. 수천 건의 거래를 32바이트 해시 하나로 압축하고, 블록 전체가 아니라 소수의 해시만으로 특정 거래의 존재를 증명할 수 있게 해줍니다.
여러분의 스마트폰 지갑이 600GB 이상의 블록체인을 저장하지 않고도 거래를 검증할 수 있는 이유가 바로 이것입니다.
여러분의 폰이 신경 쓰는 단 하나의 숫자
트리가 어떻게 조립되는지 몰라도 그 혜택은 누릴 수 있습니다. 알아야 할 건 트리가 무엇을 만들어내는가뿐입니다. 머클 트리는 블록의 모든 거래를 쌍 단위로 접어 올려 머클 루트라는 단 하나의 32바이트 해시로 만듭니다. 이 루트는 블록 헤더 안에 들어 있습니다 - 채굴자가 작업증명을 찾을 때 해싱하는 80바이트 요약본 말입니다.
2,000건의 거래가 있는 블록에서 트리는 약 11단계 깊이밖에 안 됩니다. 그래서 거래 하나를 확인하는 데 2,000개가 아니라 약 11개의 해시만 있으면 됩니다. 이 로그 스케일의 축소가 바로, 풀노드가 수 메가바이트로 하는 검증을 폰이 수백 바이트만으로 똑같이 해낼 수 있는 이유입니다.
리프를 이중 해싱하는 방식, 홀수 복제 규칙, CVE-2012-2459 변조 버그, MAST, 증인 트리 같은 구성 세부사항이 궁금하다면 기술 레퍼런스를 참고하세요: 머클 트리 - 효율적 데이터 검증. 이 글의 나머지는 그 루트가 경량 지갑에게 무엇을 할 수 있게 해주는가에 관한 것입니다.
머클 증명 - 신뢰 없는 검증
머클 트리의 진짜 힘은 머클 증명(SPV 증명)입니다.
8건의 거래가 있는 블록에서 TX3의 포함을 검증한다고 합시다. 8개 전부 필요 없습니다:
- TX3의 해시 (이미 가지고 있음)
- TX4의 해시 (TX3의 쌍)
- TX1+TX2의 결합 해시 (다음 레벨의 형제)
- TX5-TX8 분기의 결합 해시 (최상위 레벨의 형제)
해시 3개입니다. 단계별로 결합하여 블록 헤더의 머클 루트와 일치하는지 확인합니다. 일치하면 TX3은 블록에 있습니다. 거래가 변조되었다면 해시가 맞지 않습니다.
4,000건의 거래가 있는 블록에서도 머클 증명에 필요한 건 약 12개 해시(log2 4,000). 각 해시 32바이트. 수 메가바이트의 블록에서 멤버십을 증명하는 데 384바이트면 됩니다.
이것이 경량 지갑의 수학적 기반입니다. 스마트폰은 전체 블록체인을 저장하지 않습니다. 블록 헤더(각 80바이트)를 다운로드하고, 풀노드에서 거래의 머클 증명을 요청합니다. 증명이 헤더와 맞으면 거래가 확인된 것입니다 - 데이터를 준 노드를 신뢰하지 않아도.
경량 클라이언트는 이것으로 실제 무엇을 하는가
블록 헤더 체인. 모든 블록 헤더에는 해당 블록의 머클 루트가 들어 있고, 헤더들은 작업증명으로 서로 연결됩니다. 경량 클라이언트는 이 헤더 체인만 - 비트코인 전체 역사를 통틀어 수십 메가바이트 - 다운로드합니다. 어떤 헤더든 다시 쓰려면 채굴을 다시 해야 하므로, 이 체인을 신뢰할 수 있습니다.
SPV 지갑. Electrum, BlueWallet 등 대부분의 모바일 지갑이 이를 실제로 구현합니다. 헤더 체인을 보관하다가, 여러분의 거래를 확인해야 할 때마다 풀노드에 머클 증명을 요청합니다. 증명은 지갑이 이미 신뢰하는 헤더와 대조되므로, 증명을 제공한 노드 자체는 신뢰할 필요가 없습니다.
머클 트리는 비트코인의 다른 부분에도 등장합니다 - 탭루트의 MAST는 지출 조건을 트리에 커밋하고, 세그윗은 별도의 증인 트리를 추가합니다 - 하지만 이는 구성 차원의 활용으로 머클 트리 레퍼런스에서 다룹니다. 지갑 입장에서 할 일은 언제나 동일합니다: 신뢰하는 루트 하나와 짧은 증명 하나를 가지고 포함 여부를 확인하는 것.
머클 트리의 우아함
랄프 머클이 이 구조를 설계한 건 1979년 - 비트코인보다 30년 전입니다. 사토시가 이것을 채택한 이유는 근본적인 확장 문제를 해결하기 때문입니다: 신뢰 없는 시스템에 경량 기기가 어떻게 참여하는가?
답은 전체를 드러내지 않고 멤버십을 증명하는 해시의 트리입니다. 여러분의 폰이 수 밀리초 만에 비트코인 결제를 검증할 수 있는 이유이자, 600GB 데이터를 가진 풀노드가 같은 수학으로 같은 결론에 도달하는 이유입니다.