[블록체인 스터디]머클트리 구조, 검증에 대하여
안녕하세요~ 이댕댕입니다!
블로그에 아무런 댓글이 달리진 않지만 공부하고 있는 것들을 천천히 하나씩 보고 있습니다.
이번에는 [머클트리 구조]에 대해서 알아보겠습니다.
비트코인과 이더리움 블록체인의 구조를 보면, 블록 헤더와 바디로 나뉘는데, 다음과 같은 구성입니다.
블록 헤더에는 전 블록을 가르키는 해시 값, 머클 루트 값, 타임스탬프, 논스 값, nbit 값 등이 저장되고, 블록 바디에는 블록 생성 기간동안 발생된 트랜젝션들이 담겨있습니다.
여기서 머클트리 라는게 나오는 데요! 무엇인지 알기전에! 풀 노드와 라이트노드에 대해서 알아보겠습니다.
풀 노드와 라이트 노드
다음은 비트코인 블록체인 상에 존재하는 노드들의 종류와 그 수를 나타낸 것 인데요
각각의 노드의 역할이 조금씩 다릅니다. 노드 종류에는 크게 풀 노드와 라이트 노드로 나눌 수 있는데요.
풀 노드는 그간 블록체인 위에 있는 모든 데이터들을 본인의 로컬 데이터베이스에 저장하고 업데이트를 하며, 블록체인 상의 모든 기능들을 수행합니다. 지갑, 라우팅, 채굴 기능, 데이터베이스 역할을 하고 있습니다.
라이트 노드(SPV 노드)는 블록의 헤더만 가져와 저장하고 있습니다. 지갑 기능이 있으며 풀 노드처럼 모든 블록체인 상의 데이터를 가지고 있지 않습니다.
왜 이렇게 나눈 걸까요? 블록체인 상의 데이터는 현재 몇 십 기가를 뛰어넘었으며 모든 블록체인 상 위의 데이터를 가지고, 업데이트하고, 여러 기능을 수행하기 위해서는 좋은 성능의 컴퓨터 기기들이 필요할 것입니다.
라이트 노드를 만들어 안드로이드 같은 스마트폰이나 성능이 떨어지는 기기들도 블록체인 네트워크에 쉽게 합류할 수 있게 만든 것 입니다.
라이트노드는 블록 헤더 정보만 가지고 있으므로 거래 검증을 위해서는 풀 노드로부터 정보를 받아와야 합니다. 이 때, 쓰이는 것이 바로 머클 트리입니다.
머클트리란?
위의 사진에서 Merkle Tree 라는 것이 보일텐데요, 각각 발생한 트렌젝션을 각각 해시 알고리즘을 통해 해쉬화를 한 후, 그 것들을 두 개씩 묶어 해시화 합니다. 그렇게 두번 해쉬화 된 것들을 또 두개씩 묶어서 해시화하고, 세번 해쉬화된 것들을 두개씩 묶어서 해쉬화하고...
이렇게 해쉬화를 두개씩 묶어 결국 하나의 해시값, 즉 머클루트를 갖게되는 구조를 머클트리라고 합니다.
밑의 정보 하나라도 바뀌면 가장 꼭대기의 머클 루트 값이 달라진다는 특징으로 인하여 어떤 데이터가 위조된 것이 있는 지 쉽게 확인할 수 있으며, 해당 트렌젝션을 찾는데 N개의 트렌젝션이 있다면 수학적으로 log2N만큼 서칭을 하면 된다는 특징이 있습니다. 즉, 쉽게 위변조를 감지할 수 있습니다.
비트코인 네트워크 작동 과정을 보면, 여러 트렌젝션들을 모아 채굴자가 블록을 만들고 네트워크에 전파하는 과정이 있습니다. 이 때 각 노드들은 해당 블록이 유효한지 확인을 합니다.
그 중, 라이트 노드들도 있겠죠?
우선, 머클트리를 활용하여 머클루트 값이 다르면 블록이 유효하지 않다는 것을 확인할 수 있습니다. 보통은 라이트 노드가 블록 검증은 안한다고 하네요.
그대신, 라이트 노드는 트렌젝션 검증을 합니다.
해당 머클트리가 있습니다. Hk라는 트렌젝션이 수상합니다. 라이트 노드는 Root HABCDEFGHJKLMNOP 라는 머클루트 값만 가지고 있고요.(올바른 값)
Hk라는 트렌젝션이 옳다는 것을 어떻게 확인할 수 있을까요? 머클 트리 구조를 활용하연 H-L, H-IJ, H-MNOP, H-ABCDEFGH 해시 값만 풀 노드를 통해 받아오면 검증할 수 있습니다.
HK와 HL을 해시를 통해 H-KL을 얻습니다. 그 H-KL을 가져온 H-IJ와 해쉬화합니다. 그 후, 계속 해시처리를 하면 결국 하나의 루트값이 나올텐데 이 값이 라이트 노드가 가지고 있는 머클루트값과 같으면 해당 트렌젝션이 많다고 검증할 수 있다는 것입니다.
이렇게, 머클트리에 대해서 알아보았습니다. 비트코인 블록체인을 설계할 때, 정말 많은 것들을 종합하여 설계를 잘했다는 생각이 듭니다. 기존의 경제학, 암호학 등을 활용해서 서로를 신뢰할 수 있는 기술을 만들어 낸 셈이니깐요.
이상, 이댕댕이었습니다!
그럼 이댕댕으로 놀러왕~!
![사본 -7fed16dd8192c5b969afcbc9999b05c7 (1).gif](https://steemitimages.com/0x0/https://steemitimages.com/DQmbqiP6Vgnwcf3n24j8BFHw3qXHbuNsd5niNdhPByoVhjw/%EC%82%AC%EB%B3%B8%20-7fed16dd8192c5b969afcbc9999b05c7%20(1).gif)
Congratulations @dangdang! You have completed some achievement on Steemit and have been rewarded with new badge(s) :
Click on any badge to view your own Board of Honor on SteemitBoard.
To support your work, I also upvoted your post!
For more information about SteemitBoard, click here
If you no longer want to receive notifications, reply to this comment with the word
STOP
짱짱맨 호출에 출동했습니다!!