에듀테크 프로젝트 대시보드
작업 증명 (Proof of Work)
블록체인에서 새 블록을 추가하려면 정답을 맞히는 게 아니라 컴퓨터를 오래 돌려야 한다.
블록 내용에 숫자 하나(nonce)를 바꿔 붙여 가며 SHA-256 해시를 계산하고,
그 결과가 맨 앞에 0이 여러 개 나올 때까지 반복한다. 이 "노가다"의 증거가 바로 작업 증명이다.
해시는 한 글자만 바뀌어도 완전히 달라지므로, 예전 블록을 조작하면 그 뒤 모든 블록을 다시 채굴해야 한다.
입력을 한 글자만 바꿔 보자. 출력 해시가 앞뒤 상관없이 전부 뒤집힌다(눈사태 효과 / avalanche). 그래서 해시값만 보고 원래 입력을 되돌리거나, 원하는 해시가 나오는 입력을 "계산"할 방법이 없다 — 오직 무작위로 시도해 볼 수 있을 뿐이다.
난이도를 1 올릴 때마다 평균 시도 횟수가 약 16배(16진수라 자리당 16배)로 늘어난다. 실제 비트코인은 0이 19개 넘게 필요해서, 전 세계 채굴기가 10분에 겨우 하나를 찾는다.
어느 블록이든 데이터를 수정해 보자. 그 블록의 해시가 난이도 조건을 잃으면서 빨강이 되고,
다음 블록의 이전 해시와도 어긋나 연쇄적으로 무너진다.
공격자가 과거를 조작하려면 그 뒤 모든 블록을 혼자서 다시 채굴해 정직한 네트워크보다 빨라야 한다 —
사실상 불가능하다.
# 난이도 = 앞에 와야 하는 0의 개수 def mine(block_data, prev_hash, difficulty): target = "0" * difficulty nonce = 0 while True: text = block_data + prev_hash + str(nonce) h = sha256(text) if h.startswith(target): return nonce, h # 작업 증명 완성 nonce += 1 # 계속 다른 숫자로 재시도 # 검증은 딱 1번의 해시로 끝난다 — 만들기는 어렵고 확인은 쉽다 def verify(block, difficulty): h = sha256(block.data + block.prev_hash + str(block.nonce)) return h == block.hash and h.startswith("0" * difficulty)
답을 찾기는 어렵고 맞는지 확인은 순식간. 이 비대칭이 신뢰의 근거다.
블록에 붙이는 의미 없는 카운터. 조건을 만족하는 해시가 나올 때까지 1씩 늘린다.
0의 개수(target)를 바꿔 블록 생성 속도를 일정하게 유지. +1이면 약 16배 더 오래.
각 블록이 이전 블록 해시를 품는다. 과거 변조 → 이후 전부 무효 → 재채굴 필요.
정직한 네트워크보다 빠르게 재채굴할 연산력(과반)이 있어야만 역사를 바꿀 수 있다.
보안을 전기·연산으로 사는 구조. 그래서 PoS 등 대안이 등장했다.