머클 트리란 무엇입니까? 이 블록체인 구성 요소에 대한 초보자 가이드

머클 트리는 기능을 뒷받침하는 블록체인의 기본 구성 요소입니다. 대규모 데이터 구조와 블록체인의 경우 잠재적으로 무한한 데이터 세트를 효율적이고 안전하게 검증할 수 있습니다.

블록체인에서 머클 트리를 구현하면 여러 가지 효과가 있습니다. 이를 통해 데이터 무결성을 유지하고 데이터 무결성을 확인하는 간단한 방법을 위한 해시 기반 아키텍처를 제공하는 동시에 확장할 수 있습니다.

암호화 해시 함수는 머클 트리가 작동할 수 있는 기반 기술이므로 먼저 암호화 해시 함수가 무엇인지 이해하는 것이 중요합니다.

빠른 평결: 머클 트리는 대규모 데이터 세트의 효율적인 무결성 확인 및 매핑을 가능하게 하는 암호화 해시로 구성된 데이터 구조로, 이를 블록체인 및 분산 버전 제어와 같은 시스템의 필수 구성 요소로 만듭니다.


기본 정보

키 포인트상품 설명
암호화 해시 함수모든 크기의 입력을 받아 고정 길이 해시 값을 출력하는 해시 함수입니다. 머클 트리에 사용됩니다.
머클 트리 구조리프가 아닌 각 노드가 하위 노드의 해시인 트리 데이터 구조입니다. 대규모 데이터 세트를 효율적으로 매핑하고 검증할 수 있습니다.
루트 해시전체 트리의 해시를 나타내는 Merkle 트리 상단의 해시입니다. 전체 데이터 세트에 대한 지문 역할을 합니다.
머클 증명전체 데이터 세트 없이 루트 해시만 있으면 트리에서 데이터 무결성과 위치를 확인할 수 있습니다.
비트코인 구현머클 트리는 트랜잭션을 블록에 저장합니다. 블록 헤더에 저장된 루트 해시를 통해 SPV 노드는 트랜잭션을 확인할 수 있습니다.
기타 블록체인 구현더 복잡한 Merkle Patricia Trees를 사용하는 Ethereum과 같은 많은 블록체인에서 사용됩니다.
분산 시스템Git 및 IPFS와 같은 버전 제어 시스템을 통해 피어 간에 공유되는 데이터를 쉽게 확인할 수 있습니다.

암호화 해시 함수

간단히 말해서, 해시 함수는 임의 크기(입력)의 데이터를 고정 크기 출력에 매핑하는 데 사용되는 함수입니다. 해싱 알고리즘이 데이터 입력에 적용되고 결과 고정 길이 출력을 해시라고 합니다.

많은 해싱 알고리즘은 널리 공개되어 있으며 필요에 따라 선택할 수 있습니다.

임의 입력의 결과 해시는 길이가 고정될 뿐만 아니라 입력에 대해 완전히 고유하며 함수 자체가 결정적입니다. 즉, 동일한 입력에 대해 함수를 몇 번 실행하더라도 출력은 항상 동일합니다.

예를 들어 아래의 데이터 세트가 입력으로 있는 경우 결과 출력은 각 입력에 대해 고유합니다. 두 번째와 세 번째 예에서는 입력의 차이가 단 한 단어임에도 불구하고 결과 출력이 완전히 다른 것을 확인하세요.

이는 데이터의 "지문"을 허용하므로 매우 중요합니다.

암호화 해시 함수, Wikipedia의 이미지

출력(예제에서는 해시 합계) 길이는 사용된 해싱 알고리즘에 의해 결정된 길이와 항상 동일하므로 결과 해시를 통해서만 엄청난 양의 데이터를 식별할 수 있습니다.

막대한 양의 데이터가 포함된 시스템의 경우, 고정 길이 출력으로 데이터를 저장하고 식별할 수 있다는 이점은 막대한 스토리지 절약을 창출하고 효율성을 높이는 데 도움이 될 수 있습니다.

블록체인 내에서는 해싱 알고리즘을 사용하여 블록체인의 상태를 결정합니다.

블록체인은 데이터와 이전 블록을 가리키는 해시 포인터를 포함하는 연결 목록으로, 연결된 블록의 체인을 생성하므로 "블록체인"이라는 이름이 붙었습니다.

각 블록은 이전 블록의 주소와 함께 이전 블록 내부의 데이터에 대한 해시인 해시 포인터를 통해 서로 연결됩니다. 이 형식으로 데이터 블록을 연결하면 이전 블록의 해시된 각 데이터가 블록체인의 전체 상태를 나타냅니다. 이전 블록의 해시된 모든 데이터가 하나의 해시로 해시되기 때문입니다.

이는 SHA-256 알고리즘의 경우 다음과 같은 출력(해시)으로 표현됩니다.

b09a57d476ea01c7f91756adff1d560e579057ac99a28d3f30e259b30ecc9dc7

위의 해시는 이전 블록체인 전체 상태의 지문입니다. 새 블록 이전의 블록체인 상태(해시된 데이터)가 입력이고 결과 해시가 출력입니다.

머클 트리 없이 암호화 해시를 사용할 수 있지만 이는 매우 비효율적이며 확장성이 없습니다. 해시를 사용하여 일련의 형식으로 블록에 데이터를 저장하는 것은 시간이 많이 걸리고 번거롭습니다.

보시다시피 머클 트리는 머클 증명을 사용하여 전체 트리를 통해 해당 데이터를 매핑할 뿐만 아니라 데이터 무결성에 대한 간단한 해결을 허용합니다.


머클 트리와 머클 증명

1979년에 이 개념에 대해 특허를 낸 Ralph Merkle의 이름을 딴 Merkle 트리는 근본적으로 각 리프가 아닌 노드가 해당 하위 노드의 해시인 데이터 구조 트리입니다.

리프 노드는 트리에서 가장 낮은 계층의 노드입니다. 처음에는 이해하기 어려울 수도 있지만, 아래에서 일반적으로 사용되는 그림을 보면 훨씬 이해하기 쉬울 것입니다.

해시 트리

바이너리 해시 트리의 예, Wikipedia의 이미지

중요한 것은 왼쪽의 리프가 아닌 노드 또는 "분기"(해시 0-0 및 해시 0-1로 표시됨)가 어떻게 해당 하위 L1 및 L2의 해시인지 확인하는 것입니다. 또한 분기 Hash 0이 어떻게 연결된 하위 분기, Hash 0-0 및 Hash 0-1의 해시인지 확인하세요.

위의 예는 이진 머클 트리(Binary Merkle Tree)로 알려진 가장 일반적이고 간단한 형태의 머클 트리입니다. 보시다시피 루트 해시라고 알려진 전체 트리의 해시인 상위 해시가 있습니다. 기본적으로 머클 트리는 "n"개의 해시를 가져와 단일 해시로 표현할 수 있는 데이터 구조입니다.

트리 구조를 통해 임의로 대량의 데이터를 효율적으로 매핑할 수 있으며 해당 데이터의 변경 사항이 발생한 위치를 쉽게 식별할 수 있습니다. 이 개념은 머클 증명을 가능하게 하며, 이를 통해 누군가는 전체 해시 세트를 실제로 볼 필요 없이 데이터 해싱이 트리 전체에서 올바른 위치에 일관성이 있는지 확인할 수 있습니다.

대신 전체 데이터 세트가 아닌 해시의 작은 하위 집합만 확인하여 데이터 청크가 루트 해시와 일치하는지 확인할 수 있습니다.

루트 해시가 공개적으로 알려지고 신뢰할 수 있는 한, 데이터베이스에서 키-값 조회를 원하는 사람은 누구나 Merkle 증명을 사용하여 데이터베이스 내 데이터의 위치와 무결성을 확인할 수 있습니다. 특정 루트.

루트 해시를 사용할 수 있으면 신뢰할 수 없는 소스로부터 해시 트리를 수신할 수 있으며, 전체 트리를 아직 사용할 수 없더라도 데이터 무결성을 즉시 확인하면서 트리의 한 분기를 한 번에 다운로드할 수 있습니다.

머클 트리 구조의 가장 중요한 이점 중 하나는 훨씬 적은 양의 데이터를 확인하는 데 사용되는 유사한 해싱 메커니즘을 통해 임의로 큰 데이터 세트를 인증할 수 있다는 것입니다.

트리는 전체적으로 더 큰 데이터 크기에도 불구하고 무결성 확인에 대한 장벽이 실질적으로 감소되는 관리 가능한 작은 부분으로 대규모 데이터 세트를 배포하는 데 유리합니다.

루트 해시는 전체 데이터베이스를 포함하거나 블록체인의 전체 상태를 나타내는 전체 데이터 세트의 지문으로 사용될 수 있습니다. 다음 섹션에서는 비트코인과 기타 시스템이 머클 트리를 구현하는 방법에 대해 설명합니다.


비트코인의 머클 트리

비트코인이 사용하는 암호화 해시 함수는 SHA-256 알고리즘입니다. 이는 “Secure Hashing Algorithm”을 의미하며 출력 길이는 256비트로 고정됩니다. 비트코인의 머클 트리의 기본 기능은 모든 블록의 트랜잭션을 저장하고 결국 정리하는 것입니다.

앞서 언급했듯이 블록체인의 블록은 이전 블록의 해시를 통해 연결됩니다. 비트코인에서 각 블록에는 해당 블록 내의 모든 거래와 다음으로 구성된 블록 헤더가 포함됩니다.

  • 블록 버전 번호
  • 이전 블록 해시
  • 시간 기록
  • 채굴 난이도 목표
  • 논스
  • 머클 루트 해시

아래 이미지는 비트코인 ​​백서에서 가져온 것이며 머클 트리가 각 블록에 어떻게 적용되는지 보여줍니다.

머클 나무

거래는 채굴자에 의해 블록에 포함되고 Merkle 트리의 일부로 해시되어 블록 헤더에 저장된 Merkle 루트로 연결됩니다. 이 디자인에는 여러 가지 뚜렷한 이점이 있습니다.

가장 주목할 만한 점은 백서에 설명된 대로 이를 통해 "경량 클라이언트"라고도 알려진 SPV(Simple Payment Verification) 노드의 존재가 가능하다는 것입니다. 이러한 노드는 전체 비트코인 ​​블록체인을 다운로드할 필요가 없으며 가장 긴 체인의 블록 헤더만 다운로드할 수 있습니다.

SPV 노드는 자신이 운영 중인 저장된 블록 헤더가 가장 긴 체인의 일부라는 것을 확신할 때까지 피어 노드에 쿼리하여 이를 달성할 수 있습니다. 그런 다음 SPV 노드는 Merkle 증명을 사용하여 가장 긴 체인의 일부인 블록 헤더에 해당 Merkle 트리의 루트 해시가 있는 특정 Merkle 트리에 트랜잭션을 매핑함으로써 트랜잭션 상태를 확인할 수 있습니다.

또한 비트코인의 머클 트리 구현을 통해 공간을 절약하기 위해 블록체인을 정리할 수 있습니다. 이는 블록 헤더에 루트 해시만 저장되어 있기 때문에 Merkle 증명에 필요한 부분만 보존하면서 Merkle 트리의 불필요한 가지를 제거하여 오래된 블록을 정리할 수 있습니다.


다른 블록체인 및 시스템에서 머클 트리 구현

비트코인은 머클 트리를 구현한 최초의 블록체인이지만, 다른 많은 블록체인도 유사한 머클 트리 구조 또는 훨씬 더 복잡한 버전을 구현합니다.

또한 머클 트리 구현은 블록체인에만 국한되지 않고 다양한 시스템에 적용됩니다.

또 다른 가장 잘 알려진 암호화폐인 이더리움은 다른 머클 트리 구현의 좋은 예이기도 합니다. Ethereum은 훨씬 더 복잡한 애플리케이션을 구축하기 위한 플랫폼으로서 튜링 완전하기 때문에 실제로 세 가지 유형의 객체에 사용되는 3개의 별도 Merkle 트리인 Merkle Patricia Tree라고 하는 더 복잡한 버전의 Merkle 트리를 사용합니다. 여기에서 이 나무에 대해 자세히 알아볼 수 있습니다.

마지막으로 Merkle Tree는 Git, IPFS와 같은 분산 버전 관리 시스템의 중요한 구성 요소입니다. P2P 형식으로 컴퓨터 간에 공유되는 데이터의 무결성을 쉽게 보장하고 검증하는 기능은 이러한 시스템에 매우 귀중한 요소입니다.


결론

머클 트리는 블록체인의 필수 구성 요소이며 입증 가능한 불변성과 트랜잭션 무결성을 바탕으로 효과적으로 기능할 수 있도록 해줍니다.

분산 네트워크에서 수행하는 역할과 암호화 해시 함수의 기본 기술을 이해하는 것은 암호화폐가 더 크고 복잡한 시스템으로 계속 발전함에 따라 암호화폐 내의 기본 개념을 이해하는 데 중요합니다.

출처: https://blockonomi.com/merkle-tree/