블록체인 합의 알고리즘 (Blockchain Consensus Algorithm)

I. 블록체인 합의 알고리즘의 개요

가. 블록체인 합의 알고리즘 (Blockchain Consensus Algorithm)의 개념

  • 블록체인 네트워크 상에서 데이터(블록)의 무결성 검증 및 생성을 위한 노드 간 미리 정의된 절차 기반 의사결정 알고리즘

나. 분산 네트워크에서 신뢰성 문제점에 따른 합의 알고리즘의 필요성

분산 네트워크에서의 신뢰성 문제점합의 알고리즘의 필요성

문제점1. Double Spending

  • 블록생성 시간 차에 따른 이중 지불 문제

단일 입력값에 대하여 분산된 각 시스템이 동일한 결과 값을 결정해야 함

문제점2. Byzantine General Problem

  • 일부 노드의 악의적 변경에 따른 오류 발생 문제

분산 시스템상에 악의적 노드가 참여하여도 전체 시스템의 신뢰도를 제공하여야 함

 

II. 블록체인 합의 알고리즘의 유형

가. 공개 블록체인(Public Blockchain) 합의 알고리즘의 유형

합의 알고리즘알고리즘 설명대표 플랫폼
PoW
(Proof of Work)
마이닝 증명으로 블록생성, 보상
– 컴퓨팅 파워기반 해시값 계산 경쟁
– 비트코인(Bitcoin)
– 이더리움(Ethereum)
PoS
(Proof of Stake)
– 지분 크기와 생성 날짜 기반 블록 생성
– PoW에너지낭비, Nothing at Stake 해결
– 퀀텀(Qtum)
– 네오(NEO)
– 스트라티스(Stratis)
DPoS
(Delegated PoS)
– 대표 노드에 검증 역할 위임
– 다른 검증 노드가 대표 노드를 감시
– 이오스(EOS)
PoI
(Proof of Importance)
– 네트워크 참여도에 따른 보상 지급
– 블록체인에 기여한 노드 보상
– 넴(NEM)
Casfer– 예치금을 걸고 Finality 투표 참여
– 악의적 행동 시 예치금 몰수
– 이더리움(Ethereum)
(이더리움 하드포크 예정)

나. 사설 블록체인(Private Blockchain) 합의 알고리즘의 유형

합의 알고리즘알고리즘 설명대표 플랫폼
PBFT
(Practical Byzantine Fault Tolerance)
– 참여노드의 다수결 투표기반 합의
– Request → Pre-Prepare → Prepare → Commit → Reply
하이퍼레저(Hyperledger)
– R3 코다(R3 Corda)
Sieve– 합의 형성 전 결과가 가른 경우 중지
– 실행 결과 조기 탐지
하이퍼레저(Hyperledger)
(프로젝트에서 제외됨)
PoET
(Proof of Elapsed Time)
– 작업 경과시간 증명기반 리더 선출
– 모듈형 솔루션, 위조방지 합의
– 소투스 레이크
(Sawtooth Lake)
PoA
(Proof of Authority)
– 개인 신원을 이용한 블록 유효성 검사
– 보상받을 권리 대신 개인신원 확인
– 루니버스(Luniverse)
Tendermint– 지분기반 투표 (DPoS + PBFT 형태)
– 악의적 행위 시 지분 몰수
– 코스모스(Cosmos)
  • BFT(Byzantine Fault Tolerance) 기반 제안/검증/투표 노드 및 리더를 선출하는 Paxos, Raft 알고리즘 다수 사용
  • PBFT와 DPoS 알고리즘 기반 Tendermint 합의 알고리즘의 경우 퍼블릭 블록체인과 프라이빗 블록체인 모두 적용 가능

 

III. 공개/사설 블록체인 합의 알고리즘 비교

항목공개 블록체인 합의 알고리즘사설 블록체인 합의 알고리즘
접근 통제 형태비허가형허가형
참여 대상참여 노드 제한없음식별된 노드만 참여
참여 방식어떤 노드든 참여 가능초대에 의한 참여
보상 여부참여 노드에 보상보상 없음
네트워크 통제별도 통제 없음그룹 또는 중앙 통제
트랜잭션 확인어떤 노드든 확인 가능참여 노드만 확인 가능
주요 알고리즘PoW, PoS, DPoS, PoI, CasferPBFT, PoET, PoA, Tendermint

 

[참고]

  • 소프트웨어정책연구소(SPRi), “블록체인, 이제 산업이다.”, 2018. 2

콘텐츠 사용 시 출처 표기 부탁 드리고, 궁금한 점이나 의견은 댓글 남겨주세요^^