머클 트리(Merkle Tree)는 블록체인 및 분산 시스템에서 데이터 무결성을 검증하는 데 사용되는 해시 트리(Hash Tree)의 한 종류입니다.
머클 트리는 리프(leaf) 노드에 원본 데이터의 해시 값을 저장하고, 상위 노드(parent node)는 하위 두 개 노드의 해시 값을 다시 해시한 값을 저장하는 방식으로 구성됩니다. 최상위 루트 노드(Merkle Root)는 전체 데이터 세트의 해시를 대표합니다.
Merkle Root
/ \
HashAB HashCD
/ \ / \
HashA HashB HashC HashD
다음은 머클 트리(Merkle Tree)의 간단한 Python 구현 코드입니다. 이 코드에서는 SHA-256 해시 함수를 사용하여 머클 트리를 생성하고, 루트 해시 값을 계산하는 과정을 보여줍니다. 또한 특정 데이터가 트리에 포함되어 있는지 검증하는 기능도 포함합니다.
hash_data
: 데이터를 SHA-256 해시로 변환합니다.build_tree
: 리프 노드에서 시작해 재귀적으로 머클 트리를 생성하고, 최종적으로 루트 해시를 반환합니다.get_root
: 머클 루트 해시 값을 반환합니다.verify_proof
: 특정 데이터가 머클 트리에 존재하는지 확인합니다.import hashlib
class MerkleTree:
def __init__(self, data_list):
"""
머클 트리를 초기화하고 루트 해시를 생성합니다.
:param data_list: 원본 데이터 리스트 (리프 노드)
"""
self.leaves = [self.hash_data(data) for data in data_list]
self.root = self.build_tree(self.leaves)
def hash_data(self, data):
"""SHA-256 해시 생성"""
return hashlib.sha256(data.encode()).hexdigest()
def build_tree(self, nodes):
"""머클 트리를 구축하고 루트 해시 값을 반환합니다."""
if len(nodes) == 1:
return nodes[0] # 루트 노드
if len(nodes) % 2 == 1:
nodes.append(nodes[-1]) # 노드 개수가 홀수이면 마지막 노드를 복제
parent_nodes = []
for i in range(0, len(nodes), 2):
combined_hash = self.hash_data(nodes[i] + nodes[i+1])
parent_nodes.append(combined_hash)
return self.build_tree(parent_nodes)
def get_root(self):
"""머클 루트 반환"""
return self.root
def verify_proof(self, target_data):
"""
특정 데이터가 머클 트리에 존재하는지 검증
:param target_data: 검증할 데이터
:return: 존재 여부 (True/False)
"""
target_hash = self.hash_data(target_data)
return target_hash in self.leaves
# 테스트용 데이터 리스트
data_list = ["apple", "banana", "cherry", "date"]
# 머클 트리 생성
merkle_tree = MerkleTree(data_list)
# 머클 루트 출력
print("Merkle Root:", merkle_tree.get_root())
# 특정 데이터 검증
print("Is 'apple' in Merkle Tree?", merkle_tree.verify_proof("apple"))
print("Is 'grape' in Merkle Tree?", merkle_tree.verify_proof("grape"))
Merkle Root: a3c8f8f7b5d9c2d8b7b9b5c1b6f9a3c...
Is 'apple' in Merkle Tree? True
Is 'grape' in Merkle Tree? False
윈도우 운영체제의 노트북에서는 iPhone 유선 테더링이 잘 안되는 경우가 많습니다. 보통 iPhone의 드라이버가 설치가 안되있어서인…
안녕하세요, 혹시 이런 생각해 본 적 없으신가요? "내가 투자한 회사는 누가 감시하고, 어떻게 운영될까?" 오늘은…
1. Gemini CLI란 무엇인가요? Gemini CLI는 터미널 환경에서 직접 Gemini 모델과 상호작용할 수 있도록 만들어진…
과적합은 머신러닝에서 학습용데이터를 과하게 학습하여, 실제데이터를 예측하지 못하는 현상을 말합니다. 인공지능(AI)의 학습 방법은 우리가 시험공부를…