Blockchain

비트코인 정리

하늘을난모기 2018. 10. 4. 18:15

이 페이지는 '비트코인, 블록체인과 금융의 혁신' 이라는 책을 보며 공부한 내용을 정리한 페이지입니다.

  • 비트코인

  • 중앙 장치 없이 P2P(Peer to Peer) 기반 분산 데이터베이스를 사용하며 256bit 해시 함수 알고리즘을 사용하는 디지털 화폐

  • 돈이 아니라 분산화된 신뢰 네트워크 * 분산화된 시스템의 경우에도 회복력이 있고 중앙 권력이나 계급, 복잡한 역할 분담 없이도 복잡성이 새롭게 만들어지며 믿기 힘들 정도의 정교함이 생길 수 있다는 사실

가위개미(leafcutter ant) 무리의 행동양식 * 채굴자들은 평균 10분마다 누군가가 지난 10분동안 발생시킨 거래들에 대해 입증하고 채굴에 성공하는 경우 새로 생성된 비트코인으로 보상 받음. * 비트코인 프로토콜은 비트코인 공급량을 4년마다 절반으로 낮추고 총 비트코인 공급량을 2,100만 코인으로 정하고 제한. * 비트코인 클라이언트 소프트웨어는 여러 가지 구현 버전과 참조구현(사토시 클라이언트)이 있음

비트코인 구성요소

  • 분산화된 P2P 네트워크(비트코인 프로토콜)
  • 공개거래장부(블록체인)
  • 분산화된 수학적 결정론적 통화 발행(분산 채굴)
  • 분산화된 거래 검증 시스템(거래 스크립트)

비트코인 클라이언트 유형

  • 풀 클라이언트(Full Client) : 풀 클라이언트 혹은 '풀 노드(Full Node)'는 비트코인 거래 정보를 전부 저장하고 비트코인 사용자들의 지갑을 관리하며 비트코인 네트워크상으로 직접 거래를 만들어 낼 수 있다. > 사용자들을 위해 최고 수준의 통제와 독립성 제공. but 사용자들은 백업과 보안에 대한 부담을 지게 됨.
  • 라이트웨이트 클라이언트(Lightweight Client) : 사용자의 지갑을 저장하긴 하지만 비트코인 거래나 네트워크에 접근하기 위해서는 제3자가 소유현 서버에 의존함. 거래내역 전부에 대한 복제본을 저장하지 않기 때문에 거래 검증을 위해서는 제3자 서버에 의존해야 함.
  • 웹 클라이언트(Web Client) : 웹 브라우저를 통해 접속하며 제3자가 소유한 서버상에서 사용자의 지갑을 저장. > 설치와 사용이 가장 쉽지만 보안과 통제에 대한 문제를 사용자와 웹 서비스 소유주가 공유해야 하는 위험이 있음.

기존 분산 컴퓨팅 문제(비잔티움 장군 문제;Byzantine General's Problem)의 해결책

네트워크의 동의를 얻기 위해서 작업증명 개념을 이용하여 해결책으로 떠오르고 있다.

비잔티움장군문제

비트코인 전달 예시

  1. A가 B에게 0.5BTC를 송금했다.
  2. 거래가 성립 되면서 지갑에 있던 금액이 빠져나가고 A는 개인키로 해당 거래에 대해 서명한다.
  3. 1~2의 과정이 끝나면 A의 비트코인 주소 중 한 곳에서 B의 새 비트코인 주소로 송금이 허가되었다고 비트코인 네트워크에 알린다.
  4. 네트워크로 전송이 되었지만 블록체인(비트코인의 거래 장부)에는 아직 포함되지 않아 B의 비트코인 주소에는 거래가 미승인으로 나온다.
  5. 채굴자(Miner)들의 채굴을 통해 새로운 블록이 형성되면 블록 내에 있는 거래내역들이 네트워크상에서 '확인'되어 승인으로 나온다. (약 10분이 소요된다.) > 거래는 발생하자마자 모두가 볼 수 있지만, 새롭게 채굴된 블록에 포함되는 경우에만 모두가 '신뢰'한다.
    > 거래를 할 때는 소정의 수수료가 발생하며, 이 수수료는 블록을 채굴한 채굴자에게 전달된다.

용어 설명

  • 블록(block) : 거래의 집합으로, 타임스탬프와 이전 블록의 지문이 표시되어 있다. 블록 헤더를 요약해서 작업증명(proof of work)을 만들고 이를 통해 거래가 유효화된다. 유효화된 블록들은 네트워크의 동의를 얻은 후 주 블록체인에 추가된다.
  • 블록체인(blockchain) : 유효화된 블록의 집합으로, 각 블록체인은 이전에 생성된 블록체인과 연결되어 최초블록(genesis block)까지 이어진다.
  • 승인(confirmation) : 거래가 블록 내에 들어가면 한 건의 승인이 발생한다. 동일한 블록체인상에서 또 다른 블록이 채굴되자마자 해당 거래는 두 건의 스인을 보유하게 되며, 이 과정이 반복된다. 최소 여섯 건의 승인이 있어야 거래가 철회될 수 없다고 판단한다.
  • 난이도(difficulty) : 작업 증명을 하기 위해서 얼마나 많은 계산이 필요한지를 제어하는 네트워크의 설정 값이다.
  • 난이도 목표값(difficulty target) : 해당 네트워크 내에 있는 계산력으로 약 10분마다 블록을 찾을 수 있는 난이도를 말한다.
  • 난이도 재설정(difficulty retargeting) : 2016개의 블록에서 한 번 발생하며 이전 2016개의 블록의 해싱파워를 고려해서 네트워크상에서 난이도를 다시 계산한다.
  • 최초블록(genesis block) : 블록체인에서 첫 블록으로, 암호화 화폐를 시작하는 데 사용한다.
  • 채굴자(miner) : 새로운 블록에서 유효한 작업인증을 찾기 위해 해싱을 반복하는 네트워크 노드를 말한다.
  • 네트워크(network) : 거래와 블록을 네트워크상에 있는 모든 비트코인 노드에게 전파하는 P2P기반 네트워크를 말한다.
  • 작업증명(Proof-of-Work) : 블록을 찾기 위해 다량의 계산을 요구하는 데이터다. 비트코인에서 채굴자들은 전 네트워크에 걸쳐 설정되어 있는 목표값, 즉 난이도 목표값을 충족하는 SHA256 알고리즘에 대한 수치적 솔루션을 찾아내야 한다.
  • 보상(reward) : 작업증명 솔루션을 발견한 채굴자에게 네트워크가 보상의 개념으로 새 블록 각각에 포함시켜 놓은 금액이다.
  • 거래(transaction) : 어떤 한 주소(A)에서 다른 주소(B)로 비트코인을 이동하는 것을 말한다. 거래는 비트코인 네트워크를 통해서 전송되며, 채굴자들이 수집하고 블록에 포함시켜서 블록체인 내에 영구적으로 존재하게 만든다.

비트코인 암호화

  • SHA256해시를 사용 (개인키)
  • 타원곡선 암호화 사용 (공개키) (http://www.nexpert.net/437) 
    • 계산이 오직 방향으로만 작용하기 때문에 개인키는 공개키로 전환될 있지만, 공개키는 개인키로 전환될 없다.
  • 공개키 > 개인키를 바탕으로 타원곡선 암호화를 사용하여 160bit 크기의 숫자를 생성한다.
    생성된 숫자를 Base58 Encoding을 활용해 공개키를 생성한다.
    Base58 기법은 타이핑에 헷갈리 수 있는 I, l, O, 0이 제외된다.
    Base58로 만든 인코딩은 Base58Check 포맷을 통해 인코딩이 된다.


'Blockchain' 카테고리의 다른 글

Solidity Tutorial  (0) 2018.04.21