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

머클루트

위키원
ko7890 (토론 | 기여)님의 2019년 8월 6일 (화) 14:38 판
이동: 둘러보기, 검색

머클루트(merkle root)란 블록에 저장되어 있는 모든 거래의 요약본으로 해당 블록에 포함된 거래로부터 생성된 머클트리의 루트에 대한 해시를 말한다.

개요

머클트리머클루트

머클루트는 블록이 보유하고 있는 거래 내역들의 해시값을 가장 가까운 거래내역끼리 쌍을 지어 해시화하고 쌍을 지을 수 없을 때까지 이 과정을 반복했을 때 얻게 되는 값이다. 더 자세한 머클루트의 생성 과정은 다음과 같다.[1]

  1. 최초 데이터SHA256 형태의 해시값으로 변환한다.
  2. 가장 가까운 노드 두 개를 한 쌍으로 묶어 합친 후 해시값으로 변환한다.
  3. 계속해서 해시값으로 변환하여 마지막 하나가 남을 때까지 이 과정을 반복한다.[2]

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

장점

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

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

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

문제점

블록에 포함돨 트랜잭션들의 머클루트를 계산하여 블록 헤더에 넣고 블록을 생성한다. 다른 풀 노드들은 블록 헤더의 머클루트가 스스로 계산한 머클 루트와 같은지 비교하여 해당 블록의 유효성을 검사합니다. 머클루트는 세부적인 구현에서 약간씩 차이가 나는데, 각 라운드의 해시가 홀수 개이면 마지막 해시를 한 번 중복해서 넣는 방식으로 짝수로 만들고 계산한다. 일례로 1 2 3 해시의 머클루트를 계산하기 위해서는 1 2 해시를 합쳐서 A를 만들고 남은 해시가 홀수 개니 3을 하나 더 추가해서 3 3 해시를 합쳐서 B를 만드는 방식이다. 그런 다음 A B를 합쳐서 해시를 계산하면 머클루트가 나온다. 그런데 이런 방식으로 머클루트를 만들면 트랙잰션을 중복해서 넣는 방식으로 머클루트가 같은 브록을 쉽게 만들어 낼 수 있는 문제가 있다. 예를 들어 1 2 3 4 5 6 해시의 머클루트가 A라고 하면 5 6 해시를 중복해서 한 번 더 넣은 1 2 3 4 5 6 5 6의 머클루트도 A가 됩니다. 다음 라운드에서 F가 하나인 것과 F가 두 개인 것이 해시 값이 C로 동일하기 때문이다. 누군가가 고의로 머클루트는 같지만 validation이 실패하는 블록을 고의로 보내게 되면, 이 블록을 받은 노드는 이후 정상적인 블록을 invalid하다고 판단하게 되므로 심각한 Dos공격이 가능하다. [5]

각주

  1. 1.0 1.1 1.2 업비트, 〈암호화폐 필수용어, 머클루트〉, 《일분》, 2018-08-10
  2. yahweh87, 〈# 4 – 머클트리(Merkle Tree) 및 머클루트(Merkle Root)에 관한 정의〉, 《스팀잇》
  3. easyblockchain, 〈쉽게 설명하는 블록체인 : 머클트리(Merkle Trees)란〉, 《뱅크샐러드》, 2018-07-30
  4. 4.0 4.1 4.2 윤해리 기자, 〈(코린이 상식백과) 블록체인에는 머클트리가 있다?〉, 《데일리토큰》, 2018-12-03
  5. 이안, 〈비트코인 머클 트리 알고리즘의 취약점과 우회방안.〉, 《네이버 블로그》 2017-11-30

참고자료

같이 보기

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