brunch

You can make anything
by writing

C.S.Lewis

by CURG in Seoul Aug 20. 2018

블록체인: 무엇이 좋은가?

Blockchain : What is it good for?

Originally from : https://freedom-to-tinker.com/2018/02/26/blockchain-what-is-it-good-for/ 

Written by :  Ed Felten

Edited by : 구광민(한양대_PROOFER), 박민서(중앙대_C-Link) 


Intro

블록체인, 암호화폐가 시대의 관심을 받는 것은 분명하다. 연일 기사와 뉴스가 나오고 수많은 사람들이 관심을 가지며 행사도 많이 열린다. 하지만, 적절한 근거와 증거가 과학 기술을 뒷받침 해야한다는 보수적인 시각에서 보자면 블록체인은 허구에 불가하고 결국 근본적으로 쓸데 없는 것이라고 볼 수도 있다. 블록체인 및 암호화폐는 분명한 장점이 있다. 필자는 이 글을 통해서 블록체인 및 암호화폐의 본질과 컴퓨터 과학적 가치에 대해서 말하고자 한다. 

블록체인


일단 블록체인에 대해 이야기해보자. 블록체인에는 3가지 핵심아이디어가 있다.


A. 한 대의 머신이 아닌 다수의 머신들에 걸쳐 저장하고 시스템의 상태를 복제

B. 상태 변경 이벤트를 모두 볼 수 있도록 삭제, 변경이 불가능하고 덧붙이기만 가능한(Append-only) 기록에 동의하는 분산 합의 알고리즘

C. 기록 변조에 대해 추적할 수 있도록 하는 암호화 Hash Chaining


3가지 핵심 아이디어는 사실 90년대부터 이미 제안이 되어왔었다. 

단지 위에 3가지 아이디어가 융합되어 엄청난 영향력을 행사하게 된 것 뿐이다.

A 는 우리가 흔히 말하는 ‘탈중앙화’ , ’분산 원장’ 을 의미한다. B는 ‘변경 불가능성’  을 의미한다. 

그리고 C는 B의 근거라고 볼 수 있다. 



탈중앙화 & 분산 원장 


탈중앙화(decentralization) 는 블록체인의 기본적인 특징이다. 말 그대로, 중앙화 되어있는 특정 집단이 없고 ‘믿을 만한 제 3자’가 존재하지 않는다는 것이다. 기존의 대부분의 시스템은 중앙화 되어있는 형태이다. 중앙화 되어있는 상태에서 특정 노드가 공격을 받게되어 데이터가 손실되면 네트워크 전체에 큰 타격을 준다. 하지만, 이를 탈중앙화 시키게 되면 시스템이 훨씬 안정적이게 된다. 


블록체인을 다른 이름으로 분산원장이라고 한다. 그렇다면 블록체인, 분산(distributed) 원장 그리고 탈중앙화는 어떤 관계일까? 먼저 블록체인은 분산 원장 기술을 이용한 하나의 종류이다. 즉, 모든 블록체인은 분산원장이지만 모든 분산원장이 블록체인은 아니라는 것이다. (R3의 corda는 분산원장 플랫폼이지만, 블록체인은 아니다.) 데이터(비트코인에서는 거래내역)가 노드들에게 분산되어 저장되어있고 그 노드들이 중앙화 되어 있지 않은(탈중앙화) 상태로 네트워크를 이루고 있는 것이 블록체인이다. 

<중앙화, 탈중앙화 , 분산>



변경 불가능성 


블록체인에서는 함부로 데이터를 위변조 할 수 없다. 데이터가 블록에 담기고 그 블록이 체인에 연결되면 사실상 데이터를 변경하는 것은 불가능하다. 만약 블록들이 특별한 규칙없이 그냥 체인에 연결된다면 변경 불가능성은 블록체인의 특징이 되지 않았을 것이다. 


체인에 연결되어 있는 블록들은 항상 이전 블록과 특정한 관계를 맺고 있고 자식 블록은 부모 블록의 정보를 가지고 있다. 즉, 부모 혹은 이전의  어느 블록에서 정보가 바뀌거나 바뀌려는 시도가 있다면, 그 블록에 부속된 모든 자식 블록들의 정보 역시 변경된다. 


특정 노드에서 이러한 변경이 일어나게 되면 분산되어 저장되어 있는 데이터와 차이가 생기게 되고 유효하지 않은 정보 취급을 받게 되어 결국 변경하는 것은 거의 불가능하다는 결론에 이르게 된다. 따라서 블록체인에서는 상위의 블록 정보를 변경시킬수는 없고, 기존의 체인에 새로운 정보를 담는 블록을 추가하는 것만 가능하다. 


기록이 되어 체인에 등록된 정보는 undo 할 수 없고 오직 덧붙이기만(append only) 가능하다. 여기서 합의 알고리즘이 사용된다. 합의 알고리즘의 역할은 무엇일까? 위에서 언급하였듯이 블록체인은 ‘분산 원장’이다. 분산되어 있는 형태이다보니 그 시스템의 신뢰도를 보장해주는 장치가 필연적으로 필요하게 되었고 그 신뢰를 보장해주는 것이 바로 ‘합의 알고리즘’인 것이다. 


암호화 Hash Chaining


앞서 변경 불가능성이 성립될 수 있는 이유는 뒤의 블록이 앞의 블록에 대한 정보를 가지고 있기 때문이라고 하였다. 그 앞의 블록에 대한 정보를 previous block 혹은 parent hash 라고 부른다.(비트코인, 이더리움 기준) 해쉬값은 특정 값이 해쉬 함수로 인하여 출력되는 값을 의미한다.


해쉬 함수는 1) 불가역적 일방향 , 2) 고정된 길이 출력이라는 특징을 가지고 있다. 불가역적 일방향의 특징 때문에 해쉬 함수는 출력값을 통해서 입력값을 추적하는 것이 거의 불가능하다. 더불어 이 특징 때문에 디지털 서명 분야에서 자주 사용되기도 한다. 두번째로 해쉬함수는 어느 데이터를 넣더라도 같은 길이의 출력값을 낸다. 한번 예시를 직접 보자. 


<Hello World 와 Hello Worl 의 차이>


hash library 의 sha256을 사용하여 해쉬 결과값을 비교하는 것을 파이썬으로 구현해본 것이다.

‘Hello World’ 를 해쉬 하였을 때의 결과값으로 ‘a591a6d40bf420…..’ 이 나오고 

‘Hello Worl’ 를 해쉬 하였을 때의 결과값으로는 ‘12fec4c65dd….’ 이 나온다. 


input 값 자체는 d 만 빠진 상태로 매우 비슷한 두 값을 넣었지만 결과값은 전혀 다르게 나오게 된다.  

즉, 출력값으로는 입력값을 추적할 수 없다. 


이렇게 추적 불가능한 한 블록의 해시값이 다음 블록의 해시값을 계산하기 위한 input 값 중 하나이다. 그렇기 때문에 특정 블록에서 위조가 이루어지려고 한다면 해시값을 이용해서 변경상황을 파악할 수 있고 추적할 수 있게 되는 것이다. 


<output 값의 길이는 일정>


어느 입력값이 들어가도 나오는 그 출력값의 길이는 같은 것 역시 확인할 수 있다. 사실 입력값이 어떤 용량을 가지고 있더라도 일정한 길이를 가진 출력값을 내기 때문에 ‘충돌’의 문제점도 제기되기는 하지만, 각 생태계마다 알맞는 합의 알고리즘내 암호화 과정을 설계하여서 최대한 문제 발생률을 줄이려고 한다. 

자, 그러면 이제 다시 블록체인의 정의를 다시 내려보자. 


블록체인은 탈중앙화 된 컴퓨팅 네트워크 시스템으로 유지되는 변경 및 삭제 불가능한 분산원장 기술이다.




암호화폐 그리고 스마트 컨트랙트


이번엔 암호화폐에 대해서 이야기 해보도록 하자. 대표적인 암호화폐라고 하면 당연히 비트코인을 떠올릴 것이다. 비트코인은 수많은 특징과 장점을 가지고 있다. 최초의 암호화폐, 블록체인의 시작, 투명한 발행과정과 거래 내역 등등… 비트코인이 상당히 괜찮은 암호화폐인것은 분명하나 장점이 많은만큼 우려되는 부분도 많이 이야기 된다. 거래가 증명되기까지 걸리는 시간, 채굴 중심의 합의 매커니즘으로 인한 과도한 에너지 필요 등 여러가지 부분에 대해서 논의가 오가고 있다. 


이렇게 많은 장점과 단점을 가지고 있는 비트코인은 충분히 괜찮은 암호화폐이지만, 이 글에서는 비트코인은 가지고 있지 않은 특징인 ‘스마트 컨트랙트’에 대해서 말해보고자 한다. 암호화폐가 ‘스마트 컨트랙트’ 와 만나게 되면, 상당히 유용해진다. 



스마트 컨트랙트는 거래 내역을 저장하는 것을 넘어 거래 자체를 제어할 수 있다.



스마트 컨트랙트는 단지 거래에 대한 정보를 저장하는 것을 넘어서, 거래 자체를 제어할 수 있다는 특징이 있다. 스마트 컨트랙트로 거래당사자는 거래에 직접 참여하지 않고 코드로 대신 거래해줄 virtual actor의 행동을 정의하며,  암호화폐의 합의시스템에 의해 virtual actor가 그 코드를 따를 수 밖에 없도록 만든다. 스마트 컨트랙트(smart contract) 라는 이름에는 오해의 소지가 있는데, 사실 일반적으로 우리가 알고있는 법적인 계약(Legal contract) 과는 현저한 차이가 있다. 



가장 큰 차이점은 법이 적용되는 시점이다. 

기존의 법적인 계약 혹은 법은 범법행위를 사전에 차단하지 않는다. 대신, 범법행위를 하였을 때 그에 준하는 처벌을 한다. 즉, 사후조치를 하게 된다. 반면, 스마트 컨트랙트 같은 경우에는 범법행위를 사전에 차단하여 애당초 일어날 수 없게 한다. 이러한 차이점이 스마트 컨트랙트에 대한 신뢰성을 높여준다. 


 그렇다면 컴퓨터과학적 관점에서는 어떨까? 컴퓨터과학 관점에서 스마트 컨트랙트에 대한 흥미로운 점은 조건부 지불이 분산 프로토콜 설계를 위한 필수적인 요소로 되도록 만든다는 것이다. Party가 특정 진행 과정에서 참여의 상태에 따라 보증금 예치를 요구 받을 수 있고, 계산에 의해 준수성이 확인되는 한 해당 예치금은 독립적으로 요구된 절차를 수행하는 party의 조건 충족에 맞춰 전체 또는 일부가 회수된다.


<정상적인 거래 상황>


그림과 함께 다시 설명하자면 각 party는 보증금 예치를 요구 받을 수 있게 된다. 그렇게 보증금을 예치함으로써, 계약 이행을 시작한다. 두 거래 당사자(party)는 거래하기로 약속된 것(A,B) 을 교환한다. 약속된 행동을 다 수행하면 예치한 보증금과 함께 받기로 한 것을 받으며 교환은 끝나게 된다. 


<비정상적인 거래 상황>



하지만 보증금 예치 후에, 한 쪽에서라도 거래 조건을 만족시키지 않는다면, 거래는 이행되지 않는다. 

예를 들어, 요구받은 보증금을 예치 않거나 보증금 예치 후에, 거래 이행시 약속된 행동을 수행하지 않는다면, 거래는 완성되지 않고 예치한 보증금은 돌려받게 된다. 


그러나 스마트 컨트랙트를 일상 생활에서 사용하기 위해서는 현재의 이더리움 보다 더 효율적이고 확장성 있는 플랫폼이 필요하다.   아니면 smart contract 사용 비용이 비효율적일 것이다. 이더리움과 같은 현재 시스템은 확장성이 좋지는 않다. 이것 역시 새로운 연구로 인하여 극복되어야 할 문제이다.


작성된 내용이 블록체인과 암호화폐에 대한 장점의 전부는 아니다. 그러나 설득력있는 예시였길 바란다. 현재 인터넷에 블록체인에 대한 과정과 허풍이 너무 과해서 블록체인에 대한 기본적인 장점이 가려지는 경향이있다. 블록체인과 암호화폐를 투기와 돈벌이의 대상으로만 보지말고 발전과 연구의 대상으로 본다면, 사회가 한 단계 더 발전할 수 있지 않을까?

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