비잔틴 장애 허용 편집하기

이동: 둘러보기, 검색

경고: 로그인하지 않았습니다. 편집을 하면 IP 주소가 공개되게 됩니다. 로그인하거나 계정을 생성하면 편집자가 아이디(ID)으로 기록되고, 다른 장점도 있습니다.

편집을 되돌릴 수 있습니다. 이 편집을 되돌리려면 아래의 바뀐 내용을 확인한 후 저장해주세요.
최신판 당신의 편집
25번째 줄: 25번째 줄:
  
 
==비잔틴 장군의 문제==
 
==비잔틴 장군의 문제==
[[파일:비잔틴 장군 문제.jpg|썸네일|500픽셀|'''비잔틴 장군의 문제''']]
 
 
'''[[비잔틴 장군의 문제]]'''(Byzantine Generals Problem)는 1982년 [[래슬리 램포트]], [[마샬 피즈]]가 함께 쓴 논문에서 소개된 이후 컴퓨터 공학의 고전적인 난제로 꼽히는 문제로 두 장군의 문제에서 더 나아가 장군이 여러 명인 상황을 가정한 것이다. 비잔틴 장군의 문제는 광활한 영토 지역마다 장군들이 통치하는 것을 가정한다. 이웃 나라 공격이 성공하려면 같은 날, 같은 시각에 모든 장군이 이끄는 병력을 집중시켜야 하는데, 이러한 목적을 달성하기 위한 메시지가 올바르게 전달되지 못하면 병력이 분산되어 공격은 실패하게 된다. 또한 장군들 가운데 배신자가 있다면 이러한 가능성은 더욱 커지게 된다. 여기서 비잔틴 장군 문제의 핵심은 동일한 내용의 메시지를 장군들끼리 공유할 수 있는 방법을 찾는 것이다.
 
'''[[비잔틴 장군의 문제]]'''(Byzantine Generals Problem)는 1982년 [[래슬리 램포트]], [[마샬 피즈]]가 함께 쓴 논문에서 소개된 이후 컴퓨터 공학의 고전적인 난제로 꼽히는 문제로 두 장군의 문제에서 더 나아가 장군이 여러 명인 상황을 가정한 것이다. 비잔틴 장군의 문제는 광활한 영토 지역마다 장군들이 통치하는 것을 가정한다. 이웃 나라 공격이 성공하려면 같은 날, 같은 시각에 모든 장군이 이끄는 병력을 집중시켜야 하는데, 이러한 목적을 달성하기 위한 메시지가 올바르게 전달되지 못하면 병력이 분산되어 공격은 실패하게 된다. 또한 장군들 가운데 배신자가 있다면 이러한 가능성은 더욱 커지게 된다. 여기서 비잔틴 장군 문제의 핵심은 동일한 내용의 메시지를 장군들끼리 공유할 수 있는 방법을 찾는 것이다.
  
32번째 줄: 31번째 줄:
 
“모두가 X를 안다는 사실로는 충분하지 않습니다. 모두가 X를 안다는 사실도 모두가 알아야 하며, 또 모두가 X를 안다는 사실을 우리가 모두 다 안다는 사실도 전원이 알아야 한다. 이는 비잔틴 장군의 문제처럼, 분산 데이터 시스템에서 오래된 난제이다.” 이는 2008년 11월 13일 [[사토시 나카모토]]와 [[비트코인]] 개발 작업을 협업했던 [[제임스 A 도널드]]가 사토시에게 보낸 이메일의 일부 내용이다. 제임스 A 도널드가 보낸 말꼬리를 계속 잡는 문구는 컴퓨터 네트워크 분야에서 주로 다루는 ‘[[두 장군의 문제]]’(Two Generals Problem)에서 출발한다. 이후 이 문제는 ‘[[비잔틴 장군의 문제]]’로 확장이 된다.
 
“모두가 X를 안다는 사실로는 충분하지 않습니다. 모두가 X를 안다는 사실도 모두가 알아야 하며, 또 모두가 X를 안다는 사실을 우리가 모두 다 안다는 사실도 전원이 알아야 한다. 이는 비잔틴 장군의 문제처럼, 분산 데이터 시스템에서 오래된 난제이다.” 이는 2008년 11월 13일 [[사토시 나카모토]]와 [[비트코인]] 개발 작업을 협업했던 [[제임스 A 도널드]]가 사토시에게 보낸 이메일의 일부 내용이다. 제임스 A 도널드가 보낸 말꼬리를 계속 잡는 문구는 컴퓨터 네트워크 분야에서 주로 다루는 ‘[[두 장군의 문제]]’(Two Generals Problem)에서 출발한다. 이후 이 문제는 ‘[[비잔틴 장군의 문제]]’로 확장이 된다.
  
결론적으로 비잔티움 장군 문제는 다양한 시나리오에 광범위하게 적용되고 있는 비잔티움 장애 허용 시스템을 탄생시킨 흥미로운 딜레마이다. 블록체인 산업 외에도, 항공, 우주, 원자력 산업에 비잔티움 장애 허용 시스템이 사용되고 있다. 암호화폐 관점에서, 좋은 합의 메커니즘과 함께 효율적인 네트워크 커뮤니케이션을 확보하는 것은 모든 블록체인 생태계에 필수적이다. 이러한 시스템을 보호하는 데는 지속적인 노력이 필요하며, 현존하는 합의 알고리즘은 몇 가지 한계(확장성과 같은)를 아직 극복하지 못했다. 그런데도, 작업 증명과 지분 증명은 비잔티움 장애 허용 시스템에 관한 아주 흥미로운 접근들이며, 잠재력을 가진 애플리케이션들은 광범위한 혁신을 불러일으키고 있다.<ref>바이낸스 아카데미, 〈[https://www.binance.vision/ko/blockchain/byzantine-fault-tolerance-explained 비잔티움 장애 허용 설명  ]〉, 《바이낸스 아카데미》, 2019-08-08</ref>
+
결론적으로 비잔티움 장군 문제는 다양한 시나리오에 광범위하게 적용되고 있는 비잔티움 장애 허용 시스템을 탄생시킨 흥미로운 딜레마이다. 블록체인 산업 외에도, 항공, 우주, 원자력 산업에 비잔티움 장애 허용 시스템이 사용되고 있다. 암호 화폐 관점에서, 좋은 합의 메커니즘과 함께 효율적인 네트워크 커뮤니케이션을 확보하는 것은 모든 블록체인 생태계에 필수적이다. 이러한 시스템을 보호하는 데는 지속적인 노력이 필요하며, 현존하는 합의 알고리즘은 몇 가지 한계(확장성과 같은)를 아직 극복하지 못했다. 그런데도, 작업 증명과 지분 증명은 비잔티움 장애 허용 시스템에 관한 아주 흥미로운 접근들이며, 잠재력을 가진 애플리케이션들은 광범위한 혁신을 불러일으키고 있다.<ref>바이낸스 아카데미, 〈[https://www.binance.vision/ko/blockchain/byzantine-fault-tolerance-explained 비잔티움 장애 허용 설명  ]〉, 《바이낸스 아카데미》, 2019-08-08</ref>
  
 
==합의 알고리즘==
 
==합의 알고리즘==
'''[[합의 알고리즘]]'''은 블록체인 네트워크에서 합의를 달성하는 메커니즘으로 정의할 수 있다. 가장 일반적인 예로 [[비트코인]]의 [[작업증명]](PoW, Proof of Work)을 들 수 있다. 블록체인 중 가장 처음 제시된 비트코인의 합의 알고리즘인 작업증명방식(Proof of Work, POW)는 타임 스탬프(Timestamp)와 서명(Sign, 블록체인에서는 Key)을 통해 이 문제를 해결한다. '장군은 메시지를 보내기 위해 10분의 시간을 가지며, 메시지는 모든 장군의 메시지와 메시지를 보내기 위해 10분을 들였다는 증거를 포함한다.'라는 규칙이 추가됨에 따라 중간의 비잔틴 장군이 존재하더라도 다른 장군들은 이 장군이 거짓임을 밝혀낼 수 있다. 혹은 초기에 메시지를 받은 장군이 존재하더라도 앞선 시나리오처럼 정직한 장군들이 성을 함락할 수 있게 된다. 비트코인을 설계할 당시 [[사토시 나카모토]]는 참여자 모두가 가장 최신의 원장을 같이 보유할 수 있다는 점을 수학적으로 보장할 수 있도록 했다. 우선 비트코인은 참여자가 돈을 받는 순간부터 보내는 순간까지 지켜야 할 기본적인 규정을 특정한 숫자로 표현되도록 설계해놓고 있다. 사토시는 새로운 블록을 만들 때 이런 여러 숫자를 모아 이를 기초로 새로 만들 블록의 고유번호를 찾는 일종의 퍼즐 게임을 풀도록 했는데 퍼즐을 푸는 과정이 곧 작업증명이며 수학 퍼즐이 풀리면 블록이 만들어지며 이를 [[채굴]]이라고 한다. 작업증명을  수행해 퍼즐이 풀렸다면 결국 블록은 부정이 없도록 각종 규정을 지킨 정상 거래를 모아 정상적인 방법으로 만든 원장이라는 의미이다. 마지막에 나온 블록의 고윳값이 정상이면 계산과정에 들어간 모든 숫자 역시 올바른 값이므로 수학적으로도 이 값을 수용해도 좋다는 의미이다. 비트코인은 결국 작업증명을 거친 블록을 받아들이는 방식의 합의 구조를 갖추고 있다. 작업증명을 거친 블록을 실시간 공유함으로써 참여자들은 다른 장군들이 부정을 저질렀는지 걱정할 필요 없이 결국 모두가 항상 같은 원장 상태에 도달해 있게 되는 셈이다. 은행과 중앙기관의 역할은 이러한 비트코인 시스템 내에서 사라졌으며 비잔틴 장애 허용을 달성하는 가장 똑똑한 접근으로 여겨지고 있다.
+
'''[[합의 알고리즘]]'''은 블록체인 네트워크에서 합의를 달성하는 메커니즘으로 정의할 수 있다. 가장 일반적인 예로 [[비트코인]]의 [[작업증명]](PoW, Proof of Work)을 들 수 있다. 블록체인 중 가장 처음 제시된 비트코인의 합의 알고리즘 중 작업증명방식(Proof of Work, POW)는 타임 스탬프(Timestamp)와 서명(Sign, 블록체인에서는 Key)을 통해 이 문제를 해결한다. '장군은 메시지를 보내기 위해 10분의 시간을 가지며, 메시지는 모든 장군의 메시지와 메시지를 보내기 위해 10분을 들였다는 증거를 포함한다.'라는 규칙이 추가됨에 따라 중간의 비잔틴 장군이 존재하더라도 다른 장군들은 이 장군이 거짓임을 밝혀낼 수 있다. 혹은 초기에 메시지를 받은 장군이 존재하더라도 앞선 시나리오처럼 정직한 장군들이 성을 함락할 수 있게 된다. 비트코인을 설계할 당시 [[사토시 나카모토]]는 참여자 모두가 가장 최신의 원장을 같이 보유할 수 있다는 점을 수학적으로 보장할 수 있도록 했다. 우선 비트코인은 참여자가 돈을 받는 순간부터 보내는 순간까지 지켜야 할 기본적인 규정을 특정한 숫자로 표현되도록 설계해놓고 있다. 사토시는 새로운 블록을 만들 때 이런 여러 숫자를 모아 이를 기초로 새로 만들 블록의 고유번호를 찾는 일종의 퍼즐 게임을 풀도록 했는데 퍼즐을 푸는 과정이 곧 작업증명이며 수학 퍼즐이 풀리면 블록이 만들어지며 이를 [[채굴]]이라고 한다. 작업증명을  수행해 퍼즐이 풀렸다면 결국 블록은 부정이 없도록 각종 규정을 지킨 정상 거래를 모아 정상적인 방법으로 만든 원장이라는 의미이다. 마지막에 나온 블록의 고윳값이 정상이면 계산과정에 들어간 모든 숫자 역시 올바른 값이므로 수학적으로도 이 값을 수용해도 좋다는 의미이다. 비트코인은 결국 작업증명을 거친 블록을 받아들이는 방식의 합의 구조를 갖추고 있다. 작업증명을 거친 블록을 실시간 공유함으로써 참여자들은 다른 장군들이 부정을 저질렀는지 걱정할 필요 없이 결국 모두가 항상 같은 원장 상태에 도달해 있게 되는 셈이다. 은행과 중앙기관의 역할은 이러한 비트코인 시스템 내에서 사라졌으며 비잔틴 장애 허용을 달성하는 가장 똑똑한 접근으로 여겨지고 있다.
  
 
===비잔틴 장애 허용 기반 합의 알고리즘===
 
===비잔틴 장애 허용 기반 합의 알고리즘===
41번째 줄: 40번째 줄:
  
 
* '''프랙티컬 비잔틴 장애 허용'''(PBFT)
 
* '''프랙티컬 비잔틴 장애 허용'''(PBFT)
[[파일:Pbft 작동방식.jpg |썸네일|500픽셀|'''프랙티컬 비잔틴 장애 허용''' 작동방식]]
 
 
: [[프랙티컬 비잔틴 장애 허용]](Practical Byzantine Fault Tolerance, PBFT)은 1982년 발표된 "The Byzantine Generals Problem" 논문에서 제안되었으며,<ref>〈[http://itwiki.kr/w/%EB%B9%84%EC%9E%94%ED%8B%B4_%EC%9E%A5%EC%95%A0_%ED%97%88%EC%9A%A9 비잔틴 장애 허용]〉, 《공대위키》</ref> 분산시스템이 약속된 행동을 하지 않는 비잔틴 노드가 존재할 수 있는 비동기 시스템일 때 해당 분산시스템에 참여한 모든 노드가 성공적으로 합의를 이룰 수 있도록 개발된 합의 알고리즘이다. [[프랙티컬 비잔틴 장애 허용]]은 기존의 비잔틴 장애 허용(BFT) 합의 알고리즘이 동기식 네트워크에서만 합의가 가능했던 문제를 해결하여 비잔틴 노드가 있는 비동기 네트워크에서 합의를 이룰 수 있게 하였다. 합의는 다음과 같이 수행한다.
 
: [[프랙티컬 비잔틴 장애 허용]](Practical Byzantine Fault Tolerance, PBFT)은 1982년 발표된 "The Byzantine Generals Problem" 논문에서 제안되었으며,<ref>〈[http://itwiki.kr/w/%EB%B9%84%EC%9E%94%ED%8B%B4_%EC%9E%A5%EC%95%A0_%ED%97%88%EC%9A%A9 비잔틴 장애 허용]〉, 《공대위키》</ref> 분산시스템이 약속된 행동을 하지 않는 비잔틴 노드가 존재할 수 있는 비동기 시스템일 때 해당 분산시스템에 참여한 모든 노드가 성공적으로 합의를 이룰 수 있도록 개발된 합의 알고리즘이다. [[프랙티컬 비잔틴 장애 허용]]은 기존의 비잔틴 장애 허용(BFT) 합의 알고리즘이 동기식 네트워크에서만 합의가 가능했던 문제를 해결하여 비잔틴 노드가 있는 비동기 네트워크에서 합의를 이룰 수 있게 하였다. 합의는 다음과 같이 수행한다.
  
50번째 줄: 48번째 줄:
  
 
: [[프랙티컬 비잔틴 장애 허용]]은 두 번의 브로드캐스트 과정을 이용해 비잔틴 리더나 비잔틴 검증 노드가 네트워크 분기를 위해 이상한, 혹은 임의의 메시지를 보내도 네트워크의 모든 노드는 같은 메시지를 가질 수 있게 하였다. 이러한 [[프랙티컬 비잔틴 장애 허용]] 알고리즘은 IBM Fabric 0.6v이나 1.0v의 Orderer 서비스, R3 Corda의 Notary와 같은 프라이빗 블록체인에서 사용하고 있다.
 
: [[프랙티컬 비잔틴 장애 허용]]은 두 번의 브로드캐스트 과정을 이용해 비잔틴 리더나 비잔틴 검증 노드가 네트워크 분기를 위해 이상한, 혹은 임의의 메시지를 보내도 네트워크의 모든 노드는 같은 메시지를 가질 수 있게 하였다. 이러한 [[프랙티컬 비잔틴 장애 허용]] 알고리즘은 IBM Fabric 0.6v이나 1.0v의 Orderer 서비스, R3 Corda의 Notary와 같은 프라이빗 블록체인에서 사용하고 있다.
 +
[[파일:Pbft 작동방식.jpg |썸네일|500픽셀|가운데|'''프랙티컬 비잔틴 장애 허용''' 작동방식]]
  
 
* '''텐더민트'''(Tendermint)
 
* '''텐더민트'''(Tendermint)
55번째 줄: 54번째 줄:
  
 
* '''우로보로스 비잔틴 장애 허용'''
 
* '''우로보로스 비잔틴 장애 허용'''
: 애초에 [[카르다노]]는 기존 지분 증명 프로토콜이 가지고 있는 한계, 그 중에서도 특히 Grinding Attack을 막기 위해 설계된 지분증명(POS)기반 합의 프로토콜로 "[[우로보로스]](Ouroboros)"가 있는데, 이 기존의 Ouroboros의 디자인에서 영감을 얻은 새로운 BFT 원장 합의 프로토콜이 [[우로보로스 비잔틴 장애 허용]](Ouroboros-BFT)이다. 콘소시엄형으로 유지되는 카르다노 모드를 위한 작업물이며, Haskell과 Rust구현이 있다. 2018년 12월 18일에 1.4버전이 릴리즈되었으며, Cardano 1.5 릴리스는 Byron 코드 베이스에서 [[탈중앙화]]된 새로운 Shelley 환경으로 이동하게 되는 Cardano 프로토콜에 있어 중요한 이정표가 될 준비 과정에 있다고하며, 구체적으로 두 개의 하드 포크 방식으로 진행된다. 한동안 Byron과 Shelley를 같이 운영하고 사용자를 위한 원활한 전환이 이뤄지게 하려고 채택된 방식이며 업그레이드가 최대한 이른 시일 내 올바른 원칙에 기반하여 적절한 방식으로 완료될 수 있도록 하기 위한 것이다. 우로보로스 비잔틴 장애 허용을 사용하면 Shelley로의 구현 및 배포 시간을 단축할 수 있다.<ref>이승현,〈[https://hamait.tistory.com/1035 BFT 간략 정리 : PBFT , SimpleBFT, SBFT , BFT-SMaRt]〉, 《티스토리》, 2019-03-05</ref>
+
: 애초에 [[카르다노]]는 기존 지분 증명 프로토콜이 가지고 있는 한계, 그 중에서도 특히 Grinding Attack을 막기 위해 설계된 지분증명(POS)기반 합의 프로토콜로 "[[우로보로스]](Ouroboros)"가 있는데, 이 기존의 Ouroboros의 디자인에서 영감을 얻은 새로운 BFT 원장 합의 프로토콜이 [[[우로보로스 비잔틴 장애 허용]]](Ouroboros-BFT)이다. 콘소시엄형으로 유지되는 카르다노 모드를 위한 작업물이며, Haskell과 Rust구현이 있다. 2018년 12월 18일에 1.4버전이 릴리즈되었으며, Cardano 1.5 릴리스는 Byron 코드 베이스에서 [[탈중앙화]]된 새로운 Shelley 환경으로 이동하게 되는 Cardano 프로토콜에 있어 중요한 이정표가 될 준비 과정에 있다고하며, 구체적으로 두 개의 하드 포크 방식으로 진행된다. 한동안 Byron과 Shelley를 같이 운영하고 사용자를 위한 원활한 전환이 이뤄지게 하려고 채택된 방식이며 업그레이드가 최대한 이른 시일 내 올바른 원칙에 기반하여 적절한 방식으로 완료될 수 있도록 하기 위한 것이다. 우로보로스 비잔틴 장애 허용을 사용하면 Shelley로의 구현 및 배포 시간을 단축할 수 있다.<ref>이승현,〈[https://hamait.tistory.com/1035 BFT 간략 정리 : PBFT , SimpleBFT, SBFT , BFT-SMaRt]〉, 《티스토리》, 2019-03-05</ref>
  
 
* '''BFT-SMaRt'''
 
* '''BFT-SMaRt'''
83번째 줄: 82번째 줄:
 
* [[위임 프랙티컬 비잔틴 장애 허용]]
 
* [[위임 프랙티컬 비잔틴 장애 허용]]
 
* [[텐더민트 비잔틴 장애 허용]]
 
* [[텐더민트 비잔틴 장애 허용]]
* [[우로보로스 비잔틴 장애 허용]]
 
* [[간단한 비잔틴 장애 허용]]
 
 
* [[비잔틴 장군의 문제]]
 
* [[비잔틴 장군의 문제]]
 
* [[두 장군의 문제]]
 
* [[두 장군의 문제]]
* [[위임지분증명]]
 
 
* [[텐더민트]]
 
* [[텐더민트]]
 +
* [[프랙티컬 비잔틴 장애 허용]]
 +
* [[위임 지분 증명]]
 +
* [[우로보로스 비잔틴 장애 허용]]
 +
* [[간단한 비잔틴 장애 허용]]
  
{{합의 알고리즘|검토 필요}}
+
{{합의 알고리즘|토막글}}

위키원에서의 모든 기여는 다른 기여자가 편집, 수정, 삭제할 수 있다는 점을 유의해 주세요. 만약 여기에 동의하지 않는다면, 문서를 저장하지 말아 주세요.
또한, 직접 작성했거나 퍼블릭 도메인과 같은 자유 문서에서 가져왔다는 것을 보증해야 합니다 (자세한 사항은 위키원:저작권 문서를 보세요). 저작권이 있는 내용을 허가 없이 저장하지 마세요!

취소 | 편집 도움말 (새 창에서 열림)