본문 바로가기
INFORMATION SECURITY · FREE LEARNING정보보안 학습센터원리 → MASTER → 문제·복습 → MUST KNOW

해시로 기록을 잇고 합의로 어느 기록을 따를지 정한다

정보보안의 원리 · 방향 4

© K-BOOKS · 무료 웹 열람용 콘텐츠입니다. 무단 복제·저장·인쇄·재배포를 제한합니다.

열네 번째 발걸음해시로 기록을 잇고 합의로 어느 기록을 따를지 정한다

여러 조직이 거래 기록을 함께 관리할 때 한 관리자의 데이터베이스만 믿고 싶지 않을 수 있습니다. 블록체인은 거래를 블록으로 묶고 이전 블록의 해시를 다음 블록에 넣어 연결합니다. 과거 블록의 내용이 바뀌면 그 해시가 달라지고 뒤 블록이 참조한 값과 어긋납니다. 이는 변경을 드러내는 연결 구조입니다. 모든 참여자가 어떤 기록을 유효한 것으로 받아들일지 정하는 합의 규칙은 여기에 별도로 필요합니다.

블록 안의 여러 거래를 묶는 데는 머클 트리를 사용할 수 있습니다. 거래 네 개의 해시를 h1, h2, h3, h4라 하면 h1과 h2를 정해진 형식으로 합쳐 해시하고, h3와 h4도 같은 방식으로 처리한 뒤 두 결과를 합쳐 루트를 만듭니다. 특정 거래가 이 루트에 포함되는지 확인하려면 전체 거래를 받는 대신 해당 경로의 이웃 해시를 이용할 수 있습니다. 실제 형식은 단순 문자열 이어 붙이기의 모호함과 중복 구조를 막도록 규정해야 합니다. 머클 루트 자체가 거래의 경제적 진실이나 참여자의 정직성을 증명하지는 않습니다.

작업 증명 PoW는 정해진 목표를 만족하는 해시를 찾는 데 계산 비용을 들이게 합니다. 후보 블록에 nonce 같은 변경 가능한 값을 넣고 해시를 반복합니다. 목표보다 작은 해시를 찾으면 다른 참여자는 그 한 번의 해시 계산과 블록 규칙 검증으로 작업의 조건을 확인합니다. 해시를 계산하는 것 자체가 어렵다기보다 목표를 만족하는 입력을 예측해 찾기 어려워 반복이 필요한 것입니다. “해독 문제를 풀어 보상을 받는다”는 표현보다 계산과 검증의 비용 차이를 보는 편이 정확합니다.

import hashlib
prefix = b'previous=lab-root;transfer=A-to-B:10;'
found = None
for nonce in range(100000):
    candidate = prefix + str(nonce).encode('ascii')
    digest = hashlib.sha256(candidate).hexdigest()
    if digest.startswith('00'):
        found = (nonce, digest)
        break
if found is None:
    raise RuntimeError('이 탐색 범위에서 찾지 못함')
nonce, digest = found
print(nonce)
print(digest[:32])
print(digest[32:])
check = hashlib.sha256(prefix + str(nonce).encode('ascii')).hexdigest()
print(check.startswith('00') and check == digest)  # True

네트워크·코인·지갑을 사용하지 않는 작은 작업 증명 모형입니다. 실제 비트코인의 블록 형식·이중 SHA-256·목표값 계산을 구현한 코드가 아닙니다.

함께 따라가기 · 찾기는 반복하고 검증은 한 번 한다

위 모형에서 목표는 16진수 해시의 앞 두 글자가 00인 것입니다.

  1. 앞 두 16진수 글자는 8비트이므로 이상적인 결과에서 한 번의 성공 확률은 1/256입니다. 평균 시도 수를 256 정도로 볼 수 있지만 이번 실행이 반드시 256번째에 성공하는 것은 아닙니다.

  2. 찾은 nonce와 블록 후보를 받은 사람은 해시를 다시 계산해 조건과 일치 여부를 확인합니다. 보낸 사람이 사용했다고 주장한 실행 시간이나 시도 횟수를 믿을 필요는 없습니다.

  3. 거래 A-to-B:10을 바꾸면 같은 nonce에서 같은 해시가 나올 이유가 없습니다. 공격자는 바뀐 후보의 작업을 다시 해야 하고, 뒤 블록들의 연결 및 합의 조건도 맞추어야 합니다. 이것이 변경 비용을 높이는 핵심 관계입니다.

깨달음한 번의 해시 일치와 네트워크 전체의 합의는 다른 검증입니다. 이 모형은 비용 관계를 보여 줄 뿐 분산 합의를 구현하지 않습니다.

비트코인과 같은 PoW 체계는 단순히 블록 개수가 가장 많은 사슬이 아니라 유효한 규칙을 만족하며 누적 작업이 큰 사슬을 기준으로 선택합니다. 일시적인 분기와 재조직이 있을 수 있으므로 최근 거래의 확정을 절대적인 불변 상태로 이해하지 않습니다. 충분한 자원을 가진 공격자의 재조직 가능성, 네트워크 분리, 구현 결함도 위협 모델에 들어갑니다. 전자서명은 거래를 승인할 키의 관계를 확인하지만 키 도난이나 거짓 외부 데이터까지 막지 않습니다.

허가형 원장에서는 참여자를 등록하고 투표형 합의나 별도 운영 정책을 사용할 수 있어 모든 블록체인이 PoW를 쓰는 것은 아닙니다. 참여자 집합, 장애·악의 참여자 가정, 합의 기준과 변경 권한을 먼저 확인해야 합니다. 블록체인을 도입해도 누가 장치의 실제 측정값을 보증할지, 잘못 기록된 개인정보를 어떻게 다룰지 같은 문제는 남습니다. 해시 연결과 분산 합의가 어떤 신뢰를 줄였으며 어떤 신뢰를 새로 요구하는지 설명할 수 있어야 합니다.

참고 [160] · [161]

이 브라우저에 학습 기록을 저장합니다.

CONTINUE LEARNING

지금 공부한 흐름을 책으로 이어가세요

무료 학습은 그대로, 종이책은 필요한 분을 위한 선택지입니다.

정보보안 MUST KNOW전체 도서 12권