• 본 게시글은 K-MOOC 묶음강좌 '블록체인 암호화폐:입문부터 심화까지' 강의를 수강하고 공부하며 정리한 내용입니다.

분산 합의

블록체인 네트워크는 블록을 체인 형태의 연결되어 있는 분산 데이터 환경에 저장하였습니다. 그럼 블록을 생성할 때 어떤 노드에서 생성되는 블록을 체인에 연결해야 할까요? 이것은 블록체인에서 매우 중요한 주제이고, 이것을 분산 합의라고 합니다. 탈중앙화 시스템에서는 결정을 내려줄 주체가 없기 때문에, 분산 시스템에서 모두가 동일한 상태를 가지고 있을 수 있도록 하기 위해서 분산 합의는 꼭 필요합니다.

분산 합의(Consensus Algorithm)

블록체인 네트워크에서 어떤 참여자에게 블록을 생성할 권한을 주느냐 결정하는 것

성공적인 분산합의의 요구조건

분산 합의가 성공적으로 수행되기 위해서는 다음과 같은 요구 조건이 필요합니다.

  • 올바른 참가자들은 모두에 의해 같은 값으로 결정을 내리면서 합의과정이 끝나야 합니다.
  • 합의의 결과 결정된 값은 임의의 값이 될 수 없고 적어도 하나의 올바른 참가자에 의해서 제안된 값이어야 합니다.

이 때, 올바른 참가자는 블록체인 네트워크에 정상적으로 기여하며 악의적인 공격을 하지 않는 참가자를 의미합니다.

분산 합의 시스템의 기술적 문제점

분산 합의 시스템에는 다음과 같은 기술적 문제점들이 있습니다.

  • 노드가 제거되거나 악의적일 수 있습니다.
  • P2P 시스템이지만 모든 노드가 서로 연결되어 있지 않으면 네트워크가 불안전합니다.
  • 인터넷 연결상태가 좋지 않으면 통신실패 상태가 될 가능성이 있습니다.
  • 모든 데이터를 관리하는 데이터 센터가 없으므로 통신에서 지연이 생길 수 있습니다.
  • 네트워크 지연으로 인해 글로벌 시간이라는 개념이 존재하지 않습니다. 따라서 단순히 타임스탬프에 근거하여 이벤트의 순서를 합의하는 것은 불가능합니다.

따라서 분산 합의 시스템에서는 이러한 문제점들을 다양한 알고리즘을 통해 보완하고 해결하고 있습니다.

분산 합의 알고리즘의 종류

위에서 말한 문제점들을 해결하기 위한 다양한 합의 알고리즘이 존재하고 있고, 블록체인 네트워크는 아래와 같은 합의 알고리즘 중 하나를 선택하여 사용합니다.

  • 작업증명(PoW)
    목표값 이하의 해시를 찾는 과정을 무수히 반복하여 해당 작업에 참여했음을 증명하는 방식
  • 지분증명(PoS)
    암호화폐를 보유하고 있는 지분율에 비례하여 의사결정 권한을 주는 방식
  • 위임증명(DPoS)
    암호화폐의 소유자들이 각자의 지분율에 비례하여 투표권을 행사하여 자신의 대표자를 선정하고, 이 대표자들끼리 합의하여 의사결정을 내리는 방식
  • 비잔틴 장애 허용을 이용하는것(PBFT)
    기본적인 블록체인 합의 알고리즘인 BFT를 확장한 형태

작업증명(Proof of Work)

사토시 나카모토의 비트코인에 대한 이야기를 담은 논문에서 처음으로 제안한 비잔틴 합의 알고리즘으로, 블록 내에 포함되어있는 값(nonce)을 0부터 1씩 증가시키면서 해시 함수에 넣고 해시함수의 출력이 목표값(Difficulty)보다 작은 값이 나오면 채굴에 성공하는 알고리즘 입니다. 모든 노드가 동시에 블록을 만들 수 없게 하기 위해서 이러한 알고리즘을 사용합니다.

비트코인 블록의 헤더 속에는 Difficulty와 Nonce 데이터가 설정되어 있습니다. 블록의 채굴 속도에 따라서 평균 10분마다 1개의 블록이 생성되도록 Difficulty를 조절합니다. 이 때 동시에 2개 이상의 블록이 생성되면, 그 블록들은 그 다음 블록을 생성하여 가장 긴 체인을 메인 체인으로 선택하여 사용하는데 보통 6개의 블록이 생성되기 전에 보통 종료되고 이것을 '6 confirmation'이라 부릅니다. 이는 거래가 포함된 블록 이후 5개 블록이 더 생기면 해당 트랜잭션이 완전하게 거래가 성사되었음을 의미합니다.

작업증명 알고리즘은 글로벌 규모의 완전히 오픈된 네트워크에서 운영할 수 있는 알고리즘입니다.

작업증명의 장점

  • 강력한 보안성을 바탕으로 서비스가 남용되는 것을 쉽게 방지할 수 있습니다.

작업증명의 단점

  • 속도가 느립니다.
  • 수학적 계산을 위해 컴퓨팅 파워를 많이 사용하여 에너지가 무의미하게 많이 소비되어 자원이 낭비됩니다.
  • 컴퓨팅 파워가 큰 채굴자의 영향력이 커져 채굴자끼리의 단합을 주의해야 합니다.

지분증명(Proof of Stake) 및 위임지분증명(Delegated Proof of Stake)

위에서 살펴보았던 작업증명 알고리즘(PoW)에는 여러가지 문제점이 있고, 이러한 문제점을 해결하기위해 지분증명 알고리즘(PoS)이 개발되었습니다.

지분증명(Proof of Stake)

지분증명 알고리즘은 소유한 암호화페의 양에 따라서 블록을 생성할 권한을 주는 알고리즘 입니다. 채굴이 일어나지 않으므로 채굴자가 없고, 대신 검증자가 존재합니다. 얼마의 암호화폐 지분을 Staking 했냐에 따라 검증자가 선택되고, 더 많은 지분을 보유하고 있을수록 검증자로 선택될 확률이 높아집니다. 이더리움은 작업증명 알고리즘(PoW)의 문제점을 해결하기 위해서 합의 알고리즘을 지분증명 알고리즘(PoS)로 변경하는 중에 있습니다.

지분증명의 장점

  • 블록생성을 위해서 많은 컴퓨팅 파워를 소모할 필요가 없으므로 에너지 비용이 절감됩니다.
  • 지분에 비례하여 블록생성의 권한을 얻어 중앙화 위험이 비교적 감소하게 됩니다.
  • 최종성을 부여하여 이미 체인에 연결된 블록들이 변경되기 힘들게 만듭니다.
  • 공격자의 악의적인 행동이 발각되면 모든 자산을 0으로 만드는 패널티를 부여하여 공격이 일어나지 못하도록 예방할 수 있습니다.

지분증명의 단점

  • 모든 참여자들이 이자를 받기 위해 코인을 보유하기만 하여 유통량이 감소할 수 있습니다.
  • 보안성에 대해 확신할 수 없습니다.

위임지분증명(Delegated Proof of Stake)

위임 지분증명 알고리즘은 지분증명 알고리즘을 보완하여 나타난 알고리즘 입니다. 위임지분증명 알고리즘은 지분증명 알고리즘과 마찬가지로 지분으로 블록을 생성할 권한을 주지만 위임된 몇몇의 참여자만 생성할 수 있도록 제안된 알고리즘입니다.

네트워크의 참여자들은 자신이 가진 지분을 이용하여 블록 생성을 위한 투표를 합니다. 이 때, 네트워크의 검증자 수를 제한하여 높은 수준의 확장성을 제공할 수 있는 알고리즘이 위임지분증명 알고리즘 입니다. 검증자의 수는 각각의 블록체인마다 다릅니다.

BFT & PBFT

합의 알고리즘이 네트워크에서 통용되기 위해서는 Safety와 Liveness라는 특성을 가지고 있어야 합니다.

Safety
노드간 합의가 발생했다면, 어느 노드가 접근하든 그 값은 동일해야 한다는 특성
블록체인에서의 finality와 동일한 개념으로 생각할 수 있음

Liveness
합의 대상에 문제가 없다면 네트워크 내에서 반드시 합의가 이루어진다는 특성

FLP Impossibility

하지만 비동기 네트워크에서는 Safety와 Liveness를 모두 완벽히 만족하는, 즉 합의 문제를 완벽히 해결할 수 있는 분산 알고리즘이 없습니다. 따라서 이러한 문제를 비잔틴 장애 허용을 통해 해결합니다. 그럼 비잔틴 장애 허용은 무엇일까요? 비잔틴 장애 허용에 대해 알아보기 이전에 비잔틴 장군 문제에 대해 살펴봅시다.

비잔틴 장군 문제

비잔틴 장군 문제는 1982년 래슬리 램포트와 마샬피즈가 함께 쓴 논문에서 제시된 논리적 딜레마입니다. 비잔티움의 장군들이 차후의 행동을 합의하려 할 때, 발생할 수 있는 의사소통의 문제에 대한 이야기 입니다. 광활한 영토 지역에 각 장군들은 자신의 군대를 가지고 있고, 각 장군이 공격하려는 도시가 아닌 다른 장소에 있을 경우를 가정합니다. 공격이 성공하기 위해서는 모든 장군이 이끄는 군대를 집중시켜야 하는데, 모든 장군이 합의에 도달하지 못한다면 공격은 실패하게 됩니다. 특히 배신자가 있다면 실패할 가능성이 더더욱 커집니다.

비잔틴 장군 문제의 조건을 블록체인으로 생각하면 장군들은 하나의 노드가 되며 다음과 같은 조건을 가지게 됩니다.

  • 각 노드들은 시스템 상태에 대한 합의를 달성해야 합니다.
  • 모든 노드가 같은 결과를 가져야 합니다.
  • 최소 2/3 혹은 그 이상의 신뢰할 수 있는 정직한 네트워크 노드를 확보해야 합의를 달성할 수 있습니다.

이러한 조건에서 네트워크의 참여자들이 정직하게 행동하는 것이 보장할 방법이 있어야 합니다. 일부 노드가 고장나거나 악의적으로 행동하더라도 블록체인 네트워크는 계속 작동해야하기 때문입니다.

비잔틴 장애 허용(Byzatine Fault Tolerance)

이러한 비잔틴 장군 문제를 해결하기 위한 방법은 다양할 수 있습니다. 블록체인에서는 비잔틴 장애 허용을 이용한 합의 알고리즘을 통해 이러한 문제를 해결합니다. 비트코인에서는 합의 알고리즘으로 작업증명 알고리즘을 사용하는데, 작업증명은 비트코인보다 오래된 것이지만 이를 수정하여 비잔틴 장애허용 시스템으로 비트코인이 탄생하였습니다.
작업 증명 알고리즘이 비잔틴 실패를 100% 막아내는 것은 아니지만 비용집약적인 마이닝 과정과 암호화 기술로 인하여 블록체인 네트워크에서 작동하는 가장 안전하고 신뢰할 수 있는 것으로 증명되었습니다.

프랙티컬 비잔틴 장애 허용(Practical Byzantine Fault Tolerance)

프랙티컬 비잔틴 장애 허용은 분산시스템이 약속된 행동을 하지 않는 노드가 존재할 수 있는 비동기 시스템일 때, 해당 시스템에 참여한 모든 노드가 성공적으로 합의를 이룰 수 있도록 개발된 합의 알고리즘 입니다. 위 알고리즘은 Safety를 확보하고 Liveness를 일부 희생하면서 비동기 네트워크에서도 합의를 이룰 수 있습니다. 합의는 다음과 같은 과정을 통해 수행합니다.

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

블록체인 합의 알고리즘 중 BFT 방식을 채택한 경우 대부분의 PBFT 합의 알고리즘을 바탕으로 조금씩 변형을 가한 것입니다. 이러한 PBFT 합의 알고리즘은 비동기 네트워크에서 배신자 노드가 f개 있을 때, 총 노드 개수가 3f+1개 이상이면 해당 네트워크에서 이루어지는 합의는 신뢰할 수 있다는 것을 수학적으로 증명하였습니다.

profile
Frontend Engineer

0개의 댓글