brunch

You can make anything
by writing

C.S.Lewis

by DSRV Apr 29. 2022

Classic One, 나카모토 컨센서스

Nakamoto Consensus: 블록체인의 클래식


DSRV Research는 더 많은 사람이 Web3를 이해하고 참여하는 데 기여하기 위해, 블록체인과 관련된 지식을 연재합니다.


Disclaimer: 이 글은 정보 전달을 위한 목적으로 작성되었으며, 특정 프로젝트에 대한 투자 권고, 법률적 자문 등 목적으로 하지 않습니다. 모든 투자의 책임은 개인에게 있으며, 이로 발생된 결과에 대해 어떤 부분에서도 DSRV는 책임을 지지 않습니다. 본문이 포괄하는 내용들은 특정 자산에 대한 투자를 추천하는 것이 아니며, 언제나 본문의 내용만을 통한 의사결정은 지양하시길 바랍니다.


Nakamoto Consensus: 블록체인의 클래식

ℹ️ 추천해요!
Blockchain Digest의 합의 알고리즘 시리즈, [Boom Boom PoW, 작업증명]을 읽고 이 글을 접하신다면 보다 쉽게 내용을 이해하실 수 있습니다.


2008년 비트코인의 개념을 세상에 소개한 나카모토 사토시(Satoshi Nakamoto, 이하 나카모토)는 백서 “Bitcoin: A Peer-to-Peer Electronic Cash System”을 통해 누구나 화폐를 발행할 수 있는 세상을 열었습니다. 그렇다면 화폐를 발행만 하면 가치를 지니게 되는 것일까요?


5만 원권을 복사하여 아주 정교한 5만 원권을 새로 만들어냅니다. 우리는 이 것을 위조지폐라고 부릅니다. 말 그대로 거짓을 만들어낸 것입니다. 어떻게 우리는 이것을 바로 거짓이라고 정의할 수 있을까요? 바로 사회적 합의를 이뤘기 때문입니다. 나카모토 또한 백서에서 제안한 “탈중앙화된 전자화폐 시스템”에서 어떤 거래가 진짜이고 가짜인지 구분하기 위해 대다수가 납득할 수 있는 합의를 이루어야 했습니다. 나카모토는 비트코인 네트워크에서 상호 간의 신뢰가 없더라도 거래가 이루어질 수 있는 환경을 조성하기 위해 작업증명(Proof of Work) 합의 알고리즘을 채택하였고, 이와 더불어 일련의 규칙들을 정의하였습니다[1]. 우리는 그것들을 통틀어 일반적으로 나카모토 합의(Nakamoto Consensus)라고 일컫습니다.


“우주의 기본적인 규칙 중 하나는 완벽한 것은 없다는 것이다” by Stephen William Hawking


나카모토 합의가 포괄하고 있는 내용들을 지금의 기준으로 살펴보았을 때는 불완전해 보이는 요소들도 눈에 보이는 것 같습니다. 일전에 이루어졌던 합의의 기준이 커뮤니티를 통해 개선되기도 하였고, 현대사회에서 중요한 키워드가 된 ESG(Environmental, Social and Governance, 환경, 사회, 지배구조와 같은 비재무적 가치를 중요하게 고려하는 철학)와 함께 형성된 담론은 작업증명의 비효율성과 그로 인해 발생한 전자 폐기물들을 지적하기도 했습니다[2]. 그렇지만 지금 우리가 마주하고 있는 대부분의 Web 3.0 속 담론들은 비트코인과 그 백서의 내용, 그중에서도 핵심인 나카모토 합의를 근간으로 하고 있습니다.


그래서 DSRV Research에서는 블록체인의 뿌리를 이해하기 위해, 클래식인 ‘나카모토 합의’를 다루어보고자 합니다. 이미 한번 말씀드렸듯 모두가 빠르게 달려가는 크립토 산업에서 멀리, 또 오래 달리는 마라톤을 하기 위해서는 기본을 다지는 일이 중요할 테니까요.


어떤 체인을 ‘진짜’로 인정할 것인가 — Longest Chain

동시에 두 블록이 생성될 수 있다면? DSRV Research.

만약 하나의 블록체인에서 동시에 두 개의 블록이 생성될 수 있다면 어떨까요? 동일한 블록 높이(block height, 즉 몇 번째 블록인가)에서 동시에 여러 개의 블록이 생성된다면 거래의 순서를 확정하는 것이 어려워지고, 따라서 이중지불을 방지하기 어려워집니다. 꼭 악의적인 공격이 이루어지는 것이 아니더라도 실제로 이렇게 동시에 두 개의 블록이 동시에 생성되는 경우가 종종 발생하는데, 네트워크 지연이 바로 그 원인입니다.

네트워크 지연 예시. DSRV Research.

비트코인 채굴자들은 세계 곳곳에서 노드를 운영하고 있기 때문에 노드 간 통신에 있어 약간의 시차가 발생할 수밖에 없습니다. 만약 서울의 채굴자(파란색 핀포인트)와 뉴욕의 채굴자(빨간색 핀포인트)가 거의 동시에 논스값을 찾아내는 데 성공한다면 동시에 두 블록이 생기는 현상, 즉 포크(fork)가 발생합니다. 만약 두 갈래로 포크된 체인을 모두 인정한다면 다시 거래의 순서가 확정되지 않는 문제가 발생하기 때문에 이중지불의 위험이 생기게 됩니다. 따라서 탈중앙화된 네트워크에서는 두 개 이상으로 갈라져 포크된 각 블록체인들 중 무엇을 유효한 체인으로 인정할 것인지를 결정하는 기준점인 ‘Fork Choice Rule’이 필요한데, 대표적으로 비트코인과 이더리움은 ‘Longest Chain’의 규칙에 따라 유효한 체인을 선택합니다.

Longest Chain 예시. DSRV Research.

Longest Chain은 쉽게 말해서 포크가 발생했을 때 더 긴 체인을 선택하는, 보다 정확히 말하자면 더 많은 해시 파워가 소모된 체인이 나열한 트랜잭션의 순서를 유효한 것으로 인정하는 노드 간의 합의 기준입니다. 기술적인 면을 걷어두고 생각하면 사실 이러한 방식의 의사결정은 다수결의 원칙을 기반하고 있습니다. 즉, 비트코인 백서의 표현(“Proof-of-Work is essentially one-CPU-one-vote.”)을 빌려 이야기하자면 하나의 CPU가 하나의 투표권을 가진다고 생각했을 때, 더 많은 CPU의 연산이 사용돼 더 길게 연결된 체인이 그렇지 않은 체인보다 다수의 의사를 반영한다고 보는 것입니다.


따라서 비트코인 네트워크를 유지하는 데 사용되는 해시 파워의 대다수가 정직한 주체에 의해 확보된다면 Longest Chain 방식의 합의가 올바른 트랜잭션의 역사를 확정할 수 있게 됩니다. 합의를 이루는 과정에서 결국 마지막으로는 체인이 한 개만 남게 되는데, 이렇게 유효한 거래의 역사로 인정된 체인을 Canonical Chain이라고 합니다. 위의 예시에서는 서울에 있는 노드가 제안한 블록 위에 더 많은 블록이 올라가 있으므로 해당 체인이 최종적으로 남아 Canonical Chain이 됩니다.


‘긴’ 체인이 정말 유효한 체인일까? — Chainwork 계산

이 글을 자세히 읽고 계신 독자분들 중 일부께서는 여기서 의문이 생기실 수 있습니다. ‘단순히 블록의 수가 많다고 해서 많은 연산을 필요로 했다는 건 아니지 않나?’와 같이 말이죠. 만약 같은 의문을 가지셨다면, 축하드립니다. 나카모토 사토시보다 날카로운 직관을 가지셨군요! 실제로 나카모토 사토시의 비트코인 백서가 놓쳤다고 평가받는 부분이 바로 이 부분입니다.

Heaviest Chain 예시. DSRV Research.

이전 예시를 이번엔 블록 채굴의 난이도를 의미하는 difficulty의 개념을 포함하여 생각해보겠습니다[3]. 만약 뉴욕의 노드가 제안한 체인이 서울의 노드가 제안한 체인보다 더 높은 difficulty를 통해 생성되었다면 아무리 서울의 체인이 더 많은 개수의 블록을 포함한다고 하더라도 뉴욕의 체인보다 더 많은 연산(작업)을 통해 생성되었다고 이야기할 수는 없습니다. 그럼에도 단순히 블록 높이가 더 높다는 이유로, 쉽게 이야기하자면 말 그대로 더 길다는 이유만으로 포크된 두 체인 중에서 서울의 노드가 주장하는 체인을 선택한다면 실제로 더 무거운 연산을 시행하지 않았던 체인을 선택할 수도 있기 때문에 ‘하나의 CPU, 하나의 투표권’의 개념에서 멀어지게 될 것입니다. 실제로 2009년 1월 8일에 릴리즈된 비트코인 버전 0.1에서는 제안된 블록 위에 올라간 블록의 개수로 Canonical Chain을 결정했습니다. 이때의 용어 선택에 따라 그때부터 지금까지 이 규칙을 Longest Chain으로 명명하고 있지만 현재에 와서는 단순히 길이가 긴 체인이 아니라, 어떤 체인이 더 무거운 연산을 수행하였는가를 통해 Canonical Chain을 결정합니다[4].


어떤 체인이 얼마나 더 무거운 연산을 수행했는가를 계산하기 위해서는 각 체인에 연결된 블록들이 통계적으로 몇 번의 연산을 실행했는지 계산하여 모두 더해야 합니다. 해시함수는 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff(16진수)개의 결과값을 가질 수 있습니다. 만약target 값이 0x00000000ffff0000000000000000000000000000000000000000000000000000이라면

이 값으로 나누어:

0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff / 0x00000000ffff0000000000000000000000000000000000000000000000000000 = 0x0100010001

통계적으로 0x0100010001(=4,295,032,833)번의 해시함수 대입을 통해 논스값을 찾을 수 있을 것으로 기대할 수 있습니다. 이러한 방식으로 블록마다 필요한 연산을 수치화하여 모두 더한다면 해당 체인의 chainwork를 계산할 수 있고 더 큰 chainwork 값을 가지는 체인을 선택함으로써 Canonical Chain을 확정지을 수 있습니다. 위의 단락에서 언급했듯이 어떤 블록의 target 값은 논스를 포함한 블록의 여러 필드를 해시함수에 넣었을 때 얼마 이하의 블록 해시값을 결과로 내야 하는가를 나타내는 값입니다. target 값이 낮아질수록 조건을 만족하는 논스값의 개수가 줄어들기 때문에 difficulty높아집니다. target 값이 낮아진다면 (즉, difficulty가 상승한다면) 더 많은 횟수의 대입을 통해 논스값을 찾을 수 있을 것입니다. 따라서 위의 뉴욕이 주장하는 체인은 절대적인 블록의 수가 서울의 체인보다 적어 더 짧더라도 difficulty

가 더 높기 때문에 더 높은 chainwork 값을 가질 수 있습니다.


더 빨리, 더 길게 — 51% 공격

위에서 이야기했듯, Fork Choice Rule에 따라 Longest Chain, 즉 Canonical Chain을 결정하게 되면, 지금까지 살펴본 방식으로 어떤 거래의 역사가 유효한 역사인지 자동으로 합의하고 거래의 순서를 확정, 이중지불을 방지할 수 있습니다. 그렇지만 동시에 이러한 방식의 합의는 51% 공격이라는 블록체인 해킹 포인트가 되기도 합니다. 더 긴 체인, 즉 해시 파워를 더 많이 소비한 체인을 직접 만들면 어떤 악의적인 블록이더라도 일단 유효하다고 판단되기 때문입니다.

51% 공격 예시 — Cross Chain Bridge. DSRV Research.

1BTC를 비트코인 체인에서 이더리움 체인으로 넘기는 트랜잭션을 보냈다고 가정한다면, 해당 트랜잭션은 블록에 포함되어 체인에 기록됩니다. 그렇지만 만약 악의적인 주체가 비트코인 네트워크의 해시 파워 중 절반 이상을 차지한다면, 즉 논스값을 다른 정직한 노드들보다 더 빠르게 찾을 확률이 50%가 넘어간다면 새로운 포크를 임의로 만들어 기존의 체인을 앞지르는 것이 가능해집니다. 따라서 이미 비트코인이 이더리움 체인으로 넘어간 시점에서 해당 트랜잭션을 담고 있는 포크를 악의적으로 그 트랜잭션을 누락한 포크가 앞지르게 된다면 비트코인 체인에는 처음부터 비트코인이 이더리움 체인으로 넘어가지 않은 것으로 기록됩니다.

51% 공격으로 인한 트랜잭션 취소. DSRV Research.

그렇지만 이미 이더리움으로 넘어간 비트코인은 여전히 존재하며 다시 삭제할 수는 없습니다. 결과적으로 만들어지지 말아야 할 비트코인이 만들어져 이중지불이 가능해진 것입니다.


51% 공격이라는 이름 때문에 헷갈리기 쉽지만, 사실 이런 식의 공격은 악의적인 주체가 꼭 전체 해시 파워의 절반 이상을 차지해야만 가능해지는 것은 아닙니다. 만약 악의적인 주체가 단 25%의 해시 파워만을 확보했더라도 공격의 상황을 가정해볼 수 있는데요, 25%의 해시 파워를 확보했다는 것은 악의적인 주체가 이번 차례에 블록을 성공적으로 생성할 확률이 25%, 생성하지 못할 확률이 75%라는 의미가 될 수 있습니다. 그리고 충분한 시간이 흘러 새로운 포크와 이전 포크의 격차가 결국 1블록 줄어들 확률은 (0.25 / 0.75)로, 대략 33%입니다. 작업증명에서는 새로운 블록이 제안되었을 때, 일반적으로 그 뒤로 6개의 블록이 더 연결되면 해당 블록이 어느정도 확정되었다고 간주합니다. 이 6개의 블록이 더 생성되는 동안, 악의적인 트랜잭션들을 담아 새로운 포크를 발생시켜 기존의 체인을 오염시킬 수 있는 확률은 (0.33)^6, 대략 0.137%로 계산해볼 수 있습니다[5]. 운이 정말 좋다면 51% 공격을 25%의 해시 파워로만 성공시킬 수 있는 것이죠(물론, 거의 불가능합니다). 확보한 해시파워가 50%에 가까워질수록 이 확률은 100%에 가파르게 가까워집니다.

풀 간 해시레이트 구성 비율 (2022년 2월). Source: https://btc.com/stats/pool?pool_mode=year

그렇다면 실제로 비트코인은 51% 공격에 대해 충분한 저항성을 가지고 있을까요? 위의 그래프는 블록 수를 기준으로 계산한 최근 1년간 해시래이트의 분산도를 그래프화 한 것입니다. 상위 4개의 마이닝 풀(Mining Pool)이 악의적으로 담합하지 않는 이상 비트코인을 대상으로 51% 공격을 감행하기는 매우 어려워 보입니다. 이로 미루어보아, 비트코인은 상대적으로 탄탄한 보안성을 의미할 수 있는 해시레이트 분포를 갖고 있다고 이야기할 수 있겠습니다. 그렇다면 모든 작업증명기반의 블록체인들이 51% 공격으로부터 자유롭다고 이야기할 수 있을까요? 실제로 해킹 피해가 발생했었던 비트코인 골드(BTG)와 같이 네트워크를 지탱하는 전체 해시레이트가 낮은, 규모가 작은 체인들은 공격에 드는 비용이 작아 51% 공격으로부터 자유롭기 어렵습니다[6]. 이렇듯 비트코인이나 이더리움 등을 제외한 다른 작업 증명 기반 블록체인들이 그들처럼 네트워크의 해시레이트를 탄탄하게 확보하지 못하는 이상 높은 수준의 탈중앙성과 보안성을 이루는 것은 매우 어려운 일일 것입니다.

❓ 용어 정리;  마이닝 풀(Mining Pool)이란 무엇인가요?

마이닝 풀은 채굴자들의 연합으로, 개인들이 모여 집단을 이루어 보다 더 큰 해시파워를 확보하고 규모의 경제를 이루어 채굴 확률을 높이고자 하는 목적을 가지고 있습니다. 전통적으로는 마이닝 풀에 참여하는 채굴자들에게 일정 범위의 논스 후보값을 대입하여 검증하도록 작업을 할당함으로써 집단적으로 채굴의 효율성을 개선하는 방식을 사용합니다. 그렇게 찾아진 논스를 사용하여 채굴된 토큰은 블록 검증에 기여한 만큼 마이닝 풀을 구성하는 채굴자에게 분배됩니다 (분배되는 구체적인 방식은 각 마이닝 풀마다 다릅니다).
분산되어야 할 채굴자가 중앙적인 집단을 이루어 시장을 과점하는 마이닝 풀의 규모의 경제적 성격 때문에 중앙화의 우려가 존재하지만, 채굴자는 경제적 유인에 의하여 효율성을 개선하고자 하는 경제적 주체이기 때문에 이러한 마이닝 풀의 존재는 현재 산업 구조하에서는 필연적이라고 볼 수 있습니다.


마무리

우리는 앞서 다루었던 작업증명에 대한 글에 이어 비트코인 백서에서 정의된 나카모토 합의가 포괄하고 있는 내용을 다루어보았습니다. 나카모토 합의의 구현체인 비트코인은 사실 많은 한계점도 가지고 있습니다. 실질적으로 나카모토가 주장한 “A Peer-to-Peer Electronic Cash System”으로 활용되기엔 확정된 결제를 보장하는 데까지 무려 1시간이 걸린다는 것이 대표적인 예시입니다. 이를 보완하기 위해 커뮤니티로부터 등장한 다양한 의견들은 합의를 이루지 못해 나카모토 사토시가 의도하지 않았을 여러 하드포크가 단행되기도 했으며, 채굴자들 간의 경쟁이 극심해지는 해시파워 전쟁이 야기되기도 했습니다.


우리는 살면서 클래식이라는 단어를 가끔 접하게 됩니다. 사전적 의미의 클래식은 “고전적인”이라는 뜻입니다. 고전이란 오랫동안 많은 사람에게 널리 읽히고 모범이 될 만한 예술 작품을 이야기합니다. 사실 클래식이라는 단어는 고대 로마 시대의 최고 계급을 이르던 말인 클라시쿠스(clássĭcus)에서 기원합니다. 그러나 그 당시 일부의 소수자들만이 즐기던 문화적 향유물은 시간이 흘러 많은 사람들이 즐길 수 있는 대중문화가 되었습니다.


앞서 언급된 여러 한계점들에도 불구하고 나카모토 합의는 비트코인을 탄생시키며 오늘날의 수많은 블록체인 프로젝트들과 크립토 커뮤니티들이 이끄는 활발한 양적, 질적 성장을 이루게 한 클래식이 되었다는 사실은 변하지 않습니다. 클라시쿠스가 일부의 향유물에서 대중문화로 이어지는 길을 걸었듯, 비트코인과 함께 시작된 블록체인과 Web3 문화가 대중들에게 더 가까이 왔을 때 오늘 함께 살펴본 이 글이 독자분들께 블록체인의 클래식이 무엇이었는지 명확하게 전달해주길 바랍니다. 이 글을 읽을 귀중한 시간을 할애해주셔서 감사합니다.


Author
Seokjoong Yoon of DSRV, Research Associate (@imlearning_eth)


Reviewed by
Owen Yoonjae Hwang of DSRV, Research Lead (@owenhwang_dsrv)
Youngbin Park of DSRV, Research Associate (@bin0_0bin)


✅ Key Takeaways

나카모토 컨센서스에 따르면 네트워크 지연, 혹은 악의적인 의도를 가진 주체에 의해 포크가 발생할 수 있기 때문에, ‘Longest Chain Rule’을 통해 포크가 발생된 여러 체인 중 하나를 선택합니다.

‘Longest Chain Rule’은 기존의 맹점을 보완하여 현재는 블록 채굴의 난이도를 의미하는 ‘difficulty’ 값을 고려하여 해당 체인이 얼마나 많은 연산을 수행했는지를 나타내는 ‘chainwork’ 값을 기준으로 정해지기 때문에 실제로는 가장 긴 체인이 선택되지 않을 수 있습니다.

작업증명 기반의 블록체인은 특정 주체가 네트워크의 안정성을 지탱하는 힘인 ‘해시레이트’의 과반수, 즉 51% 이상을 획득할 시 이중 지불 등의 공격이 발생될 수 있으며, 이를 51% 공격이라고 지칭합니다.

블록체인에 참여하는 컴퓨터가 많아지거나 성능이 향상될수록 네트워크의 전체 ‘해시레이트’는 상승하게 되며, 그에 따라 네트워크의 51%를 확보하는 것이 더 어려워져 해당 블록체인의 보안성이 강화됩니다.


References

[1] Bitcoin Whitepaper
[2] Environmental Sustainability Key Sticking Point in EU MiCA bill — Cointelegraph
[3] Difficulty — Bitcoin Official Wiki
[4] The Longest Blockchain is not the Strongest Blockchain — Ava Howell
[5] On Settlement Finality — Vitalik Buterin
[6] Bitcoin Gold Hack Shows 51% Attack Is Real — Rakesh Sharma
작가의 이전글 트릴레마, 처음 뵙겠습니다.
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari