비트코인 가격이 폭등하면서 (17년 11월 28일 기준) 수많은 언론들이 관련 기사를 내고 있다.
5년 전에는 겨우 10만원이었고, 1년 전에는 70만원이었던 1비트코인이 1100만원을 찍었으니 사람들의 관심을 끄는 것도 당연하다. 비트코인을 알았던 사람들은 '비트코인을 샀었어야 했는데...'하는 후회를 하고, 동시에 전혀 관심이 없던 분들도 '비트코인이 대체 뭐지?'라고 궁금해하는 경우가 많다.
생각보다 비트코인이 무엇인지 잘 이해하고 있는 사람은 별로 없는 것 같다. (그래서 이렇게 가격이 널뛰는 것일 수도) 아무래도 생소하고 기술적인 개념이 많이 나오기 때문일 것이다.
그렇지만 비트코인 투자에 관심이 있다면 비트코인의 원리는 반드시 알아야 한다. 비트코인의 내재적 가치에 대해 알지 못하고, 시장 가격에 따라서 샀다 팔았다하다가는 순식간에 돈을 잃을 확률이 높다.
동작 그만, 이게 뭐신지 알고 하는 거야?
투자에 관심이 없더라도 비트코인이라는 새로운 화폐가 도대체 어떻게 화폐로 쓰일 수 있다는 것인지 궁금하다면 상식 선에서 원리를 알아두는 것도 나쁘지 않다고 생각한다.
인터넷에 비트코인을 설명한 글은 많지만, 어렵고 생소한 용어가 많은데다 비트코인이 해결하는 문제보다는 기술에 초점을 맞춰서 이야기하다보니 비전공자들이 이해하기가 상당히 어렵다. 나도 문돌이로써 비슷한 경험을 했다.
비트코인이 무엇인지 쉽게 이해하고 싶은 사람들을 위해, 이 글에서는 기술적 디테일을 최대한 배제하고 비유를 사용해 비트코인의 원리를 설명한다. (꼭 필요한 용어는 다른 자료를 읽을 때 도움이 되도록 [참고]라는 이름으로 첨부했다.)
<미리 밝힘>
1. 이미 비트코인의 기본 원리에 대해 이해하고 있거나, 다음의 단어들의 뜻을 정확히 알고 있다면 이 글을 읽지 않으셔도 좋습니다.
[POW / 해쉬 함수 / 논스값 / 51% 공격 / 마이닝 풀]
2. 이 글은 투자에 대한 조언이 아닙니다.
<가상화폐? 암호화폐?>
현재 국내에서 비트코인과 같은 화폐를 부를 때 가상화폐, 디지털화폐, 암호화폐 등 다양한 용어가 섞여서 쓰이고 있습니다. 그러나 전 세계적으로 공식적인 용어는 암호화폐(cryptocurrency)입니다. 디지털 화폐나 가상 화폐는 물리적 화폐와 대비되는 개념으로, 이전에 존재해왔던 사이버 머니, 포인트 등을 포함하는 용어입니다. 암호화폐는 물리적 실체가 없다는 점에서 디지털/가상화폐에 속하지만, 이전까지 존재해왔던 디지털/가상화폐와는 완전히 다른 특성을 지닙니다. 따라서 이 글에서는 비트코인과 같은 화폐를 부를 때 암호화폐라는 용어를 사용하도록 하겠습니다.
화폐란 무엇인가
비트코인의 원리를 이해하기 위해서 먼저 '화폐'에 대해 짧게 짚고 넘어가보자.
화폐는 신뢰다
TED에서 Neha Narulas는 화폐의 특징을 보여주는 재밌는 사례를 소개한다. 태평양에 위치한 Yap이라는 작은 섬이 있다. 이 섬이 특이한 이유는 Rai stone이라는 커다란 디스크 모양의 돌을 화폐로 사용하기 때문이다. 그렇지만 돌이 너무 크고 무겁기 때문에 사람들이 거래를 할 때 실제로 돌을 주고받지는 않는다.
Yap 사람들이 화폐로 썼던 Rai Stone
대신 Yap 사람들은 돌이 누구의 것인지 계속 기록을 해둔다. 내가 돈을 지불할 일이 있다면 그 기록에 ‘이 돌의 주인은 이제 누구임’이라고 적어놓기만 하면 된다.
그런데 어느 날 Yap 선원들이 돌을 옮기다가 문제가 생겨 돌이 바다에 빠지고 말았다. 그리고 섬에 돌아와서 돌을 잃어버렸다고 사람들에게 말하자, 사람들은 "어차피 그게 그게 당신들 거라는 걸 우리 모두가 알고 있다면, 육지에 있든 바다에 있는 무슨 상관이야?"라고 말하며 계속해서 그 가치를 인정해주었다고 한다.
오늘날 우리가 쓰는 돈도 이 Rai stone과 다를 바 없다. 생각해보자. 1만 원짜리 지폐는 왜 가치가 있는가? 그 종이에 그만한 가치가 있어서가 아니라, 모든 사람들이 그 종이에 1만 원의 가치가 있다고 ‘믿기’ 때문이다. 왜 멕시코 페소는 한국에서 가치가 없는가? 페소 동전 자체는 한국에서도 바뀌지 않지만, 하지만 한국에서는 아무도 그 가치를 인정해주지 않기 때문이다.
즉, 돈은 돈 그 자체로써 가치가 있는 것이 아니라, 내가 속한 공동체가 그것이 가치가 있다고 ‘신뢰’하고 ‘보증’해주기 때문에 가치가 있다. 따라서 신뢰할 수 있는 것이라면 그것이 조개껍질이든, 돌덩이든, 단지 종이 쪼가리든 상관없이 화폐가 될 수 있다.
화폐 진화의 최신 버전, 전자 화폐
그렇다면 어떤 것을 신뢰의 대상으로 삼을 것인가? 어떤 것을 화폐로 쓰느냐에 따라서 편의성, 안전성 등은 당연히 달라진다. 오늘날 아무도 Yap 사람들처럼 돌덩이를 화폐로 쓰지 않는 이유다.
고대로부터 화폐는 보리, 밀과 같은 식품 화폐도 있었고, 그 뒤로 조개껍데기와 같은 물품 화폐도 쓰였다. 그리고 현재까지도 쓰이고 있는 금속 화폐(동전)와 지폐도 있다. 이들은 각각 장단점이 있었고, 이 중 가장 장점이 많았던 금속 화폐와 지폐는 현재까지도 쓰이고 있다.
현대 화폐의 가장 최신판은 20세기에 등장한 전자화폐다. 전자화폐는 현대인들이 가장 많이 쓰는 화폐다. 사람들은 보통 돈이라고 하면 지폐나 동전을 떠올리지만, 사실 현재 사용되는 화폐의 13%만이 동전이나 지폐의 형태로 존재한다. 나머지 87%는 신용카드 잔고나 계좌 잔고처럼 물리적 실체가 없는 단순한 숫자에 지나지 않는다. 전자화폐가 널리 쓰이는 이유는 기존의 화폐들보다 많은 점에서 편리하기 때문이다. 귀찮게 동전이나 지폐를 들고 다닐 필요도 없고, 쉽게 쪼갤 수 있고, 시간에 따라 변질되지도 않는다.
전자화폐의 문제점과 제 3자의 등장
전자화폐가 가진 딱 하나의 문제점이 있다. 바로 복사하기가 쉽다는 것이다. 디지털화된 데이터라는 특성상 전자화폐는 쉽게 복사가 가능하고, 원본과 진본에 아무런 차이가 없다.
그런데 한 사람이 가진 돈을 계속 복사해서 여기서도 쓰고, 한 사람이 가진 돈을 계속 복사해서 여기서도 쓰고, 저기서도 쓴다면 화폐는 가장 중요한 신뢰를 잃게 된다.
[참고] 이를 '중복 지불 문제'라고 한다
우리가 발명한 해결책은, 믿을 수 있는 제 3자에게 관리를 맡기는 것이다. A와 B가 거래를 하고 싶다면 A, B가 전자 화폐에 해당하는 데이터를 주고받는 것이 아니다. 대신 A, B와 관련이 없는 C가 거래 내역을 기록/관리한다.
A가 B에게 송금을 하고 싶다면, A는 C에게 'B한테 돈을 얼마 보내주세요'라고 요청한다. 그럼 C는 A가 충분한 돈이 있는지 확인한 뒤, 그만큼의 돈을 A가 가진 잔액에서 빼고, B의 계좌의 잔액에 그만큼의 돈을 더해준다.
이 과정에서는 아무런 물리적 교환도 일어나지 않고, 단순히 C는 숫자만 바꿔주었을 뿐이다.
하지만 A와 B가 둘 다 C라는 사람을 신뢰하고 있기 때문에, 아무런 문제 없이 송금을 할 수 있다.
C 역할을 하는 것이 바로 오늘날의 은행이다.
은행은 디지털 데이터가 화폐가 될 수 있도록 신뢰를 보증한다
은행은 누가 누구에게 얼마를 보냈고 받았다는 내용을 모두 기록한 장부를 가지고 있다. 모든 사람들은 은행이 그 장부를 잘 관리하고 있을 것이라고 믿는다. 적어도 무슨 일이 생기면 은행이 정당한 책임을 진다고 생각한다. 그 신뢰가 있기 때문에 통장에 찍혀있는 숫자가 화폐로 쓰이는 것이다.
(실제로는 하나의 은행이 아니라 수많은 은행과 국가 기관이 복잡하게 얽힌 금융 인프라의 형태지만, 단순화를 위해 하나의 중앙은행만 있다고 생각하자.)
내가 통장에 있는 숫자를 지우고 다시 쓰더라도 내 실제 돈이 늘어나지 않는 이유이기도 하다. 왜냐하면 은행의 검증 시스템이 그것이 위조인 것을 알아내고 인정해주지 않기 때문이다. 신뢰의 기준은 은행이 가지고 있는 장부이며, 이 장부는 보안으로 겹겹이 보호되는 은행 내부 서버에 보관되어 있다.
제 3자가 개인 간 거래를 기록/검증해주고, 개인들이 이 제 3자를 모두 신뢰하기 때문에, 우리는 중복 지불 문제를 극복하고 편리하게 전자화폐를 쓸 수 있게 된 것이다.
여기까지가 우리가 비트코인에 대해 설명하기 전에 알아야 할 기본 지식이다.
두 줄로 요약해보자.
1. 화폐의 본질은 ‘상호 신뢰’이다.
2. 현대의 전자화폐는 ‘믿을 수 있는 제 3자’를 통해 중복 지불 문제를 해결한다.
중앙 집중화의 문제점
여기서 첫 번째 문제가 발생한다. 우리는 제 3자를 통해 전자화폐에 대한 신뢰를 확보한다. 그런데 제 3자를 통하는 경우 모든 거래가 중개자를 거쳐서 가야 한다. 따라서 화폐의 흐름과 통제권이 특정 기관에 집중되는 중앙집중적 구조가 된다.
1. 중개 비용
실제로 이 중개자들은 장부의 신뢰성을 보증하기 위해서 한 둘이 아닌 복잡한 프로세스를 거치게 되고, 필연적으로 중개 비용이 생긴다.
2. 중앙 기관의 무능이나 부패
정말 그 제 3자가 믿을만 한지도 문제가 된다. 대부분의 나라에서는 국가 기관이 화폐에 대한 통제권을 가지고 있다. 그래서 중앙은행이 금융위기를 타개하기 위해 화폐를 찍어내서 파산하는 기업들에게 돈을 지원할 수 있었던 것이다. 이에 반대하는 사람들은 많았지만, 국가가 화폐를 관리하기 때문에 개인들은 어쩔 수 없이 따를 수밖에 없었다.
그런데 국가 기관이 만약 무능하거나 부패했다면 더욱더 믿을 수가 없게 된다. 우리는 상상하기 어렵지만, 실제로 저개발 국가의 경우 중앙은행이 돈을 마구 찍어내 경제를 망가뜨린 사례가 있다.
3. 해킹의 타깃이 됨
장부가 한곳에 집중되어있으므로, 해커들이 노리기가 쉬워진다.
중앙 집중 구조에는 이런 문제점들이 있지만, 신뢰를 보증하고 안정성을 유지할 수 있다는 장점이 더 크다고 생각하기 때문에, 현대의 모든 금융 인프라는 중앙 집중 구조를 사용한다.
하지만 만약 중앙 기관이 없이도 데이터의 신뢰를 보증할 수 있다면 어떻게 될까?
장부를 모두에게 나눠주자
내가 귀중한 물건이 담긴 상자를 가지고 있다고 해보자. 어떻게 하면 이 상자를 안전하게 보호할 수 있을까?
방법은 2가지가 있다.
첫 번째, 상자를 금고에 꼭꼭 숨겨두고 비밀번호를 설정하는 것이다.
두 번째, 그 상자를 사람들이 가득한 시장 한복판에 갖다 놓은 뒤, 주변의 모든 사람에게 상자가 내 것이라고 알리는 것이다.
시장 한 가운데에 갖다놓으면?
그러면 시장에 지나다니는 모든 사람이 일종의 감시자가 되고, 누군가 그 상자의 물건을 훔쳐가려고 할 때 바로 알 수 있게 된다. 힘들게 보안 장치를 하지 않아도 집단의 힘을 이용해 상자를 보호할 수 있는 것이다.
비트코인은 바로 두 번째 방법을 이용해서 데이터의 신뢰성을 보증한다. 비트코인은 모든 거래 기록이 담긴 장부를 참가자들에게 나눠준다.
만약 A라는 사람이 자신의 장부에 있는 내용을 자신에게 유리하게 바꾼다고 해보자. 원래 기록은 'A가 B에게 5만 원을 보냈다'였는데, A가 자신의 장부 내용을 'A가 B에게 1만 원을 보냈다'로 바꿨다.
따라서 A는 4만 원이 아직 자신에게 있다고 주장한다. 그러나 B의 장부에는 분명히 'A가 B에게 5만 원을 보냈다'라고 적혀있다.
현재의 중앙 집중 시스템에서는 누구의 말이 진짜인지 알려면 은행에 가서 물어보면 된다. 하지만 관리자가 없는 비트코인과 같은 시스템에서는 다수의 참가자가 인정하는 쪽이 진짜가 된다.
모든 개인이 A와 B의 거래 기록을 가지고 있기 때문에, 만약 A가 절반이 넘는 참가자의 장부를 다 해킹해서 똑같이 바꿔놓지 않는 한, 자기 장부를 아무리 바꿔봐야 실제 거래로 인정되지 않는다. 비트코인을 사용하는 모든 참가자들이 서로서로의 감시자가 된 셈이다.
모든 사람들의 거래가 기록된 장부가 있다면, 한번 기록된 데이터는 진짜고 조작되지 않았음을 누구나 믿을 수 있다. 그 결과 실제로 현물이 오가지 않아도, 은행 같은 중개기관이 없어도, 사람들이 이 장부를 기준으로 '돈'을 교환할 수 있게 된다. 장부에 적힌 숫자가 '화폐'가 된 것이다.
우리가 앞에서 살펴봤듯이, 화폐는 종이든 동전이든, 컴퓨터에 기록된 숫자이든 상관없다. 중요한 것은 사람들이 그것을 믿느냐 안 믿느냐이다.
또한 이 장부는 어떤 사람이나 기관의 관리도 필요로 하지 않기 때문에, 우리는 중개자/관리자가 없는 화폐를 만들 수 있다. 이것이 암호화폐가 성립하는 기본적인 원리이다.
장부 만들기 1. 받아쓰기
그렇다면 이 장부는 어떻게 만드는 것일까?
여기서부터가 중요한데, 쉽게 이해하기 위해서 가상의 상황 속으로 한번 들어가 보도록 하자.
먼저, 10명의 사람들이 모여서 네트워크를 만든다.
(실제로 참가하는 사람은 훨씬 많겠지만, 설명을 위해서 10명이라고 하자)
[참고] 이 참가자들을 노드(node)라고 한다.
10명의 사람들은 각각 빈 종이 한 장, 펜, 특수 기계를 받게 된다.
준비물
10명의 사람들을 편의상 1번부터 10번이라고 이름을 붙이자. 10명의 사람들은 서로 돈을 주고받을 때마다, 그 내용을 다른 사람들에게 알린다.
예를 들어, '2번이 7번에게 만 원을 주었다라고 한다'면 2번 사람이 그 내용을 10명 모두에게 공지한다. 10명의 사람들은 모두 자신의 종이에 그 내용을 받아 적는다. 이런 식으로 종이 한 장이 꽉 찰 때까지 거래를 받아 적는다.
내용을 다 받아 적으면 종이를 파일철에 끼워야 하는데, 그러려면 먼저 '봉인'을 해야 한다.
장부 만들기 2. 봉인
요즘도 행정 처리를 하다 보면, 어떤 문서가 진본이며 수정되지 않았음을 확인하기 위해서 봉인 도장을 찍는 경우가 있다. 이와 비슷하게 우리도 이 거래 내역이 담긴 종이를 수정할 수 없게 봉인해야 한다.
여기서 아까 전에 종이, 펜과 함께 받았던 '특수 기계'가 사용된다.
이 기계는 한쪽에 입력값을 넣으면 다른 반대쪽에 출력 값이 나오는 아주 단순한 기계다.
예를 들어 내가 기계에 '30848'를 넣으면 출력 값으로 '93140'이 나온다.
그런데 이 입력값과 출력 값 사이에는 아무런 연관성이나 규칙이 없다. '30848'를 넣었을 때 '93140'이 나오지만 하나만 숫자를 바꿔서 '30849'를 넣으면, '11327'이 나온다. 다만 '30848'을 넣으면 몇 번을 반복해서 넣어도 반드시 '93140'이 나온다.
즉, 이 기계의 특징은
1) 입력값을 가지고는 출력 값을 쉽게 확인할 수 있다.
2) 출력 값을 가지고는 입력값을 알 수가 없다.
[참고] 이 기계를 '해쉬 함수'라고 한다.
이 기계를 사용해서 어떻게 봉인을 할 수 있는 걸까?
예를 들어, 우리가 '20113'이라는 숫자를 봉인하고 싶다고 하자. 먼저 네트워크는 다음과 같은 규칙을 정한다.
봉인된 숫자 ’ 20113'에 어떤 숫자를 더해서 기계에 입력하면, 반드시 '000'으로 시작하는 출력 값이 나와야 한다.
[참고] 규칙으로 정해진 이 출력 값을 '논스값'이라고 한다.
다시 말하면, 20113을 봉인하기 위해서는 '20113에 더해서 000으로 시작하는 출력 값이 나오게 하는 특정 숫자'를 찾아야 한다.
그러나 아까도 말했듯이, 이 기계는 출력 값에서 입력값을 역산할 수 없다. 그러므로 맞는 숫자를 찾는 유일한 방법은 모든 값을 다 넣어보는 것밖에 없다.
모든 참가자들은 모든 값을 하나하나 넣어보기 시작한다. 열심히 노가다를 하던 끝에 누군가가 답을 찾아낸다. 20113에 40372를 더해서 입력하면 (즉, 60485를 넣으면) 출력 값이 '00087'이 나온다는 것을 알아냈다.
찾아낸 사람은 이 비밀번호를 모두에게 알리고, 모든 사람들은 40372가 맞는 숫자인지 확인한다. 확인하는 방법은 간단하다. 기계에 넣어보면 된다. 다수의 사람들이 40372를 맞는 숫자로 인정하면, 40372가 20113을 봉인하는 번호가 된다.
이제부터는 누구도 20113이라는 내용을 수정할 수가 없다. 만약 누군가가 20113을 20114로 바꾸면, 그 즉시 봉인 번호가 맞지 않게 되기 때문이다. 기계에 넣었을 때 더 이상 000으로 시작하는 출력 값이 나오지 않는다.
사람들이 이 숫자가 원래 쓰인 것과 다른지 아닌지 알고 싶다면, 20114와 40372를 더해서 기계에 넣어보면 된다. 결괏값이 규칙과 맞지 않으면 이 숫자는 수정되었다는 것을 바로 알 수 있다.
즉, 내용을 바꿀 수 있다 하더라도, 바꾸는 순간 모든 참가자들이 이 내용이 진짜가 아니라는 것을 알게 된다.
장부 만들기 3. 거래기록 봉인하기
자 그럼 다시 종이에 거래 기록이 꽉 찬 순간으로 돌아가 보자.
한 페이지를 꽉 채운 순간, 자동적으로 문제가 나온다.
문제 : A + B + C를 더해서 기계에 넣었을 때 '000으로 시작하는 출력 값'이 나오는 C를 알아내라
(물론 '000으로 시작하는 출력 값'은 예시일 뿐 실제 문제는 훨씬 복잡하다.)
여기서 첫 번째 변수 A는 거래기록이다. 변수 B는 이미 주어져 있는 특정 숫자/문자열이다. C는 봉인 번호다.
받아쓰기를 끝내고 문제를 본 10명의 사람들은 이제 이 봉인 번호 C를 알아내기 위해서 열심히 기계에 모든 숫자를 넣어본다.
다시 열심히 노가다를 한 끝에 한 명이 '4a37b'라는 봉인 번호를 찾았다. 가장 먼저 코드를 찾은 그 사람은 다른 사람들에게 코드를 알려준다. 코드를 들은 나머지 사람들은 거래기록과 주어진 코드를 기계에 집어넣어본다.
찾아낸 사람의 거래 기록이 모두의 거래 기록과 동일하다면, 기계는 '000으로 시작하는 값'을 출력할 것이다.
절반 이상의 사람이 이 봉인 번호가 맞다고 동의하면, 찾아낸 사람이 받아쓴 종이는 '진본'으로 인정된다.
장부 만들기 4. 종이를 파일철에 끼우기
이제 모든 사람은 봉인 번호가 적힌 진본 종이를 복사해서, 자신의 파일철에 넣는다.
10명의 사람들은 다시 새로운 종이를 받고 다음 거래 기록을 또 받아쓴다.
이 과정을 반복하면 모든 사람이 같은 내용의 파일철을 갖게 되고, 이 파일철의 내용은 '진본'임을 신뢰할 수 있다. 만약 누군가 거래 기록을 수정하더라도, 언제든지 기계에 넣어서 이 내용이 '진본'인지 확인해볼 수 있기 때문이다. '진본'이 아닌 것으로 판명되면 즉시 파일철에서 제거되고, 다른 사람의 종이를 복사해와서 다시 끼우도록 되어있다.
여기까지 하면 이제 앞서 말했던 다음과 같은 특징을 가지는 장부를 만드는데 성공한 것이다.
1) 이 장부에 한 번 쓰여진 내용은 수정되거나 지워지지 않으며 영구적으로 저장됨
2) 어떤 사람이나 기관도 이 장부에 대한 권한을 가지고 있지 않음.
3) 모든 사람은 이 장부의 사본을 가지고 있으며 언제든지 꺼내볼 수 있음.
거래 내역이 담긴 종이 한 장을 블록(Block)이라고 하고, 이 블록(Block)이 엮여서(chain) 하나의 파일을 구성하기 때문에, 이 파일을 '블록체인(Blockchain)'이라고 부른다.
종이 한 장을 블록이라고 하며, 이것이 엮여있는 파일이 블록체인이다
무임승차자의 문제
그런데 왜 모든 사람들은 그 시간과 돈을 써서 봉인하는 과정에 참여하는 걸까? 누군가가 봉인해주기를 기다렸다가, 봉인된 종이만 전달받으면 되지 않나?
무임승차자 문제(Free-rider problem)는 명확한 소유자나 중앙 권력이 없는 조직에서 가장 흔히 일어나는 문제다. 명확히 책임을 지는 주체나 중앙 권력이 없기 때문에, 각 개인들이 협력하도록 강제할 수가 없다.
만약 참여자들이 종이를 봉인해야 할 유인이 없을 경우, 문제를 풀기 위한 시간과 노력을 생각하면 봉인에 참여하려는 사람이 아무도 없을 것이다. 장부는 많은 사람들이 봉인 과정에 참여하는 것을 전제로 하고 있기 때문에, 장부에 대한 신뢰도 깨질 수밖에 없다.
봉인하느라 수고한 사람에게 상을 준다
비트코인은 경제적 인센티브를 통해 무임승차자 문제를 해결한다.
가장 먼저 봉인 코드를 찾아낸 1명의 참가자는 일정량의 코인을 지급받는다. 보낸 사람이 없고 받는 사람만 있는 거래가 자동으로 생긴다. 아무것도 없는 무에서 공짜로 돈이 생기는 것이다.
이것이 비트코인이 발행되는 순간이다. 새로 발행된 비트코인 외에도 그 안에 담겨있는 모든 거래들에서 수수료를 조금씩 떼어서 봉인한 사람에게 준다.
예를 들어 5번이 가장 먼저 봉인 코드를 찾아내고, 다수가 동의한다면 그 대가로 5번은 발행된 비트코인과 거래 수수료를 받고, 그 거래는 자동으로 종이 안에 기록된다.
비트코인 보상은 네트워크의 신뢰를 유지하는 데 노력한 그 대가라고 할 수 있다. 이 보상이 있기 때문에 무임승차자 문제없이 네트워크의 신뢰가 유지된다.
중요한 점은 보상이 비트코인으로 주어진다는 점인데, 이로써 봉인에 참여하는 사람들은 비트코인 네트워크의 가치를 더 높여야 할 유인이 생긴다.
참여자들은 많은 시간과 비용을 투자해서 봉인을 한다. (현재 비트코인 봉인에 참가하기 위해서는 막대한 전기료와 컴퓨팅 파워가 필요하다.)
그런데 결과로 받은 것은 현금이 아니라 비트코인이기 때문에, 비트코인의 가치가 올라야만 수익을 낼 수 있다. 따라서 비트코인 네트워크가 사람들에게 신뢰를 받을 수 있도록 더 봉인을 열심히 하게 된다.
즉, 비트코인은 이 보상을 통해 참가자와 네트워크의 이익을 일치시킨다.
이는 기업에서 직원에게 주는 스톡옵션과 같은 원리다. 일을 열심히 한 직원은 스톡옵션으로 보상을 받는다. 주식을 받은 직원들은 주식 가치를 높이기 위해 더 일을 열심히 하게 된다.
[참고] 봉인을 통해 네트워크를 채굴(mining)이라고 하며 이 보상을 노리고 채굴에 참여하는 사람들을 채굴자(miner)라고 한다. 예시로 들었던 네트워크의 참가자들은 채굴자가 가진 하나의 컴퓨터라고 보면 된다.
[참고] 봉인에 시간과 노력을 들여 작업(Work)한 사람에게 비트코인으로 보상해주는 시스템을 Proof of Work (PoW)라고 한다.
사후 조작의 문제점
여기서 잠깐, 이미 파일철에 50장에 봉인된 종이가 꽂혀있다고 하자. 그런데 한 사람이 나쁜 마음을 먹고 32번째 종이에 있는 거래기록을 바꿔 치면 어떻게 될까?
남들이 51번째 봉인 문제를 풀고 있는 동안에, 나는 32번째 종이의 내용을 수정하고, 그 수정된 내용에 맞는 봉인 번호를 새로 계산하는 것이다. 그런 다음 마치 그것이 원래 봉인인 것처럼 바꿔놓으면, 다른 참가자들이 계산해봤을 때 둘 다 주어진 출력 값이 나오기 때문에 어떤 것이 진짜인지 구별할 수가 없다.
모든 블록은 연결되어있다
여기서 아까 말했던 B값의 정체가 드러난다.
봉인된 각 페이지는 거래기록인 A값, 시스템에서 주어지는 B값, 봉인 번호인 C값이 합쳐져서 요구되는 값이 나와야 한다고 했었다.
여기서 B값은 사실 이전 페이지의 출력 값(논스값)의 일부이다. 따라서 누군가 블록체인의 뒤로 돌아가서 새로운 내용과 봉인 번호를 찾는다면, 출력 값은 '000으로 시작하지만 그 뒤의 내용은 다른 값'이 나온다. 그러면 다음 블록의 B값도 자동으로 바뀐다. 한 페이지만 수정해도 다음 페이지의 출력 값이 연쇄적으로 바뀌는 것이다.
그러므로 중간에 하나의 페이지를 바꾼다 하더라도, 뒤에 있는 체인들이 연쇄적으로 바뀌어 모두 봉인이 깨진다.
유일한 위조 방법은 다른 사람보다 엄청나게 빠른 속도로 봉인 코드를 풀어서, 다른 사람들이 51번째 문제를 풀기 전에, 32번부터 50번까지의 페이지를 모두 바꿔놓는 것이다.
하지만 봉인 문제는 순수한 노가다의 영역이고, 이미 많은 사람들이 가장 최근 페이지에서 봉인 코드를 찾고 있기 때문에, 사기꾼이 문제를 푸는 속도는 다른 사람들이 봉인 코드를 찾는 속도보다 느릴 수밖에 없다. 사기꾼이 다른 사람들보다 더 긴 체인을 만드는 것은 불가능하다.
비트코인은 항상 가장 페이지가 많은 파일철을 진본으로 인식한다. 다음 페이지가 봉인되는 순간 그 외에 변형된 내용은 모두 무시된다. 따라서 봉인에 참가하는 사람들이 충분히 많을 경우 내용을 수정하는 것은 원칙적으로 불가능하다.
비트코인 네트워크는 가장 긴 파일만을 진본으로 인식해서 사후 위조가 불가능하다
다수가 거짓말을 하면 어떻게 하지?
비트코인 네트워크는 다수의 합의에 따라서 이 내용이 진짜인지 아닌지를 판단한다.
만약 10명이 있는 네트워크에서 1번 사람이 다른 5명을 매수해서, 1번이 위조한 블록이 맞다고 동의하게 만든다면 어떻게 될까? 과반수 이상이 동의했으므로 비트코인은 그 블록을 진짜로 인정한다.
그렇다면 나머지 4명은 다른 사람들이 담합했음을 알게 되고 네트워크에서 이탈할 것이다. 네트워크는 신뢰를 잃고 무너진다.
이를 '51% 공격'이라고 부른다.
51% 공격은 비트코인의 가장 큰 약점이며, 이론적으로 블록체인의 신뢰가 무너질 수 있는 유일한 상황이다.
네트워크에 독립된 개인이 충분히 많으면 담합이 어렵다
흔히 3-4개 기업이 과점하고 있는 시장에서는 가격 담합 논란이 불거진다. 그 이유는 시장에 플레이어가 적을 경우 담합이 쉽기 때문이다.
하지만 우리는 수백 개의 플레이어들이 있는 시장에서는 가격 담합을 이야기하지 않는다. 한 시장에 기업이 수백 개 수천 개가 존재한다면 그 기업들이 모두 하나의 합의를 이루기는 매우 어렵기 때문이다.
51% 공격에 대한 비트코인의 해결책은 네트워크에 독립된 참가자들이 많아지는 것이다. 비트코인 네트워크는 독립된 개인들의 네트워크를 지향하며, 참가자들이 수만, 수십만 명 단위로 많아지는 것을 가정하고 있기 때문에 다수가 담합하는 일은 발생하기 어려울 것으로 본다.
안타깝게도 나름 잘 해결해낸 앞의 문제들과 다르게, 51% 공격은 여전히 비트코인 네트워크의 가장 큰 위협으로 남아있다. 그 이유는 바로 채굴자들이 거대한 집단을 형성했기 때문이다.
비트코인 채굴자들이 대형화되는 이유
비트코인은 현재 어마어마한 숫자의 컴퓨터들이 채굴에 참여하고 있다. 말했듯이 비트코인은 봉인 번호를 가장 먼저 찾는 1명에게만 보상을 준다.
따라서 채굴로 수익을 얻기 위해서는 컴퓨팅 파워가 좋아야 한다. 남들보다 먼저 문제를 풀어야 하기 때문이다. 운이 좋으면 한번 정도는 봉인 코드를 1등으로 찾을 수도 있겠지만, 너무 리스크가 크다.
그래서 채굴자들은 연합을 만들고, 서로 풀어야 할 문제 양을 나눈다. 그리고 그중 1명이 답을 찾으면 나머지 구성원과 보상을 나눠갖는 형식이다. 채굴 품앗이라고 해야 할까?
이렇게 되면 한 번에 갖는 양은 줄어들지만, 보상을 얻을 확률은 훨씬 높아지면서 안정적으로 채굴 수익을 올릴 수 있다.
[참고] 이 연합을 마이닝 풀이라고 한다.
비유하자면 혼자서 하는 채굴은 자영업이고, 마이닝 풀은 안정적으로 월급을 받을 수 있는 대기업이라고 할 수 있겠다.
비트코인 네트워크가 커질수록 블록을 봉인해서 보상을 받기가 힘들어지기 때문에(문제의 난이도가 올라간다), 대형화된 마이닝 풀이 유리해진다. 규모가 주는 이점을 활용하여 마이닝 풀들은 더욱 대형화했고 이제는 어마어마한 양의 컴퓨팅 파워를 소유한 집단이 되었다. 특히 채굴에 들어가는 비용(전기료)이 싼 중국에서 거대 채굴업체들이 집중적으로 생겨났는데, 현재 비트코인 채굴의 대부분은 중국계 마이닝 풀이 점유하고 있다.
출처: Blockchain.info
그래프를 보면 상위 6개의 마이닝 풀이 전체의 77%가 넘는 블록을 처리하고 있다는 것을 알 수 있다. 모두 중국계이다. 게다가 1위인 AntPool과 2위인 BTC.com은 비트메인이라는 한 회사가 운영하고 있다.
채굴자가 대형화되는 것에는 여러 가지 문제가 있지만, 가장 중요한 것 중 하나가 51% 공격 가능성이 높아진다는 점이다. 몇몇 마이닝 풀이 손을 잡고 과반수 이상의 점유율을 확보해 비트코인을 무너뜨리려 할 경우 충분히 가능하다.
물론 이 마이닝 풀들은 비트코인을 통해 돈을 벌고 있기 때문에, 그런 상황을 바라지는 않겠지만, 어찌 됐든 마음만 먹으면 비트코인의 운명을 좌우할 수도 있는 힘을 지니고 있는 것은 확실하다.
요약
비트코인이 해결하고자 하는 문제와 해결책을 짧게 요약해보았다.
비트코인에서 사용하고 있는 블록체인은 블록체인의 시초라고 할 수 있지만, 가장 기능이 뛰어나거나 보안상 완벽한 블록체인이라고는 할 수 없다.
그래서 비트코인 블록체인이 가진 문제점을 해결하기 위해서 그 후로 수많은 파생 코인들이 생겨나게 된다. 블록체인은 코드가 완전히 공개된 프로그램이기 때문에 규칙을 바꿔서 수많은 방식의 암호화폐와 블록체인 기반 프로그램을 만들 수 있다.
하지만 근본적으로는 모두 이 비트코인 블록체인에서 파생되어 나왔기 때문에, 이번 글을 잘 이해했다면 복잡한 암호화폐의 세계를 이해하기 위한 큰 걸음을 내디딘 것이라고 할 수 있다.
송범근 작가님의 더 많은 글 '보러가기'