블록체인 소프트웨어의 중앙화
안녕하세요. 오랜만입니다! 이번에는 블록체인 네트워크를 구성하는 노드들 사이의 가교가 되어주는 소프트웨어의 중앙화에 대해 비트코인을 예시로 삼아 차차 알아볼 건데요. 잘 모르시는 분들을 위해 설명 드리자면,
얼마 전 비트코인 블록체인 네트워크를 운용할 수 있게 해주는 소프트웨어인 '비트코인 코어'가 치명적인 버그에 노출된 적이 있었습니다.
아시다시피 블록체인은 공유되는 분산 원장입니다. 기존의 중앙화된 서버 보존 방식과는 달리 전세계 어디서든 공유할 수 있고 그 기록들이 분산되어 저장되는 방식이죠. 그래서 단 한 개의 풀노드만 살아 있어도 블록체인 네트워크는 죽지 않는다고들 합니다. 하지만 이런 블록체인 네트워크를 구동하려면 어떻게 해야 할까요?
풀노드 - 제네시스 블록부터 현재까지 모든 기록들을 저장하고 전파하며 업데이트 하는 노드
블록체인은 장부를 어떻게 공유하는데?
우선, 블록체인 네트워크를 구성하는 '노드'들은 분산되어 있으며 그 분산되어 있는 노드들은 '논스'값을 찾아 채굴하고 전파하며 블록에 거래 내역들을 담는 일련의 블록체인 네트워크를 구축하는 행위들을 합니다.
분산된 '원장'에 담기는 거래 내역들에 똑같은 내역이 존재해야 블록체인 네트워크의 핵심을 유지할 수가 있습니다. 네, 바로 이 블록체인 네트워크 상에서의 거래 내역을 노드들끼리 동기화 시켜주는 역할을 하는 것이 이 소프트웨어라고 할 수 있습니다.
그럼 이 소프트웨어는 누가 만드나?
사토시가 처음 제네시스 블록을 생성하기 위해 만들었던 소프트웨어가 바로 이 비트코인 코어인데요. 원래 처음 만들었을 때는 이름이 참조 도구 (reference implementation) 혹은 비트코인-QT/비트코인드 (Bitcoin-QT/Bitcoind)라고 불리다가 2013년, Mike Hearn라는 개발자가 제안한 비트코인 코어(Bitcoin Core)라는 이름으로 사용하게 되었습니다.
그래서 어쩌라는겨?
아..그래서 이 소프트웨어가 중앙화 되어 있는 문제점을 얘기해볼건데요. 비트코인 코어 말고도 다른 비트코인 소프트웨어가 있냐고 물으신다면, 있다고 대답해드릴 수 있을 것 같습니다.
우선 블록 사이즈에 관한 문제로 비트코인이 하드포킹된 사건이 있었죠. 다른 클라이언트 진영에서 벌어진 논쟁이 결국 비트코인 체인의 분리를 가져왔습니다.
작년 여름, 비트코인 UASF(User Activated Soft Fork) 클라이언트(지금의 비트코인 캐시 진영 - ABC)가 비트코인 코어 클라이언트와 대립입니다. 블록 사이즈에 대한 이견으로 인해 하드포크 되었고 결국 비트코인 캐시라는 새로운 체인이 생겨나게 됩니다.
얼마 전에는 비트코인 마진 거래소 Bitmex에서도 비트코인의 새로운 클라이언트를 출시하겠다고 발표했었고 비트코인 캐시 진영도 분리가 되는 양상을 띠고 있습니다. 이더리움의 경우에는 Geth와 Parity라는 소프트웨어로 양분되어 있다고 합니다.
블록체인의 특성상 네트워크 참여자들은 각각 똑같은 장부를 공유해야 해서 자연스레 빠르고 효율적인 소프트웨어의 중앙화 문제가 생길 수 밖에 없는데, 이를 해결하기 위해서는 블록체인 네트워크의 장부를 공유할 수 있는 소프트웨어의 경쟁도 필요할 것으로 생각됩니다.
아래는 비트코인 클라이언트라 불리는 소프트웨어들입니다.
- Bitcoin Core - C++/Qt based tabbed UI. Linux/MacOSX/Windows. Full-featured thick client that downloads the entire block chain, using code from the original Bitcoin client.
- bitcoind - GUI-less version of the original Bitcoin client, providing a JSON-RPC interface
- MultiBit - lightweight thin client for Windows, MacOS and Linux with support for opening multiple wallets simultaneously
- Electrum - a "blazing fast, open-source, multi-OS Bitcoin client/wallet with a very active community" - also a thin client.
- Bither - open source wallet for Android, iPhone and Desktop with cold storage support.
- Bitcoin-js-remote - JavaScript RPC client, support for QR codes
- Bitcoin WebUI - JavaScript RPC client
- Bitcoin Webskin - PHP web interface to bitcoind
- Bitcoin Explorer - Bitcoin command line tools for Linux, OSX and Windows, part of Libbitcoin SDK.
- Bitcoiner - Java RPC client (Android)
- Armory - Enterprise grade Python-based client
- Spesmilo - Python/PySide RPC client (abandoned)
- Gocoin - WebUI client written in Go language, with a cold deterministic brain-wallet.
- btcd An alternative full node bitcoin implementation written in Go (golang).
- BlockCypher Full node bitcoin client built for scale and data centers, exposed through web APIs.
- Mycelium Awarded the prestigious "Best Mobile App" award by Blockchain.info in 2014, the Mycelium wallet for Android provides several security features.
자료 출처 - Bitcoin Wiki
이렇게나 많은 소프트웨어들이 있지만 정작 제일 많이 쓰이는 것은 비트코인 코어인데요. 비트코인 코어의 점유율이 95% 정도로 추정된다고 합니다.(출처 - 코인데스크 기사 부분 발췌)
이것이 사실이라면 15개의 소프트웨어들이 차지하는 비율은 고작 5%밖에 되지 않는다는 말입니다.
불과 두 달 전, 비트코인 코어 소프트웨어의 치명적인 결함이 발견되었죠.
비트코인 코어 측은 'CVE-2018-17144'라는 버그에 대한 보고를 비트코인 캐시 개발자로부터 제보받았습니다. 이 버그는 블록 검증을 생략하는 버그로, 채굴자들은 트랜잭션을 블록체인에 올리기 전에 트랜잭션을 검증해야 하지만 트랜잭션 내역의 검증을 하지 않고도 블록에 담을 수 있는 버그였습니다. 이 버그로 인해 자칫 비트코인의 무제한 발행을 비롯한 비트코인 네트워크에 치명적인 손상이 가해질 수도 있었습니다만 다행히 비트코인 코어 측은 마이닝 풀과 협력하여 비트코인 코어 소프트웨어를 버그 수정 버전으로 업데이트 하는 데에 성공했고, 새로운 풀노드의 소프트웨어 버전이 51% 이상 업데이트 된 이후 이 버그에 대한 정보를 대중들에게 공개했습니다.
이번에는 비트코인 코어 측의 대처가 빨라 이번 버그에서는 비트코인 네트워크에 손상을 가하는 일이 없었지만 만약 선량한 제보자가 없었다면, 혹은 악의적인 네트워크 참여자가 이를 먼저 간파했었다면 자칫 블록체인의 근간을 뒤흔드는 사건이 일어날 수도 있었습니다.
일각에서는 개발자들만이 이런 버그들을 알아차릴 수 있어, 일반 사용자들에게는 치명적인 결함이라고도 합니다만 블록체인이 다 코드로 짜여지는 거라 어쩔 수 없으니.. 그래도 저는 비트코인 코어 측은 물론 비트코인 ABC 개발자(처음 버그를 제보한 사람)의 대처 능력에 박수를 보내고 싶습니다.
비트코인 코어 소프트웨어를 사용하는 네트워크 참여자가 많을 수록 이런 버그가 발생되었을 때, 수정이 빠르게 된다는 이점이 있지만 반대로 소프트웨어가 독점되면 이런 버그를 알아차린 악의적인 노드가 네트워크를 마비시킬 수 있는 확률이 증가하기 때문에 앞으로 블록체인 풀노드 소프트웨어에 대한 방향성에 대해서도 한번 생각해보아야 할 것입니다.
결론
아직 블록체인 산업은 초기이고 그에 따라 혼란이 야기되는 부분이 많을 것으로 생각합니다. 소프트웨어에 대한 중앙화 부분도 분명 해결될 것이라고 생각하고 뭐든지 완벽한 것은 없기 때문에 결함은 분명히 존재한다는 것을 우리는 인정해야 합니다. 그것이 이 산업이 성숙해지는 길이 아닐까 싶습니다.
References