1. 블록체인에서 사용되는 암호화 기술인 머클 트리란 무엇인가
머클 트리(Merkle Tree)는 블록에 포함된 거래 내역을 나무 형태로 요약한 암호화 방식입니다. 머클 트리는 블록 내에서 다수의 원장들을 암호화하고 합치는 과정을 반복하여 최종적으로 하나의 유닛으로 암호화합니다. 머클 트리의 형태는 블록을 보유하고 있는 거래 내역들의 해시값을 가장 가까운 거래내역끼리 쌍을 지어 해시화하고 쌍을 지을 수 없을 때까지 해당 과정을 반복하여 완성됩니다. 이 과정을 통해 다수의 데이터를 하나로 묶어 용량을 절약할 수 있습니다.
이 문서에서는 머클 트리의 생성과정과 머클 트리의 구성요소에 대해 적성되어 있습니다.
2. 머클 트리의 생성과정
머클 트리는 머클 루트를 구하기까지 반복하게 되는 과정이 토너먼트 대진표의 모양으로 만들어집니다. 'log2[전체거래내역의수]' 값을 구하면 해시화한 과정의 횟수도 알 수 있기 때문에 머클 트리만 따라가면 특정 거래내역을 쉽게 찾을 수 있습니다.
머클 트리는 트리구조를 형상화하고 암호화하는 과정입니다. 위의 그림을 보면 맨 밑에 위치한 최종 값을 머클 루트, 상부의 값들을 리프라고 칭합니다. 8개 거래에 대한 머클 트리를 예시로 들어보면 그림과 같이 거래에 대한 해시값이 TX1로부터 TX8과 같이 리프가 이어져 있고, 이를 두 개씩 묶어 더한 후 같은 방식으로 진행하여 최종 값인 머클 루트를 얻습니다. 거래가 홀수인 경우, 맨 마지막 거래를 복사하여 거래를 짝수개로 만들어 사용하는 원칙으로 이용되고 있습니다. 이러한 경우를 균형 트리라고 합니다.
머클 트리의 생성과정을 정리해보면 최초 데이터를 SHA256 형태의 해시값으로 변환한 후 가장 가까운 노드 2개를 한쌍으로 묶어 합친 후 그 값을 해시값으로 변환하는 과정을 거치게 됩니다. 2번 과정이 계속 반복되며 하나의 값만 남았을 때까지 이 과정을 지속하게 됩니다. 최종적으로 남은 하나의 블록은 모든 거래를 합친 해시값을 포함하고 있으며 이를 머클 루트라 합니다.
3. 머클 트리의 구성요소
머클 트리는 머클 루트, 머클 경로, SHA-256, 풀 노드와 라이트 노드로 구성됩니다. 머클 루트는 블록이 보유하고 있는 거래 내역들의 해시값을 가장 가까운 거래내역 끼지 쌍을 지어 해시화하고 쌍을 지을 수 없을 때까지 이 과정을 반복했을 때 얻게 되는 값입니다. 이는 블록에 저장되어 있는 모든 거래의 요약본으로 해당 블록에 포함된 거래로부터 생성된 머클 트리의 루트에 대한 해시 정보가 담겨 있습니다. 아무리 거래가 많이 발생하여도 하나로 압축된 머클 루트의 용량은 항상 32바이트입니다. 머클 경로는 어떤 거래의 진위를 따질 때 이를 검정하는 과정을 말합니다. 머클 루트가 주어진다면, 검증 과정이 좀 더 쉬워지게 됩니다. 단방향 암호화 기술인 SHA-256은 머클 트리가 데이터를 간편하고 확실하게 인증하기 위해 사용하는 암호화 기술입니다. 어떠한 수를 암호화하더라도 결과는 16진수 64자입니다. SHA-256의 특징 중 하나가 입력된 값이 조금이라도 다를 경우 결과를 전혀 유추할 수 없고, 입력한 글자의 수와 관계없이 글자의 크기가 항상 64자 라는 것입니다. 거래량과 상관없이 SHA-256을 사용하여 작은 용량으로 유지할 수 있습니다. 마지막으로 풀 노드는 제네시스 블록부터 현재 시점의 형성된 블록이 연결된 블록체인 전체를 유지하는 노드입니다. 그와 대조적으로 라이트 노드는 일부 블록만 소유하고 풀 노드에게서 필요한 정보만을 받아서 유지하는 노드입니다. 머클 트리는 라이트 노드에서 거래를 검증하기 위해 사용됩니다.
4. 머클 트리의 장점
머클 트리는 두 가지 이유로 블록체인의 효용성 향상에 크게 기여합니다. 첫 번째로 특정 거래내역을 증명하기 위해 모든 거래내역을 검색할 필요가 없습니다. 블록체인은 시간이 지날수록 블록체인에 저장된 데이터가 늘어나 용량이 커진다면 거래 처리 속도도 느려질 수밖에 없습니다. 따라서 모든 거래 내역을 저장하고 있는 풀 노드와 데이터 일부만을 처리해 보관하는 라이트 노드를 분리해 거래 처리 속도를 높일 수 있습니다. 둘째로 모든 거래내역들이 합하여 해시화된 값이 머클 루트이기 때문에 하나의 거래내역에 작은 변화가 생기더라도 상위 해시값 모드가 변하게 됩니다. 따라서 특정 거래 내역을 확인하기 위해 모든 거래내역을 일일이 검사해야 하는 번거로움을 줄일 수 있습니다. 또한 거래내역을 위변조 하려는 잘못된 해시값이 검출되는 경우 네트워크 접속을 거부할 수 있습니다. 기존 거래 내역 일부에 작은 변화가 있기만 해도 상위 해시값이 모두 변환되기 때문입니다. 이러한 방법은 네트워크의 접근성은 높아졌지만 동시에 보안성도 높아지는 일석이조의 효과를 볼 수 있습니다.