오늘은 블록체인을 소개하는 두번째 시간입니다. 



일단, 전 시간에는 암호화폐의 주요 구동원리를 설명해드렸었는데요~


오늘은 암호화폐 대장 비트코인에 대해서 조금 더 설명을 드릴려구 합니다. 설명자료는 논문을 기준으로 할거구요~


일단 거래가 어떻게 기록되는지 자세히 살펴보죠.


예전에 설명드린 바와 같이 거래기록은 블록에 저장됩니다. 아래의 그림을 이해하시기 위해서는 몇가지 용어를 사전에 아셔야 합니다.  비트코인의 해쉬암호 방식은 RSA라는 비대칭 방식을 사용하고 있습니다.


 즉, 암호화는 공개된 방식(공개키)으로 하지만, 암호를 풀기위한 복호화 방식은 개인만 알 수 있도록(개인키) 되어 있는 것입니다. 그래서 암호화 방식과 복호화 방식이 같다면 대칭형 방식(AES)이고 다를 경우는 비대칭방식(RSA)이라고 하는 것이죠. 


위키 백과에서는 다음과 같이 설명하고 있습니다.


 - 공개 키 암호 방식(公開 - 暗號 方式, public-key cryptography)은 암호 방식의 한 종류로 사전에 비밀 키를 나눠가지지 않은 사용자들이 안전하게 통신할 수 있도록 한다. 공개 키 암호 방식에서는 공개 키와 비밀 키가 존재하며, 공개 키는 누구나 알 수 있지만 그에 대응하는 비밀 키는 키의 소유자만이 알 수 있어야 한다. 공개 키 암호를 구성하는 알고리즘은 대칭 키 암호 방식과 비교하여 비대칭 암호(非對稱暗號)라고 부르기도 한다.

공개 키 암호 방식은 크게 두 가지 종류로 나눌 수 있다.

  • 공개 키 암호 — 특정한 비밀 키를 가지고 있는 사용자만 내용을 열어볼 수 있음.
  • 공개 키 서명 — 특정한 비밀 키로 만들었다는 것을 누구나 확인할 수 있음.

공개 키 암호 방식은 열쇠로 잠겨 있고 좁은 투입구가 있는 편지함에 비유할 수 있다. 이런 편지함은 위치(공개 키)만 알면 투입구를 통해 누구나 편지를 넣을 수 있지만 열쇠(개인 키)를 가진 사람만이 편지함을 열어 내용을 확인할 수 있다.

공개 키 서명은 인장으로 편지봉투를 봉하는 것에 비유할 수 있다. 이렇게 봉인한 편지는 누구나 열어볼 수는 있지만 인장 확인을 통해 인장을 소유한 발신자가 이 편지를 보냈음을 증명할 수 있다.



위의 위키백과에서는 다루어 지지 않았지만 거래방식을 이해하기 위해서느 키관리 방식에 대한 이해가 조금 더 필요합니다. 공개키 암호화 방식을 통해 거래를 할 경우, 각자의 공개키 및 개인키를 생성해서 공개키는 공개하고 개인키만 자신이 관리합니다. 그렇게 해야 첫번째 소유자의 공용키로 다음 번 거래 소유자에게 검증을 해주고 첫번째 소유자의 개인키로 마지막에 복호화를 해주므로써 두번째 소유자로 이전 거래가 성립하게 됩니다.


이해가 되시죠? 전문가가 아니더라도 그냥 자물쇠가 두개가 있다고 생각하시면 이해하시는데 도움이 될겁니다. 두번 잠궈놨는데, 열쇠한개는 모든 사람들이 다 가지고 있지만, 두번째 열쇠는 자기만 가지고 있기 때문에 본인의 열쇠가 없으면 결코 열 수 없는 거죠. 그래서 이러한 암화방식을 기반으로 비트코인이 만들어 졌습니다. 



 거래는 다음과 같이 하도록 설계되었습니다.(논문 편집 자료)



그럼 서명(signing)과 검증(verification)은 어떤 것을 말하는 것일까요? 비슷할 것 같지만 조금 차이가 있습니다. 서명


서명의 경우에는 암호화된 방법으로 자신의 개인키를 서명하는 것을 말하는 것이구요, 검증은 전자서명된  데이터를 개인공용키로 풀었을때 그 값이 같은 것인지 확인하는 절차를 말합니다.  


우리가 개인통장을 개설할 때도, 계약서를 쓸때도 개인 서명이 들어갑니다. 그런데 전자결제 시스템에서는 개인들이 매번 서명을 할 수 없습니다. 그렇기 때문에 암호화된 개인키로 서명을 하면 그 서명이 맞는지 공용키로 검증하는 작업을 거치는 것이죠. 그래서 그것이 일치했을 때, 거래가 성사되는 것입니다.


 유시민 작가님이 몇개월 전에 암호화폐 관련 긴급 편성 토론회에서 '문송합니다'를 연발하셨는데, 암호화폐에 대해서 상당히 많은 것을 공부해 오셨다는 것을 알 수 있었습니다. 그래서 문과출신들도 암호화폐 분야를 이해하는데 큰 지장이 없을 것이라고 생각했었는데, 사실 그렇지만은 않더라구요.


 프로그래밍을 공부하신 분들이라면 조금 더 쉽게 이해하실 수 있습니다.


 하지만 프로그래밍이라는 것도 컴퓨터 언어를 사용하여 '법'을 만드는 것이라고 이해하셔도 좋습니다. 그 '법', 또는 '체제' 안에서 해당 프로그램은 구현되는 것이니까요. 마치 우리나라 국민이 '법' 을 준수하는 것과 같은 원리라고 보시면 됩니다. 


 조금 더 쉽게, 이해하기 쉽게 설명드릴려구 노력했는데 이해가 되셨나요?



그러면 조금 더 심화 학습을 해보도록 하죠.


비트코인의 블록 하나에는 약 1,800개의 거래 정보를 포함할 수 있구요, 블록 하나의 크기는 0.98Mbyte 입니다. 그리고 블록에는 블록 헤더와 거래 정보 등으로 구성됩니다. 


블록헤더는 version, previoushash, merklroot, nounce로 구성되어 있습니다.




  1. version : 소프트웨어/프로토콜 버전
  2. previousblockhash : 블록 체인에서 바로 앞에 위치하는 블록의 블록 해쉬
  3. merklehash : 개별 거래 정보의 거래 해쉬를 2진 트리 형태로 구성할 때, 트리 루트에 위치하는 해쉬값
  4. time : 블록이 생성된 시간
  5. nonce : 최초 0에서 시작하여 조건을 만족하는 해쉬값을 찾아낼때까지의 1씩 증가하는 계산 회수

 블록은 위에서 설명된 채굴행위를 통해 매 10분을 주기로 발행됩니다. 가장 중요한 것으로 참여자들이 화폐를 거래한 ‘거래내역’, 그리고 이전 블록의 해시값, 난이도, 논스(nonce) 등이 포함되는데, 매 블록은 바로 전 블록의 해시값을 담고 있으며, 이렇게 이어진 블록들은 시간 순으로 발생한 이체 내역들을 담고 있는 하나의 ‘블록체인(blockchain)’을 이루게 됩니다.





여기서 다시 비트코인 구동원리를 다시 설명드리자면, 비트코인은 사용자들에 의해 직접 발행이 되는데, 이를 통상적으로 채굴이라고 한다고 말씀드렸습니다. 


이를 기술적으로 끊임없는 해싱 작업을 통한 ‘목표값(target value)’ 이상의 해시(hash)값 찾기(작업증명, POW:Proof of Work)로 설명할 수 있죠, (물론 작업증명방식이 아닌 리플같은 코인도 있습니다). 


게임이론에서 착안된 것과 같이 채굴에 참여하는 모든 사용자가 목표값을 찾기 위한 경쟁을 벌이며, 특정한 사용자가 목표값에 해당하는 해시값을 찾는데 성공하면, ‘블록’을 발행하게 됩니다. 이들은 블록을 발행하고 이를 네트워크에 전파하면서 동시에 블록 발행 보상인 ‘비트코인’과 해당 블록 안에 포함된 ‘이체 수수료’를 받게 되는데 ‘비트코인 지급’이라는 경제적 보상이 채굴자들이 해싱작업에 참여하는 동기가 됩니다


* 블록은 ,매 발행 시마다 비트코인 프로그램에서 ‘블록발행보상’을 채굴자에게 지급하는 방식으로 신규 화폐를 발행(조폐)하게 되는데 ‘ 2009년 1월 첫 발행 시에는 50 비트코인씩 발행이 되었으나 약 4년 뒤인 2013년 말부터는 25비트코인으로 발행량이 줄었으며, 역시 4년 뒤 2016년 7월 10일에는 12.5 비트코인으로 매 4년마다 계속 반으로 줄어듭니다. 이렇게 발행되는 비트코인의 총량이 2,100만개에 이르면 비트코인의 신규 발행은 종료됩니다.


+ Recent posts