Engineering
블록체인과 비트코인
2018년 8월 28일
원문에서 보기 ↗이 글은 2017년 5월 사내에서 발표한 자료 입니다. 지금과는 다른 내용이 포함되어 있을 수 있습니다.
들어가기에 앞서
(이미지 출처: https://www.blockchain.com/) 블록 체인 기술이 왜 화제가 되고, 매커니즘은 어떻게 되는지, 어떤 분야에 적용 가능 한지에 대해서 아래의 자료를 보시고 도움이 되었으면 좋겠습니다.
여담으로 최근 가상 화폐의 가치가 하루가 다르게 변하고 있습니다. 왜 올라가고 내려가는지에 대한 답을 드릴순 없지만 본인만의 답을 얻을 수 있는데 도움이 되리라 생각됩니다.
또한, 블록체인 기술은 비트코인 논문에서 최초 언급된 기술이기 때문에 대부분의 설명과 예시는 비트코인 중심입니다. 하지만, 다른 블록체인 기반 기술도 큰 틀에서 보면 블록체인을 베이스로, 사업 목적과 비트코인의 한계(단점)로 인해 수정하여 사용된다고 보시면 됩니다.
https://github.com/bitcoin/bitcoin 에 오픈소스로 비트코인 소스가 공개되어 있습니다.(MIT License)
1장에서는 블록체인의 활용분야를 간단히 설명하고, 2장과 3장에서는 블록 구조와 메커니즘에 대해 기술적인 설명이 되어 있습니다. 4장과 5장에는 한계점과 그 외에 참고 하실 내용들을 정리하였습니다.
일부 미흡하거나 잘못된 부분이 있을 수 있으며, 피드백을 주시면 수정하겠습니다.
감사합니다.
목차
- 블록체인의 활용
- 블록체인 개요 2-1 . 블록 체인 구조 2-2 . 블록 구조
- 블록체인(비트코인) 메커니즘 3-1 . 채굴 과정 3-2 . 거래 과정 3-3 . 검증 과정 3-4 . P2P 아키텍처
- 한계점
- 그 외 참고사항
요약
- 블록체인이 무엇인가?
- P2P네트워크에 분산된 원장 형태의 데이터베이스 구조.
- 블록체인의 활용 가능성?
- 비트코인과 같은 화폐 외에도 공인인증서, 투표, 물류 송장 등 다양한 분야에서 연구 및 서비스 되고 있음.
- 비트코인의 한계와 취약점을 수정한 다양한 코인들이 등장하고 있음.
- 라이트코인은 코인생성주기를 2.5분(비트코인 10분), SHA256 알고리즘을 Scrypt로 바꿔 채굴을 막음.
- 대시코인은 기존에 공개되어있던 거래를 익명 거래로 변경, 또한 현실세계의 거래 검증시간에 맞추기 위해 검증 시간을 10분이상에서 1초로 줄임.
- 비트코인은 안전한가?
- 여러 단계의 검증 과정, P2P로 원장 분산, 공개키/개인키 기반 거래, HashCash로 작업증명으로 안전함.
- 비트코인은 오픈소스, 새로운 취약점과 부족한 부분은 지속적으로 개선 진행중
- 비트코인은 비용부분에서 효율적인가?
- 중앙 통제기관이 없고, 인프라(서버, DB 등)가 없어도 유지됨.
- 단, 그만큼 많은 사람이 참여해야하고 한계점을 고려해야함.
- 비트코인으로 어떻게 거래가 진행되는가?
- 비트코인 거래 당사자들은 개인 공개키(계좌)를 가지고 있고, 거래를 할때 해당 공개키로 비트코인을 전송해줌
- 거래는 전세계의 비트코인 노드에게 전송되고, 블록에 편입됨.
- 블록은 계속 추가되고 있고(10분에 1개), 체인을 형성하고 있음.(현재 약 47만개 블록)
- 위조된 거래가 블록에 들어올 수 없게 검증 과정이 여러차례 있음.
- 전 세계에 비트코인 블록체인은 단 1개 존재 함.
1. 블록체인의 활용
1.1 블록체인의 사례(Use case)
화폐(Currencies)
- 이체와 화폐의 기능을 수행하는 전자 화폐.
- 규제, 감독, 법제화 등 관련된 공인성은 없음
- 예) 비트코인, 라이트코인, 다크코인, 피어코인, 도기코인 등
자산 등록(Asset Registry)
- 자산 등록을 블록체인에 기록 하고, 개인키로 자산의 소유권을 주장하는 장부 기능.
- 블록의 크기가 화폐용 블록보다 상대적으로 크며, 네트워크 성능 저하와 고비용 수반함.
- 예) 컬러드코인, 옴니, 카운터파티 등
응용 플랫폼(Application Platform)
- 네트웍상에 존재하는 블록체인에 응용프로그램을 개발하고 작동시키는 플랫폼 역할
- 아직까지 서비스 초기이기 때문에 취약점이 다수 존재
- 예) 이더리움, 에리스, NXT 등
자산 중심(Assent Centric)
- 화폐, 자원. 주식, 채권의 거래를 일부 사용자만 볼 수 있는 공유장부에 기술함. (비트코인은 공개된 장부)
- 외환 거래, 송금, 결제, 이체를 목적으로 두고 있음.
- 예)리플, 스텔라
참고) 이더리움
- 비트코인 블록체인에 파생되어, 비트코인 다음으로 자산 가치가 큼.
- 플랫폼 형태의 블록체인으로 튜링완전언어를 지원하고, 블록체인 위에 어플리케이션이 개발 가능함
- 튜링완전 : 계산 문제를 프로그래밍 언어나 추상 기계로 풀 수 있다는 의미, C++, JAVA 등이 있음.
- 이더리움에서는 Solidity라는 독자 언어 사용.
- 블록체인 위에 개발이 가능한 구조 이기 때문에 코딩의 자유도로 인한 해킹사고가 자주 일어남
- 현재는 시장에서 검증 및 취약점 보완이 필요한 시기로 보여짐
1.2 Public vs Private 블록체인
퍼블릭 블록체인
- 누구나 참여가능하고, 거래가 모두에게 공개되어 있음(비트코인)
프라이빗 블록체인
- 한정된 참여자로 구성되어 있고, 경우에 따라 중간 개입이 가능함
- 거래의 검증 및 열람 권한을 정하고, 데이터의 수정이 가능함.
- 퍼블릭과 비교시 시스템 복잡성이 낮고(마이닝 및 거래 검증으로 인한), 저렴하게 운영 가능.
- 예) R3CEV 블록체인 상용화 연구를 위한 컨소시엄(국내/외 70개 은행)
1.3 블록체인의 장,단점
장점
- 보안성 : 분산 데이터베이스, 거래조작 불가
- 투명성 : 공개된 거래
- 익명성 : 지갑 생성 및 이용시 신원증명 절차가 없음.
- 편의성 : 누구든지 버튼 클릭 한번으로 계좌 생성 가능
- 안전성 : 한곳에 모든 데이터를 보관해야하는 위험을 피함
- 효율성 : 시스템 통합 및 복잡한 프로세스로 인한 고비용(인프라 등)
- 낮은 이체 수수료. 결제의 완결성(한번 결제가 일어나면 취소 불가) ※ 상기 장점이 경우에 따라 단점이 될 수 있음.
단점
- 가치변동성 : 법정화폐에 의존하여 수시로 가격 변경
- 관리의 어려움 : 비밀번호, 개인키 잃어버렸을 경우 복구 할 방법 부재
- 해킹 : 블록자체를 해킹하긴 어렵지만, 비트코인을 사용하는 서비스가 해킹 대상이 됨.
1.4 은행 및 공공 서비스 적용의 어려움
- 익명성 : 은행 거래 및 공공 서비스에서는 익명성을 사용 할 수 없으며, 사고발생시 이체동결, 강제인도 등을 할 수 없음
- 투명성 : 거래 내역은 개인정보로 볼 수 있고, 필요에 따라 내부정보나 영업기밀에 준할 수 있음.
- 합의구조 : 경쟁을 벌여 채굴 과정을 통해 작업을 증명하고 인센티브를 받는 구조이기 때문에 전기를 소비하는 방식이 아닌 다른 방식이 요구됨, 처리비용 낭비
- 확장성 : 초당 수천번의 카드 결제나 거래를 블록체인에서 처리하기 어려움
- 규제 적용의 어려움 : 국내의 전자금융거래법, 금융실명제 등을 적용하기가 어려움 ※ 이런 어려움을 개선한 가상화폐들이 계속 등장함.
1.5 해킹의 위험
- 대체적으로 블록체인 자체는 안전하나, 유관 서비스가 해킹 당함
- 사후처리가 불가능함, 해커가 누구인지 특정하기가 어려움
- 누구나 접근가능한 서비스이기 때문에 해킹의 위협은 항시 있음.
- 대표적인 해킹 사례
- MtGox 비트코인 거래소 해킹 및 파산 사건 : 해커가 비트코인을 수령했음에도 불구하고, 거래소에서 확인못하게 하여 다중 출금을 함. 당시 최대 비트코인 거래소 였으나 파산하게됨.
- 이더리움 TheDao 서비스 해킹
1.6 세부 활용 분야
금융산업 분야
- 빠르고, 안전한 거래를 가능하게 함
- 소액 결제, 국제 송금, 주식거래 등
- 예) 국제 송금시 높은 수수료와 송금 서비스를 완료하기까지 1~2일이 소요되는 것을, 공개키/개인키를 사용하여 즉시 거래를 가능하게 하며 수수료가 줄일 수 있음.
- 지급, 정산, 결제 프로세스의 비효율성 제거
- 프로세스에 참여하는 각 조직이 각자의 데이터를 유지, 상호 통신로 인해 리소스 낭비가 심함.
행정서비스 분야
- 위변조가 불가능한 기록 시스템 구축 가능함.
- 출생, 사망, 결혼 신고, 토지, 기업등기 등
- 음원 소유권 등록, 주식, 특허 등 소유권 등록
계약 분야
- 일정 조건을 만족시키면 거래가 자동으로 실행되는 프로그램.(비트코인의 nonce 찾는것 처럼)
- 특정 조건이 충족되는지 여부를 판단하고 지불을 승인
- 예)보험업체는 농민을 대상으로 가뭄이 농산물 생산에 영향을 미칠 경우 보험금을 지급한다는 정책을 마련하고, 가뭄이 30일 동안 지속되면 보험금이 지급되는 계약 조건을 명시. 이러한 가뭄 조건이 충족되었는지 확인하는 과정에서 사람의 개입이 필요없고 보험금도 자동으로 지급되므로 전체 과정의 능률이 향상 됨. 결과적으로 시간과 비용 절감이 가능
IOT 분야
- IBM, 리눅스 제단 주도하고 있는 프로젝트 中, 수백 개의 사물들이 네트워크에 연결되어 서로 통신하며 주어진 업무를 수행하는데 , 중앙집중 시스템으로 이를 모두 모니터링 하고 관리가 불가능함. 설정된 조건에 도달하면 자율적으로 다음 과제를 수행하고, 사물간 의사소통 과정에서 제3자에 의한 해킹을 막음.
거래 수수료 및 POW의 활용
- 메일을 보낼때 Hash의 역방향 계산하도록하여 일정 수수료 지불.
- 거래 수수료가 포함되면 우선적으로 처리됨, 없으면 지연될뿐. 예를들면 스팸 발송에 작업증명(=POW)이 필요하게 설계
- ※ POW(작업증명, Proof Of Work) : 특정한 난이도의 작업을 수행했음을 증명하는 기법
국내 현황 뉴스
(뉴스 스크랩, 세부 내용은 없음)
- KB증권의 블록체인 기반 SSO, http://news.naver.com/main/read.nhn?mode=LSD\&mid=sec\&sid1=101\&oid=024\&aid=0000056434
- KB카드의 블록체인 기반 공인인증서, http://www.ajunews.com/view/20170328141900107
- 카카오 블록체인 기반 공인인증서, http://news.naver.com/main/read.nhn?mode=LSD\&mid=sec\&sid1=101\&oid=030\&aid=0002612038
- 삼성SDS, SK C&C, 블록체인 기반 물류 관리, http://www.ajunews.com/view/20170606092304956
- 공인인증서 대체, http://www.datanet.co.kr/news/articleView.html?idxno=110500
(이미지 출처: http://www.datanet.co.kr/news/articleView.html?idxno=110500)
2. 블록체인(Blockchain)?
2.1 블록체인의 유래
- 암호화된 가상회폐인 비트코인의 기반 기술로 2008년에 최초 소개 됨
- Bitcoin: A Peer-to-Peer Electronic Cash System, Satoshi Nakamoto, https://bitcoin.org/bitcoin.pdf
- b-money, hashcash 등 이전에 발명되었던 화폐들을 조합해서 분산화된 전자화폐 시스템을 만들게됨.
2.2 블록체인의 정의
- P2P네트워크에 분산된 원장 형태의 데이터베이스 구조.
- 일정 크기의 원장(여러 거래 기록, 트랜잭션)이 모이면 블록이 형성되고, 블록이 연결되어 블록체인이 됨.(링크드 리스트 형태)
2.3 블록체인의 가치
-
기존 개인과 개인, 공공기관과 개인, 기업과 기업간 발생하는 다양한 형태의 거래 관계를 개선 할 수 있는 기반 기술. => 금융거래, 계약 등에서 제3자 중개와 보증,공증 없이 거래의 확실성, 안전성, 이중거래의 원천 차단을 보장함.
-
거래 당사자들간 신뢰가 요구되는 모든 계약의 중개 플랫폼으로서의 역할을 하고, 서로를 신뢰하지 못해 발생하는 비효율을 제거. => 정보는 네트웍 참여자 사이에서 분산/공유/관리 되고 있어 실제 데이터(거래내역)을 담고 있는지 공개되어 검증됨.
-
향후 영향과 가치에 대해 TCP/IP 기술과 비교되기도 함.
(이미지 출처: https://www.openxcell.com/blockchain-for-president)
2.4 블록체인 구조
비트코인의 블록체인 구조
(이미지 출처: http://www.smallake.kr/)
- 블록 체인은 블록이 계속 추가되는 구조, 체인의 높이가 증가한다라고 표현
- 앞의 블록을 부모 블록이라고 하고, 부모 블록의 다음 블록을 자식 블록으로 표현
- 자식 블록이 부모 블록 해시 값을 가짐으로써 보안이 유지됨, 위조방지
- 부모가 변경되면 자식이 변경되는 구조, 변조를 위해서는 앞서 생성된 모든 블록을 재계산 해야지만 변조 가능
- 블록이 높아 질수록 안전성은 높아지며, 높은 블록에 담긴 거래일 수록 검증됨을 보증하고 안전함을 의미
- 전세계에 하나의 체인(장부)만 존재
- 참고) 2017년 6월 5일 22:10 기준, 블록 높이 469876
2.5 블록의 구조

블록헤더
- 블록 크기 : 블록헤더는 고정이며, 블록에 포함된 거래의 수에따라 가변적임
- 버전 : 데이터 구조의 버전. 구조변경 시 필요
- 이전 블록 해시 : 이전 블록과 연결됨을 의미.
- 머클루트 : 해당 블록에 포함된 거래로부터 생성된 머클 트리의 루트에 대한 해시, 블록에 들어있는 모든 거래의 요약본.
- 타임스탬프 : 블록의 생성시간, 1970.1.1 이후 초단위 시간.
- 난이도 목표 : 채굴을 위한 난이도(bit값)으로 2016개째 블록 마다 변경됨.
- 난스 : 작업증명 알고리즘에 사용되는 카운터(값을 바꿔주는 역할)
트랜잭션
- 트랜잭션 카운트 : 포함한 거래 개수
- 코인베이스 트랜잭션 : 블록 생성 시 발생되는 비트코인이며, 본 블록을 마이닝한 마이너의 수입
- 트랜잭션 : 10분동안 수집한 거래정보.
2.6 블록 Rawdata
- 블록의 식별은 블록의 해시 값 혹은 높이로 식별
- 단 높이는 유일하지 않을 때가 있음.
- 블록에는 통장의 잔금이 표시되지 않고, 거래의 기록만 표시됨(Input과 Output)
- 블록을 만드는 과정(채굴 과정)으로 보상을 받게되고, 이는 첫거래에서 확인 가능함.
비트코인의 0번 블록 Rawdata
{ //블록 헤더
"hash":"000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f", // 식별값
"ver":1,
"prev_block":"0000000000000000000000000000000000000000000000000000000000000000", // 이전 블록, 최상위 블락이기 때문에 0
"mrkl_root":"4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b",
"time":1231006505,
"bits":486604799,
"fee":0,
"nonce":2083236893,
"n_tx":1, // 트랜잭션 수
"size":285, // 블록 크기 0.285KB
"block_index":14849,
"main_chain":true,
"height":0, // 체인 높이 0(첫 블록)
"tx":[
{ // 트랜잭션 영역, 첫번째 트랜잭션
"lock_time":0,
"ver":1,
"size":204,
"inputs":[ // 첫번째 거래는 채굴된 거래를 나타냄. Input의 기원이 없음.
{ // 보통 거래는 Input - > Output의 연결고리이며, Input의 주소가 있음.
"sequence":4294967295,
"script":"04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73"
}
],
"time":1231006505,
"tx_index":14849,
"vin_sz":1, //input 수
"hash":"4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b",
"vout_sz":1, //output 수
"relayed_by":"0.0.0.0",
"out":[
{
"addr_tag_link":"https:\/\/en.bitcoin.it\/wiki\/Genesis_block",
"addr_tag":"Genesis of Bitcoin",
"spent":false,
"tx_index":14849,
"type":0,
"addr":"1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa", //비트코인 수신자 주소(공개키), 채굴된 비트코인은 채굴자의 주소로 기록됨. (output)
"value":5,000,000,000, // 50BTC , 1BTC=100,000,000 Satoshi(1억 사토시)
"n":0,
"script":"4104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac"
}
]
}]
}
1번 블록 (일부 생략)
"prev_block":"000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f", // 0번 블록의 Hash값.
"height":1, // 높이가 +1 증가함.
80,000번 블록 (일부 생략)
"prev_block":"00000000001937917bd2caba204bb1aa530ec1de9d0f6736e5d85d96da9c8bba", // 79,999블록의 해시
"n_tx":2, // 두개의 트랜잭션이 포함됨
"height":80000,
{ // 첫번째 거래 (생략)
},
{ // 두번째 거래
"lock_time":0,
"ver":1,
"size":158,
"inputs":[
{
"sequence":4294967295,
"prev_out":{
"spent":true,
"tx_index":135639,
"type":0,
"addr":"1JBSCVF6VM6QjFZyTnbpLjoCJTQEqVbepG", // 해당 주소(계좌)를 가진 사람이 50BTC를 ?로 전달(Output영역 확인)
"value":5000000000, // 50BTC
"n":0,
"script":"4104283338ffd784c198147f99aed2cc16709c90b1522e3b3637b312a6f9130e0eda7081e373a96d36be319710cd5c134aaffba81ff08650d7de8af332fe4d8cde20ac"
},
"script":"48304502206e21798a42fae0e854281abd38bacd1aeed3ee3738d9e1446618c4571d1090db022100e2ac980643b0b82c0e88ffdfec6b64e3e6ba35e7ba5fdd7d5d6cc8d25c6b241501"
}
],
"time":1284613427,
"tx_index":135927,
"vin_sz":1,
"hash":"5a4ebf66822b0b2d56bd9dc64ece0bc38ee7844a23ff1d7320a88c5fdb2ad3e2",
"vout_sz":1,
"relayed_by":"0.0.0.0",
"out":[
{
"spent":true,
"tx_index":135927,
"type":0,
"addr":"16ro3Jptwo4asSevZnsRX6vfRS24TGE6uK", // 위의 Input 계좌 -> Output 계좌로 50BTC가 전달됨
"value":5000000000,
"n":0,
"script":"76a914404371705fa9bd789a2fcd52d2c580b65d35549d88ac"
}
]
}]
}
참고) 머클 루트(Merkle Root)와 머클 경로(Merkle Path)
(이미지 출처: http://chimera.labs.oreilly.com/books/1234000001802/ch07.html#merkle_trees)
- 머클루트 : Merkle Tree(=Hash Tree)의 최상위 해시값. 거래의 수량에 관계 없이 256bit 해시 값으로 표시됨.
- 머클경로 : 거래가 트리안에 있음을 증명하기 위한, 각 Level에서의 특정 노드 집합.
- 머클 트리는 균형트리, 더블 SHA256으로 형성됨. (1) 리프 노드의 해시 값 = SHA256(SHA256(Transcation A)) (2) 리프 노드의 해시값을 Stirng으로 붙여서, 다시 SHA256(SHA256())
- 특정 거래가 블록 내에 포함되어 있다고 입증 과정에서 사용되고, 효율적임
- 거래가 N개 일때, Log2(N)의 머클 경로로 거래 포함 여부를 확인 함.
- 예) 거래 K가 블록의 트랜잭션 영역에 16개의 거래에 포함되어 있는지 확인이 필요함 (1) 특정 거래와 트리의 루트를 연결하는 머클 경로를 생성, H(L), H(IJ), H(MNOP), H(ABCDEFGH) - 파란색 노드 (2) 머클 경로에 대응하는 해시 쌍과 머클 루트를 계산함, H(KL), H(IJKL), H(IJKLMNOP), H(ABCDEFGHIJKLMNOP)- 파란색 점선 노드 (3) 최종 루트 해시값을 만게 되면, 거래 K가 해당 블록에 포함 되어 있음을 입증
3. 블록체인 메커니즘
3.1 채굴(Mining) 과정
- 거래 정보나 기록을 모아 유효한 개별 블록을 형성하는 과정
- 해시 함수에서 블록 생성 조건에 맞는 수(Nonce)를 찾기 위해 상당한 컴퓨팅 파워를 사용하고, 유효한 새 블록을 완성한 채굴자는 인센티브를 받음.
- 인센티브? 신규 비트코인과 블록에 포함된 거래들의 수수료를 받게 됨.
- 인센티브는 P2P 기반 전자화폐를 유지하는 수단 일 뿐, 전자화폐의 목적은 아님,
채굴 방법
- 특정 값(Nonce) 를 찾기위한 해시 연산 과정

(1) 블록헤더를 SHA256()연산, Nonce = 0
- 해시함수 - SHA256의 특징 : Y 결과값을 계산하는 것은 쉬움, Y값을 가지고 반대로 X를 찾기는 어려움
(2) SHA256() 결과 값 < 난이도 목표 값을 만족하는 블록헤더의 Nonce를 찾으면 성공.
- X를 찾는 2^256의 연산은 매우 어렵기 때문에. 특정 범위의 값을 찾게하고 난이도 조절을 함
- 난이도 조절은 난이도 목표값의 앞자리 0의 수를 늘리거나(난이도가 높아짐), 0의 수를 줄임(난이도가 낮아짐)

(3) 채굴자는 인센티브를 받게되며 블록을 만들고 전파함.
(4) 다른 노드가 만든 블록이 입수되면 계산 중단하고 그 다음 블록을 만드는 계산에 착수.
난이도 조정
- 비트코인 규칙으로 2016번째 블록마다 조정(비트코인의 규칙)
- 2016개의 블록이 생성되는 시간의 평균 값을 구해서, 10분당 한개의 블록이 생성되도록 조정함.
- 비트코인의 난이도, https://bitcoinwisdom.com/bitcoin/difficulty
- Adjust time : 난이도 조정 시점
- Hashrate : 전세계 채굴 속도.
- 1KH/S : 초당 1000개 해시를 계산할수 있는 컴퓨팅 파워
- 1TH/S : 초당 1조개 해시 계산, 0.01266의 BITC를 벌수 있는 예상치(1달 기준)
- 비트코인 초기에는 쉽게 설정 되었으나, 채굴에 참여하는 참여자가 많아짐에 따라 동적으로 조절하여 어려워 짐, 10분에 1개로 유지 되도록 함
난이도 조정의 의미
- 독립적임, 거래 건수와 코인 가치와 무관하게 발행 화폐 규모는 일정하게 조정됨
- 해싱 파워의 증가는 자유 시장 방식이 적용됨
- 많은 노력을 들일 수록 코인을 얻게 되는 구조
POW(작업증명, Proof Of Work)
- 특정한 난이도의 작업을 수행했음을 증명하는 기법
- 작업의 어려움은 난이도에 맞게 설정되어 있어야 하고, 그 작업이 완료되었음을 확인하는 것은 쉬워야 함.
- 여러가지 방법이 작업증명에 사용될 수 있는데, 비트코인은 ‘Hashcash’방식을 통해 작업증명
HashCash
- 마이닝을 위해선 HashCash를 풀어야하고, 이는 내가 얼마만큼의 노력을 들였다는 증거가 됨.
- HashCash 4요소(비트코인 예시)
- (1) 목표 : 2016개의 블록을 생성하는데 2주간 소요되어야함, 즉 10분에 한개
- (2) 작업방식 : 해싱을 통한 목표값 찾기
- (3) 난이도 조정방법 : 2주일 걸릴걸 1주일만에 해결하였다면 난이도를 두배로 올림. 즉, 초과/미달하는 부분만큼 목표값의 난이도가 변경
- (4) 난이도 조정시점 : 2016번째 블록 마다
채굴의 의미 : Nonce찾기 -> Hashcash 과정 -> POW(작업증명, Proof Of Work) -> 노력의 증거 -> 신뢰 -> 노력으로 얻은 화폐
비트코인의 수량의 제한
- 채굴로 추가되는 비트코인은 210,000 블록마다 1/2으로 줄어들게 프로그램됨
(이미지 출처: https://en.bitcoin.it/wiki/Controlled_supply) - 2040년을 마지막으로, 약 2100만 비트코인이 발행됨.
- 인센티브가 줄어들면, 사용자들은 블록을 생성하는 노드를 구동하는 것 보다는 거래 수수료를 벌도록 유도됨
소모적인 작업이 필요한 이유
- 수많은 경쟁자들이 서로 경쟁하고 감시함으로써 거래의 유효성을 검증
- 누구도 신규 블록을 독점적으로 만들게 하지 못하게 함으로써 임의의 조작이나 개입을 첫단계부터 차단
- 어려운 채굴과정을 통해 신규 블록의 형성 속도를 평균10분정도로 맞춰 거래의 수집과 배포, 거래의 유효성 확인 등이 무리 없이 절차대로 진행
- 결국, 거래내역이 블록에 포함되고 쌓이게 되면, 변경이 불가능하고 세상 어디서나 그 거래를 확인 할수 있게 되고 보안이 유지되는 장점이 생김
3.2 트랜잭션 과정
트랜잭션의 구조
- 거래에는 입력값과 출력값이 있음. 과거의 출력값은 다른 거래에서 입력값으로 사용
- 거래는 공개키, 개인키 기반으로 수행됨
- A- > B에게 코인을 보낼때, A는 B에게 공개키(=계좌)를 보내고, A가 해당거래의 개인키로 서명함.
- 비트코인 거래 행위는 현실 세계와 비슷하게 내가 가진 화폐를 주고 잔액을 받는 구조.
- 현실에서는 100원 내고 30원 쓰고 70원 거슬러 받을
- 비트코인에서는 100원이 사라짐, 내 70원이 새로 생김, 상대방은 30원이 새로 생김
트랜잭션 예시
- Transaction C는 C라는 사람이 발행한 수표로 가정
(이미지 출처: https://en.bitcoin.it/wiki/Transaction)
(1) Transaction C에는 두개의 입력, 과거에 발행된 2개의 수표를 참조하는 링크가 있음.
- Input 하나는 A로부터 받은 100BTC
- Input 또 다른 하나는 B로부터 받은 50BTC
(2) C는 150BTC를 사용할수 있는데, 이중 101 BTC를 D에게 주겠다는 수표가 Transaction C.
- Transcation D는 D가 누군가에게 101BTC를 제공함.
- Trnascation B는 이전 수표가 없는 수표임. 즉 채굴(Mining)로 발행된 비트코인을 담고 있음. 결국 C가 채굴자
- 최종 C는 49의 거스름돈을 가지고 있음 이를 UXTO, Unspent Transaction Output 라고 함
잔금, UXTO(Unspent Transaction Output)
- UTXO(Unspent transaction output) : 소비되지 않은 거래 출력 값
- 실제로는 1BTC를 지출하기 위해 딱 떨어지는 UXTO를 사용하는것이 아니라, 사용가능한 UXTO를 Greedy 알고리즘으로 가능한 UXTO를 조합.
- 1BTC의 지출을 위해 UXTO 0.1+0.2+0.7 조합
- 일반적으로 잔액이 얼마나 있는지 보는 것은 UXTO를 전부 더한 것.
UXTO Rawdata
{
// 해당 주소의 UXTO를 보여줌
"unspent_outputs":[
{
"tx_hash":"db95f3769d95257c353b345e8ee8a1052b6ac2a945ecb2784b88dca1bb3eeaee",
"tx_hash_big_endian":"eeea3ebba1dc884b78b2ec45a9c26a2b05a1e88e5e343b357c25959d76f395db",
"tx_index":52726616,
"tx_output_n": 0,
"script":"76a9145679a899dc210729cc845643fc998d4b61b4da7288ac",
"value": 300000, // 모든 output의 합이 잔금이 됨
"value_hex": "0493e0",
"confirmations":179540
},
{
"tx_hash":"0cd81aad3c67f0361a02b49195f38c707846e39a93771eab360c94c65891ec48",
"tx_hash_big_endian":"48ec9158c6940c36ab1e77939ae34678708cf39591b4021a36f0673cad1ad80c",
"tx_index":52734187,
"tx_output_n": 0,
"script":"76a9145679a899dc210729cc845643fc998d4b61b4da7288ac",
"value": 3274715, // 모든 output의 합이 잔금이 됨
"value_hex": "31f7db",
"confirmations":179533
},
]
}
고아 트랜잭션
- 여러개의 트랜잭션에서 Input과 Output의 연결고리가, 끊긴 경우
- 이전 거래의 출력값을 소비하여 다음 거래를 위한 입력값과 출력값을 생성
- 예) P2P상에서 전파될때 최상위 출력값이 안오고 중간부터 오는경우 일시적으로 고아.
- DOS 공격 예방하기 위해 보관 하는 고아의 수는 제한되어있음.
- 고아거래 풀 : 미승인 거래 목록을 임시로 보관, 로컬 메모리에 올라가 있음.
- 거래가 거래풀에 추가 될 때 해당 거래의 출력값을 참조하는 고아거래(해당 거래입장에서는 자식거래)가 있는지 체크하고 있으면 거래 풀로 이동, 추후 블록에 추가
- cf) UTXO 풀 : 블록체인상에 존재하는 소비되지 않은 출력값 모두가 들어있는 집합.
코인베이스
- 최초 블록을 채굴한 사람에 대한 보상으로 받은 거래에는 Input 데이터가 없음
- 모든 거래는 input과 output이 있지만, 코인베이스만 예외
- 입력값이 먼저냐 출력값이 먼저냐에서 출력값이 먼저가 됨.
3.3 검증 과정
- 중앙 통제 기관(신뢰 기관)이 없지만, 분산화된 독립적인 노드 수천개가 특정 규칙을 따르면서 만들어 낸 합의 도출 함.
- 합의는 아래 4가지 프로세스가 상호 작용하여 만들어 짐 (1) 풀 노드(모든 거래를 가짐)가 각 거래마다 독립된 검증 실시 (2) 작업증명(POW)을 통해 증명된 계산법을 사용하여 채굴 노드들이 검증된 거래들을 새로운 블록에 독립적으로 추가 (3) 모든 노드들이 새 블록을 독립적으로 검증한 후 체인에 블록을 연결 (4) 모든 노드가 작업증명을 통해 이루어진 최고 누적 연산 체인을 독립적으로 선택.
- 최종적으로, 50% 이상 참여자들의 동의를 거쳐 유효성이 확인 되면 후보블록은 이전 블록으로 연결되어 블록체인이 완성됨.
3.3.1 독립된 검증
- 형식 검증 : 구문(syntax), 합법적 필드값, 값의 범위
- 거래 유효성 검증 : 거래의 입력값이 UTXO(Unspent TX Output)인지, 즉 유효한지, 입력값 >=출력값
- 코인베이스 거래 검증 : 코인베이스 Output을 사용하려면 최소 100싸이클 후에 사용 가능.
- 이 외에도 20여가지 체크리스트가 있으나, 취약점이나 공격이 있을때마다 체크하는 항목들은 계속 변경됨.
- 모든 노드는 전달된 거래의 형식과 내용을 검증, 검증된 거래만 다른 노드에 전파.
거래 전파
- 비트코인 네트워크에 전달만 되면됨, 즉 하나의 노드에 전달이되면 됨
- 수단은 와이파이, 블루투스, NFC, 바코드, 극단적으로 라디오, 위성 등으로 노드 하나에 전달되면 전세계로 퍼짐.
- 실제로 주변 P2P에 연결된 3~4개의 노드에 전달되고, 기하급수적으로 전파됨
3.3.2 작업증명을 통한 블록 생성과 트랜잭션 추가
- 예) 앨리스가 밥의 가게에 커피한잔을 사고 비트코인으로 결제 (1) 앨리스가 비트코인으로 밥의 가게에서 커피 한잔을 산 거래를 만듦 (2) 전 세계 노드들이 해당 거래를 받고 거래 풀(=메모리 풀)에 추가함 (3) 밥이 채굴(Mining)에 성공하여 블록을 찾게됨. 앨리스의 거래를 블록에 포함 시켜, 다음 블록을 만들게되고. 해당 블록은 전세계로 퍼짐. (4) 캐롤은 밥이 블록만들기에 성공했다는것을 알게 되고, 본인이 가지고 있던 거래들이 밥이 만든 블록에 있는지 확인하고 거래 풀에서 중복되는 거래를 제거함. (5) 캐롤은 다시 다음 블록 경쟁에 참여함.
거래의 우선순위
- 거래 대금이 값이 클수록, 그리고 오래된 UXTO기록 일수록 우선순위가 높아짐.
- 우선순위 = Sum(input * input age) / Transaction Size
- 채굴 노드들은 거래공간 중에 50KB는 우선순위 높은 거래들에게 할당되어 있음
- 채굴자들이 수수료가 높은 거래만 포함시키도록 할수도 있으나 우선순위에 나이가 포함됨에 따라, 오랜기간동안 거래 풀에 남게 된 거래들은 추후 포함됨.
거래 전파 직후 신뢰도
- 거래 전파 직후 < 블록에 포함 < 블록체인에 포함
- 거래 전파 직후
- 구매자가 거래를 전송하면 수초 이내에 전세계 대부분 노드에 전파
- 해당 거래는 아직블록체인에 포함되지 않음(승인 전 단계)
- 전파된 거래를 받은 노드는 각자 독립적으로 개별 검증(검증 1단계)
- 블록체인에 포함된 경우
- 블록체인의 특정 깊이에 도달한 경우. (깊을수록 신뢰도가 높음)
거래 신뢰도와 현실세계
- 소액 거래는 거래가 전파되고 있는것만 확인하고 정상 거래로 취급.
- 다음 블록 (최장 10분) 만들어질 때 까지 기다리기는 현실 세계와 맞지 않음
- 큰 거래는 일정한 깊이 이상 블록체인이 쌓였을 때 승인.
- 거래 당사자가 정할 수 있으며, 충분한 깊이에 이르면 채굴된 블록의 작업증명(POW) = 신뢰가 확보 된 것
- 판매자의 상품 제공 시점은 B가 결정함.
안전한 거래 규모
(이미지 출처: https://arxiv.org/pdf/1402.2009.pdf)
- 블록깊이가 1개인 경우, 해커가 전체의 40% 컴퓨팅 파워가 있으면 25BTC 거래 까지 안전하다고 봄.
- 블록깊이가 2개인 경우, 해커가 전체의 40% 컴퓨팅 파워가 있으면 54BTC 거래 까지 안전하다고 봄.
3.3.3 - 새 블록 검증
- 네트워크 상의 모든 노드가 새로운 블록을 독립적으로 검증함. -> 채굴 했다는것을 속이기 어려운 구조.
- 블록 헤더 해시는 목표 난이도 보다 작은지 검증
- 문법적으로 유효
- 타임스태프는 2시간 이내 등
3.3.4 - 블록 선택
- 가장 긴블록(=가장 난이도가 높은) 체인 선택.
- 새로운 블록을 받으면 이전 블록의 해시값을 확인
- 노드들은 3종류의 블록을 가지고 있음
- 메인 블록체인에 연결되어 있는 블록
- 메인 블록체인에서 분기를 만든 블록 : 블록이 경쟁적으로 만들어진 상태.
- 부모가 없는 블록 : 두개의 블록이 각자 짧은 시간내에 채굴되어 반대의 순서로 도착하는 경우 발생함
- 부모 블록이 도착하면 차례대로 연결되며 고아 블록 풀에서 없어짐.
- 가장 난이도가 높은 체인을 선택함으로써 모든 노드는 네트워크 전역의 합의를 이끌어 내고 일관된 상태로 수렴.
동시에 여러 노드가 채굴에 성공하는 경우(=블록 분기)
- 긴 블록 선호 정책, 시간이 지나면서 짧은 블록체인은 사라지게 됨
- 실제 깊이가 1인 분기는 1주일에 1번꼴로 발생하나 2인 경우는 없음
- 분기가 발생 할수 있기 때문에, 채굴 인센티브는 즉시 사용 불가능 100블록 이후에 사용 가능. 최종 1명만 지급
(이미지 출처: https://www.slideshare.net/skimaza/ss-57356762) - 참고) 짧은 블록체인에 포함되어 있던 거래는 블록 채굴자(생성자)가 다시 검증
블록 분기 예시
- 노드는 Mesh 네트워크, 노드간의 거리는 홉수 기반(지리적 위치X)
(이미지 출처: http://chimera.labs.oreilly.com/books/1234000001802/ch08.html#forks) (1) 전 세계의 노드는 블록 P(파란색)를 최상단으로 하는 블록체인을 가지고 있음. (2) 캐나다에서 빨간색 A라는 블록을 만들고, 호주에서 녹색 B라는 블록을 만들어 서로 전파를 한 상황. (3) 녹색 B를 전파받은 러시아가 자주색 X 블록을 만들게되고 전파함 (4) 짧은 블록체인 P-A는 파기되며, 녹색 P - B - X 블록이 메인 체인이됨
블록 생성주기가 10분인 이유
- 거래의 승인 시간(전파시간)과 분기가 발생할 확률 사이에서 절충한 결과.
- 블록생성 시간이 빠를수록 거래 처리 속도는 빨라지지만, 분기발생 가능성이 올라감.
블록의 확산 요인과 절차
- 자신의 이익(인센티브, 수수료)을 극대화 하는 활동
- 블록을 전파하지 않고 계속 본인의 깊이에서 채굴하면, 파기될 위험이 있음.
- 절차
- 채굴이 성공하면 즉시 이웃노드에게 블록 전송
- 각 노드는 새 블록을 전송받아 검증한 후 전파
- 각 노드는 새 블록을 자신의 블록체인 복사본에 추가
- 각 노드는 다음번 블록에 대한 채굴 시작
3.4 P2P 아키텍처
P2P의 장점
- 중앙 집중적인 관리 주체 없이 블록체인의 동작과 검증이 가능
- 피어가 많을수록 안전해지는 구조.
P2P 상의 노드의 종류
(이미지 출처: http://chimera.labs.oreilly.com/books/1234000001802/ch06.html#_the_extended_bitcoin_network)
- 다양한 형태로 존재, 아래 4가지 기능을 선택적으로 가지고 있음.
- 기능 B : 블록체인 전체를 가지고 있음, 거래 검증 가능
- 기능 N : 네트워크 라우팅 기능, 모든 노드 필수
- 기능 W : 지갑 기능이 있는 경우
- 기능 M : 채굴 기능이 있는 경우
- 라이트 웨이트 노드 : 단순지불검증 노드라고도 하며, 블록헤더만 가지고 있고, 거래는 전달안함.
- 스마트폰, 태블릿, 내장형 등 공간이나 전략 제한이 있는 기기에서 구동될수 있는 노드들.
- 참고) 지갑, 모바일 지갑, 채굴용으로 사용되는 별도의 프로토콜들이 있음, 스타트럼 프로토콜
- 스타트럼 프로토콜 : 스타트럼 채굴 노드와 비트코인 메인 네트워크를 연결하고, 스타트럼 프로토콜과 비트코인 P2P프로토콜을 연결함.
- https://bitnodes.21.co/
비트코인의 노드가 되기 위한 과정
(1) 최초 노드 검색시 SeedNode를 통해서 이웃노드와 연결(클라이언트에 오랫동안 잘 유지된 SeedNode List존재)
- 지리적 위치는 중요하지 않음.
(2) 하나 이상 연결이 성립되면 이웃들에게 노드 주소를 전달하여 모두 연결되게함.
- 무작위로 연결. 83333 포트, TCP 커넥션, 혹은 다른 프로토콜.
SPV노드의 취약점
- 거래를 스스로 검증할 수 없고, 거래의 존재 여부를 가짜 노드가 확인해줄 수 있는 취약점
- 특정거래를 검증하기 위해서 해당 거래를 검색 해야하기 때문에 프라이버시 노출됨.(주소 노출, 주소+거래 노출)
- 블룸 필터 기능으로 해결
- 검색중인 주소를 명확하게 밝히지 않고 질의를 하며 답변도 여러 답변을 받음, 확률기반
- 거래의 검증 정확도 & 프라이버시 tradeoff 관계
SPV에서 머클트리와 블룸필터를 사용하여 거래 검증
- 풀 블록은 거래를 검증할 수 있지만, 라이트웨이트노드(아허 SPV)는 자체검증이 어려워, 머클트리와 블룸 필터를 사용하여 검증함.
- 예) 어떤 특정 주소로 비트코인이 송금되는 것에 관여하는 SPV 노드가 있다고 가정 (1) SPV 노드는 본인이 관심 있는 주소들로 수신되는 거래들만 모니터링하기 위해 이웃 풀노드와의 연결 통로에 블룸 필터를 설치 (2) 이웃 노드가 블룸 필터의 조건을 만족시키는 거래를 확인하면, 블록 헤더와 머클경로를 전송 (3) SPV노드는 이 머클 경로를 이용해서 해당 거래를 블록에 연결하고, 거래가 블록에 포함되었는지 검증함 (4) 또한 블록 헤더를 이용해서 해당 블록이 블록체인에 연결되어 있는지 확인. (5) 즉 거래와 블록간, 블록과 블록체인간의 두종류가 조합되어 해당 거래가 블록체인에 기록된다는 것을 증명.
- 요약 : SPV노드가 블룸필터로 특정 패턴과 일치하는 거래를 제공해줄것을 요청함 -> 주변 SPV노드는 블룸필터를 받아서 본인에게 해당 거래가 있는지 확률적 계산을 함 -> 블룸 필터 조건을 만족하면, 블록 헤더와 머클경로 전달 -> 해당 거래가 있는지 확인.
참고) 블룸 필터
(이미지 출처: https://ko.wikipedia.org/wiki/블룸_필터)
- 블룸 필터는 20비트 크기의 비트 배열, 서로다른 해시함수의 3개를 가짐. (그림 기준)
- x를 해시하여 20비트크기의 배열에서 대응 하는 위치에 값을 1로 변경함, 총 3번.
- y, z도 동일하게 진행.
- 블룸필터 생성(=원소 추가) : 거래 출력값을 블룸필터에 넣어, 배열의 값을 0에서 1로 변경함
- 블룸필터 검색(=원소 검색) : 동일하게 해쉬를 돌리고 bit가 1인지 확인함,
- 하나의 bit라도 0이 표시되면 없다는 의미. 해쉬 후 1인경우 존재할 가능성이 있다는 의미.
- 블룸필터는 hash이기 때문에 0->1로 비트값이 누적될수 있음. -> 비트 배열이 작고, 해시함수가 적을수록 거래 검색 정확도는 떨어짐.
4. 위협 및 한계
- 양자 컴퓨터의 문제 해결 능력
- Full block노드의 인센티브 부재
- 중국의 채굴 능력 확대(집단 행동)
- 바이러스를 통한 분산 채굴
- 지갑 분실, 도난, 해킹.
- 처리속도 10분마다 1MB용량의 블록이 추가 생성되고, 1초당 7개의 거래 내역을 처리할 수 있음. (1MB에는 거래 1000~ 2500개 거래가 포함됨)
- 비자카드가 초당 5만6천개 처리.
- 용량을 늘면 검증및 전파 시간이 길어짐.
- 보안성과 신뢰성을 확보하는 과정이 저비용인가에 대한 논란
- 거래정보 검증을 위한 컴퓨팅 파워를 쓰는데, 채굴자만 인센티브가 있음.
- 컴퓨팅파워가 구글 전체 컴퓨팅 파워의 20배. 전기 요금은 1천5백만 달러. 전체적으로 봤을때 중앙집중형보다 비요이 클수 있다는 문제 제기 가능.
- 거버넌스 부재
- 생태계 형성과정에서, 관련 거버넌스, 가이드, 확산/전파를 담당하는 기구 부재.
- Pre-blockchain단계에서의 신뢰성 부재. 다음 블록에 거래가 기록되는 구조
- 사용자단의 해킹, 거래소의 해킹
5. 그 외 참고사항
5.1 비트코인 개인키 생성 과정
- 256bit 난수 생성 -> Private Key만들어짐 -> Elliptic Curve Multiplication(one way, 타원곡선곱셈함수) -> Public Key 만들어짐 -> Hash Function(one way) -> Bitcoin Address 만들어짐 (KeyKeyAddress 구조)
- 난수 생성시 암호학적으로 안전한 유사난수 생성기 사용 해야함 (CSPRNG)
- Private Key-> Elliptic Curve Multiplication 실제 과정은 NIST에서 개발한 secp256k1이라는 표준에 나와 있음.
- Public Key -> Bitcoin Addr의 실제 해쉬 과정은 SHA256 -> RIPED160 -> Base58Check
- 최종 구조
- Private Key : 256bit, 16진수 64글자, 경우에따라 Base58Check 인코딩 할수 있음
- Public Key : 520bit 16진수 13글자, 경우에따라 압축. 수학적 계산에 따라 x,y 좌표가 모두 포함되어 있음.
- Bitcoin Addr :Hash과정을 거쳐서 16진수 40글자, Base58Check에 인코딩으로 아래와 같은 형태가 최종.
- 예시) 1GwV7fPX97hmavc6iNrUZUogmjpLPrPFoE
5.2 51% 공격
- 해싱파워 중 다수 51%를 제어하고 있는 채굴자 집단이 비트코인을 공격 하는 경우.
- 블록체인과 이중지불 거래 내에서 의도적으로 분기를 만들어 해당 체인에 재수렴을 시행하는 시나리오.
- 이전에 승인된 블록에서 분기를 만들어 해당 체인에 재수렴을 시행함으로써 기승인 블록을 무효화 함.
- 예) A-> B에게 50BTC를 전달한 거래가 진행됨
- 해당 거래가 특정 블록에 포함 되자마자 악의적인 채굴자는 해당 블록의 높이 에서 다시 채굴하고, 조작한 거래를 포함시킴.
- 분기된 블록을 늘려나감으로써, 블록이 길어지게되고 결국 기존의 블록 파기와 함께, 거래는 없어지게됨.
- 큰 거래 금액일 수록 보호받기 위해서는 여러번의 승인이 이뤄진것을 기다려야함.
- HashRate가 현재는 기하급수적으로 증가함에따라, 51%를 장악하기는 현실적으로 어려움.
5.3 채굴과 해싱 경쟁
- 채굴에 사용하는 컴퓨팅 파워가 계속 올라가고 있음.
- 채굴을 위한 하드웨어 사용, CPU -> GPU -> FPGA -> ASIC
(이미지 출처: https://blockchain.info/ko/charts/hash-rate) - 현재는 얼마나 많은 칩을, 하나의 구조물안에 넣고 열과 적절한 전력을 공급할수 있는지 고려하는 단계
- 현재의 해싱 참여 척도 : 컴퓨팅파워에 들어가는 전기, 열 컨트롤 비용 < 비트코인의 가치
- 마이닝업체들이 컴퓨팅파워를 일반인에게 팔고 이익 쉐어함.
5.4 난스(카운터) 값의 고갈
- 최초 난스값을 바꿔가며 마이닝했지만, 해싱 속도가 빨라짐에 따라 난이도가 증가하게 되었고, 블록헤더의 난스값 2^32(4byte) 만큼 모두 해시를 해도 블록을 찾을수 없게됨. 현재는 코인베이스 거래에 일부 필드를 난스로 사용함.
비상 경보 방송 시스템
- 2013년 멀티블록 분기를 발생시킨 DB 버그 때 사용됨. 공개키 구조이기 때문에 서명을 통해 발송되며 조작되지 않음.
- 거의 사용되지 않음.
퍼블릭, 프라이빗 블록체인의 운영
- 대상 서비스가 기존에 존재하던 강력한 중개인을 대체하는 사업모델이면 퍼블릭 블록체인.
- 서비스의 목표 고객이 단일 기업 또는 상호 투명성을 중시하는 산업 컨소시엄이라면 프라이빗
관련 사례와 시사점 정리, NIA
그 외 관련 용어
비트코인 지갑
- 지갑 = { 디지털키, 비트코인주소, 디지털 서명 }, 사용자 로컬에 저장되는 작은 DB
- 디지털키 = { 공개키, 비밀키 }
- 공개키 = 계좌번호, 비트코인을 전송 받을 때 사용
- 비밀키 = PIN 번호, 비트코인을 소비 할 때 사용(서명), 출력 값에 개인이 서명 함.
하드 포크 vs 소프트 포크
- 버전 업그레이드를 의미
- Softfork : 신버전과 올드버전을 동시에 사용해도 문제가 없는 업그레이드.
- 채굴자들은 신버전으로 업그레이드 필요, 일반 유저는 불필요.
(이미지 출처: https://blockchain.info/ko/charts/hash-rate)
- 채굴자들은 신버전으로 업그레이드 필요, 일반 유저는 불필요.
- Hardfork : 블록 체인에 포크가 발생하기 때문에 반드시 업그레이드 필요함.
- 채굴자와 유저 모두 업그레이드 필요.
- 포크 이후 기존 비주류 블록체인이 도태되도록 함. 따라서 참여자의 합의가 필요하며 의견 수렴을 함.
- 예) 블록 거래 사이즈는 1MB인데, 2MB로 늘리려면 프로그램 번경이 필요하고 이는 하드포크로 함.

스크립트
- 잠금 스크립트와 해제 스크립트
- 잠금스크립트는 출력값에 존재하며, 공개키 혹은 비트코인 주소가 담겨 있음 = 스크립트펍키(ScriptPubKey)
- 해제스크립트는 입력값에 존재하며, 사용자의 지갑이 개인키로부터 생성한 디지털 서명을 담고 있음.
- 잠금 스크립트가 출력값에 놓아둔 조건을 "해결"하거나 충족시켜서 출력값이 소비될 수 있도록 하는 스크립트 = 스크립트시그(ScriptSig)
(이미지 출처:
(이미지 출처: