[BlockChain] 비트코인 기초 이론

Mong22·2023년 3월 11일
0
post-thumbnail

[해당 글은 'Bitcoin: A Peer-toPeer Electronic Cash System(Satoshi Nakamoto 저)'을 바탕으로 작성되었다.]

비트코인 기초 이론은 다섯 가지 목차로 나눌 수 있다.

  • Introduction
  • Transactions
  • Proof of Work
  • Network
  • Extra

Introduction

 비트코인은 거래의 신뢰성에 대한 의심으로부터 시작됐다. 현재 금융 거래는 제3자가 보증을 서는 형태로 이루어진다. 마치 인터넷으로 물건을 산다거나 계좌 이체를 할 때 중앙은행을 거치는 것처럼 말이다. 이러한 경우, 되돌릴 수 있는 거래(=Reversible transaction)가 이루어진다. 현재의 금융 거래 체계는 제3자에 대한 무한 신뢰를 기반으로 이루어지고 있지만, 제3자가 의심스러운 상황이 생길 수도 있다. 따라서 앞선 거래와 반대되는 되돌릴 수 없는 거래(=Non-reversible transaction)의 개념이 도입되었다. 하지만 되돌릴 수 없는 거래에도 Double Spending문제가 발생했는데, 이를 해결하고 되돌릴 수 없는 거래를 실현시키기 위해 비트코인이 등장했다.

되돌릴 수 있는 거래(=reversible transaction)란 거래를 한 당사자가 아닌, 제3자가 마음대로 거래의 내역을 수정하거나 조정할 수 있는 것을 의미한다.

되돌릴 수 없는 거래(=Non-reversible transaction)란 제3자 뿐 아니라 거래의 당사자들도 거래의 내역을 수정하거나 조정할 수 없는 것을 의미한다.

 되돌릴 수 없는 거래를 위해 제3자 없이 거래하는 peer to peer방식이 제안되었다. 제3자에 대한 신뢰가 필요했던 기존의 거래와 달리, 새로운 거래는 암호학적 증명에 기반하게 된다. 새로운 거래 시스템은 실제 거래 노드들의 총 집합이 통제하는 CPU 파워가 공격자들의 CPU 파워보다 크기만 하면 보안상 안전하며 이중 지불 문제를 예방할 수 있다.

peer to peer란 중앙 서버를 거치지 않고, 개인 클라이언트들 끼리 직접적으로 하는 거래를 뜻하며, 줄여서 p2p라고도 부른다.

Transactions

 전자 화폐는 디지털 서명의 연속으로 정의된다. 사용자들이 코인을 전송할 때, 이전 거래 내역과 다음 거래의 소유자의 공개키를 해시하여 코인 끝에 추가한다. 이로써 다음 수취인은 서명을 증명할 수 있다.

 이 시스템의 문제는 이중지불이 발생할 수 있다는 것이다. 이를 해결하기 위해 두 가지 요소를 고려해야 한다.

  1. 모든 거래에 대해서 투명하게 공개해야 한다.

  2. 참여자들이 단일의 시간 순서의 거래내역을 수용할 수 있도록 해야한다.

 앞선 두 가지 요소들을 구현하기 위해, Timestamp Server가 이용된다. 이 서버는 시간 내역이 기록된 블록의 해시를 널리 전파한다. 각 타임스탬프 내역은 이전 타임스탬프 해시를 포함시켜 체인을 형성한다. 이로써, 타임스탬프를 통해 그 시간에 데이터가 존재했다는 것을 확인할 수 있다.

Proof-of-Work

 작업 증명(Proof-of-Work)은 블록을 체인에 연결하기 위한 작업이다. 비트코인의 작업 증명은 SHA-256 알고리즘을 통해 제시된 수의 zero bit들로 시작하는 해시를 찾는 작업이다. 작업은 블록들에 임시값을 부착하며 제시된 수의 zero bit로 시작하는 해시를 찾을 때까지 진행된다. 만약 해시값이 발견되다면 해당 블록을 체인에 연결하고 이 사실을 다른 노드들에게 알리게 된다.

 작업 증명의 보상은 코인 지급과 거래 수수료로 이루어진다. 코인 지급은 최초의 블록 생성자에게 이루어지게 된다. 이로써, 유통될 코인을 처음에 네트워크 상에 배분하게 된다. 거래 수수료는 거래 내역에서 출력되는 돈이 입력되는 돈보다 적을 때 발생하는 차이를 의미하며, 해당 거래 내역을 포함하는 블록 생성의 보상 가치로 추가된다. 정해진 총량의 화폐가 유통되면, 보상은 거래 수수료로 전환된다.

Network

  다음은 네트워크를 운영하는 순서다.

  1. 새로운 거래는 다른 노드에 알려진다.

  2. 각각의 노드는 블록에 새 거래를 모은다.

  3. 각각의 노드는 블록에 대한 작업 증명을 찾아낸다.

  4. 노드가 작업 증명을 찾은 경우, 노드는 해당 블록을 모든 노드들에게 알린다.

  5. 노드들은 모든 거래가 타당하고 이전에 사용되지 않았을 경우에만 블록을 받아들인다.

  6. 노드들은 받아들여진 블록을 이전 해시로 이용함으로써 체인 내에 다음 블록을 만들어 블록에 대한 승인을 표현한다.

 노드들 중 가장 긴 것이 유효하다고 여겨지고 계속해서 확장된다. 만약 두 노드가 서로 다른 버전의 블록을 동시에 공개할 경우, 각 노드들은 먼저 받은 블록에 대해 작업을 수행하고 늦게 받은 블록은 저장한다. 작업 증명이 종료되면 더 긴 가지가 생성되고 그 가지를 채택하게 된다. 이 때, 새로운 거래가 모든 노드들에게 알려질 필요는 없다. 만약 노드가 블록을 놓친 사실을 알게 된다면, 전 블록에 대한 요청을 할 수 있다.

Extra

  • 디스크 공간 확보
     가장 최근의 거래가 충분한 블록에 의해 묻히게 되면, 그 거래 이전에 사용된 거래들은 디스크 공간을 확보하기 위해 폐기된다. 블록의 해시들은 원활하게 수정하기 위해서 Merkle Tree 구조의 루트 부분만 블록 해시에 포함되는 방식이 사용된다. 오래된 블록은 트리의 요소들을 제거하여 작아지고 하위 해시를 저장할 필요가 없게 된다.

    Merkle Tree는 모든 자식 노드들이 암호학적 해시로 이루어진 트리를 의미한다. 빠른 데이터 검증을 위해 자주 사용되는 트리이다.

  • 거래 입증 단순화
     사용자가 가장 긴 작업 증명 체인의 블록 헤더의 사본만 가지고 있다면, 네트워크 노드들에 요청하고, 해당 거래 내역이 포함된 블록의 Merkle Tree의 일부만 받아오면 돈의 지불 사실을 입증할 수 있다.
     이런 방식은 네트워크 공격에 취약한데, 공격자가 네트워크를 과부하시켜 거래를 조작하고 유지할 수 있다. 이를 예방하기 위해 사용자가 모든 블록을 다운 받고 모순된 블록들을 알리는 소프트웨어를 사용해야 한다.

  • 거래 단위 세분화
     돈을 개별적으로 관리할 수 있지만, 거래에서 너무 작은 단위까지 쪼개는 것은 번거롭다. 블록체인에서는 원활한 거래를 위해, 거래를 쪼갤 수 있도록 다수의 입력과 출력을 지원한다. 이를 팬아웃이라고 한다.

  • 개인정보보호
     거래 당사자들의 개인정보는 암호기법으로 보호된다. 거래 당시 공개키를 익명으로 소유하고 추가적으로 매번 거래마다 새로운 공개키-비밀키 쌍을 이용하여 거래 당사자들의 개인 정보를 보호할 수 있다.

profile
Wah!

0개의 댓글