[찰리브라운의 블록체인 이야기]사토시 나카모토의 혁신적 문제해결 해법

in #crytocurrency7 years ago

지난번 글에서 한가지 놓쳤던 것으로

  1. 사토시는 철저하게 탈중앙화를 꾀했고, 어느 누구라도 네트워크에 참여가 가능한 오픈 네트워크를 설계하였다.
  2. 그러다 보니, 자신이 정한 룰과 원칙 즉 프로토콜을 따르는 참여자들도 들어올 수 있지만, 어떤 경우에는 해킹이나
    불순한 의도를 가지고 들어오는 침입자들도 존재한다. 이들은 허위의 정보(거짓된 거래정보와 블록정보를 가지고 비트코인 네트워크를 붕괴시킬 수도 있다.)

이런 개방형 분산 노드 시스템에서의 동일한 거래장부를 갖도록 설계하는 일은 좀 복잡하고 어려운 일이다.

그런데 사토시는 이런 해결책을 구하는데 매우 획기적이고 기발한 발상을 하게 된다.

첫번째 암호 기술을 사용하여 가입자 인증 절차를 최소로 하고, 가입자의 권리를 철저하게 보호하도록 한다.

두번째로 가입자의 개인 신상에 필요한 성명, 휴대폰번호, 생년월일, 주소지, 남녀구분, 내국인/외국인 등의 정보를 전혀 알릴 필요가 없이 개인키를 사용한 서명 메커니즘에 의해 자신의 권리를 보호하되 간단한 본인 인증 절차를 거쳐 본인 소유권의 이전을 허가하도록 한다.

(국내에서 쓰이고 있는 복잡한 인증 체계를 아주 손쉽게 해결한다...)

세번째로 철저하게 개인의 거래 정보는 익명성을 통해 알기가 어렵게 하되, 노드에서의 거래장부는 모두 투명하게 보이도록 한다. 즉 어떤 개인의 거래인지는 모르도록 하지만, 거래의 사실은 투명하게 노출하도록 한다는 역발상인 것이다.

이런 방식을 구현하기 위해 사토신 선생은 별도의 메커니즘을 구현한다. 기본적으로 암호 기술뿐만 아니라 트랜잭션의 데이타 구조를 특별하게 고안한 것이다.

이 거래 메커니즘에 대해서는 좀 더 고찰해 볼 것이다.

그리고 이 거래 메커니즘에 더하여, P2P 네트워크의 각 노드의 기능과 역할을 정의하였다. 오픈형 P2P노드이기에 경우에 따라서는 침입자가 다른 목적으로 교란을 시킬 수도 있다.
그래서 비트코인 지갑 노드에서는 적어도 2개 이상의 노드 시스템과 연결되어 교신하도록 하며, 트랜잭션 발생시 P2P네트워크를 통해 트랜잭션(TX)를 보내어 거래장부의 유효성을 검사하고 신규 블록에 포함되어지도록 준비한다.

트랜잭션을 받은 노드에서는 해당 트랜잭션이 적합한지 검증한다.
기본적으로 적합성(Validity) 테스트는 다음과 같은 항목을 테스트한다.

  1. 거래의 데이타 구조가 정해진 구조와 문법에 맞아야 한다.
  2. 입력값이나 출력값 목록이 비어있지 않아야 한다.
  3. 트랜잭션의 바이트 단위 길이는 최대 블록사이즈를 넘지 않아야 한다.
  4. 출력값 금액은 당연히 2100만 비트코인 이하여야 한다.
  5. 트랜잭션 바이트 크기는 최소 100보다 크거나 같아야 한다.
  6. 모든 트랜잭션에 담겨져 있는 서명 작업은 하나 이상이어야 한다.
  7. 각각 트랜잭션의 입력값으로 참조하는 UTXO는 존재해야 하며, 이미 소비되었으면 안 된다.(이중 지불 방지)
  8. 트랜잭션의 입력값 금액이 출력값 총액보다 작은 경우 해당 거래는 거절된다.

결국 P2P 비트코인 네트워크 시스템의 규율을 어기는 이상한 트랜잭션은 거부하되, 규율에 맞는 트랜잭션은 받아들이고 블록을 위한 트랜잭션 풀에 보내어지고, 연결되어진 다른 노드들에게 보내어지어 동일한 트랜잭션이 전체 노드에 알려지도록 돕는 역할을 수행한다.

이런 의미에서 각 노드는 거래를 검증하고 정상적 거래들이 모든 노드들에 퍼지도록 돕는 진정한 피어(Peer) 역할을 수행하는 것이다.