비트코인 발행 및 인증 프로토콜

in #kr7 years ago

이 글은 2013년에 작성된 것으로 2017년 현재는 일부 프로토콜 추가 및 업데이트, 그리고 오는 8월 1일 예정된 SegWit2 하드포크의 결과에 따라 일부 프로토콜에서 변경점이 있을 수 있습니다.


■ 비트코인 발행 절차

비트코인은 평균 10분마다 신규로 공급(발행)되며, 일련의 해쉬 연산을 거쳐 비트코인 채굴(Mining)자에게 주어진다.
이 생성과 분배, 교환이 발생할 때마다 트랜잭션 로그(Transaction Log)의 형태로 각 클라이언트들에게 분산 전송 후 승인되는 절차를 가지고 있다.

이 트랜잭션 로그는 최종 클라이언트에서 ECDSA 디지털 서명 정책(비밀번호 및 공개키와 비밀키 기반의 암호화된 해쉬 코드와 이를 통한 상호 인증 알고리즘 중의 하나)에 의해 인증되며, 비트코인 채굴(Mining)이라고 불리는 수학적 난이도를 가진 블럭(Block) 풀기 과정을 통해 트랜잭션 로그가 갱신된다.

신규 발행되는 비트코인은 실상 트랜잭션 로그의 집합체라고 할 수 있으며, 이에 블럭(Block)이라고 부른다.

채굴자들은 비트코인 발행과 거래 인증에 참여하는 유저들로서, 컴퓨팅 장치의 연산 능력을 이용해 유효한 블럭 찾기(작업 증명을 통해 가장 긴 블럭의 체인에 연결)를 시도하고, 이에 성공한 채굴자에게 자동으로 일정량의 비트코인이 부여된다.

이 신규 비트코인 발행량은 비트코인 네트워크가 얼마나 오래돼었고, 얼마나 많은 트랜잭션 수수료가 지급되었냐에 따라 달라지는데, 이는 비트코인 전자지갑 클라이언트에 정의되어 있다.

2009년에서 2012년까지는 신규 비트코인 블럭마다 50비트코인, 현재 2013의 경우 25비트코인이 지급되고 있다. 이후 2017년도에는 12.5로 반으로 줄어들 것으로 예상하며, 평균 4년마다 반으로 줄어들어 2025년 정도에는 대부분의 비트코인이 발행 완료된다.

■ 인증 프로토콜 개요

비트코인은 트랜잭션을 관리하기 위해 토렌트(Torrent)처럼 P2P 네트워크를 사용한다.
온라인 지불결제 플랫폼에서 가장 중요한 것은 인증의 무오류성인데, 비트코인은 거래 인증의 유효성과 이중 지불(Doubel Spending)의 문제를 해결하는데 있어, 원천적인 P2P 프로토콜 솔루션을 가지고 있다.

비트코인 인증 프로토콜의 대략적인 수행 절차는 다음과 같다.

네트워크 상에서 타임스탬프(TimeStamps, 절대 시간)된 모든 트랜잭션은 해쉬(Hash) 연산 기반의 작업 증명(Proof of Work)을 통해서 블럭에 포함되며, 이때 현재 진행 중인 상위 체인(Chain)에 해쉬되거나, 체인을 만들거나 기록을 할 때, 반드시 작업 증명을 한 번 더 거친다.

블럭(Block)이라고도 불리는 가장 긴 기록 체인(Recorded Chain)은 이 트랜잭션 이벤트의 증인으로서 구조체(Sequence) 역할을 뿐만 아니라, 그 이전 가장 긴 단위의 컴퓨팅 연산 그룹이 어디에서 왔는지 증명하는 역할도 수행한다.

다수의 채굴 노드가 네트워크를 공격하기 위한 악의적인 연합이 아닌 정상적인 네트워크 노드에 의해서 통제되는 한, 불순한 공격자를 앞질러 가장 긴 단위의 유효한 기록 체인(chain of records)을 생성할 수 있게 된다.

전체 P2P 네트워크 상에서 각각의 클라이언트 노드는 아주 간단한 역할을 하는데, 각 클라이언트의 메시지(message)는 해당 노드가 네트워크에 참여하지 않았을 때 새로 생겨난, 가장 긴 유효한 기록 체인을 승인하거나 전파하는 것을 최상위 목적으로 한다. 물론 이 노드들은 P2P 네트워크에 언제라도 임의대로 참여하거나 떠날 수 있다.

■ 전자서명 알고리즘

비트코인은 ECDSA 전자 서명(ECDSA digital signature) 알고리즘을 적용한 하나의 체인으로 정의된다.
비트코인 소유자는 이 전자 화폐를 다른 사람에게 보낼 때, 이전 트랜잭션의 해쉬와 다른 사람의 공개키(공개키이면서 계좌 주소)에 서명함으로써 송금할 수 있고, 이 정보들은 코인 블럭의 가장 끝자락에 위치한다.
물론 비트코인을 받는 사람은 해당 송금자의 전자서명을 승인하게 되는 것이다.

■ 해쉬와 서명

트랜잭션 승인을 위해 최상위 층에 두개의 SHA-256 해쉬 (공개키와 비밀키)가 존재한다.

비트코인 계좌 주소(Address이면서 공개키)는 아래의 규약을 가진 ECDSA 공개키 해쉬이다.

Bitcoin address/Public-key = Version concatenated with RIPEMD-160(SHA-256(public key))
Checksum = 1st 4 bytes of SHA-256(SHA-256(Key hash))
Bitcoin Address = Base58Encode(Key hash concatenated with Checksum)

그리고 트랜잭션 승인을 완료하기 위한 개인키(Private Key)는 전자지갑(Wallet)안에 암호화된 형태로 존재한다.

■ 타임스탬프(Timestamp)

비트코인은 항상 타임스탬프를 가지고 있는데, 타임스탬프 서버는 신문이나 유즈넷의 글(Usenet post)처럼 타임스탬프된 상태에서 해쉬를 배포하는 아이템 블럭들의 SHA256 해쉬 함수들을 가짐으로써 작동한다.

타임스탬프가 해쉬를 가지기 위해서는 당연하게도 그 시간에 해쉬 데이터가 반드시 존재한다는 것을 역으로 증명한다.

각각의 타임스탬프는 해쉬 안에 이전의 타임스탬프를 가지고 있으며, 이들 이전의 타임스탬프는 함께 묶어서 또 그 이전의 트랜잭션을 강화하는, 타임스탬프 연결고리(Chain)를 구성한다.

참조 원문 : 위키피디아 영문 http://en.wikipedia.org/wiki/Bitcoin

자세한 프로토콜 사양과 규칙은 여기 https://en.bitcoin.it/wiki/Protocol_specification

Sort:  

글 감사합니다 :)

블록체인 주제 관련 게시글 태그에는 한국어 태그로 #kr과 블록체인 및 암호화폐 관련 게시글 태그인 #coinkorea 태그를 붙여 주시면 더 많은 사람들이 보실 수 있을 것 같습니다.
그와 관련된 게시글을 한번 읽어주시고 동참해주시면 정말 감사하겠습니다.
Steemit KR 커뮤니티 CoinKorea 프로젝트

네, 알겠습니다. 앞으로 잘 부탁드리겠습니다.