14년 전, 비트코인 탄생 시점으로의 여행
누군가는 '아니 08년도 백서를 왜 지금 읽고 있냐'라고 할지도 모르겠다. 그럼에도 내가 비트코인 탄생 시점으로의 여행을 결심한 건, 지금 일어나는 모든 블록체인, 암호화폐 붐의 핵심 발상이 담겨있는 가장 기초가 되는 문서라고 생각했기 때문이다. (조금 덧붙이면 내가 '가즈아' 이상으로 이 친구를 이해해주고 있지 못하다는 일종의 죄책감도 있었다). 그래서 엉덩이 붙이고 앉아 읽어보기로 했다. 사토시 나카모토가 2008년 11월 1일 내어놓은 논문〈비트코인 : 개인 대 개인의 전자화폐 시스템>을!
사실 한국어로 번역된 문서를 읽어도 관련 공부를 하거나 업계에서 일한 사람이 아니라면 바로 이해하기 어려운 개념이 많다고 생각한다. 그래서 핵심이 되는 논문 내용을 발췌하고, 더 쉬운 이해를 위해 설명을 덧붙였다. 저도 공부를 해가며 작성한 내용이니, 혹시 비유나 설명이 올바르지 않은 부분이 있다면 언제든 알려주세요오.
1. 서론
2. 거래
3. 타임스탬프 서버
4. 작업 증명 (여기서부터는 2탄에서 다룰 예정)
5. 네트워크
6. 인센티브
7-12. 그 이외의 것들
나는 정승원 님이 한글로 번역한 이 문서를 읽었다.
백서의 원문은 여기에서: https://bitcoin.org/bitcoin.pdf
전자 상거래는 전자지불을 처리함에 있어서 신뢰할 수 있는 제3 자 역할을 하는 금융기관들에 거의 전적으로 의존해 왔다. 이러한 시스템은 대부분의 거래에는 충분히 잘 동작하지만, 신뢰 기반 모델의 태생적인 약점을 여전히 지닌다. 금융기관들은 분쟁 중재를 피할 수 없기 때문에 완전히 취소 (철회) 불가능(non-reversible)한 거래는 사실상 불가능하다. (중략) 이러한 비용들과 지불의 불확실성은 물리적 화폐 (physical currency)를 직접 만나(in person) 사용한다면 해결할 수 있지만, 신뢰할 수 있는 제3 자가 없이도 온라인상에서 지불을 가능하게 하는 메커니즘은 존재하지 않는다.
필요한 것은 신뢰 대신 암호학적 증명에 기반한 전자지불 시스템으로, 이는 신뢰할 수 있는 제3 자 없이도 그 어떤 두 사람이 직접 거래하는 것을 가능하게 해 준다.
이 논문은 2008년에 출시됐다. 2008년은 세계금융위기로 다양한 중앙집권 기관(정부, 은행 등)이 신뢰를 잃은 시기이기도 하다. 사토시는 특히 이 중앙집권 기관을 싫어했던 것 같다. 우리는 개인끼리 서로 거래하는 상황에서 제 3자인 금융기관(특히 은행)을 중간에 두어서, 분쟁이 생겼을 때 중재를 해 주길 바란다. 하지만 이 중재 때문에 비용이 발생하고, 거래에서의 비효율이 생겨난다.
/ 근데 솔직히 비트코인 거래에서의 비효율은.. (ex. 한 번 블록이 생성될 때 10분이 걸리는 것이나, 적은 비트코인을 송금할 때의 수수료 등 ㅎㅎ)
그래서 사토시는 특정 기관을 '신뢰'하며 중간에 끼게 하지 말고, 암호학적 증명으로 사람들 간에 직거래(Peer to Peer transaction)가 가능할 수 있는 시스템을 구상했고, 이것이 비트코인의 첫 탄생이 됐다 (사실상 비트코인은 코인이 아니라 '시스템'이다!)
우리는 전자화폐(electronic coin)를 전자서명의 체인으로 정의한다. 각 소유자는 이전 거래와 다음 소유자의 공개키 (public key)에 대한 해시에 전자서명을 한 것을 마지막에 추가하여 코인을 전달한다. 수취인은 소유권의 체인을 검증하고 싶다면 이 전자서명들을 검증하면 된다.
이 '거래'에 대한 부분에 '아니 은행이 없는데 어떻게 거래를 증명합니까...' 에 대한 답이 있다. 다만 문단을 바로 해석하면 꽤나 포기하고 싶어 지기 때문에.. 3가지 개념을 먼저 설명해보려고 한다.
공개 키 (public key): 마치 내 계좌번호처럼 사람들이 다 알 수 있는 값이다.
개인 키(private key): 내 계좌의 비밀번호. 나만 알 수 있는 값이다. 이 키로는 '전자 서명'을 할 수 있다.
해시(hash): 어떤 데이터든 고정된 길이의 수열로 암호화해버리는 거다.
만약 사과가 바나나에게 돈을 보내고 싶다고 가정하자. 그러면 (1) 바나나의 주소(공개 키), (2) 사과가 처음 돈을 가지게 된 거래를 hash 한 값, (3) 사과의 서명(개인 키로 서명함) 이렇게 3가지 정보를 적어서 거래 블록을 만드는 거다. 사과의 서명이 있으니, 이 거래가 진짜 사과가 보내는 것이 맞는지 확인할 수 있게 된다.
물론 문제는 수취인이 이전 소유자들이 이중 지불을 했는지를 검증할 수는 없다는 것이다. (중략) 우리는 이전 소유자들이 그 어떤 앞선 거래에도 서명하지 않았다는 것을 수취인이 알 수 있는 방법이 필요하다. (중략) 제3 자 없이 이를 달성하려면 거래는 반드시 공개적으로 알려져야 하며, 우리는 참가자들이 거래의 순서에 대한 단일 기록에 동의할 수 있는 시스템이 필요하다. 수취인은 매 거래마다 과반수의 노드들이 그것이 첫 사용이라고 동의해주는 증명을 필요로 한다.
하지만 문제가 하나 더 남았다. 사과가 진짜로 돈을 보냈다는 건 알겠는데, 혹시 같은 돈이 바나나에게만 보내진 것이 아니라 포도에게도 보내진 것은 아닌지 증명할 수는 없다는 거다. 하나의 화폐로 두 번 결제되는 것은 '이중 지불(double spending)'의 문제라고도 불리는데, 지금까지는 우리는 은행이라는 기관을 중앙에 두고 은행이 거래 요청 순서대로 진행을 도와주는 형태로 이 문제를 해결해왔다.
하지만 중앙 금융기관이 없는 비트코인 위에서는 어떻게 해야 할까. 사토시는 일단 (1) 모든 거래가 다 기록되고, (2) 그중에서도 2개의 거래 중에 어떤 거래가 먼저인지 결정할 수 있는 시스템이 필요하다고 말한다. 이 시스템이 바로 3장에 나올 '타임스탬프'다.
타임스탬프 서버는 타임스탬핑을 할 항목들의 블록에 대한 해시를 계산해 이를 신문이나 유즈넷(Usenet) 포스트처럼 넓게 퍼뜨리는 방식으로 동작한다. 타임스탬프는 해당 시점에 그 데이터가 해시 계산에 들 어가기 위해서 명백히 존재했음을 증명해준다. 각 타임스탬프는 이전 타임스탬프를 해시에 포함하여 각각의 추가 타임스탬프가 이전의 타임스탬프들을 보강 증명하는 체인을 형성한다.
이 문장이 3장의 전부다. '신문'이 나오는 걸 보니 첩첩산중이다. 하지만 할 수 있다.
같은 돈으로 여러 번 출금이 될 수 있는 온라인 거래의 문제점을 막기 위해서, 거래의 '순서'에 대한 약속이 중요하다는 것을 알았다. 우리는 각 거래에 '타임스탬프'를 쾅 찍고 이를 비교해서 그 순서를 비교할 수 있다.
여기에 '블록'이라는 개념이 나오는데, 이 블록 안에는 여러 개의 거래 내역(항목)이 담겨있다고 생각하면 된다. 우리는 이 블록을 해시(데이터를 특정 수열로 암호화해버리는 것)한다. 바로 이 해시값이 만들어지는 시점이 타임스탬프가 된다. 그리고 이 타임스탬프는 신문 같이 사람들이 모두 볼 수 있는 곳에 널리 널리 공표된다(바로 이것 때문에 '신문'이라는 단어가 나왔다.)
여러 거래 내역을 담은 블록 A를 만들었다고 치자. 그리고 그다음 내역을 담은 블록 B도 만들어졌다. 이때 블록 B를 해싱할 때는, 이전에 만들어진 블록 A의 해시 값을 넣어야 한다. 그러다 보니 사람들은 진짜 블록 A의 해시로부터 B의 해시가 만들어졌는지 검증할 수 있게 되고, 자연스럽게 A 안의 거래가 B안의 거래보다 앞선다는 것이 증명된다. 그리고 앞선 타임스탬프를 포함한 채로 뒤 블록이 해싱되기 때문에, 특정한 타임스탬프 하나를 조작한다는 것이 매우 어려워진다!
자 이제 백서의 1-3장(거의 1/3)을 살펴봤다. 다음 글에서는 너도 나도 블록에 거래 내역을 담은 블록을 만들어내려고 할 텐데, 누구의 블록을 진짜 블록으로 인정할 것인지에 대한 것부터 또 다뤄볼 예정이다.
+ 왜 이름이 white paper(백서)일까 궁금해서 찾아봤다. 영국에서 예전에 정부 보고서 표지를 흰색으로 썼는데, 이후 정부에서 공식적으로 발간하는 보고서를 white paper이라고 불렀다고 한다. 자매품으로 청서, 녹서, 황서, 귤서, 적서, 흑서... 도 있다고.
References