Blockchain 시리즈 – Byzantine Generals Problem

알고 지내는 VC 한 분이 블록체인 (Blockchain)으로 코인 찍어서 펀딩한 회사로 자리를 옮기셨다. (솔직히 저렇게 쉽게 펀딩되는거보면 나도 “인공지능이 곧 인류의 삶을 바꾼다” 같은 헛소리하는 답답한 VC들 상대하지말고 시류에 편승해서 코인이나 찍을까는 욕심이 솟아오른다 ㅋㅋ)

회사 잘 되었으면 좋겠다고 덕담을 하는데, 이제 블록체인 공부 좀 하셨는지 계속 BGP, BGP로 노래를 부르시더라. 그러나 정작 BGP를 해결하는게 얼마나 어려운 일이고, 그런 아이디어를 담은 블록체인을 회사 모델에 적용하는건 또 얼마나 힘든일인지 이해도가 0에 수렴하고 있다는 느낌을 받았다. (뭐… 흔한 일이다. 블록체인 한다?는 사람들끼리 “코인”이라고 하면 바보 취급 받으니까 요샌 “BGP”라는 단어로 블록체인 관계자인지 구분하는데 쓰는거 같다.)

이전에 다른 글에서도 몇 차례 언급한대로, 블록체인의 각각의 구성 요소들은 작은 서버 처럼 데이터를 기록하고 있고, 이걸 묶어서 네트워크 형태로 구성하는데, 모두가 똑같은 정보를 다 기록하고, 그 네트워크를 효율적으로 운영한다는 게 쉬운 일이 아니다. 비트코인 (Bitcoin)이라는 것도 블록체인에서 BGP를 해결하려는 시도 중 하나였는데, 구조적으로 scaling 이슈가 생길 수 밖에 없었고, 요즘 BGP 극복하려는 분들은 게임이론에서 해결책을 찾고 있기도 하다. (더 자세한 내용은 시리즈 글 후반부에 설명한다.)

우선 첫번째 시리즈에 도대체 BGP가 뭔지 좀 정리해보자.

 

1. Byzantine Fault Tolerance (BFT)

(Source: Historie 9권)
– 알렉산더 대왕시절 명재상 에우메네스의 활약을 그린 이와아키 히토시의 만화
– 보스포러스 해협을 낀 성곽도시 공격의 어려움을 잘 보여주는 설명의 한 장면

이스탄불이라는 도시를 아시는가? 현재는 터키의 수도고, 로마제국 당시에는 비잔티움이라는 이름으로 불렸던 도시다. 흑해와 지중해를 잇는 지정학적 중요성 때문에 고대 그리스 시절부터 1453년에 오스만 제국에게 점령될 때까지 여러차례 전쟁의 포화에 휩쓸렸던 도시인데, 3면에 바다를 끼고 있고, 육지쪽으로 연결된 부분은 가파른 언덕으로 되어 있어서 공격하기 어렵기로 유명하다.

그런 비잔티움을 공격하는 n개국 연합군을 한번 생각해보자. 주변 모든 국가의 병력이 총 동원 되어야 성의 방어를 뚫을 수 있고, 연합군 중 일부라도 공격 타이밍을 못 맞추거나, 일부러 느슨하게 공격하는 등의 “꼼수”를 부리면 성 점령에 실패한다고 가정해보자.

연합군 장군들이 동시에 같은 행동을 취해야하는데, 이렇게 모든 참여자의 “Perfect coordination”을 만들어내기가 여간 어려운 일이 아니어서, 이걸 해결하는 고민을 “Byzantine Generals Problem (BGP)”이라고 부른다.

좀 더 정확하게 이야기하면, Byzantine Fault Tolerance (BFT)라고, 한 두명의 문제아들이 만들어내는 시스템의 장애를 극복할 수 있는 구조, 어떻게든 불협화음이 생기는걸 극복하고 Concensus가 만들어질 수 있는 구조에 대한 고민을 말한다. 비잔틴이라는 도시 이름이 들어가 있는데서 볼 수 있듯이 수학적으로는 굉장히 길게 논의, 토론, 연구되었던 주제다.

이게 도대체 왜 블록체인과 관련있는 거냐고? 블록체인은 거래 쌍방 뿐만 아니라 네트워크를 이루는 모든 구성원들이 같은 내용을 (거의) 동시에 기록해야한다. 누구 하나라도 거짓된 거래 내역을 기록하는게 무서워서 여태까지 Centralized system을 구성했던 것이다. (물론 다른 이유도 있다. 다른 시리즈 글 참조)

 

2. Byzantine Generals Problem – 총사령관 버젼

우선 연합군에 총사령관이 있고, 나머지 부하 장군들 중 일부에게 비잔틴에서 밀사를 보내서 같이 공격하지 마라고 뇌물을 바친 케이스를 고려해보자.

여기서 총사령관이 새벽 6시에 전원 공격 명령을 내렸는데, 장군 2가 장군 1에게 아침 7시에 전원 공격이었다고 말했다면 장군 1은 어떻게 해야할까? 시간적인 여유가 있다면 당연히 총사령관에게 확인 절차를 밟으면 된다. 근데 시간이 없다면? 매번 명령을 받을 때마다 계속 찾아와서 다시 확인하는 부하가 있다면 총사령관은 어떻게 반응할까? 총사령관이 있다고 해도 1명의 장군이 매수당하면 이렇게 시스템에 위협을 주게 된다.

그럼 장군들 숫자가 많이 늘어나서 매수당한 장군의 비중이 확 줄어든다면?

전체에서 매수 당한 비중이 0이 아닌 다른 숫자라면, 분명히 주변의 다른 장군들에게 잘못된 정보를 줄 수 있는 여지가 생긴다. 위의 그림에서 장군2는 총사령과과 장군1이 새벽 6시 공격이라고 알려줬으니 장군3의 정보가 그르다고 판단할 수 있겠지만, 장군3의 그릇된 정보를 시스템 전체적으로 완전히 제거하는 것은 불가능하다.

근데, 이런거 원래 총사령관 명령에 무조건 복종하는거 아니냐고? 장군들 중에 누가 매수를 당했고, 그래서 주변 다른 장군들에게 잘못된 정보를 주는 문제는 총사령관 명령에 무조건 복종하면 해결되는거 아니냐고?

만약에 총사령관이 매수당했으면 어떻게 될까?

“탈중앙화” 시스템을 만드려고 하는 사람들이 중앙에서 내려온 명령에 무조건 복종해야하는 구조가 싫어서일텐데, 위를 보면 중앙이 오염되면 시스템 자체가 완전히 망가질 수 있다는 우려가 현실적으로 다가온다. 실제로 우리가 현재 활용하고 있는 중앙 서버 기반의 시스템의 가장 큰 취약점은 중앙 서버 그 자체이다.

 

3. Byzantine Generals Problem – 총사령관 없는 버젼

저렇게 총사령관이 매수당하면 문제가 생길 수 있으니 차라리 총사령관이 없고, 많은 수의 장군을 둬서 매수 당한 (소수) 장군의 메세지가 총공격을 어지럽히는걸 막자는 아이디어를 생각해보자.

공격 결정은 누가해야할까? 장군 10명이 있으면 모두 다른 생각을 할텐데? 어떻게 운이 좋아서 모두가 합의한 경우를 한번 가정해보자.

이제 공격 명령을 전달해야하는데, 장군1이 장군2에게 새벽 6시 공격을 알리고, 장군2는 매수당했으니 장군 4에게 아침 7시 공격이라고 잘못된 정보를 전달한다. 장군4는 장군3에게, 장군3은 장군1에게 아침 7시 공격 정보를 전달해주는 체인을 구성하게되면, 결국 장군 1은 중간에 누군가가 정보를 왜곡했다는 걸 알 수 있다. 근데 누가 했을까?

그럼 한 명이라도 거짓말 하는 걸 막기 위해서, 모든 장군이 다른 모든 장군들에게 메세지를 전달하는 경우를 생각해보자. (Network Theory에서는 Complete network라고 부르는 구조다. 모두가 모두에게 연결된 상태.) 장군의 숫자가 늘어날수록 커뮤니케이션은 복잡해지고, 우리는 이런걸 보통 “관료제의 병폐”라고 부른다. Gordon Gekko가 Teldar Paper를 인수하려고 주주총회에서 기존 대주주들과 설전을 벌일 때 아래와 같은 표현을 썼다.

Teldar Paper has 33 different vice presidents each earning over $200,000 a year. Now, I have spent the last two months analyzing what all these guys do, and I still can’t figure it out. One thing I do know is that our paper company lost 110 million dollars last year, and I’ll bet that half of that was spent in all the paperwork going back and forth between all these vice presidents.

20만불씩 받는 부사장들 33명이 매년 1억달러 이상을 쓰고 있는데, 지네들끼리 서류만 주고 받은거 말고는 어디에 쓰고 있는지 도무지 모르겠다는 저 비아냥 속에, 동등한 레벨의 장군들 수십명으로 구성된 부대에서 모두가 모두에게 연결된 상태를 만들어 내는게 얼마나 많은 비용과 시간이 소모되는 일인지, 그래서 Perfect coordination을 이끌어내기가 얼마나 어려울지에 대한 의미가 담겨 있다고 생각되지 않나?

 

4. 블록체인비트코인이 BGP를 해결한 방법

이런 BGP 문제를 서버 쪽에서 해결하려는 시도가 사실 오래전부터 있었다. 중앙 서버에 의존하면 당장은 효율적으로 돌아갈 수 있겠지만, 중앙 서버가 터지면 시스템이 마비된다. 거래 기록을 여러개 블록에 남겨서 보안에 쓴다고들 하는데, 그렇게 작은 블록 개념이 아니라, 여러개 블록들의 집합체로 구성된 서버가 운영되면, 서버 설계, 유지, 관리에 들어가는 물적, 인적 비용을 획기적으로 절감할 수 있다. 쉽게 생각하면 파일 다운로드를 받는데 하나의 중앙서버에서 받게되면 그 서버는 접속자 숫자와 데이터 전송량에 맞춰서 로드를 감당할 수 있도록 구성해야하지만 (비용이 어마어마하다), 이걸 토렌트에서 다운받는다고 생각해보자. 굳이 어마어마한 비용을 들여서 서버를 만들어야 토렌트로 파일을 다운 받을 수 있나? 서로가 서로에게 조금씩 나눠주면서 파일을 다운 받는 아이디어가 바로 네트워크형 서버의 핵심 아이디어고, 블록체인도 같은 선상에 서 있다.

일단 대용량의 동영상 파일 말고, 거래 내역 같은 단순 암호 정보를 네트워크에 공유한다고 생각해보자.

중앙 서버가 없으니까, 총사령관이 없는 구조와 동일하다고 보면 되는데, 여기서 어느 한 블록이 오염(?)되었다면 어떻게 될까? 위에 그림으로 표시한 순환형 네트워크 (Circular network)나 모두가 모두에게 정보를 전달하는 완성형 네트워크 (Complete Network)는 정보 보존이라는 측면이나, 효율성이라는 측면에서 문제점을 내포하고 있는 구조라고 설명했다.

그럼 비트코인은 BGP문제, Perfect coordination을 만들어내기 어려운 문제를 어떻게 해결했을까? 일단 거래 기록을 남기는 “보안” 시스템이라는 것에 초점을 맞춰보자. 내가 알고 있는 저 기록을 다른 사람도 똑같이 갖고 있고, 잘못 기록했더라도 바로 잘못을 확인할수만 있으면 해결되지 않을까?

위에서 장군4는 장군2가 장군1의 명령을 제대로 전달했는지 아닌지를 알 수가 없다. 근데 만약에, 장군4가 장군2의 정보만 받는게 아니라, 장군1->장군2->장군4로 이어지는 연결고리 전체의 정보를 받을 수 있다면?

Case 1: 장군2 왈 – 아침 7시 공격

Case 2: 장군2 왈 – 아침 7시 공격 | 장군1 왈 – 새벽 6시 공격

이제 장군 1로 돌아오는 정보 체인을 생각해보자

Case 3: 장군3 왈 – 아침 7시 공격 | 장군4 왈 – 아침 7시 공격 | 장군2 왈 – 아침 7시 공격 | 장군1 왈 – 새벽 6시 공격

이렇게 정보가 체인 형태로 넘어오면, 장군1이 “도대체 누가 7시라고 한거야?”라고 묻기 전에, 장군2에서부터 잘못된 정보가 전달된 것을 확인할 수 있다. 애시당초 장군4는 장군2가 잘못된 정보를 전달했다는 것을 눈치채고, 장군1에게 재확인을 하려고 할 것이다. 만약에 한번의 거래 내역을 블록에 기록하는데 시간(precisely 계산비용)이 든다면 어떻게 될까? 장군2가 장군1의 메세지를 바꾸려는데 시간이 더 걸릴 것이기 때문에, 장군4는 정보가 전달되는 시간을 보고 장군2가 거짓말을 했는지, 제대로 장군1의 메세지를 전달했는지 확인할 수 있게 된다.

비트코인 “채굴”한다고 어려운 문제를 풀도록 만들어놨다는 말이 저런 계산비용이 들어가도록해서 정보를 수정하기 매우 어렵게 만들고, 시간이 많이 걸리니 결국은 구조적으로 거짓말이 들통나도록 만들어놨다는 말이라고 보면 된다.

비트코인이 BGP를 풀어냈던 방식이 최고의 솔루션일까? 이걸 쓰면 앞으로 모든 보안 문제가 해결될까?

일단 위에서 말한 대형 동영상 서버 대체용 솔루션은 아니라는 걸 명확하게 인지했을 것이고, 거래 내역을 기록하는 보안에 국한해서 본다고해도 점점 계산비용이 많이 들어가도록 짜여진 구조 때문에 시스템이 지속적으로 느려질 수 밖에 없다. 비트코인 하나 채굴하기가 점점 더 어려워진다는 것처럼, 시스템이 계속 느려져서 결국에는 쓰기 어려운 수준이 될 것이다. 거기다 정작 유저 숫자가 계속 늘어난다면 저 information chain은 얼마나 길어질까?

저런 네트워크형 기록 구조를 모든 네트워크에게 공유하는 시스템이 아니라, 네트워크 속의 작은 네트워크를 따로 만들어서 구성하는 방식, 네트워크 연결 고리를 랜덤하게 설계하는 방식 등등 다양한 방식의 솔루션들이 등장하고 있다. 블록체인 세미나를 가 보면 BGP를 풀었다고 주장하는 사람들이 다들 그런 수학적인 모델링 아이디어를 놓고 장단점을 따지고 있는데, 정작 일반인들은 이미 블록체인이 완성된 기술인 것처럼 이해하고, 이게 코인을 찍어내는 시스템인 줄 안다. 저런 information chain의 결합구조와 계산비용 시스템을돌아가도록 만드는 열쇠가 꼭 코인이어야하는게 아닌데, 왜들 저렇게 코인에만 목을 매는지.

 

나가며

박사 논문을 쓰던 당시에 필자의 주 관심사는 금융시장의 여러 주체들이 똑같은 금융상품만 구매하려고 달려드는 행동이 금융시장의 버블 형성에 얼마나 큰 영향을 주는지, 그런 행동이 자원 분배의 효율성을 어떻게 왜곡하는지에 대한 내용이었다. 2008년 금융위기 때 모든 사람들이 대박 수익률을 가져다준다는 착각에 서브프라임 모기지를 기반으로한 파생금융상품에 돈을 부어넣었던 기억을 떠올려보라. Perfect coordination에 비교될만한 상황이었는데, 지탱이 불가능했던 가격이 사소한 외부충격에 와르르 무너져내리면서 금융시장이 미증유의 대혼란을 겪어야했었다. 다들 똑같은 정보와 분석과 결론을 갖고 있다보니 생긴 문제라는 이유로, Perfect coordination을 없애기 위해서는 오히려 정보의 확산을 제한하는게 더 맞을수도 있다는 모델링을 했던 기억이 난다. (게임이론에서는 Hirshleifer effect라고 한다.)

BGP를 서버쪽에서 풀어내려고 컴공과 친구들이 고민한 내용을 가만히 보니 일부러 Perfect coordination을 만들어내야하는 구조인데, 이걸 비트코인처럼 (단순무식하게) 똑같은 정보를 계속 찍어서 전송할 수 밖에 없는 기계적인 구조를 만들기보다, 시스템 내부적으로 그런 인센티브를 주도록 만들면 될텐데라는 생각을 했었다. (아마 공학도와 게임이론 공부한 경제학도의 관점의 차이일 것이다.) 그리고 BGP 풀었다는 다른 논문들을 뒤져봤더니, 예상했던대로 비트코인의 기계적인 구조가 가지는 문제점들을 지적하고, 이걸 좀 더 수학적으로 “elegant”하게 풀어내려는 시도들을 보게 되었다. (생각하는건 다들 비슷비슷한듯)

BGP도 잘 이해못하는 어느 VC 출신에게 설명해주려는 글을 쓰다보니 여기까지 오게 됐는데, 쓰다보니 다뤄야하는 세부 주제가 많아보여서 이번 기회에 관련 주제들을 좀 정리해보고 싶다. 혹시 궁금했던 내용이 있으면 아래 댓글로 제안해주기 바란다.

 

Similar Posts