블록체인에 대해 공부해보자! - 소프트웨어의 중앙화

in #kr6 years ago (edited)

KakaoTalk_20181010_225224930.jpg




블록체인 소프트웨어의 중앙화


안녕하세요. 오랜만입니다! 이번에는 블록체인 네트워크를 구성하는 노드들 사이의 가교가 되어주는 소프트웨어의 중앙화에 대해 비트코인을 예시로 삼아 차차 알아볼 건데요. 잘 모르시는 분들을 위해 설명 드리자면,


bitcoin-225080.png




얼마 전 비트코인 블록체인 네트워크를 운용할 수 있게 해주는 소프트웨어인 '비트코인 코어'가 치명적인 버그에 노출된 적이 있었습니다.


blockchain-3019120.png




아시다시피 블록체인은 공유되는 분산 원장입니다. 기존의 중앙화된 서버 보존 방식과는 달리 전세계 어디서든 공유할 수 있고 그 기록들이 분산되어 저장되는 방식이죠. 그래서 단 한 개의 풀노드만 살아 있어도 블록체인 네트워크는 죽지 않는다고들 합니다. 하지만 이런 블록체인 네트워크를 구동하려면 어떻게 해야 할까요?

풀노드 - 제네시스 블록부터 현재까지 모든 기록들을 저장하고 전파하며 업데이트 하는 노드




블록체인은 장부를 어떻게 공유하는데?


우선, 블록체인 네트워크를 구성하는 '노드'들은 분산되어 있으며 그 분산되어 있는 노드들은 '논스'값을 찾아 채굴하고 전파하며 블록에 거래 내역들을 담는 일련의 블록체인 네트워크를 구축하는 행위들을 합니다.


blockchain-3448502.jpg




분산된 '원장'에 담기는 거래 내역들에 똑같은 내역이 존재해야 블록체인 네트워크의 핵심을 유지할 수가 있습니다. 네, 바로 이 블록체인 네트워크 상에서의 거래 내역을 노드들끼리 동기화 시켜주는 역할을 하는 것이 이 소프트웨어라고 할 수 있습니다.




그럼 이 소프트웨어는 누가 만드나?

사토시가 처음 제네시스 블록을 생성하기 위해 만들었던 소프트웨어가 바로 이 비트코인 코어인데요. 원래 처음 만들었을 때는 이름이 참조 도구 (reference implementation) 혹은 비트코인-QT/비트코인드 (Bitcoin-QT/Bitcoind)라고 불리다가 2013년, Mike Hearn라는 개발자가 제안한 비트코인 코어(Bitcoin Core)라는 이름으로 사용하게 되었습니다.


그래서 어쩌라는겨?

아..그래서 이 소프트웨어가 중앙화 되어 있는 문제점을 얘기해볼건데요. 비트코인 코어 말고도 다른 비트코인 소프트웨어가 있냐고 물으신다면, 있다고 대답해드릴 수 있을 것 같습니다.


fork-973901.jpg




우선 블록 사이즈에 관한 문제로 비트코인이 하드포킹된 사건이 있었죠. 다른 클라이언트 진영에서 벌어진 논쟁이 결국 비트코인 체인의 분리를 가져왔습니다.


작년 여름, 비트코인 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%밖에 되지 않는다는 말입니다.

불과 두 달 전, 비트코인 코어 소프트웨어의 치명적인 결함이 발견되었죠.


제목 없음.png



비트코인 코어 측은 'CVE-2018-17144'라는 버그에 대한 보고를 비트코인 캐시 개발자로부터 제보받았습니다. 이 버그는 블록 검증을 생략하는 버그로, 채굴자들은 트랜잭션을 블록체인에 올리기 전에 트랜잭션을 검증해야 하지만 트랜잭션 내역의 검증을 하지 않고도 블록에 담을 수 있는 버그였습니다. 이 버그로 인해 자칫 비트코인의 무제한 발행을 비롯한 비트코인 네트워크에 치명적인 손상이 가해질 수도 있었습니다만 다행히 비트코인 코어 측은 마이닝 풀과 협력하여 비트코인 코어 소프트웨어를 버그 수정 버전으로 업데이트 하는 데에 성공했고, 새로운 풀노드의 소프트웨어 버전이 51% 이상 업데이트 된 이후 이 버그에 대한 정보를 대중들에게 공개했습니다.


이번에는 비트코인 코어 측의 대처가 빨라 이번 버그에서는 비트코인 네트워크에 손상을 가하는 일이 없었지만 만약 선량한 제보자가 없었다면, 혹은 악의적인 네트워크 참여자가 이를 먼저 간파했었다면 자칫 블록체인의 근간을 뒤흔드는 사건이 일어날 수도 있었습니다.


일각에서는 개발자들만이 이런 버그들을 알아차릴 수 있어, 일반 사용자들에게는 치명적인 결함이라고도 합니다만 블록체인이 다 코드로 짜여지는 거라 어쩔 수 없으니.. 그래도 저는 비트코인 코어 측은 물론 비트코인 ABC 개발자(처음 버그를 제보한 사람)의 대처 능력에 박수를 보내고 싶습니다.


비트코인 코어 소프트웨어를 사용하는 네트워크 참여자가 많을 수록 이런 버그가 발생되었을 때, 수정이 빠르게 된다는 이점이 있지만 반대로 소프트웨어가 독점되면 이런 버그를 알아차린 악의적인 노드가 네트워크를 마비시킬 수 있는 확률이 증가하기 때문에 앞으로 블록체인 풀노드 소프트웨어에 대한 방향성에 대해서도 한번 생각해보아야 할 것입니다.



결론


아직 블록체인 산업은 초기이고 그에 따라 혼란이 야기되는 부분이 많을 것으로 생각합니다. 소프트웨어에 대한 중앙화 부분도 분명 해결될 것이라고 생각하고 뭐든지 완벽한 것은 없기 때문에 결함은 분명히 존재한다는 것을 우리는 인정해야 합니다. 그것이 이 산업이 성숙해지는 길이 아닐까 싶습니다.




References



Sort:  

와우 전문가 이신가 보네요!
배우러 자주 방문하겠습니다~

감사합니다.

궁금한게 있는데 질문하나 드려도 되나요? 거래가 일어나면 모든 노드에 동시에 거래가 기록되는 건가요? 그리고 노드중 하나에서 블럭을 만들고 블럭이 생성되면 각 노드들은 해당블럭의 진위여부만 검증하고 저는 그런식으로 알고 있었는데 만일 누군가가 악의적인 내용의 거래를 장부에 기록하면 모든 노드에 있는 장부에 동시에 기록되는게 아닌건가요? 이미 형성된 블록은 해킹이힘들다는 건 알겠는데 블록이 형성되기 전에는 헛점이 있는게 아닌건가요? 궁금하네요

쉽게 쉽게 그리고 물리적으로 생각하시면 됩니다.
거래가 일어나면 거래내역을 당사자가 네트워크상에 업로드하게 됩니다.
그러면 옆에 노드가 그걸 받고 검증후 옳은 내용이면
옆으로 전달합니다. 그걸 무한 반복하여 전체로 퍼뜨립니다.
당연히 물리적으로 업로드와 동시에 빛의 속도로 전체에 동시에 도달할 순 없고 어느지역은 네트워크 문제로 느리게 가고 어디는 빨리가고..
또 어떤 노드는 컴터가 꺼진다던가.. 여러가지 사정으로 다들 순차적으로
받게 됩니다. 그래도 한번 확산되기 시작하면 지금의 네트워크 속도에선
모든 노드가 같은 내용을 공유하게 되는 것은 순식간이죠.

그리고 위에서 언급했듯이 받고 막 뿌리는게 아니라 받은 노드들이
거래내역 자체를 검증하고 뿌립니다. 블록만 검증하는게 아니죠.
그래서 악의적 거래내역은 사실상 확산자체가 불가능합니다
검증이 실패한 노드에서는 그걸 폐기해버리고 더는 안뿌리니까요.

그러므로 형성된 블록도 해킹이 불가능하지만
블록이 형성되기전 악의적 거래내역을 퍼뜨리는것도 불가능합니다.

일반적으로 채굴자들은 각기 다른 트랜잭션이 담긴 블록들을 채굴하는데요.(중복된 트랜잭션이 있는 경우도 있습니다) 채굴에 성공한 채굴자는 자신이 채굴한 블록을 다른 노드들에게 전파합니다.

'나 채굴했어!'

하고 말이죠. 그리고 그 블록을 전파받은 채굴자들은 이후 블록 생성을 위해 트랜잭션을 담아 채굴하기 시작합니다. 답을 드리자면, 거래가 일어나면 동시다발적으로 모든 장부에 기록되지 않습니다.

두 번째 질문에 답해드리자면, 비트코인 코어에 누군가 악의적으로 거래를 기록할 수가 없는 구조입니다. 사용자가 거래를 생성할 때 자신의 개인키를 이용하여 전자 서명을 하게 되는데 전자 서명이 다를 시 소프트웨어에 의해 유효하지 않다고 판단하여 해당 트랜잭션은 제외됩니다.

추가적으로, merkle tree 방식을 사용하기 때문에 거래 내역이 하나만 바뀌어도 merkle root의 값이 바뀌기 때문에 트랜잭션에 대한 위변조는 거의 불가능하다고 알고 있습니다.

풀노드를 사용하는 네트워크 참여자들은 주변 노드들의 블록체인을 대조하여 검증하는 방식을 사용하기 때문에 위변조된 거래를 받아들일 가능성은 없다고 보시면 됩니다.

제가 글에서 말씀드린 부분은 소프트웨어 자체의 검증 생략 버그입니다. 지금은 이 버그가 수정이 되었습니다. 소프트웨어로 블록 생성과 검증이 이루어지기 때문에 소프트웨어에 대한 업데이트는 주기적으로 이루어져야 합니다. 스팀의 경우, 증인 노드가 소프트웨어 업데이트를 하지 않으면 증인 순위에서 밀려나죠.

질문 주셔서 감사합니다! 언제든 편안하게 질문해주세요!

앗 그런일이 있었군여-ㅅ-

ㅋㅋㅋㅋ넵 뭔가 트윈쨩이라면 알았을 법도..