4. 블록체인_합의
1. 합의
1. 분산된 시스템에서 합의
블록체인은 분산 시스템의 일종으로, 네트워크 참여자들이 동시에 일관된 데이터를 유지하려고 노력하는 시스템입니다. 간단히 말해, 블록체인은 모든 참여자가 동일한 정보를 공유하고, 새로운 거래가 이루어질 때마다 이를 네트워크 전체에 동기화하는 방식으로 작동합니다.
i. 분산 시스템에서의 동기화
첫 번째로 기억할 점은, 분산 시스템에서는 모든 노드가 항상 같은 세계관을 갖고 있는 것은 아니라는 것입니다. 각 노드가 독립적으로 운영되기 때문에, 이들이 데이터를 동기화하여 **일관성(consistency)**을 유지하는 것이 매우 중요합니다. 그렇지 않으면 서로 다른 정보를 갖고 있어 네트워크가 제대로 작동하지 않게 됩니다.
ii. 거래의 전파
또한, 새로운 거래가 네트워크에 입력되면, 결국에는 이 거래가 모든 노드에 전파되어야 합니다. 분산 시스템에서 중요한 목표는 결국 네트워크의 모든 참여자가 동일한 거래 정보를 갖도록 하는 것입니다.
분산 합의 (Distributed Consensus)
분산 합의는 분산 시스템의 노드들이 서로 다른 입력값(예: 블록)을 제안하는 상황에서 모든 신뢰할 수 있는 노드들이 같은 값에 합의해야 하는 과정을 의미합니다. 여기서 중요한 두 가지 조건이 있습니다.
- 모든 정직한(honest) 노드들이 같은 값에 합의해야 한다.
- 이는 네트워크가 정상적으로 운영되기 위해서 모든 정직한 노드들이 동일한 블록이나 거래 정보에 동의해야 한다는 뜻입니다.
- 그 값은 반드시 정직한 노드에 의해 생성된 값이어야 한다.
- 네트워크의 무결성을 유지하기 위해, 합의된 값은 악의적인 노드가 아닌, 신뢰할 수 있는 노드에 의해 제안된 값이어야 합니다.
블록체인 네트워크에서는 노드들이 세계 상태에 대한 다음과 같은 정보에 대해 합의하려고 합니다:
- 어떤 거래가 확인되었는가?
- 이 거래가 원장(블록체인)에서 어떤 순서로 기록되었는가?
이러한 정보에 대해 합의함으로써 네트워크는 모든 참여자가 동일한 거래 기록을 갖게 되며, 이는 블록체인의 신뢰성과 투명성을 유지하는 데 핵심적인 역할을 합니다.
2. 합의 시스템의 문제점
비잔틴 장군 문제 (The Byzantine Generals Problem)
비잔틴 장군 문제는 분산 시스템에서 합의 문제를 설명하는 전통적인 비유입니다. 이 문제는 장군들이 적의 도시를 공격하려고 할 때, 서로 다른 위치에 나뉘어 있고, 공격 시간을 합의해야 한다는 상황을 가정합니다. 이 과정에서 몇몇 장군들은 배신자가 되어 잘못된 메시지를 보내 다른 장군들을 혼란스럽게 만들려고 할 수 있습니다.
문제 설정
- 여러 장군들이 있다.
- 각 장군은 자신의 부대를 이끌고 있으며, 이들은 동시에 적을 공격해야만 성공할 수 있습니다.
- 메신저를 통해 통신한다.
- 장군들은 메신저를 통해 서로 통신합니다. 하지만 일부 장군들은 배신자가 되어 잘못된 정보를 다른 장군들에게 전달할 수 있습니다.
- 충성스러운 장군들의 목표는 배신자가 있는 상황에서도 모든 충성스러운 장군들이 동일한 공격 계획을 세우는 것입니다. 이때 배신자는 다른 장군들이 잘못된 계획을 세우도록 혼란을 일으키려고 합니다.
비잔틴-결함 허용 (Byzantine-Fault Tolerance, BFT)
이 시스템에서 중요한 개념이 바로 **비잔틴-결함 허용(BFT)**입니다. 이는 분산된 시스템이 일부 노드(장군)가 악의적이거나 실패하더라도 나머지 충성스러운 노드가 일관된 계획(혹은 합의된 상태)을 유지할 수 있는 능력을 의미합니다.
합의 불가능 상황
연구 결과, 만약 장군들 중 1/3 이상이 배신자일 경우, 충성스러운 장군들이 동일한 계획에 합의하는 것이 불가능함이 증명되었습니다. 즉, 시스템의 일부가 악의적인 행동을 하더라도 합의를 이루기 위해서는 배신자의 수가 전체의 1/3을 넘지 않아야 한다는 의미입니다.
3. 리더 결정- 중앙화 비트코인
리더 선택 – 비트코인이 중앙 권한(Central Authority)을 가졌다면?
먼저, 앞에서 살펴봤던 질문들을 상기해보죠:
- 어떤 거래가 확인되었는가?
- 거래가 블록체인의 원장(ledger)에 어떤 순서로 기록되었는가?
이 질문들에 대한 답은 매우 간단합니다. 리더가 제안한 블록을 따르는 것이죠. 하지만 여기서 중요한 질문이 생깁니다. 리더는 누구인가? >> 리더를 정할 수 있나?
중앙 권한을 가진 디지털 화폐
만약 우리가 디지털 화폐 시스템을 **중앙 권한(Central Authority, CA)**이 있는 구조로 설계한다면, 다음과 같은 방식으로 작동하게 됩니다:
- 중앙 권한은 모든 새로운 블록을 서명하고 생성하며, 이를 네트워크에 배포합니다.
- 다른 노드들은 중앙 권한이 만든 블록의 내용을 검증한 후, 해당 블록을 자신의 블록체인에 추가합니다.
중앙 권한이 있을 때의 문제점
이런 구조는 간단하게 들리지만, 몇 가지 심각한 문제점이 발생합니다. 중앙 권한(CA)이 있을 경우 어떤 문제가 생길 수 있을까요?
- 중앙 권한의 지정 문제
- 중앙 권한은 반드시 지명되거나 어떤 방식으로든 정의되어야 합니다. 이는 특정 기관이나 인물이 권한을 가지는 것을 의미합니다.
- 거래의 통제
- 중앙 권한은 특정 사용자의 거래를 일방적으로 무시하거나 지연시킬 수 있습니다. 예를 들어, 특정 속성을 가진 거래를 의도적으로 처리하지 않을 수 있습니다.
- 네트워크의 가용성 문제
- 중앙 권한이 과부하가 걸리거나 의도적으로 시스템을 중단시킬 수 있습니다. 이런 경우, 네트워크 전체가 사용할 수 없게 되는 위험이 있습니다.
비트코인의 목표: 민주화와 분산화
비트코인은 금융 시스템을 민주화하고 분산화하는 것을 목표로 합니다. 그러나 위와 같은 중앙 권한에 의한 접근 방식은 중앙에서 통제되는 독재적 프로토콜을 만들게 될 것입니다. 즉, 중앙 권한이 있는 시스템에서는 그 권한을 가진 기관이 모든 것을 통제할 수 있는 반면, 비트코인은 이런 중앙 통제를 피하고 네트워크 전체가 공평하게 참여할 수 있는 구조를 추구합니다.
4. 리더 결정: 공정하고 랜덤하게
이전 슬라이드에서 우리는 중앙 권한에 의해 운영되는 디지털 화폐의 문제를 확인했습니다. 따라서 우리가 필요한 것은 리더 선택을 민주적이고 분산화된 방식으로 효과적으로 수행할 방법입니다.
리더를 공정하고 무작위로 선택하는 방법
블록체인 프로토콜이 매 라운드마다 공정하고 무작위로 리더를 선택하려면 어떻게 해야 할까요?
- 다중 아이덴티티 방지
- 가장 먼저 해결해야 할 문제는, 한 사람이 여러 개의 아이덴티티를 만들어 리더로 선택될 확률을 높이는 것을 방지해야 한다는 점입니다. 블록체인에서는 아이덴티티를 만드는 것이 쉽고 무료인 경우가 많기 때문에, 단순히 아이덴티티의 수로 리더를 결정하는 방식은 적합하지 않습니다.
- 동적 참여자
- 또 다른 문제는 블록체인의 네트워크에 많은 노드들이 짧은 시간 내에 참여하거나 이탈하는 경우입니다. 이 경우, 네트워크에 정확히 몇 개의 노드가 있는지 알기가 어렵습니다. 그렇다면 노드의 수를 알 수 없는 상황에서 리더를 공정하게 선택하는 방법은 무엇일까요?
- 다수결 방식의 한계
- 어떤 블록에 대해 50% 이상의 긍정적인 투표를 받는 방식은 적절하지 않습니다. 왜냐하면, 네트워크에 몇 개의 노드가 있는지 정확히 알 수 없기 때문에, 다수결 방식은 효율적으로 작동하지 않기 때문입니다.
블록체인에서 리더를 공정하고 무작위로 선택하기 위해서는 노드의 수나 아이덴티티의 개수에 의존하지 않고 리더를 선택하는 방법이 필요합니다. 이를 위해 블록체인 프로토콜은 리더를 공정하게 선택하면서도 다중 아이덴티티 공격이나 네트워크 노드의 변동성을 극복할 수 있는 메커니즘을 적용해야 합니다.
5. 시빌 컨트롤 메커니즘
Sybil 공격은 다중 아이덴티티를 만들어 시스템에서 이익을 얻는 공격을 의미합니다. 공격자는 여러 개의 가짜 노드(아이덴티티)를 생성하여 리더가 될 확률을 높이거나 시스템을 조작하려고 시도합니다. 슬라이드에 보이는 것처럼, 주황색의 Sybil 노드는 시스템 내에 여러 개의 아이덴티티를 갖고 있으며, 이를 통해 네트워크의 공정한 리더 선택을 방해하려고 합니다.
Sybil 공격 방어 메커니즘
Sybil 공격을 방지하기 위해서는 리더로 선택되는 확률을 특정 자원에 기반하도록 해야 합니다. 비트코인은 **Proof-of-Work(작업 증명, PoW)**을 통해 Sybil 공격을 방어합니다.
- 작업 증명(Proof-of-Work, PoW):
- PoW는 **컴퓨팅 파워(해시 파워)**를 기반으로 리더를 선택합니다. 즉, 더 많은 계산 능력을 가진 노드가 리더가 될 확률이 높아집니다. 이는 노드가 새로운 아이덴티티를 많이 만들더라도, 컴퓨팅 파워가 증가하지 않는 한 리더로 선택될 확률이 높아지지 않게 합니다.
- 노드 선택 확률:
- PoW에서는 컴퓨팅 자원을 투자한 만큼만 리더로 선택될 확률이 생기기 때문에, 단순히 아이덴티티를 여러 개 만든다고 해서 유리해지지 않습니다. 정직한 노드가 충분한 컴퓨팅 파워를 가질 경우 Sybil 공격은 무력화됩니다.
결론적으로, 비트코인과 같은 블록체인 시스템에서 PoW는 Sybil 공격을 방어하기 위한 중요한 메커니즘으로 사용됩니다. 다중 아이덴티티를 통해 리더로 자주 선택될 가능성을 차단하고, 컴퓨팅 자원이라는 희소한 자원을 기반으로 공정한 리더 선택이 이루어지도록 보장합니다.
이런 방식으로 Sybil 공격은 방어되며, 비트코인 네트워크가 안전하게 운영될 수 있습니다.
6. Pow와 PoS 비교
슬라이드에서는 Sybil 공격 방어 메커니즘에 대해 두 가지 주요 접근 방식을 비교하고 있습니다: **Proof-of-Work (PoW)**와 Proof-of-Stake (PoS). 각각의 메커니즘이 Sybil 공격을 어떻게 방어하고, 그 특징이 무엇인지 설명합니다.
Proof-of-Work (PoW)
PoW는 컴퓨팅 파워를 기반으로 리더를 선택하는 메커니즘입니다. 이 방식은 작업 증명 퍼즐을 해결하는 데 필요한 자원을 바탕으로 노드가 리더로 선택될 확률을 높입니다.
PoW의 특징:
- 수학적 퍼즐을 풀어야 하며, 많은 시도가 필요합니다.
- 높은 투자 비용이 필요합니다 (예: 하드웨어).
- 높은 에너지 비용이 소모됩니다 (전력 사용).
- 채굴자들 간에 무기 경쟁이 벌어집니다 (더 나은 하드웨어와 전력 소모로 경쟁).
- 높은 공격 비용으로 네트워크 보안이 강화됩니다.
- 완전한 익명 채굴이 가능합니다.
- PoS보다 허가가 덜 필요한 시스템입니다.
Proof-of-Stake (PoS)
PoS는 보유하고 있는 코인을 기반으로 리더를 선택하는 메커니즘입니다. 코인을 많이 소유한 사람이 블록을 제안할 기회가 더 많아집니다.
PoS의 특징:
- 코인을 예치하고 새 블록을 제안합니다.
- 많은 양의 지분이 필요합니다.
- 낮은 에너지 비용이 특징입니다.
- 부유한 사람이 더 많은 이익을 취할 수 있어, **"부자가 더 부자가 된다"**는 문제가 있을 수 있습니다.
- 공격 비용이 상대적으로 낮으나, 페널티로 방지됩니다.
- 부트스트랩이 어렵습니다.
7. 나카모토의 새로운 접근
비트코인의 분산 합의 방식은 이전의 전통적인 투표 방식과는 매우 다릅니다. 기존 시스템은 노드 수가 적을 때만 효과적이었지만, 비트코인은 훨씬 더 많은 노드에서도 확장성 있게 작동하도록 설계되었습니다.
Ongoing Consensus (진행 중인 합의)
비트코인에서는 합의 과정이 지속적으로 일어납니다. 즉, 비트코인 네트워크에서 블록이나 거래의 순서는 100% 확정되지 않으며, 이는 확률적인 방식으로 진행됩니다. 이를 **Probabilistic Consensus (확률적 합의)**라고 부릅니다. 시간이 지남에 따라 더 많은 블록이 쌓이면, 해당 블록이 올바른지에 대한 확률이 점점 더 높아지게 됩니다.
Sybil-Control Mechanism (시빌 공격 방어 메커니즘)
비트코인은 시빌 공격을 방지하기 위해 **Proof-of-Work (작업 증명)**을 사용합니다. 이 방식에서는 네트워크에서 무작위로 노드를 선택하여 새로운 블록을 제안하게 합니다. 작업 증명을 통해 50% 이상의 정직한 노드가 있는 한, 네트워크에서 신뢰할 수 있는 합의가 가능해집니다.
Incentives (인센티브)
비트코인은 인센티브 시스템을 통해 노드들이 블록 생성에 참여하도록 장려합니다. 채굴자들은 새로운 블록을 생성하고 그 블록이 체인에 포함되면 비트코인으로 보상받습니다. 이는 노드들이 블록 생성 과정에 적극적으로 참여하도록 유도하는 중요한 요소입니다.
8. 합의 알고리즘 단순화
1. 거래 방송 (Transaction Broadcast)
비트코인 네트워크에서 새로운 거래가 발생하면, 해당 거래를 받은 모든 노드가 그 정보를 네트워크에 방송합니다. 이를 통해 네트워크 내의 모든 노드들이 새로운 거래에 대해 알게 됩니다. 이 단계에서 거래는 아직 확정되지 않은 상태이며, 여러 노드들 사이에서 전파됩니다.
2. 블록 생성 (Block Building)
채굴자(마이너)들은 네트워크에서 방송된 유효한 거래들을 모아서 정리한 후, 이 거래들을 포함한 새로운 블록을 생성합니다. 블록 안에는 여러 거래가 모아지며, 이 블록은 블록체인에 추가될 준비가 됩니다.
3. 리더 노드 선택 (Leader Node Selection)
PoW(작업 증명) 메커니즘을 통해 무작위로 한 명의 채굴자가 리더로 선택됩니다. 이 리더 채굴자는 자신이 만든 블록을 네트워크에 제안할 수 있는 권한을 얻게 됩니다. 이 과정에서 리더는 블록을 제안하여 블록체인에 추가하려고 합니다.
4. 블록 검증 (Block Validation)
리더로부터 새로운 블록을 받은 다른 노드들은 해당 블록을 검증합니다. 여기서 블록에 포함된 거래들이 모두 유효한지를 확인합니다. 블록이 올바르게 생성되었다면 해당 블록은 유효한 것으로 간주됩니다.
5. 블록 승인 (Block Acceptance)
검증이 완료되면 다른 노드들은 새로운 블록을 인정합니다. 블록이 승인되었음을 나타내기 위해, 다른 노드들은 이 블록 위에 새로운 블록을 쌓아 올립니다. 즉, 블록체인을 확장하는 방식으로 해당 블록이 수용되었음을 나타냅니다.
이 과정을 통해 비트코인 네트워크는 새로운 거래를 검증하고, 유효한 거래들을 포함한 블록을 블록체인에 추가함으로써 분산된 합의를 이루게 됩니다.
9. 블록 확장
블록 확장 3가지 원칙:
- 검증된 블록들만 블록체인에 들어온다.
- 가장 긴 체인 길이를 가진 애만 살아남는다.
- 노드는 첫번째 블록을 들은곳에서 생성된다.
이거는 그림 그려보셈
10. 고아 블록
고아 블록은 네트워크에서 제안되었지만, 가장 긴 체인에 포함되지 못한 블록을 의미합니다. 비트코인에서 가장 긴 체인이 공식적으로 합의된 블록체인으로 인정되기 때문에, 고아 블록에 포함된 거래는 처리되지 않은 상태로 남게 됩니다.
고아 블록에 포함된 거래는 어떻게 처리되나요?
- 미확인 거래는 메모리 풀(mempool)에 저장된다:
- 고아 블록에 포함된 미확인 거래는 아직 확정되지 않았기 때문에, 네트워크의 각 노드들은 이 거래들을 메모리 풀에 저장합니다. 메모리 풀은 확인되지 않은 거래들이 임시로 보관되는 공간입니다.
- 거래는 네트워크에서 계속 전파된다:
- 미확인된 거래는 네트워크에서 계속 "gossip"(전파)됩니다. 각 노드는 네트워크에 존재하는 모든 미확인 거래에 대해 알게 되며, 새로운 블록이 생성될 때까지 거래가 계속 전파됩니다.
- 새로운 블록이 제안되면 메모리 풀 업데이트:
- 새로운 블록이 제안되면, 노드들은 해당 블록에 포함된 거래들을 메모리 풀에서 제거합니다. 즉, 새로운 블록이 블록체인에 추가되면서, 그 블록에 포함된 거래들은 더 이상 미확인 상태가 아니게 됩니다.
- 고아 블록의 거래는 미확인 상태로 남는다:
- 고아 블록에 포함된 거래들은 그 블록이 체인에 포함되지 않았기 때문에, 해당 거래들은 여전히 미확인 상태로 간주됩니다. 이 거래들은 이후 생성될 다른 블록에 포함될 때까지 기다립니다.
고아 블록에 포함된 거래들은 네트워크에서 삭제되지 않고, 단순히 미확인 상태로 남아 있습니다. 이 거래들은 여전히 네트워크에서 전파되고 있으며, 이후 새로운 블록에 포함될 수 있습니다.
11. 합의 메커니즘과 시빌 컨트롤 메커니즘은 다르다
합의 메커니즘 ≠ Sybil 공격 방어 메커니즘
합의 메커니즘(Consensus Mechanism):
합의 메커니즘은 네트워크에 있는 노드들이 어떻게 사건의 역사에 대해 합의하는지를 다루는 것입니다. 즉, 모든 노드가 동일한 거래 기록과 블록체인 상태에 합의하는 방법을 결정합니다.
이 메커니즘은 노드들이 동일한 거래 내역을 가지도록 만드는 방식에 초점을 맞추고 있으며, 블록체인에서 블록의 순서나 거래의 확정 등을 처리합니다.
Sybil 공격 방어 메커니즘(Sybil-Control Mechanism):
Sybil 공격 방어 메커니즘은 네트워크에서 공정한 리더 선택을 보장하는 메커니즘입니다. 예를 들어, **Proof-of-Work (PoW)**와 같은 작업 증명 메커니즘은 리더가 무작위로 선택되도록 하여, 리더가 특정 개인에 의해 독점되지 않도록 보장합니다.
Sybil 공격 방어 메커니즘은 네트워크의 보안을 유지하고, 다중 아이덴티티 공격(Sybil 공격)을 방지합니다.
허가 없는 블록체인에서의 필요성
**허가 없는 블록체인(Permissionless Blockchain)**에서는 두 메커니즘 모두 필요합니다:
합의 메커니즘: 모든 노드들이 동일한 거래 내역을 가지도록 합의해야 합니다.
Sybil 방어 메커니즘: 리더가 공정하게 선택되고 네트워크가 다중 아이덴티티 공격에 대비할 수 있도록 해야 합니다.
사토시 나카모토의 해결책: 나카모토 합의(Nakamoto Consensus)
사토시 나카모토는 비트코인의 허가 없는 합의 문제를 해결하기 위해 두 가지 메커니즘을 결합했습니다:
가장 긴 체인(Longest-Chain Consensus): 가장 많은 작업이 투입된 블록체인을 신뢰할 수 있는 체인으로 간주하는 합의 방식입니다.
Proof-of-Work (PoW) Sybil 방어 메커니즘: 리더를 공정하게 선택하는 동시에 Sybil 공격을 방지하는 작업 증명 메커니즘입니다.
이 두 가지를 결합한 방식을 **나카모토 합의(Nakamoto Consensus)**라고 부르며, 이는 비트코인의 핵심적인 구조입니다.