2. 전자 화폐 (e-Cash)
David Chaum이 최초 제안
“Blind signature for untraceable payment”, Crypto 1982
발전 방향
현실 화폐의 특징과 최대한 유사하게 설계
익명성 강조
Off-line 사용
발행 기관이 제한적
위조 방지 (이중 사용 방지)
2
3. 이중 사용
문제점
실물 화폐에 비해 복제가 용이함
Off-line 거래에서 이중 사용 방지는 근본적으로 어려움
사후 추적 기능 제공
이중 사용 방지를 위해 다양한 암호 기술 적용
비효율성 증가
011101101111…
011101101111…
011101101111…
…
3
4. Bitcoin
Satoshi Nakamoto 제안
“Bitcoin : A Peer-to-Peer Electronic Cash System”,
2009
기존 전자 화폐와 차별화
공개성
On-line 사용
발행 및 검증 분산화
4
5. 암호학적 도구
해쉬 함수
SHA-256, RIPEMD-160
11010 … 011
균일한 길이 난수열 출력
전자 서명
ECDSA
비밀키
키생성
서명
검증
공개키
5
6. Bitcoin 구성
거래 정보를 모든 사용자에 공개
Bob
Alice
Alice [1BTC] Bob
broadcast
공유정보
Alice : 17BTC
Bob : 23BTC
…
6
7. Bitcoin 구성
위조 방지를 위한 전자 서명 추가
Bob
Alice
Sig(SKAlice , Alice [1BTC] Bob)
broadcast
공유정보
Alice : 17BTC
Bob : 23BTC
…
7
19. Proof of work (hashcash)
Block 생성을 위해 일정량의 계산을 요구
전체 Block의 256-bit hash값에 대한 조건이 주어짐
0 < hash of Block < Target
조건을 만족하는 nonce를 찾는 문제
컴퓨팅 환경 및 사용자 변화와 무관하게 각 block 생성에
걸리는 시간을 일정하게 유지
난이도 조정
매 2016 block 마다 조정 (1block/10분 = 2016blocks/2주)
new Target = old Target ×
최근 2016 block 생성에 걸린 시간 (초)
2주 (초)
19
20. Mining & Incentives
Mining
기존 block chain에 새로운 block를 계산하여 추가
최근 생성된 block이 복수일 경우, miner가 새 block을
추가할 branch 선택
기존 block에 포함되지 않은 transaction을 선택적으로
포함 (이중 사용 transaction 제외)
Incentives
각 block은 첫 transaction으로 bitcoin 발행
최초 50BTC/1block 발행, 매 21만 block마다 반감
(현재 25BTC/1block)
Block에 포함된 모든 transaction의 verification fees
20
23. Fork
(거의) 동시에 두 개의 새로운 Block이 chain에 연결
Bn+1
Bn-2
Bn-1
Bn
B’n+1
각 노드(miner)는 두 block 중 하나를 선택, 새로운 block 연결
miner의 선택에 따른 branch 사이의 경쟁
Bn+1
B’n+1
Bn-2
Bn-1
Bn+2
Bn+4
B’n+2
Bn+3
Bn
두 branch의 차이가 크게 벌어질 수록 많은 수의 miner가 긴
branch로 이동하고, 최종적으로 짧은 branch는 사라짐
23
24. 이중 사용 방지
가정
기존 block에서 사용되고 확인된 output을 새로운
transaction에 input으로 사용하는 것은 불가능
모든 transaction은 block에 추가되어야 거래가 완료
즉, 이중 사용을 위해서는 동일 output을 포함한
transaction이 서로 다른 branch에 나뉘어 있어야 함
Branch 통합 후
사라진 branch에 포함된 transaction 중 기존 block chain
에 포함되지 않은 transaction은 새로운 block에서 흡수
이중 사용 transaction은 새로운 block에서 제외됨
24
25. Transaction 저장
Transaction
과거의 모든 transaction을 저장하지 않고 사용이 완료된
transaction에 대한 기록은 폐기
“unspent transaction” 리스트만 관리
Merkle Tree 축약
Root
Root
c1
c2
b2
b1
a1
a2
a3
Tx1
Tx2
Tx3
spent spent spent
c1
b3
a4
Tx4
a5
b4
a6
a7
b2
b1
a8
Tx5
Tx6
Tx7
Tx8
spent spent spent spent
25
c2
a3
a4
Tx4
26. 알려진 공격들
51% attack
공격자가 전체 사용자의 51% 이상의 계산 능력을 지님
공격자는 두 개의 branch를 고의로 생성, 두 개의 branch 중 자신이 원하는
branch를 정당한 block chain으로 남길 수 있음
Race Attack
정당한 transaction 전송(unicast)함과 동시에 동일 input에 대한 수 백 개의
작은 transaction을 생성하여 여러 사용자에 전송(broadcast)
많은 사용자들에 전송한 transaction이 정당한 것으로 인정받을 확률이 높음
Finney Attack
공격자가 Transaction(AA’)을 포함한 block 생성
동일한 coin으로 Transaction(AB)를 지불
B가 거래를 인정하면 미리 생성한 block 발표
공격의 대상이 block confirmation까지 거래를 대기하면 방어
가능
26