비트코인 시스템에서 가장 중요한 것은, 바로 블록체인 조작에 관한 문제를 해결하는 것입니다. 이전 글에서 설명한 블록체인을 통해 안전하게 비트코인을 거래하기 위해서는 블록체인 자체에 문제가 없어야 하니까요. 과거 거래 내역이 쌓여있는 블록체인이 사라지거나 변조된다면, 비트코인의 신용은 떨어지고, 비트코인은 붕괴합니다. 따라서 비트코인은 '작업증명(Proof to Work)'이라는 과정을 도입했습니다. 우선 이 과정을 이해하기 위해 논스와 비잔티움 에러에 대해 알아야 합니다.
블록체인의 블록에는 1. 최근(10분) 쌓인 거래 내역 데이터, 2. 이전 블록의 해시값, 그리고 3. 논스값이 존재합니다. 여기서 논스값은 아무도 알 수 없는 무작위 값으로, P2P 참여자들이 찾아야 하는 값입니다. 논스값을 효율적으로 찾는 방법은 존재하지 않아 일일이 찾아보는 수밖에 없습니다. 비트코인은 블록 생성 이후 이 블록의 해시값을 참여자들에게 알려줍니다. 참여자들은 논스값을 모르기 때문에, 일일히 대입한 후 해시하여, 알려준 해시값과 같은지 대조해봅니다. 올바른 논스값을 찾은 최초의 참여자는 다른 참여자들에게 이 논스값을 건네주고, 건네받은 참여자들은 이 논스값이 정답인지 확인해봅니다.
논스값은 찾아내는 데 약 10분이 걸리도록 설계되어 있습니다. 참여자들이 논스를 찾아내는 데 너무 오래 걸린다면 비트코인 시스템은 논스값을 조금 쉬운 값으로 주고, 너무 빨리 걸린다면 논스값을 어렵게 줍니다(그러면 이건 무작위 값이 아니잖아). 너무 쉬운 값을 주게 되면 해킹의 위험이 있으므로, 어느 정도 기준선이 있기는 합니다. 이러한 난이도 조절을 '해시캐시(HashCash)'라고 부를 수 있습니다.
비잔티움 황제에게 충성을 바치는 장군들에 관한 이야기입니다. 뜬금없는 이야기 같지만 정말 중요한 사고 실험으로, 비트코인은 이 문제를 획기적으로 해결했습니다. 비잔티움 장군들은 적의 도시를 함락시키려고 공성을 준비하고 있었습니다. 문제는 장군 중 공성 실패를 원해는 배신자가 있다는 것을 장군들은 알고 있었습니다. 공성하려다가 배신자가 다른 장군들에게 다른 공성 시작 시간을 알려주게 되면, 공성은 실패하게 될 것입니다.
예를 들어, 장군이 총 3명이 있는 상황에서, 첫 번째 장군이 토요일에 공격하겠다고 두 번째 장군에게 전령을 전합니다. 그런데 두 번째 장군이 배신자여서 일요일에 공격하겠다고 세 번째 장군한테 전하게 되면, 공성 결과는 참패로 이어지게 될 것입니다. 장군들끼리는 멀리 떨어져 있어 서로 만날 수 없고 전령만 보낼 수 있는 상황에서, 장군들은 어떻게 공성 시작 시간을 전달해야 배신자들의 모략에 휩쓸리지 않고 공성을 성공시킬 수 있을까요?
이를 해결하기 위해서 비트코인 시스템은 다음과 같은 해결법을 제시했습니다. 우선 제안하는 공격 시간과 논스값을 해시 함수에 넣어 해시값을 만듭니다. 각 장군은 해시값과 일치되게 만드는 논스값을 찾습니다. 논스값을 제일 먼저 찾은 장군은 다른 장군들에게 이 논스값을 알려주고, 논스값을 넣어 해시값을 일치시켜본 장군들은 처음 논스값을 알려준 장군의 제안에 따릅니다. 여기서 배신자가 끼어들 여지는 없습니다. 왜냐하면 공성을 실패시키기 위해서는, 두 개의 서로 다른 공격 시간이 필요하고 그에 따른 논스값을 두 개 찾아야 하는데, 그렇게 되면 정상적인 장군보다 늦게 논스값을 발견하게 되어 자신의 제안을 따르게 할 수가 없습니다. 즉, 장군들에게 어려운 계산 문제(논스값 찾기)를 부여함으로써 배신자를 제외하는 것입니다.
이렇게 보면 이게 블록체인의 거래 내역을 보호하는 것과 어떤 관계가 있는지 모르겠습니다. 해커가 블록체인에서 특정 블록의 거래를 조작했다고 가정해보겠습니다. 해시 함수의 특징으로 인해 거래 내역이 바뀌면 블록의 해시값도 바뀌게 됩니다. 블록의 해시값이 바뀌면 그 다음 블록의 해시값도 계속해서 바뀌게 되겠죠. 그렇게 되면 블록체인의 맨 마지막 블록의 해시값, 최종적으로 최근 생성되는 블록의 해시값까지 바뀌게 됩니다. 그러면 모든 사람이 이를 눈치채게 될 것입니다.
따라서 해커는 이 해시값을 다시 정상으로 위조하기 위해 새로운 논스값을 찾아야 하고, 그와 동시에 기존의 참여자들이 논스값을 찾는 과정을 추월해야만 합니다. 즉 모든 참여자의 계산능력을 월등히 초월해야 하지만, 이는 불가능에 가깝습니다(이를 가능하게 하는 공격이 51% Attack입니다). 그런데 해커 입장에서는 이러한 성능을 보유하고 있으면 차라리 다른 참여자들처럼 정상적으로 논스값을 찾는 게 훨씬 자신에게 이익이 됩니다. 왜냐하면 논스값을 먼저 찾는 참여자에게는 비트코인을 보수로 주기 때문입니다.
해커는 블록체인의 조작이 불가능에 가까울 뿐만 아니라, 가능하더라도 그 이익이 정상적으로 참여했을 때보다 적어 비합리적이기 때문에, 블록체인은 안전하게 보호될 수 있습니다. 비트코인 시스템에서 블록체인이나 전자서명을 사람들이 더 많이 알고 있는데, 가장 혁신적인 발명은 바로 이 작업증명입니다. 언뜻 보면 전력 낭비라고 보일 수 있으나, 절대 낭비가 아닙니다.
이 논스값을 찾기 위해서는 많은 전력과 비용이 소모됩니다. 그런데도 이 논스값을 찾으려는 이유는, 최초로 찾은 참여자에게 비트코인을 보수로 제공하기 때문입니다. 우리는 이를 금을 채굴하여 얻는 것과 비슷하다고 하여 '채굴'이라고 합니다. 비트코인을 보수로 제공함으로써 화폐 발행과 같이 비트코인의 공급을 증가시키고, 블록체인도 보호하며, 채굴자들은 이를 보수로 비트코인을 받을 수 있습니다. 제공되는 비트코인 외에도 블록에 기록되어있는 거래 내역의 수수료도 보수로써 제공됩니다. 비트코인의 공급은 서서히 줄어드는 시스템으로 이루어져 있는데, 공급이 중단된다고 하더라도 채굴자들은 보수를 받을 수 있어 블록체인을 계속 보호할 수 있습니다.
참고자료 : 노구치 유키오, <The Virtual Currency Revolution>
비트코인 설명을 위한 금융 용어 및 IT 용어 정리 (0) | 2021.05.07 |
---|---|
비트코인 시스템의 이해 - 블록체인 기술을 이용한 거래 내역 기록 (0) | 2021.05.06 |
비트코인 시스템의 이해 - 전자서명을 통한 비트코인 송금 (1) | 2021.05.05 |
비트코인 시스템의 이해 - 암호학 용어 설명(공개키, 해시, 전자서명) (2) | 2021.05.05 |
비트코인, 화폐로써의 가치 - 마운트곡스의 파산에 대한 오해 (2) | 2021.05.04 |