brunch

You can make anything
by writing

C.S.Lewis

by 레디미 Readyme Aug 03. 2021

블록체인의 원리 - 비트코인의 원리를 알아보자


오늘은 블록체인이라는 단어를 탄생시킨 비트코인, 이 비트코인의 원리를 알아보려고 합니다.

비트코인에 대해 알아보기 전에 먼저, 저번 시간 복습을 간단하게 진행하고 넘어가겠습니다.


기존의 전자 금융거래 시스템에서 자산, 화폐가 디지털화가 되기 어려운 이유는 디지털 데이터는 복제와 조작이 쉽기 때문이라고 말씀드렸습니다. 하지만 복제와 조작은 화폐 및 증권이 가장 가져선 안될 특징이고, 전자금융 시스템을 만들기 위해서는 신뢰할 수 있는 기관이 들어와서 자산을 디지털화 하고, 이를 사람들이 신뢰하며 거래를 하는 형태로 지금까지 거래가 이루어졌습니다.






하지만 저번 시간에 설명드린 것처럼 비트코인은 신뢰할 수 있는 기관 없이도 P2P로 서로 신뢰하지 않아도 신뢰할 수 있는 금융 시스템을 만들었습니다.


사토시 나카모토는 이러한 시스템을 두 가지를 가지고 만들었습니다. 먼저 신원인증을 없앴습니다. 기존 금융 시스템을 이용해서 송금을 하거나 결제를 할 때에는 먼저 내 자산임을 증명하기 위해서 신원인증, 본인을 확인하는 절차를 가져야합니다.



출처: https://www.hankookilbo.com/News/Read/A2020110917380005849?did=MN


그러나 신원인증을 하기 위해서는 먼저 신원인증 기관에 내 정보를 맡기고 등록을 해야만 전자상거래에 참여할 수 있게 됩니다. 그러면 인증기관이 중간에 들어오게 되고, 거래를 자유롭게 할 수 없게 되고, 또한 불편을 초래하게 됩니다. 마치 공인인증서처럼 말이죠.


그래서 사토시 나카모토는 먼저 신원인증을 없애고, 누구나 지갑 프로그램을 설치하면, 이를 통해서 거래를 할 수 있는 시스템을 만들었습니다. 이런 시스템이 어떻게 돌아가는지는 잠시 후에 더 자세히 살펴보겠습니다.


두번째로는 신원인증 문제를 해결하더라도 이중 지불 문제, 영어로는 double spending problem이 발생할 수밖에 없습니다. 이중 지불 문제는 동시에 트랜잭션을 발생시킬 때 둘 중에 무슨 트랜잭션을 인정할 것인지에 대한 문제로, 분산 시스템에서의 난제로 꼽히는 문제입니다. 이를 비트코인이 어떻게 해결했는지도 잠시 후에 더 자세히 살펴보도록 하겠습니다.





트랜잭션과 전자서명 기술



앞서 설명드린 것과 같이 비트코인 백서에서 다루는 것은 크게 두가지입니다.

첫번째로는 신원인증을 대체할 수 있는 트랜잭션과 전자서명 기술, 그리고 이중지불 문제를 해결하기 위한 합의 알고리즘의 도입입니다.


갑자기 아무 설명 없이 자연스럽게 트랜잭션이라는 단어를 사용했는데, 트랜잭션이란 일반적으로데이터의 어떤 상태를 바꾸는 단위를 뜻합니다. 비트코인 네트워크 같은 금융 거래에서는 자산의 상태를 바꾸는 단위를 뜻하며 이 트랜잭션은 거래(송금, 결제)에 대한 데이터를 담을 수 있습니다.


중요한 것은 비트코인에서는 신원인증 절차가 없기 때문에 거래를 할 때 자산에 대한 소유권을 가진 참여자만 해당 트랜잭션을 발생시킬 수 있어야 하는데, 이 때 필요한 것이 바로 전자서명기술이며 이 전자서명에는 공개 키 암호화 방식이 주로 사용됩니다.


공개 키 암호화 방식이란 비밀키와 공개키를 두개 사용하는 암호화 방식입니다. 자신만이 알고 있는 비밀키가 존재하고 또 이 비밀키를 입력값으로 받는 알고리즘을 통해 모두에게 공개해도 되는 공개키를 얻을 수 있으며, 비밀키를 사용하여 원본 데이터의 전자서명을 얻을 수 있고, 그 전자서명의 유효성을 원본 데이터와 공개 키로 검증할 수 있는 암호화 방식을 공개 키 암호화 방식이라고 부릅니다.


비트코인에서 이 공개키는 계좌번호로 쓰이고, 이 공개키 암호 방식은 타원곡선을 기반으로 암호를 만드는데 이는 수학적인 개념이 많이 들어가고 굉장히 어려워서 여기서 굳이 설명하지는 않겠습니다.



출처: 해시넷-타원곡선암호



우리가 이해해야할 것은 이부분입니다. 원본데이터를 비밀키로 암호화해서 전자서명을 받을 수 있으며 이 전자서명은 비밀키에 대응되는 공개키를 이용해서 검증할 수 있다는 것입니다. 공개키로 이 전자 서명을 검증했을 때 참이 나오면 이 전자서명은 특정 비밀키를 가진 사람이 암호화했다는 사실을 알 수 있게 된다는 것입니다.


전자서명에 대해서 간단하게 알아보았다면 이제 어떻게 트랜잭션을 검증하는지 알아볼까요?

하지만 트랜잭션을 검증하는 방법에 대해 알기전에 저희는 해시 함수에 대해 먼저 알아야합니다.




해시 함수는 임의의 데이터를 일정한 길이의 문자열로 바꿔주는 단방향(one-way) 함수입니다.


단방향 함수란 입력값을 통해 출력값을 도출해내기 쉽지만 보시는 바와 같이 출력된 값으로 입력값을 찾기는 매우 어려운 함수를 의미합니다.


또 해시함수의 특징으로는 Message를 아주 조금만 변화시키더라도 전혀 다른 값(산사태효과, avalanche effect)을 출력하기 때문에 더 출력값으로 입력값을 추론하기 어렵습니다. 또, 같은 입력값은 항상 같은 출력값을 출력하기 때문에 결정적(deterministic)이라고 부르며, 검증이 쉬운 특징을 가지고 있습니다.


그래서 만약 입력값을 알고 싶다면 존재하는 모든 입력값을 넣어보아야하고, 이를 영어로는 brute force, 한국어로는 무차별 대입법이라고 부르는 방식을 사용해야합니다.


해시 함수에 대해 간단하게 알아보았으니 다시 트랜잭션으로 돌아와서 트랜잭션을 어떻게 검증하는지 알아보겠습니다.




먼저 전자서명을 만들 때 트랜잭션을 해시 함수에 집어넣어서 특정 해시 값을 얻습니다.

다음으로는 이 해시 값에 본인만이 알고 있는 비밀키를 통해 암호화 하여 전자서명을 만들게 됩니다.




전자서명이 만들어지면 사용자는 비트코인 네트워크에 원본 트랜잭션과 전자 서명을 보내게 됩니다. 비트코인 네트워크는 이제 이를 검증할 때 트랜잭션에 같은 해시 함수를 사용해서 해시 값을 얻어내고, 같은 해시값을 얻은 다음에 공개키, 사용자의 지갑 주소를 가지고 이 전자서명이 이 해시값으로부터 나오는지를 검증합니다. 


만약 참이라면 당연히 이 트랜잭션은 특정 비밀키를 가지고 있는 사람이 보낸 유효한 트랜잭션이고 거짓이라면 유효하지 않은 트랜잭션이니 버리면 됩니다. 사토시 나카모토는 다음과 같은 트랜잭션과 공개키 암호화 방식을 통해 신원인증없이 거래할 수 있는 금융 시스템을 만들었습니다.



이중 지불 문제와 비잔틴 장군 문제


하지만 앞서 설명드린 것처럼 전자서명만으로 해결할 수 없는 문제가 하나 더 있습니다. 바로 이중 지불 문제입니다. 이중지불문제를 해결하지 못하면 한 사람이 여러 개의 서로 모순되는 트랜잭션을 발생시키는 것을 막지 못해 네트워크는 지속할 수 없습니다.


즉, 한 사람이 여러 개의 트랜잭션을 발생시켰을 때 그 중에 어떤 트랜잭션을 선택할지, 무엇을 인정할지에 대해 합의가 필요하고, 이를 합의하는 알고리즘을 합의 알고리즘, 영어로는 consensus algorithm이라고 부릅니다.


그런데 이 이중 지불문제를 보면 분산시스템의 문제인 비잔틴 장군 문제와 같다고 생각할 수 있습니다.






비잔틴 장군 문제는 비잔틴 제국의 장군들이 도시를 포위하려고 합니다. 전투 준비를 마친 각 장군들은 비잔틴 부대가 한꺼번에 성을 공격해야만 성을 함락할 수 있다는 사실을 알고 있고 이들은 모두 전령을 통해서 소통하고 있습니다.


하지만 각 부대를 이끄는 장군중에 배신자가 있을 수 있습니다. 이 배신자들은 합의를 방해해서비잔틴 군의 공격을 실패로 이끄는 것이 목적입니다. 그렇다면 배신자들과 상관없이 장군들이 힘을 합쳐서 공격하려면 어떻게 해야할까요?


이 비잔틴 문제를 생각해보면 이중 지불문제의 문제와 똑같은 문제의식을 가지고 있습니다. 비잔틴 장군 문제에서는 어떤 공격 message가 옳아서 선택해야하는지의 딜레마이고, 이중 지불 문제는 어떤 transaction이 옳아서 선택해야하는지의 딜레마입니다. 즉 분산 시스템에서 정직한 참여자들이 어떻게 합의에 도달할 수 있을지에 대한 문제입니다.


이 문제는 1982년 레슬리 램포트와 쇼스탁, 피스가 공저한 논문에서 처음 언급되었고 분산 시스템에서 아주 어려운 문제로 꼽힙니다. 예를 들어 극단적인 상황을 가정해서 한 명만 정직하고 나머지가 모두 배신자라면 애초에 합의가 이뤄질 수가 없겠죠. 따라서 이 문제를 해결하기 위해서는 몇 가지 가정을 하게 됩니다.


먼저, 배신자의 수가 전체 장군의 수의 1/3 미만이라고 가정하며, 모든 메시지는 올바르게 전달되고, 믿을만한 채널을 사용하며, 모든 메시지는 동기적으로 전달된다는 가정을 해야 이 문제를 해결할 수 있습니다.


가정 자체도 현실적이지 않고, 매우 어렵고, 여러 문제도 발생할 가능성이 높은 문제지만 이 논문에서는 이러한 가정 하에서 합의에 도달하는 방법을 제시했고, 이를 BFT(Byzantine fault tolernance) 방식이라고 부릅니다.


하지만 한 가지 문제가 또 있습니다. 바로 전통적인 비잔틴 장군 문제의 해법은 통신 비용이 너무 비싸다는 것입니다.


배신자의 수와 전체 노드의 수에 따라 합의를 위해 필요한 메시지의 수가 기하급수적으로 증가한다는 것입니다.




이 표는 자료구조에서 시간 복잡도를 의미하고 있습니다. N은 전체 노드의 수이며, t는 배신자의 수 입니다. 배신자의 수인 t는 미리 정할 수 없기 때문에, 비용이 기하급수적으로 늘어날 위험이 있기 때문에 n을 무한정으로 늘릴 수도 없습니다.


그래서 이를 실제 상황에서 사용할 수 있게 변형을 시킨게 PBFT(Practical Byzantine Fault Tolerance) 합의 알고리즘입니다.


그렇다 하더라도 PBFT 역시 BFT의 기본 가정을 따라가기 때문에 서로 메시지를 전달해서 과반 이상의 의견을 따르는 구조기 때문에 네트워크가 단절되거나 하는 상황이 와서 과반 이상이 시스템에서 잠시라도 이탈하면 합의를 이를 수 없습니다. 또 노드의 수가 증가하면 부하가 증가하니까 새로운 노드가 들어오기도 힘든 여전히 폐쇄적인 합의 알고리즘입니다.


그래서 이 PBFT 역시 비트코인이 원하는 누구나 참여하고, 누구나 나갈 수 있는 구조에 적합하지 않습니다. 그래서 비트코인은 새로운 합의 알고리즘을 필요로 했고 그것이 바로 여러분이 많이 들어보셨을 PoW(Proof-of-Work)입니다. 이는 현재 비트코인 채굴에 사용된는 합의 알고리즘입니다.


오늘은 비트코인의 기본적인 원리에 대해서 알아보았습니다. 다음 시간에는 비트코인에 사용되는 합의 알고리즘인 PoW에 대해서 좀 더 자세히 알아보도록 하겠습니다.





해당 콘텐츠는 유튜브 재윤TV 도움을 받아 해당 채널 콘텐츠를 옮겨와 제작되었음을 알립니다.




[재윤TV 소개]


김재윤

- 블록체인 학회 디사이퍼 창립자

- 서울대학교, 가상머신 최적화 박사과정

- 서울대학교, 전기전자공학부


[작성자 소개]


이병헌

-서울대학교 경영학과 & 전기전자공학부 재학중

-서울대학교 블록체인 학회 디사이퍼 6기 회장




재윤TV와 함께 하는 레디미-언더패스가 궁금하다면?



IT 인재 인큐베이팅 서비스

[레디미 온보딩 바로가기]


*언더패스는 21년 9월 13일자 이후로 "레디미 온보딩"으로 리뉴얼 되었습니다.








작가의 이전글 실제 스타트업 업무툴을 미리 만나보는 시간, 언더패스
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari