3월 28일 (화) 17시 00분 ~ 20시 30분
벤처기업을 시작하시려는 분, 벤처기업을 하고 계신분, 벤처기업에 투자 하고 싶으신 분, 벤처에 관심만 있으신 분, 모든 분들이 모여서 건강한 네트워킹을 갖는 고벤처포럼입니다.
- 장소/일시 -
스타트업을 준비하거나 막 시작한 사람들에게 필수코스가 하나 있다. ‘고벤처포럼에 나가서 발표를 하는 것’. 초기 단계의 스타트업이 아니더라도 고벤처포럼은 스타트업 창업가들이 모여들어 발표를 듣고 교류를 하고 토론을 하는 장이 되고 있다. 이 포럼을 만든 고영하 고벤처포럼 회장은 전형적인 벤처기업가라고 보기는 힘들다. 하지만 그는 지금 누구보다 벤처기업인들을 잘 알고 그들과 함께하고 그들을 위한 환경을 만들어가는데 앞장을 서고 있다.
고 회장은 사실 좀 특이한 이력의 소유자다. 연세대 의대에 입학했지만 1974년 유신헌법 반대 시위를 하다 투옥됐고, 그로 인해 학교에서 제적을 당했다. 그 뒤 그는 정치가의 길을 가기 시작한다. 1987년에는 한겨레민주당을 창당해 고(故) 제정구 의원과 정당 활동을 하기도 했고 민주당 공천을 받아 1992년과 1996년 서울시 도봉구 국회의원 선거에 출마했지만 연거푸 낙선했다. 이후 그는 정치의 뜻을 접은 것 같다. 진로를 바꿔 1999년에는 최초의 IPTV였던 셀런티비 창업자들을 만나 사내이사로 참여했고 하나TV 회장을 역임하기도 했다. 최근에는 고벤처포럼에 이어 엔젤투자협회를 발족하고 초대 회장을 맡았다.
‘한국의 스타트업’에서는 100회를 (자체) 기념해 고영하 회장을 만나 한국벤처산업의 현황과 문제점을 논의했다. 진작 만나 대화를 나눴어도 좋았겠지만 격변의 시기에 정부 정책의 변화의 필요성에 대해 논의하기엔 그만큼 적절한 인물도 없는 것 같다. 이 모든 것을 의도하지 않았더라도 말이다.
<고벤처포럼을 이끌고 있는 고영하 회장(가운데)>
◆한국은 정부가 투자한 벤처의 실패율이 높다
고 회장을 만나자마자 ‘벤처기업의 숫자는 많아지는데, 더불어 정부 지원에 의존하는 벤처도 많아지고 있다’고 말을 꺼냈다. 정부가 보다 많은 벤처를 지원하는 것이 나쁜 것이라고만 할 수는 없다. 하지만 대부분의 벤처들이 정부 지원을 받고 있다면, 그리고 그 벤처기업들이 정부 지원이 없다면 살아남을 수 없는 수준이라면, 더 나아가 정부의 이런 지원에도 불구하고 이런 벤처기업들이 좀처럼 실적을 내지 못하고 있다면, 여기엔 뭔가 문제가 있는 게 분명하다.
한국의 최근 벤처붐에서는 이런 경향을 발견할 수 있다. 이걸 적나라하게 지적한 것이 최근 KDI 김기완 연구위원이 출간한 보고서다. 그는 ‘제2의 벤처붐을 맞고 있는가’라는 제목의 보고서에서 벤처 기업이 늘고 있지만 열 중 아홉은 정부 지원을 받는 벤처라고 분석했다. 그가 인용한 중소기업청 자료에 따르면 2010년말 국내 벤처기업 수는 2만4645개로 사상 최대 수준. 외환위기 직후인 1998년부터 늘어나기 시작한 벤처기업 수는 2001년 1만1392개까지 늘었다가 벤처 거품이 꺼지면서 2003년 7702개로 줄어들었다. 하지만 이후 다시 조금씩 늘어나기 시작, 2010년 2만개를 돌파했다.
김기완 연구위원은 이들 중 90.6%인 2만2231개가 기술보증기금 등의 지원을 받는 정부지원 벤처라고 분석했다. 벤처캐피털 업체들이 냉정한 평가를 통해 투자한 회사는 622개(2.5%)에 불과했다. R&D(연구개발)를 위주로 하는 연구개발기업의 비중도 6.4%에 그쳤다. 벤처 수는 갈수록 늘지만 코스닥 상장 벤처기업은 오히려 줄었다. 2005년 전체 9732개 벤처기업 중 405개 기업(4.2%)이 코스닥에 상장돼 있었지만 2010년에는 2만4645개 벤처기업 중 1.2%에 불과한 295개만 상장사였다.
고 회장을 만나 간략하게나마 이런 내용을 설명했다. 그는 보다 직설적으로 말했다. 한국에서는 정부가 자금을 지원한 벤처기업의 실패 확률이 매우 높다고. 다른 어떤 나라와 비교해도 높을 거라고 말이다. “서울산업통상진흥원 700개 입주 기업 가운데 매출과 이익을 내며 성장하는 기업을 7개가 채 되질 않습니다. 1%도 안된다는 뜻이죠. 이런 일이 왜 일어날까요.”
◆대상 선정부터 잘못
우선 한국은 정부가 지원 대상 벤처기업 선정부터 제대로 하질 못한다는 게 고 회장의 지적. 우수한 벤처기업 발굴부터 안된다는 거다. “제가 심사위원 등으로 많이 다니다보니 한국에서 정부가 투자할 기업을 찾는 과정이 보이더군요. 사실 이건 투자 대상을 찾는 게 아닙니다. 거의 점치는 수준이에요.”
그의 목소리가 점점 높아졌다 “그냥 서류 받아서 일차로 체크하고 한두차례 불러서 발표를 듣죠. 팀이 어떤지, 인간성이 어떤지, 경력이 진짜인지, 실력은 어느 정도인지 등등 아무것도 모르는 상태에서 지원할 팀을 뽑는 경우가 대부분입니다. 제대로 될 리가 없는거죠. 이러다보니 기껏 팀을 뽑아 놓고 나도 돈을 대자마자 팀이 깨지는 경우도 허다합니다.”
반면 다른 나라는 어떨까. 아무래도 스타트업 관련 정부 지원 제도가 비교적 잘 되고 있는 국가와 비교할 수밖에 없다. 고 회장은 이스라엘과 독일의 사례를 들었다. “독일은 정부 지원 벤처기업의 성공률이 20%가 넘습니다. 이스라엘이나 핀란드도 한국보다 이 비율이 훨씬 높구요”
이게 가능한 이유는 여러가지가 있겠지만, 선정 과정에서부터 확실히 다르다는 게 그의 생각. 그는 그래서 이스라엘의 사례를 좀 더 자세히 들여다봤다고 한다.
이스라엘에선 매년 500여개의 기업이 정부 지원을 받으려고 지원을 한다. 정부 내에 있는 120명 가량의 evaluator(그의 표현에 의하면, 투자감별사)가 어떤 기업에 정부 자금을 투자할 것인지를 결정하기 위해 500개 업체에 파견을 나간다. 그래서 팀웍 확인을 위해 2-3개월 정도 같이 지낸다.
“이런 방식은 창업 멤버들의 기업가 정신을 확인할 수 있는 방법입니다. 팀웍, 특히 인간성을 알 수 있게 되거든요. 사실 인간성이 가장 중요한 선정 기준일 수도 있습니다. ”
이렇게 2-3개월이 지나면 이들 감별사들이 리포트를 작성한다. 리포트 결과를 바탕으로 500개 기업 중 120개 기업에 투자를 하게 된다. 1 사당 투자 금액은 한국 돈으로 약 7000만원 정도. 이 중 20%가 성공하게 된다. 투자를 한 게 끝이 아니다. 투자를 한 다음에 6개월에서 1년 뒤에 가서 다시 평가를 하게 된다. 성취가 있을 경우 VC들이 와서 투자를 집행한다. 만약 VC들의 투자를 받지 못한다고 하더라도 정부 차원에서 판단해 가능성이 있다고 보면 5억 정도 정부가 직접 투자를 진행한다.
그럼 성과가 없는 팀에 대해선 어떻게 하나? 그냥 버리나? 아니다. 멘토링 프로그램을 시작한다. 그런 식으로 걸르고 걸러서 투자할 팀을 추려내면서도 미래를 위해 조금이라도 가능성이 발견되면 이를 키워나갈 다양한 방법을 모색하는 것이다.
◆이대로 가면 일본꼴 난다
그는 “한국이 이대로 가면 일본꼴이 난다”고 걱정했다. 무슨 뜻일까. 한국에서도 일본과 같은 장기 침체 현상이 일어날 수 있다는 경고는 여러 곳에서 들려온다. 대부분은 자산 시장의 거품 붕괴, 고령화 등에서 원인을 찾는다. 고 회장은 ‘성장동력의 상실’을 가장 우려했다.
“한 사회의 지속적인 성장을 위해선 성장 동력이 있어야 합니다. 그런데 대기업에만 의존해서는 지속적인 성장 동력이 나오기 힘들어요. 대기업은 혁신이 나오기 힘든 구조거든요. 새로운 성장동력을 만들기 어렵다는 뜻입니다.”
해외에도 대기업이 많이 있다. 그런데 이들이 모두 혁신에 어려움을 겪는 것은 아니다. 이런 질문에도 그는 답이 준비돼 있었다. “IBM 애플은 어떻게 혁신을 했을까요. 외부의 혁신역량을 사들여 내재화하는 방법을 썼습니다. 왜 그런지 아십니가. 자체적으로 혁신이 어렵다고 판단했기 때문입니다. 그래서 개방형 혁신을 한 거죠. open innovation. 벤처기업들을 M&A해서 혁신을 사들이는 것. 이게 되는 곳이 미국이고 이런 것이 안되는 곳이 일본입니다. 미국에서는 그래서 제값을 주고 벤처를 삽니다.”
국가가 근본적으로 벤처 산업을 일으키는데 진정 관심이 있고 여기에 국가의 운명이 걸렸다고 생각할 정도로 심각하게 여기는지가 문제다. 한국은 지금까지 그렇지 않았다는 게 고 회장의 진단.
정부만 그런 게 아니다. 창업하는 사람들, 인재들의 문제도 있다. “제일 똑똑한 애들이 창업하는 게 실리콘밸리인데 한국과 일본에서는 똑똑한 애들이 대기업에 가거나 관료만 되려고 합니다. 이스라엘이나 미국에서는 똑똑한 친구들이 창업을 하는데 말이죠.”
그럼 한국에서는 이런 문화가 어떻게 가능할 수 있을까. 그는 두 가지 전제 조건을 거론했다. “ 우선 다양성 교육이 선행되야 합니다. 그래야 기업가 정신이 있는, 그런 재능이 있는 사람들을 일찌감치 발굴해낼 수 있는 거죠. 실패를 용인하는 것이 두번째 조건이입니다. 도전했다가 실패를 하더라도 신용불량자가 되지 않는 그런 제도와 문화가 필요하다.”
맞는 말이다. 본래 교육이라는 것은 아이의 잠재력, 가능성을 찾아주는 게 목표가 돼야한다. 그냥 학생을 대학에 보내는 게 목표가 되서는 안된다. “다양한 교육을 실시하면 아이들이 다양한 재능을 발휘할 수 있습니다. 어릴 때부터 기업가의 소질이 있는 아이도 있습니다. 미국에선 바로 그런 아이들이 창업을 하기 때문에 성공 확률도 높고 자신의 인생에 대한 불만도 적을 수밖에 없습니다. 한국에선 모두가 똑같은 교육을 받고 똑같이 자라다가 갑자기 자기가 배운 것과 다른 선택을 하고 생소한 환경에서 창업을 해야 합니다. 창업을 하는 것에 대한 두려움과 불안이 큰 게 당연하죠. 사실 이런 환경에서 창업을 하는 사람들이 대단한 겁니다.”
◆엔젤투자자들을 만들어야 한다
그는 마지막으로 엔젤투자자 문화를 육성할 것을 주장했다.
“미국은 30만명의 엔젤투자자가 있는데 한국에는 고작해야 300명, 400명 밖에 없습니다. 이것을 1만명 수준으로 늘려야 합니다.”
그래서 그는 엔젤투자협회를 만들었다고 한다. 2020년까지 엔젤투자자 1만명을 만드는 것이 목표다. VC는 1조원을 투자하는데 엔젤투자자의 투자 자금은 고작 300억원. 이것이 한국의 현실이다. VC는 원래 아주 초창기 기업에는 투자하지 않는다. 초기단계에서 엔젤투자자의 자금을 수혈받아 회사를 어느 정도 성장시켜야 VC를 만날 수 있다. 그런데 한국엔 엔젤투자자도 없고, 그런 문화도 없다. 그러다보니 VC가 투자할 곳이 없다. 결국 정부 지원을 받아야 생존할 수 있는 벤처들만 넘쳐난다. 벤처 감별의 눈이 없는 정부가 이들에 새 모이 주듯 자금을 조금씩 지원하다보니 영세한 벤처들만 많다. 악순환의 반복이다.
그는 2020년 엔젤투자자 1만명이 투자자금 1조원을 굴리는 것을 목표로 하고 있다. 미국의 엔젤투자자들이 200억 달러는 굴리는 것에 비하면 부족하지만 모두 지금의 30배 수준이다.
“국내 현실을 보면 어차피 중산층 이상이 투자할 돈이 없습니다. 엔젤투자가 해결책이 될 수 있어요. 1억원을 1000만원씩 10개 기업에 투자했다가 1개에서만 수익이 나도 나머지를 커버할 수 있죠.”
그는 엔젤투자협회를 통해 중소기업부 만드는 것을 건의하고 있다. 그 산하에 창업진흥청을 만들고 창업을 진흥하게 한다는 복안이다. 현재의 중소기업청은 청 단위여서 힘이 약하다는 판단도 작용 했다.
“핀란드는 정부에서 8000억원을 투자하는 데 이 돈이 전부 새로 투자되는 자금이 아닙니다. 상당수는 성공한 기업에서 회수한 돈입니다 그 돈이 다시 돌고 돌아 재투자되면서 생태계에 기여를 하는 거죠. 반드시 큰 돈이 필요한 것은 아닙니다. 하지만 분명히 산업에 대한 열정과 의지, 안목은 필요합니다.”
요즘 핀테크에 대한 관심이 높습니다. Apple Pay를 시작으로 다양한 간편 결제 수단이 쏟아져 나오고 있고 국내에서도 인터넷 은행 설립이 추진되고 있습니다. 해외에선 다수의 IT 업체가 신용 대출이나 해외 송금과 같은 금융 서비스를 제공합니다. 이와 같은 움직임이 IT 기술을 금융 서비스에 접목해 기존의 서비스를 개선하려는 것인 반면에 화폐 자체를 새로 정의하고 시스템 전체를 재구성하려는 비트코인과 같은 급진적인 움직임도 있습니다.
미국에선 영화 표나 비행기 표를 비트코인으로 구매할 수 있고 우리나라에도 몇 개의 비트코인 거래소가 개설되어서 비트코인을 현금과 교환할 수 있습니다. 지난 1~2년 사이 실리콘밸리엔 비트코인 기술을 기반으로 하는 여러 벤처 기업이 생겨나 비트코인이 현금을 대체할 날을 꿈꾸며 기대에 부풀어 있습니다. 한편 은행은 비트코인을 경계하면서도 비트코인이 활용하고 있는 블록체인 기술을 은행에 도입하는 데 관심을 두고 있습니다.
하지만 비트코인이 세상에 나온 지 7년이 지난 지금도 일반인은 물론 개발자에게도 비트코인은 생소한 기술입니다. 일반적으로 비트코인은 '가상 화폐'라고 소개되고, '어려운 수학 문제를 풀어 화폐를 생산한다'는 알쏭달쏭한 설명이 뒤따라오곤 합니다.
이 글에서는 비트코인의 기본 작동 방법과 비트코인의 구현 원리인 블록체인 기술을 살펴보겠습니다.
한국의 원화나 미국의 달러화, 일본의 엔화 등을 모두 통합하고 인터넷에서 자유롭게 사용할 수 있는 단일한 가상 화폐를 설계한다고 가정해 보자. 이때 화폐 시스템은, 단순하게 말자면, 복제가 어려운 화폐를 발행하고 이 화폐를 사람들이 서로 주고받을 수 있게 하는 시스템이라 할 수 있을 것이다.
이 시스템에서 가장 먼저 문제가 되는 것은 화폐 발행의 통제권이다. 어느 특정 국가만 마음대로 화폐를 발행할 수 있다면 문제가 될 것이다. 화폐는 정해진 규칙에 따라 공정하게 생성되어야 할 것이며, 화폐의 소유권도 어느 한 국가나 기관에 의존하지 않고 투명하면서도 안전하게 관리되어야 할 것이다.
그래서 비트코인은 시스템을 통제하는 서버가 없이 P2P 방식으로 완전히 분산화된 형태로 작동하게 설계되었다. 또한 화폐를 사용할 수 있는 사용자를 따로 등록하는 기관을 두지 않고 누구나 시스템을 사용할 수 있게 했다. 이런 시스템을 만들려면 어떻게 해야 할지 하나씩 짚어 보자.
비트코인 프로그램
소프트웨어로서 비트코인은 비트코인이라는 가상 화폐를 생성하거나 가상 화폐를 다른 사람과 주고받을 수 있는 기능을 제공하는 프로그램이다. 비트코인은 Napster나 BitTorrent처럼 PC에서 사용하는 P2P 소프트웨어다. 비트코인이란 가상 화폐는 이 P2P 기반의 '비트코인 프로그램'을 통해 통용되는 디지털 화폐 혹은 사이버 머니라고 보면 되겠다.
비트코인 프로그램은 오픈소스로 공개되어 GitHub 저장소에 올려져 있다. 다양한 운영체제를 지원하는 애플리케이션 프레임워크인 Qt 프레임워크로 GUI를 구현해 Windows와 Linux, OS X에서 프로그램을 실행할 수 있다.
화폐 발행을 담당하는 누군가가 없다면 화폐가 자동으로 발행돼서 모두에게 골고루 나눠지게 하거나 복권처럼 주기적으로 누군가 한 명에게 무작위로 지급되게 해야 할 것이다. 비트코인에서 화폐를 발행하는 방식은 후자에 가깝다. 비트코인에서 화폐를 발행하는 방식을 마이닝(mining)이라 부른다. 금을 캐는 것과 유사하다고 해서 채굴한다는 의미를 가진 표현을 사용한다.
비트코인의 화폐는 10분에 한 번씩 일정량이 생성되며 마이닝에 참여한 사용자 중 한 명에게 지급된다. 참여자들은 hashcash라는 문제를 풀어야 한다. hashcash는 특정한 조건을 가지는 해시값을 찾는 것이다.
예를 들어 가장 많이 사용하는 해시 알고리즘인 SHA-256으로 임의의 데이터를 해시한 값을 구하면 256비트(32바이트)의 값을 얻는다. 해시 함수는 단방향 함수라 데이터로부터 해시값을 구할 수는 있지만 해시값으로부터 데이터를 역산하는 것은 이론적으로 불가능하고, 해시값이 같은 임의의 데이터를 만들어 내는 것 역시 매우 어렵다. 특정한 해시값이 나오는 데이터를 찾으려면 2256개(256비트로 나올 수 있는 모든 경우의 수)의 데이터를 일일이 확인해야 한다. 현대의 컴퓨터로는 불가능한 작업이다.
hashcash 문제는 이 불가능한 역산 작업과 유사하다. 특정한 해시값이 나오는 데이터를 찾는 것은 너무 어려우니 특정한 범위의 해시값이 나오는 데이터를 찾도록 난이도를 낮춘 것이다. 다음 예를 보자.
SHA-256 ("hello world" + " 0") = 3cad76d283686392c9c1813baf25239a3f09b9e075d830984a9a93d62b93adb8
SHA-256 ("hello world" + " 1") = 063dbf1d36387944a5f0ace625b4d3ee36b2daefd8bdaee5ede723637efb1cf4
SHA-256 ("hello world" + " 2") = ed12932f3ef94c0792fbc55263968006e867e522cf9faa88274340a2671d4441
SHA-256 ("hello world" + " 3") = 4ffabbab4e763202462df1f59811944121588f0567f55bce581a0e99ebcf6606
SHA-256 ("hello world" + " 4") = 000e5e410dd915d190cce21d72a40bdbcc9db96d80de87d28896b56766f31b4e
SHA-256 ("hello world" + " 5") = f6471bb5cd1837f3ef4891903c40c5300c9f0fd8a902d5c3774628c44dab78ed
SHA-256 ("hello world" + " 6") = 6a9b5a89258b50744dfdf62e49ac6d869e8916e04ce57d9d1fc953daed9bfcd8
"hello world"라는 문자열에 임의의 nonce 숫자(암호 시스템에서 사용하는 일회용 일련번호)를 덧붙여서 SHA-256으로 해시값을 구한 것이다. 해시값은 "SHA-256 hash calculator"와 같은 사이트에서도 쉽게 확인할 수있다. 위의 값 가운데 'hello world 1'과 'hello world 4'의 해시값의 시작 부분에는 숫자 0이 각각 1개와 3개가 있다. 0이 4개 이상인 해시값을 찾으려면 nonce 숫자를 조금 더 바꾸어 가면서 시도하면 될 것이다. 0의 개수가 하나씩 늘어날 때마다 확률적으로 16배씩 더 많은 nonce 숫자를 대입해 보아야 한다. 0의 개수가 5개인 해시값을 찾으려면 약 백만 개의 nonce 숫자를 대입해야 할 것이라 컴퓨터를 사용해도 쉽게 찾기 어렵다.
비트코인에서 사용하는 hashcash 문제란 이처럼 몇 개 이상의 0으로 시작하는 해시값을 찾으라는 문제다. 위의 예에선 "hello world"라는 임의의 문자열을 사용했지만 비트코인에선 블록체인에 추가된 가장 최신 블록의 헤더가 해시의 대상이 된다.
hashcash 문제에서 해시값을 찾는 데는 많은 계산량이 필요하며 해시의 특성상 무작위로 생성되는 값이라 누가 먼저 조건에 맞는 해시값을 찾을 수 있는지 보장하기 어렵다. 비트코인은 가장 먼저 해시값을 찾은 사용자에게 보상으로 지급된다. 보상 금액은 시간에 따라 바뀌는데 2015년 12월을 기준으로 하면 25BTC(비트코인의 화폐단위)며, 현금으로 환산하면 약 7백만 원 정도다.
해시값을 찾는 데 오랜 시간이 걸리는 hashcash 문제는 블록체인이라는 거래 내역 데이터의 위조를 방지하는 데 중요한 역할을 한다. 또한 이 보상 때문에 많은 사용자가 마이닝을 위해 PC를 켜고 비트코인 프로그램을 실행한다는 점도 중요하다. 이 덕분에 P2P 네트워크가 수많은 분산 노드를 24시간 확보해 P2P 네트워크를 안정적으로 유지할 수 있게 된다.
사용자를 관리하는 중앙의 서버가 없다면 돈을 주고받을 내 계좌는 어떻게 만들 수 있고 그 계좌를 사용하는 주체가 본인이 맞는지는 어떻게 인증할 수 있을까? 비트코인은 우리가 공인인증서나 SSL 인증서 등에 사용하는 공개키 암호화 방식(public key cryptography)으로 이 문제를 해결한다.
공개키 암호화 알고리즘엔 RSA나 ECDSA 등이 있는데 비트코인에서는 ECDSA 알고리즘을 사용한다. 공개키 암호화 방식을 사용하면 누구에게나 공개된 공개키(public key)를 이용해서 개인키(private key)로 생성한 서명(signature)을 검증할 수 있다.
다음 그림과 같이 특정한 메시지에 대한 서명을 자신만이 알고 있는 개인키로 서명하면, 제삼자는 공개키를 이용해 그 서명이 이 공개키의 짝에 해당하는 비밀키로 서명한 것인지 확인할 수 있다.
그림 1 공개키 방식의 원리
내가 A라는 사용자의 공개키를 가지고 있다면 어떤 메시지가 A라는 사용자가 작성한 것이 맞는지 인증할 수 있는 것이다. 그리고 이 공개키와 개인키의 짝은 암호화 알고리즘을 이용해 누구나 생성할 수 있다. 비트코인에서는 이 공개키를 일종의 일회용 계좌번호처럼 사용한다. 누구나 스스로 만들 수 있기 때문에 사용자나 계좌를 등록하는 절차가 필요 없고, 공개키 암호화 알고리즘을 이용해 계좌의 소유자가 맞는지를 인증할 수 있다.
OpenSSL 도구로 공개키와 개인키 쌍을 생성하는 방법은 다음과 같이 간단하다. 다음은 openssl
명령어를 사용해 ECDSA 알고리즘으로 임의의 개인키를 생성하고, 이 개인키로 공개키를 생성하는 예다.
$ openssl ecparam -genkey -name secp256k1 -noout -out myprivatekey.pem
$ openssl ec -in myprivatekey.pem -pubout -out mypubkey.pem
A가 B에게 돈을 전달하는 시나리오를 가정해 보자. 은행을 이용한다면 B는 먼저 은행에 계좌를 개설해야 한다. 그리고 A에게 은행 이름과 계좌번호를 알려 준다. A는 자신의 은행을 통해 B의 계좌로 돈을 송금하고 이 거래는 양쪽 은행이 보증한다.
비트코인에서 돈을 전달하는 시나리오는 다음과 같다.
B는 공개키와 개인키를 생성해서 A에게 공개키를 전달하고 개인키는 자신의 컴퓨터에 안전하게 보관한다. A는 B의 공개키를 수신자로 하는 수표를 하나 작성해 P2P 네트워크 전체에 전송한다. 모든 비트코인 사용자가 이 수표를 받지만 나중에 이 수표를 사용할 수 있는 사람은 B의 개인키를 가지고 있는 사람뿐이다. B가 이 수표를 받게 될 사람이라는 건 앞서 언급한 공개키 암호화 알고리즘을 이용해 누구나 검증할 수 있다.
비트코인이란 시스템에서 가장 중요한 부분은 바로 이렇게 돈을 주고받는 거래(transaction)다. 비트코인을 생성해서 통화를 공급하고 비트코인을 개인끼리 주고받을 수 있게 하는 것이 비트코인 시스템의 전부라고 볼 수 있다. 비트코인의 거래 내역은 어느 주소에 있는 돈을 어느 주소로 보낸다는 내용을 담고 있는 일종의 수표이며, 이 수표는 누구나 발행할 수 있기 때문에 은행이 필요하지 않고 누가 수표의 주인인지도 은행이 확인해 줄 필요가 없다. 비트코인이란 가상 화폐 시스템에는 은행도 없고 은행 계좌도 없으며 오로지 개인끼리 주고받는 수표만 존재한다.
그런데 은행이나 시스템을 관리하는 중앙 서버가 없다면 내가 수표를 발행할 잔고가 있는지를 다른 사용자가 어떻게 검증할 수 있을까? 비트코인은 P2P 시스템이므로 모든 사용자의 거래 정보를 다 공개하고 공유한다면 내가 검증 가능한 것은 다른 사람도 검증 가능할 것이다.
과거에 발행된 모든 수표, 즉 모든 거래 내역을 담고 있는 저장소를 비트코인에서는 블록체인이라 부른다. 블록체인은 P2P 네트워크의 모든 피어(peer, P2P 네트워크의 컴퓨터 또는 사용자)가 각자 가지고 있다. 이 블록체인에 모든 거래 내역이 포함되어 있다면 블록체인을 확인해 수표 발행자가 잔고가 있는지, 즉 수표를 발행할 자격이 있는지 확인할 수 있을 것이다.
내가 누군가에게 수표를 발행할 수 있으려면 이전에 어디선가 그 금액만큼의 수표를 받아서 보유하고 있어야 한다. 따라서 비트코인에서 발행하는 수표는 이전 수표를 참조하는 링크를 포함하고 있고, 사용자는 그 링크를 따라가서 이전 수표가 포함하는 금액이 신규 수표가 발행하는 금액보다 큰지 확인한다.
다음 다이어그램의 예를 참고해 보자.
그림 2 비트코인 거래의 흐름(원본 출처: https://en.bitcoin.it/wiki/Transaction)
위 다이어그램에는 4개의 거래 혹은 4개의 수표가 있다. 'Transaction C'가 C라는 사람이 발행한 수표라고 가정하자. 이 수표에는 2개의 입력, 즉 과거에 발행된 2개의 수표를 참조하는 링크가 있다. 하나는 A로부터 받은 100BTC를 참조하는 링크고, 다른 하나는 B로부터 받은 50BTC를 참조하는 링크다. C는 150BTC까지 사용할 수 있는데, 이 중 101BTC를 D에게 주겠다는 수표가 'Transaction C'다. C에게서 101BTC를 받은 D는 이 101BTC를 누군가 다른 사람에게 전부 제공하는 수표인 'Transaction D'를 발행했다.
모든 수표가 그 이전 수표에서 나온다면 링크를 계속 따라가다 보면 결국엔 이전 수표가 없는 수표가 존재할 것이다. 그림 2에서 'Transaction B'가 바로 이전 수표가 없는 수표다. 이 수표는 마이닝이란 과정을 통해 자동으로 발행된 비트코인을 담고 있다. 마이닝으로 발행된 비트코인은 지급받은 본인만 사용할 수 있으므로 그림 2에서는 C가 비트코인을 지급받은 사용자다. C는 자신이 마이닝으로 얻은 50BTC와 A에게서 받은 100BTC를 합쳐서 150BTC의 잔고를 만든 다음 D에게 101BTC를 준다는 수표를 발행한 것이다. 나머지 49BTC는 거스름돈에 해당한다.
이제 남아 있는 문제는 개인이 임의로 발행한 이 모든 수표를 어떻게 보관하는가 하는 문제다. 비트코인에서는 네트워크상의 모든 피어가 이 수표를 모두 보관한다. 용량도 문제가 될 수 있는데 지난 7년간 쌓인 데이터의 양이 약 45GB 정도다. 요즘 PC의 용량과 하드디스크의 비용을 고려하면 데이터의 양은 큰 문제가 아닐 것이다. 문제는 위조의 방지다.
네트워크에서 거래가 발생하면, 즉 수표가 발행되면, 이 수표의 이전 링크를 따라 내가 가지고 있는 과거의 수표와 비교해서 기존에 잔고가 있었던 것이 맞는지 검사하고 그 잔고의 주인, 즉 이전 수표의 주인이 지금 새로운 수표를 발행한 사람이 맞는지를 수표에 포함된 서명을 이용해 확인한다. 정상적인 수표임이 확인되면 이 수표도 내 블록체인에 저장해 둔다. 그런데 어느 날 주변의 다른 모든 컴퓨터가 나와는 다른 내용의 블록체인을 가지고 있다는 걸 알게 되면 어떻게 될까? 내가 받은 수표를 사용하려는데 다른 피어는 이 수표가 기존의 블록체인에 존재하지 않는 수표라며 이 수표의 사용을 거부한다면? 또는 내 컴퓨터를 하루 동안 꺼 두고 다시 비트코인 네트워크에 접속해 그동안 거래되었던 수표를 주변의 피어에게서 한꺼번에 받을 때 주변의 피어가 나한테 위조된 데이터를 전해 준다면? 이런 문제는 모두 신뢰할 수 있는 중앙 서버가 없어서 발생하는 문제이기도 하다.
위조를 방지하는 한 가지 방법은 데이터 생성 자체를 어렵게 해서 시간이 많이 걸리 게 하는 방법이다.
비트코인에선 수표를 블록체인에 저장할 때 그냥 저장하는 것이 아니라 여러 개의 수표를 모아서 하나의 블록을 생성하고, 그 블록을 링크드 리스트로 만들어 저장한다. 이때 블록을 생성하려면 앞에서 설명한 hashcash 문제를 풀어야 한다. hashcash 문제의 난이도는 미리 정해진 알고리즘에 따라 주어지고 누군가는 10분 안에 찾을 수 있도록 조정된다. 네트워크에 참여한 모든 사용자가 함께 시도할 때 10분이 걸리는 작업이기 때문에 혼자서 이 작업을 한다면 훨씬 더 많은 시간이 걸릴 것이다. 예를 들어 5,000명의 사용자가 있고 모든 사용자의 컴퓨터 성능이 동일하다면 혼자서 hashcash 문제를 푸는 데엔 10분 x 5,000 = 약 35일
, 즉 한 달 이상의 시간이 걸린다. 누군가 해시값을 찾아서 블록을 생성하면 네트워크에 전송해 모든 피어가 공유하게 하고, 다시 새로운 블록을 만들어 새로 생성된 수표를 블록체인에 포함시키는 작업을 반복한다.
블록 생성에 오랜 시간이 걸리므로 위조가 쉽지는 않으나 그렇다고 불가능한 건 아니다. 시간만 투자하면 되니까 말이다. 누군가 오랜 시간에 걸쳐서 특정한 하나의 블록을 위조하고 새로 네트워크에 진입하는 피어에게 과거의 블록을 전달해줄 때 이 위조된 블록을 사용할 수 있을 것이다. 이를 방지하기 위해 블록을 링크드 리스트로 구성할 때 이전 블록의 해시값을 다음 블록에 포함시켜서 중간의 한 블록만 위조하는 것을 불가능하게 만들 수 있다.
다음 그림의 예를 보자.
그림 3 링크드 리스트로 구성된 블록
Block 2는 Block 1의 해시값 Hash 1을 담고 있다. 만약 Block 1의 내용을 수정하면 Hash 1이 바뀌게 되므로 Block 2도 수정해야 한다. 마찬가지로 이후의 모든 블록도 수정해야 할 것이다. 블록 하나를 위조하는데 한 달이 걸린다면 이후의 n개 블록까지 새로 만드는 데는 n개월이 소요될 것이다. 그 시점엔 이미 훨씬 더 많은 블록이 Block n 이후에 리스트를 이루며 생성되어 있을 것이다. 따라서 블록체인의 위조는 거의 불가능해진다.
찾기 힘든 해시값을 찾아 블록을 생성하는 것을 마이닝이라고 하며, 가장 먼저 해시값을 찾은 사용자에게 일정량의 화폐가 보상으로 주어진다고 설명했다. 이 보상 때문에 수많은 사용자가 자신의 컴퓨터를 비트코인 네트워크에서 사용한다. 사용자의 컴퓨터 성능이 좋아질수록 해시값을 찾을 확률이 높아진다. 해시값을 빠르게 계산하는 전용 하드웨어까지 등장하면서 비트코인 네트워크의 전체 컴퓨터 성능이 증가하고 있는 실정이다. 전체 컴퓨터 성능이 증가해 해시값을 더 빨리 찾을 수 있게 되면 해시값을 찾는 조건이 조정되고 해시값을 찾는 난이도가 높아진다. 그래서 해시값을 찾는 시간이 항상 10분 정도를 유지하게 한다. 난이도가 높아질수록 블록을 위조하기는 더 힘들어지기 때문에 블록체인은 더 안전해진다.
아무도 블록을 위조할 수 없다고 하더라도 아직 한 가지 문제가 남는다. 세계 여러 곳에 흩어져 있는 5,000대의 컴퓨터가 hashcash 문제를 풀기 위해 경쟁하다 보면 여러 대의 컴퓨터가 비슷한 시점에 각각 해답을 찾을 수도 있을 것이다. 이 경우 누가 먼저 찾았는지 알 수 있는 방법이 있을까? 블록 안에 타임스탬프값이 기록되지만 그 값은 얼마든지 조작할 수 있다. P2P 네트워크에 새로 진입해서 주변에 있는 A라는 컴퓨터로부터 블록체인을 다운로드했는데 B라는 컴퓨터가 자신은 다른 내용의 블록체인을 가지고 있다는 정보를 제공한다면 무엇이 위조되지 않은 블록체인인지 어떻게 판단할 수 있을까? A와 B가 각각 비슷한 시점에 서로 다른 블록을 생성했을 수도 있고, 가능성은 낮겠지만 A와 B 중 하나가 위조된 블록체인을 가지고 있을 수도 있다. A와 B 중 어느 쪽을 믿어야 할까? 이 문제는 어디에도 블록체인의 원본이란 것이 없기 때문에 필연적으로 생기는 문제다.
비트코인에서는 가장 길이가 긴 블록체인을 원본으로 받아들이자는 원칙을 제시한다. 길이가 같다면 둘 다 맞는 것이므로 어느 것을 선택해도 무방하다.
내 주변에서 가장 먼저 문제를 풀었다고 블록을 생성한 피어가 있다면 일단 그 피어의 블록체인을 받아들인다. 1초 후에 다른 피어가 타임스탬프 시간이 더 앞서는 블록을 생성해도 무시한다. 네트워크에 새로 진입해서 A로부터 받은 블록체인이 나중에 B가 가지고 있는 블록체인과 다르다는 것을 알게 되어도 길이가 같다면 B는 무시하고 A를 유지한다. 이렇게 되면 비트코인 네트워크에는 A와 같은 블록체인인 블록체인 A를 보유한 피어와 B와 같은 블록체인인 블록체인 B를 보유한 피어로 나뉘게 될 것이다.
이 이후에 어떤 일이 일어나는지 보자.
블록체인 A를 보유한 사용자는 새로 생성된 블록을 블록체인 A에 추가해 나갈 것이고, 블록체인 B를 보유한 사용자는 새로 생성된 블록을 블록체인 B에 추가해 나갈 것이다. 블록체인 A에 새로 추가된 블록을 블록체인 B의 사용자는 받아들이지 않는다. 블록체인이 다르다는 건 새로 생성된 블록이 가리키는 이전 블록의 해시값이 다르다는 의미이기 때문에 블록체인을 형성할 수 없기 때문이다. 따라서 양쪽 블록체인의 사용자는 완전히 갈라져서 별개의 네트워크처럼 나누어진다.
시간이 지나면 양쪽 사용자 중 컴퓨터 성능이 더 좋은 쪽이 더 빨리 블록을 생성해 더 긴 블록체인을 만들게 된다. 더 긴 블록체인이 아마도 더 많은 사용자가 참여한 블록체인일 것이다. 그리고 둘 중 하나가 블록을 위조하려는 세력이라면 아마도 짧은 블록체인을 가진 쪽이 불순한 세력일 가능성이 높을 것이다. 이제 블록체인 A와 블록체인 B의 길이가 달라지는 시점에 사용자가 짧은 블록체인이 잘못된 블록체인이라고 판단하고 긴 블록체인을 받아들이는 것으로 전략을 바꾼다면 전체 사용자가 가진 블록체인은 곧 하나로 통일된다.
다음 그림은 이 과정을 도식으로 표현한 것이다.
그림 4 블록체인의 원본 유지(원본 출처: https://ko.wikipedia.org/wiki/비트코인)
맨 밑에 있는 초록색 블록부터 시작해서 위로 블록체인을 만들어 간다. 특정 시점에 2개의 블록이 동시에 생성되어 블록체인이 나눠질 수 있지만(그림에선 2개로만 나뉘지만 더 많이 나뉘는 것도 가능하다), 곧 어느 한 블록체인이 더 길어질 것이고 짧은 블록체인은 버려진다. 사용자가 정확히 반으로 나뉜다면 양쪽 블록체인이 동일한 길이를 유지하며 길어질 수도 있지만 이렇게 될 확률은 매우 낮기 때문에 곧 어느 한쪽으로 수렴한다. 가장 긴 블록체인(그림에서 진한 검은색으로 표시된 체인)이 블록체인의 원본이 되고 네트워크의 모든 피어가 동일한 블록체인을 유지할 수 있게 된다.
블록체인 기술은 서로 신뢰하지 않는 컴퓨터가 연결된 네트워크에서도 동일한 데이터를 하나로 유지할 수 있고 아무도 데이터를 위조할 수 없다는 특성 때문에 큰 관심을 받고 있다. 이 글에선 자세히 언급하지 않았지만 공개키 암호화 기법을 이용해 거래 내역을 검증하는 방식도 단순히 서명만 확인하는 것이 아니라 검증 방식 자체를 프로그래밍할 수 있도록 구현되어 있어 비트코인에서는 다양한 구조의 계약을 담는 것도 가능하다.
익명의 한 개발자 손에서 탄생한 작은 소프트웨어인 비트코인이 오픈소스로 공개된 덕분에 다양한 파생 기술이 개발되고 있으며, 이제는 비트코인 기술이 기존의 금융 시스템 전체를 위협하는 정도까지 이르렀다.