불행하게도 다오 컨트랙상의 버그로 인해 대규모 이더가 해커의 손에 유출될 위기에 처해 있습니다.
지금 상태 그대로 두면 약 14%의 총 이더가 해커의 손으로 넘어갈 위기입니다.
다음과 같은 이야기가 부처님 이야기에 나옵니다.
"말룬키아풋타여, 만약에 어떤 사람이 길을 가다가 어디선가 누가 쏜 독화살에 맞았다고 하자. 그런데 그 독화살을 맞은 사람이 그가 맞은 독화살은 뽑지 않고 생각하기를
'이 화살을 쏜 사람은 누구고 그는 왜 나에게 쏘았을까? 그리고 이 화살로 만든 나무의 재질은 무엇이며 또 이 화살촉에 묻은 독의 성분은 무엇일까? 등등의 궁금증을 모두 다 알기 전에는 나는 이 독하살을 뽑지 않겠다'라고 한다면 어떻게 되겠느냐?라고 물으셨다.
그러자 말룬키아풋타가 대답하기를 "그는 그 독이 몸에 퍼져 죽게 되겠지요."라고 대답했다.
그러자 부처님께서 이렇게 말씀하셨습니다.
"그래 맞다. 이와 같이 말한다면 그는 그것을 알기 전에 온 몸에 독이 퍼져 죽게될 것이다. 그러니 독화살을 맞은 이는 그 독화살을 먼저 뽑는 것이 순서가 아니겠느냐?
화살을 뽑아야 하는데, 이 화살을 뽑는게 정당한가 아닌가 하는 논쟁부터 시작해서, 화살을 쏜 사람부터, 아니면 더 튼튼한 갑옷을 만들지 못한 사람부터 처벌하고 화살을 뽑아야한다는 주장까지, 마치 화살을 안 뽑아도 생명을 유지할 수 있을 것처럼 생각하는 사람들도 있는 것 같습니다.
그렇다면 화살을 뽑으면 안된다고 주장하는 근거는 과연 무엇일까요?
(1) 화살을 뽑는 것은 탈중앙화의 정신에 어긋난다?
이 주장의 근거는 비탈릭을 비롯한 파운데이션 멤버와 그와 가까운 slock.it 의 인원들이 자기 마음대로 트랜잭션을 바꾸어 버린다는 것입니다. 이들이 사실적인 중앙통제그룹이 아니냐는 겁니다.
자.. 다시한번 블럭체인 또는 탈중앙화 기술의 핵심이 뭔지 생각해봅시다. 그 핵심은 노드들간의 동의 (consensus) 입니다. 모든 데이타가 최종적으로 네트워크에 참여하는 노드들의 동의에 의해 정합성이 결정된다는 것입니다. 이 노드들의 동의에 의해 블럭을 검증하는 로직도 바뀔 수 있습니다. 비트코인이던 이더리움이던 어떤 블럭체인이던지 모든 로직이 완벽하게 처음부터 정립될 수 없습니다. 지속적인 진화가 필요하고 성숙이 필요합니다. 그러한 변화는 기능의 추가가 될 수도 있고, 버그해결이 될수도 있고, 보안을 강화하는 부가적인 솔루션이 결합될 수도 있습니다. 이런 변화는 소프트/하드포크에 의해 이루어지고, 이러한 포크들은 참여하고 있는 노드들의 동의를 통해서만 가능합니다.
비탈릭이 제안한 소프트/하드 포크는 이러한 탈중앙화된 동의 시스템의 원칙에 전혀 위반되지 않습니다. 이더리움 전체 생태계의 존폐를 위협할만한 버그가 발견되었고 그 버그와 그로 인해 생기게 될 피해를 없애기 위해서 소프트/하드 포크를 제안하고 이를 노들들이 이를 받아들여서 채택되는 것은 블럭체인기술의 정신과 로직에 정확히 부합됩니다. 비탈릭의 제안이 전체 51% 동의를 확보하지 못하면 새로운 패치는 결국 거부될 겁니다.
여기서 노드들의 동의라는 것을 좀 더 현실적으로 봅시다. 현재 이더리움의 블럭은 pow 마이너가 경쟁해서 생성시키고 있습니다. 블럭이 안 만들어지면, 어떤 트랜잭션도 안 일어나겠지요. 일차적으로는 이들 마이너(와 집합적 표현으로서의 채굴풀)의 결정권이 부각될 수 밖에 없습니다. 하지만 이들의 결정만이 전부는 아닙니다. 거래소가 새 제안을 거부하면 거래소에 묶여 있는 모든 코인은 새 체인에서 거래 불능이 됩니다. 거래소는 마이닝 파워가 전혀 없지만, 마이너의 결정에 대해 치명적인 사보타지를 할 수 있습니다. 거기다가 궁극적으로는 참여하고 있는 커뮤니티의 영향력도 작용합니다.
따라서 비탈릭가 제안한 독화살을 뽑기 위한 소프트/하드 포크는 탈중앙화의 원칙에 충실한, 더 나아가 기술내재적으로 해결할 수 없는 문제에 직면했을 때 이더리움 생태계 전체 커뮤니티의 결정에 의해 이를 극복한다는 강력한 합의 시스템의 승리를 보여주는 것으로 볼 수도 있습니다.
(2) 화살을 뽑는 것은 블럭체인의 불가역성 원칙에 위배된다?
블럭체인 기술의 장점이자 단점인 컨셉이 한번 일어난 트랜잭션은 되돌릴 수 없다는 것입니다. 크레딧카드를 잘못 사용되거나 차지되었을 때 클레임걸면 그 트랜잭션을 되돌 수 있는 기회가 있지만 블럭체인에서는 이를 허용하지 않습니다. 이번 포크를 반대하는 사람들 중에 일부는 해커가 훔친 코인을 되돌리는 것은 이런 블럭체인 불가역의 원칙에 위반이라고 주장합니다.
이번 소프트 포크는 해커가 스플릿한 차일드 다오에 있는 이더를 다른 지갑으로 옮기는 것을 막는 것입니다. 어떤 트랜잭션을 되돌리거나 이미 생성된 블럭을 바꾸거나 하는 것은 전혀 없습니다. 불가역성의 원칙과는 아무런 상관이 없습니다.
하드포크는 이 이더를 다오주소로 다시 보내는 것인데 이것 역시 이미 있었던 트랜잭션을 지우거나 데이타를 바꾸는 것이 아닙니다. 기존 블럭의 데이타는 전혀 변화가 없습니다. "새로운" 트랜잭션을 일으켜서 해커의 차일드 다오에 있는 이더를 메인다오로 보내는 겁니다. 역시 불가역성의 원칙을 위반하는 것이 아닙니다.
(3) 이더는 문제가 없는데, 왜 다오의 문제를 이더 포크로 해결하나?
이번 해킹은 이더 로직상의 결함때문에 생긴 것이 아니었고, 다오 코드에 문제가 있었던 것인데, 그렇다면 문제를 다오가 해결해야지 왜 이더체인을 포킹해야 하나하는 문제제기입니다.
형식적인 논리로 보면 맞지만, 조금만 더 생각해보면 이게 이더와 분리된 다오의 문제가 아니라, 결국 최종적으로는 해킹된 이더가 이더 생태계 전체에 어떤 임팩트를 줄 것인가 하는 문제입니다. 14%의 이더가 해커에 손에 들어가 있으면 PoS 으로의 전환이 사실상 불가능해지겠지요 (이 점 때문에 일부 채굴자들은 이번 포크를 반대하는 쪽에 설 가능성도 있습니다). 이 코인이 한꺼번에 덤핑되거나 다른 스마트 컨트랙을 무력화하기 위한 양적공격을 하면 이더리움 생태계 전체가 살아남기 힘들게 됩니다. 화살이 어디서 날아왔는지는 2차적인 문제입니다. 지금 이더리움 생태계 전체를 위협하는 심장에 박힌 화살을 먼저 뽑아야 합니다.
(4) 이번 포크는 형평성에 어굿난다?
이 문제는 지난번에 해킹을 당하셨던 stardust 님의 입장에서 생각해 볼 때 매우 불공평해 보일 수 있습니다. 비탈릭이랑 친하지 않은 사람의 해킹은 관심이 없고, 자기랑 친한, 또는 자신이 투자를 한 곳에 해킹이 생기면 하드포크로 구해준다는 원망이 생길만합니다. 왜 과거에 해킹당했던 건들도 모두 리펀드해줘야 되는 건 아닌가? 그럼 앞으로도 해킹이 생길 때마다 포크할 것인가? 어려운 문제입니다.
결국 이 문제에 대해서 100% 확실한 경계선을 긋는 것은 논리적으로 쉬운 문제가 아닐 겁니다. 하지만 현실적인 피해자의 숫자와 피해규모를 고려할 때, 이런 정도의 하드포크가 이루어져야 하는 경우는 그 파괴력이 매우 막대해야할 것이라는 생각이 들기는 합니다. 그리고 얼마나 그 포크가 설득력이 있는지에 대해서는 최종적으로 커뮤니티가 결정을 하겠지요. 규모가 작더라도 포크가 필요할 만한 충분한 동의를 얻는 다면, 또다른 포크가 일어날 수 도 있습니다. 그러한 가능성을 완전히 차단할 필요는 없다고 봅니다.
그런데 이번 해킹건이 이전에 일어났던 사건들에 비해 규모면에서 비교가 되지 안될 정도로 막대하다는 차이 이외에도 한가지 다른 차이가 있습니다.
비유를 하자면 이런 식입니다.
이번 건은 어떤 은행계좌에 1만원 있는데, 1만원 출금요청을 해서 내주었던데, 시스템 버그로 인해 원래 계좌 밸런스가 0이 되어야 하는데, 이게 계속 1만원으로 남아 있게 된 겁니다. 그래서 연속적으로 10000번을 출금요청을 해서 1억원이 은행에서 나갔는데, 다행이 이 1억원이 1달동안 출금할 수 없는 통장에 남아있었다는 것이죠. 은행이 이를 발견했다면 어떻게 할까요? 당연히 처음 1만원 출금요청만 유효한 것이고 나머지는 전부 에러이기 때문에, 1만원을 제외한 1억원 나머지는 원래 은행으로 돌려보내겠지요. 이것이 "에러" 라는 것은 내재적 논리적 검증이 외에 어떠한 외부적 분석이 필요없는 100% 명백한 논리 내재적 결론입니다.
반면 다른 케이스에서 어떤 사람이 은행에 와서 자신의 계좌에 있던 1만원이 다른 사람에게 은행의 소트프웨어 오류로 출금되었다고 주장한 경우를 생각해봅시다. 분명히 해당시기에 소프트웨어의 취약점이 있었던 것은 사실이지만, 그 출금 기록이 다른 트랜잭션들과의 차이를 내재적으로 보여줄 수 있는 근거가 없다면 이 1만원의 이동이 이 진짜 해킹에 의한 것인지 아닌지 판단함에 있어서 주관적인 평가가 개입될 수 밖에 없습니다.
경우에 따라서는 실제 정상적으로 지급된 트랜잭션을 되돌리게 됨으로써 그 코인을 받았던 수취인에게 선의의 피해가 갈 수도 있습니다.
이러한 개별 해킹건들에 대해 탈중앙화된 방법으로 심사를 하기는 매우 어려울 것으로 봅니다.
이 두건의 경우에 있어서 분명히 은행 소프트웨어의 버그/취약점 때문에 생긴 일이기는 하나, 전자는 100% 버그에 의한 결과라는 것을 증명할 수 있고 이 때 발생한 해킹 금액을 되돌려도 원래의 수취인이 피해를 볼 논리적 가능성은 전무합니다. 반면 후자의 경우는 개연성은 높다고 하더라도, 100% 해킹임을 증명하기가 극히 힘들고, 또 경우에 따라서는 원래의 수취인이 피해를 볼 논리적 가능성이 있습니다.
우리는 stardust 님이 실제 해킹피해를 당했고 방법이 있다면 보상받는 것이 당연하다고 생각하지만, 거꾸로 어디 중국에 있는 유저가 똑 같은 2초 취약점으로 1000이더를 잃어버렸다고 주장했을 때, 과연 이를 100% 그대로 믿을 수 있을까요? 그 1000이더가 실제 정당한 페이먼트였는지, 마약거래를 위해 보낸 이더인지 알 수 가 없습니다. 스스로 rpc 포트오픈해놓고, 해킹당하는 상황과 똑같이 연출해서 1000이더를 마약거래상에 보냈다고 했을 때, 이 마약거래상은 그 코인이 자기가 마약거래로 받았던 코인이라고 주장하기는 어려울 겁니다. 그냥 1000이더를 잃고 말겠지요. 물론 이게 마약거래상에게 피해를 준것이니 괜찮다고 생각할 줄 모르겠지만, 문제의 본질은 이것이 진짜 해킹이었는지, 취약점을 노린 어뷰징인지에 대한 판단은 결국 주관적인 상황판단에 따를 수 밖에 없다는 것입니다.
마운트 곡스가 무너질 때 그 쪽 주장은 그게 비트코인 버그에 때문에 생긴 장기간의 해킹에 의해 누적된 코인손실 때문이었다는 것이었습니다. 하지만 이를 입증하는 것은 거의 불가능했지요. 지난번 게이트코인 해킹사건이 났을 때, 당연히 원인에 대한 자세한 분석이 나오리라 기대했는데, 아무런 상세한 원인규명이 없었습니다. 내부 보안직원 몇명이 바로 해고되었다는 것 뿐이었습니다. 이런 경우도 해킹의 논리적 규명은 매우 힘들겠지요.
물론 다른 여러 해킹때문에 당한 피해자들의 입장에서 매우 억울하고, 또 그것이 소프트웨어의 가지고 있던 버그 때문이었다면 더욱 분노가 생기는 것은 당연하고 이해가 되고 저도 어떻게든 같이 문제를 해결하고 싶습니다. 하지만 이런 모든 경우에서 하드포크를 하지 않았다고 해서, 이번 하드포크를 해서는 안된다고 주장하기에는 피해자들이 너무 많고, 그 금액도 너무 큽니다. 100% 모두를 만족시킬 수는 없더라도, 최소한 이렇게 더 막대한 피해자들이 생기는 것은 막을 수 있으면 막아야 된다고 생각합니다.
(5) 부실한 코드를 만든 Slock.it 은 그냥 두어야 되나?
당연히 책임을 물어야 된다고 생각합니다. 이번 다오는 결국 자신이 투자한 이더만큼 리펀드를 받고 해쳬될 가능성이 높다고 생각합니다.
이들에 대한 도적적, 정치적, 기술적 평가는 결국 이더리움 커뮤니티 전체의 냉정한 판단에 의해 이루어지겠지요.
앞으로의 코드개발에 보안강화가 얼마나 중요한지 다시 한번 뼈저리게 확인한 사건으로 기록될 것입니다.
하지만 이번과 같은 해킹사고는 이번이 마지막이 아닐 가능성이 매우 높습니다.
비트코인의 단순한 블럭과는 달리 스마트 컨트랙을 돌려야 되는 이더리움에서는 논리적으로 보안의 구멍이 있을 가능성이 훨씬 더 높습니다.
설사 더 뛰어난 개발팀과 보안팀이 오딧을 하고 더 확실하게 체크를 한다고 해도, 이를 100% 다 미리 막는다는 것은 매우 힘들다고 생각합니다.
어떻게 보면 이러한 상황에 대해 어떻게 대처할 것인지에 대한 커뮤니티의 동의구조와 행동력이 더 중요할지도 모르겠다는 생각도 듭니다.
(6) 이번 포크로 다오를 살려주면 개발자들의 도덕적 해이가 일어난다? 이건 베일아웃이다?
스마트 컨트랙 코드를 잘못 짜서 문제가 생겨도 나중에 하드포크하면 되니까 그냥 코드를 막짜게 될 것이다는 우려도 합니다. 모럴 해저드라는 거죠. 2008년 미국 은행과 자동차 산업이 망해갈 때 결국 국가가 나서서 공적자금을 넣고 구해준거를 빗대서도 많이 이야기 합니다. Bailout 이야기도 그런 종류죠.
일단 베일아웃과의 가장 큰 차이점은 미국 2008 베일아웃이 국민이 낸 세금으로 기업을 구제해준 것인데, 이번 하드포크는 새로 이더를 발행하거나 기존 이더 홀더에게서 이더를 받아서 다오 투자자들에게 주는 것이 아닙니다. 해커에게 가져갈 코인을 빼앗아서 원 소유자에게 돌려주는 것이니, 기존의 이더 보유자들에게 피해를 주는 것이 아닙니다. 오히려 해킹을 결국 막게 됨으로써 기존 이더가격을 보호하는 긍정적 역할이 더 크다고 볼 수 있으니 국가에 의한 베일아웃과는 구조가 틀립니다.
그럼 앞으로 다른 스마트 컨트랙 코드들이 보안을 생각하지 않고 그냥 막짜게 될까요? 문제 있으면 하드포크하면 되니까? 하드포크하려면 커뮤니티 동의가 필요합니다. 그게 그렇게 쉽게 얻어질까요? 그리고 하드포크하고 나서 그 스마트컨트랙이 과연 그대로 비지니스적으로 성공할 수 있을까요? 하드포크하고 안하고와는 크게 상관이 없다고 봅니다. 더 열심히 보안에 신경쓰게 될 것은 어느 경우던 당연할 것 같습니다. 반대로 이번에 해커가 그대로 코인을 들고 나가서 다오 투자자들 전체가 다 망하고 이더가격 대폭락이 일어난다고 가정하면, 앞으로 누가 스마트컨트랙을 만들고 거기에 투자를 할 수 있을 것인지 더 큰 회의감에 빠질 것 같습니다. 스마트 컨트랙 시장의 형성을 2-3년이상은 더 늦추게 되리라 봅니다.
(7) 결국 화살부터 뽑아야 합니다.
일단은 화살부터 빨리 뽑고 상처를 치유해야 합니다. 그리고 나서 여러가지 차후 대책 방안을 논의해도 늦지 않습니다.
피를 흘리고 있는 환자의 화살은 놔두고 온갖 명분론을 가지고 이야기 하는게 탈중앙화정신에 더 위배된다고 봅니다.
비트코인이 블럭체인 사이즈 하나를 놓고 1년이상을 커뮤니티가 합의를 못해서 한치도 더 못나가고 있는데 반해,
이번에 이더리움은 커뮤니티에 의한 강력한 동의 하에 해킹공격을 물리치고 한 단계 더 성숙한 상태로 나가기를 바랍니다.
===============================
한가지 부언하자면, 사람마다 이더를 가지고 있느냐, 다오를 가지고 있느냐, 얼마만큼을 가지고 있느냐에 따라 입장이 다를 수 있고, 이해관계도 달라질 수 밖에 없을 것 같습니다. 아무리 원칙과 대의를 중요히 한다고 해도, 자신의 경제적 이해관계를 완전히 무시할 수는 없겠지요. 위의 주장이 제가 이더와 다오를 보유하고 있기 때문이라고 비판한다면, 당연히 그럴 수 밖에 없다고 해야 될 것 같습니다.
저는 여전히 이더리움을 지지하는 입장이고, 비탈릭을 포함한 파운데이션의 판단에 기본적인 신뢰를 가지고 있습니다.
다오는 이번에 실패하더라도, 그 개념자체는 여전히 지지합니다. 더 확실한 팀이 다시 구성되기를 희망하고 있습니다.