안전한 합의 알고리즘은 어떻게 만드나(시빌 공격)
블록체인 기술의 핵심은 P2P네트워크에서 노드(피어)들이 합의 하여 블록을 생성하는 것입니다.
즉, 합의 알고리즘은 노드(채굴자 또는 블록생산자)들이 P2P 망을 만들고, 이들이 하나의 블록체인, 즉 DB를 생산하고 유지하는 역할을 합니다.
더 구체적으로 말하면, 합의 알고리즘은 두가지 역할을 합니다.
먼저, 1). 노드들이 안전하게 합의를 해야 합니다.
둘째로, 노드들이 하나의 DB, 즉 블록체인을 유지해야 합니다.
즉, 합의 알고리즘은 하나의 블록체인을 안전하게 유지하도록 다수의 노드들이 합의를 하기 위한 알고리즘입니다.
합의 알고리즘을 안전하게 유지하기 위해서 반드시 알아야 할 것은 시빌 공격(Sybil attack)입니다.
시빌 공격을 위키피디아에서 찾아보면 아래와 같이 나옵니다.
The attacker subverts the reputation system of a P2P network by creating a large number of pseudonymous identities.
번역: 공격자가 다수의 익명 ID를 생성하여 P2P 네트워크의 평판 시스템을 파괴함.
즉, 시빌 공격은 다수가 합의를 해야 하는 상황에서 발생하며, 이때 공격자가 다수의 익명 ID를 마련하여 이 합의 시스템을 공격하는 것입니다.
즉, 합의를 하는 시스템에서 공격자가 51%의 익명 ID를 만들어서 이 합의에 참여를 하면, 이 경우 이 합의 시스템은 공격자가 완전히 장악하게 됩니다.
즉, 공격자가 아무런 어려움이나 투자 없이, 원하는 만큼의 익명 ID를 만들어서 합의에 참여하는 것은 합의 시스템을 매우 위험하게 만드는 것입니다.
합의 알고리즘은 더 구체적으로 말하면, 다음 두가지 역할을 합니다.
1). 보안: 누가 블록을 만들 것인가?
2). 하나의 블록체인(DB) 유지: 어느 체인이 유효한 체인인가?
첫번째는 안전하게 합의하기 위한 목적이며, 이것은 블록 생성 기회를 어떻게 분배할 것인가를 정하는 것입니다.
즉, 블록생성 기회를 안전하게 분배하기 위한 것이며, 이는 시빌 공격을 막기 위한 방법입니다.
두번째는 포크시 하나의 블록체인을 유지하기 위한 전략에 대한 것입니다.
이 부분은 아래 링크를 참조해주시기 바랍니다.
https://steemit.com/kr/@loum/1
이제 다시 시빌 공격으로 돌아오겠습니다.
시빌 공격을 막기 위한 방법으로 암호화폐에서는 PoW(작업증명)과 PoS(지분증명) 합의 알고리즘을 사용합니다.
즉 P2P 망에서 노드들간의 블록에 대한 합의를 안전하기 유지하기 위해서, 암호화폐는 자신이 투자한 돈만큼의 블록 생성기회를 확률적으로 제공해줍니다.
PoW는 작업, 즉 계산 능력의 크기에 따라 채굴 기회를 비례적으로 제공하는 것입니다.
구체적으로 예를 들면, 만일 어느 노드가 해시 계산 능력이 1이고 일정시간에 1개의 블록을 생성할 수 있다면, 다른 노드가 해시 계산 능력이 10이다면, 동일 기간에 이 노드는 10개의 블록을 생성할 기회를 확률적으로 가지는 것입니다.
또한 PoS는 지분, 즉 코인 개수에 따라 채굴 기회를 비례적으로 제공받는 것입니다.
즉, 일정시간에 코인 개수가 1개인 지갑이 1번의 블록 생성기회를 가진다면, 코인 개수가 10개인 지갑은 동일한 기간에 10번의 블록 생성 기회를 확률적으로 얻을 수 있도록 하는 것입니다.
이와 같이, 블록생성 기회를 해시 계산 능력과 코인의 개수에 비례하게 주어지는 이유는 더욱 많이 돈을 투자한 노드에게 이에 비례하는 블록생성 기회를 주어서 합의를 안전하게 하기 위한 것입니다.
즉, 더 많이 돈을 투자해서 네트워크가 망가졌을 때 더 많이 손해를 보는 노드에게 더 많은 블록 생성기회를 주는 방법입니다. 즉, 공짜로 합의에 참여하는 것을 막는 방법인 것입니다.
시빌 공격이란 공짜로 합의에 참여하는 공격자에 의한 공격이기 때문입니다.
와 정말 깊이 있는 내용 감사합니다.
좋은 내용이라 리스팀 해가요~
설명글.너무 좋네요..
좋은 글 감사합니다! 합의 알고리즘은 정말 중요한 문제인것 같습니다! 너무나도 좋은 글 리스팀하겠습니다 흐흐
정말 깊이 있는 공부를 하고 계시네요. 팔로우 신청합니다!
팔로우 및 보팅합니다!!^^