합의 알고리즘

citron03·2022년 3월 5일
0

블록체인

목록 보기
2/19
  • 블록체인에서는 수 많은 사람들이 네트워크에 참가한다.
  • 블록체인 시스템에서는 권위 있는 중앙이 없고, 모든 참여자들은 동일한 데이터의 사본을 저장하고 이는 원본과 사본의 구분이 없다.
  • 블록체인의 데이터는 수 많은 노드에 저장되어 있고, 각각의 노드들은 블록에 기록하는 데이터가 유효한 데이터, 즉 위변조가 일어나지 않은 원본 데이터라는 것을 상호간에 합의가 필요한 것이다.
  • 이때, 다수의 참여자들통일된 의사소통을 하기 위해서 사용하는 알고리즘을 합의 알고리즘이라고 한다.

PoW (Proof-of-Work)

  • 사토시 나카모토가 제안한 합의 알고리즘이다.

  • 강한 보안성을 제공하고 탈중앙화되어 있지만, 자원을 많이 소모하고 특정 채굴 세역이 해시 독점을 통해 생태계를 교란할 수 있는 가능성이 있다.

  • 블록 생성 시간동안, 가장 많은 자원(해시파워)을 제공한 노드가 블록을 생성할 권한을 얻는다.

  • PoW에서는 체인이 두 갈래로 갈릴 수 있다. 하지만, 하나의 체인을 따라가야 하기에 두 체인 중 하나를 선택해야 한다.

  • 이때, 블록이 더 많은 체인이 선택되고 다른 체인은 버린다. (트랜잭션이 취소된다)

  • 이때, 체인이 변경되는 것은 잘못된 합의가 있을 수 있음을 의미하고 liveness를 보장하는 대신 safety를 포기하는 것임을 의미한다.

  • 여러 개의 노드가 동일한 논스의 값을 찾는다면, 가장 먼저 값을 찾는 노드가 블록을 생성하고 보상을 받는다.

  • 이 과정에서 다른 노드들의 작업은 채굴에 실패하고, 이 노드들이 논스값을 찾기 위해서 사용한 에너지는 결과적으로 낭비된다.

  • 비트코인, 라이트코인 등의 암호화폐 블록체인에서 사용된다.

🧅 블록을 생성하기 위해서 Nonce라는 임의의 값을 맞추는 과정을 채굴이라고 한다.

🌃 Liveness over Safety : 잘못된 합의가 이루어질 수 있지만, 어떻게든 합의는 한다.

🌃 Safety over Liveness : 잘못된 가능성이 있다면, 블록을 만들지 않는다.

PoS (Proof-of-Stake)

  • PoS는 지분(해당 코인)을 많이 가진 노드에게 블록을 생성할 권한을 준다.
    (블록을 생성할 확률이 높아진다)

  • PoW에 비해서 에너지 소모가 적고 코인을 가진 누구나 네트워크에 참여할 수 있기에 분산화가 잘 되어 많은 노드가 의사 결정 과정에 쉽게 참여할 수 있다.

  • 또한, 블록 생성자의 탈중앙화로 안정성이 높다.

  • 지분에 비례하여 블록을 생성할 권한이 더 많이 부여된다.

  • 채굴자에게는 이자와 같은 방식으로 코인이 지급되며 일정 수 이상의 코인이 보관된 지갑을 블록체인 네트워크에 연결시키면, 보상을 받을 수 있다.

  • 블록 생성자와 지분 생성자의 이해관계를 일치시켜 나쁜의도로 블록을 생성할 동기 부여를 없앤다.

  • 하지만 아직 검증되지 않아 보안성이 확인되지 않았고, 지분이 많은 노드들이 권력을 독점할 가능성이 있다.

  • 퀀텀, 네오, 스트라디스 등의 암호화폐 블록체인에서 사용된다.

🥩 블록을 잘못 생성할 경우 패널티가 부여된다.

DPoS (Delegated-Proof-of-Stake)

  • PoS에서 변형된 알고리즘으로, 지분을 가지는 노드가 투표를 통해서 트랜잭션의 유효성 검사를 다른 노드에 위임하여 증명한다.

  • 모든 노드가 블록 생성에 참여하지 않는다.

  • 대신에, 투표의 결과로 선출된 상위 노드(이오스는 21개, 스팀은 20개)가 모든 권한을 위임받아 블럭을 생성한다.

  • 내가 투표한 노드가 선출되어 블럭을 생성하면 나 역시 보상(인센티브)을 받기에 투표에 참여할 동기부여가 된다.
    🍬 코인을 통해 투표할 수 있다.

  • PoS에 비해서 트랜잭션을 빠르게 처리하지만, (이오스의 TPS는 약 3000) 권한을 가진 노드들이 담함을 할 수도 있고, 공개된 상위 노드들이 DDoS 공격 위험에 처할 수 있다.

  • 대표적으로 DPoS 알고리즘을 사용하는 암호화폐 블록체인으로 이오스(EOS), 스팀, 아크, 라이즈가 있다.

PBFT (Practical Byzantine Fault Tolerance)

  • PBFT는 프랙티컬 비잔틴 장애 허용으로, PoW와 PoS의 불확실성과 성능문제를 해결하였다.

  • 분산 컴퓨팅의 한 이론으로 BFT(비잔틴 장군 문제)를 개선하여 더 빠르고 실용적이게 만들었다.

🌸 BFT는 복잡하고 악의적인 행위자가 있을 때에도 정상적으로 시스템이 작동할 수 있도록 한다.

🌸 다만, 신뢰할 수 있는 참여자들이 있는 컨소시엄형 블록체인 시스템에서는 참여자들이 악위적인 행위를 하지 않을 것이라고 믿고 서비스를 하기에 특정 상황에 노드에 문제가 생기는 경우를 대비한 CFT(Crash Fault Tolerance)기반의 알고리즘이 우선된다.

  • 기존의 BFT는 동기식 네트워크에서만 합의가 가능했던 문제가 있었고, PBFT는 이 문제를 해결하여 비잔틴 노드(고의로 잘못된 정보를 전달하는 노드)가 있는 비동기 네트워크에서도 모든 노드가 합의를 이룰 수 있게 하였다.

  • PBFT는 사전에 네트워크의 모든 참여자를 아는 상태에서 참가자 한 명이 리더가 되어 다른 모든 사용자들에게 요청을 보낸다.

  • 그 요청의 결과를 집계하여 다수의 값을 사용하여 블록을 생성한다.

  • 부정한 노드의 수가 n개라면, 노드의 수는 3n+1이 되어야 하고 확정에는 n+1개의 노드가 필요하다.

  • 2/3 이상의 노드가 합의하면 검증되기에 빠르고 노드의 수가 적어져 보안에도 유리하다.

  • PBFT는 트랜잭션의 완결성과 짧은 거래 확정시간, PoS를 기반으로 하기에 거래 비용과 에너지 소비가 작다는 장점이 있다.

  • 하지만 노드의 수가 늘어나면 노드의 합의를 위해서 노드간 통신의 횟수가 기하급수적으로 증가한다.
    🌼 전체 노드의 N제곱 수준

  • 페브릭 등의 암호화폐 블록체인에서 사용된다.

참고 자료 : 코드 스테이츠

profile
🙌🙌🙌🙌

0개의 댓글