검수요청.png검수요청.png

"온라인증명"의 두 판 사이의 차이

해시넷
이동: 둘러보기, 검색
(구현의 방식)
(기술)
13번째 줄: 13번째 줄:
 
== 기술 ==
 
== 기술 ==
 
===트랜잭션 ===
 
===트랜잭션 ===
기존의 블록체인 트랜잭션은 코인베이스 트랜잭션과 일반적인 트랜잭션 두 가지로 나눌 수 있다. 일반적인 트랜잭션에는 전송자와 수신자가 존재하며, 전송자의 주소(공개키)는 입력부에, 수신자의 주소(공개키) 정보는 출력부에 들어간다. 전송자는 거래 내용을 개인키로 서명(암호화)하고,
+
기존의 [[블록체인]] [[트랜잭션]]은 코인베이스 트랜잭션과 일반적인 트랜잭션 두 가지로 나눌 수 있다. 일반적인 트랜잭션에는 전송자와 수신자가 존재하며, 전송자의 주소(공개키)는 입력부에, 수신자의 주소(공개키) 정보는 출력부에 들어간다. 전송자는 거래 내용을 개인키로 서명(암호화)하고,
 
수신자는 이를 전송자의 공개키로 해독하여 실제 자격 있는(해당 공개키의 개인키를 소유한)사람이 생성한 거래인지를 확인한다.
 
수신자는 이를 전송자의 공개키로 해독하여 실제 자격 있는(해당 공개키의 개인키를 소유한)사람이 생성한 거래인지를 확인한다.
이에 비해 Coinbase 트랜잭션(tx[0])은 채굴된 코인의 첫 번째 트랜잭션으로서 수신자만존재하므로 서명정보가 필요 없다. 그러나 PoO 블록에서는 별도로 정해진 검증자들만 블록을 생성할 수 있고 이에 대한 확인을 위해 서명정보가 필요하므로 CoinOnline 이라는 새로운 형태의 트랜잭션 구조를 갖는다.<ref name="큐시티"> 유영근, 〈[http://www.qcitycoin.org/img/tech-wihtepaper_kr.pdf blockchain기반 비즈니스 플랫폼 구현을 위한 Qcity]〉, 《큐시티코인》</ref>
+
이에 비해 Coinbase 트랜잭션(tx[0])은 채굴된 코인의 첫 번째 트랜잭션으로서 수신자만존재하므로 서명정보가 필요 없다. 그러나 PoO [[블록]]에서는 별도로 정해진 검증자들만 블록을 생성할 수 있고 이에 대한 확인을 위해 서명정보가 필요하므로 CoinOnline 이라는 새로운 형태의 트랜잭션 구조를 갖는다.<ref name="큐시티"> 유영근, 〈[http://www.qcitycoin.org/img/tech-wihtepaper_kr.pdf blockchain기반 비즈니스 플랫폼 구현을 위한 Qcity]〉, 《큐시티코인》</ref>
  
 
=== PoO 블록 ===
 
=== PoO 블록 ===

2019년 8월 8일 (목) 16:03 판

온라인증명(Proof of Online; PoO)은 국내 블록체인 서비스 개발 전문기업 ㈜이트라가 개발한 알고리즘으로, 새로운 블록의 전파과정에서 해당 블록이 온라인상에서 생성된 것인지 검증하는 과정을 추가하여 BWA를 원천적으로 차단하는 합의 알고리즘이다. 온라인증명 합의 알고리즘을 채택한 코인으로는 큐시티(Qcity)가 있다.

개요

비트코인의 합의 알고리즘 방식인 작업증명(PoW) 방식을 채택한 수많은 알트코인들이 51%공격의 일종인 BWA(Block Withholding Attack)에 의해 공격받아 약 2천만 달러를 탈취당했다. BWA는 전체의 51%에 해당하는 해시파워를 가진 노드가 온라인 블록에서 자금을 빼돌린 뒤 오프라인상에서 쌓은 긴 블록을 전파하여 이를 무효화하는 방식으로 해킹이 진행되는데, 이를 해결하기 위해서는 온라인에서 생성된 블록만이 유효한 것으로 받아 들여져야 했고, ㈜이트라는 이러한 문제를 해결하기 위해 해당 블록이 온라인상에서 생성된 것인지 검증할 수 있는 온라인증명 합의 알고리즘을 개발하였다. 유영근 대표는 기존 작업증명(PoW) 방식에 온라인증명(PoO)방식을 추가로 적용하면 비트코인 계열의 많은 알트코인들이 51%공격으로부터 안전할 수 있다고 설명하고, 직접 개발한 Qcity에 11월1일자로 적용하여 블록안정성 검토까지 마친 상태라고 밝혔다. 2018년 11월 12일 특허청으로부터 특허결정을 통보받았고, 현재 많은 알트코인들에 적용하여 블록체인에 대한 안정성을 높이는데 기여할 수 있도록 비트코인 커뮤니티 공론화를 거쳐 BIP에 제안 준비를 하고있다. [1]

특징

기존의 공격 방식 BWA은 블록 생성 결과를 주변 노드에 전파하지 않곡 오프라인 상태에 있다가, 수익을 얻은 후 온라인에 연결하여 기존의 거래들을 무산시키는 방식인데, 처음부터 오프라인 상태에서는 일정 길이 이상을 블록을 생성할 수 없게 한다는것이 온라인증명 합의 알고리즘의 핵심이다. 예를 들어, 블록타임이 1분이 Qcity의 경우 10번째에 해당하는 매 블록은(10,20,30) 검증자 권한을 가진 특별한 노드들만 생성할 수 있으며, 이를 PoO블록이라 부른다. 결과적으로 오프라인에서 공격을 시도하더라도 길이가 10인 블록 이내(10분 이내)에 자금회수가 어려우므로 공격 시도를 원천적으로 차단하게 되는 것이다. 만약, 검증자 노드가 모두 잠시라도 멈추는 상황이 발생하게 된다면 블록이 더 이상 생성되지 않는 상황이 발생할 수 있기 때문에, PoO블록 차례에서 기준 블록타임의 2배인 2분이 넘을 경우 일반 블록으로 대체 가능한 알고리즘을 포함하여 네트워크에 안정성을 최우선으로 하게끔 설계 되어 있다.

재단에서 운영하는 검증자 노드는, 신규 노드가 최초로 블록 정보를 탐색할 시작점을 안내하기 위해 재단이 운영하는 시드노드를 코어 소스에 하드코딩하여 관리하는 것과 동일한 방식으로 관리된다. 네트워크가 발전됨에 따라 초기 세팅된 검증자 목록이 변경되야 하는 상황이 생길 수 있으므로, 이후에 공동 서명을 통해 새로운 검증자를 추가하거나 자신의 검증자 권한을 이양할 수 있는 기능을 추가할 예정이라고 한다. 온라인증명 합의 알고리즘의 도입으로 기존 마이너들은 10번중 1번의 채굴 기회를 잃게 된다. 이에 대한 피해를 최소화하기 위해 PoO블록은 채굴 보상을 없애고 트랜잭션을 위한 최소한의 수수료만 보상으로 책정하였다. 일반 블록에서 채굴보상을 코인베이스 트랜잭션이라 하는데, PoO블록은 헤더에 검증자의 서명 정보를 담아야 하고 보상 구조가 다르기 때문에 이를 구별하여, 코인온라인 트랜잭션이라 칭한다. [2]

기술

트랜잭션

기존의 블록체인 트랜잭션은 코인베이스 트랜잭션과 일반적인 트랜잭션 두 가지로 나눌 수 있다. 일반적인 트랜잭션에는 전송자와 수신자가 존재하며, 전송자의 주소(공개키)는 입력부에, 수신자의 주소(공개키) 정보는 출력부에 들어간다. 전송자는 거래 내용을 개인키로 서명(암호화)하고, 수신자는 이를 전송자의 공개키로 해독하여 실제 자격 있는(해당 공개키의 개인키를 소유한)사람이 생성한 거래인지를 확인한다. 이에 비해 Coinbase 트랜잭션(tx[0])은 채굴된 코인의 첫 번째 트랜잭션으로서 수신자만존재하므로 서명정보가 필요 없다. 그러나 PoO 블록에서는 별도로 정해진 검증자들만 블록을 생성할 수 있고 이에 대한 확인을 위해 서명정보가 필요하므로 CoinOnline 이라는 새로운 형태의 트랜잭션 구조를 갖는다.[3]

PoO 블록

블록체인의 height % n == 0번째 블록을 PoO 블록이라 칭하며, 항상 특정 서명자가 서명한 블록을 포함하도록 한다. 큐시티는 n =10 으로 하여 매 10번째 블록 즉, xxx00 , xxx10, xxx20,… , xxx90 이 PoO 블록이 된다. 여기서 특정 서명자라 함은 해당 블록체인을 초기 설계하거나, 해당 블록체인을 운영하는 재단 또는 조직이 소유한 계정으로 검증자라 칭하며, 공개된 주소의 비밀키로 PoO 블록에 서명함으로써 해당 블록이 네트웍에 동기화되어 있음을 제공한다. 기타 모든 노드들은 PoO블록이 재단이 공개한 주소로 서명이 되었음을 확인하여, 해당 블록을 받아들인다.[3]

검증자 공개키

일반적인 블록체인 재단 등에서는 운영하는 노드들을 프로그램 소스에 반영하거나, SeedDns에 최우선적으로 등록하여, 네트워크상의 대부분의 노드들이 기본적으로 접속을 하고, 기타 네트워크를찾는 Seed 가 되게 하는 SeedNode 방식을 사용한다. 이 방식을 따라서 재단이 운영하는 검증자 공개키 목록을 프로그램 소스에 반영하고, 온라인증명을 위한 블록 추가 작업은 검증자 공개키에게만 서명 권한을 부여한다.[3]

운영의 방식

소스에 하드 코딩된 검증자 공개키가 설정된 노드인 검증자노드 vn[0], vn[1], vn[2], vn[3], vn[4] 가있고, 일반 채굴노드 n[0] ,n[1] ,n[2] ,n[3]이 있다고 가정하면 검증자노드와 채굴자노드는 모두 새로운 블록 생성되었다는 정보를 수신함과 동시에 다음 블록을 만들 준비를 시작한다. 블록의 첫 번째 트랜잭션은 생성된 블록에 대한 보상을 주는 코인베이스 트랜잭션이라 하는데, 자신을 수신자로 하여 생성하고, 블록에 실을 나머지 트랜잭션을 선택하여해쉬값을 산출하고 이 값이 목표값보다 작은 경우 블록 정보가 완성되어 배포할 수 있게 된다. 그러나, 새로 만들 블록이 10 번쨰 블록에 해당한다면 일반 채굴노드들은 자신을 수신자로하는코인베이스 트랜잭션을 생성할 수 없다. 반면, 검증자 노드 중 하나인 vn[0]가 블록을 생성한다면,코인베이스 트랜잭션의 출력부에 자신의 공개키를 넣고, 이 트랜잭션의 내용을 자신의 개인키로서명(암호화)한 정보를 블록의 헤더에 담는다. 이 정보를 담기 위해 VchBlockSig 라는필드를 추가했고 이 트랜잭션의 형태가 일반적인 코인베이스 트랜잭션과 다르므로 이를 코인온라인 트랜잭션이라 칭한다. 블록수신시 10번째 블록에 해당한다면 첫번째(코인온라인) 트랜잭션의 출력부에 기록된 공개키가검증자 노드 목록 중에 있는지 확인한 다음, 이 공개키로 VchBlockSig 의 내용을 복호화한 데이터가 코인온라인 트랜잭션의 정보와 일치하는지 확인함으로써 정당한 검증자가 서명한 PoO 블록임을 확인한다.

위와 같은 논리로 공격자는 %n으로 정의된 수 미만의 블록만 보유할 수 있으므로, 네트웍해시파워를 장악하더라도, 악의적인 이중지불 공격을 할 수 있는 충분한 시간을 확보할 수 없어진다. 모든 블록의 채굴자들은 재단이 운영하는 seed 노드와 연결이 되어 있음을해당블록으로서 확인할 수 있으며, 이러한 이유로 이 알고리즘의 이름을 온라인 증명(Proof OfOnline)이라 명명한다.[3]

채굴자와의 합의

PoO 블록의 서명을 재단이 함으로써 채굴자에게는 그만큼의 기회가 없어지므로, 적절한 %n값의 설정이 필요하다. (20블록마다 서명을 확인하도록 설정한 경우 채굴자는 1/20 만큼의 채굴의 기회가 사라진다. ). 위의 보상 방법으로 %n 블록에 대해서는 채굴보상을 지급하지 않음으로써 채굴자의 역차별을 제거한다.[3]

위험에 대한 대비

온라인이 되어 있음을 확인하는 공개키 주소의 제공은 기본적으로 하드 코딩된 주소를 이용하며, 추후 검증자가 추가되거나 권한의 이양이 필요한 경우, 검증자들에게만 주어진 권한을 이용하여 과반수 이상의 공동 서명을 통해 새로운 검증자를 추가하고, 이 내용은 각 노드의 클라이언트 내부 DB에 보관된다. 만약 재단에서 운영하는 노드가 중단되었을 경우 모든 블록체인은 해당 블록이 생성되기를 기대하며, 기타 PoW 블록을 받아들이지 않아, 전체 블록은 운영이 중단되는 상황이 만들어 질 수 있다. 이를 보완하기 위한 방법으로 %n 번째 블록이 기대 되어지는 블록타임의 2 배를 넘어설 경우(큐시티 기준 1 * 2 분) %n 번째 블록은 일반 블록을 받아 들일 수 있도록 설계되었다. 최악의 경우 검증자 노드 전체의 운영이 멈추더라도, 해당 블록체인은 지정된 블록의 채굴 시간이 늦어질 뿐 전체 운영의 장애가 발생하지는 않는다.[3]

구현의 방식

재단의 운영자는 검증자 공개키의 과반수가 넘는 노드에서 PoO 마이닝을 항상 유지해야 하며, 그 구현 방법은 다음과 같다. 일반적인 블록의 첫 번째 트랜잭션인 tx[0]는 마이닝에 대한 보상인 CoinBase 트랜잭션이나, PoO 블록의 tx[0]는 이를 변형한 형태이며 CoinOnline 트랜잭션이라 칭한다.

CoinBase CoinOnline
입력(0) size()== 1, prevout == null size()==1,prevout == null
출력 size()>=1 size()>=1 && size()<=3

출력[0]==empty() 출력[1].scriptPubkey== 제공된 공개키중 하나 출력[2].scriptPubkey = 새롭게 제공되어지는 공개키

Validation

Code

vin.size()==1

&&vin[0].prevout.IsNull()

vin().size()==1&&

&&vin[0].prevout.IsNull()

vout.size()>=1 &&

vout[0].isEmtpty() &&

vout.size()<=3 &&

vout[1].scriptPubKey == 제공된 공개키중하나&&

vout[1].nValue== Block.nFees&&

vout[2].scriptPubKey == isvalid()

&&vout[2].nValue== 0

  • (prevout : 이전 트랜잭션의 정보, vin : 입력부, vout : 출력부)[3]

활용

큐시티

큐시티(Qcity)는 전세계 어디에서나 즉시 전송, 지불, 교환이 가능하고, 중소상공인을 위한 실생활 암호화폐를 목표로 개발된 암호화폐이자, 블록체인 기반 비즈니스 플랫폼이다. 큐시티에는 큐코인이라는 거래 화폐가 있으며 큐코인은 Q플랫폼내 현지 법정통화 1:1 가치를 유지하고 암호화폐의 변동성 문제를 해결하며 중소상공인, 가맹정에 전송 지연문제를 해결한다. 이용자는 큐코인이 필요하면 큐시티를 통해 큐플랫폼에서 충전하며 가맹점은 큐플랫폼 자율 규약에 따른 공제 기금으로 큐시티를 예치한다.[4]

기존의 화폐는 10%이상의 변동이 수시로 발생하면 정상적인 거래가 어려워지고 현재 가사화폐의 경우에는 결제 확인을 위하여 1시간 정도를 소요해야 하는 문제가 제기되고 있다. 큐시티는 이러한 문제들을 큐코인을 통해 해결하고 있다. 거래소에서 거래되는 큐시티를 대신하여 실제로 유통에 사용되고 있는 역할을 하는 것이 큐코인이다. 1코인 1원의 고정된 가치로, 큐코인이 활발하게 사용되어서 수익이 나게 되면 기존에 발행되었던 큐시티의 일정량을 꾸준하게 소각함으로써 다른 큐시티의 가치가 상승하는 구조로 이루어져 있다. 단순히 교환수단으로 사용되기 때문에 거래소에서 거래는 되지 않으며 거래가 된다고 하더라고 가치가 고정되어 있기 때문에 절대 가격이 오르지 않는 코인이다. 또한, 중소상인들을 위한 코인이기 때문에 첫 시작을 카드매출이 있는 중소상점을 선택했고, 카드 매출이 발생하면 이를 담보로 상점의 매출금액을 해당되는 큐코인으로 즉시 지급하고, 몇일 뒤에 카드사로부터 대금이 지급될 때 자동으로 전환되는 즉시지급을 서비스로 진행중이다.[5]

각주

  1. 윤병찬 기자,〈국내 개발진이 최초로 제시한 51% 공격에 대한 대비책-PoO〉, 《헤럴드경제》, 2018-11-16
  2. Qcity,〈PoO(Proof Of Online)-51% attak에 맞설 솔루션〉, 《큐시티코인 블로그》, 2018-09-29
  3. 3.0 3.1 3.2 3.3 3.4 3.5 3.6 유영근, 〈blockchain기반 비즈니스 플랫폼 구현을 위한 Qcity〉, 《큐시티코인》
  4. 영보스,〈큐시티(QCITY)에 대해 알아보자〉, 《코인정보소》, 2018-06-15
  5. 짱짱이,〈가상화폐의 안전한 미래는 큐시티로!〉, 《네이버 블로그》, 2018-05-17

참고자료

같이보기


  검수요청.png검수요청.png 이 온라인증명 문서는 합의 알고리즘에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.