가상화폐(virtual currency), 암호화폐(cryptocurrency)는 엄밀히 말하면 뜻이 좀 다르지만 일일이 따지기 귀찮아서 정의는 생략하고 대충 섞어 썼습니다. - 주

 

블록체인은 사토시 나카모토라는 이름을 가진 신원미상 인물이 만든 (것으로 나오는) 암호화폐 비트코인(bitcoin)의 위변조 및 이중지불 방지 기술이다. 정작 사토시가 2008년에 쓴 논문에는 비트코인이란 이름은 나와도, 블록체인이란 이름은 없다. 다만 논문에서 사토시는 '전자 코인을 디지털 서명의 체인으로 정의'했고, 블록을 생성하는 원리를 설명했기 때문에 나중에 누군가가 뜻을 잘 살려 붙인 이름인 듯하다. 비트코인은 2008년 세계금융위기와 대규모 양적완화로 인한 달러화 가치 하락을 겪으면서, 중앙은행과 같은 통화기구에 대한 불신이 팽배하던 무렵에 탄생한, 제3자의 간섭 없이 돌아갈 수 있는 가상화폐 시스템을 만들고자 하는 소망의 결실이라 할 수 있다. 네트워크 기반의 가상화폐가 신뢰를 얻기 위해서는 다음의 두 가지 문제가 해결되어야 했다.

 

첫째, 비잔티움 장애 허용(Byzantine Fault Tolerance)

 

이건 '비잔틴 장군의 문제'라고 이름 붙여진 네트워크 안정성에 관한 문제로, 1982년 (LaTeX 개발자로 유명한) 레슬리 람포트(Leslie Ramport)가 처음 제기한 문제다. 이게 뭐냐 하면 네트워크의 일부가 공격을 받아 위변조가 발생해도 올바른 원본을 계속 유지하기 위해서는 네트워크가 어떤 조건을 충족시켜야 하는가에 관한 문제이다. 가상화폐는 손으로 만질 수 있는 동전이나 지폐가 없이 오직 전자 정보로만 가치가 유효하기 때문에 해킹 공격에 더욱 민감할 수밖에 없으니 가상화폐가 이용자들로부터 신뢰를 얻기 위해서는 반드시 해결되어야 하는 문제였다.

 

둘째, 이중지불(double spending)

 

고의든 아니든 가상화폐는 같은 돈을 두 명의 다른 사람에게 지불하거나 같은 사람에게 두 번 지불하는 문제가 발생할 수 있는데, 이러한 문제를 근본적으로 차단할 수 있는 방법이 강구되어야 한다.

 

사토시 나카모토는 본인의 논문 'bitcoin'에서 이 두 가지 문제를 디지털 서명과 작업증명(proof-of-work)으로 해결할 수 있다고 주장했다.

 

1_ 거래는 어떻게 이루어지나

 

내가 가진 가상화폐에 대한 소유권이 유효하려면 내 이름으로 된 지갑에 돈이 들어왔다는 사실이 기록으로 남아 그 기록이 다른 모든 사용자들로부터 사실로 인정받을 수 있어야 한다. 여기서 이중지불의 문제를 해결하는 가장 확실한 방법은 거래내역을 네트워크의 모든 참가자에게 공개하는 것이다.

 

"내가 누군가에게 돈을 받은 사실이 전부 공개된다고? 싫다."

 

오해하지 마시라. 거래 내역이 해시(hash) 함수를 통해 암호로 변환된 값이 네트워크의 모든 노드와 공유한다는 뜻이니까. 내가 거래한 기록은 남아 있지만 그 내용을 볼 수는 없다.

 

비트코인 시스템에서 거래가 어떻게 기록으로 남는지 살펴보자. A가 B에게 코인을 준다면 그 코인에는 다음과 같은 기록이 만들어져 붙는다.

 

1) 이전의 거래 + 돈 받을 사람의 public key(계좌번호)를 해시로 변환한 값

2) 돈 보내는 사람의 서명

 

이 두가지를 합쳐서 새로운 거래가 된다. 이 새로운 거래는 다음 거래가 발생할 때 돈 받을 사람의 public key와 함께 해시로 변환된다. 즉, 새로운 거래 기록을 남기기 위해서는 이전 거래 기록이 반드시 필요하다. 그렇게 기록은 계속 연결되고 그래서 체인이라고 부른다.

 

2_ hash는 암호화기술이다

 

비트코인에서는 해시 함수를 많이 쓴다. 해시란 임의의 길이의 데이터를 고정된 길이의 데이터로 바꿔주는 함수이다. 예를 들어, 가장 많이 쓰는 SHA256 해시 함수는 다음과 같이 문자열을 64자리 16진수로 변환한다.

 

문자열 '1'을 해시 함수로 변환하면,

 

6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b

 

문자열 '2'를 해시 함수로 변환하면,

 

d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35

 

이번엔 에미넴의 노래 'Lose Yourself'의 가사 앞부분을 변환해 보자. 'His palms are sweaty, knees weak, arms are heavy There's vomit on his sweater already, mom's spaghetti He's nervous, but on the surface he looks calm and ready To drop bombs, but he keeps on forgettin''를 해시 함수로 변환하면,

 

617e7ff97107bf08baf2d9cafe78ec31eb58e86e515d479bd51544e45e0f7c02

 

이런 결과를 얻는다. 여기서 알 수 있는 해시 함수의 특징이 있다.

 

1) 입력값이 같으면 출력값도 항상 같다.

2) 입력값이 조금만 달라도 완전히 다른 출력값이 나온다.

3) 입력값이 아무리 짧거나 아무리 길어도 항상 같은 길이의 출력값이 나온다.

4) 출력값을 보고 입력값을 유추하는 것은 불가능하다.

5) 내가 원하는 출력값이 나오게 하는 것도 불가능하다.

 

비트코인에서는 작업증명 수단으로 hash 함수를 사용한다.

 

3_ 이중지불의 문제는 timestamp로 해결한다

 

거래(transaction)가 발생하면 거래기록에 시간도장(timestamp)을 찍는다. 새로운 거래기록은 이전 거래기록으로부터 시작하는 거니까, 만약 이중지불이 일어나면 같은 이전 거래기록을 가진 두 개의 서로 다른 새로운 거래기록이 생긴다는 뜻이다. 그 두 개의 기록에 시간도장이 찍혀 있다면 시간상 먼저 발생한 거래만 인정하고 나머지는 폐기하면 된다. 이것으로 이중지불을 해결할 수 있다.

 

4_ 비잔틴 장군 문제는 작업증명(proof-of-work)으로 해결한다

 

여기서 채굴이란 개념이 나온다. 비트코인은 10분 동안 네트워크에서 일어난 모든 거래기록을 모아 hash로 변환하고 블록을 만든다. 블록을 만드는 주체는 네트워크 노드라고 불리는 참가자들인데, 비트코인은 이 블록을 그냥 만들게 놔두지 않고 노가다를 시킨다. 그 노가다의 내용이란

 

1) 10분 동안의 거래기록에 값 하나를 붙여라. 그 값을 nonce라고 부른다.

2) nonce 값은 내가 맘대로 정할 수 있다. 대신

3) nonce와 함께 hash로 변환한 결과는 앞에 0이 열개 붙어야 한다.

 

저 '0 열개'가 바로 노가다의 양을 결정짓는 난이도 되시겠다. (난이도는 얼마나 빨리 블록이 생성됐냐에 따라 자동으로 조정된다. 빨리 생성됐으면 난이도가 올라가고 느리게 생성됐으면 난이도가 내려간다. 0의 개수가 달라지겠지.)

 

해시 함수의 특징으로 소개한 것들 중에 다섯번 째가 바로 원하는 출력값이 나오게 할 수 없다는 것이었는데, 앞에 0이 열개 붙는 출력값이 나오게 하라니? 다른 방법이 없다. 결국 우연히 그런 값이 나올 때까지 다른 nonce 값을 넣어서 hash 함수를 써보는 방법을 무한 반복하는 것이다.

 

0이 열개 붙는 hash 결과가 나올 확률이 얼마냐면 16의 10승 분의 1, 즉 2의 40승 분의 1이다. 대략 1조 분의 1 정도 된다. 같은 짓을 1조 번 반복해 시도하면 그 중에 한번 정도 저 값이 나온다는 얘기다. 조건을 만족하는 hash 값이 나오게 하는 nonce 값을 가장 먼저 찾은 노드는 블록을 완성하고 보상으로 12.5btc를 받는다. 이걸 채굴이라고 한다. 흔히 채굴을 "어려운 수학 문제를 풀어서 비트코인을 받는 것"이라고 하는데 엄밀히 말하면 문제를 푸는 게 아니라 답이 맞을 때까지 수없이 아무 답이나 써보고 찍는 거에 가깝다.

 

도대체 왜 이런 일을 시키는 것일까? 바로 비잔틴 장군 문제를 해결하기 위해서이다. 노드들이 작업증명을 하게 하면 다음과 같은 이점이 생긴다.

 

1) 만약 해커가 비트코인 거래기록을 위변조하려면 노드가 되어 위변조된 거래 기록이 담긴 블록을 만들어 붙여야 하고, 그러려면 저 노가다를 해야 한다.

2) 그런데 그렇게 만든 블록도 다른 노드가 만든 블록이랑 비교해 다수결에서 밀리면 폐기된다.

3) 그래서 확실히 위변조에 성공하려면 작업증명 노가다를 하는 과반수의 노드를 확보해야 한다.

4) 일단 그런 컴퓨팅 파워를 해커가 갖는 게 불가능하지만 만약 가졌다고 하면 그것은 이 시스템의 주인이 되는 것과 다름없어지는 것이고, 위변조를 통해 얻는 이익보다 채굴로 보상을 받고, (자기 꺼인) 네트워크를 살리면서 얻는 이익이 더 클수밖에 없다.

 

이래서 비잔틴 문제가 해결된다. 즉, 작업증명이라 불리는 채굴 노가다는 블록체인 네트워크를 공격하려는 해커들의 이점을 없애기 위해 괜히 시키는 삽질이라고 할 수 있다.

 

5_ 블록이 계속 쌓이면 언젠가 디스크 공간이 터지는 것 아님?

 

신뢰할 수 있는 새로운 블록이 생성되고 나면 그 이전의 거래 기록은 꼭 보관하지 않아도 된다. 이전 거래는 지워버리는 것이 아니라 전체를 합쳐서 hash로 변환해 블록에 넣는다. 이전 거래정보가 아무리 많아 봤자 hash로 변환하면 32byte밖에 안된다. 이것을 Merkle Root라고 한다.

 

암튼 비트코인의 블록체인은 이런 원리로 작동한다.

 

6_ 비트코인은 2100만개까지만 생산된다는데

 

최초의 비트코인은 2008년 (아마도 7월)에 거래가 발생했다. 그 때 이후로 10분마다 한번씩 블록이 생겼다. 사토시 나카모토는 블록이 생길 때마다 최초의 nonce 값을 찾은 사람이 50btc를 가져갈 수 있으며, 보상금은 액수는 4년이 지나면 절반으로 감소하도록 규칙을 짰다. 그러니까 2012년 7월 이후로는 블록 생성 보상이 25btc가 되었으며, 2016년 7월 이후로는 12.5btc가 되었다. 아마도 2020년 7월이 지나면 6.25btc가 될 것이다. 무한등비급수를 써서 계산해 보면 앞으로 생산될 비트코인의 총액이 나온다.

 

하루 24시간을 10분으로 나누면 하루에 144개의 블록이 생성된다는 계산이 나온다. 초기값을 계산해보면 블록 하나당 50btc, 하루에 144블록, 1년이 365일, 그리고 4년(윤년 포함) 해서

 

50 x 144 x (365 x 4 + 1) = 10,519,200

 

즉, 처음 4년 만에 10,519,200 btc가 생기고, 그 다음 4년이 지나면 그것의 절반인 5,259,600btc가 생긴다. 전부 합하면

 

10,519,200 / (1 / 0.5) = 21,038,400btc

 

이렇게 된다. 이 숫자가 앞으로 생산된 비트코인의 최대치이다. 계산 결과에 의하면 알려진 것보다 38,400이 더 나오는데 저 숫자는 어떻게 되는 건가. 나도 잘 모르겠다. 만약에 비트코인의 채굴이 다 끝나면 노가다를 하는 네트워크 노드들은 어떤 보상을 받는가? 그땐 거래 수수료를 올려 받아서 보상받는다.

 

사토시가 고안한 블록체인 기반의 암호화폐는 적어도 지금의 상상력으로는 "절대로 뚫리지 않을 것 같은 보안성"이 가장 큰 장점이다. 총통화량이 정해져 있어 인플레이션이 발생하지 않을 것이라는 것도 장점이다. 또한 중앙기관을 배제한 통화 시스템을 만들었다는 점에서 혁명적 발명이라 할 수 있다. 중앙기관이 없어서 좋은 점은 무엇일까? 일단 하나 있기는 하다. 기관이 일을 너무 못해서 기존의 통화체계가 완전히 망가졌을 때도 비트코인은 망가지지 않을 거라는 거다.

 

비트코인이 꼭 장점만 있다고는 할 수 없다. 화폐의 가치는 통화량에 따라서 달라질 수 있지만 암호화폐는 시스템의 신뢰도에 따라서 가치가 달라질 것이다. 현재의 암호화폐 가치가 큰 변동성을 갖는 이유는 아마도 정확한 가치에 대한 합의가 이루어지지 않았기 때문으로 보이며, 장래에 비트코인의 사용처가 지금보다 명확해지면 변동성에 대한 문제도 어느 정도는 해결되지 않을까 예상한다. 다만 지금으로서는 상상하기 어려운 블록체인 시스템의 보안 문제가 단 한번이라도 발생할 경우엔 하루아침에 거품이 될 위험도 상존한다.

 

국가경제에 암호화폐가 차지하는 비중이 커질수록 자국 통화만을 통제할 수 있는 중앙은행의 통화정책은 그 영향력이 점점 약화될 것이다. 통화정책은 특정 국가 내에서 단기적으로 발생하는 경기 침체나 유동성 문제를 해결해 줄 수 있는 기능이 있는데 암호화폐의 비중이 커질수록 그 기능을 쓰기가 점점 어려워질 것이다.

 

암호화폐가 앞으로 어떻게 쓰이게 될런지는 나도 모르겠다. 다만 작년 한해 우리나라에서 불어닥쳤던 비트코인 투기 광풍은 알파고나, 사물인터넷 따위는 저리가라 할 정도로 "혁명"에 가까운 모습을 보여 줬다. 정부가 거래소 폐쇄까지 거론하면서 강하게 압박하고, 논객들이 암호화폐를 "금융사기"로 몰아가는 모습은 통제가 불가능하고 예측이 불가능한 미래에 대한 두려움이 그대로 투영된 결과이다. 모르면 두렵고 두려우면 피하게 된다. 하지만 피하고 싶어도 피할 수 없을 것 같으면 두려움은 일파만파가 된다. 방법은 하나. 더 많이 알기 위해 노력하는 것이다. 그것이 혁명에 대처하는 우리의 자세가 아닐까 한다.

 

참고문헌

Nakamoto, Satoshi. "Bitcoin: A peer-to-peer electronic cash system." (2008).

https://blog.iwanhae.ga/introduction_of_bitcoin/

'시사' 카테고리의 다른 글

스마트시티?  (0) 2020.08.17
2018년 7월 고용 동향  (0) 2018.08.27
고용 통계 기본 용어에 대해 알아보자  (0) 2018.08.27
인터넷 망중립성 논쟁과 Economides and Tåg(2012)  (0) 2018.04.29
시장획정과 SSNIP 테스트  (0) 2018.04.09
Posted by jujaeuk
,