도구스개발

머클 트리 증명 크기 계산기

잎 개수에서 머클 트리의 높이와 노드 수, 포함 증명에 필요한 해시 개수와 바이트를 계산합니다. 홀수 노드를 복제할지 승격할지에 따라 증명 길이가 어떻게 달라지는지도 함께 보여 줍니다.

트리에 담을 자료의 개수입니다. 블록의 거래 수, 파일의 청크 수 같은 것입니다

번째

승격 방식에서는 잎마다 증명 길이가 다를 수 있습니다

바이트
바이트

전체를 다 보내는 경우와 견주는 데만 씁니다

1번째 잎의 증명 크기

해시 10개 · 320B

잎 1,000개 전체를 보내면 256KB입니다 — 증명은 그 0.125% 크기입니다

트리 높이 ⌈log₂n⌉10
전체 노드 수 (잎 포함)2,001
계산해야 하는 해시 수 (내부 노드)1,001
증명 길이 (이 잎)10
잎마다의 증명 길이 범위10개 (모두 같음)
검증에 필요한 해시 계산 횟수10
전체를 보지 않고도 «그 안에 있다»를 보일 수 있습니다. 1,000개 가운데 하나가 트리에 들어 있다는 것을 증명하는 데 필요한 것은 전체 256KB가 아니라 형제 해시 10개, 320B뿐입니다. 받는 쪽은 그 해시들을 차례로 합쳐 뿌리 해시가 나오는지만 보면 되므로 계산도 10번이면 끝납니다. 잎이 두 배가 되어도 증명은 해시 하나만 길어집니다.

층별 노드 수

노드 수비고
1,000
+1500
+2250
+3125홀수 — 마지막을 복제
+463홀수 — 마지막을 복제
+532
+616
+78
+84
+92
+101뿌리

층별 노드 수는 두 규약이 같습니다(둘 다 ⌈이전/2⌉개). 갈리는 것은 증명 길이입니다.

홀수 노드를 어떻게 처리하느냐로 트리가 갈립니다. 지금 고른 «복제»는 짝이 없는 마지막 노드를 자기 자신과 묶어 올립니다. 비트코인이 쓰는 방식이고 모든 잎의 증명 길이가 높이와 같아 다루기 쉽습니다. 다만 마지막을 복제하는 성질 때문에 잎 목록이 다른데도 같은 뿌리 해시가 나오는 경우를 만들 수 있어(비트코인의 CVE-2012-2459), 잎 개수를 따로 커밋하거나 잎 해시에 접두사를 붙여 막습니다.
여기서 세는 것은 «구조»뿐입니다. 실제 뿌리 해시를 얻으려면 잎 데이터를 실제로 해시해야 하고, 형제 해시를 어느 쪽에 붙일지(왼쪽·오른쪽)를 증명에 함께 담아야 검증이 됩니다. 구현마다 잎 해시와 내부 노드 해시에 다른 접두사를 붙이기도 하는데(두 번째 원상 공격을 막기 위한 것입니다), 그러면 해시 계산 횟수는 같아도 입력 바이트가 달라집니다.

사용 방법

  1. 1잎 개수를 넣습니다. 블록의 거래 수나 파일의 청크 수 같은 것입니다.
  2. 2증명을 볼 잎 번호를 고릅니다. 승격 방식에서는 잎마다 길이가 다릅니다.
  3. 3홀수 노드를 복제할지 승격할지 고릅니다.
  4. 4해시 크기를 고르면 증명 바이트가 나옵니다. SHA-256이면 32바이트입니다.
  5. 5전체를 다 보내는 경우와 견줘 증명이 얼마나 작은지 확인합니다.

자주 묻는 질문

트리 높이만큼, 즉 ⌈log₂n⌉개입니다. 잎이 1,000개면 10개, 100만 개면 20개입니다. 잎이 두 배가 되어도 하나만 늘어나기 때문에, 100만 개짜리 트리의 증명도 SHA-256 기준 640바이트에 그칩니다. 「전체를 보지 않고 그 안에 있다는 것만 보인다」가 이 자료구조의 존재 이유입니다.

잎을 포함해 각 층의 노드 수를 더한 값이며, 잎이 2의 거듭제곱이면 2n−1개입니다. 잎 8개면 8+4+2+1 = 15개이고 이 가운데 해시를 실제로 계산해야 하는 내부 노드는 7개입니다. 잎이 2의 거듭제곱이 아니면 층마다 ⌈이전/2⌉개가 되어 조금 달라집니다.

두 가지 방식이 있습니다. 복제는 짝이 없는 마지막 노드를 자기 자신과 묶어 올리며 비트코인이 이 방식입니다. 승격은 그대로 위로 올려 그 자리에서 형제 해시를 생략합니다. 층별 노드 «개수»는 두 방식이 같고, 갈리는 것은 증명 길이입니다 — 복제는 모든 잎이 높이와 같고, 승격은 마지막 잎일수록 짧아집니다.

있습니다. 마지막 노드를 복제하는 성질 때문에 잎 목록이 다른데도 같은 뿌리 해시가 나오는 경우를 만들 수 있으며, 비트코인에서 CVE-2012-2459로 알려진 취약점이 이것입니다. 잎 개수를 따로 커밋하거나 잎 해시와 내부 노드 해시에 다른 접두사를 붙이는 방식으로 막습니다.

자기가 가진 잎을 해시한 뒤 받은 형제 해시를 차례로 합쳐 올라가 뿌리 해시와 같은지만 봅니다. 계산 횟수는 증명 길이와 같아서, 100만 개짜리 트리도 해시 20번이면 검증이 끝납니다. 다만 형제 해시를 왼쪽에 붙일지 오른쪽에 붙일지도 증명에 함께 담겨야 하며, 이 방향 정보가 없으면 검증할 수 없습니다.

아닙니다. 여기서 세는 것은 트리의 «구조»입니다. 높이·노드 수·증명 길이·바이트 수처럼 자료의 내용과 무관하게 개수로 정해지는 값들이며, 실제 뿌리 해시를 얻으려면 잎 데이터를 직접 해시해야 합니다.

블록체인의 거래 포함 증명(SPV 지갑이 블록 전체를 받지 않고 자기 거래만 확인하는 방식), Git의 객체 트리, 인증서 투명성 로그, 분산 파일 시스템의 청크 무결성 검증, 백업 도구의 변경 감지에 두루 쓰입니다. 공통점은 「큰 자료 전체를 옮기지 않고 일부만 확인하고 싶다」는 것입니다.

전송되지 않습니다. 계산은 모두 브라우저 안에서 이루어지고 넣은 값은 이 기기에만 남습니다.

알아두면 좋은 점

  • 층별 노드 수는 복제·승격 두 규약이 같습니다. 갈리는 것은 증명 길이입니다.
  • 승격 방식은 잎마다 증명 길이가 다릅니다. 마지막 잎이 가장 짧고 첫 잎이 높이만큼으로 가장 깁니다.
  • 복제 방식에는 잎 목록이 달라도 같은 뿌리가 나올 수 있는 알려진 문제가 있습니다(CVE-2012-2459).
  • 구조만 셉니다. 실제 뿌리 해시를 얻으려면 잎 데이터를 해시해야 하고, 증명에는 형제의 좌우 방향도 함께 담겨야 합니다.
  • 잎 해시와 내부 노드 해시에 다른 접두사를 붙이는 구현이 많습니다. 개수는 같아도 해시 입력 바이트가 달라집니다.

함께 보면 좋은 도구

마지막 검증: 2026년 9월 2일 · 결과는 참고용 추정치입니다.