[이정훈의 암호화폐 읽기]<7>이중지불 문제의 해법, 작업증명(POW)

by이정훈 기자
2018.01.27 07:22:00

해당 블록에 연결된 이전 블록의 해시값을 찾아내고 거기에 덧붙여 새로운 해시값을 만들 nounce를 구해 블록을 확정하는 일이 작업증명이다.


[이데일리 이정훈 기자] 블록체인이란 분산 원장을 이용해 개인간(P2P) 거래가 가능하도록 만든 시스템이라고 누차 설명했습니다. P2P란 인터넷상에서 사용자들끼리 직접 연결된 데이터를 주고받는 구조를 말합니다. P2P 네트워크는 일대일이 아니라 수많은 사용자들이 거미줄처럼 얽혀있는 네트워크인데요. 지난 1990년대 음원시장을 뒤흔들었던 냅스터나 소리바다, 지금까지도 쓰이고 있는 토렌트 등을 떠올려 보면 쉽게 이해할 수 있을 겁니다. 중앙 서버 한 곳에 저장된 데이터를 내려받는 게 아니라 다른 사용자들이 공유한 파일을 직접 받는 혁신적인 서비스였죠. 그런데 문제가 없는 게 아니었습니다. 몇 시간씩 걸려 다운로드 받은 영화 파일이 재생되지 않는 가짜였다는 걸 확인하는 순간 욕이 튀어 나왔던 경험들 한 번씩은 있을텐데요. P2P 네트워크상에서는 모두가 진짜 거래내역을 가지고 있을 거라 믿기 어렵다는 게 고질적인 문제라 하겠습니다.

이런 문제를 컴퓨터공학계에서는 `비잔틴 장군의 딜레마`라고 합니다. 거대 제국 비잔틴에는 많은 장군들이 각 지역별로 주둔해 있는데요, 이들은 자기 땅에 머물며 황제처럼 행세했고 중앙 황제의 영향력이 제국 곳곳에 직접 미치기 어렵습니다. 그런 상황에 과반수 이상의 장군들이 자기 병력을 이끌고 와 한꺼번에 공격해야만 점령할 수 있는 큰 적국을 공격해야할 일이 생겼습니다. 그러나 제국의 땅이 너무 넓다보니 이 장군들이 한 자리에 모이기 어렵고 봉화나 깃발로 신호를 보내면 적도 알아챌 수 있으니 직접 연락병을 보내는 수밖에 없는 상황입니다. 문제는 각자 자기 땅에 머물고 있는 비잔틴의 장군들은 서로를 믿지 못하는 겁니다. A장군은 B장군에게 같이 공격하자고 하고선 실제 자기는 빠질 수도 있습니다. 이러면 공격 간 B장군 병력만 몰살할 수 있죠. 또 B와 C장군에게 협공을 제안했는데 둘의 요구사항이 다르면 A로서는 누구 말을 믿을지 판단하기 어렵습니다. 이처럼 서로 믿을 수 없는 여러 주체가 동의할 수 있는 하나의 해답을 도출하기란 매우 어렵다는 게 이 딜레마의 핵심입니다.

이를 해결하기 위해 블록체인은 작업증명(POW·Proof Of Work)이라는 해법을 내놓습니다. 모든 장군에게 수학문제를 풀게 합니다. 모든 장군들이 머리를 맞대면 10분 정도 걸리는 난이도의 문제입니다. 이들중 한 명이 답을 찾으면 모든 장관에게 그 답을 알리고 다음 문제로 넘어갑니다. 두번째 답은 첫번째 답에 이어 붙여서 공유하고 또 그 다음 문제를 풉니다. 이렇게 모든 장군은 12개 문제를 풀고 12개의 연결된 답을 공유합니다. 이 과정에서 장군들은 두 가지 사실을 확인하게 됩니다. 전체 장군 중 절반 이상이 문제를 푸는데 참여했다는 것과 10분마다 문제와 답을 공유하면서 주고받은 메시지가 중복없이 정리됐고 모든 장군이 이를 확인했다는 사실 말입니다. 이제 장군들은 이를 믿고 비로소 공격 작전을 세울 수 있게 됩니다. 제국 전체 이익이 아니라 자기 이익을 위해서라도 비잔틴 제국이 무너지지 않기를 원하는 장군들 절반 이상이 작업에 참여했다는 사실만으로 상호 신뢰가 생기는 셈입니다.



이처럼 모든 블록체인을 이용한 암호화폐는 (거래)증명이 필요합니다. 장부가 곧 돈이기 때문에 장부상 거래를 확인 시켜주는 작업은 필수적인 거죠. 앞서 설명했던대로 블록체인 시스템 내에서는 수 많은 노드들이 그 증명의 역할을 하고 있습니다. 작업증명은 암호 해독능력인 컴퓨팅 파워를 이용해 함께 블록에 담기는 해시를 생성하기 위한 숫자값을 찾는 문제를 풀어 거래를 증명해주는 일입니다. 결국 작업증명이 블록체인과 비트코인이 가치있고 안전하도록 도와주는 역할을 하는 셈이죠.

특히 이 때문에 디지털 화폐인 비트코인의 이중지불 위험을 사전에 차단할 수 있게 됩니다. 이중지불이란 실제 하나뿐인 코인으로 두 가지 거래를 동시에 일으키는 부정행위를 말합니다. 예를 들어, A라는 사람이 커피를 주문하고 0.01비트코인(BTC)으로 계산했다고 칩시다. 커피점 주인인 B는 A의 전자지갑을 확인한 뒤 커피를 줬는데 A가 떠난 뒤 지갑을 보니 그 비트코인이 없는 겁니다. 알고보니 A가 결제하기로 했던 0.01비트코인을 그 사이 피자를 사는데 또 써버린 겁니다. 이런 악의적인 시간차 공격이 바로 이중지불인데요, 이를 방지하는 것도 바로 작업증명입니다. 블록체인에서는 0.01BTC로 커피를 사겠다는 A거래와 피자를 사겠다는 B거래, 둘 모두 채택하는 일이 절대 없도록 하는 것입니다. 하나의 블록에는 반드시 A와 B중 하나만 승인됩니다. A가 승인되면 B는 저절로 파기되는 겁니다.

비트코인을 처음 만든 사토시 나카모토는 이렇게 얘기합니다. “우리는 거래들의 시간 순서를 전산적으로 입증하게 만들도록 하는 P2P 분산 네트워크 기반의 타임스탬프 서버를 이용해 이중지불 문제를 막는 해법을 제안하고자 한다. 이 시스템은 악의적으로 협력하는 노드그룹보다 정직한 노드들이 더 많은 컴퓨팅 파워를 총체적으로 제어하는 한 안전하다”고.