블록체인 작업증명에서 완화된 해시조건이 작동하는 방식

블록체인 작업증명의 완화된 해시조건, 난이도 타깃과 확률 모델, 검증 비용 비대칭성 및 SHA-1 교육 예시를 정리한다.

2026-08-14 · 최초 발행 2025-10-31

정확 일치가 아니라 임계값을 찾는다

블록체인과 비트코인은 분산·독립·개방된 공통장부를 신뢰 없이 유지하기 위한 기술과 그 대표적인 애플리케이션이다. 이 구조에서 작업증명(Proof of Work)은 해시 함수의 단방향성을 이용해 합의에 필요한 계산 비용을 부과한다.

핵심은 SHA1(X)=Y처럼 특정 해시값과 정확히 일치하는 입력을 찾는 문제가 아니다. 그런 역상 탐색은 실무적으로 불가능에 수렴한다. 대신 SHA1(X) ≤ K처럼 타깃 K 이하의 결과를 찾게 해, 충분한 횟수를 시도하면 성공할 수 있는 확률적 문제로 바꾼다.

  • 블록체인은 합의 프로토콜로 동일한 원장 상태를 유지하는 분산·독립·개방형 공통장부 관리기술이다.
  • 비트코인은 이 공통장부를 거래 기록에 사용하며, 작업증명 기반 합의와 경제적 인센티브로 보안성을 확보한다.
  • 해시 함수는 임의 길이의 입력을 고정 길이 출력으로 사상한다. 정방향 계산은 빠르지만 역상(preimage) 계산은 어려운 단방향 특성이 있다.
  • 실제 비트코인은 SHA-256 두 번(SHA-256d)과 타깃(target) K를 사용한다. 이 글의 SHA-1 표기는 개념 설명 예시다.

타깃이 계산량을 결정하는 구조

해시 출력이 균등 분포한다는 가정에서 조건을 만족할 확률은 p=K/2^n으로 표현할 수 있다. 여기서 n은 해시 비트수다. 성공까지 필요한 기대 시행횟수는 E≈1/p이며, K가 작아질수록 조건은 더 까다로워진다.

블록 헤더에는 이전 블록 해시, 머클 루트, 타임스탬프, 난스/엑스트라난스 등이 들어간다. 채굴자는 이 입력을 바꾸며 해시를 반복 계산하고, 조건을 충족하는 헤더를 찾으면 블록을 전파한다.

생성 비용과 검증 비용은 의도적으로 비대칭이다. 채굴자는 평균 1/p번의 계산을 수행해야 하지만, 검증자는 해시 1회로 조건 충족 여부를 판정한다. 네트워크 전체가 블록을 확인하는 비용을 낮추면서도 블록 생성에는 계산 비용을 요구할 수 있는 이유다.

난이도 조정은 관측된 블록 간격을 목표 블록 간격 T와 비교해 타깃 K를 바꾸는 방식이다. 블록이 너무 빨리 만들어지면 난이도를 올리기 위해 K를 축소하고, 느리면 K를 확대한다. 계산 파워가 변하는 분산 환경에서 블록 생성 간격의 장기 평균을 일정하게 유지하는 장치다.

엄격한 조건과 완화된 조건의 차이

항목 엄격한 해시조건 (SHA1(X)=Y) 완화된 해시조건 (SHA1(X) ≤ K) 실무 영향
달성 가능성 사실상 불가능 확률적 달성 가능 합의 메커니즘 구현 가능성 확보
검증 비용 낮음 낮음 네트워크 검증 효율성 동등 유지
난이도 조정 불가 K로 미세 조정 가능 목표 블록 시간 유지
확장성/병렬성 의미 없음 높음(시도 병렬화 용이) 하드웨어 확장에 적합
안정성(블록 간격) 무의미 통계적 안정성 시스템 운영 예측 가능성 제고

블록 후보가 네트워크에서 검증되기까지

아니오아니오입력: 블록 헤더(이전해시, 머클루트,타임스탬프,난스/엑스트라난스)처리: 해시 계산H = Hash(header)H K?출력: 유효 블록 생성 전파난스/엑스트라난스 증가 또는타임스탬프 갱신네트워크 검증: 1회 재해시로확인유효한 트랜잭션·헤더?체인에 연결거부/고아 블록 처리

타임스탬프 오차가 허용 범위를 넘으면 블록은 거부된다. 더 긴 체인을 수신하면 재조직(Reorg)이 수행되며, 머클 루트 또는 서명이 일치하지 않는 블록도 무효가 된다.

작업증명 조건을 사용하는 곳

비트코인은 SHA-256d와 타깃 K로 블록 평균 생성 간격을 유지하고, 해시 파워 비용을 네트워크 보안에 연결한다.

Hashcash 계열의 스팸 방지와 요율 제한에서는 이메일이나 API 요청에 경량 PoW를 요구한다. 클라이언트가 부담해야 하는 계산 비용으로 남용을 억제하는 방식이다.

사설체인과 테스트넷에서는 낮은 난이도의 K를 설정해 블록을 빠르게 만들고 기능을 검증할 수 있다.

보안성과 운영 예측 가능성

공격자의 해시 파워가 51% 미만이라는 가정에서는 과반 합의를 탈취하거나 체인을 다시 작성하는 비용이 커진다.

유효 선행 0비트 수를 d로 두면 기대 시행횟수는 E=2^d로 성능을 예측할 수 있다. 예를 들어 d=20이면 평균 약 1,048,576번을 시도한다. 난이도 조정은 장기적인 블록 간격을 안정시키고, 노드의 검증 비용은 최소화한다.

해시 함수 선택과 운영상 트레이드오프

해시 함수에는 균등 분포, 전상상/제2전상상 저항성, 충돌 저항성이 요구된다. SHA-1은 충돌 취약성이 있으므로 교육·실험 목적 외에는 권장하지 않는다. 프로덕션에서는 SHA-256d 등을 보수적으로 선택한다.

작업증명은 채굴에는 고비용, 검증에는 저비용이라는 비대칭 구조를 만든다. 이 구조는 보안성을 제공하는 대신 에너지 소비와의 트레이드오프를 수반한다. ASIC 최적화는 채굴 중앙화 가능성을 높일 수 있고, 난이도 조정 주기와 전파 지연은 고아 블록율 및 안정성에 영향을 준다.

SHA-1 기반 완화된 조건 데모

아래 코드는 Python 3.11+와 표준 라이브러리만 사용한다. 실제 비트코인은 SHA-256d를 사용한다.

import hashlib
import os
import time

def sha1_hex(data: bytes) -> str:
    return hashlib.sha1(data).hexdigest()

def meets_target(hex_hash: str, target_prefix_zeros: int) -> bool:
    # 간단화: 16진수 선행 '0' 개수 기준 임계값
    return hex_hash.startswith('0' * target_prefix_zeros)

def pow_search(prefix: bytes, target_prefix_zeros: int, max_tries: int = 5_000_000):
    nonce = 0
    start = time.time()
    while nonce < max_tries:
        msg = prefix + nonce.to_bytes(8, 'big', signed=False)
        h = sha1_hex(msg)
        if meets_target(h, target_prefix_zeros):
            elapsed = time.time() - start
            return nonce, h, elapsed, nonce + 1
        nonce += 1
    return None, None, time.time() - start, max_tries

if __name__ == "__main__":
    prefix = b"demo-header:" + os.urandom(16)
    target_zeros = 6  # 난이도: 선행 0의 개수(예시)
    nonce, h, elapsed, tries = pow_search(prefix, target_zeros)
    if nonce is not None:
        print(f"Success nonce={nonce}, hash={h}, tries={tries}, time={elapsed:.3f}s")
        # 검증자는 단 1회 해시로 확인 가능
        check = sha1_hex(prefix + nonce.to_bytes(8, 'big', signed=False))
        print("Verify:", check == h and meets_target(h, target_zeros))
    else:
        print("Not found within max tries")

16진수 한 자리는 4비트다. 선행 0이 z개이면 대략 d≈4z 비트 난이도로 볼 수 있고, 기대 시행횟수는 ≈ 2^d다.

프로덕션 환경에서는 안전한 해시 함수 선택과 난이도 조정 파라미터 튜닝을 함께 다뤄야 한다. SHA-1 기반 예시는 교육과 프로토타입에서 개념을 확인하는 데 한정하고, 실제 시스템에는 SHA-256d 등 검증된 구성을 적용한다.

블록체인비트코인작업증명해시 함수난이도 조정