[블록체인 기초 스페셜 연재 시리즈 1회] “블록체인, 이것만은 알고가자”

0
7677

지난 2017 하반기에 거래된 토큰 거래량만 하더라도 60 달러가 넘는다. 그만큼 많은 사람들이 블록체인 기술에 관심을 갖고 관련 비즈니스를 설립하거나 이에 투자를 했다는 뜻이다.

지난 6 21 로아인벤션랩에서 매월 넷째주 목요일 마다 진행하는 북클럽, '북브릿지'에서 블록체인을 이해하는 것에 어려움을 겪는 일반인을 대상으로 Find CHAIN팀의 PD 그간 공부한 것을 바탕으로 블록체인 관련 정보를 공유하는 자리를 가졌다. 따라서 앞으로 3주간 행사에서 발표한 내용을 정리하여 Vertical Platform 미디어 채널에 공유하고자 한다.

 

6월호 북브릿지 내용은 "BOOK BRIDGE 북클럽 6월호"포스팅을 통해 확인할 있다.

 

북브릿지 블록체인 스페셜 연재 시리즈 주제는 다음과 같다.

1 : , '블록체인 무엇인가?' 내용 정리

2 : 새로운 자금 조달 방법, ICO 알아보기

3 : Decision-Tree를 이용한 블록체인 프로젝트 사례 분석

 

*본 아티클에는 필진의 개인적인 해석이 들어갈 있다는 점을 감안하여 읽어주기를 바랍니다.

 

Contents Contributor : 김서진 PD


 

글은 이지스퍼블리싱에서 출반한 다니엘 드레셔 저서의, "블록체인 무엇인가?" 기반으로 정리한 글임을 미리 고지한다.

 

디지털 시대에 살고 있는 우리가 겪고 있는 문제는 무엇인가?

디지털 상에서는 디지털 복사로 인해 원본과 복사본을 구별하지 못하는, 즉 ‘이중 지불 문제’가 발생한다. 예를 들어, 하나뿐인 피카소 그림에 대한 저작권을 여러명에게 복사하여 흩뿌릴 경우 해당 피카소 그림에 대한 저작권(소유권)이 누구에게 있는지 확인하기 어렵다. 따라서 해당 그림의 저작권을 A가 B에게 이미 팔았어도 복사된 저작권을 가진 C가 이를 D에게 재판매 하는 이중지불 문제가 발생할 수 있다. 기존에는 이러한 이중 지불 문제를 해결하기 위해 은행, 브로커 등과 같은 신뢰 있는 제 3자에게 데이터 관리 권한이 위임되었으나, 이 역시 중개 수수료, 거래 지연 등의 ‘3자 문제’가 존재한다.

블록체인은 무엇인가?

"블록체인은 디지털, 탈중앙화된 분산형 원장이다(The blockchain is a digital, decentralised, distributed ledger)." , 블록체인은 신뢰성도 안정성도 알 수 없는 독립된 피어들로 구성된 분산 P2P시스템에서의 원장의 무결성을 보장해준다.

장부는 단순 회계기록을 떠나, 소유권, 신원, 지위, 권한 등을 명확화 해주며, 우리는 어떤 '사실' 대해 합의를 하고자 때마다 장부를 찾는다. 이처럼 장부는 타인과의 상호작용에 필수인 신뢰를 제공하는 도구로서 이러한 장부의 관리 방식을 중앙에서 개인에게로 분산화한 혁신을 가져온 블록체인은 앞으로 우리들의 거래방식 거래데이터관리, 사실 증명 등에 파장을 가져 것으로 예상된다.

 

https://blog.theloop.co.kr/2017/03/15/%EB%B8%94%EB%A1%9D%EC%B2%B4%EC%9D%B8-%EA%B8%B0%EC%88%A0-%EA%B0%9C%EC%9A%94/

그렇다면 P2P네트워크는 무엇인가?

P2P네트워크는 분산되어 있는 모든 노드(계정) 동등한 권한을 가지며, 하나의 중앙 서버에 의해 연결 관리되지 않는 네트워크다.

다시 말하자면, 순수분산P2P네트워크인 블록체인 상에서  피어(노드)들은 자신만의 장부(블록체인) 독자적으로 작업 보유하고 있다. 이러한 독립적인 피어들이 정상적인(왜곡되지 않은) 데이터만을 받아들이고, 장부의 내용을 동일하게 유지하도록 하는 것이 블록체인의 핵심 기능이다.

 

앞으로 블록체인이 분산화된 노드간에 동일한 원장을 유지하는, 분산원장기술을 구현하기 위해 직면한 문제와 이를 해결하기 위해 활용한 기술들(독립된 다수의 증언, 해시 함수, 암호 , 합의 알고리즘 등) 대해 살펴봄으로써 블록체인의 작동원리에 대해 알아보고자 한다.

 

1. 소유권 증명 문제 : 독립된 다수의 증언

당신이 집을 나서기에 앞서 집에서 사과 하나를 집어 들고 마트에 간 상황을 가정해 보자. 만약 마트 직원이 사과를 도난당한 것 같다며 당신을 의심스럽게 쳐다보더라도 당신은 스스로 결백을 증명하기는 어려울 것이다. 이때 당신과 무관한 사람들이 이 사과가 당신의 사과가 맞다고 증명해 주면 직원은 보다 당신의 결백을 믿어줄 확률이 높아진다.

이처럼 "동일한 사실을 증언하는 독립적인 목격자가 많을수록 그 사실은 진실일 가능성이 더 높아진다"는 아이디어는 블록체인의 핵심 개념 중 하나다. 즉, P2P네트워크상에서 다수의 독립된 노드가 같은 내용의 원장을 유지함으로써 소유권을 명확화 하는 것이 가능해진 것이다. 이는 반대로 원장에 없는 트랜잭션은 어떠한 것이든 일어난 적이 없었던 것으로 간주된다.

2. 대량의 거래 데이터 검증 및 처리 문제 : 해시 함수

분산 P2P시스템에서는 엄청난 양의 트랜잭션 데이터를 다루기 때문에 고유한 트랜잭션을 식별해 내서 최대한 빨리 처리할 필요가 있다. 블록체인은 분산P2P시스템 상에서도 무결한 원장을 유지하기 위해 개별 노드들은 자신이 전달받은 트랜잭션이 유효한지를 검증한 후 이를 받아들일지 말지를 결정해야 한다. 이때, 데이터 전달과정에서의 조작여부 등을 확인하기위해 데이터를 일일이 비교한다면 많은 시간과 컴퓨터자원이 소모되기 때문에 블록체인은 이러한 처리 속도 문제를 '해시함수'를 통해 해결하고자 하였다.

해시 함수(Hash function)는 어떤 형태의 데이터든 입력 데이터의 길이와 상관없이 고정된 길이의 숫자로 변환하는 함수를 의미한다. 해시 함수 값은 블록체인상에서 다음과 같이 활용된다.

    1) 데이터 비교 및 데이터 변경 감지
해시 함수는 어떤 종류의 데이터든 이에 대해 즉시 해시값을 생성할 수 있으며, 데이터 값이 조금만 변해도 이에 대한 해시 값은 예측 불가능하게 완전히 변경되 버린다. 이러한 해시 함수의 특징 덕분에 개별 노드는 데이터가 일정 시간이 경과한 후 또는 타인에게 전송한 뒤 변경되었는지에 대한 여부를 암호화된 해시 값 두 개만을 대조함으로써 이를 쉽게 확인할 수 있다.

    2) 시간 소모적 계산량 유발을 통한 블록생성 권한 제한
완전히 개방된 P2P네트워크에서는 특별한 자격제한 없이 누구나 블록을 생성할 수 있다. 따라서 모든 노드가 동시다발적으로 블록을 생성해버린다면 노드들이 여러 블록 중 하나의 블록에 합의 하는 것은 거의 불가능에 가깝다(이때, 블록은 거래데이터 등을 모아 놓은 데이터 패킷이라고 할 수 있으며, 예를 들어 비트코인 블록체인의 블록은 최대 1MB 가량의 데이터를 저장할 수 있다). 이는 블록체인의 핵심인 모든 노드가 합의하에 동일한 장부(블록체인)를 유지하는 것에 큰 오류가 된다.
따라서 네트워크 상에서 블록을 생성하는 권한에 제한을 두기위해 최초 블록체인인 비트코인은 '해시 퍼즐'을 활용하여 이를 가장 빨리 푸는 사람이 블록을 생성할 수 있게끔 규칙을 정하였다. 이는 해시 함수의 특징(해시 값을 통해 원래 데이터 값을 역산할 수 없음)을 활용하여 해시 퍼즐을 푸는 경쟁에 참가한 노드가 오로지 컴퓨터 연산(무작정 대입)에만 의존할 수밖에 없게 하기 위함인데. 즉 소수에게 블록을 생성할 수 있는 권한을 부여하는 것이 아닌 경쟁에 참가하여 승리한 누구나 블록 생산권을 획득할 수 있게 하기 위함이다.
추후 모든 노드가 동시에 해시 퍼즐 풀기 경쟁에 참가하는 것은 너무 비효율적이라는 지적이 나오면서 해시퍼즐을 풀 수 있는 노드를 무작위로 혹은 참가노드들의 투표를 통해 선택하는 등 여러 방식이 제기되고 있다.

* 해시 퍼즐 예시

http://homoefficio.github.io/2017/11/19/%EB%B8%94%EB%A1%9D%EC%B2%B4%EC%9D%B8-%ED%95%9C-%EB%B2%88%EC%97%90-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0/

해시 퍼즐을 푸는 방법은 다음과 같다. 상기 <그림>과 같이, 블록을 생성하기 위해서는 소프트웨어 버전, 바로 앞 블록의 블록 해쉬, 머클트리 해쉬(개별 거래의 해쉬 값을 합쳐서 이를 해쉬한 값) 등 이미 주어진 값 외에, 유일하게 자유롭게 변경가능한 데이터 값인 '난스(Nonce)'값을 찾아내어 주어진 데이터들과 결합하여 해시 함수를 통해 해시 값을 계산한 후, 주어진 제약조건에 따라 결과 해시 값을 평가하는 것이다. 예를들어, 'Hello World!'와 합쳐 졌을 때 첫 세자리 수가 모두 0인 해시값을 생성하는 난스를 찾으라' 는 것이 해시 퍼즐의 한 예다.

http://homoefficio.github.io/2017/11/19/%EB%B8%94%EB%A1%9D%EC%B2%B4%EC%9D%B8-%ED%95%9C-%EB%B2%88%EC%97%90-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0/ / 블록체인 무엇인가?_다니엘 드레셔_이지스퍼블리싱

3. 오픈된 공간에서 합법적인 소유자만이 그 자산에 접근할 수 있도록 보장해야 하는 문제 : 암호키

누구에게나 열려 있는 P2P시스템인 블록체인에서는 누구나 접속해서 계산 자원(해시 퍼즐 계산)에 기여하고 새로운 트랜잭션을 시스템에 제출할 수 있다. 그러나 소유권을 다른 계정으로 이전할 시에는 법적으로 허가된 사람만 그 자산에 접근할 수 있도록 보장해야 한다. 이에, 블록체인은 자필 서명의 기능을 디지털 버전으로 만들어 이를 보안 수단으로 활용하는 아이디어를 냈다.
예를 들어 앨리스가 1비트코인을 밥에게 전달하겠다는 거래 데이터를 주변 노드들에게 전달 할 때 앨리스가 해당 거래 데이터에 디지털 서명을 하면, 앨리스의 거래 데이터를 전달받은 노드는 앨리스의 디지털 서명을 통해 다음 세가지 정보를 읽을 수 있다. 1) 계정 식별, 2) 특정 트랜잭션 데이터 내용에 대한 소유자의 동의를 표시, 3) 데이터를 트랜잭션 데이터 이력에 추가하도록 허가함으로써 그 실행에 대한 승인.

디지털 서명이된 트랜잭션 데이터를 전달 받은 개별 노드들이 해당 데이터가 전달과정에서 조작되지 않은, 제대로된 데이터가 맞는지 확인하는 과정은 다음과 같다.(상기 그림 참조)
소유권을 이전하려는 계정의 소유자는 전달하고자 하는 ①데이터의 해시 값을 구한 후 ②자신의 '개인 키'를 사용해 해당 해시 값에 대한 암호문을 생성, 즉 디지털 서명을 한 후, 이를 ③데이터 원문과 함께 다른 주변 노드에게 전달한다. 이를 전달 받은 노드는 디지털 서명을 통해 계정을 식별하고, 해당 계정의 ④개인키와 상응하는 공개 키를 통해 암호문을 복호화하고, ⑤원데이터의 해시 값을 구하여 ⑥두 해시 값을 대조하여 일치한다면 이는 소유자가 승인한 제대로된 데이터로 검증된다.

http://homoefficio.github.io/2017/11/19/%EB%B8%94%EB%A1%9D%EC%B2%B4%EC%9D%B8-%ED%95%9C-%EB%B2%88%EC%97%90-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0/

4. 하나의 블록체인 유지 문제 : 합의 알고리즘

분산P2P네트워크에서 개별 노드들은 중앙서버를 통해 동시에 똑같은 정보를 열람 혹은 전달 받는 것이 아닌, 독자적으로 블록체인을 작업 및 유지해야 한다. 즉 개별 노드마다 자신만의 블록체인을 가지고 작업한다. 이때 서로 동떨어져 있는 두 개의 노드가 거의 동시에 해시 퍼즐을 풀 경우 동시에 서로 다른 블록이 2개가 생겨서 해당 블록 두 개 모두를 전달 받은 노드는 어느 블록을 자신의 블록체인에 연결해야 할지 고민하게 된다. 이를 그림으로 나타내면 다음과 같다.

    1) A노드가 만든 블록과 B노드가 만든 블록이 다를 수 있다?
이때 우리는 동일한 정보를 공유하는 네트워크에서 개별 노드가 어떻게 서로 다른 블록을 생성할 수 있는지에 대한 의문이 들 수 있다. 이는 노드가 블록을 생성하는 방식을 보면 이해할 수 있는데. 노드는 주변 노드로부터 전달받은 거래 데이터를 모아 뒀다가 해시퍼즐 계산(조건에 맞는 nonce값 발견)을 통해 블록을 생성한다(만약 한 노드가 블록을 생성하기 위해 거래 데이터를 모으고 있는 도중에 새로운 블록을 전달 받으면 해당 블록에 들어있는 중복된 거래 데이터는 제거하고 다시 블록생성을 준비한다).
이때 노드 간의 지리적 거리에 따라 새 트랜잭션(거래 데이터 혹은 블록)이 전송되는 데 걸린 시간의 지연 등으로 인해 각 노드가 새 트랜잭션을 전달받는 데에는 시차가 발생한다.
이에따라 동시에 생성된 블록일지라도 블록을 구성한 거래 데이터 이력 혹은 거래 데이터 배치 순서가 다르면 이는 동일한 블록이라고 볼 수 없다(앞서 언급했듯이 해시 함수는 데이터가 조금만 변경되어도 해시 값을 완전히 달라지게함으로 거래 데이터의 순서만 달라져도 각 블록헤더의 해시 값은 완전히 다르다).

    2) 하나의 블록체인을 유지하기 위한 노드간 합의된 약속은?
만약 네트워크 내 모든 노드가 단일 트랜잭션 이력 즉 단일 블록체인을 유지하지 않게 된다면 소유권 확인 요청을 받은 노드마다 서로 다른 결과를 산출하는 심각한 문제가 발생한다. 예를 들어 A노드가 생성한 블록에는 X가 Y에게 1비트코인을 전달했다는 거래내역이 포함되어 있는 반면, B노드가 생성한 블록에는 해당 거래내역이 없다고 가정해 보자.
이때 A노드가 생성한 블록을 체인에 포함한 노드와 B노드가 생성한 블록을 체인에 포함한 노드로부터 동일한 답변을 얻을 수 없으므로 소유권 명확화에 대한 문제가 발생한다.
따라서 블록체인은 합의 알고리즘을 통해 어느 하나의 블록체인에 합의를 해야 할지 결정한다. 이때, 가장 대표적인 합의방식의 예로는 모든 노드가 가장 긴 블록체인을 선택하기로 합의하는 것이다.

앞의 그림과 같은 상황을 다시 가져와 보자. 동시에 빨간 블록과 초록 블록이 생성되어 해당 두 블록을 전달 받은 C노드는 빨간 블록이 포함된 체인을 선택해야 할지 초록 블록이 포함된 체인을 선택해야 할지 고민하게 된다. 이때 초록블록과 연결될 수 있는 분홍 블록을 전달받은 C노드는 분홍 블록 덕분에 더 길어진 '파랑-초록-분홍 블록체인'을 선택한다. 선택 받지 못한 블록은 버려지고 해당 블록에 들어있던 거래는 다시 새로운 블록에 넣어질 때까지 기다려야 한다.

    3) 분홍 블록은 왜 빨간 블록이 아닌 초록 블록 뒤에 연결되나?
그렇다면 분홍 블록은 왜 하필 빨간 블록이 아닌 초록 블록 뒤에 연결되는지에 의문이 생길 수 있다. 이는 앞서 설명 드렸던 해시 함수와 관련된다. 해시 함수의 활용 사례 중 하나인 '해시 참조'는 데이터와 그 데이터가 저장된 장소 정보를 서로 결합하여 해시 값으로 암호화한 것으로 이는 '블록 해쉬'에 적용된다. 블록 해쉬를 설명하기에 앞서 하나의 예를 들겠다. 옷을 맡길 때, 캐비닛에 옷을 넣고 받은 표는 내 옷이 어느 캐비닛에 있는지를 알려준다. 이처럼 옷이 있는 위치와 옷에 대한 정보를 함께 나타내는 표는 해시 참조와 같은 기능을 한다.
블록 해쉬로 돌아와 보자. 블록헤더에는 블록 생성 시각(이를 통해 블록의 생성 순서도 알 수 있다)이 저장된다. 이는 즉 특정 거래 데이터를 저장하고 있는 블록의 위치를 의미한다. 데이터를 담고있는 머클트리해쉬 값과 블록체인 생성시각 등을 결합하여 해시 값으로 암호화한 것이 바로 블록 해쉬이고(즉 블록헤더를 해시화한 값), 해당 블록 해쉬는 다음 블록에 저장되면서 블록이 서로 연결되는 체인 형태를 이룬다. 이처럼 이전 블록의 블록해쉬를 다음 블록에 저장하는 이유는 악의적인 노드가 데이터를 조작 시 이를 빠르게 확인하고, 원본 데이터를 추출하지 못하게 하기 위함이다.
다시 캐비닛 예로 돌아와 보자. 내가 갖고있는 표가 다른 사람 것과 바뀌어 해당 표에서 가리키는 캐비닛을 열었을 때 내 옷이 없으면 나는 내 옷을 찾을 수 없게 된다. 이처럼 해시 함수의 특성에 따라 데이터가 조작될 시 블록의 블록 해쉬 값이 변경되고 해당 블록 해쉬 값을 갖고 있는 블록의 해쉬 값도 줄줄이 변경되어 해당 체인은 더 이상 다른 대다수의 노드들이 갖고 있는 체인과 동일한, 즉 합의된 체인이 아니라는 것을 알 수 있다. 또한 변경된 해시 참조는 더 이상 유효하지 않게 되어 원본 데이터를 추출할 수 없게 된다.

결론적으로, 이처럼 분홍 블록은 초록 블록의 블록 해쉬값을 갖고 있기 때문에 초록 블록 다음에 연결된다. 이때 블록을 생성하는 노드가 분기(동시에 2개의 블록이 생겨서 체인이 갈라지는 현상)가 발생했을 시 어느 블록의 블록 해시를 참조할지는 해당 노드가 결정한다.

이상으로 블록체인이 어떻게 서로 신뢰할 수 없는 개별 노드간에서도 중개인 혹은 중앙서버 없이 신뢰할 수 있는 거래 이력을 유지할 수 있는지에 대해 알아보았다.

지금까지 설명한 블록체인은 비허가형, 퍼블릭 블록체인으로 누구나 네트워크에 참여하여 새로운 거래 내역을 시스템에 제출하고 블록을 생성할 수 있다. 반면에 네트워크 참여 노드를 제한하는 허가형, 프라이빗 블록체인도 있다는 사실을 참고하길 바란다. 프라이빗 블록체인은 보다 신뢰있는 주체들만 모인 네트워크로 기존 퍼블릭 블록체인의 느린 거래 처리 속도 문제, 불특정 다수에게 거래내역 공개 문제 등을 해결하기 위해 개발되었다.


 

이번 주제는 블록체인의 작동 원리에 대한 설명으로 보다 모호하고 직관적으로 잘 와 닿지 않는 개념이 많았을 수 있다. 반면에 다음주에 공개될 주제는 "새로운 자금 조달 방법, ICO"에 대한 것으로 보다 블록체인에 직접 참여할 수 있는 방법에 대한 설명이 있을 예정이니 많은 기대 바란다.

 

(+) 참고자료

블록체인 무엇인가?(다니엘 드레셔 저/이병욱 역/이지스퍼블리싱/2018.02.19.)

블록체인 기술 개요

블록체인 한 번에 이해하기

The Blockchain Economy: A beginner’s guide to institutional cryptoeconomics