티스토리 뷰
P2P 기반의 블록 체인을 유지하기 위해서는 ①노드들의 블록 생성을 유도하고, ②생성된 블록에 대한 검증 및 단일 체인을 채택해야 한다.
기존의 PoW (Proof of Work)
PoW의 경우 컴퓨팅 파워 기반으로 작업 증명을 이뤄내 블록을 생성하는데, 노드들의 블록 생성을 유도하기 위해 ①블록을 채굴한 Miner들에게 보상을 지급하고 ②컴퓨팅 파워가 가장 많이 들어간 Longest Chain 만을 채택하도록 하였다.
근데 PoW는 전력 소모가 심하고 채굴 단합등으로 인해 몇 세력들로 중앙화 되는 형태로 변질되기도 하였다.
그럼 PoS (Proof of Stake) 는?
PoS (Proof of Stake) 는 자산을 얼마나 가지고 있는지 Stake(지분) 에 따라서 블록을 형성할 확률이 더 높아진다.
지분이 많을수록 해당 네트워크를 필요로 하고 그로 인해서 체인을 잘 유지하려고 한다는게 전제이다.
그림을 보면 B가 지분이 제일 많아 40% 확률로 권한을 획득하여 블록을 형성하고 나머지 노드들은 검증자 (validator)로써 자산들을 증명하게 되고 거래들의 수수료로 나온 보상으로 지분에 대한 이자를 지급된다.
확률상으로 봤을 때 10개의 블록이 형성되면, A는 3개 / B는 4개 / C는 3개 를 형성하게 된다.
블록을 형성하면 노드들은 블록에 합의를 하기 위해 자신들의 지분을 증명하게 된다.
지분이 많을수록 체인을 계속해서 유지할 것이고 블록체인에 참여를 하게 되는 노드들은 ①지분에 따라 공평하게 블록 형성 권한을 받고 블록 형성 시 발생하는 보상을 지분만큼 이자로 받는 개념이 적용되는 것이다.
또한, 참여한 노드들은 자신이 합의하는 블록들을 증명하고 fork된 체인들은 ②더 많은 지분을 검증하는 블록을 보유하는 체인으로 합의가 이뤄진다.
그럼 블록 형성할 노드를 어떻게 선출하지?
보통 지분의 크기에 따라 블록의 형성할 확률이 결정되는데 일반적인 확률상으론 가장 지분이 많은 노드만 선택되는 것을 방지해야 하며 대표적으로 아래 방식들이 있다.
Randomized Block Selection
각 노드들 중 가장 낮은 해시값과 가장 높은 지분의 조합을 가진 노드를 검증자로 선택
Coin Age Selection
토큰이 얼마나 오래 Staking 되었는지에 따라 선택. 코인을 Staking 한 일수 x 코인의 지분 크기로 선출하게 된다.
계속해서 선출되는 것을 막기 위해 Staking 일수를 aging 한다. 한번 선출되면 다시 Staking 일수를 0 부터 시작한다.
Ouroboros PoS 는 무엇인가?
지분 증명의 경우 Stale Grinding Attack 이라는 공격에 취약한데, 노드를 선출하기 위해 마지막 블록 생성자는 추첨을 통해 랜덤 변수를 생성하는데 이 랜덤 변수를 조작할 수 있다는 것이다.
이전 블록 생성자가 자신을 선출할 때 랜덤 변수를 계산하면서 조작하는것을 방지하기 위해서 랜덤 변수 생성에 전체 노드가 참여하는 방식이다.
-> 카르다노에서 채택
PoS 체인 합의할 때 치명적인 문제점
PoS에는 'Nothing at Stake' 라는 문제점이 있는데 지분 증명의 한계 비용이 없다는 것이다.
일단 블록을 형성할 때 악의적으로 fork를 발생시켜 여러 branch가 생길 경우, Validator들은 어떤 블록이든 자신의 지분을 증명하게 될 것이다. 아래 설명을 보자.
Chain의 길이에 따라서 두가지 Attack이 발생한다.
Long Range Attack
지분이 많은 Validator가 악의적인 목적으로 두 체인의 블록을 모두 올바른 블록이라 검증하는 것이다.
그렇게 긴 체인이 형성된 경우 새로 참여한 Validator는 모든 체인이 올바르다고 생각할 것이다. 이 경우 새로 참여한 Validator가 지분이 많으면 악의적인 블록에도 합의를 해버리게 되므로 올바른 거래들도 모두 공격 당하는 형태가 된다.
Short Range Attack
일단 악의적인 fork가 발생하고 나면, Validator들은 항상 두쪽 체인을 합의하려고 할 것이다. 두 체인에 대해 자신의 지분을 증명했다면 어떤 체인이 선택되든 보상받을 수 있기 때문이다.
이렇게 악의적인 체인이 발생했을 때 양쪽에 지분 증명을 해도 잃을 것이 없다는 'Nothing at Stake' 문제가 있다는 것이다. 이 문제는 체인 유지를 함에 있어서 큰 문제이다.
이럴때 해결방안
리워드를 통해 획득한 지분은 특정 기간 이후 사용 가능하게 하여 검증할 수 있는 네트워크 시간을 확보하고
만약에 노드 형성 시 악의적인 거래가 발견될 경우 형성자는 지분을 잃고 추후 블록 형성에 참여할 수 없다.
최근에는 전력 소비로 인한 환경문제 때문에 PoS를 채택한 블록체인 플랫폼들이 많아지고 있으며 필연적으로 보인다.
'Architecture > Security' 카테고리의 다른 글
[암호학] 공개키 암호 방식과 전자서명 (0) | 2021.05.31 |
---|---|
[암호화] Base64 (0) | 2020.03.19 |
[암호화] 양방향/단방향 암호화 (0) | 2019.12.02 |
OAUTH (0) | 2019.06.12 |
- Total
- Today
- Yesterday
- excel parsing
- vuejs
- kubernetes
- 스프링 시큐리티
- SpringBoot
- 비트코인
- 아키텍처
- 스프링
- 사토시 나가모토
- 블록체인
- Bitcoin
- 카르다노
- white paper
- leetcode
- 알고리즘
- gRPC
- k8s
- Vue.js
- Bruteforce
- Spring
- architecture
- Blockchain
- Nealford
- 암호화폐
- Redis
- 동적계획법
- DP
- Java
- CARDANO
- 백준
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |