이 페이지는 '비트코인, 블록체인과 금융의 혁신' 이라는 책을 보며 공부한 내용을 정리한 페이지입니다.
비트코인
중앙 장치 없이 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)의 해결책
네트워크의 동의를 얻기 위해서 작업증명 개념을 이용하여 해결책으로 떠오르고 있다.
비트코인 전달 예시
- A가 B에게 0.5BTC를 송금했다.
- 거래가 성립 되면서 지갑에 있던 금액이 빠져나가고 A는 개인키로 해당 거래에 대해 서명한다.
- 1~2의 과정이 끝나면 A의 비트코인 주소 중 한 곳에서 B의 새 비트코인 주소로 송금이 허가되었다고 비트코인 네트워크에 알린다.
- 네트워크로 전송이 되었지만 블록체인(비트코인의 거래 장부)에는 아직 포함되지 않아 B의 비트코인 주소에는 거래가 미승인으로 나온다.
- 채굴자(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 |
---|