관리 메뉴

HAMA 블로그

BFT 간략 정리 : PBFT , SimpleBFT, SBFT , BFT-SMaRt 본문

블록체인

BFT 간략 정리 : PBFT , SimpleBFT, SBFT , BFT-SMaRt

[하마] 이승현 (wowlsh93@gmail.com) 2019. 3. 5. 16:43


 

PBFT (Practical Byzantine Fault Tolerance)

BFT는 분산된 노드들간에 동일한 상태를 유지하기 위한 방식으로, 악의적인 노드가 있는 것을 전제로 합니다. 여기서 악의적인 노드의 최대수는 N = 3f+1입니다. (비트코인은 논문상은 51%죠.) 

N : 전체노드 개수 
f   : 악의적인 노드 개수 

따라서 4개의 노드에서는 1개는 악의적인 노드라도 생관없다는 의미입니다. 7개노드에서는 최대 2개.아래 이미지에서는 4개의 노드에서 최대1개의 비잔틴(악의적노드)가 있다고 치고 합의 단계에 대해 설명해보면 

Request 단계

클라이언트는 상태변경을 위한 요청 (REQUEST, o, t, c)sc 을 대표 노드에 보냅니다. 참고로 이 대표노드(Primary) 또한 비잔틴이 될 수 있으며 그땐 새로운 대표노드를 선출 하게 됩니다.

Pre-Prepare 단계

대표노드는 다른 모든 노드들에게 ((PRE-PREPARE, v, n, d)sp, m)이라는 메세지를 전파합니다.
이 상태에서는 최신상태를 일단 가지고 있게 됩니다만 이게 옳은 것인지는 판단 할 수 없습니다.
그리고 n은 순서를 나타내는데 오더링에 대한 합의를 한다고 볼 수 있습니다. 
 

Prepare 단계

 자신이 받은 최신 상태정보를 기반으로 (PREPARE, v, n, d, i)si라는 메세지를 클러스터 내의 모든 노드들에게  전파합니다. 여기서 다른 노드들의 PREPARE 메세지 2f를 받으면, Prepared가 되서 넘어갑니다. 이 단계에서는 오더링을 확신하게 되고 커밋 준비를 할 수 있게 됩니다. 근데 여기서 다시 봐야하는 부분이 2f인데요, 자기 빼고 3개중에 2개의 연락만 받으면 ㅇㅋ 라는 겁니다. 즉 나머지 1개가 비잔틴이건 아니건 상관없는거죠. 비잔틴은 아니지만 그 놈은 좀 헤롱헤롱 대서 처리가 좀 늦는다. 이 놈이 Primary가 된다면? 또한 PBFT를 접한 사람들이 가장 궁금하게 생각하는게 나오는데 , 바로 이 지점에서 클라이언트에게 리턴하면 왜 안되냐는 거죠. 어느 정도 합의를 이끌어 냈잖습니까? 이런 부분들에 대해서는 각자도생하는것으로 합시다. 하나씩 그려보면 안되는 경우를 도출해 낼 수 있을 겁니다.

Commit 단계

위에서 PREPARE 메세지 2f를 받으면,  (Commit, v, n, D(m), i)si라는 메세지를 전파할 수 있게 됩니다. 그리고 다른 노드들로 부터 Commit메세지를 받아서 자기포함 2f+1개(논문12p)를 받으면 커밋합니다. 

Reply 단계

                 

Commit 검증에 성공한 노드들은 클라이언트에게 응답을 보내주고 f+1개(논문8p) 이상의 똑같은 응답을 받으면 클라이언트는 보낸 메세지가 성공적으로 분산노드들의 상태를 변경을 했다는 것을 인지합니다.

이런 합의 로직 이외에도 대표노드를 바꾸기 위한 view change,  메세지 prunning을 위한 checkpointIng 등에 관련된 내용이 있습니다.


Simple BFT 

하이퍼레저가 1.0에서 PBFT를 버리고, 카프카 기반으로 오더링 시스템으로 변한 후에도 패브릭 측은 BFT에 대한 추가 모듈을 개발하는것에 대한 끈은 놓지 않고 있습니다. 일례로 2.0에서 나올 예정인 RAFT도 결국 BFT를 위한 기반이라고 말하고 있는 정도니... (굳이 외부시스템(카프카,주키퍼)를 사용 할 필요없이) 위의 링크의 Simple BFT는 그러한 패브릭이 BFT을 이러한식으로 만들겠다라는 짧은 설계 방향에 대해서 서술해 놓고 있는데 PBFT의 단순화 버전입니다. 개인적으로는 카프카 대체제로는 RAFT로 충분하고 BFT계열은 간단하든 복잡하는 오버스펙이라 시작할맘도 없을 거 같습니다.참고로 JP모건 애들이 만드는 콘소시엄체인은 RAFT랑 IstabulBFT 라는것을 쓰는데 패브릭도 BFT계열을 겨우 오더링하는데 사용 할 바엔 E-O-V 프로세스를 폐기하는게 낫다고 봅니다. 아마 거기 아키텍트도 똑같은 생각하고 있을듯..ㅎㅎ


Ouroboros-BFT 

애초에 카르다노는 기존 지분 증명 프로토콜이 가지고 있는 한계, 그 중에서도 특히 Grinding Attack을 막기 위해 설계된 지분증명(POS)기반 합의 프로토콜로 "우로보로스(Ouroboros)"가 있는데, 이 기존의 Ouroboros의 디자인에서 영감을 얻은 새로운 BFT 원장 합의 프로토콜입니다. 2018년 11월에 발표된 페이퍼가 존재하며, 콘소시엄형으로 유지되는 카르다노 모드를 위한 작업물인듯하며  Haskell 과 Rust 구현이 있습니다.

2018년12월18일에 1.4버전이 릴리즈되었으며, Cardano 1.5 릴리스는 Byron 코드베이스에서 탈중앙화된 새로운 Shelley 환경으로 이동하게 되는 Cardano 프로토콜에 있어 중요한 이정표가 될 준비 과정에 있다고하며, 구체적으로 이는 위의 다이어그램에 보이듯 두 개의 하드 포크 방식으로 진행되며 한동안 Byron과 Shelley를 같이 운영하고 사용자를 위한 원활한 전환이 이뤄지도록 하기 위해 채택된 방식이며 업그레이드가 최대한 빠른 시일 내 올바른 원칙에 기반하여 적절한 방식으로 완료될 수 있도록 하기 위한 것이라고합니다. Ouroboros BFT를 사용하면 Shelley로의 구현 및 배포 시간을 단축할 수 있다네요.

Ouroboros BFT는 Byron이 사용하는 Ouroboros 클래식과 Ouroboros 제네시스 사이의 브리지(연결 다리) 역할을 한다고 하는데 구체적으로 알아보진 않았습니다.


SBFT: a Scalable and Decentralized Trust Infrastructure

state of the art BFT의 약자인듯하며, 범지구적 범위에서 수백개 이상의 노드들이 참여할 수 있는 BFT시스템에 대한 논문이며, 잘 구현된 PBFT 에 비해 거의 2배 이상의 처리량과 1.5배 이상의 latency를 갖는다고 하네요.


BFT-SMaRt

BFT-SMART는 실용적이고 신뢰성있는 오픈 소스 Java 기반 라이브러리가 존재하며, 이를 기반으로 구현된 패브릭용 오더링 모듈도 존재합니다. 


Tendermint

텐더민트는 DLS 합의 알고리즘에서 파생되는 부분적 Synchronous BFT(Byzantine Fault Tolerant) consensus protocol이다. 텐더민트는 DPoS(Delegated Proof-of-Stake)개념과 PBFT 개념을 섞은 합의 알고리즘이다. 검증인이 아닌 이들은 ‘아톰’이라고 부르는 지분 토큰(Staking token)을 임의의 검증인에게 위임하여 일정한 블록 수수료(Block fees)와 아톰 보상(Atom Rewards)을 얻을 수 있으나, 위임 검증인(Delegate Validator)이 해킹 당하거나 프로토콜을 위반한 경우 처벌을 받게 되는 리스크가 있다.

Istanbul BFT (IBFT)

JP Morgan의 콘소시엄형 블록체인인 quorum에서 채택하여 주목받은 BFT계열 합의로써, quorum에는 이 이외에도 RAFT기반 합의 알고리즘을 제공한다.

0 Comments
댓글쓰기 폼