머클트리 편집하기
최신판 | 당신의 편집 | ||
1번째 줄: | 1번째 줄: | ||
− | '''[[머클트리]]'''( | + | '''[[머클트리]]'''(Markle Tree)<!--머클 트리-->는 '''[[해시트리]]'''(Hash Tree)라고도 불리며 1979년 랄프 머클(Ralph Merkle)에 의해 개발되었다. 블록 내에서 다수의 원장을 암호화하고 합치는 과정을 반복하여 최종적으로 하나의 유닛(Unit)으로 암호화하는 방법이다.<ref>YH, 〈[https://blog.naver.com/yunho85/221368892105 머클 트리 (Merkle Tree), 개념 어렵지 않습니다.]〉, 《네이버 블로그》, 2018-10-01</ref> |
== 개요 == | == 개요 == | ||
− | 머클트리는 | + | 머클트리는 [[트랜잭션]]들의 정보들을 담고 있어 변동여부를 확인하고 [[머클루트]]만 해더에 담아서 트랜잭션들의 유효성을 보장한다. 그뿐만 아니라 [[머클 경로]](Merkle Path)을 제공받아 특정한 트랙잭션이 블록에 유효하게 있는 효율적인 검사가 가능하다. 머클트리는 모든 정보를 압축하여 간단하게 표현한 데이터이다. 머클트리의 목적은 빠른 검색이 아니라 데이터의 간편하고 확실한 인증이다.<ref>yahweh87, 〈[https://steemit.com/kr/@yahweh87/4-merkle-tree-merkle-root # 4 - 머클트리(Merkle Tree) 및 머클루트(Merkle Root)에 관한 정의]〉, 《네이버 블로그》, 2018</ref> |
− | |||
− | |||
== 특징 == | == 특징 == | ||
11번째 줄: | 9번째 줄: | ||
=== 생성 과정 === | === 생성 과정 === | ||
− | 머클트리는 머클루트를 구하기 까지 반복하게 되는 과정이 토너먼트 대진표의 모양으로 만들어진다. ‘log₂[전체거래내역의수]’값을 구하면 해시화한 과정의 횟수도 알 수 있기 때문에 머클트리만 따라가면 특정 거래내역을 쉽게 찾을 수 있다. 머클트리는 트리구조를 형성하고 있는 암호화 과정이다. 우측 그림을 보면, 맨 밑에 위치한 최종 값을 머클루트, 상부의 값들을 | + | 머클트리는 머클루트를 구하기 까지 반복하게 되는 과정이 토너먼트 대진표의 모양으로 만들어진다. ‘log₂[전체거래내역의수]’값을 구하면 해시화한 과정의 횟수도 알 수 있기 때문에 머클트리만 따라가면 특정 거래내역을 쉽게 찾을 수 있다. 머클트리는 트리구조를 형성하고 있는 암호화 과정이다. 우측 그림을 보면, 맨 밑에 위치한 최종 값을 머클루트, 상부의 값들을 리프라고 칭한다. 8개 거래에 대한 머클트리를 예시로 들어보면 그림과 같이 거래에 대한 해시값이 TX1부터 TX8과 같이 리프가 이어져 있고, 이를 두 개씩 묶어 더한 후 같은 방식으로 진행하여 최종 값인 머클루트를 얻는다. 거래가 홀수인 경우, 맨 마지막 거래를 복사하여 거래를 짝수개로 만들어 사용하는 원칙으로 이용되고 있다. 이러한 경우를 [[균형트리]](balanced tree)라고 한다.<ref>easyblockchain, 〈[https://banksalad.com/contents/%EC%89%BD%EA%B2%8C-%EC%84%A4%EB%AA%85%ED%95%98%EB%8A%94-%EB%B8%94%EB%A1%9D%EC%B2%B4%EC%9D%B8-%EB%A8%B8%ED%81%B4%ED%8A%B8%EB%A6%AC-Merkle-Trees-%EB%9E%80-ilULl 쉽게 설명하는 블록체인 : 머클트리(Merkle Trees)란]〉, 《뱅크샐러드》, 2018-07-30</ref> 머클트리의 생성 과정은 다음과 같다. |
# 최초 데이터를 SHA256형태의 해시값으로 변환한다. | # 최초 데이터를 SHA256형태의 해시값으로 변환한다. | ||
# 가장 가까운 노드 2개를 한쌍으로 묶어 합친 후 그 값을 해시값으로 변환한다. | # 가장 가까운 노드 2개를 한쌍으로 묶어 합친 후 그 값을 해시값으로 변환한다. | ||
− | # 하나가 남을때까지 2번 과정을 계속 반복되며 하나의 값만 | + | # 하나가 남을때까지 2번 과정을 계속 반복되며 하나의 값만 남았을때 모든 과정이 끝나게 된다.<ref name="크로코스">Crocus, 〈[https://www.crocus.co.kr/1238 머클트리(Merkle Tree)]〉, 《블로그》, 2018-04-23</ref> |
− | |||
=== 구성요소 === | === 구성요소 === | ||
25번째 줄: | 22번째 줄: | ||
* '''SHA-256 암호화''' : 단방향 암호화 기술인 [[SHA-256]]은 머클트리가 데이터를 간편하고 확실하게 인증하기 위해 사용하는 암호화 기술이다. 어떠한 수를 암호화하더라도 결과는 16진수 64자이다. [[SHA-256]]의 특징 중 하나가 입력된 값이 조금이라도 다를 경우 결과를 전혀 유추할 수 없고, 입력한 글자의 수와 관계없이 결과의 크기가 항상 64자라는 것이다. 거래량의 상관없이 [[SHA-256]]를 사용하여 작은 용량으로 유지할 수 있다.<ref name="에코버스"></ref> | * '''SHA-256 암호화''' : 단방향 암호화 기술인 [[SHA-256]]은 머클트리가 데이터를 간편하고 확실하게 인증하기 위해 사용하는 암호화 기술이다. 어떠한 수를 암호화하더라도 결과는 16진수 64자이다. [[SHA-256]]의 특징 중 하나가 입력된 값이 조금이라도 다를 경우 결과를 전혀 유추할 수 없고, 입력한 글자의 수와 관계없이 결과의 크기가 항상 64자라는 것이다. 거래량의 상관없이 [[SHA-256]]를 사용하여 작은 용량으로 유지할 수 있다.<ref name="에코버스"></ref> | ||
− | * '''풀 노드와 라이트 노드''' : [[풀 노드]](full node)는 제네시스 블록부터 현재 시점의 형성된 블록이 연결된 블록체인 전체를 유지하는 노드이다. 그와 대조적으로 [[라이트 노드]](Light node)는 일부 블록만 소유하고 풀 노드에게서 필요한 정보만을 받아서 유지하는 노드이다.<ref name="에코버스"></ref> | + | * '''풀 노드와 라이트 노드''' : [[풀 노드]](full node)는 제네시스 블록부터 현재 시점의 형성된 블록이 연결된 블록체인 전체를 유지하는 노드이다. 그와 대조적으로 [[라이트 노드]](Light node)는 일부 블록만 소유하고 풀 노드에게서 필요한 정보만을 받아서 유지하는 노드이다.<ref name="에코버스"></ref> |
=== 필요성 === | === 필요성 === | ||
53번째 줄: | 50번째 줄: | ||
* [[머클경로]] | * [[머클경로]] | ||
− | {{블록체인 기술| | + | {{블록체인 기술|토막글}} |