NEO, 블록체인 기술이 맞긴 한가?

비트코인, 이더리움으로 대표되는 암호화폐는 네트워크 상의 어떤 노드든 자유롭게 참여할 수 있는 분산화된 구조를 가장 큰 특징으로 합니다. 그런데 일부 암호화폐는 스스로를 암호화폐로 부르고 암호화폐 거래소에서 멀쩡히 거래도 이루어지지만 실상은 알고 보면 하나의 기관이 모든 노드를 운영하는 중앙화된 구조를 가지고 있습니다.

NEO도 그런 암호화폐 중에 하나인데, 전체 네트워크에 단 7대의 validation 노드만이 존재하고 그나마도 모두 NEO 팀에서 운영을 하고 있습니다. 이런 관점에서 NEO는 암호화폐가 아니라 규제 없는 사설 은행이나 다를 바가 없습니다.

물론 테스트 단계에서 안정성을 위해 전체 노드를 팀에서 운영하고 차츰 분산화시켜 나갈 수도 있기 때문에 현 단계를 과도기로 볼 수도 있습니다. 하지만 NEO의 합의 알고리즘은 dBFT의 특성을 살펴보면 분산화 자체가 불가능하다는 사실을 알 수 있습니다. dBFT는 전세계의 노드 숫자가 고정되고 각 노드는 다른 노드의 위치를 미리 알고 있어야만 동작합니다. 하나의 노드라도 문제가 생기면 합의에 도달할 수 없게 되고 전체 블록체인 시스템이 동작하지 않게 됩니다. 실제로 NEO의 소스 코드를 보면 7개의 validation 노드의 주소가 하드코딩되어 있습니다.

40억 달러의 가치를 가지고 있는 NEO가 실제로는 암호화폐가 아니고 NEO팀이 운영하는 7대의 노드 중 한 대라도 다운되면 동작이 멈추는 기술에 기반하고 있다는 사실을 어떻게 설명해야 할까요? 관련 내용은 아래 글을 참고하세요.

http://storeofvalueblog.com/posts/how-centralized-is-neo/

 

CoinJoin

비트코인은 모든 거래 내역이 장부에 투명하게 공개되기 때문에 privacy가 완벽하게 보호되지는 않습니다. 비트코인 주소가 pseudonymous하기 때문에 어느 정도의 privacy 보호는 가능하지만, 거래 패턴을 분석해 여러 정보를 얻어낼 수 있습니다.

비트코인 프로토콜을 변경하지 않고 비트코인 거래의 privacy를 강화하기 위한 방안으로 CoinJoin이라는 방식이 있습니다. 결론부터 말씀드리면, 결제를 할 때 다른 사람과 함께 공동으로 결제를 하는 방식입니다. 비트코인은 하나의 트랜잭션이 여러 개의 input과 output을 가지기 때문에 여러 명의 input을 동시에 사용하여 다시 여러 개의 output을 만들어 내면 어느 input이 어느 output으로 연결되는지 알 수 있는 방법이 없어서 tracking을 막을 수 있습니다.

CoinJoin은 공동으로 결제할 다른 사람을 찾을 방법이 필요하므로 실제 거래에서는 그다지 사용되고 있지 않지만, 비트코인 트랜잭션의 특징을 어떻게 활용할 수 있는지 잘 보여주는 예입니다.

자세한 방법은 비트코인 위키를 참고하세요 🙂

Bech32

비트코인 주소는 double sha256 checksum을 붙여서 base58로 인코딩합니다. 그런데 이런 인코딩 방식은 다음과 같은 문제점을 가지고 있습니다.

  1. base58은 QR code로 표현했을 때 alphanumeric mode를 사용할 수 없음
  2. double sha256 checksum은 느리고 error-detection에 대한 보장이 없음
  3. error-detecting code는 대부분 character set 크기가 소수(prime number)여야 되는데, bsse58은 소수가 아님
  4. base58 디코딩은 느리고 복잡함

이 문제를 해결하기 위해 Segregated Witness에서 Bech32이라는 base32 기반의 새로운 주소 포맷을 제안하고 있습니다. 자세한 내용은 BIP 173을 참고하세요!

비트코인 오리지널 소스코드

사토시 나카모토는 2008년 비트코인 논문을 통해 비트코인의 핵심 아이디어를 설명하고, 다음 해인 2009년 비트코인 구현을 오픈소스로 공개하고 비트코인 네트워크를 시작하였습니다. (백서가 먼저 나오고 구현이 나왔지만, 실제로는 구현을 먼저 하고 백서를 썼다고 합니다.)

2008년에 나온 비트코인 논문은 지금도 원형 그대로 널리 읽히지만, 비트코인 구현은 그간 계속 발전하여 오늘날의 비트코인 레퍼런스 구현(Bitcoin Core)이 되었습니다. 그리고 Bitcoin Core는 10년 가까이 legacy가 쌓이면서 분석하기가 쉽지 않은 코드가 되었습니다.

다행히 사토시 나카모토가 직접 작성한 오리지널 비트코인 소스 코드가 아직 남아 있습니다. 무려 비트코인 버전 0.1.0은 헤더 파일과 소스 코드를 다 합쳐서 2만 줄도 안 되고 소스 코드도 간단해서 비트코인 개발에 입문하시는 분들이 비트코인의 동작 원리를 공부하기 좋습니다.