본문 바로가기

알기쉬운 블록체인

블록체인 머클트리 (Merkle Trees)

 

블록체인 머클트리 (Merkle Trees)


지난 시간에 이어 블록의 구성요소 중 머클트리에 대해 알아본다.


블록은 블록의 정체성을 띄는 데이터를 가진 블록 헤더와

해당 블록에 거래 개수를 알려주는 거래 카운터, 가장 많은 공간을 차지하는 거래 목록들이 있다.


지난 시간 블록은 데이터를 저장하는 단위이며 바디와 헤더로 구분되며

바디에는 거래 내용이, 헤더에는 머클해시(머클루트)나 넌스 등 암호코드가 담겨 있다고 언급했다.


블록헤더는 3가지 구성으로 나눌 수 있다.


첫째는 이전 블록과 현재블록이 연결되어 있음을 나타내는 이전블록 해시값을 포함한다는 부분이다.

둘째는 난이도와 타임스탬프, 넌스 등 암호코드가 있다.

채굴자들이 연산을 통해 블록을 채굴하는 것과 연관 있는 사항들이다.

세번째는 머클루트 (Merkle Root)다.

 


머클루트 (Merkle Root)란 무엇일까.


머클루트란 머클트리의 뿌리 부분에 해당된다.

블록 헤더에 해당블록의 모든 거래 내역을 요약하여 작은 사이즈 용량으로 존재하는 데이터이다.


여기서 드는 의문은 이것이다.

블록 하나에는 모든 거래 내역을 가진다. 그런데 왜 요약본을 또 가졌을까?

이것은 머클 트리를 알아야한다.  

머클루트가 헤더에 포함되는 이유를 말이다.


머클루트는 어떻게 만들까?


첫째, 최초 데이터를 SHA256형태의 해시값으로 변환한다.  

둘째, 가장 가까운 노드 2개를 묶어 합친후 해시값으로 변환한다.

셋째 계속 해시값으로 변환하여 마지막 하나가 남을 때까지 이 과정을 반복한다.

(최종적으로 하나 남은 노드값이 머클루트 결과값이 된다.)


머클트리는 나무를 뒤집어 놓은 모양과 비슷하다.


다시 말해, 가장 하위에는 수백개의 거래값들이 있는데,

이렇게 묶은 값들이 두개씩 묶어 해싱하여 SHA256알고리즘을 통해 가장 꼭대기에는 하나의 데이터로 만든다.

이와같이 두개씩 묶는 방식을 이진트리 방식이라고 한다.

이 때, 거래가 수십개든 몇 천개든 요약된 머클 루트의 용량은 32바이트로 항상 같다.  

이렇게 두개씩 묶어서 올라가면 좋은 점이 거래량이 기하급수적으로 늘어나도 특정 거래를 찾는 경로가 쉽다는 것이다.


거래 건수인 N이 증가할 때마다 특정 거래의 경로를 찾는 경우의 수는

해싱이 되는 과정, 경로만 찾아가는 연산을 통해 거래를 빠르게 찾을 수 있다.


그렇기 때문에 거래 내역을 위조하려는 시도가 있어도

머클 트리의 경로를 따라가면 위조가 된다면 해시 값이 다른 것이 나오므로 거래가 위변조 되었는지 알 수 있다.

머클루트 결과값을 통해 블록 해시 정보가 구성됨으로 그 블록의 유효성을 검사할 수 있다.



시간이 갈수록 블록체인의 용량이 늘어나도

머클트리의 이진트리 방식은 쉽고 빠르게 특정 거래를 찾도록 해준다.

머클트리가 블록에서 맡은 역할은 빠른 검색 뿐 아니라

데이터의 간편하고 확실한 인증을 위해 사용된다.

이것이 블록 하나엔 모든 거래내역이 담기나 요약본을 가지는 또 다른 이유가 된다.