합의알고리즘 : PoW, PoS, BFT

강나현·2022년 10월 3일
0

SKKRYPTO

목록 보기
3/9
post-thumbnail

블록체인의 가장 큰 특징은 제 3자의 중앙 통제 없이, 참여자 노드가 같은 장부를 공유하며 탈중앙화를 이룬다는 것이다. 그렇다면 탈중앙화된 블록체인 네트워크는 어떻게 오류나 의견 불일치 없이 안정적으로 유지될 수 있는가? 분산원장 시스템에서, 노드는 여러 합의알고리즘 중 하나를 활용해 일관된 장부를 보유할 수 있다. 작업증명, 지분증명, 비잔티움 장애 허용 등의 합의알고리즘을 분석하고, 합의 시 의사결정에 있어서 어떠한 알고리즘이 최선의 방식인지 고민해보고자 한다.

1. 작업증명

작업증명(Proff of Work, PoW)은 새로운 블록을 블록체인에 추가하는 작업을 완료했음을 증명하는 합의알고리즘이다. 작업증명을 위해서는, 블록헤더에 제시된 nonce 값을 만족하는 해시값을 복잡한 컴퓨터 연산을 통해 찾아야 한다. 작업증명에 활용되는 해시함수는 단방향 함수로, 함수값을 도출하는 것은 쉽지만 그 반대는 매우 어렵다는 특성이 있다. 블록을 채굴하려는 노드는 작업증명을 통해 가장 빨리 적절한 해시값을 찾고, 그 값을 다른 노드에게 브로드캐스트해야 한다. 그 다음 해시값을 브로드캐스트 받은 노드는 해시값을 함수에 넣어 블록헤더의 nonce와 동일한 값이 나오는지를 확인해 작업증명의 성공여부를 확인할 수 있다. 작업증명이 성공하여 체인에 새로운 블록이 연결되면, 채굴자는 채굴 보상으로 일정량의 암호화폐를 보상으로 받을 수 있다. 보상 지급에 대한 내용이 새로운 블록에 기록되는 첫번째 거래가 된다. 컴퓨터 성능이 발달하고 더 많은 노드가 작업증명 경쟁에 참여하며, 작업증명의 난이도 조건은 점차 높아지고 있다.

2. 지분증명

지분증명(Proof of Stake, PoS)은 암호화폐를 보유한 지분율에 비례하여 의사결정 권한을 주는, 주주총회에서의 의결 방식과 유사한 합의 알고리즘이다. 노드는 본인의 화폐 보유량에 따라 블록을 생성할 권한을 받을 수 있고, 더 많은 지분을 보유한 노드가 더 높은 확률로 더 짧은 시간 안에 블록을 생성할 권한을 가질 수 있다. 이때 블록 생성에는 작업증명과 같은 복잡한 계산 과정이 필요없다. 지분증명은 작업증명과 달리 코인에 따라 채택하고 있는 알고리즘의 세부 특성이 조금씩 다르다. 다음은 지분증명을 채택한 대표적인 코인이다. 제시된 코인 외에 이더리움도 머지 업데이트를 통해 작업증명에서 지분증명으로 의사결정 방식을 변경할 예정이다.

2.1. 카르다노(에이다)

카르다노는 차세대 블록체인 플랫폼으로, 카르다노 기반의 암호화폐를 에이다라고 부른다. 에이다는 채굴 과정 없이 우로보로스 지분증명을 통해 코인이 발행된다. 소수에 의한 지분증명 권한 독점을 막기 위해 고안된 우로보로스는 지분증명에 랜덤성을 더하였다.
우로보로스에는 에포크와 슬롯이 있는데, 에포크는 여러 슬롯으로 구성되며 슬롯마다 한명의 대표가 선정된다. 슬롯 내에서 최대 1개의 블록을 생성할 수 있는 대표는 일정량 이상의 에이다를 보유한 노드 중 임의로 선정된다. 즉, 에이다 보유량 조건을 충족한 사람은 코인 보유량에 관게없이 동등한 자격을 갖추며 많은 코인을 가졌다고 그만큼 많은 권한을 행사할 수는 없다.

2.2. 큐텀

큐텀은 중국의 이더리움이라고 불리는 암호화폐이다. 하이브리드 분산형 블록체인 플랫폼으로 정의되는 큐텀은 비트코인과 이더리움의 특성을 합쳐 두 암호화폐의 장단점을 보완하였다. 큐텀은 비트코인 작업증명의 느린 처리 속도를 보완하고, 이더리움의 스마트 컨트랙트 개념을 결합하였다. 비트코인과 이더리움의 데이터 저장 방식이 달라 두 암호화폐를 결합할 수 없다는 문제가 있었지만, 큐텀은 자체 개발한 AAL(Account Abstraction Layer) 기술로 이 문제를 해결하였다. 이는 UTXO 트랜잭션 출력을 사용해 스마트 컨트랙트를 생성하는 기술이다.

2.3. 피어코인

피어코인은 비트코인에서 파생된 코인으로 초기에는 작업증명 방식을 채택하였다. 그러나 이후 작업증명을 지분증명으로 대체하게 되었으며, 코인 연령이라는 개념을 지분증명에 도입하였다. 코인연령은 지분증명에서 코인 보유량을 계산할 때 코인의 보유기간을 함께 고려하는 것이다. 코인연령은 코인 보유량에 보유 기간을 곱하여 계산한다. 또한, 축적한 코인을 거래에 사용했다면 그 코인연령은 소비되어 기존 보유 기간이 인정되지 않는다. 예를들어, 100개의 코인을 100일 동안 보관했다면 10000일의 코인을 축적한 것이다. A와 B가 동일하게 300개의 코인을 보유하였을 때, A의 보유 기간이 100일이고 B의 보유 기간이 10일이라면 A가 B보다 10배 더 큰 블록 생성 권한을 가진다.

한편, 지분증명에서 파생된 위임지분증명(Delegated Proof of Stake, DPoS) 방식도 존재하는데, 이는 노드가 지분 보유량에 따라 투표권을 행사해 의결권을 가질 대표를 선정하는 방식이다. 이는 거래 내역을 승인할 노드가 소수로 한정되어 처리 속도가 빨라진다는 장점이 있지만, 오히려 소수가 전체 네트워크를 장악 하기 때문에 탈중앙화를 위해 고안되었던 블록체인의 기존 방향에 반하는 것이 아니냐는 의견이 존재한다.

3. 비잔티움 장애 허용

비잔티움 장애 허용(Bizantine Fault Tolerance, BFT)은 1982년에 제시된 논리적 딜레마에서 출발한 개념이다. 비잔티움의 장군은 공격과 후퇴 중 하나를 결정할 수 있으며, 결정을 번복할 수 없고 모든 장군이 동일한 결정을 동시에 해야 한다. 이때 각 장군은 서로를 완전히 신뢰하며 소통할 수 없는데, 장군이 다른 장군에게 보낸 메시지가 소실되거나, 다른 내용으로 뒤바뀔 수 있기 때문이다. 블록체인 네트워크의 비잔티움 장애 허용은 네트워크의 일부 노드가 고장나거나 악의적인 행동을 할 때에도 그 노드가 전체의 1/3을 넘지 않는다면 전체 네트워크가 원활하게 작동되도록 하는 것이다. 우리는 다양한 합의 알고리즘으로 비잔티움 장애 허용을 달성할 수 있다. 비잔틴 장애 허용 기반 알고리즘에는 다음과 같은 것들이 있다.

3.1. 프랙티컬 비잔틴 장애 허용

프랙티컬 비잔틴 장애 허용(PBFT)은 1982년 제안되었다. 이는 분산시스템이 약속된 행동을 하지 않는 비잔틴 노드가 존재할 수 있는 비동기 시스템일 때, 해당 시스템에 참여한 모든 노드가 합의할 수 있도록 한다. 프랙티컬 비잔틴 장애 허용은 두 번의 브로드캐스트로 비잔틴 노드가 부정한 내용을 보내도 다른 노드가 동일한 메시지를 수집해 합의를 이룰 수 있도록 하였다. 이는 다른 알고리즘이 동기 네트워크에서만 합의가 가능하다는 문제를 해결하였다는 점에서 의의가 있다.

<PBFT의 과정>
1. 리더가 클라이언트들의 요청을 수집하여 정렬하고 실행 결과와 함께 다른 노드들에 전파한다.
2. 리더의 메시지를 받은 노드들은 다른 노드들에서 받은 메시지를 다시 한번 나머지 노드들에 전파한다.
3. 모든 노드는 자신이 다른 노드에서 가장 많이 받은 같은 메시지(정족수 이상의)가 무엇인지 다른 노드들에 전파한다.
4. 앞의 과정이 끝나면 모든 노드는 정족수 이상이 동의한, 즉 합의를 이룬 같은 데이터를 가지게 된다.

3.2. 텐더민트

텐터민트(Tendermint)는 코스모스에서 사용하는 합의 알고리즘으로, PBFT를 공개, 비공개 블록체인에서 활용할 수 있도록 위임지분증명(DPOS)의 개념을 더해 발전시킨 것이다. 프랙티컬 비잔틴 장애 허용은 투표에서 각 노드가 모두 한 표씩을 행사하지만, 텐더민트는 지분에 따라 투표권이 주어진다. 이때, Locking 메커니즘으로 노드가 지분을 네트워크에 예치하도록 해 이중투표를 차단한다. 만약 블록체인 네트워크를 공격하려는 시도가 감지되면 해당 노드의 지분을 빼앗는데, 이는 공격 노드에 아무런 처벌을 하지 않는 기존 블록체인의 문제점(Nothing of Stake)를 보완했다.

4. 최선의 알고리즘에 대하여

작업증명은 블록 헤더에 제시된 조건에 따라 해시값을 구하는 연산을 수행해 작업을 완료했음을 증명하고, 지분증명은 노드가 보유한 지분량에 따라 의사결정 권한을 부여한다는 기본 규칙에 따라 다양한 알고리즘이 파생되어 활용된다. 그렇다면 더 나은 합의 알고리즘은 무엇이며, 앞으로의 블록체인 네트워크에는 어떤 방식을 채택해야 더 안정적인 합의를 이끌어낼 수 있을까?

지분증명에는 지분이 없으면 의사결정에 참여할 수 없어서 소수 노드에만 의결권이 집중될 수 있다는 우려가 있었다. 그러나 자본이 의결권 행사에 영향을 미친다는 점은 작업증명도 동일하다. 갈수록 작업증명의 연산 난도가 높아지며, 개인이 작업증명으로 블록을 생성하는 것은 불가능에 가까워졌다. 블록 채굴을 위해서는 고성능의 CPU를 계속해서 가동해야 한다. 즉 작업증명에는 CPU, CPU를 가동할 공간과 가동을 위한 에너지가 필요하다. 결국 지분증명과 작업증명 모두 블럭 생성에 있어서 자본이 필요하다는 점은 동일하다.

지분증명은 작업증명의 한계를 극복하였는데, 우선 지분증명을 채택하면 네트워크 공격이 더 어려워진다. 공격을 위해 51%의 통화를 모으는 것이 51%의 CPU 파워를 모으는 것보다 더 어렵기 때문이다. 또한, 지분증명은 복잡한 계산이 필요하지 않아 블록 생성에 시간과 에너지가 소모되지 않는다. 이는 전체 네트워크의 효율적인 운영을 가능하게 한다. 마지막으로, 작업증명은 연산 문제를 해결하여 블록을 생성한다는 기본 틀을 바꾸기 어렵다. 누군가 작업증명의 문제점을 지적해도 그 문제를 고칠 수 없다는 것이다. 그러나 지분증명은 위임지분증명, 우로보로스 지분증명 등 여러 방식이 파생되었고, 각 방식의 장단점을 보완하며 가장 합리적인 알고리즘을 찾을 수 있다.

따라서 공통적으로 자본이 요구되는 작업증명과 지분증명 중 더 안전하며, 효율적이며 변화에 유연하게 대처 가능한 지분증명이 더 나은 합의 알고리즘이라고 생각한다.

profile
SKKRYPTO Dev Team Leader

0개의 댓글