"프랙티컬 비잔틴 장애 허용"의 두 판 사이의 차이
잔글 (→같이 보기) |
(상광->상황) |
||
(사용자 3명의 중간 판 3개는 보이지 않습니다) | |||
2번째 줄: | 2번째 줄: | ||
==비잔틴 장군문제== | ==비잔틴 장군문제== | ||
− | [[PBFT]]를 이해하기 위해서는 [[비잔틴 장군 문제]]를 먼저 알아야 한다. 비잔틴 군대는 장군이라는 대표자들간 합의를 통해 전술을 최종 결정한다. 만약 같은 곳을 동시에 공격한다면 충분히 이길 수 있는 상황이지만, 일부가 공격을 하지 않으면 지는 상황에 있다. 따라서 장군들이 모두 동일한 시간에 공격한다고 합의를 해야 하는 | + | [[PBFT]]를 이해하기 위해서는 [[비잔틴 장군 문제]]를 먼저 알아야 한다. 비잔틴 군대는 장군이라는 대표자들간 합의를 통해 전술을 최종 결정한다. 만약 같은 곳을 동시에 공격한다면 충분히 이길 수 있는 상황이지만, 일부가 공격을 하지 않으면 지는 상황에 있다. 따라서 장군들이 모두 동일한 시간에 공격한다고 합의를 해야 하는 상황인데 이들이 한곳에 모이기는 어렵다. 따라서 장군들간 전령을 통해 합의를 해야지만 이 과정에서 적국의 첩자가 메시지가 변경할 수도 있다. 따라서 이들 첩자들의 악의적 방해에도 합의가 제대로 될 방법이 필요하다. 블록체인과 비잔틴 장군 문제는 아주 밀접한 관련을 갖는다. [[블록체인]] [[네트워크]] 상에 새로운 블록들이 생성되는 과정에서 기존의 악의적인 공격으로 잘못된 [[블록]]이 생성될 수 있다. 이는 블록 안의 트랜잭션이 변경되어 재산적 피해로도 이어질 수 있다. 따라서 이를 막기 위한 합의 알고리즘이 필요하다. 간단하게 생각하면 모든 노드가 YES! 하면 되는거 아니야? 싶지만 그렇게 되면 악의적 공격이 하나라도 들어왔을 때 블록체인 네트워크는 마비된다. 따라서 어느 정도의 노드간 상태 비일치는 허용해주는 방법으로 [[합의 알고리즘]]이 만들어져야 한다.<ref name="PBFT 블로그">tyami 〈[http://tyami.net/221268715771 PBFT(Practical Byzantine Fault Tolerance) 공부해보자]〉, 《네이버 블로그》, 2018-05-05</ref> |
==비잔틴 장애 허용== | ==비잔틴 장애 허용== | ||
− | 비잔틴 장애 허용이 바로 그것이다. 비잔틴 장애 허용에서는 일부노드(장군)의 결과가 달라도 어느 정도 | + | 비잔틴 장애 허용이 바로 그것이다. 비잔틴 장애 허용에서는 일부노드(장군)의 결과가 달라도 어느 정도 이상의 결과가 동일하면 합의된 것으로 본다. 즉, 다수결의 원칙을 따르는 합의 알고리즘이라고 할 수 있다. [[BFT]]는 여러 가지 방법이 있지만, 블록체인에서는 [[PBFT]]가 많이 쓰이는 듯 하다. <ref name="PBFT 블로그"></ref> |
==프랙티컬 비잔틴 장애 허용== | ==프랙티컬 비잔틴 장애 허용== | ||
− | PBFT는 1999년 제안되었다. | + | PBFT는 1999년 제안되었다. PBFT는 PoW와 PoS의 단점인 파이널리티의 불확실성과 성능 문제를 해결한 것이다. [[블록체인]] 기반 기술에서 많이 채택되고 있는 상황이다. pBFT를 사용하는 코인은 [[질리카]], [[네오]], [[하이퍼레저]], [[R3]] 등에서 사용하는 [[합의 알고리즘]]으로서 Practical Byzantine Fault Tolerance (PBFT)는 프랙티컬 비잔틴 장애허용이라는 뜻이다. 프랙티컬 비잔틴 장애허용은 분산컴퓨팅의 한 이론으로 BFT를 속도와 실용적인 측면에서 개선한 형태다. 이 방식은 [[블록체인]] [[시스템]]에 있어서 약속된 행동을 하지 않고 고의로 잘못된 정보를 전달하는 [[비잔틴 노드]]가 존재할 수 있는 비동기 시스템일 때 모든 [[노드]]가 성공적인 합의를 이룰 수 있도록 개발된 증명 방식이라고 볼 수 있다. pBFT에 대해서 좀 더 자세히 알아보자면, pBFT는 네트워크의 모든 참여자를 미리 알고 있어야 한다. 먼저 참가자 1명이 리더가 되고 자신을 포함한 모든 참가자에게 요청을 보낸다. 그 요청에 대한 결과를 집계한 뒤 다수의 값을 사용해 블록을 확정한다. 부정한 노드 수를 n개라고 하면 노드수는 3n+1개여야 하며, 확정에는 n+1개 이상의 노드가 필요하다. pBFT는 [[비동기 네트워크]]에서 배신자 노드 f개 있을 때, 총 노드 갯수가 3f+1개 이상이면 해당 네트워크에서 이루어지는 합의는 신뢰할 수 있다는 것을 수학적으로 증명한 [[알고리즘]]이다. pBFT방식은 2/3 이상의 노드만 합의가 될 수 있게 개량한 버전이라고 볼 수 있다. pBFT는 2/3 이상의 노드가 합의하면 검증되기 때문에 속도가 향상된다고 볼 수 있으며 노드수가 적어져 보안에 유리하다는 점이 장점이라고 볼 수 있다.<ref>BCEX KOREA 〈[https://blog.naver.com/bcexkorea/221438799103 PBFT와 BFT란? ]〉, 《네이버 블로그》, 2019-01-11</ref> |
==알고리즘== | ==알고리즘== | ||
29번째 줄: | 29번째 줄: | ||
* [[ICT]] | * [[ICT]] | ||
− | {{알고리즘|토막글}} | + | {{합의 알고리즘|토막글}} |
− | |||
− |
2021년 11월 8일 (월) 15:13 기준 최신판
프랙티컬 비잔틴 장애 허용(PBFT, Practical Byzantine Fault Tolerance)은 네오, 질리카, 하이퍼레저, R3, ITC, 텐더민트 등에서 사용하는 합의 알고리즘이다.이 기술은 여러 노드로 구성된 네트워크에서 악의적 공격을 방어하기 위해 만들어졌다.
비잔틴 장군문제[편집]
PBFT를 이해하기 위해서는 비잔틴 장군 문제를 먼저 알아야 한다. 비잔틴 군대는 장군이라는 대표자들간 합의를 통해 전술을 최종 결정한다. 만약 같은 곳을 동시에 공격한다면 충분히 이길 수 있는 상황이지만, 일부가 공격을 하지 않으면 지는 상황에 있다. 따라서 장군들이 모두 동일한 시간에 공격한다고 합의를 해야 하는 상황인데 이들이 한곳에 모이기는 어렵다. 따라서 장군들간 전령을 통해 합의를 해야지만 이 과정에서 적국의 첩자가 메시지가 변경할 수도 있다. 따라서 이들 첩자들의 악의적 방해에도 합의가 제대로 될 방법이 필요하다. 블록체인과 비잔틴 장군 문제는 아주 밀접한 관련을 갖는다. 블록체인 네트워크 상에 새로운 블록들이 생성되는 과정에서 기존의 악의적인 공격으로 잘못된 블록이 생성될 수 있다. 이는 블록 안의 트랜잭션이 변경되어 재산적 피해로도 이어질 수 있다. 따라서 이를 막기 위한 합의 알고리즘이 필요하다. 간단하게 생각하면 모든 노드가 YES! 하면 되는거 아니야? 싶지만 그렇게 되면 악의적 공격이 하나라도 들어왔을 때 블록체인 네트워크는 마비된다. 따라서 어느 정도의 노드간 상태 비일치는 허용해주는 방법으로 합의 알고리즘이 만들어져야 한다.[1]
비잔틴 장애 허용[편집]
비잔틴 장애 허용이 바로 그것이다. 비잔틴 장애 허용에서는 일부노드(장군)의 결과가 달라도 어느 정도 이상의 결과가 동일하면 합의된 것으로 본다. 즉, 다수결의 원칙을 따르는 합의 알고리즘이라고 할 수 있다. BFT는 여러 가지 방법이 있지만, 블록체인에서는 PBFT가 많이 쓰이는 듯 하다. [1]
프랙티컬 비잔틴 장애 허용[편집]
PBFT는 1999년 제안되었다. PBFT는 PoW와 PoS의 단점인 파이널리티의 불확실성과 성능 문제를 해결한 것이다. 블록체인 기반 기술에서 많이 채택되고 있는 상황이다. pBFT를 사용하는 코인은 질리카, 네오, 하이퍼레저, R3 등에서 사용하는 합의 알고리즘으로서 Practical Byzantine Fault Tolerance (PBFT)는 프랙티컬 비잔틴 장애허용이라는 뜻이다. 프랙티컬 비잔틴 장애허용은 분산컴퓨팅의 한 이론으로 BFT를 속도와 실용적인 측면에서 개선한 형태다. 이 방식은 블록체인 시스템에 있어서 약속된 행동을 하지 않고 고의로 잘못된 정보를 전달하는 비잔틴 노드가 존재할 수 있는 비동기 시스템일 때 모든 노드가 성공적인 합의를 이룰 수 있도록 개발된 증명 방식이라고 볼 수 있다. pBFT에 대해서 좀 더 자세히 알아보자면, pBFT는 네트워크의 모든 참여자를 미리 알고 있어야 한다. 먼저 참가자 1명이 리더가 되고 자신을 포함한 모든 참가자에게 요청을 보낸다. 그 요청에 대한 결과를 집계한 뒤 다수의 값을 사용해 블록을 확정한다. 부정한 노드 수를 n개라고 하면 노드수는 3n+1개여야 하며, 확정에는 n+1개 이상의 노드가 필요하다. pBFT는 비동기 네트워크에서 배신자 노드 f개 있을 때, 총 노드 갯수가 3f+1개 이상이면 해당 네트워크에서 이루어지는 합의는 신뢰할 수 있다는 것을 수학적으로 증명한 알고리즘이다. pBFT방식은 2/3 이상의 노드만 합의가 될 수 있게 개량한 버전이라고 볼 수 있다. pBFT는 2/3 이상의 노드가 합의하면 검증되기 때문에 속도가 향상된다고 볼 수 있으며 노드수가 적어져 보안에 유리하다는 점이 장점이라고 볼 수 있다.[2]
알고리즘[편집]
비잔틴장애허용(BFT)은 PoS의 낫씽 앳 스테이크의 문제처럼 네트워크 내부에 배신자(비잔틴노드)가 있어도 합의를 이뤄내기 위해 1980년대부터 연구가 진행된 분산 컴퓨팅 이론이다. 모든 일이 동시다발적으로만 진행되지 않는 비동기네트워크에서 완벽한 합의를 도출하는 문제는 지금까지 분산 컴퓨팅 분야의 대표적 난제로 꼽힌다. 소프트웨어 오류, 악의적 공격 등에서 오는 네트워크 교란도 흔히 발생하기 때문이다. 프랙티컬 비잔틴장애허용(PBFT)은 분산컴퓨팅의 한 이론으로 BFT를 속도와 실용적인 측면에서 개선한 형태다. 두단계의 절차를 거쳐 합의를 검증하며 비잔틴 노드의 수가 전체의 33% 이하일 때 합의의 신뢰성을 수학적으로 보장한다. 그러나 네트워크에 참여하는 모든 노드에 메시지를 뿌리고 받기 때문에 노드의 수가 대규모로 늘어나면 복잡도가 증가해 확장성을 확보하기 어렵고 합의를 도출하기도 어려워진다는 문제가 있다. PBFT 알고리즘은 IBM의 하이퍼레저 패브릭, R3 코다, 리플, 스텔라 등에서 사용되고 있다.[3]
각주[편집]
- ↑ 1.0 1.1 tyami 〈PBFT(Practical Byzantine Fault Tolerance) 공부해보자〉, 《네이버 블로그》, 2018-05-05
- ↑ BCEX KOREA 〈PBFT와 BFT란? 〉, 《네이버 블로그》, 2019-01-11
- ↑ 강민승 기자, 〈PoW? PoS? PBFT? 대세는 `하이브리드 알고리즘`〉, 《매일경제 MBN》, 2018-12-07
참고자료[편집]
- energist, 〈(Blockchain Study) PBFT(Practical Byzantine Fault Tolerance)〉, 《스팀잇》, 2018년 4월
- tyami, 〈PBFT(Practical Byzantine Fault Tolerance) 공부해보자〉, 《네이버 블로그》, 2018-05-05
같이 보기[편집]