[플랫폼뉴스 김종현 칼럼니스트] 중앙집중시스템과 달리, 데이터를 분산해서 저장하는 분산시스템의 장점은 일부 시스템의 장애에도 시스템이 문제없이 운영되는 무장애 (Fault Tolerance) 운영을 보장하는 것이고, 동시에 분산시스템 간의 복제로 인해 시스템 위변조 공격을 어렵게 한다. 동일 데이터를 주요 노드에 전파하여, 일부 노드의 장애 시에도, 무중단 서비스를 제공하고, 각 노드 간의 비교를 통해 데이터의 무결성을 보장할 수 있다.
김종현 교수의 알기쉬운 비트코인
가상화폐와 비트코인
PoW 분산원장과 합의알고리즘 : 작업증명(PoW)과 지분증명(PoS)
|
▲ 사진=픽사베이 |
중앙에서 통제 및 관리하는 주체가 없는 탈중앙화 시스템, 즉, 네트워크 참여자 스스로 운영하는 것을 가능하게 해주는 솔루션이 블록체인(Blockchain) 기술이다. 블록체인의 핵심 기술 중의 하나인 분산원장(Distributed Ledger)은 거래내역을 모두 각각의 블록에 기록하고, 이 블록들이 서로 연결되어 있어서, 일부 블록의 내용을 위변조 하는 것이 원천적으로 불가능하도록 설계되어 있다.
비트코인은 블록체인 기반의 분산원장기술을 적용하여, 탈중앙화를 추구한다. 개인 간의 금전이체 거래는 은행의 전산센터에 있는 IT시스템에 원장(Ledger)이라는 거래장부에 기록하고, 거래내용의 진위여부와 보안에 대해서 은행이 모든 책임을 가지고 관리한다. 이체거래를 위한 시스템 구축과 관리비용을 위해, 은행이 이체 건 별 수수료를 받아서 운영한다. 하지만, 비트코인은 은행과 같은 금융회사가 없는 화폐 운영을 기본으로 하고 있다. 거래를 중개하는 은행도 없고, 전산센터와 중앙관리 시스템도 없는 P2P(Peer to Peer)기반 자율시스템이다. 개인(Peer)과 개인 간에 발생한 거래를 P2P 기반 비트코인 네트워크에 저장하는 데, 이 때 발생하는 거래내역을 관리하기 위해, 각 개인이 동일한 원장을 가지고 있다.
|
▲ 사진=픽사베이 |
은행과 같은 중앙관리자 없이, 개개인이 참여하는 체계가 스스로 운영되기 위해서는 누군가가 거래기록을 분산원장에 저장해야 하고, 그것도 빠짐없이 거래기록을 포함시켜야 하는 데, 어떻게 자발적으로 하게 할 수 있을까? 가상화폐 중에서 비트코인은 채굴(Mining) 이라는 개념을 만들었다. 10분마다 한번씩 비트코인이 채굴된 후, 채굴자가 10분동안 발생한 거래 내용을 새로운 블록에 기록한다. 이 블록이 전세계에 흩어져 있는 각 노드(Node)에 순차적으로 전파되고, 기존의 블록체인(분산원장)에 추가적으로 연결된다.
각 개인이 동일한 원장을 가지고 있기 때문에, 일부 개인의 분산된 원장이 위조된다 하더라도, 나머지 장부와의 비교를 통해 원장의 진위를 파악할 수 있기 때문에 장부의 위변조가 원천적으로 불가능하다. 중앙시스템이 있을 때보다 각 개인이 동일한 장부를 분산해서 가지고 있어서, 장부의 위변조 방지가 더욱 강화되는 개념이 분산장부시스템이다.
중앙집중 시스템에 비해, 분산장부는 오히려 보안 강화 뿐만 아니라 보안비용 절감효과까지 얻을 수 있다. 정보가 중앙의 저장소 한 곳에 집중되어 있는 중앙시스템의 경우, 외부 해킹의 집중공격 대상이 되기 때문에, 보안에 많은 비용이 소요된다. 하지만, 분산장부는 각 개인이 복제된 분산장부를 동일하게 가지고 있어서, 대다수의 장부를 위조하지 않는 이상 해킹이 불가하다. 분산장부의 51% 이상을 위변조 하지 못하면, 해킹에 의한 장부조작이 불가능하므로, 보안장비와 보안솔루션에 대한 비용이 상대적으로 필요치 않게된다. 동시에, 대량의 거래데이터를 한 곳에 관리기 위해 필요한 대형시스템도 관리비용도 절감할 수 있어, 시스템비용도 상대적으로 저렴하다.
|
▲ 사진=픽사베이 |
분산장부는 일단 정확한 정보가 기록되면, 연결된 체인에 의해 위변조가 거의 불가능하지만, 장부에 처음 기록되는 내용의 진위에 대한 검증이 필요하다. 이것이 비잔틴 장군의 문제 (Byzantine Generals Problem)로써, 분산 네트워크에 기록하는 데이터의 진위로 인해 발생하는 문제이다. 분산 네트워크 문제는 분산 컴퓨팅의 대가 Leslie Lamport의논문(1982, https://dl.acm.org/citation.cfm?doid=357172.357176) 에서 비잔틴 장군의 문제 (B에 대해 악의적인 노드가 분산 시스템에 참여하는 상황을 모델링하면서 언급되었다. 비잔틴 시대에 각 군영 사이의 연락병 중에서 배신자가 공격시간에 대한 잘못된 정보를 퍼뜨려서, 각 군영이 동시에 공격하지 못할 위험이다. 상호통신검증이 어려울 경우, 공격시간 동기화를 위한 수단이 필요한데, 전달된 메시지의 진위여부를 확인하기 위한 수단으로 개발된 방안이 비잔틴 장애방지 (Byzantine Fault Tolerance) 이다. 그리고, 이 BFT를 실질적으로 구현한 알고리즘이 PBFT (Pratical Byzantine Fault Tolerance) 알고리즘이다.
PBFT는 Hyperledger Fabric의 Orderer서비스, R3 Corda의 Notary와 같은 프라이빗 블록체인에 적용된다. 비정상 비잔틴 노드가 있는 비동기 분산시스템에 모든 노드가 성공적으로 합의하는 알고리즘으로, 메시지를 각 노드에 2번 전송한다. 비정상 비잔틴 노드의 개수가 n 일때, 3n+1 개의 노드만 있으면, 노드에 2번의 합의데이터를 전송 하여 비잔틴장애를 극복한다. PBFT 프로세스는 Pre-Prepare à Prepare à Commit 순으로 진행된다.
Proposer의 Proposal (Prepare request)에 대해 다수의 Acceptor의 Prepare Response를 획득한 Proposer가 지배하는 Paxos Consensus 와 리더 유고 시, 를 다시 선출하는 Raft Consensus 를 응용한다. PBFT는 각 노드가 한 번씩 투표를 하는 방식으로, 가장 많은 투표를 받은 블록을 승인한다. Leader 노드 (Primary 노드)는 클라이언트의 요청 요청을 모아서 순서를 정렬하고, 기록하고, 다른 노드에 전송한다. 리더가 전파한 메시지를 받은 노드는 나머지 노드에 전파한다. 모든 노드는 다른 노드에서 가장 많이 받은 메시지(정족수 이상의)를 다른 노드에 전파한다. 모든 노드들은 정족수 이상이 합의를 이룬 동일 데이터를 보관한다. PBFT는 2번의 브로드캐스트 과정을 통해 비잔틴 리더나 검증 노드가 네트워크 분기를 위해 임의의 메시지를 보내는 지 검증한다.
Practical Byzantine Fault Tolerance, Miguel Castro and Barbara Liskov, https://www.usenix.org/legacy/events/osdi99/full_papers/castro/castro_html/castro.html
PBFT는 메시지를 2번 보내는 속성으로 인해, 네트워크 통신량이 많아지는 단점이 있다. 분산시스템의 원리가 구현된 가상화폐의 분산원장은 분산네트워크에 참여한 참여자들의 합의 알고리즘에 의해 기록되는 데이터를 자율적으로 검증한다. 블록체인, 측, 분산시스템을 도입한 가상화폐에서는 거래 발생 후, 생성된 블록에 포함될 거래의 정상 여부를 검증노드가 확인하거나, 신규 블록(거래)을 전달받은 참가자들 스스로 해당 블록(거래)을 검증할 수 있다.
|
▲ photo _pixabay |
블록체인 기반 가상화폐에서 사용하는 합의 알고리즘으로 대표적인 것이 작업증명(PoW, Proof of Work)과 지분증명(PoS, Proof of Stake)이다. PoW는 비트코인, 이더리움 등의 초기 가상화폐에서 채택한 합의알고리즘이고, PoS는 이더리움 기반 토큰 DAO (Decentralized Autonomous Organization), Qtum, Cardano에서 적용된 합의알고리즘이다. PoS는 가상화폐의 보유량으로, PoW는 하드웨어(채굴기)의 연산능력으로, 합의에 대한 의사결정권을 부여받는 방식 등이다. 이 외에도 위임 지분증명 (DPoS, Delegated Proof of Stake), Tendermint (PBFT와 DPoS 혼합), LFT (Loop Fault Tolerance), PoET (Proof of Elapsed Time), 영지식증명 (Zero Knowledge Proof), 확장증명(PoX, Proof of eXpansion)과 같은 다양한 합의알고리즘이 있다.
비트코인은 각 노드에 블록을 생성할 권리를 공평하게 부여하고, 각 노드의 계산역량으로 합의 참여와 결정권을 결정된다. 비트코인은 앞에서 설명한 채굴을 위해 대량의 계산이 필요한 해시캐시 문제를 푸는 일련의 과정이 작업증명(PoW)이다. 이 때 소요되는 컴퓨팅 파워 (Computing Power)는 유효한 블록을 결정할 수 있는 작업증명 (PoW, Proof of Work)의 원천이 된다. 우월한 컴퓨팅 파워를 가진 노드가 해시캐시 문제를 풀면, 이것이 작업증명으로 인정되어 채굴자가 된다. 채굴자는 발생한 거래를 검증하고, 새로운 블록에 담아서, 해당블록을 블록체인에 연결할 수 있는 권한을 부여받는다.
비트코인의 합의 알고리즘으로 채택한 작업증명(PoW)은 지나친 컴퓨팅 파워를 요구한다. "The Longest chain Wins" 룰 적용을 위한 최소한의 시간 (최대 1시간)동안 블록의 확정이 지연되기도 한다. 이는 각 노드가 블록을 생성하면서, 분기된 블록이 경쟁을 하는 도중, 경쟁의 결과를 시간(현재는 최대 5개 블록이 생성되는 시간)이 지나야, 즉 어떤 분기블록이 더 긴지에 대한 경쟁결과를 알 수 있기 때문에, 순간의 차이로 작업증명에서 패배한 사실이 나중에야 확정 된다. 블록경쟁에서 패배하고, 폐기된 고아블록 (Stale block)에 사용된 계산은 에너지의 낭비를 초래한다. 또한 블록이 채굴되는 10분 동안 쌓인 거래가 블록의 크기(1MB)를 넘어가면, 10분이 지나도 분산장부(블록체인)에 반영될 수 없다. 이러한 한계를 극복하고자 개발된 것이 지분증명으로 불리는 PoS (Proof of Stake)로써, PoW의 대안으로 등장한 합의알고리즘 중의 하나이다.
|
▲ 사진=픽사베이 |
지분증명 (PoS)은 보유화폐량(Stake) 또는 알고리즘에 의해 계산된 가중치에 의한 지분량으로 합의하는 알고리즘이다. PoW의 에너지 낭비 문제와 Nothing at stake 문제 (악의적인 fork에 대비해 모든 체인에 전송)를 해결할 수 있다.
PoW 방식에서 Full node는 전체 블록 거래내역을 모두 저장하는 반면, PoS 방식은 보유한 코인거래 내역이 담긴 블록만 저장하면 된다. 코인 거래 시에 거래 이력 확인을 요청하면,각 지갑에서 마이닝을 담당할 때, 보유 코인이 많을 수록 검증을 위한 해싱 대상 블록이 적기 때문에, 해싱작업시간이 단축되어, 블록생성에 유리하다. POS로 수익을 얻기 위해서는 마스터노드를 구축하고, 상당수의 코인을 지분경쟁을 위해 Lock 해두고, 컴퓨터를 지속적으로 켜두어야 하는 단점이 있다. 이에 대한 대안으로 (Delegate Proof of Stake) 방식이 개발되었다.
DPoS (Delegate Proof of Stake) 방식은 코인을 위임(delegate)하고, 수익을 배분 받는다. DPoS는 일정 지분(화폐 보유량)을 가진 모든 노드가 블록생성과 검증에 참여하는 PoS와 달리, 매번 각자의 지분을 위임하여 선출된 상위노드 인 Delegate(대표자) 만이 블록 생성에 참가하고, 상위 노드 수가 적기 때문에 합의 시간과 비용절감이 가능하다. 블록생성에 참여하는 상위노드의 수는 EOS는 21명, Steemit은 20명, Bitshare는 101명으로 설정한다.
|
▲ 사진=픽사베이 |
PoET (Proof of Elapsed Time) 방식은 하이퍼레저(Hyperledger)의 Sawtooth LAKE에서 채택한 방식으로, 인텔 CPU에서 생성하는 데이터를 통해 합의하는 알고리즘을 사용한다. 모든 validator가 enclave(a trusted function)로부터 대기시간(wait time)을 요청하고, 특정거래블록에 최단 대기시간을 받는 validator가 리더로 선정된다. 복잡한 리더선정문제와 리더의 특정노드 요청 거부를 위해 Spinning 기법을 도입하고, 리더선정과 합의투표 메시지를 통합한다.
영지식증명 (Zero Knowledge Proof)은 Zerocoin (Zcash)에 적용되는 합의알고리즘으로, 상대방에게 사실의 증명에 관한 정보를 전혀 주지 않고, 정보를 알고 있음을 증명하는 방법이다. 복잡한 단계를 거치는 과정(Protocol)을 통과하는 문제에서, 각 단계를 통과하며, 그에 필요한 지식을 활용한 사실을 보여주며, 해당 과정의 건전성, 검증성, 신뢰성을 보장하기 위해 개발된 알고리즘이다. 자신이 아는 비밀암호를 공개하지 않고, 행위를 반복하여 자신이 암호를 아는 것을 증명하는 것이다.
국내 암호화폐 KBIDC의 스타크로는 사용자들이 이메일이나 메신저, 게임 등을 하면서 검증을 하는 확장증명(PoX, Proof of eXpansion)을 채택한다. 확장 증명이란 사람 사이의 관계를 통해, 서로 증명하는 방식으로, 거래소에서 암호화폐를 사는 방식 뿐 아니라 스타크로 플랫폼에서 메신저를 사용하는 것만으로 보상이 이뤄지고, 추천인(Referral) 제도를 도입해 알고리즘 자체에 확장성을 부여한다. 거래를 통해 증명이 확인되고, 이를 공정한 분배와 보상과 연계하여, 선불카드 형태의 가상화폐를 만들고, 스마트폰에서 충전 및 결제할 수 있다. 중소기업이나 소상공인의 판매시점관리시스템(POS)와 연결해서, 가맹점에서 지급하는 신용카드 결제 수수료를 절감하고자 하는 데, 이용된다.
현)아주대학교 사이버보안학과 부교수
학력
* 서울대 공학 석사
* KAIST 경영대학원 최고경영자 전략과정(AIM)
경력
현)한국핀테크연합회 블록체인검증위원장
현)개인정보보호위원회 제도발전 전문위원
현)산업인력공단 NCS 개발 및 심의위원
활동
* 2015 금융위원회 공로상 '금융위원장상' 수상
* 2015 K-ICT 인터넷 대상 '국무총리상' 수상
* 2014 정보보호의 날 '미래부장관상' 수상
플랫폼뉴스
김종현
girasong@naver.com
김종현의 기사 더보기
저작권자 ⓒ 플랫폼뉴스, 무단 전재 및 재배포 금지