검수요청.png검수요청.png

머클트리

위키원
14.41.46.139 (토론)님의 2020년 1월 28일 (화) 11:30 판 (생성 과정)
(차이) ← 이전 판 | 최신판 (차이) | 다음 판 → (차이)
이동: 둘러보기, 검색

머클트리(Merkle Tree)는 블록에 포함된 거래 내역을 나무 형태로 요약한 것이다. 1979년 머클트리를 개발한 랄프 머클(Ralph Merkle)의 이름을 따서 머클트리라고 부르며 해시트리(Hash Tree), 혹은 이진트리(Binary Tree)라고도 한다.

개요[편집]

머클트리는 블록 내에서 다수의 원장(ledger)들을 암호화하고 합치는 과정을 반복하여 최종적으로 하나의 유닛(Unit)으로 암호화하는 방법이다.[1] 머클트리의 형태는 블록이 보유하고 있는 거래 내역들의 해시값을 가장 가까운 거래내역끼리 쌍을 지어 해시화하고, 쌍을 지을 수 없을 때까지 해당 과정을 반복하여 완성되는데, 이 과정을 통해 다수의 데이터를 하나로 묶어 용량을 절약할 수 있다.

머클트리에서는 모든 거래내역들을 해시화한 머클루트를 통해 거래내역의 변동여부를 쉽게 확인할 수 있고 이 머클루트를 헤더에 담아 트랜잭션의 유효성을 보장한다. 또한 머클 경로(Merkle path)를 제공받아 특정한 트랜잭션이 블록에 유효하게 있는 효율적인 검사가 가능하다. 즉, 머클트리는 모든 정보를 압축하여 간단하게 표현한 데이터로서 머클트리를 통해 데이터의 간편하고 확실한 인증이 가능하다.[2]

특징[편집]

머클트리머클루트

생성 과정[편집]

머클트리는 머클루트를 구하기 까지 반복하게 되는 과정이 토너먼트 대진표의 모양으로 만들어진다. ‘log₂[전체거래내역의수]’값을 구하면 해시화한 과정의 횟수도 알 수 있기 때문에 머클트리만 따라가면 특정 거래내역을 쉽게 찾을 수 있다. 머클트리는 트리구조를 형성하고 있는 암호화 과정이다. 우측 그림을 보면, 맨 밑에 위치한 최종 값을 머클루트, 상부의 값들을 리프(leaf, 잎)라고 칭한다. 8개 거래에 대한 머클트리를 예시로 들어보면 그림과 같이 거래에 대한 해시값이 TX1부터 TX8과 같이 리프가 이어져 있고, 이를 두 개씩 묶어 더한 후 같은 방식으로 진행하여 최종 값인 머클루트를 얻는다. 거래가 홀수인 경우, 맨 마지막 거래를 복사하여 거래를 짝수개로 만들어 사용하는 원칙으로 이용되고 있다. 이러한 경우를 균형트리(balanced tree)라고 한다.[3] 머클트리의 생성 과정은 다음과 같다.

  1. 최초 데이터를 SHA256형태의 해시값으로 변환한다.
  2. 가장 가까운 노드 2개를 한쌍으로 묶어 합친 후 그 값을 해시값으로 변환한다.
  3. 하나가 남을때까지 2번 과정을 계속 반복되며 하나의 값만 남았을 때까지 이 과정을 반복한다.[4]
  4. 최종적으로 남는 하나의 블록은 모든 거래를 합친 해시값을 포함하고 있으며 이를 머클루트(Merkle Root)라 한다.

구성요소[편집]

  • 머클루트 : 블록이 보유하고 있는 거래 내역들의 해시값을 가장 가까운 거래내역끼리 쌍을 지어 해시화하고 쌍을 지을 수 없을 때까지 이 과정을 반복했을 때 얻게 되는 값이다. 이는 블록에 저장되어 있는 모든 거래의 요약본으로 해당 블록에 포함된 거래로부터 생성된 머클트리의 루트에 대한 해시정보가 담겨있다. 아무리가 거래가 많이 발생하여도 하나로 압축된 머클 루트의 용량은 항상 32 바이트이다.[5]
  • 머클 경로 : 머클 경로(Merkle path)는 어떤 거래의 진위를 따질 때 이를 검증하는 과정이다. 머클루트가 주어진다면, 좀 더 쉽게 검증이 가능하다.[5]
  • SHA-256 암호화 : 단방향 암호화 기술인 SHA-256은 머클트리가 데이터를 간편하고 확실하게 인증하기 위해 사용하는 암호화 기술이다. 어떠한 수를 암호화하더라도 결과는 16진수 64자이다. SHA-256의 특징 중 하나가 입력된 값이 조금이라도 다를 경우 결과를 전혀 유추할 수 없고, 입력한 글자의 수와 관계없이 결과의 크기가 항상 64자라는 것이다. 거래량의 상관없이 SHA-256를 사용하여 작은 용량으로 유지할 수 있다.[5]
  • 풀 노드와 라이트 노드 : 풀 노드(full node)는 제네시스 블록부터 현재 시점의 형성된 블록이 연결된 블록체인 전체를 유지하는 노드이다. 그와 대조적으로 라이트 노드(Light node)는 일부 블록만 소유하고 풀 노드에게서 필요한 정보만을 받아서 유지하는 노드이다.[5] 머클트리는 라이트 노드에서 거래를 검증하기 위해 사용된다.

필요성[편집]

머클트리 자체가 해시로 이루어진만큼 하나의 트랜잭션 혹은 블록 내 필드값이 변조될 경우 머클루트 해시 값이 변조되는 쇄도 효과(avalanche effect)가 발생한다. 이러한 이유로 잘못된 해시값이 검출되면 해당 블록을 거부하고 블록체인 네트워크를 계속해서 안정적으로 유지 할 수 있게 된다.[4]

장점[편집]

머클트리는 두 가지 이유로 블록체인의 효용성 향상에 크게 기여한다. 첫째로 특정 거래내역을 증명하기 위해 모든 거래내역을 검색할 필요가 없다. 블록체인은 시간이 지날수록 블록체인에 저장된 데이터가 늘어나 용량이 커진다면, 거래 처리 속도도 느려질 수밖에 없다. 따라서 모든 거래 내역을 저장하고 있는 풀노드(full node)와 데이터 일부만을 처리해 보관하는 라이트 노드(light node)를 분리해 거래 처리 속도를 높이는 방법을 선택하는 블록체인도 있다.[6]

머클트리의 머클루트가 바로 이 라이트 노드와 같은 역할을 해준다. 머클루트값만 알면 최소한의 정보만으로도 필요한 정보를 블록에서 가져올 수 있다. 블록체인 네트워크 용량 중 큰 부분을 차지하고 있는 거래내역을 조회하지 않고 32바이트에 불과한 값 하나로 거래내역 검증을 간편하고 확실하게 할 수 있기 때문에 사양이 낮은 기기들의 네트워크 접근성이 높아지는 동시에 탈중앙화를 통한 네트워크 안정성이 향상된다.[7]

둘째로 모든 거래내역들이 합하여 해시화된 값이 머클루트이기 때문에 하나의 거래내역에 작은 변화가 생기더라도 상위 해시값 모두가 변하게 된다. 따라서 특정 거래 내역을 확인하기 위해 모든 거래내역을 일일이 검사해야 하는 번거로움을 줄일 수 있다.[6] 또한 거래내역을 위변조하려는 잘못된 해시값이 검출되는 경우 네트워크 접속을 거부할 수 있다. 기존 거래 내역 일부에 작은 변화가 있기만 해도 상위 해시값이 모두 변환되기 때문이다.[6] 네트워크의 접근성은 높아졌지만 동시에 보안성도 높아지는 일석이조의 효과가 있다.[7]

각주[편집]

  1. YH, 〈머클 트리 (Merkle Tree), 개념 어렵지 않습니다.〉, 《네이버 블로그》, 2018-10-01
  2. yahweh87, 〈# 4 - 머클트리(Merkle Tree) 및 머클루트(Merkle Root)에 관한 정의〉, 《네이버 블로그》, 2018
  3. easyblockchain, 〈쉽게 설명하는 블록체인 : 머클트리(Merkle Trees)란〉, 《뱅크샐러드》, 2018-07-30
  4. 4.0 4.1 Crocus, 〈머클트리(Merkle Tree)〉, 《블로그》, 2018-04-23
  5. 5.0 5.1 5.2 5.3 에코버스, 〈블록체인상식(17) “머클 트리(Merkle Tree)” - 진위(眞僞)를 판단하는, 작지만 알찬 나무〉, 《네이버 블로그》, 2018-12-24
  6. 6.0 6.1 6.2 윤해리 기자, 〈(코린이 상식백과) 블록체인에는 머클트리가 있다?〉, 《데일리토큰》, 2018-12-03
  7. 7.0 7.1 업비트, 〈암호화폐 필수용어, 머클루트〉, 《일분》, 2018-08-10

참고자료[편집]

같이 보기[편집]


  검수요청.png검수요청.png 이 머클트리 문서는 블록체인 기술에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.