안녕하세요, 땡글 신입생 블랙리퍼입니다.
얼마 전 한 땡글 회원님의 게시글에 답변을 댓글로 달던 가운데, 암호화폐에 대한 토막상식 가운데 조금 덜 이야기되고 있는 부분에 대해서 짚고 넘어가다 보면 암호화폐에 대한 지식을 공유하고 이해를 함께 높여 가는 데에도 기여할 수 있지 않을까 싶어 이렇게 글을 쓰게 되었습니다.
이 글에서는, 비트코인을 비롯한 여러 암호화폐, 특히 작업증명(Proof-of-Work) 방식으로 최신 블록을 생성하는 구조인 암호화폐들에 대한 보안침해 공격인 '51% Attack'에 대해 간단히 알아보고, 또 최신 연구동향 한 토막을 소개해 보도록 하겠습니다.
1. 도입
'51% Attack'이라고 흔히 말하는 공격기법은, 정말로 정확히 51%의 블록체인 네트워크 내 해시 파워를 점유해야 하는 것은 아니고, 절반 이상의 해시 파워를 나타내는 숫자로서 상징적인 '51'을 이름으로 붙인 것뿐입니다. 51% Attack을 우려한다는 것은, 다시 말해, 특정 마이닝 풀 혹은 그룹에서, 암호화폐 네트워크 해시 파워의 총량의 절반을 초과하는 해시 파워를 가지게 되는 상황이 우려된다고 보시면 맞을 것 같습니다.
위 그림을 참조해 주세요. 어떤 암호화폐의 블록체인 네트워크에 동원된 해시 파워의 배분이 (b)와 같은 상황이라면, 그 블록체인은 신뢰성을 상실했다고 볼 수 있다는 것입니다. 51% Attack을 한다는 것은, 즉 (b)와 같은 상황을 유도하여 공격자가 자신의 마이닝 풀이 그림의 (b) 상황의 GHash.io 풀과 같은 점유율을 가지게 만든다는 것이고요.
이 상황이 왜 문제가 되는가를 이해하기 위해서는 먼저 작업증명 방식의 개요를 이해하실 필요가 있습니다.
2. 배경
작업증명(POW)이라는 용어는 땡글을 비롯해 여러 커뮤니티에서 많이 회자되고는 하는 용어입니다. 그러나 조금 막연하게 이해되고 넘어가는 경우도 있는 것 같습니다. 물론 이 글에서도 수학적인 정리를 동원하지는 않습니다만, 적어도 너무 피상적인 개념에서는 벗어날 필요가 있지 않을까 합니다. 예를 들자면, 'POW는 채굴을 해서 코인을 만드는 규약이고 POS는 채굴을 안 하고 코인을 만드는 규약이다'라거나 'POW는 채굴기 가진 큰손이 짱 먹는 방식이고 POS는 코인 많이 사 둔 큰 손이 짱 먹는 방식이다'라거나……. 틀렸다는 말은 아닙니다만, 막연하게 이해를 한다면 나중에는 불필요한 언쟁을 하게 된다거나, 굳이 POW를 변호하며 다른 암호화폐 네트워크의 증명방식을 폄하한다거나, POW의 봄을 찬양한다거나(?!) 하는 사태도 벌어질 수 있을 것입니다.
위 그림을 참조해 주세요. 이 글에서 쓸 그림은 대부분 제가 PPT로 조악하게 그리고 또 웹 상의 이미지를 따다 조합해서 넣는 것이다 보니 그리 예쁘지는 않습니다만, 이해에는 조금 도움이 될 것이라고 생각합니다.
위 그림은 비트코인의 예로 보는, POW 기반 블록체인 네트워크에서 새 블록을 생성하는 과정입니다. 하나하나 이야기해 볼까요? 먼저, 블록체인 네트워크가 기존의 서버-클라이언트 관계와 같은 네트워크와는 다르며 무엇보다도 실시간 통신 네트워크는 아니라는 점을 이해해 주실 필요가 있습니다.
블록체인은 말 그대로 '블록(Block)'들이 연쇄적으로 엮여서 생성하는 '체인(chain)'입니다. 아시다시피 각각의 블록은 이 블록체인 네트워크 내에서 발생한 이벤트들을 기록한 장부이고요. 각 블록은 헤더와 바디로 이루어지는데, 위 그림의 파란 블록을 참조해 주시면 조금 이해가 쉬우실 것입니다. 블록의 '헤더(header)'란 그 블록체인 네트워크의 운용을 위해 블록들이 가져야 하는 메타 정보입니다. 한 블록의 헤더는, 현재 Bitcoin Core의 버전, 이전 블록 해싱의 해시 값, 현재 블록 내 거래내역의 모든 해싱 해시값, 현재 블록의 타임스탬프, 채굴난이도(해시목표값. 평균 10분으로 블록 생성 주기를 맞추기 위해 nonce 찾는 작업의 난이도를 변경시키도록 지정하는 값Difficulty) 등으로 구성되지요. '바디(Body)'란, 해당 블록 내에서 생긴 모든 이체내역(즉 Tx 메시지들)으로 구성됩니다. 즉 '장부'는 사실 각 블록의 '바디'들의 집합인 겁니다. 이러한 블록은, 비트코인 네트워크에서는 평균 10분당 1개씩 생성될 수 있도록 설계되어 있습니다.
코인을 채굴한다, 고 하는 것은 블록체인 네트워크의 개념에서는 다음과 같은 작업입니다. 즉, 위 그림의 989번 블록까지가 현재 공중(public)이 공유하고 있는 최신 블록체인입니다. Public한 Chain이라는 것은, 곧 가장 긴 체인이라는 것이기도 하죠. 그리고 990번 블록을 생성해야 합니다. 이 작업에 여러 마이닝 풀들이 뛰어들겠지요? 각각은 새로운 블록의 후보가 되는 다음 연결점, 즉 '노드(node)'를 생성합니다. 위 그림의 990-1, 990-2, …. 이 바로 그것들입니다. 이 후보 노드들 가운데, 실제 소유자 마이닝 풀이 문제의 nonce 값을 가장 먼저 찾아낸 노드가 990번 블록으로 확정되고, 나머지 노드들은 무효화됩니다.
왜 이렇게 노드들이 열심히 계산을 해서 마치 서바이벌전을 벌이듯 다음 블록을 만들어나가야 하는 것일까요? POW은 바로 이러한 막대한 계산작업을 통해 위변조를 방지하고자 기획된 것이라는 점을 여기서 생각해 주셔야 합니다.
위와 같은 방식으로 블록들이 지금까지 몇 개나 생성되었을까요? 이 글을 쓰기 전에 조회한 바에 따르면 현재까지 채굴된 비트코인 블록은 약 47만 개입니다. 다시 말해, Public Chain의 길이가 약 47만 블록에 달한다는 것입니다. 블록 하나는 평균 10분당 1개씩 새롭게 생성되도록 되어 있지요? 그러니 이 Public Chain을 만들기 위해서는 대략 470만 분의 해시 계산 작업이 필요했을 것입니다.
3. Selfish Mining Attack?
470만 분의 작업증명이 이루어진 Public Chain을, 그러면 어떻게 해커가 조작할 수 있을까요?
블록을 변조한다는 것은, 지금까지 쌓여온 장부, 즉 Public Chain의 일부 또는 전부를 갈아치워서 해커가 만든 블록이 최신의 블록이 되고, 그로부터 다시 Public Chain이 이어져 나갈 때 가능합니다.
위 그림을 참조해 주세요. 모의로 생성한 위 그림의 블록체인에서, 시작점부터 1, 2, 3번 블록까지의 Public Chain은 멀쩡하게 이어져 오고 있지요. 그러나 4번 블록이 되어야 하는 노드 단계에서 이제, 해커가 다른 노드들을 초월하여 4-2번 블록을 만들고 이것이 최신 블록이 되어 5번 블록으로 이어져가게 되었다고 해 봅시다. 정당하게 만들어진 4-1번 블록, 그리고 그로부터 이어져야 하는 깨끗한 5-deprecated, 6-deprecated, ..., 블록들은 모두 해커가 만들기 시작한 블록의 체인에 뒤처졌습니다. 즉, 아까 살펴본 '패배한 노드'와 같은 신세가 되어 버린 것입니다.
위와 같은 임의 블록 변조 및 체인 생성을 Selfish Mining Attack이라고 합니다. 이것이 가능하다면 당연히 문제가 되겠죠. 블록체인 네트워크에 대해 상식적으로 받아들여지고 있는, '블록체인 네트워크는 신뢰할 수 있는 것'이라는 믿음이 깨집니다. 위 그림의 4-1번 블록에서부터 이어지는, 패배한 Chain에서 일어났을 트랜잭션들(그리고 그곳에서 소모된 코인들)이 모조리 전체 블록체인에서 밀려나버리고 해커가 만들어 최신화한 체인을 다시 따라가야 하게 된다는 것은, 두 번씩 트랜잭션 수수료를 지불하게 만듭니다. 채굴자들은 채굴수익을 잃게 되겠고요.
4. POW가 무결한 이유
그런데 왜 앞에서 살펴 본 블록체인 변조가 일어나기 어려운 것일까요?
블록의 생성에 470만 분이 소요되었다는 사실을 다시 생각해 봅시다. 이 말은, 해커는 47만여 개의 지금까지 쌓여온 블록들보다 더 길게 연장되어 온 블록체인을, 적어도 47만여 개+1개의 블록을, 470만여 분보다 더 빠른 시간 내에 만들 수 있어야 한다는 뜻입니다. 그래야 최신의 노드들을 추월할 수 있겠지요. 그런데, 이것이 가능할까요?
위 그림은 현존하는 슈퍼컴퓨터들 가운데 가장 강력한 연산능력을 갖춘 것으로 알려진, 중국의 슈퍼컴퓨터 티앤허-II입니다. 이것이 지닌 계산능력은 약 33.8페타플롭스입니다. 그러면 비트코인 네트워크에'만' 투입되어 있는 해시 파워, 즉 계산능력은 얼마일까요? 현재는 약 1960만 페타플롭스에 달하는군요. 즉 해커는 이 계산능력을 초월한 계산능력을 단독으로 갖추어야 합니다. 그럴 수 있을까요?글쎄, 범국가적인 힘이 동원된다면 가능할 수 있겠습니다만 그런 극단적인 경우를 제외한다면 아마도 어려울 것입니다. 이 때문에, 작업증명(POW)은 아직까지도 암호화폐 Public Chain의 무결성을 보장하기에 적합한 방식으로 받아들여지고 있습니다.
5. 51% Attack은 왜?
그렇다면 51% Attack이란 말은 왜 나온 것일까요?
위에서 설명한 POW의 강점을 깨뜨려버리는 조건이 있습니다. 생각해 볼까요?
우선 POW로 블록체인 네트워크의 무결성을 보장하고 있으며 여러 채굴자들이 뛰어들어 작업을 하고 있는 코인 'A'가 있다고 해 보겠습니다. 이 코인 'A'를 캐기 위해서 '갑'이라는 풀, '을'이라는 풀, '병'이라는 풀, 이하 정무기경신임계…식으로 뛰어든 여러 마이닝 풀들이 있습니다. 이 마이너들이 발휘하고 있는 해시파워의 총합이 곧 'A'의 블록체인 네트워크에 투입된 계산력의 총합이 되지요. 그런데 이 가운데 하나의 풀, 편의상 '갑'이, 전체 해시 파워의 절반 이상을 차지했다고 생각해 봅시다. 상징적인 의미에서 51%의 해시 파워를 '갑'이 가졌다는 것입니다.
이 경우, 을병정무기…가 모두 연합하여 갑에게 대들더라도 49%의 해시 파워를 가집니다. 즉, 갑의 해시 파워를 이길 수 없습니다. 이때 갑이 'A'의 블록체인 네트워크에 대한 공격자로 돌변한다고 해 보겠습니다. 이 경우, 갑은 (51%를 지녔느냐, 70%를 지녔느냐, 99%를 지녔느냐 등 세부적인 조건의 차이에 따라 조금씩 달라지기는 하겠습니다만) 자신을 제외한 나머지 풀들이 블록을 생성하는 계산력을 초월한 계산력을 가지고 있고, 따라서 늦든 빠르든 자신이 변조하여 만든 사설(Private) Chain이 그 전까지의 최신 블록과 다음 노드들을 추월해 버릴 때까지, 나머지 후보군 체인에 달라붙은 풀들보다 더 빠르게 채굴을 할 수 있습니다. 다시 말해, 갑은 사설 체인을 만들어서 그것을 Public Chain으로 등극시킬 힘이 있습니다. 1장의 그림 (b)에서 Ghash.io가 바로 갑의 힘을 지닌 것이죠. 이러한 '갑'의 발생은 전체 암호화폐 블록체인 네트워크의 신뢰성을 크게 저하시키며 궁극적으로는 해당 암호화폐의 입지를 무너뜨릴 것입니다. 따라서 갑의 등장은, 코인에 이권이 걸린 사람일수록 더 적극적으로 막아야 하는 사태입니다.
6. 실제로 일어나는가?
실제로 2014년에, Ghash.io라는 풀에서 약 12시간 가량 50%를 초과하는 해시파워를 가졌던 적이 있습니다. 그림 1의 (b)는 실제로 비트코인 네트워크에서 발생했던 상황이지요. 하지만 이 Ghash.io 풀은 스스로 풀 신규가입을 막아 버리는 등의 방법으로 해시파워를 쪼개 흩어버리며 비트코인 네트워크의 이권을 지켜냈습니다. 비트코인이 하나의 거래수단이 된 이상, Ghash.io로서는 그것이 무의미한 디지털 정보가 되지 않도록 지켜내는 것이 더 유리했으니까요.
7. 결언
지금까지 51% Attack에 대해 알아보았습니다. 조금 많이 간략화한 글이라, 51% Attack을 개념적으로 이해하시는 데 도움이 될 수 있다는 정도로 받아들여 주시는 게 좋을 것 같습니다.
다만, 꼭 51% Attack이 자정작용에 의해 방지되고 또 현실적으로도 일어나기는 어렵다, 고만 믿을 수는 없습니다. 올해 Security&Privacy 컨퍼런스에서 발표된 한 논문에 따르면, 비트코인을 비롯한 여러 암호화폐의 블록체인 네트워크에 공격을 가함으로써 51% Attack 및 Selfish mining이 더 높은 확률로 가능해지도록 하는 참신한(?) 공격기법이 제안되었기 때문입니다. 물론 엄밀히 말해 이것도 블록체인 자체의 약점이라기보다는 네트워크 통신 규약의 약점을 이용한 것이기는 합니다만, 여하간 약점은 약점이지요. 땡글인 여러분, 그리고 암호화폐를 접하시는 많은 분들이 블록체인에 관한 기술적 소양을 (교양 수준에서라도) 쌓으시면서 더 현명한 채굴, 더 현명한 투자를 위해 심사숙고해야 하는 시기라고 할 수 있겠습니다.
읽어주셔서 감사합니다.