-
비잔틴 장군의 딜레마와 블록체인block Chain/ETC 2021. 9. 25. 17:56test
분산화 컴퓨팅의 난제
분산화 컴퓨팅은 여러 컴퓨터를 활용하여 큰 연산을 수행하는 것으로
적은 힘을 많이 들여 큰 힘으로 만드는 시스템이다.
여러 컴퓨터의 협력으로 하나의 결과를 만든다면
여기서 신뢰성이 얼마나 중요한지 알 수 있다.
만약 중간에 컴퓨터가 거짓 행위을 한다면 결국 잘못된 결과로 이끌어낼 것이다.어떻게 하면 서로 떨어져 있는 여러 독립제들이 어떤 행동을 하기 전에 서로 의견이 일치하다는 것을 알 수 있을까?
이러한 문제를 비잔틴 장군의 딜레마 라고 한다.비잔틴 장군의 딜레마
비잔틴 장군의 딜레마에서는
떨어져 있는 각 장군 중 일정 장군 이상이 합동하여 같은 시간에 다 같이 적의 성을 공격해야 이길 수 있는 상황에서
각 장군은 자신 근처에 장군에게 연락하는 식으로 전달하여 결과적으로 모든 장군에게
계획을 전달해야 하는 상황인데
장군들 중에는 배신자가 존재하고 이 배신자는 계획의 시간을 변경하여 전달한다면
어떻게 배신자와 같은 여려 문제 속에서
계획에 맞춰 함께 성을 향해 공격할 것이라는 절대적인 확신을 가질 수 있을까라는 문제이다.작업 증명(Proof-of-work)
작업 증명은 최초의 합의 알고리즘이며
비잔틴 장군의 딜레마로 보면 어떻게 각 장군들이 합의하는지에 대한 해답이다.작업 증명은 블록체인의 보안을 유지하기 위해 해시값을 구하는 과정을 의미한다.
모든 블록체인은 블록 생성 주기라는 것을 가지고 있다.
(비트코인의 경우 10분 이더리움은 15초)
블록체인은 기본적으로 열려있어 관리자가 존재하지 않는다.
따라서 시스템을 망치려는 의도를 가진 자가 네트워크에 참여하여도
네트워크는 정상적으로 작동해야 한다.
새로운 블록을 생성한다는 것은 규칙에 따라 생성해야 하며
예로 비트코인의 경우 10분의 연사력을 사용해야 한다
그리고 이를 증명했을 때 인정받는 구조이다.
즉 자신이 10분간 열심히 일했다는 것을 증명하기 위해 특정 난이도를 가진 해시값을 찾아야 한다.
여기서 10분은 동적인 시간으로 평균 10분을 의미한다.
즉 연사력을 이용하여 해시값을 구하는 과정이 10분보다 짧으면 난이도를 증가시키고
10분보다 길면 난이도를 감소시킨다.
이 해시값은블록 헤더에 들어가 있는
총 80bytes의 데이터를 SAH256 함수에 넣는 것으로 난이도에 해당하는 해시값을 구하게 된다.
하지만 Nonce가 문제이다. 나머지 정보는 누구라도 쉽게 얻을 수 있는 데이터이기 때문에 상관없지만 Nonce는 정해져 있지 않으니
게속된 시도를 통해 결과적으로 원하는 난이도의 해시값이 나온다면 이제 체인에 올라갈 수 있는 유효한 블록이 되는 것이다.
내가 찾은 Nonce는 나만 알고 있지만
블록체인이라는 시스템은 나만 만들어가는 시스템이 아니다.
내가 유효한 블록을 만들었다면
이를 이웃 노드들에게 전달하는 것이다.
그러면 전 세계 노드들이 내가 새로운 블록을 만들었다는 것 알게 되고
이제서야 내 블록이 인정받게 되는 것이다.
만약 전달하지 않으면 내 블록은 체인 위에 올라가지도 않고 내가 이미 Nonce를 찾은 것도 모르고 계속 이웃 노드들은 이 Nonce를 찾고 있을 것이다.
그렇다면 비잔틴 장군의 딜레마에서 나온 배신자처럼
누군가가 틀린 Nonce를 넣고 이것을 체인 위에 올리게 된다면 어떻게 될까.
가짜 Nonce를 만들어 가짜 블록을 만들고
이 가짜 블록을 이웃 노드들에게 전달한다면
가짜 블록을 전달받은 이웃 노드들은
내가 혹시 거짓말하는 것은 아닌지 나의 Nonce를 가지고 해시값을 도출해본다.
그리고 원하는 해시값이 아닌 경우 이를 거절하는 것이다.
이것으로
Nonce를 찾는 건 굉장히 힘든 일이지만
Nonce가 정확한가를 확인하는 건 간단한 일이라는 걸 알 수 있다.
출처
이미지 : https://medium.com/@DebrajG/how-the-byzantine-general-sacked-the-castle-a-look-into-blockchain-370fe637502c
이미지 : https://bitcoin.stackexchange.com/questions/87631/block-header-encoding-serialization'block Chain > ETC' 카테고리의 다른 글
블록체인 확장성에 대한 문제 와 Rollup (0) 2022.09.03 블록체인 에서의 이중 지불 문제 와 해결 (0) 2021.09.25 UTXO 에 대해 알아보자. (0) 2021.09.25