비트코인 : 개인간전자화폐시스템 사토시나카모토 satoshin@gmx.com www.bitcoin.org 초록. 순개인과개인간의전자화폐는한집단에서다른곳으로금융기관을거치지않고직접온라인지불을가능하게할것이다. 디지털서명기술이일부해결해주지만, 믿을수있는제 3자가이중지불을방지해야한다면그주요한장점은사라지게된다. 우리는이논문에서 P2P 네트워크를이용한이중지불문제의해결방법을제안하고자한다. 계속진행되고있는암호화기반작업증명과정의연쇄상에서네트워크시간및거래를암호화하여기록을생성하게되면작업증명과정을되풀이하지않는한바꿀수없게된다. 가장긴체인은각사건순서를입증해주기도하며, 가장많은컴퓨팅파워가입증했다는뜻이기도하다. 노드들에의해제어되는컴퓨터전력의과반수가협력하여네트워크를공격하지않는한, 그들은가장긴체인을생성하며네트워크공격자를능가하게될것이다. 이러한네트워크는최소한의구조를필요로한다. 각노드들은자발적으로그네트워크를떠나거나다시합류할수있고, 어떤일이벌어졌는지에대한입증으로가장긴작업증명체인을받아들이는노드들의메시지가최대한공유된다. 1. 서론인터넷에서의상거래는거의금융기관을제 3자신용기관으로하는전자지불방식에전적으로의존하게되었다. 대부분의거래에시스템은충분히작동하고있지만, 여전히신용기반모델이라는내재적인약점을갖고있다. 완전히취소가능한거래는사실상불가능한데, 금융기관은거래상의분쟁을중재하는일을피할수없기때문이다. 이러한중재비용은결국거래수수료를올리고, 실질적인최소거래금액을제한하여소액거래의가능성을막는데다가, 회수가불가능한서비스에까지도번복가능한지불을하게만들어더많은비용을발생시킨다. 즉, 지불번복을위해더많은신용을요구하게된다. 상업자들은불필요한더많은정보를요구하여고객을귀찮게만들고경계하게된다. 일정한비율로가짜지불이되는것은불가피한현실이다. 이러한비용과지불의불확실성은사람이직접물리적으로화폐를지불하여피할수있으나, 신용기관없이통신상으로지불하는방법은존재하지않는다. 이러한문제는바로신용보다는암호화기술에기반한전자지불시스템을이용하여자발적인두거래자가제 3자인신용기관없이도직접적인거래를가능하게만든다. 전산적으로번복이불가능한송금은판매자를가짜지불로부터보호할수있으며, 구매자는일반에스크로방식을통해보호받을수있다. 이논문에서우리는거래들의시간순서를전산적으로입증하게만들도록하는 P2P 분산네트워크기반타임스탬프서버를이용하여이중지불문제를방지하는해법을제안하고자한다. 이시스템은악의적으로협력하는노드그룹보다정직한노드들이더많은컴퓨팅파워를총체적으로제어하는한안전하다. 1
2. 거래우리는전자화폐를디지털서명의연속으로정의한다. 각암호키소유자들은그전까지의거래내역에다음소유자의공개키를덧붙인뒤에자신의비밀키로암호화하는디지털서명을하고넘긴다. 돈을받는사람은서명소유자들의체인과, 서명들을검증할수있다. 문제의과정은돈을받는사람은소유자들중한명이이중지불을하지않았는지검증할수가없는상황에서발생한다. 공통적인해법은각거래가이중지불이되었는지신용해주는중앙기관을도입하는것이다. 각거래후에, 그화폐는다시새로운화폐로찍어내기위해중앙기관으로회수되어야하고, 이중지불이아니란걸믿을수있도록중앙기관에서만직접화폐를발행하여쓰도록한다. 이러한방법의문제는화폐시스템전체가바로은행같은중앙기관에모든거래내역이거쳐가도록하는방법에의존하게된다는것이다. 결국돈을받는사람이이전소유자가그전에도어떤거래에도서명을하지않았는지를확인할방법이필요하다. 그러려면가장먼저일어난거래내역을찾기만해도그이후에이중지불을시도했는지확인할필요가없게된다. 거래내역이하나라도비어있는지확인하는유일한방법은모든거래내역을살펴보는것이다. 바로찍어낸화폐를기반으로한모델에서는모든거래를확인하고어느것이먼저이뤄졌는지를결정하면된다. 신용기관을통하지않고도이런방법을가능하게하기위해서는, 모든거래가공개적으로알려져야하고 [1], 참여자들이시간순서에따라단일거래내역으로수용하는시스템이필요하다. 돈을받는사람은매거래시마다, 과반수이상의노드들이최초의거래라고인정해주는시간증명이필요하게된다. 3. 타임스탬프서버우리가제안하는해결방법은타임스탬프서버에서시작된다. 타임스탬프서버는시간내역이기록된항목들의블록해시를취합하고, 신문이나유즈넷포스트처럼그해시를널리발행하는역할을한다 [2~5]. 이러한타임스탬프내역은해시에포함될수있도록그시간에데이터가명백히존재했다는것을입증한다. 각타임스탬프내역은이전타임스탬프로부터받은해시내역을포함시킴으로써보강하는체인을형성한다. 2
4. 작업증명 P2P를기반으로하는분산네트워크타임스탬프서버를구현하기위해서는신문이나유즈넷포스트대신 Adam Back s Hashcash[6] 와비슷한작업증명시스템을이용할필요가있다. 작업증명에는 SHA- 256과같은알고리즘으로다수의 0비트들로시작되는암호화해시값을찾는과정이포함된다. 평균적으로이러한작업에드는시간은연속되는 0비트의요구개수에따라지수적으로증가하며, 암호화해시를한번수행하는것으로확인할수있다. 타임스탬프네트워크에서는작업증명의방법으로블록해시결과가 0비트들을갖도록하는해시값을찾을때까지블록에임시값 (nonce) 을증가시켜가는과정을구현한다. CPU가노력한결과가한번작업증명조건에도달하게되면, 그블록은다시과정을번복하지않는한고정된다. 그다음블록들이체인을형성함으로써, 하나의블록을변경하기위해서는그블록을포함한다음모든블록들에대해작업증명과정을다시수행해야하게된다. 작업증명은또한다수결에의한의사결정과정에서대표자를결정하는문제를해결한다. 다수가한 IP주소당한번의투표를할수있는시스템기반으로결정된다면, IP주소를많이확보하는방법으로누구나시스템을뒤엎어버릴수있다. 그러나작업증명은본질적으로한개의 CPU당한번의투표를하는구조이다. 다수의결정은가장긴체인을나타내며, 이는가장많은작업증명에노력이투입된것이된다. 컴퓨팅파워의과반수가정직한노드들에의해제어되고있다면, 정직한체인이가장빠르게늘어나, 경쟁체인을압도하게될것이다. ( 역자주 : 실제로는 Emin Gün Sirer, Ittay Eyal에의해전체컴퓨팅파워의과반수인 50% 이상이아니라 25% 이상만점유해도된다고밝혀졌는데, 현재전체순위 1~2위의마이닝풀집단은 25% 이상에달하고있음.) 과거의블록을수정하기위해서는공격자는수정할블록과그이후에이어진모든블록에대해작업증명과정을번복한다음에이어서다른정직한노드들이이루고있는체인보다더빠른속도로따라잡아추월해야한다. 느린공격자의추격가능성은블록들이이어서추가될수록지수적으로감소하는것에대해뒤에서언급하기로한다. 시간이흐름에따라하드웨어속도증가와노드들의참여도증가율을보상하기위해서, 작업증명의난이도는시간당평균블록생성수를기준으로하는이동평균을타깃으로결정한다. 블록이너무빠르게생성되면난이도는급증한다. 5. 네트워크 네트워크의동작은다음과같은과정으로이루어진다 : 1) 새로운거래내역이모든노드에알려진다. 2) 각노드들은새로운거래내역을블록에취합한다. 3) 각노드들은그블록에대한작업증명을찾는과정을수행한다. 4) 어떤노드가작업증명을성공적으로수행했을때, 모든노드에게그블록을전송한다. 5) 노드들은그블록이모든거래가이전에쓰이지않고유효한경우에만승인한다. 6) 노드들은자신이승인한블록의해시를이전해시로사용하여다음블록을생성하는과정을통해그블록이승인되었다는의사를나타낸다. 노드들은항상가장긴체인을옳은것으로간주하며그체인이계속확장하도록작업을수행한다. 3
만약두개의노드가서로다른버전의다음블록을동시에알리게될경우, 어떤노드들은둘중하나를먼저전달받게된다. 이러한경우각노드들은자신이먼저받은블록에대해작업을수행하지만, 체인의다른갈래도더길어질경우에대비하여저장해둔다. 체인의어느한쪽갈래가더길게생성되는작업증명이알려지면체인갈래의길이는더이상대등하지않게되고, 각노드들은체인이더긴갈래로작업을전환한다. 새로운거래내역알림이꼭모든노드에까지전달될필요는없으며, 많은노드에전달될수록더빨리블록에포함될것이다. 블록알림은또한누락되는경우에도취약하지않다. 만약한노드가블록을받지못했을경우, 다음블록을받고하나가빠졌음을알아차려다시요청해받을것이다. 6. 보상블록의첫번째거래내역은약속에의해최초블록생성자에게새로운돈을소유할수있게해주는특별한거래가된다. 이렇게하면돈을발행하는중앙기관없이도네트워크를구성하는모든노드들에게보상을지급하고, 유통될돈을처음에배분하는방법이된다. 지속적인일정량의새돈을추가하는건금을유통할수있게광부들이자원을쏟는것과유사하다. 이경우에는컴퓨팅자원과전력이소비된다. 보상에는또한거래수수료가될수도있다. 거래내역에서출력되는돈이입력되는돈보다적다면, 그차액은수수료처럼작용하여그거래내역을포함하는블록생성의보상가치로추가된다. 정해진총량의돈이유통된다음부터는, 보상은거래수수료만으로이뤄지며인플레이션으로부터완전히자유롭게된다. 이러한보상시스템은각노드들이정직하게참여를유지할수있도록한다. 욕심을낸공격자가다른정직한전체노드들보다더많은컴퓨팅파워를만들어낼수있다면, 그는아마도다른사람들로부터지불을철회하여돈을사취하거나새로운돈을생성하려해야할것이다. 하지만그런식으로다른사람들이엮이지않고시스템을약화시켜자신의부를축적하는이기적인방법보다는약속대로정직하게시스템에참여하는것이더이득이라는걸알게될것이다. 7. 저장공간재확보최근거래내역에있던돈이충분히많은블록에의해묻히게되면, 지나간거래내역은저장공간확보를위해버려져도된다. 블록해시를다시헤집지않고도이를수월하게하기위해서는, 거래내역은머클트리 (Merkle Tree) 구조로해시가되며 [7][2][5], 머클트리구조의루트부분만블록해시에포함되어야한다. 오래된블록은트리구조에서가지를쳐냄으로써더작아지게되며, 하위해시는저장할필요가없게된다. 4
거래내역이없는블록헤더는약 80바이트정도이다. 매 10분마다블록이생성된다고가정할경우, 80바이트 * 6 * 24 * 365 = 4.2MB가매년소요된다. 2008년기준으로시중에판매되고있는, 2GB 메모리가장착된컴퓨터시스템과, 매년 1.2GB가증가할거라예측한무어의법칙에의하면, 블록헤더가메모리를점유하고있어야하더라도문제가되지않는다. ( 역자주 : 무어의법칙은본문과달리 18개월에두배가된다는예측이다. 즉, 매년약 1.59배로증가 ) 8. 지불입증간소화굳이전체네트워크노드를쓰지않더라도, 돈이지불된사실을입증하는것이가능하다. 사용자는가장긴작업증명체인의블록헤더의사본만갖고있으면, 자신이가장긴체인이라확인할때까지네트워크노드들에게요청하고, 그거래내역이기록된블록에연결된머클트리일부만받아오면된다. 그는스스로거래내역을확인할수는없고, 체인에연결되어네트워크노드가그것을승인했는지, 이후에도계속블록이추가로확증되어승인된지로알수있다. 이렇게정직한노드들에의해네트워크가제어되는한거래인증은신뢰할수있지만, 공격자에의해네트워크가압도당하면취약하다. 네트워크노드들은스스로거래내역을입증할수있지만, 단순히공격자에의해과점된네트워크로거래를조작하고유지함으로써무력화될수있다. 이러한방법을보호하는전략으로는사용자의소프트웨어에서블록전체를다운로드받고모순임이확증된유효하지않은블록을발견했을때네트워크노드들이경고알림을받는것이다. 잦은지불을받는사업자의경우에는아마도자체노드에서독립된보안체계와빠른인증방법을더원할것이다. 9. 금액의결합과분할돈을개별로관리하는것도가능하겠지만, 거래에서작은개별단위까지굳이나누어다루는것은거추장스럽다. 금액을나누고합칠수있도록거래내역은복수의입력과출력으로이뤄진다. 대개는큰금액의단일입력이거나, 소액모금을위한여러입력이거나, 한출력은지불다른출력은거스름돈같은두개의출력방법이될것이다. 5
이를팬아웃이라하며, 거래가여러거래들에기반하고각거래들이다수에의존하는경우더라도여 기서는문제가되지않는다. 거래기록의완전히독립된사본을추출할필요가없다. 10. 개인정보보호기존의은행모델은당사자들과제 3자신용기관에정보접근권한을제한하여개인정보보호가어느정도가능하도록했다. 모든거래를공개적으로알려야하는중요성은이러한것을불가능하게하지만, 공개키를익명으로소유하도록함으로써정보의흐름을차단하고개인정보가유지될수있다. 외부에서는누가다른누군가에게얼마를보냈단사실을볼수는있으나, 그거래당사자들의신분으로연결되지않으면알수가없다. 이는증시에서공개되는, 시간과거래목록만확인가능한거래체결정보공개수준과비슷하다. 추가적인안전장치의일환으로, 매번거래마다새로운공개키-비밀키쌍을사용하여공통의소유자에게연결되도록하면된다. 여러개의입력을갖는거래의경우에는여전히연결고리를남기는것이불가피하게도, 그입력들이동일소유자라는사실을공개된다. 소유자의암호키가공개되면그러한연관성이다른거래내역에서도동일인에의한것이라는게알려지게된다. 11. 계산공격자가다른체인의갈래를빠르게생성하려고시도하여정직한노드들의체인을앞질러가장긴체인을생성할시나리오를간주해보자. 이것이성공한다하더라도, 그렇게가짜금액을만들거나공격자소유였던적이없는돈을사취하더라도, 임의의시스템변화상태로는남겨두지않는다. 노드들은유효하지않은거래를지불로승인하지않을것이며, 정직한노드들은그러한거래내역을포함하는블록을절대받아들이지않을것이다. 공격자는오직최근에지불한돈을도로되찾기위해그의거래내역하나만바꾸려고시도할수있다. 정직한노드들의체인과공격자의체인간의경쟁은이항랜덤워크 (Binomial Random Walk) 로특정지을수있다. 정직한체인이하나의블록을성공적으로생성하는사건이일어나면 +1, 실패하여공격자의체인이블록을하나생성하는사건이일어나면 -1이라한다. 공격자가갖고있지도않은금액으로성공할확률은도박사의파산문제 (Gambler s Ruin problem) 와비슷하다. 무제한의신용을가진도박사가적자상태로시작하여거의무제한의게임을시도하여손익분기점에도달한다가정하자. 그가손익분기점에도달할확률, 즉공격자가정직한체인을따라잡을수있는가능성은다음과같이계산할수있다 [8]: p = 정직한노드가다음블록을찾을확률 q = 공격자의노드가다음블록을찾을확률 qz = z 개의다음블록들을빨리찾을확률 6
p > q 라는가정이주어진다면, 공격자가블록증가를따라잡을수있는확률은블록수에지수적으로감소하게된다. 공격자가먼저달려들어운이좋게성공하지못한다면, 가능성은뒤로갈수록점점희박해진다. 이번에는새로운거래에서돈을받는사람입장에서송금자가거래를바꾸지못할거라는것이충분히확증하려면얼마나기다려야하는지생각해보기로한다. 송금자가받는사람이일시적으로돈을받았다믿게만들고일정시간뒤에다시돈을자기자신에게되돌리게시도하려는공격자라가정하자. 받는사람은그러한일이벌어지면경고알림을받을것이고, 공격자는그게늦기를바랄것이다. 받는사람은새로운암호키쌍을생성하여송금자에게서명하기직전에공개키를넘긴다. 이러한방법은공격자가미리충분한시간전에가짜블록체인생성을준비해두어가짜거래를성립시키는것을방지한다. 송금이이뤄질때, 정직하지않은송금자는은밀히그의다른거래내역을포함하는체인을동시에생성을시작한다. 돈을받는사람은거래가블록에포함되고추가로 z개의추가블록들이연결될때까지기다린다. 그는공격자가얼마나많은작업을진척시켰는지정확히모르지만, 정직한블록들이매평균시간간격마다생성될것이고, 공격자의잠재적진행률은포아송분포의기대값인다음과같을것이다. 공격자가그순간에도여전히따라잡을수있는확률을계산하기위해, 포아송분포를공격자가그 시점에블록체인생성을따라잡을매진행률에각각곱하도록한다. 분포의무한급수를더하지않기위해식을정리하면 이를 C 언어코드로구현하면 #include <math.h> double AttackerSuccessProbability(double q, int z) { double p = 1.0 - q; double lambda = z * (q / p); double sum = 1.0; int i, k; for (k = 0; k <= z; k++) { double poisson = exp(-lambda); for (i = 1; i <= k; i++) poisson *= lambda / i; sum -= poisson * (1 - pow(q / p, z - k)); } return sum; } 7
결과를돌려보면 z 값에따라지수적으로확률이감소함을알수있다. q=0.1 z=0 P=1.0000000 z=1 P=0.2045873 z=2 P=0.0509779 z=3 P=0.0131722 z=4 P=0.0034552 z=5 P=0.0009137 z=6 P=0.0002428 z=7 P=0.0000647 z=8 P=0.0000173 z=9 P=0.0000046 z=10 P=0.0000012 q=0.3 z=0 P=1.0000000 z=5 P=0.1773523 z=10 P=0.0416605 z=15 P=0.0101008 z=20 P=0.0024804 z=25 P=0.0006132 z=30 P=0.0001522 z=35 P=0.0000379 z=40 P=0.0000095 z=45 P=0.0000024 z=50 p=0.0000006 P 가 0.1% 보다작을경우를풀면 P < 0.001 q=0.10 z=5 q=0.15 z=8 q=0.20 z=11 q=0.25 z=15 q=0.30 z=24 q=0.35 z=41 q=0.40 z=89 q=0.45 z=340 12. 결론지금까지신용에기반하지않은전자거래시스템을제안하였다. 디지털서명으로이뤄진일반적인화폐구조에서출발했다. 소유권을강력히제어하는방법을제공하지만이중지불을방지할방법이없이는완벽하지가않다. 이러한문제를해결하기위해, 과반수의컴퓨팅파워를정직한노드들이제어한다면계산상으로공격자가빠르게조작할수없이공개적으로거래를기록할수있도록작업증명을수행하는 P2P 네트워크를제안하였다. 네트워크는구조적이지않은단순함에서믿을수있다. 노드들은조직화할필요도없이협력하도록되어있다. 특정위치에메시지가전달되지않더라도최선을기반으로전달되기만하면되기때문에, 정체를확인할필요도없다. 노드들은자발적으로네트워크를떠났다가합류할수있으며, 작업증명체인을그동안에벌어졌던사실에대한증명으로받아들이기만하면된다. 컴퓨팅파워를통해의사결정을하고, 유효한블록에대해서만작업을수행함으로써유효하지않은블록들은거부하게됨으로써거래승인을표시하게된다. 이러한합의메커니즘을위해어떤규칙이나보상이성립될수있다. 8
참고문헌 [1] W. Dai, "b-money," http://www.weidai.com/bmoney.txt, 1998. [2] H. Massias, X.S. Avila, and J.-J. Quisquater, "Design of a secure timestamping service with minimal trust requirements," In 20th Symposium on Information Theory in the Benelux, May 1999. [3] S. Haber, W.S. Stornetta, "How to time-stamp a digital document," In Journal of Cryptology, vol 3, no 2, pages 99-111, 1991. [4] D. Bayer, S. Haber, W.S. Stornetta, "Improving the efficiency and reliability of digital time-stamping," In Sequences II: Methods in Communication, Security and Computer Science, pages 329-334, 1993. [5] S. Haber, W.S. Stornetta, "Secure names for bit-strings," In Proceedings of the 4th ACM Conference on Computer and Communications Security, pages 28-35, April 1997. [6] A. Back, "Hashcash - a denial of service counter-measure," http://www.hashcash.org/papers/hashcash.pdf, 2002. [7] R.C. Merkle, "Protocols for public key cryptosystems," In Proc. 1980 Symposium on Security and Privacy, IEEE Computer Society, pages 122-133, April 1980. [8] W. Feller, "An introduction to probability theory and its applications," 1957. 원문 S. Nakamoto, Bitcoin: A Peer-to-Peer Electronic Cash System, http://bitcoin.org/bitcoin.pdf, 2009. 번역 - 츄이스 9