[Xangle Digest]
※해당 컨텐츠는 1월 28일 외부에서 기발간 된 컨텐츠입니다. 컨텐츠에 대한 추가적인 주의사항은 본문 하단에서 확인해주세요.
작성자: 김하늘 (Blockchain at Yonsei 9기), 이건희 (디사이퍼 9기), 이혜연 (하이블록 1기), 임장혁 (블록체인 벨리 2기), 장기덕 (디사이퍼 6기), 추교현 (커그)
목차
들어가며
비잔틴 장군 문제란 무엇인가
비잔틴 장애 허용(Byzantine Fault Tolerance, BFT)에 대해서
블록체인 합의 알고리즘
마무리
들어가며
2008년 비트코인이 개별 사용자 간에 중개 기관을 거치지 않고 데이터를 주고받는 전자 현금 시스템으로 시작된 이래로, 각각 특정 메커니즘을 가진 많은 암호화폐가 만들어졌습니다. 다양한 메커니즘을 가진 암호화폐가 등장했지만 모두 블록체인 기술을 핵심 구조로 가지고 있습니다.
몇 가지 예외를 제외하고, 블록체인은 분산된 컴퓨터 노드 네트워크에 의해 유지되는 디지털 원장으로 작동하도록 의도적으로 분산되어 설계되었습니다. 그러므로 블록체인 기술은 중개자 없이도 투명하고 신뢰할 수 있는 금융 거래를 가능케 했습니다. 암호화폐는 신뢰에 크게 의존하는 전통적인 은행 및 지불 시스템의 유효한 대안으로 채택되고 있습니다.
대부분의 분산 컴퓨팅 시스템과 마찬가지로, 암호화폐 네트워크는 거래 정보를 기록한 원장 데이터를 중앙 서버가 아닌 참여자들이 공동으로 기록 및 관리합니다. 참여자는 블록체인의 원장 데이터 상태에 대해 정기적으로 동의해야 하며, 이러한 과정을 ‘합의’라고 합니다. 그러나 분산 네트워크에서 안전하고 효율적인 방식으로 합의에 도달하는 것은 결코 쉬운 일이 아닙니다.
그렇다면 일부 노드가 실패하거나 부정직하게 행동할 가능성이 있는 경우 컴퓨터 노드의 분산 네트워크가 어떻게 결정에 동의할 수 있을까요? 이것은 BFT(Byzantine Fault Tolerance, 비잔틴 장애 허용) 개념을 탄생시킨 비잔틴 장군 문제의 근본적인 질문입니다.
비잔틴 장군 문제란 무엇인가
1982년 고안된 비잔틴 장군 문제는 간단히 말하자면, 한 무리의 비잔틴 장군들이 그들의 다음 행동에 대한 합의를 하려고 할 때 어떻게 의사소통 문제가 생길 수 있는지를 보여주는 논리적 딜레마입니다.
이 딜레마는 각 장군이 자신의 군대를 가지고 있고 각 부대는 공격하려는 도시 주변의 서로 다른 위치에 있다고 가정합니다.
장군들은 공격 또는 후퇴 중 어느 하나로 합의를 해야 합니다. 모든 장군이 합의에 도달하는 한, 즉 공동의 결정을 공동으로 실행하기로 합의하는 한 그들이 공격하든 후퇴하든 상관없습니다.
따라서 다음과 같은 사항을 고려해보아야 합니다.
각 장군은 공격 또는 후퇴(예 또는 아니오)를 결정해야 한다.
결정된 후에는 이를 변경할 수 없다.
모든 장군은 동일한 결정에 동의해야 하고, 그것을 서로 동기화된 방식으로 실행해야 한다.
앞서 언급한 의사소통 문제는 한 장군이 다른 장군과 전령이 전달하는 메시지를 통해서만 의사소통을 할 수 있다는 사실과 관련이 있습니다. 결과적으로 비잔틴 장군 문제의 핵심 과제는 메시지가 어떻게든 지연, 파괴 또는 손실될 수 있다는 것입니다. 또한, 메시지가 성공적으로 전달되더라도 한 명 이상의 장군이 (어떤 이유로든) 악의적인 행동을 선택하고 사기성 메시지를 보내 다른 장군을 혼란스럽게 하여 공동의 결정과는 다른 행동을 하게 되는 실패로 이어질 수 있습니다.
예를 들어, 특정일에 공격하기로 합의를 했으나 의사소통 과정에서 해당 메시지가 지연, 파괴, 손실되면 장군들은 동일한 날에 공격을 시행할 수 없게 됩니다. 또는, 장군 중 배신자가 존재해 다른 장군에게 합의된 메시지(공격)가 아닌 잘못된 내용(후퇴)을 전달하면 역시 공격에 실패하게 됩니다.
블록체인의 맥락에 해당 딜레마를 적용하면, 각 장군은 네트워크 노드를 나타내며 노드는 시스템에 전달된 원장의 변경 여부에 대한 합의에 도달해야 합니다. 다시 말해, 분산 네트워크 내의 대다수 참가자는 공동의 결정과는 다른 결과가 발생하는 실패를 피하기 위해 합의하고 동일한 작업을 실행해야 합니다.
따라서, 이러한 유형의 분산 시스템에서 합의를 달성하는 유일한 방법은 최소 2/3 이상의 신뢰할 수 있고 정직한 네트워크 노드를 보유하는 것입니다. 이는 네트워크 대다수가 악의적으로 행동하기로 결정하면 시스템이 오류 및 공격(예: 51% 공격)에 취약하다는 것을 의미합니다.
비잔틴 장애 허용(Byzantine Fault Tolerance, BFT)에 대해서
BFT는 비잔틴 장군 문제에서 파생되는 여러 장애 환경에 대항할 수 있게 하는 시스템 설계 방식입니다.
블록체인 분야에서 이러한 설계 방식이 주요하게 다뤄지는 이유는 블록체인이 가진 탈중앙적인 성격 때문입니다. 블록체인은 비잔틴 장군 문제에서와같이 분산된 노드(각 부대의 장군)에 의해 운영되는 시스템입니다. 따라서 각 노드가 불능에 빠지거나, 악의적으로 블록을 조작(위변조 등)하려고 하는 경우에 대해서도 반드시 대비되어있어야 합니다.
이를 해결하는 방법은 곧 노드 간 분산 원장에 대한 합의를 이루어내는 방식으로 이어집니다. 각 블록체인 프로젝트는 이를 각자만의 방식으로 해결하려고 하고 있으며, 합의를 이루어내는 방식을 합의 알고리즘(Consensus algorithm)이라고 부르고 있습니다.
합의 알고리즘의 종류는 각 프로젝트가 BFT 시스템을 구축하는 방향성에 따라 여러 가지로 나뉘며, 소위 PoW(Proof of Work, 작업 증명), PoS(Proof of Stake, 지분 증명)과 같이 PoX(Proof of X)라는 이름으로 줄여서 표현하고 있습니다.
가장 우수한 합의 알고리즘에 대해서는 여전히 논쟁적인 부분이 있습니다. 따라서 기술적인 우열을 가리기에는 어려움이 있지만, 그럼에도 주의 깊게 봐야 할 부분은 합의 알고리즘과 블록체인의 성능이 연계된다는 점입니다. 특히, 블록체인에서 거래를 처리하는 속도와 처리 후 기록된 거래내용이 변하지 않는 안정성 측면에서는 분산 원장에 대해 합의하는 방식, 그리고 그 방식을 운영하는 규칙에 따라 상당 부분 차이가 나게 됩니다.
블록체인 합의 알고리즘
합의 알고리즘은 블록체인에 참여하는 각 노드가 BFT 시스템을 구축하기 위해 분산 원장의 상태에 대한 합의에 도달하는 메커니즘으로 정의할 수 있습니다.
비트코인의 사례를 예로 설명하면, 비트코인 프로토콜의 PoW 합의 알고리즘은 분산 원장에 기록되는 거래내역 검증 및 확정에 참여하는 각 노드들이 합의에 도달하기 위해 사용하는 방법입니다. 사토시 나카모토가 설계한 PoW 합의 알고리즘은 노드가 합의에 도달하기 위해 일정한 수준의 컴퓨팅 연산 비용을 지불하도록 하여 악의적 활동이 이루어지기 위해 지불해야 하는 비용을 높여 비잔틴 장군 문제를 해결하고자 하였습니다.
마무리
블록체인의 핵심 중 하나는 분산된 환경에서 거래를 처리할 수 있다는 점입니다. 단, 이때 비잔틴 장군 문제와 같이 임의의 다수 참여자가 존재하는 경우에 블록에 담긴 거래 내역이 조작되는 등의 여러 문제에 노출될 수 있습니다.
이를 방지하기 위해 각 블록체인 프로젝트는 BFT 시스템을 구축하려고 하였으며, 앞서 본 여러 합의 알고리즘을 통해 구현하였습니다.
어떤 방식이 정답일지는 아직 모르지만, 합의 알고리즘이 블록체인 내에서 어떤 역할을 수행하고, 어떠한 성능과 연계되어있으며, 각각의 블록체인 프로젝트가 사용한 합의 알고리즘과 그것을 통해 최종적으로 달성하려고 하는 목표가 무엇인지를 계속해서 비교 및 검증해보면서 블록체인 분야의 발전을 지켜본다면 블록체인을 더 깊이 이해할 수 있을 것입니다.
-> '블록체인과 비잔틴 장군 문제?' 원문 보러가기