고스트 프로토콜
고스트 프로토콜은(ghost protocol)은 'Greedy Heaviest Object subtree protocol'의 약자로 메인체인을 선택하는 데 있어 가장 가장 긴 체인을 채택하는 알고리즘이다.
개요
2013년 12월 요나탄 솜폴린스키(Yonatan Sompolinsky)와 아비브 조우하르(Aviv Zohar)에 의해 등장한 고스트 프로토콜은 비트코인의 성능과 보안성 향상을 위한 프로토콜이다. 블록체인은 블록들이 네트워크를 통해 전파되는데, 일정한 시간에 맞게 다음 블록을 생성하며 블록의 길이를 결정한다. 하지만 생성되는 블록들의 블록보다 더 긴 블록이 생성되는 경우 이중지불 문제가 발생하게 된다.
이를 보완하기 위해 등장한 고스트 프로토콜은 이러한 블록들을 트리 형태로 생성하여 해당 블록의 부모블록, 조상블록 그리고 자손블록까지 블록의 가중치 값을 계산하여 블록의 길이를 정한다. 이렇게 트리 형태의 블록체인이 형성되면 단일 형태로 생성된 악의적인 블록의 선택을 방지할 수 있고 정보의 무결성을 보장할 수 있을 뿐만 아니라 네트워크의 보안 손실을 방지할 수 있다.
특징
블록 생성 속도와 보안성, 고아블록의 생성 확률에는 연관성이 있다. 블록 생성 속도가 느린 비트코인은 고아블록의 생성확률이 낮아 보안성이 높고, 블록 생성 속도가 빠른 이더리움은 고아블록의 생성확률이 높아 보안성이 낮다. 빠른 블록 생성 속도를 가지고 있는 블록체인들은 높은 고아블록 비율로 인해 보안성 저하라는 문제를 가지고 있다. 2013년 12월 소개된 고스트 프로토콜을 개발한 이스라엘의 요나탄 솜폴린스키(Yonatan Sompolinsky)와 아비브 조우하르(Aviv Zohar)는 이에 대해 블록들이 네트워크를 통해 전파되는데 일정한 시간이 걸리기 때문이라는 결론을 도출해냈다. 만일 채굴자 A가 하나의 블록을 채굴했는데, 이 블록이 채굴자 B에게 전파되기 전에 채굴자 B가 다른 또 하나의 블록을 채굴했다고 하면, 채굴자 B의 블록은 결국 낭비될 것이고 네트워크 보안에 기여하지 못하게 될 것이다.[1]
고아블록 발생 배율은 중앙집중화 문제와도 연관되어 있다. 만약 채굴자 A가 30%의 해시파워를, 그리고 B가 10%의 해시파워를 가지고 있다고 하자. 이때 A가 고아블록을 생산할 위험성은 70%가 된다. 다른 30%의 경우에는 A가 마지막 블록을 만들게 되었고 따라서 즉각적으로 채굴데이터를 가지게 되기 때문이다.[2] 반면 B는 매번 90%의 경우에 고아블록을 생산하게 될 위험성을 가지고 있다. 따라서 블록 생성 주기가 고아비율이 높은 것에 필요한 만큼 충분히 짧다면 A는 단순히 크기가 크다라는 사실 자체만으로 훨씬 더 높은 효율성을 가지게 된다. 이러한 두 가지 효과가 결합되어 블록 생성 주기가 짧은 블록체인에서는 높은 해시파워 점유율을 가진 단일한 풀이 채굴과정에 대한 사실상의 통제권을 가지게 될 가능성이 매우 높아지는 것이다.
고스트 프로토콜은 어느 체인이 가장 긴 것인지 계산할 때 고아블록도 포함함으로써 네트워크 보안 손실 문제를 해결한다. 다시 말해 어느 블록이 가장 큰 전체 작업증명을 가지고 있는지 계산함에 있어서, 그 블록의 모블록과 그 조상뿐만 아니라, 그 블록의 고아자손까지도 더한다는 것이다. 중앙화의 문제를 해결하기 위하여 이더리움은 고아블록들에 대해서도 블록보상을 제공한다. 고아블록도 기본 보상의 87.5%를 받게 되며, 그 고아블록을 포함하고 있는 사촌이 나머지 12.5%를 받게 된다.
사용자 사이에서 거래가 발생하면, 거래내용들이 노드에게 전달되고 이 노드는 해당 거래의 유효성 검증 작업을 하게 된다. 유효한 지갑 주소인지, 이중 지불 문제가 발생하지 않는지 등의 검토를 한 후 유효성 검증이 완료된 거래들은 수수료가 높은 순서, 거래가 진행된 순서 등으로 나열되어 각 노드에서 관리하게 된다. 노드는 블록에 이러한 정보를 담아 채굴자에게 전달하고, 전달받은 채굴자는 블록의 새로운 주소를 찾는 작업을 시작하게 된다. 이때 많은 채굴자가 동시에 채굴을 할 경우, 여러 개의 다른 블록이 동시에 생겨서 충돌이 일어나게 된다. 이 과정에서 합의를 통해 유효한 블록을 선택하며 유효한 블록을 찾아낸 채굴자에게 보상이 주어진다. 이때, 정상적인 채굴 과정을 통해 블록을 생성했음에도 불구하고 선택받지 못한 블록을 고아블록이라고 한다. 고아블록은 체인에 연결되지 않기 때문에 채굴하는데 소비된 시간과 비용이 낭비된다. 고아블록은 블록체인에 연결되지 않기 때문에 채굴하는데 소비된 시간과 비용이 낭비되고, 이로 인해 네트워크 블록 생성 난이도가 감소되어 네트워크의 보안 수준은 낮아지게 된다. [3]
종류
Ethereum GHOST Protocol
GHOST Protocol은 Bitcoin의 성능 향상과 보안성 향상을 위해 나온 알고리즘이다. Ethereum은 이 GHOST Protocol을 약간 수정하여 적용하였다. 이를 통해 빠른 블록 생성 속도를 가지면서 보안성도 높이는 결과를 얻었다. 블록 생성 속도와 보안성, stale 블록의 생성확률에는 연관성이 있다. 블록 생성 속도가 느린 비트코인은 stale 블록의 생성확률이 낮아서 보안성이 높다. 블록 생성 속도가 빠른 이더리움은 stale 블록의 생성확률이 높아서 보안성이 낮다. 하지만 GHOST Protocol을 적용하여 stale 블록을 잘 처리하고 보안성도 높이는 결과를 가져왔다. GHOST Protocol은 stale 블록의 처리에 대한 알고리즘이다. GHOST protocol은 bitcoin을 위해 나왔다. 비트코인은 블록생성시간이 약 10분으로 느리지만 stale블럭의 생성확률이 매우 낮다. 그래서 stale 블록이 발생하면 가장 긴 블록을 메인블록체인(Canonical Blockchain)에 연결하고 나머지 stale 블록은 버린다. 하지만 이를 위해 10분을 기다리므로 비트코인은 매우 느리다. 이를 보완하기 위해 이더리움은 블록생성 시간을 약 12초 정도로 매우 빠르게 만들었다. 그러나 블록이 빠르게 생성되면 그만큼 stale 블록이 생성될 확률이 높아지므로 안정성이 떨어진다. 따라서 이를 보완하기 위해 이더리움은 수정된 GHOST protocol을 적용했다.[4] GHOST Protocol은 Greedy Heaviest Object subTree의 약자이고 말 그대로 가장 큰 무게를 가진 subtree를 선택하는 알고리즘이다. Bitcoin의 경우 fork가 발생했을 때 더 긴 블록이 연결된 블록을 메인 체인으로 하고 Uncle은 버린다. Ethereum의 경우에는 fork가 발생했을 때 더 무거운 쪽을 선택한다. 이더리움은 이런 수정된 GHOST Protocol을 사용한다. 먼저, GHOST Protocol의 기본 메커니즘을 따라간다. 다음은 GHOST Protocol algorithm이다. 이더리움의 수정된 GHOST Protocol로 수정된 GHOST Protocol의 내용은 다음과 같다.
- 하나의 블록은 반드시 하나의 모블록을 지정해야 하며, 0 또는 그 이상의 삼촌을 지정해야 한다.
- 블록 B에 포함된 삼촌은 다음과 같은 속성들을 가지고 있어야 한다.
- B의 k번째 조상의 직접적인 자손이어야 한다. 여기서 2 <= k <= 7.
- B의 조상이어서는 안된다.
- 유효한 블록 헤더여야 하지만, 이전에 확인되었을 필요도, 또는 심지어 유효한 블록일 필요도 없다.[4]
- 이전 블록들에 포함된 모든 삼촌들, 그리고 같은 블록에 포함된 모든 다른 삼촌들과는 달라야 한다(중복포함방지)
- 블록 B에 있는 각 삼촌 U에 대해, B의 채굴자는 코인베이스 보상에 더해 추가로 3.125%를 더 받고, U의 채굴자는 기본 코인베이스 보상의 93.75%를 받는다.
블록 크기와 블록 생성 시간, transaction 처리 성능, fork 수, 보안성은 다음과 같은 상관관계를 가진다. 블록 사이즈와 블록생성속도가 커지면 transaction 처리율이 올라가고 fork되는 블록의 수가 늘어난다. 이것은 블록체인 네트워크의 보안성이 떨어진다는 것이다.[4] Bitcoin에 경우 블록생성속도는 매우 느리다(약 10분). 이로인해 transaction 처리 성능은 낮아지고 대신 fork되는 블록의 수는 작아진다. fork의 수가 작아지므로 stale 블록이 발생하는 빈도가 줄어서 자연스럽게 보안성이 늘어난다. 하지만 블록생성속도가 매우 느리다는 단점이 있다. Ethereum에서는 이것을 개선했다. 블록생성속도를 약 12초 정도로 매우 빠르게 유지하는 것이다. 하지만 그렇게 블록생성속도를 올리면 위와 같은 상관관계에 의해 fork의 수가 많이 늘어난다. 즉 이는 네트워크의 보안성을 많이 낮춘다. 이를 해결하기 위해 이더리움은 수정된 GHOST Protocol을 사용했다. stale 블록에 대해 보상을 주고 가장 긴 것이 아닌 가장 무거운 것을 사용했다. 그리하여 네트워크의 보안성을 올리고 transaction 처리율을 유지하면서 블록생성속도도 빠르게 할 수 있는 것이다. 블록생성속도를 올리는 것은 블록체인 네트워크 전체의 처리율과 아주 밀접한 관계를 가진다. 하지만 이는 블록체인 네트워크의 보안성을 내리지만 GHOST 프로토콜을 이용하여 이를 보완할 수 있다. 따라서 이더리움의 GHOST 프로토콜은 전체 성능과 보안에 아주 중요한 역할을 한다고 할 수 있다.[4]
활용
- 엉클블록
블록 생성에 성공하고 검증에 문제가 없어 이더리움 네트워크를 통해 다른 노드들에게 브로드캐스팅은 되었으나 다른 채굴자가 생성한 다른 블록에 비해 난이도가 낮아 블록체인에 등록되지 못한 블록을 엉클 블록(Uncle Block)이라고 합니다. 비트코인은 고아 블록이라고도 말하는데요. 이러한 엉클 블록이 많아질 경우 여러가지 문제가 발생하게 되는데,
-첫번째, 트랜잭션을 지연시킨다.
가령, 두 명의 채굴자가 거의 동시에 블록을 채굴 할 때 생성된 블록에는 서로 다른 트랜잭션들이 포함되게 됩니다. 따라서 정상 블록에 포함된 트랜잭션은 처리가 되지만 엉클 블록 내에 트랜잭션들은 즉시 처리되지 않습니다. - 두번째, 컴퓨팅의 파워 낭비 두 개의 블록이 거의 같은 시간에 생성 될 경우 블록체인은 두 개의 체인으로 분리되고 이 중에서 길이가 더 긴 체인을 정상으로 등록하게 됩니다. (비트코인의 분기와 같음) 길이가 짧은 다른 체인은 엉클 블록을 포함한 체인이 되고, 이후 엉클 블록체인 뒤에 연결된 블록들은 모두 엉클 블록이 됩니다. 결국, 엉클 블록의 짧은 체인의 생성 과정은 불필요한 해시 계산을 위한 컴퓨팅 파워를 쓴 셈이 되는 거죠. - 세번째, 보안 엉클 블록 생성 후 다음 블록을 생성하면 평균 블록 생성 시간이 더 길어지기 때문에 블록 생성 후 난이도가 줄어들게 됩니다. 난이도가 줄면 블록 타임이 줄어들고 컴퓨팅 파워가 큰 채굴자의 영향력이 커지는 문제가 밸생합니다. 또한, 엉클 블록 비율이 너무 높을 경우 블록체인의 폭이 넓어지고, 자칫 컴퓨팅 파워가 강한 채굴자에 의해 블록체인이 악의적으로 변경되는 등의 문제가 발생 할 수 있습니다.
위에 엉클 블록에 의해 발생되는 문제점들을 이야기 해보았는데 그렇다면 이러한 엉클 블록에 대해서 어떻게 해결할 수 있을까요? 이더리움은 엉클 블록의 문제를 고스트(Ghost, Greedy Heaviest Observed Subtree) 알고리즘을 사용하여 해결하였습니다. 고스트 알고리즘은 블록 생성 시 정상 블록에 최대 2개의 엉클 블록까지 추가하고 보상하여 엉클 블록의 문제점을 해결하게 됩니다. 다음은 이더리움에서 사용하는 고스트 알고리즘에 대한 설명입니다. - 하나의 블록은 반드시 하나의 부모 블록을 지정하며, 0 또는 그 이상의 엉클 블록을 지정한다. 현재는 최대 엉클 블록은 2개까지 지원한다. - 블록 A에 포함된 엉클 블록은 다음과 같은 속성을 갖는다. 블록 A의 k번째 조상의 직접적인 자손이어야 한다. 여기서 2 <= k <= 7, 실제 한 블록이 생성 된 후 블록체인에 등록되고 최종적으로 반영된 사실이 확인될 때까지 최대 생성 시점 이후 6개의 블록이 블록체인에 연결 될 때까지 기다린다. 이를 '6번 확인'이라고 한다. 엉클 블록 역시 6개의 블록 중 하나에 포함되어야 한다. 블록 A의 조상이어서는 안된다. 엉클 블록은 반드시 유효한 블록헤더를 가지고 있어야하지만 미리 검증되거나 유효한 블록일 필요는 없다. 엉클 블록의 채굴자는 일반 블록 생성 시에 받는 보상의 93.75%를 보상으로 받고, 엉클 블록이 포함된 정상 블록의 채굴자에게는 3.125%의 추가 보상을 지급합니다. 참고로, 엉클 블록 내에 포함된 트랜잭션은 처리되지 않기 때문에 수수료 는 엉클 블록 채굴자에게 지급되지 않으나, 비잔티움 버전의 경우 엉클 블록의 채굴자는 해당 엉클 블록을 포함한 정상 블록과 블록 번호 차이에 따른 상대적인 엉클 블록 보상을 받게 됩니다. 이 부분은 위에서 설명한 부분과 다른 부분입니다. - 블록 채굴자의 보상 - 블록 보상(3이더) + 트랙잭션 수수료 + 엉클 블록 1개당 블록 보상의 3.125%(최대 2개) - 엉클 블록 채굴자의 보상 - (8 - (정상 블록 번호 - 엉클 블록 번호)) / 8 * 블록 보상
각주
- ↑ 〈(002) ETHEREUM WHITEPAPER (이더리움 백서)〉, 《티스토리》, 2018-11-21
- ↑ 람보쨩, 〈이더리움 한글 백서〉, 《네이버 블로그》, 2018-01-24
- ↑ 하이콘팀, 〈고스트프로토콜(GHOST Protocol)은 무엇인가?〉, 《하이콘 공식홈페이지》, 2018-10-25
- ↑ 4.0 4.1 4.2 4.3 이홍석, 〈Ethereum GHOST Protocol에 대한 이해〉, 《미디엄 기업》, 2018-07-26
참고자료
- 불곰, 〈이더리움 고스트 프로토콜(Ethereum GHOST Protocol)〉, 《티스토리》, 2019-01-23
- 이홍석, 〈Ethereum GHOST Protocol에 대한 이해〉, 《미디엄 기업》, 2018-07-26
같이 보기