Byzantine Fault Tolerance

BFT

BFT는 Byzantine Fault Tolerance의 약자로, '비잔틴 장애 허용'을 의미한다.

이는 분산 컴퓨터 시스템에서, 특히 블록체인 네트워크에서 중요한 역할을 한다.

비잔틴 장애는 분산 시스템에서 발생할 수 있는 가장 어려운 문제 중 하나이다.

그 이름은 '비잔틴 장군들의 문제'라는 논리 퍼즐에서 유래되었다.

비잔틴 장군 문제

이 문제에서는 여러 비잔틴 장군들이 도시를 공격할 때, 동시에 공격해야 성공할 수 있다는 가정을 한다.

그러나 각 장군들은 서로 믿을 수 없으며, 신뢰할 수 있는 통신 채널도 없다.

이러한 상황에서 어떻게 모든 장군들이 일치하는 결정을 내릴 수 있는지에 대한 문제이다.

이 비잔틴 장군들의 문제를 해결하는 것이 바로 BFT이다.

BFT는 분산 네트워크 내에서 속이거나 결함이 있는 노드(비잔틴 장군)에도 불구하고 합의를 이룰 수 있는 방식을 제공한다.

이는 노드 간에 정보를 교환하고, 과반수의 노드가 동일한 정보를 확인하면 그 정보를 합의된 것으로 간주하는 방식으로 작동한다.

블록체인에서 BFT는 합의 알고리즘의 일종으로 사용된다.

예를 들어, Practical Byzantine Fault Tolerance (PBFT)는 BFT의 변형으로, 빠르게 합의를 이루기 위해 개발되었다.

Stellar 네트워크와 Ripple은 PBFT를 기반으로 하는 합의 알고리즘을 사용하고 있다.

또한, Tendermint BFT와 같은 다른 BFT 기반 알고리즘들도 존재하며, 이들은 Cosmos 같은 프로젝트에서 사용되고 있다.

Tendermint BFT

Tendermint BFT (Byzantine Fault Tolerance)는 분산 네트워크에서 합의를 이루는 방식 중 하나로, 블록체인 기술인 Tendermint에서 사용되는 합의 알고리즘이다.

Tendermint BFT는 네트워크에 참여하는 모든 노드가 트랜잭션의 순서에 동의하도록 하는 방법으로 작동한다.

Tendermint BFT는 블록체인의 상태를 동기화하고, 노드 간의 합의를 통해 트랜잭션을 처리한다.

Tendermint BFT의 합의 프로세스는 크게 두 단계로 이루어진다.

  1. Pre-vote: 블록을 제안하는 라운드 리더는 새로운 블록을 제안하고, 이 블록에 대한 정보를 네트워크의 모든 노드에 전달한다. 그런 다음, 각 노드는 제안된 블록이 유효한지 확인하고, 유효하다고 판단되면 해당 블록에 대해 투표를 한다.

  2. Pre-commit: 각 노드는 네트워크의 모든 노드로부터 수신한 투표를 기반으로 블록의 유효성을 다시 한 번 확인한다. 그리고 네트워크의 2/3 이상이 같은 블록에 대해 투표했는지 확인한 후, 해당 블록에 대해 커밋 투표를 한다.

이런 식으로, Tendermint BFT는 각 노드가 동일한 순서로 트랜잭션을 처리하고, 블록체인의 일관성을 유지하게 한다.

또한, Tendermint BFT는 각 노드가 소수의 악의적인 노드로부터 독립적으로 행동할 수 있도록 하여, 네트워크에 비잔틴 장애 노드가 존재하는 경우에도 네트워크의 안정성과 안전성을 유지하는 데 효과적이다.

이런 특성 덕분에 Tendermint BFT는 블록체인 네트워크 구축에 널리 사용되며, Cosmos Network와 같은 프로젝트에서 핵심 기술로 채택되고 있다.

다음은 악의적인 노드가 있다는 가정 하에 Tendermint BFT가 작동하는 방식을 설명하는 기본적인 시나리오이다.

  1. 블록 제안 : 네트워크에 있는 각 라운드마다 노드는 라운드 리더를 선택한다. 이 리더는 새로운 블록을 제안하고 네트워크의 모든 노드에게 이를 전파한다. 만약 이 리더가 악의적인 노드라고 하더라도, 제안한 블록은 네트워크의 모든 노드에 의해 검증된다. 따라서 악의적인 블록은 이 단계에서 거부될 것이다.

  2. Pre-vote 단계 : 각 노드는 제안된 블록이 유효한지 확인하고, 유효하다고 판단되면 해당 블록에 대해 pre-vote를 한다. 악의적인 노드는 유효하지 않은 블록에 대해 투표하거나 투표를 차단할 수 있지만, 그러한 행위는 네트워크의 2/3 이상의 다른 노드들이 진행하는 합의 과정에 영향을 미치지 못한다.

  3. Pre-commit 단계 : 노드들은 pre-vote에서 합의된 블록에 대해 다시 한 번 확인하고, 네트워크의 2/3 이상이 pre-vote에서 동일한 블록을 선택했는지 검증한다. 이를 확인하면, 해당 블록에 대해 pre-commit 투표를 한다. 악의적인 노드가 이 단계에서 속이려 해도, 과반수의 노드가 유효한 블록을 이미 pre-vote로 확인했기 때문에, 이 과정은 그들의 악의적인 행동에 영향을 받지 않습니다.

Last updated