Blockchain 시리즈 – 블록체인의 거래 구조와 게임이론

41

블록체인이나 (비트)코인을 이야기하면, 보통은 트렌드 용어라서 들어봤는데, 사실 내용은 잘 모른다는 반응이 대부분이다. 그나마 관심있게 공부한다는 분에게서 “Decentralized”여서 중앙 통제 시스템이 없어도 잘 돌아가는 시스템, 궁극적으로는 서버를 모두 대체할 수 있는 시스템이라는 설명을 들을 수 있다. 그런데, 도대체 Decentralized가 왜 그렇게 중요한 포인트일까? 그럼 왜 인류의 역사 내내 중앙 통제없는 시스템이 제대로 성립될 수 없었고, 왜 블록체인이라는 시스템이 나와서야 그런 문제가 해결되었다고 하는걸까? 도대체 블록체인이 뭐길래?

(Source: 네이버 웹툰, 가우스 전자)

– 작가 분의 동의를 받지 않은 관계로 요청시 삭제합니다

 

Double Spending Problem

단순한 중고나라 현금 거래를 생각해보자. 딱히 중고나라를 폄하할 생각은 없지만, 핸드폰 하나 사려고 했다가 사기 당해서 돈만 날렸다는 불평을 주변에서 한 두번은 들어본 적이 있을 것이다. “평화나라”, “사기나라” 등등의 수많은 비아냥 멸칭들이 생겨난 것도, 그런 사기꾼들을 쉽게 걸러낼 수 없고, 경찰에 신고해서 조사를 기다리다가 결국엔 돈을 떼이는 일이 자주 발생하기 때문일 것이라고 생각한다.

대안으로 직거래를 한다고 하지만, 정작 직거래로 구매한 제품도 집에와서 다시 훑어보니 문제가 있는 경우도 많고, 아예 마음 편하게 수수료 주고 중고 거래 플랫폼으로 알려진 used.axxxxxx.co.kr 같은 웹페이지를 활용하는 사례도 종종 있을 것이다. 중고 거래 플랫폼을 쓴다는 말은 “중간 관리자“를 통한 거래를 한다는 말과 같다.

비슷한 맥락을 현금대신 어음으로 결제하는 방식의 신용거래에서도 찾을 수 있다. 은행같은 중앙 컨트롤 타워에서 양측의 거래를 정산, 기록, 보증, 관리해주는 서비스는 결국에는 중간 관리자가 있어야 거래의 안정성을 담보할 수 있다는 경험에서 나온 것이라고 봐야한다.

어음을 개인간에 거래한다면, A와 B 모두에게 어음으로 결제한 다음에 어느 한 쪽에 (or 양쪽에) 부도를 내는 일이 굉장히 잦을 것이다. 이런 식으로 여러 곳에 거짓 약속(False promise)을 하는 판매자들의 문제를 Double Spending Problem 이라고 부른다.

그럼 Double Spending Problem을 해결하기 위해서 Centralized 시스템을 구성할 수 밖에 없을까?

상호간의 신뢰만으로 구성되는 거래 시스템을 구축하겠다는 건 너무 순진한 생각인가?

일본에서 Paidy라는 서비스가 비슷한 컨셉으로 시행되고 있다. 온라인 상점에서 Paidy 결제를 신청하면, Paidy에서 먼저 지불해주고 유저들은 최대 18일안에 Paidy계좌로 송금해주면 된다. 이게 일본처럼 내부 신뢰도가 높게 쌓인 나라에서는 가능한 이야기일지 모르겠지만, 다른 나라에서는 가능한 이야기일까? (중고나라 사기꾼들을 보면 우리나라에서는…..?????)

 

블록체인의 거래 승인 구조

블록체인은 Double Spending Problem을 막기 위해서 시스템 참여자 모두가 거래를 승인하는 네트워크형 정보 처리 시스템을 응용한다. 위의 그림을 보면, 송금자인 Alice의 Public Key는 모두에게 공개되어 있고, 모두가 그 Key를 이용해서 거래를 승인하게 된다. Alice는 Bob에게 100달러를 송금하면서 Private Key를 이용해 자기 지갑을 열고, 거기에 Transaction을 기록 + 싸인해서 전송한다. 이 정보는 Alice의 Public Key와 함께 전송되어서 네트워크에 있는 모든 유저들이 Alice의 Public Key를 이용해 결제를 승인해준다. 모두에게 공개된 정보이므로, 누구 하나가 거짓말을 해봐야 거짓말을 했다는게 들통날 수 밖에 없다. (자세한 내용은 이전의 Byzantine Generals’ Problem 참조)

자 그럼 기록을 어디에 할까?

여기서 블록체인의 “블록”이 등장한다. 거래 내용을 “블록”에 기록해야하는데, 누군가 그 “블록”을 생성해줘야 한다. 누가 해 줄까?

비트코인 “광산”에서 “코인”을 “캔다”는 표현을 하던 분들이 기억나시는가?

입력 정보에 맞춰서 Hashed key를 매칭시키는 문제를 풀어낼 때마다 블록을 하나씩 생성해주고, 그 블록이 위의 거래 정보를 기록하는 저장 공간이 된다. 그 때 블록을 “캐냈던” Miner들에게 합리적인 보상을 해 줘야 그들이 계속해서 블록을 제공해주지 않을까?

방금 생성된 블록의 정보도 담고 있으면서, 그래서 블록이 거짓으로 생성된 것이 아니라는 걸 담보해주면서 동시에 “화폐”가 될 수 있다면? 비트코인은 바로 이런 관점에서 생성된 것이다.

말을 바꾸면, 코인은 블록이 다음 블록으로 연결되도록 만들어주는 Hash 정보를 담고 있는 열쇠이면서, 동시에 코인 경제 시스템에서 화폐 역할도 하는 2중의 기능을 갖고 있다.

** Alice가 Public key를 배포하는 시점에 Alice를 공격하려는 “해커”가 Alice의 공개키를 자신의 키로 바꿔서 중간에서 정보를 해킹하는 경우가 있기 때문에 (Main-in-the-Middle Attack), Public Key와 Private Key가

  1. 수학적 연관성을 갖도록 구조를 짜고 (Hashed Key를 찾아내는 계산 작업이 들어가는 부분)
  2. 안전하게 묶일 수 있는 Public-Key Infrastructure (PKI)도 필요하다

때문에 시스템 구성이 복잡해지고, 처리 속도가 느려질 수 밖에 없다. 구체적으로 어떻게 느려질까?

 

Proof of Work (PoW)가 작동하는 방식

위에서 앞의 블록에서 나온 Hashed key와 맞는 조합 (160개의 문자/숫자열)을 찾아내면 그 다음 블록이 생성되고, 그 때 찾아낸 값을 Nonce라고 부른다.  만약 2명의 Miner들이 동시에 Nonce를 찾아냈고, 그래서 Block 2가 1개가 아니라 2개가 동시에 생겨났다면? 둘 중 어느 Miner에서 Bitcoin을 줘야할까?

일반적인 시스템은 그 다음 Block이 생성될 때까지 기다려서, 더 길이가 길어진 블록이 앞으로 활용될 블록이라고 결론을 내리고, Block 3이 생성된 이후에 Block 2 만든 Miner에서 보상을 준다. 근데, 혹시 Block 3도 2개가 같이 만들어졌다면? 이거 끝이 있을까?

저런 Proof of Work 시스템이 언젠가는 더 길이가 긴 블록체인에게 보상을 주는 방식으로 문제를 극복할 수 있다지만, 정작 사기꾼이 개입할 수 있는 여지가 엄청나게 많다. 몇 가지만 예시를 들어보자.

 

Race attack

아주 짧은 시간 안에 2개 이상의 다른 주소로 같은 Coin을 보내는 꼼수를 쓰는 사기꾼을 생각해보자. 전형적인 Double Spending Problem의 사례인데, Block 2가 동시에 생성되기 때문에 Block 3을 먼저 만들어내는 쪽으로 유지되고, Block 3을 늦게 만들어내면 닭 쫓던 개 지붕 쳐다보는 격이 된다.

 

Finney attack

위에 비슷한 방식인데, Block을 (몰래) 미리 만들어 놓은 다음, 거래 정보를 2곳 이상으로 보내면서 기록하면 첫번째만 기록되고, 2번째는 기록이 안 되지만 정작 거래 정보는 발신된 상태가 된다. 역시 피해자가 발생한다.

 

Majority attack (51% Attack)

위의 두 종류의 사기보다 훨씬 더 어렵지만, 시스템을 완전히 망가뜨릴지도 모르는 엄청난 사기다. 보통 Conflict이 생길경우 더 길이가 긴 블록체인에게 코인을 주는 방식을 이용해서, 시스템 내의 블록 과반수를 장악해버리는 것이다. A가 B에게 엄청나게 많은 숫자의 코인을 보내줬다고 가짜 기록을 발신한 다음, 그 기록이 남은 블록 위에 빠른 속도로 다른 블록들을 우르르르르~ 추가해버리면 A는 영문도 모르는채로 B에게 엄청난 숫자의 코인을 보내주게 된다. 51% 장악하기가 어렵기는 하지만, 신규 코인에서는 흔히 발생하는 문제다.

 

게임이론의 등장

Schelling Point라는 게임이론 개념이 있다. 보통 흔히들 생각하는 방식, 일반의 상식대로 따라가게 되는 경향성을 지적하는 개념이다. 예를들어, 7864239, 3423123, 1000000, 2312354 같은 숫자를 던져놓고, 하나를 고르라고 하면 대개는 1000000을 고른다. 일반의 상식이다.

덧붙여서 Grim Trigger Equilibrium은 최악의 상황을 피하기 위해서 서로가 서로의 상황을 이해하고 타협하는 것이 인간의 본능이라는 컨셉에서 출발한다.

위의 Proof of Work가 정상적으로 작동하기 위해서는 Miner들이나 블록체인 이용자들이 합리적인 의사결정 구조를 갖고 있고, 집단적으로 합리적인 행동이 무엇인지에 대한 공감대가 형성되어 있어야 한다. 누구나가 51% Attack을 꿈꾸고 있다면 위의 블록체인 구조는 작동될 수가 없다. 모두가 남의 뒤통수만 치려고 하는 시스템이 유지되기 위해서는 어쩔 수 없이 Central authority가 개입해야하기 때문이다.

그런 지식을 바탕으로 하고 있는 상태에서 Schelling Point 형태의 행동 양식이 작동하면 시스템을 공격해서 부당 이득을 취하려고 하기 보다는 시스템을 활용하겠다는 접근법을 쓸 것이라는 기대가 바로 블록체인의 근간이다.

그러나…

중고나라도 모두가 사기를 치려고 하면 아무도 중고나라를 이용하지 않을 것이라는 극단적인 논리와, 모두가 서로에게 진실되면 중간 매개체가 필요없다는 이상주의적인 관점 사이의 어느 지점에서 우리 사회의 한 단면을 볼 수 있듯이, 블록체인 자체도 완벽하게 De-centralized 시스템으로만 운영되기는 어려운 점이 있다.

 

나가며 – What to do

블록체인 커뮤니티도 단순한 프로파간다 형태의 De-centralized 구조로 시스템을 운영할 수 없다는 사실을 인지하고 있다. Chain의 구성 방식도 Centralized와 Complete Network의 어느 중간 형태인 Extended star network를 만들어서 “모두가 결제를 승인”한다는 컨셉에서 한 발자국 벗어나고 있고, 계산 처리 속도를 높이기 위해서 네트워크 구조를 더더욱 단순화하는데 초점을 맞추고 있기도 하다.

어떤 형태의 네트워크를 골라서 Double Spending Problem과 Decentralized 시스템의 조화를 이룰 것인가는 고민에는 언제나 위의 게임이론 컨셉들이 활용된다. “모두”가 아니라 “일부”만 승인해야 되는 시스템이라면, “일부”를 누구로 고르느냐에 따라 Miner들의 참여 인센티브도 달라지고, 시스템의 결제 처리 속도도 달라지기 때문이다.

실제로, VISA 카드는 1분에 1,500만건의 거래를 처리할 수 있는 중앙처리 시스템을 갖추고 있는데, 비트코인은 4건, 이더리움은 겨우 15건을 처리할 수 있는 속도라고 서버 담당하는 분들에게 혹평을 듣는 사례를 본 적이 있다. 그렇다고 더 빠른 속도로 처리하려면 Nonce 하나 계산하는데 들어가는 시간을 지금보다 현격하게 줄여야하는데, BGP 풀이에서 봤듯이 시간 차이를 이용한 거래 검증 시스템이 고속화와 충돌이 일어나지는 않을까? GPU 계산이 느리니까 지금처럼 GPU 계산을 꾸준히 유지해야 거래 기록의 진실성을 유지할 수 있다던 어느 담당자 분께 그래픽 카드 계산이 더 빨라지면 어떻게 하실꺼냐니까 딱히 합리적인 대답을 못 내놓더라.

말은 번드르르하지만, 현실은 아직 첩첩산중이다.