블록체인과 분산 원장
믿을 주체 없이 여러 참여자가 하나의 장부에 합의하는 방법을 해시를 직접 계산해 가며 따라간다. 해시 사슬과 머클 트리, 작업 증명과 지분 증명, 포크와 51% 공격, 스마트 컨트랙트의 함정, 확장성과 키 관리, 그리고 블록체인이 필요 없는 경우까지를 기술과 한계 중심으로 정리한다.
목차 (13)
이 노트는 기술의 원리와 한계만 다룬다. 투자 조언이 아니다. 특정 코인이나 서비스를 권하지 않고 가격도 이야기하지 않는다. 합의 알고리즘 일반(Raft·Paxos, 비잔틴 장애)은 분산 시스템 노트, 해시와 서명의 수학은 암호학 노트에 있다. 그림 속 해시는 모두 빌드할 때 SHA-256으로 실제로 계산한 값이다. 블록 구조는 원리를 보이려고 단순화했다.
어떤 문제를 푸나
디지털 데이터는 복사된다. 전자 화폐에서 이것은 같은 돈을 두 사람에게 보내는 이중 지불(double spending) 문제가 된다. 은행은 장부를 하나만 두고 순서를 정해 이 문제를 푼다. 비트코인 논문(2008)의 질문은 "그 믿을 주체 없이, 서로 모르는 참여자들이 거래 순서 하나에 합의할 수 있는가"였다.
누구나 참여할 수 있는 네트워크에서는 가짜 신원을 무한히 만드는 시빌(Sybil) 공격 때문에 "참여자 다수결"이 통하지 않는다. 그래서 투표권을 머릿수가 아니라 쉽게 위조할 수 없는 자원, 곧 계산량(작업 증명)이나 예치한 자산(지분 증명)에 묶는다. 블록체인은 이 합의 규칙과, 지난 기록을 고치기 어렵게 만드는 해시 사슬의 조합이다.
해시 사슬: 하나를 고치면 뒤가 모두 깨진다
블록은 거래 묶음과 함께 앞 블록의 해시를 품는다. 해시 함수는 입력이 한 글자만 바뀌어도 출력이 완전히 달라지므로, 가운데 블록을 고치면 그 블록의 해시가 바뀌고, 다음 블록에 적힌 "앞 해시"와 어긋나고, 그것을 고치면 또 다음 블록이 어긋난다. 직접 넘겨 보자.
정상 사슬: 블록마다 앞 블록의 해시를 품고 있어 모두 검증을 통과한다
해시 사슬만으로는 위조를 막지 못한다. 뒤 블록을 모두 다시 계산하는 데 드는 비용이 0에 가깝다면 위조자는 그냥 다시 계산하면 된다. 사슬이 안전해지는 것은 블록 하나를 만드는 데 큰 비용이 들게 하는 합의 규칙(다음 절들)이 붙을 때다. 해시 사슬이 주는 것은 "어디가 고쳐졌는지 바로 드러난다"는 성질, 곧 변조 탐지다.
머클 트리와 포함 증명
블록에는 거래가 수천 개 들어가지만 헤더에는 해시 하나, 머클 루트만 적는다. 거래 해시를 둘씩 이어 붙여 다시 해시하기를 하나가 남을 때까지 되풀이한 값이다. 거래가 홀수 개면 비트코인은 마지막 해시를 복제해 짝을 맞춘다(Bitcoin Developer Guide).
이 성질 덕분에 전체 블록을 받지 않고 헤더만 들고 있는 가벼운 클라이언트도 "내 거래가 이 블록에 있다"를 확인할 수 있다. 비트코인 논문은 이것을 단순 결제 검증(SPV)이라 불렀다. 머클 트리는 블록체인 전용 기술이 아니다. 인증서 투명성 로그(RFC 6962), Git, 파일 시스템의 무결성 검사도 같은 구조를 쓴다. RFC 6962는 잎과 내부 노드를 해시할 때 앞에 서로 다른 바이트(0x00, 0x01)를 붙여, 내부 노드를 잎으로 위장하는 두 번째 원상 공격을 막는다. 이 그림의 단순한 구성에는 그런 구분이 없다.
작업 증명과 난이도 조정
작업 증명(proof of work)은 블록 헤더의 해시가 어떤 목표값보다 작아지도록, 곧 앞자리가 0으로 시작하도록 논스(nonce)를 찾는 일이다. 해시는 예측할 수 없으니 하나씩 해 보는 수밖에 없고, 찾은 답은 다른 사람이 해시 한 번으로 확인한다. 만들기는 비싸고 확인은 싸다는 비대칭이 핵심이다.
논스 0: 해시가 b로 시작해 실패. 논스를 1 올려 다시 해시한다
16진 0 하나는 평균 16번이면 되지만, 0이 다섯 개면 평균 1,048,576번이다. 실제 네트워크의 난이도는 이보다 훨씬 높다. 참여하는 계산량이 늘면 블록이 빨리 나오므로 난이도를 주기적으로 다시 맞춘다. 비트코인은 2,016블록마다 실제 걸린 시간을 목표 2주(블록당 약 10분)와 비교해 난이도를 바꾸고, 한 번에 최대 4배 오르거나 4분의 1로 내린다. 예를 들어 2,016블록이 1주 만에 나왔다면 난이도는 2배가 된다.
작업 증명 사슬에서는 계산량이 가장 많이 쌓인 사슬(흔히 "가장 긴 사슬")을 정답으로 본다. 앞 절의 위조자가 블록을 고치려면, 그 뒤 블록들의 작업 증명을 모두 다시 하면서 정직한 참여자 전체가 새 블록을 쌓는 속도까지 따라잡아야 한다.
지분 증명: 이더리움 머지
지분 증명(proof of stake)은 계산 대신 예치한 자산으로 투표권을 정한다. 이더리움은 2022년 9월 15일 머지(The Merge)로 작업 증명에서 지분 증명으로 바꿨다. 기존 실행 계층에 비콘 체인이 합의 계층으로 붙은 것이다. 검증자가 되려면 32 ETH를 예치하고 실행·합의·검증자 클라이언트를 돌린다.
지분 증명에는 작업 증명에 없는 처벌이 있다. 한 슬롯에 블록 두 개를 제안하거나 서로 모순된 증명을 낸 검증자는 지분이 깎이고 강제로 퇴출된다(슬래싱). 동시에 많은 검증자가 어기면 깎이는 몫이 커진다. 또 ethereum.org 설명에 따르면 확정된 블록을 되돌리려면 공격자가 전체 예치 지분의 최소 3분의 1을 잃어야 한다. 작업 증명의 "되돌릴 확률이 점점 작아진다"는 확률적 확정과 달리, 비용이 명시된 확정이다.
51% 공격과 포크
두 블록이 거의 동시에 나오면 사슬이 잠시 둘로 갈라진다(포크). 다음 블록이 어느 쪽에 붙느냐에 따라 한쪽이 이기고, 진 쪽 블록의 거래는 장부에서 빠진다. 그래서 받는 쪽은 거래가 담긴 블록 뒤에 블록이 몇 개 더 쌓일 때까지(확인 수) 기다린다. 공격자가 몰래 다른 사슬을 쌓아 이 확인을 뒤집는 것이 이중 지불 공격이다.
계산량이나 지분의 과반을 가진 쪽은 자기 거래를 뒤집고, 남의 거래를 빼고, 다른 사람의 블록을 고아로 만들 수 있다. 이것이 51% 공격이다. 반대로 과반을 가져도 남의 서명을 위조하거나 규칙에 없는 코인을 만들 수는 없다. 다른 노드들이 규칙을 검증해 그런 블록을 거부하기 때문이다. 계산량이 작은 사슬일수록 과반을 빌리거나 사기 쉬워 위험하다. 규칙 자체를 바꾸는 소프트웨어 개정도 "포크"라 부르는데, 옛 노드가 새 블록을 거부하면 하드 포크로 사슬이 영영 갈라진다. 아래 The DAO 사건이 그 예다.
거래 모델: UTXO와 계정
비트코인은 UTXO(unspent transaction output) 모델이다. 잔액이라는 숫자가 따로 없고, 아직 쓰지 않은 출력들이 동전처럼 남아 있다. 거래는 출력을 통째로 입력으로 쓰고, 남는 금액은 자기에게 돌아오는 거스름 출력으로 만든다. 이더리움은 계정 모델이다. 계정마다 잔액과 논스가 있고, 거래는 잔액을 직접 고치며 논스를 하나 올린다(ethereum.org).
UTXO는 출력마다 독립이라 병렬로 검증하기 쉽고, 출력을 한 번만 쓸 수 있다는 규칙 하나로 이중 지불을 막는다. 대신 "지금 잔액"을 알려면 내 출력을 모두 모아야 한다. 계정 모델은 잔액 조회와 프로그램 상태 관리가 직관적이라 스마트 컨트랙트에 잘 맞지만, 같은 거래를 두 번 재생하는 것을 논스로 따로 막아야 한다.
스마트 컨트랙트와 재진입 버그
스마트 컨트랙트는 장부 위에 올린 프로그램이다. 이더리움의 모든 노드는 같은 EVM(이더리움 가상 머신)으로 같은 코드를 돌려 같은 새 상태에 닿는다. EVM은 256비트 단어를 최대 1024개 쌓는 스택 기계이고, 명령마다 가스가 매겨져 무한 루프로 네트워크를 멈추는 일을 막는다. 배포된 코드는 고칠 수 없고 누구나 호출할 수 있으므로, 버그가 곧 공개된 금고의 구멍이 된다.
대표적인 사고가 2016년의 The DAO다. 안전하지 않은 계약에서 360만 ETH가 넘게 빠져나갔고, 이더리움은 2016년 7월 20일 하드 포크로 그 돈을 되돌렸다. 이 포크를 받아들이지 않은 쪽은 이더리움 클래식(Ethereum Classic)으로 남았다(ethereum.org 연표). Solidity 문서가 권하는 방어는 검사-효과-상호작용(checks-effects-interactions) 순서다. 입력과 잔액을 먼저 검사하고, 자기 상태를 먼저 고친 다음, 외부 호출은 맨 마지막에 한다. 재진입 잠금, 외부 감사, 검증된 라이브러리 사용이 함께 쓰인다.
확장성: 초당 거래 수와 레이어 2
모든 노드가 모든 거래를 검증하는 구조는 그 자체로 처리량의 상한이다. 블록을 키우거나 간격을 줄이면 처리량은 늘지만, 노드를 돌리는 비용이 커져 참여자가 줄고(탈중앙성 저하) 포크가 잦아진다. 이더리움에서 단순 송금 한 건은 가스 21,000이므로, ethereum.org가 예로 드는 블록 가스 한도 3,600만과 12초 슬롯을 넣으면 L1 단순 송금의 상한은 초당 약 143건이다(Gas and fees).
그래서 거래를 L1 밖에서 처리하고 결과만 L1에 묶는 레이어 2가 나왔다(ethereum.org Scaling). 롤업은 여러 거래를 L1 밖에서 실행하고 묶음으로 L1에 올린다. 낙관적 롤업은 묶음이 옳다고 보고 이의가 제기될 때만 다시 계산하고(사기 증명), 영지식 롤업은 묶음이 옳다는 암호학적 증명을 함께 올린다(유효성 증명). 데이터까지 L1 밖에 두는 Validium은 한 체인이 초당 약 10,000건에 이른다고 적혀 있지만, 그만큼 데이터 가용성을 다른 곳에 믿고 맡긴다. 확장성은 공짜가 아니라 무엇을 믿을지를 옮기는 일이다.
지갑과 키: 잃으면 되찾을 수 없다
"지갑"은 코인을 담는 곳이 아니라 개인 키를 보관하고 거래에 서명하는 도구다. 장부에는 주소별 기록만 있고, 그 주소의 자산을 움직일 수 있는 것은 개인 키로 만든 서명뿐이다. 대부분의 지갑은 BIP-39 시드 문구로 키를 만든다. 128비트 엔트로피는 12단어, 256비트는 24단어가 되고, 단어는 2048개 목록에서 고른다.
12단어 시드 문구를 무작위로 맞히려면 초당 1조 번 시도해도 절반을 훑는 데 약 5.4 × 10^18년이 걸린다. 그래서 공격은 수학이 아니라 사람을 노린다. FTC 안내가 꼽는 흔한 유형은 투자 사기(가짜 투자 관리자, 유명인 사칭 "보내면 두 배", 연애를 미끼로 한 투자 권유), 회사·정부·수사기관 사칭과 가짜 일자리, 협박이다. 공통 신호는 분명하다. 암호화폐로 돈을 요구하면 사기를 의심하고, 수익 보장이나 "위험 없음"은 사기이며, 먼저 연락해 온 링크와 번호는 따르지 않는다. 암호화폐 송금은 보통 되돌릴 수 없다.
시드 문구와 개인 키는 누구에게도 알려 주지 않는다. 정상적인 서비스는 시드 문구를 묻지 않으며, "지갑 동기화"·"복구 지원"을 이유로 요구하는 사이트나 사람은 사기다. 서명 요청도 내용을 읽지 않고 승인하지 않는다. 승인 한 번으로 계약에 자산 인출 권한을 넘기는 경우가 있다. 분실에 대비한 백업은 오프라인으로 두고, 그 백업 자체가 또 하나의 열쇠라는 점을 잊지 않는다. 가짜 지갑 앱, 고객센터를 사칭한 메신저 연락 같은 수법은 일반 피싱과 같으므로 사람과 운영 노트의 피싱 절이 그대로 통한다.
블록체인이 필요 없는 경우
블록체인은 "서로 믿지 않는 여러 주체가, 믿을 운영자 없이, 같은 장부를 함께 고쳐야 할 때" 비싼 값을 치를 이유가 생긴다. 이 조건 중 하나라도 빠지면 대개 데이터베이스가 더 빠르고, 싸고, 고치기 쉽다. Wüst·Gervais(2017)는 이것을 질문 몇 개의 결정 흐름으로 정리했다.
"위변조를 막고 싶다"만으로는 이유가 되지 않는다. 한 기관이 운영하는 시스템이라면 추가 전용 로그, 머클 트리로 묶은 감사 로그, 전자 서명, 외부 타임스탬프로 같은 효과를 훨씬 싸게 얻는다. 인증서 투명성처럼 공개 검증이 필요한 경우도 블록체인 없이 풀린 사례가 있다. 또 블록체인은 바깥 세계의 사실을 보증하지 못한다. 창고에 물건이 있다는 기록이 장부에 들어가는 순간까지는 결국 누군가를 믿어야 한다(오라클 문제).
에너지 사용
작업 증명은 일부러 계산을 낭비하게 만드는 설계라 전력 사용이 보안과 직결된다. 지분 증명은 그 경쟁을 없앴다. 머지 페이지는 이더리움의 에너지 사용이 약 99.95% 줄었다고 적고, 에너지 페이지는 CCRI의 추정을 들어 연간 약 0.0026 TWh, 감소율 99.988% 이상이라고 적는다. 같은 기관의 페이지 안에서도 추정 방법에 따라 값이 다르다.
이 그림은 시점과 방법이 정해진 추정치를 옮긴 것이라 지금의 값과 다를 수 있다. 숫자보다 자릿수를 본다. 작업 증명 사슬의 전력은 참여하는 계산량에 비례하고, 계산량은 보상의 가치에 따라 움직인다. 지분 증명 사슬의 전력은 검증자 노드 수와 하드웨어에 비례해 일반 서버 운영에 가깝다.
핵심 자료
요지는 직접 정리한 한 줄이다. 합의 알고리즘 일반은 분산 시스템 노트, 해시와 서명의 수학은 암호학 노트에 있다. 다시 적어 둔다. 이 노트는 투자 조언이 아니다.
| 자료 | 연도 | 한 줄 요지 |
|---|---|---|
| Bitcoin: A Peer-to-Peer Electronic Cash System (Nakamoto) | 2008 | 믿을 제3자 없이 이중 지불을 막는 방법으로 작업 증명 해시 사슬과 가장 긴 사슬 규칙을 내놓았다. |
| Ethereum Whitepaper | 2014 | 거래 대신 범용 상태 기계를 복제해, 장부 위에서 프로그램(스마트 컨트랙트)을 돌리자고 제안했다. |
| RFC 6962 Certificate Transparency | 2013 | 머클 트리 기반의 추가 전용 로그와 포함·일관성 증명을 표준으로 정했다. 블록체인 없이도 공개 검증 가능한 장부를 만든 사례다. |
| Do you need a Blockchain? (Wüst, Gervais) | 2017 | 공개·허가형 블록체인과 중앙 데이터베이스 중 무엇이 맞는지 가리는 결정 흐름을 제시했다. |
| NIST IR 8202 Blockchain Technology Overview | 2018 | 합의 모델, 스마트 컨트랙트, 한계와 오해를 정부 보고서 눈높이로 정리했다. |
| BIP-39 Mnemonic code for generating deterministic keys | 2013 | 엔트로피를 단어 2048개 목록의 12~24단어로 바꾸는 시드 문구 규칙이다. |
- Bitcoin: A Peer-to-Peer Electronic Cash System (Nakamoto) (2008)
- Ethereum Whitepaper (2014)
- RFC 6962 Certificate Transparency (2013)
- Do you need a Blockchain? (Wüst, Gervais) (2017)
- NIST IR 8202 Blockchain Technology Overview (2018)
- BIP-39 Mnemonic code for generating deterministic keys (2013)
- Bitcoin Developer Guide — Block Chain(난이도 조정·머클 루트·UTXO)
- ethereum.org — The Merge
- ethereum.org — Proof-of-stake (PoS)
- ethereum.org — Ethereum energy consumption
- ethereum.org — The history of Ethereum(The DAO 포크)
- ethereum.org — Ethereum Virtual Machine (EVM)
- ethereum.org — Ethereum accounts
- ethereum.org — Gas and fees
- ethereum.org — Scaling(레이어 2·롤업)
- Solidity 문서 — Security Considerations(재진입, 검사-효과-상호작용)
- FTC — What To Know About Cryptocurrency and Scams