블럭체인에서 51% 공격은 취약점을 이용한 어뷰징입니다.
“공격” 이라는 단어자체는 그것이 부정적이라는 뜻을 이미 내포하고 있습니다. 마치 “공은 둥글다”라고 진술하는 것처럼 51% 공격은 나쁜 것이고, 이것은 기본적으로 동어반복적인 진술입니다.
그런데 왜 이 51% 공격이 생길 수 있는지 살펴보면, 51% 공격이 생기는 근본적 이유가 바로 블럭체인의 본질적 특성에서 나온다는 것을 알 수 있습니다.
그렇다면 블럭체인 기술의 가장 본질적 특성은 무엇일까요?
사토시 이야기를 저도 좀 하겠습니다. 마치 비트코인(또는 사토시)의 문제의식이 블럭체인의 본질처럼 생각하는 분들이 많으니 거기서부터 출발해 봅시다.
사토시의 화이트페이퍼는 외부의 권위나 신뢰에 의존함이 없이 어떻게 p2p 전자화폐를 만들 수 있을까에 대한 하나의 논리적 해결방법의 제시입니다.
p2p 전자화폐에서 전자서명은 그것의 소유자가 코인을 보냈다는 것은 논리적으로 증명할 수 있는데, 더블 스팬딩하는 것은 막을 수 없다는게 그의 출발점입니다. 코인을 받은 사람이 보낸 사람의 퍼블릭키와 그것으로 사인된 메시지의 해시값을 확인하면 가능하죠. 하지만 이 송금자가 1btc 밖에 없는데, 여러사람들에게 1 btc 씩 동시에 두명에게 보냈다고 하면, 받은 사람은 송금자가 보냈다는 것은 확인할 수 있지만, 이것이 두번 사용되었는지는 확인할 수 없다는 것이죠.
이것을 해결하기 위해 p2p 공동의 장부를 만들자는 것이 그의 해결책이었습니다. 블럭체인위에 송금기록을 모두 적어놓고, 그것을 모두 같이 소유하고 있으면 누구든 그것을 쉽게 확인해 볼 수 있고 함부로 바꿀 수도 없을 테니까요. 그리고 송금기록을 바꿔치기 하기 더 어렵도록, 앞의 기록들의 해시값들을 뒤의 기록해시값 계산할 때 섞어서 계속 연결되도록 만든 것이죠. 앞의 기록을 바꾸면 뒤의 해시값까지 다 바뀌기 때문에 변조가 더욱 어려워지죠. 이것이 블럭체인입니다.
그런데 장부의 기록을 전부 다 같이 공유하고 있어서, 모든 참여자들의 장부 기록이 전부 동일하면 참 좋겠는데, 이게 혹 틀려지면 어떻게 해결해야하나 하는 문제에 봉착합니다. 단순한 기술상의 네트워크 전파속도 때문에 틀려질 수도 있지만, 악의적인 목적을 가지고 장부를 조작하고자 하는 세력들도 생길 수 있기 때문입니다.
자 여기서 장부의 기록이 서로 틀려졌을 때, 누구의 기록을 기준으로, “참”인 것을 채택해야 되는가하는 문제가 생깁니다. 즉 어떻게 합의(consensus)를 할 것인가가 블럭체인의 가장 본질적인 문제로 부상합니다.
결론은 다수결입니다. 기록이 서로 달라졌을 때, 참여자의 지지가 제일 많은 쪽을 ‘참’으로 정한다는 것입니다. 그런데 다수결을 하려면 투표를 하는 주체가 있어야 하는데, 익명성을 기준으로 하는 블럭체인에서 누가 1인인지 결정하기가 난감합니다. 그래서 언듯 드는 생각이 각 ip 마다 투표권을 1표씩 주면 어떨까 생각해 볼 수 있지만, 사토시는 이게 불가능하다는 것을 지적합니다.
If the majority were based on one-IP-address-one-vote, it could be subverted by anyone
able to allocate many IPs.
(만일 다수결이 1 ip 1투표권을 베이스로 하면, 누구던 ip 많이 가지고 있는 넘에 의해 장악될 수 있다)
그래서 생각해낸 것이 바로 Proof of Work (PoW) 알고리듬입니다.
Proof-of-work is essentially one-CPU-one-vote. The majority decision is represented by the longest chain, which has the greatest proof-of-work effort invested in it.
( 작업증명이 본질적으로 1 CPU 1 표다. 다수결의 결정이 가장 긴 체인, 즉 그안에 가장 큰 작업증명의 노력이 들어간 체인에 의해 표현된다.)
이런 생각의 바탕에는 컴퓨팅 파워를 제일 많이 소모한 쪽이 다수의 뜻을 가장 잘 표현한다는 생각이 깔려 있는 겁니다. 그리고 이렇게 다수가 되고 나면, 그것을 역전시키려는 쪽에서 그 이상의 해시파워를 모아야 되고, 더구나 과거기록까지 다 바꾸려면, 단순히 현재의 해시파워 비교뿐만 아니라 과거 블럭의 해시값까지 전부 다 다시 계산해와서 바꾸어야 하기 때문에 더욱더 이 대세 체인의 주도권을 바꾸기 힘들다는 이론이 성립합니다.
사토시가 이 화이트페이를 쓸 때 또는 그 이후 그가 커뮤니티에서 활동하던 시기에도 그는 이러한 컴퓨팅 파워의 경쟁이 다수결의 원칙을 가장 잘 표현해 주리라 믿었습니다. 그러기에 그는 채굴할 때 GPU 사용마저 자제해주기를 당부했습니다. 그만큼 투표권의 평등성이 사라지는 것이니까요.
We should have a gentleman's agreement to postpone the GPU arms race as long as we can for the good of the network... It's nice how anyone with just a CPU can compete fairly equally right now.
(우리는 네트워크을 위해서 최대한, GPU 경쟁을 연기하는 신사협정을 가져아 한다.. 현재 누구나 CPU 만으로 공평하게 경쟁할 수 있다는게 얼마나 좋은가.)
사토시가 그렸던 컴퓨팅 파워의 경쟁에 의한 다수결의 원칙이 현재와 같은 비트코인 해시파워의 독점화는 아니었던 것은 분명합니다.
하여간 다시 논점으로 되돌아와서 사토시가 묘사하고 있는 상황은 결국 블럭체인의 본질이 노드들 간의 합의구조에 있음을 명확히 보여주고 있습니다.
그 합의구조에 가장 위협적인 것이 바로 악의성을 가진 공격자입니다.
사토시는 이 공격자를 다음과 같이 정의합니다.
공격자(Attacker) 란 creating value out of thin air or taking money that never belonged to the attacker. (공짜로 밸류를 만들거나, 자기에게 결코 속하지 않은 돈을 빼가는 자입니다).
그리고 이 공격자로 부터 네트워크를 지키려는 선한 노드들 (honest nodes) 들이 이 공격자와 해시 경쟁을 벌입니다. 그리고 해시경쟁의 목표는 다수결의 승리입니다.
If a majority of CPU power is controlled by honest nodes, the honest chain will grow the
fastest and outpace any competing chains.
(만일 선한 노들들의 의해 CPU파워의 다수가 콘트롤 되고 있다면, 선한 노드의 체인이 가장 빠른게 성장하고, 다른 경쟁 체인들을 앞지르게 될 것이다.)
Honest Nodes are not going to accept an invalid transaction as payment, and honest nodes will never accept a block containing them.
(선한 노들들은 무효인 트랜잭들을 페이먼트로 받아들이지 않고, 또한 그러한 것을 포함을 블럭들을 결코 받아들이지 않을 것이다.)
여기서 가만히 중립적인 입장에서 보면, 악한 공격자와 선한 노드가 벌이는 경쟁은,
결국 51% 주도권을 놓고 서로 절대다수가 되려는 두 체인의 경쟁입니다.
여기서 가치판단을 빼고 보면 결국 형식적으로는 51% 다수를 놓고 벌이는 두 체인의 해시파워 경쟁입니다. 누가 취약점을 노리는 나쁜놈인지, 누가 장부의 “참” 값을 지켜려는 선한 노드인지를 어떻게 판단해야 될까요?
어느 쪽이 공격자라고 판단내려지면, 그 쪽은 취약점을 어뷰징하는 나쁜넘이고 반대 쪽은 블럭체인의 본질적 기능인 다수결의 원칙을 통해 이를 물리치는 쪽입니다.
때로는 제3자에게 이 가치판단이 매우 어려운 미묘한 상황이 올 수도 있습니다.
하지만 사토시가 내리는 공격자 판단 기준은 선명합니다.
없는 코인을 부당하게 만들어 내거나, 자기 것이 아닌것을 자기 것으로 만든는 놈이 공격자입니다. 그리고 이 공격자를 지지하는 모든 해시파워가 공격자입니다.
They vote with their CPU power, expressing their acceptance of valid blocks by working on extending them and rejecting invalid blocks by refusing to work on them.
(그들(선한 노드들)은 자신들의 CPU 파워를 가지고 유효한 블럭을 받아들이고, 그것을 이어간다는 것을, 그리고 무효한 블럭에 대한 작업을 거부함으로써, 그것을 배격한다는 것을 보여주기 위해 투표한다)
=============================
사토시의 화이트페이퍼를 많이 이용했는데, 그 이유는 블럭체인의 본질에 대해 너무 잘못 생각하거나 오해하는 사람들이 많아서 입니다. 블럭체인은 한번 기록된 장부는 영원히 바꿀 수 없어야 한다거나, 반드시 해시경쟁을 해야 한다거나, 심지어는 노드들간의 투표자체가 마치 블럭체인의 본질에 어긋나는 것처럼 착각하는 사람들이 많습니다.
블럭체인의 본질은 그 체인의 데이타를 공유하는 노드(참여자)들의 합의구조입니다.
그 합의구조가 PoW 될수도 있고, PoS 가 될 수도 있고, 만일 개인들의 identity 가 입증되는 시스템이 있다면, 1인1표의 다수결이 될 수도 있습니다. 어떤 합의 구조를 써야만 블럭체인이 블럭체인답게 되는 것도 아니고, 블럭체인에 쓰여진 데이타가 잘못된 데이타가 기록되었을 때 그것을 합의에 의해서 바꾸는 것도 블럭체인의 정신에 위배되는 것도 아닙니다. 오히려 잘못된 데이타가 블럭체인을 공격하는 공격자에 의해 기록되었을 때, 그 체인을 엎어버리고, 선한 노드들에 의해 “바른”체인을 이어가는 것이야 말로 블럭체인의 본질적 정신에 부합하는 행위입니다. 그리고 이러한 선한 노들에 의한 개입은 “제3자” 나 “외부의 권위” 가 아니라 블럭체인의 본질적 주체에 의한 자기결정력입니다.
물론 블럭체인의 유지와 운용에 있어서 가능한 자율적이고 자동적으로 처리되는 것이 바람직한 것은 당연합니다. 하지만 블럭체인이 공격당해서, 그것의 의도된 목적이 손상되었을 때, 그리고 그것의 논리적 정합성이 깨졌을 때는 당연히 인위적인 개입에 의해 공격자를 막아내고 문제를 해결해야 합니다.
블럭체인에 대해 여러가지 철학적, 정치적 입장이 있음을 부정할 수 없습니다. 하지만 블럭체인의 자체적인 방어메카니즘 마저 마치 제3자에 의한 개입이니 탈중앙화원칙을 버렸다느니 하면서 병적으로 모든 자정능력, 통제능력 마저 부정하는 이런 주장들은 개인들만이 유일한 실체이며, 이를 규제하는 모든 통제를 전부 다 부정적인 것으로 규정하고 거부하려는 극단적 사상의 영향이 아닐까 봅니다.
현재 이더리움의 하드포크를 둘러싸고 나눠질 두개의 체인이 있을 겁니다.
하나는 “자기에게 결코 속하지 않은 돈을 빼가는 자” 의 트랜잭션을 유효하다고 지지하는 체인과 다른 하나는 이것이 유효하지 않다고 거부하고 원래의 합의대로 체인을 “올바르게” 이끌어 갈 체인간의 경쟁입니다.
누가 51% 공격자이고 누가 이들을 물리치려는 선의의 노드들입니까?
이것은 컴퓨터가 결정하는 것이 아니고, 블럭체인을 사용하는 사람이 판단해야 할 가치의 문제입니다. 어떠한 기술도 그것을 사용하는 사람들의 궁극적 합의보다 위에 있는 것은 없습니다. 현재의 이더리움 체인을 그냥두자는 주장 역시 개입을 안하는 것이 아니라, 공격자의 해킹을 정당화하고 이를 유효한 것으로 인정하는 하나의 가치판단이며 선택이고 개입입니다.
아톰님도 이번에 저와 같은 쪽으로 생각을 정리하신 것 같네요. ^^