본문 바로가기
경제공부 시작/코인 공부

블록 체인 합의 알고리즘(Consensus Algorithm) (7가지 총 정리)

by 블랙스완 미니 2021. 11. 24.

블록체인-합의-알고리즘-정리
블록체인 기술 개념

블록체인 합의 알고리즘 (Consensus Algorithm)

- 일반적으로 알고 있는 정보 시스템(Information System)은 중앙 서버가 거래(Transaction)를 확정(Settlement) 짓는다. 하지만 블록체인은, 거래를 확정 지어줄 수 있는 하나의 중앙화 된 서버를 전제로 설계(Design)되지 않았다. 다수의 참가자가 거래를 확정 짓는 방식이 필요하다.

 

- 블록체인에서는 신원 위조 방지 메커니즘(Sybil Control Mechanism)과 합의 프로토콜(Consensus Protocol)에 의해 해결한다. 하나의 중앙화 된 서버가 아니라, 다수에 의해 거래가 확정되기 때문에, 블록체인을 탈중화된(Decentralized) 시스템 또는 합의(Consensus) 기반 네트워크라고 한다. 

 

- 가장 중요한 점은, 거래 확정의 참여자 중 악의적인 사용자가 있을 수 있다는 점이다. 주로 사용되는 신원 위조 방지 메커니즘과 컨센서스 프로토콜들이, 악의적인 사용자의 가능성을 견제하면서도, 신뢰할 수 있는 거래(Transsaction)를 보장할 것인가가 알고리즘의 이유다. 

1. 작업 증명 방식(PoW: Proof of Work)

 

- 작업 증명 방식(PoW)에 대해 제대로 이해하기 위해서는, 해시(Hash) 함수를 먼저 이해해야 한다. 해시 함수란, 어떤 길이의 데이터를 입력받아도, 고정된 길이의 데이터로 매핑해주는 단방향 함수이다. 해시 함수를 거쳐서 나온 값을 해시값(Hash Value)라고 하며, 입력값이 조금만 바껴도, 해시값이 크게 달라진다는 특징을 지닌다. 

 

- 단방향 함수라는건, 입력값을 통해, 해시값을 알아낼 순 있지만, 해시값을 통해 입력값을 알아낼 수 없음을 의미한다. 그래서 두 해시값이 다르면, 원래의 데이터도 다른데, 역은 성립하지 않는다. 이런 성질 때문에, 해시 함수는 각종 시스템의 암호화 인증 등에 많이 사용된다. 블록체인에서는 SHA-256(Secure Hash Algorithm) 해시 함수를 주로 사용한다. 

 

 

 

- 블록체인은 각 블록의 이전 해시값을 블록에 포함해서, 각 블록들이 체인처럼 이어진 형태를 말한다. 입력한 텍스트에 상관없이, 고정된 임의의 값을 생성해준다. 이전 해시값과 현재 블록의 해시값으로 이어지는 링크드 리스트의 구조를 지니는데, 여기에 블록을 계속 이어가려면, 마지막 블록(가장 최신)이 어떤 블록인지 알아야 연결이 가능하다. 

 

- 잘못 연결하면, 체인의 중간에 블록을 생성해버려, 체인의 분기(Fork)가 하나 더 생기는 상황이 발생한다. 블록체인에서는 마지막 블록이 어떤 것인지가 중요하고, 이것을 결정하기 위해서는 타임스탬프와 블록의 순서를 노드들끼리 공유해야 한다. 이것을 위해 고안된 메커니즘이 작업 증명(PoW) 방식이다. 

PoW 란?

- 각 블록은 0부터 시작하는 논스(Nonce)라는 임의의 수를 포함하고 있는데, 새로운 블록을 생성하려면, 논스값을 알아내야 한다. 해당 논스값을 추론할 수 있는 단서는, 해시 함수의 값으로 제시되는데, 해시값으로부터 원래의 입력값을 알아내는 것은 어려운 작업이다.

 

- 가능한 모든 논스값을 대입하고, 해시값을 대조하는 방식(Brunte Force)로으로 작업이 이루어지고, 이것을 가장 빨리 한 노드가 블록을 생성할 수 있는 권한을 얻는다. 주목할 것은, 작업 증명 방식은, 일정한 시간(블록 간격)이 걸리도록 설계되었다는 것이다.

 

- 예를 들어, 비트코인은 약 10분에 1개의 블록이 생성되도록 난이도가 자동으로 조정되고, 이더리움은 약 15초간의 지연이 생기도록 조정한다. 이런 지연 시간 덕분에, 동시에 블록이 생성되는 것을 막을 수 있고, 서로 다른 지역에서 동시에 블록이 생성되는 경우가 발생해도, 비교할 수 있다. 

 

- 비트코인과 이더리움의 경우, 체인 간 충돌 발생 시, 더 어려운 난이도를 풀어서, 생성된 블록이나 길이가 더 긴 체인을 선택하도록 되어 있다. 이를 나카모토 합의(Nakamoto Consensus)라 한다. 

 

 

 

- 작업 증명에서 논스를 알아내고, 새로운 블록 생성 결과를 다른 노드들에게 전파하는 과정에는 많은 컴퓨팅 파워(Hashrate)가 필요한데, 이에 대한 보상으로, 일정량의 가상화폐를 지급받는다. 이것을 가상화폐 채굴(Mining)이라 한다. 충돌 상황에서 한쪽이 선택되었다면, 채굴자(Miner)에 대한 보상문제는 갈린다. 

 

- 비트코인의 경우, 선택되지 않은 쪽은 보상이 지급되지 않는다. 여기서 생성된 블록을 두고, 비트코인은 고아 블록(Orphan Blocks)이라 한다. 채굴은 컴퓨팅 파워(Hashrate)에 의해 좌우되므로, 비트코인은 중앙화 되고, 전문화된 마이닝 풀이 다른 노드들보다 고아 블록을 생성하지 않을 확률이 높아진다. 

 

- 이더리움의 경우, 선택되지 않은 쪽에도 일부 보상을 지급한다. 선택되지 않은 블록을, 엉클 블록(Uncle Block)이라 한다. 컴퓨팅 파워가 조금 부족하더라도, 많은 사람들이 채굴에 참여해서 보상을 가져갈 수 있는 구조다. 쉽게 말해, 악의적인 사용자가 참여해도, 안전한 블록체인을 위해 여러 명의 컴퓨터 연산 능력을 활용하는 것이다.  

2. 지분 증명 방식 (PoS: Proof of Stake)

- 해당 가상화폐를 많이 가지고 있는 사람은, 자신이 보유한 가상화폐의 가치를 보존하기 위해, 악의적인 거래를 하지 않을 것이라는 가정(Assumption)하에 고안된 알고리즘이다. 지분을 가장 많이 가지고 있는 노드에게 블록 생성 권한이 주어진다. 작업 증명(PoW) 방식에 비해, 난이도 상승에 따른 전기료나 연산능력(Hash Power)의 소모가 매우 적다

 

- 전문적인 마이닝 풀에 의해, 중앙화 된 채굴 가능성은 적어지지만, 거래소 등 대량의 지분을 보유하고 있는 참가자들에게 중앙화 가능성은 존재한다. 채굴 과정에서, 지갑에 일정 가상화폐를 예치해두어야, 지분율 산정에 반영되므로, PoS기반 채굴의 경우, 블록 생성 참가에 대한 이자를 받는다는 느낌이 들 수 있다

 

- 이것을 PoS에서는 '채굴(Mining)'이라는 용어보다는 '주조(Minting)'라고 부르는 편이나, 혼용되고 있다. PoS 방식을 사용할 경우, 이자수익에 대한 법률적 해석에 따라, Security Token으로 구분될 수 있으므로, 규제에 민감한 비즈니스에서는 주의가 필요하다. 

3. 위임된 지분 증명 방식 (DPoS: Delegated Proof of Stake)

- 일정 이상의 지분을 가진, 소수의 대표 노드들에 의해 거래를 확정 짓는 방식으로, 위임된 지분 증명 방식(DPoS)이라 한다. 탈중앙화의 성격은 지니면서도, 빠른 거래 확정 속도를 확보하기 위해 고안된 방식이다. 선출된 소수의 대표 노드들은 많은 컴퓨팅과 네트워킹 파워를 제공하고, 그 보상으로 일정량의 가상화폐를 가져간다. 

 

- EOS는 21개의 대표 BP(Block Producer)에 의해 현재 블록이 생성되고 있으며, 이더리움과 마찬가지로 PoW기반에서 PoS로 전환될 예정이다. 

4. 비잔틴 장군 문제 (Byzabtine Generals' Problem)

- 악의적인 구성원이 포함되어 있을 때, 몇 % 의 신뢰할 만한 사람이 확보되어야 하고, 이들 간 어떻게 통신해야 하는지에 대한 규칙에 대한 문제이다. Lamport는 이 문제에 대해, 배반한 사람의 숫자가 3분의 1 보다 작아야 하고, 서로 간의 통신이 동시에 이뤄져야 한다고 서술하고 있다. 

 

- 악의적인 사용자가 3분의 1이 되는 순간, 제대로 된 블록인지 판단을 할 수 없다. 그래서 비잔틴 문제에서, 전체 참여자 수 N은 3f+1이어야 한다.(f는 악의적인 참여자) 이런 비잔틴 장군 문제를, 일반화한 것을, 시스템의 비잔틴 장애 허용(Byzantine Fault Tolerance)이라 한다. 

 

- 사람들은 모두 참여할 수 있고, 외부에 공개되는 퍼블릭 블록체인의 특성상, 악의적인 참가자가 네트워크 상에 참여해도, 정상적으로 동작할 수 있고, 그 결과를 신뢰할 수 있기를 원한다.

 

 

- 새로운 메인 넷 론칭 후 높은 TPS를 홍보하는 기업에게, 비잔틴 장군 문제를 어떻게 해결했냐는 질문은, 높은 속도를 위해 얼마나 검증 부분을 희생했냐는 질문과 같다. 

5. 프랙티컬 비잔틴 장애 허용(PBFT: Practical Byantine Fault Tolerance)

- PBFT는 전체 참가자 수 N=3f+1일 경우에도 정상 동작을 보장하는데, 이 식을 악의적인 참가자 수, 비잔틴 노드로 바꾸면 f=(N-1)/3의 악의적 사용자에 대해, 정상적인 동작을 보장한다. 예를 들어, 사용자가 총 7명인 경우 2명의 악의적인 사용자가 있더라도, 네트워크 전체의 신뢰성을 보장한다. 

 

- 이런 특성을 조금만 더 다른 시각으로 보면, 7명 중 5명이 같은 메시지를 보낸다면, 2명의 메시지는 확인하지 않아도, 네트워크를 신뢰할 수 있다는 얘기가 된다. 즉, 전체 노드를 다 체크하지 않더라도, 합의를 이룰 수 있는 것이다. 그래서 앞에 프랙티컬 Practical(실용적인)이란 수익어가 붙는다.

 

- 수식으로 하면, 전체 노드의 수 N=3f+1일 때, 2f+1만큼의 메시지가 같다면 나머지 메시지는 확인할 필요가 없다. 최초 클라이언트가 트랜잭션이 담긴 블록을, 인접한 하나의 노드에 보낸다(Request). 해당 노드는 리더 노드가 되고, 리더 노드는 자신이 받은 블록을, 다른 노드들에게 전파한다(Pre-prepare).

 

 

 

- 블록을 받은 노드들은 나머지 노드들로부터, 어떤 블록을 받았는지 확인하고(Prepare), 이를 토대로 해당 트랜잭션이 담긴 블록을 승인할지, 말지에 대한 결정을 보낸다(Commit). 이 과정을 통해, 최종적으로 블록이 승인되고, 트랜잭션이 실행된다(Reply).

 

- PBFT는 프라이빗 블록체인이나, 적은 수의 노드를 기반으로, 높은 성능을 내고자 하는, 퍼블릭 블록체인 프로젝트에 많이 도입되고 있다. 대표적인 예로, 프라이빗 블록체인 하이퍼 레저 프로젝트에서 사용한다. 

6. 방향성 비순환 그래프 (DAG: Directed Acyclic Graph)

- 방향성 비순환 그래프를 알기 위해서는, 비동기(Asynchronous) 프로그램의 실행 방법을 먼저 알아야 한다. 어떤 프로그램이 동기(Sync) 방식으로, 실행된다고 하는 것은, 코드 안에서 각 작업들이 순차적으로 실행되는 것을 의미한다. 

1) 잔고 체크
2) 외부 오라클을 통한 환율 정보 불러옴
3) 송금
4) 현재 잔액을 법정화폐(Fiat)로 바꿔 출력

- 이 프로그램이 실행되는 과정에서, 2번 외부 정보가 계속 안 불러져 온다면 어떻게 될까? 프로그램은 계속 멈춰 있고, 송금은 진행되지 않게 된다. 비동기(Async) 방식은 이런 상황에서 고안됐다. 프로그램을 순차적으로 실행하되, 실행이 완료되지 않아도, 일정 시간이 지나면, 다음 작업을 실행한다. 

 

- 마지막 작업을 마쳤을 때까지 완료되지 않은 작업이 있으면, 그 작업부터 다시 순차적으로 실행한다. 이렇게 하면, 어떤 작업 하나가 오래 걸린다고 해도, 그 작업으로 인해 다른 모든 작업을 못하는 불상사를 막을 수 있다. 사용자 입장에서는 법정화폐로 전환된 잔고 표시가 조금 늦을 뿐, 송금은 빠르게 이루어진다. 

 

 

- 대표적인 예로, Node.js의 경우 시간이 필요한 입출력 작업 등은 기본적으로 비동기로 처리한다. 채굴자가 이전 블록의 해시값을 자신의 블록에 담아, 새로운 블록을 생성하고, 생성한 내용을 전파시키는 블록체인과는 다르다.

 

-  방향성 비순환 그래프(DAG)는 거래를 하는 당사자가 순환 참조를 발생시키지 않는 방향으로, 거래를 검증하면서 그래프가 동시 다발적으로 확장된다. 기존 블록체인과는 다른 방식이며, 전체 네트워크 참여자, 혹은 전체 네트워크 참여자의 일정 비율을 검증받지 않기 때문에, DAG는 컴퓨터 공학의 그래프 Graph로 불린다. 

DAG의 대표적 검증 방식

- DAG의 대표적 검증 방식인 Tangle은 확률론을 따른다.  하나의 거래를 위해 2개의 임의거래를 검증한다고 가정했을 때, 거래의 숫자가 무수하게 많아지면, 확률적으로 신뢰할 수 있음을 전제로 하고 있다. 랜덤 샘플링으로 검증을 충분히 여러 번 하면, 전체 모집단을 검증하지 않더라도, 신뢰할 수 있다는 접근이다. 

 

- 거래자가 곧 검증자이므로, 네트워크 참여자가 많아질수록 성능이 개선되고, 시스템에 대한 신뢰도가 높아지는 특징이 있다. 이 과정에서 채굴자가 없는 모델이기 때문에, 대부분의 경우에는 전송 등에 수수료가 없거나 작은 편이다. 각 노드의 거래 검증이나, 처리 장애 발생이나, 지연이 발생하더라도, 다른 노드의 동작에 큰 영향을 주지 않는다. 

 

- IoT 기기들 간의 네트워크처럼, 제약된 컴퓨팅 파워와 네트워크 환경, 하드웨어 수준에서의 오작동을 항상 염두에 두어야 하는 경우라면, DAG는 블록체인의 대안이 될 수 있다. 실제로 아이오타(IoTA)에서 DAG를 활용하고 있고, 성능적인 이점 때문에 하이콘(Hycon) 등의 프로젝트에서도 사용하고 있다. 

7. 신원 위조 방지 메커니즘(Sybil Control Mechanism) 유로의 분류 

전통적 컴퓨터 사이언스 분야의 컨센서스 프로토콜 충족 조건 4가지 

1) 합의(Agreement): 모든 올바른 프로세스는 동일한 값에 동의(Agree) 해야 한다.

 

2) 약한 유효성(Weak validity): 각 올바른 프로세스에 대한 출력은, 올바른 프로세스의 입력을 전제로 한다.

 

3) 강한 유효성(Strong calidity): 모든 올바른 프로세스가 동일한 입력 값을 수신하면, 모두 해당 값을 출력해야 한다. 

 

4) 종료(Tremination): 모든 프로세스는 결국 반드시 출력 값을 결정해야 한다.  

 

 


관련 글: 토큰 용어 TGE와 IEO/IFO/IDO 특징 (+ 프라이빗 블록체인/스테이블 코인)

관련 글: ICO 과정 4단계 (개념 요약)

관련 글: 블록체인 기술 (초보 개념 정리)

 

 

댓글


top
bottom