Double Spending Problem
51% Attack
- Double Spending Problem
- Problem Definition: What is Double Spending?
- Why is Double Spending Possible?
- Bitcoin's Solution
- Additional Security Mechanism: UTXO
- References
Double Spending Problem
전산학 관점에서 BLOCKCHAIN 은 "익명의 비동기화 네트워크에서 발생하는 사건들을 중앙 서버의 관여 없이도 일관성 있게 순서를 정할 수 있는 장치"다. 이 순서를 정하는 것은 이중 사용(Double Spending) 문제와 직결된다.
Problem Definition: What is Double Spending?
이중 사용(Double Spending) 이란 하나의 비트코인을 여러 번 사용하려는 악의적인 행동이다.
Specific Scenario
직거래를 통해 가방을 0.002 BTC에 구매하는 상황을 가정하자:
- [송금 신청] 구매자가 판매자에게 비트코인 송금
- [판매자 행동] 판매자가 송금을 확인하고 안심하여 집에 감
- [실제 상황] 하지만 송금은 아직 블록체인에 기록되지 않음
송금 신청이란 구매자가 BROADCASTING 을 통해 비트코인 시스템의 전체 노드에게 "판매자의 계좌로 0.002 BTC를 지급한다"는 의사를 트랜잭션으로 전달한 것에 불과하다.
사토시는 블록이 항상 평균 10여 분에 하나만 만들어지도록 설계했다. 따라서 송금 신청 후 블록이 생성되기까지 시간이 걸린다.
이중 지불 공격:
- 구매자가 블록 생성 전에 동일한 비트코인을 자기 자신에게 지급하는 트랜잭션을 생성
- 두 개의 트랜잭션이 네트워크에 퍼지지만, 결국 하나만 유효하게 됨
- 만약 자기 자신에게 보낸 트랜잭션이 먼저 블록에 포함되면 판매자는 돈을 받지 못함
Why is Double Spending Possible?
Root Cause: Order Inconsistency
이중 지불 문제의 근본 원인은 '잔고 부족'이 아니라 '순서의 불일치' 에 있다.
중앙 서버가 없는 비동기화 시스템에서 이중 사용 문제가 발생하는 이유는:
- 시스템에 트랜잭션이 제출되는 순서
- 트랜잭션이 처리되는 순서
이 둘이 일치하지 않기 때문이다.
Challenges of Distributed Systems
먼저 온 것을 유효로 치려면 "무엇이 먼저인가?" 에 대한 합의가 필수적이다. 이는 분산 시스템의 난제인:
- 전역 시계(Global Clock)의 부재
- 네트워크 지연(Network Latency)
의 문제이기도 하다.
구체적 예시:
- 노드 A는 "철수가 영희에게 줬다"를 먼저 봄
- 노드 B는 "철수가 민수에게 줬다"를 먼저 봄
- 각 노드별로 전달받은 트랜잭션과 순서가 서로 상이함
Bitcoin's Solution
이러한 문제를 기술적으로 해결하기 위해 비트코인은 세 가지 메커니즘을 사용한다:
1. Leader Election: Who Gets the Write Authority?
분산 시스템에서는 데이터의 일관성을 유지하기 위해 "누가 기록할 권한(Write Authority)을 가질 것인가?" 를 정해야 한다. 이 권한을 가진 노드를 리더(Leader) 라고 한다.
PoW를 통한 리더 선출:
- Proof of Work 방식을 통해 퍼즐(Nonce 찾기)을 가장 먼저 푼 채굴자가 "이번 10분 동안의 리더"가 된다
- 만약 동시에 블록이 생성된 경우, 가장 많은 연산을 한 블록을 만든 채굴자가 리더가 된다
- 리더만 거래의 순서를 기록할 수 있으며, 이때 Timestamp 를 사용한다
PoW의 진짜 의미:
- 단순한 계산 낭비가 아님
- "누가 기록할 권한을 가질 것인가?" 를 결정하는 공정한 리더 선출 방식(Lottery)
- 비용을 지불하게 하는 보안 장치
즉, 어떤 거래가 먼저였는지, 어떤 거래가 나중이었는지를 모든 노드가 같은 방식으로 기억하게 만든다.
2. Longest Chain Rule: Which History to Trust?
비트코인은 가장 많은 작업 증명이 누적된 체인을 올바른 체인 이라고 판단한다. 이를 "가장 긴 체인(Longest Chain Rule)" 이라고 한다.
왜 "긴" 체인인가?
- 더 긴 체인 = 더 많은 연산 비용을 투입한 것
- 이는 분산 시스템에서의 "동기화(Synchronization) 전략" 이다
비동기 네트워크의 딜레마:
- 전 세계 노드는 네트워크 지연(Latency) 때문에 서로 다른 최신 블록을 볼 수 있다(일시적 분기, Fork)
- 단순한 해결책(Protocol): "일단 가장 힘든 작업(PoW)이 들어간 체인을 선택하라"
왜 이것이 합리적인가? → "비용(Cost)" 때문:
- 가짜 역사를 만드는 비용 > 조작으로 얻는 이익
- 이 경제적 인센티브 구조가 시스템 보안의 핵심
3. Double Spending Attack Scenario and Defense, 51% Attack
해커가 시스템을 속이려 할 때 벌어지는 일을 "경주(Race)" 에 비유할 수 있다. 공격자의 체인과 정상적인 체인은 계속되는 작업증명을 통해 격차를 늘리거나 줄이며 경주를 하게 된다.
공격 시나리오:
- [상황] 해커가 A에게 1 BTC를 보내고 물건을 받음 (Block 100에 기록)
- [공격] 해커는 동시에 자기 자신에게 1 BTC를 보내는 비밀 블록체인(Fork)을 몰래 만듦
- [목표] 비밀 체인을 공개 체인보다 더 길게(무겁게) 만들어서 네트워크에 전파
- [결과] 네트워크는 "더 긴 체인"을 선택하므로 A에게 보낸 거래는 무효화됨
방어 메커니즘 (Longest Chain Rule):
전체 네트워크의 연산력(Hash Power)이 100이고, 해커가 10을 가졌다고 가정하자:
- 정상 네트워크: 10분마다 90의 힘으로 블록을 쌓음
- 해커: 10의 힘으로 블록을 쌓음
- 시간이 지날수록 정상 체인과 해커 체인의 길이 차이는 지수 함수적으로 벌어짐
- 따라서 해커가 기존 체인을 추월하려면 전 세계 연산력의 51% 이상을 가져야만 함 (51% Attack)
도박꾼의 파산 문제와의 유사성:
비트코인 개발자인 사토시는 이 상황을 도박꾼의 파산 문제 와 유사하다고 말한다:
- 도박꾼의 파산 문제: 유한한 자산을 가진 도박꾼이 무한한 자본을 가진 카지노를 상대로 도박을 하면 결국 파산함
- 비트코인: 공격자가 정상적인 체인보다 자신의 체인을 더 길게 만들기 위해 무한대로 시도하면 결국 실패함
"물리적 에너지(연산)가 디지털 불변성(보안)으로 치환되는 과정"이 비트코인 프로토콜의 핵심이다.
Additional Security Mechanism: UTXO
이중 사용 문제를 해결하기 위해 비트코인은 UTXO(Unspent Transaction Output) 모델을 사용한다:
- 각 비트코인은 "사용되지 않은 거래 출력"으로 추적됨
- 한 번 사용된 UTXO는 다시 사용할 수 없음
- 이는 이중 지불을 데이터 구조 레벨에서 차단하는 추가 안전장치
References
- 비트코인의 탄생부터 블록체인의 미래까지 명쾌하게 이해하는 비트코인·블록체인 바이블 / 장세형 저
- 비트코인과 블록체인 가상자산의 실체 2/e / 이병욱 저