brunch

You can make anything
by writing

C.S.Lewis

by Amang Kim Jun 25. 2018

29. 비트코인과 수학공식 (1/2)

비트코인, 51%공격, 블록체인, 그리고, 확률, 수학

IoT 그리고, AI에 이어 요즘은 비트코인이 광풍이다. 요즘은 코드도 공개가 되어 있고, 서적들도 많이 있고, 코딩스킬을 가지고 있는 사람들이 조금만 들여다보면 암호화폐류와 블록체인을 구현해볼 수가 있으니, 세상 참 좋아지긴 했다. 하긴, 이 정도도 해보지 않은 이들이 너도 나도 전문가라고 떠드는 세상이니, 이 정도만 할 줄 안다고 하면 전문가라고 할 수 있을지도 모르겠다. 어쨋든 나같은 알바생도 조그마한 관심만 있으면 얼마든지 배울 수 있으니, 괜찮은 것같다. 아, 그렇다고 내가 코딩도 하고 암호화폐류를 코딩 하고 하는 능력자는 아니다. 그냥, 비트코인(엄밀히 말하면, 블록체인)에 관심이 있는 사람일 뿐이다. 


서두에서도 이야기 했지만, 요즘은 능력자들도 많고 관련 내용도 많기에 비트코인에 대해서 비교적 쉽게 접할 수 있다. 사실, 관련 자료들이 너무나 많은게 문제이긴 하다. 그리고, 대부분은 사실이라보다는 구라가 많은 것 또한 사실이다. 어쨋든 비트코인을 이해하기 위해서는 "비트코인 백서(white paper)"로 알려진 문서를 알아야 한다. 아시는 분들은 아시겠지만, 이 문서는 비트코인을 처음 제안한 Satoshi Nakamoto의 "Bitcoin: A Peer-to-Peer Electronics Cash System"을 문서를 번역한 것이다. 물론, 사용자(User)의 입장에는 비트코인 백서를 모두 알 필요는 없을 것이다. 어쨋든, 최근에는 이 백서를 잘 풀어서 설명한 자료들도 많으니 이에 대한 설명은 생략하도록 하겠다. 


사실, 오늘 할려고 하는 이야기는 수학에 관한 것이다. 비트코인 백서에서 보면 총 4개의 수학공식이 나온다. 그중 핵심이 되는 공식은 2개(1번, 3번)이다. 오늘은 그 중 한가지 수식에 대해서 이야기를 풀어갈까 한다.

비트코인 백서에 나오는 수학공식 4개 (출처: (영문)비트코인 백서)


51% 공격에 대한 수학적 정리

여러분들도 51%공격에 대한 이야기를 들어본적이 있을 것이다. 이에 대한 것은 여러 글들에서 언급된 적이 많다. 51%관련한 글들을 보면 다음과 같다:


     블록체인 51%공격 주의보

     블록체인 2.0 | 51% 공격은 기능인가 취약점인가?

     PoW를 위기에 빠뜨린 ’51% 공격‘


51%공격(혹은 취약점)이라 함은 채굴이 가능한 노드 중 과반 이상이 공격노드(혹은 장부조작을 하고자 하는 노드)인 경우, 장부의 조작을 합법적으로 할 수 있다는 것이다. 즉, 누군가가 채굴 노드의 과반이상을 통제하여 합법적으로 장부를 조작하는 공격을 뜻한다. 비트코인 백서에 나오는 수학공식 이야기하는데, 갑작스럽게 51%공격(51% Attack)에 대한 이야기로 시작을 할려면 조금 당황할지 모르겠다. 아시다시피, 비트코인 백서에는 51%공격과 직접 연결된 내용은 없다. 또 하나, 비트코인 백서를 자세히 설명한 많은 자료들이 많기는 하지만 유독 한 부분에 대한 설명을 찾기가 어려운데, 그건 바로 PoW에서 등장하는 수학공식에 대한 설명 부분이다. 그리고, 여기에 처음 등장하는 수식이 있다. 비트코인 백서(영문)의 내용을 살펴 보자:  

비트코인 백서에 있는 내용 (11. Calculation) (출처: 비트코인 백서)

비트코인 백서에 처음 등장하는 이 수식이 중요한 이유는 바로 이 부분이 51% 공격과 직접적인 연관이 있기 때문이다. 일단, 이 부분은 조금 읽기(?) 쉽게 정리하여 보았다.

사실, 위의 식은 원래 있던 공식을 다시 정리한 것뿐이다 . 다만, 변수들을 조금 바꾸었고, 변수에 대한 추가적인 설명을 하였다. 위의 수식을 보는 방법은 다음과 같다.


(1) q_0는 공격자 노드(attacker)가 현재 장부를 완료한 시점에서 그 다음 장부를 합법적으로 조작(더 정확하게 말하자면, 다음 장부를 합법적으로 수정하는 것을 의미)할 수 있는 가능성(확률)을 의미 한다. 

(2) p_0는 합법적인 노드가 현재 장부(0)를 완료한 시점에서 다음 장부(0+1)에 합법적으로 수정(혹은 기입)할 가능성을 의미한다. 

(3) 다음노드(0+1)의 입장에서는 정확한(혹은 정직한) 장부로 완료가 되거나, 공격자에 의해 거짓된 장부로 완료 되거나 둘 중 하나가 된다(즉, 그 중간은 없다). 이를 수학적으로 표현하면, p_0 = 1-q_0

(4) 만약, 현재 장부가 아닌, h만큼 과거에서 다음 장부(0+1)를 조작되어 완료될 할 가능성은 q_h가 된다.

(5) 만약, 공격(혹은 추월)을 해야할 장부가 그 다음 장부(0+1)에서 꽤 떨어져 있다면(h가 상대적으로 큰 수), 다음 장부가 공격(혹은 조작)당할 가능성은 0(zero)에 수렴한다 (h가 무한대).

(6) q_h는 공격자가 h개의 장부만큼 떨어진 시점에서 그 다음 장부(0+1)를 조작할 수 있는 가능성(확률)을 의미한다. 


아마, 위의 내용은 비트코인 백서를 나름 잘 분석한 분들이라면 아실만한 내용일 것이다. 하지만, 조금만 더 설명해보도록 하겠다.


(7) h개만큼의 과거(혹은 뒤 쳐진 장부)에서 다음장부(0+1)가 정상적인 장부로 완료 될 가능성은 p_h=1-q_h

(8) 현재 장부를 완료한 시점에서 공격자 노드(q_0)와 정상노드(p_0)의 비율은 채굴 가능한 노드들 중에서 정상노드와 공격자 노드의 비율과 동일 하다. 예를 들어, 백개의 채굴 노드가 있다고 했을 때,  65개가 정상적인 노드라면, p_0=0.65, q_0=0.35가 된다.

(9) 51%공격에서 "51%"는 바로, p_0<=q_0인 경우를 의미 한다. 

(10) 하지만, (위의 수식상으로) 더 엄밀하게 말하면 51%가 아니라, 50(+)%를 의미한다. 즉, 50%보다 조금만 더 높아도 소위 말하는 "51%공격"을 당한다.

(11) 실제로 51%공격을 당할 가능성은, 공격노드가 과반이 되지 않더라도 존재한다.  --수식의 두번째 조건

(12) 실제 다음 장부가 조작될 가능성은 현재 (초기)상태(0)의  정상노드와 공격노드의 비율을 의미할 뿐만 아니라, 만들어질 다음 장부(0+1)까지의 거리 (h)에 의해 결정 된다.


아무래도 (11)과 (12)에 대해서는 조금더 설명이 필요할 것 같다. 많은 사람들이 정상노드의 수가 공격노드의 수보다 클 경우 안전할 꺼라고 생각한다. 하지만, 위에도 언급 했듯이, 설령 정상노드가 공격노드의 수보다 크다고 하더라도(즉, 정상노드가 과반을 넘는다 하더라도), 여전히 장부조작의 가능성이 존재(11) 한다. 정상노드가 과반이 넘을 경우에 그 다음 장부(0+1)가 정상적으로 만들어질 가능성은 조작된 장부와 그 다음 장부 사이의 거리에 의해 결정된다. 예를 들어, 정상노드가 전체 노드의 80%라고 하더라도, 그 다음 만들어질 장부에서 2단계가 뒤쳐져 있다면 (즉, 이 경우, 실제로 추월해야 할 장부는 현재 장부(0) 한개(h=1)임을 뜻함), 공격노드를 통해 그 다음 장부가 조작될 가능성은 여전히 25%(20/80) 존재 한다. 하지만, 추월해야될 장부의 수가 많을 경우는 그 다음 장부가 조작될 가능성은 영(zero)에 가깝다. 


(13) 만약, 초기에 공격노드의 수가 정상노드의 수보다 많거나 같을 경우(즉, q_0 >= p_0), 그 다음 장부(0+1)는 반드시 조작된 장부 이다 -- 수식의 첫번째 조건

(14) 만약, 공격자 노드가 추월해야 할 장부가 없을 경우 (혹은 현재의 장부(0)가 조작된 채로 완료가 되었을 경우) 정상노드와 공격노드의 비율에 관계 없이, 그 다음 장부(0+1)는 무조건 조작된 장부로 만들어진다 (즉, h=0인 경우)


재미있는 점은 위에 언급된 모든 이야기 (1)-(14)이 비트코인 백서에 언급된 수학공식 중 한개에서 나온 것이라는 점이다. 즉, 공식 하나를 제대로 이해 하면, 위에 언급된 내용을 모두 파악 할 수 있다는 뜻이기도 하다. 수학이라는 것이 이래서 유용하다. 나 같은 비전공자에게라도 말이다.


잠시쉬어가는...

시작에도 언급을 했지만, 비트코인에 언급된 수학공식은 총4개이다. 오늘 다룬 것은 그중에 가장 첫 공식이고, 나머지 3개(2~4번)가 남았다. 백서의 내용에서 찾아 보면 다음과 같다:

비트코인 백서에 있는 내용 (11. Calculation) (출처: 비트코인 백서)

사실상 아래 두 공식은 한개(같은 공식)이고, 가장 윗 공식은 조건이다. 다음 글은 나머지 공식들에 대한 이야기를 나눌 것이다. 그리고, 백서에 언급된 코딩 결과물에 대한 이야기도 나눠 볼까 싶다. 

무슨 의미일까? (출처: 비트코인 백서에나온 코딩 결과물)


물론, 반응이 좋다면 말이다. 

 








브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari