Double Spending Problem

전산학 관점에서 BLOCKCHAIN 은 "익명의 비동기화 네트워크에서 발생하는 사건들을 중앙 서버의 관여 없이도 일관성 있게 순서를 정할 수 있는 장치"다. 이 순서를 정하는 것은 이중 사용(Double Spending) 문제와 직결된다.

Problem Definition: What is Double Spending?

이중 사용(Double Spending) 이란 하나의 비트코인을 여러 번 사용하려는 악의적인 행동이다.

Specific Scenario

직거래를 통해 가방을 0.002 BTC에 구매하는 상황을 가정하자:

  1. [송금 신청] 구매자가 판매자에게 비트코인 송금
  2. [판매자 행동] 판매자가 송금을 확인하고 안심하여 집에 감
  3. [실제 상황] 하지만 송금은 아직 블록체인에 기록되지 않음

송금 신청이란 구매자가 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)" 에 비유할 수 있다. 공격자의 체인과 정상적인 체인은 계속되는 작업증명을 통해 격차를 늘리거나 줄이며 경주를 하게 된다.

공격 시나리오:

  1. [상황] 해커가 A에게 1 BTC를 보내고 물건을 받음 (Block 100에 기록)
  2. [공격] 해커는 동시에 자기 자신에게 1 BTC를 보내는 비밀 블록체인(Fork)을 몰래 만듦
  3. [목표] 비밀 체인을 공개 체인보다 더 길게(무겁게) 만들어서 네트워크에 전파
  4. [결과] 네트워크는 "더 긴 체인"을 선택하므로 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 / 이병욱 저