합의 알고리즘이란 무엇인가요?
블록체인의 가장 중요한 특징 중 두 가지가 탈중앙화, 그리고 합의 알고리즘인 것으로 알고 있는데요. 합의 알고리즘이 정확히 어떤 의미이며, 어떻게 블록체인에서 중요하게 작동하는지 궁금합니다!
블록체인과 같은 P2P 네트워크 시스템에서 각 노드간 정보 도달의 시간차이가 있을 때, 생성된 블록의 정당성을 검토하고 해당 블록을 블록체인에 연결하기 위해 네트워크 참가자들의 합의를 얻기 위한 알고리즘이 필요합니다.
합의 알고리즘의 종류
퍼블릭 블록체인 (Public blockchain)
비트코인의 경우 ‘작업증명 알고리즘’을 사용중이며, 이더리움의 경우 2017년 8월부터 ‘작업증명과 지분증명 알고리즘을 Hybrid 형태로 사용’하고 있습니다. 2018년 지분증명으로 전환을 목표로 하고 있습니다.
작업증명 (Proof of Work, PoW) 블록체인에서 가장 보편적으로 사용중인 합의 알고리즘으로 컴퓨팅 파워를 이용하여 특정 난이도의 해시값을 역함수를 해시화 하여 Nonce 값을 계산해내고 이를 검증하는 것으로 합의를 도출합니다.
지분증명 (Proof of Stake, PoS) PoW의 컴퓨팅 파워 낭비 문제를 해결하고자 개발된 합의 알고리즘으로 노드가 보유한 자산을 기준으로 권한을 분배하여 합의를 도출하고 보상을 분배하는 알고리즘입니다.이외에도 Proof of Elapsed Time (PoET) 등의 다양한 알고리즘 존재합니다.
2. 프라이빗 블록체인 (Private blockchain)
Private blockchain의 경우 보편적으로 PBFT와 Paxos 알고리즘을 사용하고 있으며, Enterprise Ethereum의 대표 프로젝트인 Quorum의 경우 Raft 알고리즘을 채택하여 사용하고 있습니다.
Paxos 가장 일반적인 합의 알고리즘으로 Leader를 선정하고 과반수의 동의에 의해 합의를 이루는 알고리즘 입니다.
PBFT (Practical Byzantine Fault Tolerance) 비잔틴 장군 문제를 해결하고자 고안된 합의 알고리즘으로 투표 메카니즘을 도입한 3단계 프로토콜을 이용한 합의 도출로 프라이빗 블록체인에서 널리 이용됩니다.
Raft Paxos를 보완한 형태로, 투표와 랜덤 타임아웃을 통한 리더 선출로 절차를 단순화 하는 것이 특징입니다.이외에도 SBFT, Tendermint 등의 다양한 알고리즘 존재합니다.
답변이 많아서 안쓰려 했으나,
질문자 분의 의도는 합의 알고리즘이 도대체 무엇이냐는 질문 같은데,
답변자 분들은 합의 알고리즘의 종류 정도의 퍼오기가 많네요..
쉽게 설명드리자면,
A라는 유저가 B라는 유저에게 어떠한 코인 또는 계약(smart contract)를 전달 또는 체결하는 경우, 이를 검증하는 것이 전통적으로는 화폐 또는 계약서의 공증이었습니다.
하지만, 여러가지 제약사항들이 있어, 이를 많은 불특정 다수에게 위임하여 이 계약(트랜잭션)이 정상임을 입증하는 과정을 합의라고 부르고, 이 계약이 정상임을 입증할 때 고의로 잘못할 가능성을 배제하는 방법론을 합의 알고리즘이라고 합니다.
쉽게 말하자면, A가 B에게 코인을 주려고 합니다.
많은 불특정 다수의 사람들이 A가 그동안 주고 받았던 이력을 면밀히 검토하고 B에게 주어도 되는지, 그리고 B의 잔고에 추가 되었을 때 문제가 없는지를 모두 체크한 뒤에 [맞습니다] 라고 확인을 하면 그 중에 51%이상 같은 결과로 맞다고 판단한 사람이 있으면 이 거래는 정상이라고 승인을 해 줍니다.
이러한 트랜잭션이 10분 이상 걸리는 이유는 전 세계의 불특정 다수가 이러한 검증을 거치고 돌아오는 시간 까지 생각보다 많이 걸리고 있으며, 이 검증을 모두 모아서 승인(commit)해주는 시간이 걸리기 때문입니다.
이러한 방식을 합의 알고리즘이라고 하고, 블록체인의 특징인 원장 기재(이력의 기록)의 정합성을 체크하는데 아주 중요한 몫을 하고 있습니다.
하지만, 속도의 이슈, 리소스의 과다 사용등의 이슈로 많은 합의 알고리즘이 제안되어 왔고, 이 합의 알고리즘들이 각각의 블록체인의 특징이 되고 있습니다.
간단하게 설명하겠습니다.
블록체인의 기본은 아시리라 생각됩니다.
기본적으로 분산시스템을 사용합니다. 분산 시스템은 동시에 같은 일을 각자의 시스템에서 처리해도 결과값이 같아야만 합니다.
만일 다르다면 분산시스템을 사용할 수 없게 됩니다.
이를 방지하기 위해서 합의 알고리즘을 도입하게 됩니다.
만약에 a 거래소 사이트를 컴퓨터와 스마트폰 앱으로 동시에 접속하여 a지갑에서 전액을 b지갑과 c지갑으로 동시에 출금요청을 했을때 합의알고리즘이 없을때는 블록체인이 가지는 무결점이 깨질수 있습니다.
이런것들을 방지하기 위하여 합의알고리즘을 채택합니다.
공공형 블록체인의 대표적인 합의 알고리즘은 작업증명(Proof-of-Work)과 지분 증명(Proof-of-Stake)이 있습니다.
먼저 합의 알고리즘이 무엇인지, 그리고 왜 필요한지를 이해해야 합니다. 블록체인은 분산화된 여러 컴퓨터에 동일한 블록을 저장하는 것입니다. 따라서 저장되는 블록은 정보가 위변조 되지 않고 정확한 정보만을 기록해야 합니다. 문제는 위변조 되지 않고 정확한 정보라는 것을 어떻게 증명할 것인가 하는 문제가 있습니다. 이것을 알고리즘으로 해결하는 것이 합의 알고리즘입니다.
가장 쉬운 방법이 참여자(또는 분산 네트워크의 컴퓨터 등)들 중에 가장 많은 편을 드는 쪽의 블록을 정확한 정보라고 선택하는 방법입니다. 이 방법에 대표적인 코인이 비트코인이죠. 이를 PoW라고 합니다. 작업 증명이죠.
그러나 이 방법은 가장 쉽고 현실적이지만 다수결로 하기 때문에 비용이 많이드는 단점이 있습니다.
이러한 단점을 해결하고자 나온 방법이 지문 증명, BFT와 같은 방법입니다. 하지만 이러한 합의 알고리즘은 비트코인의 10년의 경험에서 나타난 문제점을 해결하기 보다는 그들 스스로가 알고리즘이 오래되지 않았기에 아직 모르는 단점이 나타날 수 있습니다. 따라서 아직 어떤 합의 알고리즘이 완벽하다 좋다라고 말하기는 어렵다고 봅니다.
합의 알고리즘 종류와 관련된 내용은 해커눈 홈페이지에 잘 정리되어 있습니다. 구글 크롬으로 번역해서 보시면 도움이 되실 겁니다.
추가 자료 링크 : https://hackernoon.com/a-hitchhikers-guide-to-consensus-algorithms-d81aae3eb0e3