블록체인 한 번에 이해하기
여러 이슈가 있겠지만, 필자의 짧은 생각으로는 비트코인에 대한 관심의 폭증과 그에 따른 암호화 화폐 시장의 급등락과 ICO(Initial Coin Offering)를 꼽고 싶다.
주변에서 몇 억을 벌었다는 이야기도 심심치 않게 들을 수 있고, 그에 못지 않게 많은 돈을 잃었다는 이야기도 들을 수 있다. 길게 볼 것 없이 올해 초 대비만 하더라도 변동성이 크긴 했지만 비트코인과 기타 암호화 화폐의 가격이 급등한 것은 사실이다.
그래서 거품이다, 17세기 유럽의 튤립 광풍과 다를게 없다 등의 이야기도 많이 들을 수 있다. 분명 가격으로만 보면 틀린 말이 아닐 수도 있다. 게다가 개발자가 아닌 일반인의 관점에서 보면 아무래도 기술적인 내용은 이해하기 어렵고, 가격 급등락에 의한 여러 에피소드는 이해하기 쉬울 테니, 가격에 대한 면이 부각되는 것은 어쩔 수 없는 일이기는 하다.
하지만 마이크로소프트웨어라는 이 잡지를 보고 있는 우리는 소프트웨어를 다루는 개발자들이다. 그리고 비트코인도 당연하지만 소프트웨어다. 그럼에도 불구하고, 우리나라에서는 개발자들마저 비트코인을 바라보는 관점이 일반인의 관점과 크게 다르지 않은 것 같다.
그래서 이번 기회에 개발자답게, 일반인들보다 조금 더 깊게 탐험해 보고, 어떤 의미를 가지고 있는지 알아보자.
이제부터 블록 체인이 어떻게 비트코인이라는 화폐의 바탕이 되는 체계가 될 수 있는지 알아보자. 먼저 화폐가 무엇인지 짧게 되새겨 보자.
현대 사회에서 화폐란 무엇일까? 너무 모호한 것 같으니 질문을 바꿔보자. 현대 사회에서 화폐의 ‘실체’란 무엇일까?
그럼 블록 체인이 어떻게 신뢰의 원천이 될 수 있는지 차례차례 알아보자.
개인의 재산이 오가는 이 송금 과정은 매우 중요하다. 그래서 송금 거래에 필요한 모든 확인 과정은 은행에서 수행되며, 그 기록도 은행에 저장되고 외부로는 공개되지 않는다.
개발자라면 디지털 서명에 대해 희미하게라도 알고 있겠지만, 블록 체인을 얘기할 때 빼놓을 수 없는 중요한 부분이므로 다시 한 번 짚고 넘어가자.
디지털 서명은 비대칭키와 해쉬 함수를 이용해서 다음과 같은 방식으로 데이터의 진위 여부를 확인할 수 있게 해준다.
블록 체인에 담겨 있는 모든 거래 정보에는 이렇게 디지털 서명이 포함되어 있어서 거래 정보가 진본임을 신뢰할 수 있다.
자 이제부터 진짜 블록 체인의 내부로 들어가 볼 차례다. 블록 체인이라는 체인을 이루는 원소인 블록은 무엇일까?
비트코인의 블록 하나에는 평균 약 1,800개의 거래 정보가 포함될 수 있으며, 블록 하나의 물리적인 크기는 평균 0.98Mbyte이다(출처: https://blockchain.info/charts). 블록은 블록 헤더와 거래 정보, 기타 정보로 구성된다.
블록 헤더는 version, previousblockhash, merklehash, time, bits, nonce 이렇게 6개의 정보로 구성된다.
거래 정보는 입출금과 관련한 여러가지 정보를 가지고 있다.
기타 정보는 블록 내에 있는 정보 중에서 블록 헤더와 거래 정보에 해당하지 않는 정보를 말하며, 블록 해쉬 계산에 사용되지 않는다.
이 중에서 블록 체인의 메커니즘을 이해하는 데 중요한 열쇠가 되는 정보는 블록 헤더다.
previousblockhash : 블록 체인에서 바로 앞에 위치하는 블록의 블록 해쉬
merklehash : 개별 거래 정보의 거래 해쉬를 2진 트리 형태로 구성할 때, 트리 루트에 위치하는 해쉬값
nonce : 최초 0에서 시작하여 조건을 만족하는 해쉬값을 찾아낼때까지의 1씩 증가하는 계산 회수
블록 헤더가 중요한 이유는 블록의 식별자 역할을 하는 블록 해쉬가 이 블록 헤더의 6가지 정보를 입력값으로 해서 구해지기 때문이다.
지금까지의 내용을 바탕으로 블록 해쉬를 구하는 과정을 그림으로 나타내면 다음과 같다.
작업 증명에 대해 알아보기 전에, 이제 블록이 무엇인지 기술적인 수준에서 알게 되었으니 블록이 이어져서 만들어지는 블록 체인도 기술적인 관점에서 정리해보자.
블록 체인은 앞에서는 거대한 분산 공개 장부라고 했는데, 기술적으로는 블록이 이어져서 만들어진 블록의 집합체라고 말할 수 있다.
어디서 많이 본 자료 구조 아닌가? 그렇다. 블록 체인은 사실 링크드 리스트다.
블록 체인을 기술적인 측면에서도 살펴봤으니 이제 그 내부로 조금 더 깊게 들어가보자.
자료 구조 관점에서는 링크드 리스트일 뿐인 블록 체인이 신뢰의 원천이 될 수 있는 첫번째 핵심 요소는 작업 증명(Proof of Work)이다.
nonce값은, 이 nonce값을 입력값 중의 하나로 해서 계산되는 블록 해쉬값이 특정 숫자보다 작아지게 하는 값을 말한다.
블록 해쉬의 입력값은 블록 헤더고, 블록 헤더에는 6가지 정보가 담겨 있으며, 이 중에서 5가지는 값이 고정되어 변경할 수 없고, 오직 nonce만 값을 바꿀 수 있다.
이 과정을 그림과 함께 살펴보자. 아래 그림은 블록해쉬가 000000a84...라는 특정값보다 작게 나오게 하는 nonce값을 구하는 과정을 나타내고 있다.
앞에서 설명한 대로 nonce 외의 모든 항목의 값은 이미 정해져 있다.
nonce 값이 0 일 때의 해쉬를 구해보니 000000a84...보다 큰 fa8cbaeed... 가 나와서 작업 증명에 실패 했다.
거래 수수료는 각 거래 당사자끼리 자율적으로 정할 수 있고, 거래가 블록에 추가되는 우선 순위를 결정하는데 거래 수수료가 입력값으로 사용되기도 한다.
보상은 nonce 값을 찾아내고, 그 결과 새로운 블록을 블록 체인에 추가해서,
해당 블록에 포함된 모든 거래를 유효한 거래로 확정시켜준 대가라고 할 수 있다.
다음 그림과 같이 사용자 F가 지갑 앱에서 C에게 수수료 0.001BTC와 함께 1.6BTC를 보내면, 지갑 앱은 블록 체인 네트워크 상의 노드 A에 거래 정보를 전송한다.
거래 정보를 전파받은 노드 B도 마찬가지 방식으로 블록 체인 네트워크 상의 다른 노드에게 거래 정보를 전파하며, 이 거래는 결국 블록 체인 네트워크 전체 노드에 전파된다.
새로 만들어질 블록은 다음 그림(출처: Mastering Bitcoin - http://chimera.labs.oreilly.com/books/1234000001802/ch08.html#forks) 과 같이 현재 마지막 블록인 파랑블록(P블록)의 다음에 추가될 예정이다.
이 때 캐나다의 노드와 호주의 노드가 거의 동시에 nonce 값을 찾아서 블록을 성공적으로 생성했다. 캐나다의 노드가 생성한 블록을 빨강블록(A블록)이라 하고, 호주의 노드가 생성한 블록을 초록블록(B블록)이라하면, 생성 후 전파 과정은 다음 그림(출처: Mastering Bitcoin - http://chimera.labs.oreilly.com/books/1234000001802/ch08.html#forks) 과 같다.
호주 노드에 인접한 노드에서도 마찬가지 방식으로 기존의 파랑노드에 초록노드가 추가된다. 이 방식이 계속되면서 빨강블록과 초록블록은 전 세계에 분산되어 있는 노드에 전파된다.
포르투갈에 있는 노드에는 빨강블록이 먼저 전파된 후에 초록블록이 전파파되었다. 포르투갈 노드에서는 늦게 도착한 초록블록은 무시된다.
이번에는 러시아 노드가 가장 먼저 nonce 값을 구해서 새로 분홍블록(X블록)을 생성하고 초록블록 다음에 분홍블록을 추가한 후에 다음 그림(출처: Mastering Bitcoin - http://chimera.labs.oreilly.com/books/1234000001802/ch08.html#forks) 과 같이 인접 노드에 전파했다.
빨강블록과 초록블록의 내용은 서로 다르다. 블록 체인은 신뢰의 원천이 되는 체계라고 했는데, 이렇게 정보가 갈라지는 체계를 믿을 수 있는걸까?
블록 체인에 분기가 발생하여 충돌하게 될 때는 더 많은 작업 증명이 수행되어 길이가 더 긴 블록을 선택한다.
그래서 포르투갈 노드에 더 긴 블록 체인을 가진 분홍블록이 전파되는 순간, 빨강블록은 파랑블록에서의 연결이 끊어지고 고아가 된다.
블록이 추가되는 과정에서 분기 상태가 해소되고 결국 하나의 블록 체인만 남기 때문이다.
빨강블록에 있던 거래 중에서 초록블록에 포함되지 않았던 거래T가 있을 수 있다.
그럼 빨강블록이 고아가 되면 거래T는 결국 유실되는 것이 아닐까하는 의문이 들 수 있다.
따라서 이중 지불된 거래 중 하나는 결국에는 무효화되는 방식으로 이중 지불 문제가 해결된다.
거래 정보의 해쉬값은 해당 거래가 포함된 블록의 merklehash 계산에 입력값으로 사용되고, merklehash는 블록 해쉬의 계산에 입력값으로 사용된다.
따라서, 어떤 거래 정보가 변경되면 그 거래 정보가 포함된 머클트리의 merklehash가 변경되고, merklehash가 변경되면 블록 해쉬가 변경된다.
그리고 블록 해쉬는 작업 증명의 해답(nonce 값)을 찾아내야 구할 수 있으므로, 거래 정보를 변경한 블록부터 그 이후의 모든 블록을 순서대로 다시 채굴해야 한다.
변경하려는 거래 정보가 포함된 블록부터 그 이후의 모든 블록을 순서대로 다시 채굴해서 새로운 블록 체인(A)를 만들어야 하는데,
그동안에도 변경 되지 않은 원래의 블록 체인에는 다른 노드들에 의해 블록이 계속 추가되고 A보다 길이가 길어지게 되므로,
A는 폐기되며 완료된 거래 정보의 변경은 실패하게 된다.
그런데 악의적인 노드가 다른 노드들보다 연산 능력이 훨씬 뛰어나다고 가정해보자.
하지만 경제적인 관점에서 생각해보면 이런 일이 발생할 가능성은 사실상 없다. 일단, 거래 정보가 변경될 수 있다는 사실이 알려지는 순간 블록 체인의 신뢰는 깨지게 된다.
지금까지 블록 체인이 어떻게 비트 코인이라는 암호화 화폐의 신뢰의 원천이 될 수 있는가라는 물음에 대한 답을 찾아봤다. 정리해보면 다음과 같다.
거대한 분산 공개 장부이며, 그 장부 안에 포함된 개별 거래는 모두 디지털 서명이 붙어 있어서 은행이나 다른 제3자의 개입이 없어도 진본임을 보증할 수 있다.
수천, 수만노드에 분산 되어 있어서 어느 한 지점에 장애나 공격이 발생하더라도 블록 체인이라는 네트워크 전체는 문제 없이 계속 돌아갈 수 있다.
분산 환경에 전파되는 과정에서 분기가 발생할 수 있으나, 가장 길이가 긴 블록 체인을 유효한 블록 체인으로 선택한다.
블록 체인은 거래 당사자간의 신뢰 확보를 위해 중앙 기관을 필요로 하지 않는 탈중앙화(Decentralization)를 달성한 최초의 소프트웨어 기술이다.
블록 체인이 세상을 바꿀 수 있는 기술이라고 평가받는 이유도 이처럼 탈중앙화 플랫폼의 바탕이 되기 때문이다.
좀더 나은 세상을 만드는데 기여할 수 있는 기회의 문이 천천히 하지만 분명히 열리고 있다.
실제로 bits의 값이 128, 256 이런 식으로 저장되지는 않고, 지수와 계수를 사용하는 별도의 표현 방식이 있다.
블록 헤더의 bits는 nonce 값을 계산하는데 기준이 되는 특정 숫자를 나타내며,
비트코인 지갑은 송수금 거래를 가능하게 해주는 클라이언트 소프트웨어이며, 거래 정보를 블록 체인 네트워크에 전파해야 하므로 블록 체인 네트워크의 노드이기도 하다.
결국 블록 사이즈를 키워서 블록 안에 더 많은 거래를 담아서 수수료 수입을 높이거나, 난이도를 낮춰서 채굴 비용을 낮추는 방식 또는 둘의 조합으로 전개될 가능성이 높다
Bitcoin: 1QofbPJxE9b39SrhCLhCWGsBj8cv299qd
Ethereum: 0x29E1BB68121FE94A55A245d250CDafD4800A5053
출처: HomoEfficio가 작성한 이 저작물은(는) 크리에이티브 커먼즈
저작자표시-비영리-동일조건변경허락 4.0 국제 라이선스에 따라 이용할 수 있습니다.
'◘ SMC' 카테고리의 다른 글
콘텐츠 산업 지형 바꿀 블록체인 기술 (0) | 2018.09.17 |
---|---|
블록체인, 중소기업까지 확산 (0) | 2018.09.17 |
법인정관 (0) | 2018.09.17 |
BBR주관, 블록체인 지식교류 행사 성공적 출범식 (0) | 2018.09.15 |
쉽게 이해하는 블록체인 기술- 합의 알고리즘 (0) | 2018.06.12 |