본문 바로가기
  • 개발을 사랑하는 실실쟌의 블로그입니다
블록체인

[블록체인 기초] 01. 합의 알고리즘

by 실실쟌 2023. 1. 26.

프로젝트가 끝나고 나니까 할일이 갑자기 사라져버려서 심심하다.

그래서 오랫동안(?) 방치한 티스토리에 블록체인 관련 내용을 가득가득! 채우려고 한다.

합의 알고리즘

합의 알고리즘은 블록체인의 무결성을 확보하는 방법 중 하나이다.
중앙집중체계에서는 데이터의 무결성을 중앙에서 확보한다. 중앙이 없는 블록체인에서는 합의 알고리즘을 통해 데이터의 무결성을 확보한다.

어떤 악의적인 노드가 자신에게 유리한 데이터를 담은 블록을 메인체인에 포함시키려고 할 수 있다. 누가 블록을 이어붙일 권한을 가지도록 해야 할까?
또는, 아래와 같이 Stale block[1]들이 존재하는 경우가 있을 수 있다.

이 경우 어느 브랜치가 메인체인인지 알 수 없다.
이러한 문제를 해결하기 위한 것이 합의 알고리즘이다.
합의 알고리즘에는 PoW와 PoS 외에도 여러 가지가 있는데 이번 포스팅에서는 이 두가지만 다뤄 보고자 한다.

PoW Proof-of-Work

작업증명 알고리즘에서 노드는 작업에 참여한 사실을 증명함으로써 블록을 추가할 권한을 얻는다. 작업에 참여한 사실은 (block의) Nonce[2] 값으로 증명된다. 노드들은 mempool에 있는 몇 개의 TX들을 뽑아서 블록을 형성하고, Nonce을 바꿔 가면서 해당 블록의 해시값이 특정한 조건을 만족하도록 한다. 0부터 시작해서 1씩 증가시키면서 조건에 부합하는 Nonce값을 가장 먼저 찾아낸 노드가 블록을 추가할 수 있게 된다. Nonce값을 찾은 블록이 있으면 모든 노드들이 해당 Nonce가 조건을 만족하는지 확인하고 이 확인 과정을 마치면 블록이 (Mother block에) 추가되게 된다. 따라서 PoW에서는 해시 파워가 높은 노드가 권한을 가져가게 된다고 할 수 있다.
이 때 두 노드가 동시에 valid한 블록을 생성할 수 있다. 그 결과 branch가 만들어지는데, 이 중 가장 긴 것(hash power가 가장 많이 소모된 브랜치)을 메인체인으로 선택한다. 따라서 악의적인 채굴자가 오염된 블록을 추가하려고 하는 경우, 전체 채굴자 hash power의 51%를 확보해야 한다. 이는 현실적으로 어렵기 때문에, PoW는 51% 공격을 쉽게 방어할 수 있다는 장점을 가지게 된다.
그러나 작업의 난이도가 올라갈수록 낭비되는 전력이 크다는 점이 단점이다. 비트코인에서는 약 10분에 하나의 블록이 생성될 수 있는 정도로 작업의 난이도를 조절한다. 작업자(채굴자)가 많아진 현재에는 작업에 필요한 hash power가 기하급수적으로 늘어났고, 이는 기업형 채굴자들이 블록 생성을 독점하는 구조로 이어질 수 있다.

PoS Proof-of-Stake

지분증명 알고리즘은 암호화폐 지분을 많이 가진 노드에게 블록을 추가할 권한을 준다. 이 떄는 채굴이 필요하지 않으므로, 노드는 채굴자 대신 '검증자'라고 불리게 된다. 단순히 지분이 많은 노드가 항상 검증자가 된다면 탈 중앙성에 문제가 생기므로, 검증자를 뽑는 여러 방식들이 고안되어 왔다. 예를 들어 확률적 지분증명(Stochastic PoS)에서는 랜덤으로 검증자를 선택하되, 검증자가 될 확률을 지분에 비례하게 설정한다.
PoS에서는 채굴이 필요하지 않기 때문에(혹은 중요성이 덜함) 상대적으로 전력 낭비가 심하지 않다는 장점이 있다. 또한, 지금까지 발행한 화폐의 양이 많은 체인의 경우에는 51% 공격이 PoW를 사용할 때보다 훨씬 많으므로, 이에 대한 보안성도 강하다. 그러나 검증자가 악의적인 블록을 이어붙일 수 있다는 문제가 있다. 이를 처벌하고 방지하는 여러 방법들이 제안되고 있다.

 

 

 


[1] Stale Block : (비트코인에서) 부모가 있고 Validate 되지만 메인체인에 속하지 않는 Block을 말한다. 이더리움에서는 Uncle Block이라고 부른다. (Stale block은 reward를 요청할 수 없는 반면, Uncle block은 reward를 받을 수 있다. 수수료는 받지 못한다.(출처: 이더리움 백서))
[2] Nonce : Nonce에는 Account nonce, PoW nonce가 있다. Account nonce는 Account가 만든 TX 개수이고, PoW nonce는 작업증명을 하기 위한 아무 의미 없는 값이다.


참고자료
https://tokens-economy.gitbook.io/consensus/chain-based-proof-of-stake

댓글