記錄

BITCOIN PROTOCOL AND CONSENSUS 본문

Block Chain/Fundamental

BITCOIN PROTOCOL AND CONSENSUS

surhommejk 2018. 7. 24. 12:31

버클리대에서 비트코인에 대한 강의를 해놓은 것을 정성 들여 번역해둔 사이트를 발견했다. (https://dreamplus.io/blockchain_academy1) 그냥 듣기 보다는 정리하면서 듣는 것이 기억에 더 많이 남을 듯 하여 찾아보며, 또 정리하면서 이 강의를 듣기로 했다.




#1 비트코인은 어디서?


... Born out of the Cypherpunk movement, a libertarian fight for privacy and self-governance...


궁금했었던 부분인데 덕분에 찾아보고 궁금증을 해결하게 되었다. 블록체인이라는 것, 비트코인 이라는 것이 왜 갑자기 세상에 나오게 된 것일까? 어떤 이유에서 만들어 진걸까? 하는 의문은 들었지만 자연스럽게 '그냥 기술이 발전하니 저런 것도 나오나보다' 하고 넘어갔던 것 같다. 사이퍼펑크에서 시작된 것인데 사이퍼펑크라는 개념 자체도 처음 듣던 것이라 찾아보았다.


사이퍼펑크란 암호화 기술을 개인의 자유와 프라이버시를 위해 사용하는 사람들을 일컫는 용어이다. 사이퍼펑크라는 책의 표지에 있는 "약자에게 프라이버시를, 강자에게 투명성을" 이라는 문구가 직관적인 이해에 도움이 되었다. 암호화 기술을 사회적 변화, 강압적 권력 및 시스템에 대한 저항의 수단으로 사용하는 사람들인 것이다. 강의에서는 '빅브라더'의 출현에 대한 저항이라고도 소개하고 있었다.


이처럼 사이퍼펑크가 주체가 되어 '빅브라더'의 출현에 저항하고자 하는 움직임 속에 나온 것이 비트코인인 것이다. '빅브라더'의 출현을 풀어서 쓰자면 권력으로서의 정보 집중, 중앙 통제(= 자유 억압)과 같은 것이라 할 수 있다.




#2 비트코인이 가진 특성?


Anonymous(익명성)    블록체인 네트워크 참여자 혹은 거래 상대방이 누군지 알 수 없다(알 필요도 없고)


Decentralized(분산화)    공개원장 시스템을 고려해보면 쉽게 이해됨


Trustless(신뢰가 필요 없다)    강의를 들으며 이 부분을 특징으로 잘 뽑았다는 생각이 들었다. 기본적으로 신뢰가 내재되어 있기 때문에 신뢰가 필요 없다는 개념이다. 시스템에 대한 신뢰가 있기 때문에 매 거래에 상대가 누군지 등에 대한 것이나 시스템에 속한 나의 자산에 대한 걱정이 없어진다는 의미이다. 물론 이 시스템에도 취약점이 있긴 하지만 이를 기술적으로 건드는 것은 제약 사항이 크기 때문에 시스템에 대한 신뢰가 가능하다.


한 가지 궁금한 것은 이런 기본적인 시스템에 대한 신뢰가 기술에 대한 이해에서 와야 진짜 의미가 있는 것이지 '가상화폐 거래 중개소'에 대한 '막연한 신뢰'에서 오면 안된다는 것이다. 우리나라는 글쎄다.


Consensus(합의)    비트코인 프로토콜 자체에 대한 합의, 신뢰를 의미한다.


Global(세계화)    계좌가 필요없고 단지 인터넷만 필요(정확히 말하면 공개키와 개인키겠지)하다는 측면에서 Global을 꼽았는데 그냥 특징 최대한 채우려고 뽑은 느낌이 들었다.




#3 기존의 은행과 차이점


은행에서는 개인 정보와 모든 거래 내역을 보관하고 관리한다. 이것을 decentralized system으로 대체하고자 하는 것이 비트코인이다. 비트코인을 이용하면 은행을 거치는 것이 아니라 개인 대 개인이 거래가 가능해지고 개인 정보를 저장할 필요가 없다.




#4 신원 관리(IDENTITY)


모든 객체는  unique한 공개키(public key)를 가진다. 또 이에 대응하는 비밀키(private key)를 가진다. 공개키는 돈을 받기 위해, 비밀키는 돈으로 바꾸기 위해 존재한다.




#5 Unspent Transaction Output (UTXO) model


비트코인에서 사용하고 있는 화폐 관리 모델이다. 



위 그림에서 보듯이 input은 채굴 혹은 누군가로부터 비트코인을 받았을 때의 경우이다. 채굴의 경우 없던 utxo가 생성되며 누군가에게 비트코인을 받은 경우는 코인을 보내는 사람이 갖고 있던 utxo가 쪼개지거나(금액이 맞지 않을 경우) utxo가 그대로 옮겨오게 된다(금액이 딱 떨어지면). 여기서 그대로 옮겨온다는 말은 utxo에 대한 unlock의 권한이 코인의 수령자에게 생기고 반대로 코인을 보낸 사람에게는 unlock의 권한이 없어진다는 의미이다. 


이런 맥락에서 내가 남에게 보낼 때에도(output 발생) 기존에 내 지갑에 있는 utxo와 딱 맞는 금액을 송금 할 경우 그대로 해당 utxo가 나에게 lock이 되고 보내는 상대에게 unlock이 되며 금액이 딱 맞지 않은 경우 기존에 나에게 unlock 되어 있던 utxo를 쪼개서 보낼 금액만 보내고 남는 금액은 utxo로서 나의 지갑에 존재하게 된다




#6 RECORD-KEEPING


Q) How do we keep tack of this ledger of transactions?

A) With a distributed database




기존에는 거래가 이뤄지면 은행에서 데이터를 모두 직접 관리하였다. 중앙 집중식이었다는 의미이다. 하지만 이처럼 블록체인에서는 원장이 각자에게 보관되고 기록되고 갱신된다. 하지만 이런 방식은 '만약 누군가가 자신의 원장을 조작하면 어떻게 해야 하는가?' 혹은 '누군가 이중으로 돈을 보내면 어떻게 되는가?(double spend attack)' 라는 의문을 들게 만든다.


이를 방지하기 위한 시스템이 '투표 시스템'이다. 모든 거래에서는 proposer과 voters가 발생한다. proposer는 transaction을 발생시키고  이를 모두에게 제안한다. 그러면 voters 는 투표를 하게 된다. 즉, 모든 원장(각각이 지닌 원장)의 갱신은 매 거래마다 발생되는데 갱신 이전에 반드시 투표의 과정을 거친다는 것이다. 따라서 잘못된 원장(악의적인 목적으로 조작된 원장) 혹은 이중 지출 공격(double spend attack)을 방지할 수 있다.


하지만 또 여기서 추가적으로 의문이 생길 수 있다. 이러한 조작된 거래, 잘못된 거래를 방지하고자 투표 시스템이 있다면 이 투표 시스템 자체를 조작해버리면 되지 않을까? 하는 의문이다. 비트코인 시스템에서는 모두가 익명성을 바탕으로 거래가 이뤄지기 때문에 한 사람이 수 많은 거래 주체로 활동할 수 있어서 투표 시스템 자체를 조작 하는 것이 쉬워 보인다. 한 사람이 복수의 거래 주체로 활동할 수 있다는 것은 그만큼 내가 원하는 방향으로 투표를 할 수 있기 때문이다.


그래서 이를 방지하기 위한 것이 '작업증명'의 개념이다. '작업증명'의 개념에 대해서는 쉽게 풀어놓은 유투브 링크를 남긴다.


출처 : https://www.youtube.com/watch?v=ixLxHNuNc_o

핵심은 '작업증명' 덕분에 투표에도 비용이 발생(an expensive voting process)하기 때문에 투표의 조작은 힘들다는 것이다.


하지만 이 '작업증명'의 개념이 존재함에도 불구하고 결국엔 악의적인 51%는 막지 못하는 시스템이다.(a malicious majority can control the network)  결국 임의의 참여자는 정직하다는 전제와 이런 성향의 임의의 참여자가 대다수라는 전제하에 시스템에 대한 신뢰가 생기는 것이다. (Bitcoin assumes an honest majority)


Comments