안국법률사무소

A Leading Korean Law Firm
For Foreign Investors and Immigrants
Since March 9, 2001
02-3210-3330

암호재산의 재산권으로서의 성격에 관한 논의의 공학적 기초 : 블록체인

암호재산의 재산권으로서의 성격에 관한 논의의 공학적 기초 : 블록체인

암호재산 헌법소원 서면에 포함될 예정인 글입니다

. 블록체인 기술과 관련된 암호 기술의 요점
(1) SHA256 해시 함수
 SHA256 해시 함수의 뜻
 SHA256 해시 함수의 활용 : ‘다이제스트(digest)’에 의한 거래의 검증
(2) 공개키와 개인키 기술
 RSA 알고리즘
 RSA 알고리즘의 활용 : 거래의 수단으로서의 인증
. 암호기술의 한계와 블록체인 기술
(1) 암호 기술의 한계와 극복
(2) 블록체인 기술의 정의
. 블록체인의 성공적인 실현 사례 : 비트코인
(1) 비트코인의 개요
(2) 비트코인 원장의 데이터 구조


"이 사건의 적정한 심리를 위해서는 암호재산(가상통화)을 대하는 여러 입장 차이에 기인한 다양한 심리적 수준의 태도와 편견에서 벗어날 필요가 있습니다. 이를 위해서는 우선 판단 대상의 실체에 대한 정확한 객관적 파악이 선행되어야 하겠습니다. 이는 결국 암호재산에 대한 - 가치중립적인 - 기술적 이해를 적절한 수준에서라도 획득하는 것이 됩니다.

따라서 이하 본 서면의 서두에서 이른바 ‘블록체인(blockchain) 기술’에 관한 요점을 - 비록 이러한 논의가 공학의 영역에 속하는 것이나 - 암호재산의 재산권 대상성에 대한 이해에 소요되는 최소한의 범위에서 설명하게 되었습니다."


블록체인 기술과 관련된 암호 기술의 요점
  
그런데 블록체인 기술나아가 암호재산의 본질을 이해하기 위해서는 암호 기술에 대한 이해가 재차 선행되어야 합니다왜냐하면 블록체인 기술과 관련하여 암호 기술이 블록체인 기술 구현의 핵심이라고 할 수 있는 거래의 검증과 거래의 수단을 위하여 직접적으로 이용되고 있는 상황이기 때문입니다.
  
이하에서는 널리 알려져 있는 해시 함수를 이용한 암호 기술과 개인키/공개키 쌍이라고 하는 암호 기술 두 가지를 간략하게 설명함으로써 본격적으로 블록체인 기술을 이해하기 위한 준비를 하고자 합니다.
  
(1) SHA256 해시 함수
  
⓵ SHA256 해시 함수의 뜻
  
안전 해시 알고리즘(Secure Hash Algorithm) - 256’ 함수는 미합중국 국방부 산하 국가보안국(National Security Agency)에서 개발된 함수로 입력되는 값의 크기와는 무관하게 출력되는 값이 256bit로 고정되어 있는 (수학적 의미에서의함수입니다.
  
여기서 출력되는 값이 바로 잘게 쪼갠다는 뜻에서 암호학에서 차용되고 있는 용어인 - ‘해시(hash)’ 값입니다.

이와 같은 해시’ 함수는 특정 입력 값에 대하여 오로지 단 하나의 해시 값만이 존재한다는함수로서의 일반적 특징 이외에도 특정 입력 값의 길이와는 무관하게 출력 값이 고정된 길이(예컨대, 256bit)를 가진다는 특징 및 현재의 기술로는 해시 값을 가지고 원래의 입력 값을 복호화(decode)하는 것이 현실적으로 불가능한 것으로 알려져 있다는 등 중요한 세 가지 특징들을 가지고 있습니다.
  
‘SHA256 함수를 대표로 하는 해시 함수는 실생활에 널리 사용되는 매우 대중적인 함수로 이를 구현한 컴퓨터 코드는 인터넷을 통해 손쉽게 구할 수 있고(예컨대무료로 제공되는 파이썬이라는 컴퓨터 프로그래밍 언어의 사용환경을적절한 배포판을 통해 개인 컴퓨터에 갖추기만 하면 이러한 SHA256 함수를 구현한 코드도 함께 설치됩니다오랜 기간 사용되어 오면서 그 안전성이 검증된 기술이라고 할 수 있습니다.
  
⓶ SHA256 해시 함수의 활용 : ‘다이제스트(digest)’에 의한 거래의 검증
  
블록체인 기술과 관련하여 SHA256 함수가 활용되는 가장 중요한 부분이 바로 거래(내역)의 검증입니다.
  
어떤 집단(이를 검증 네트워크라고 부르겠습니다)의 구성원 내지 참여자 모두에게 지속적으로 배포(broadcast)되고 있을 뿐만 아니라,
  
현실 세계에서 미리 예측할 수 없는 방식으로 발생하는 상태 변화(state change)의 사건들을 그대로 담고 있는 것이기 때문에 참여자별 판본이 서로 완전히 동일한 내용을 가질 것이 예정되어 있으며나아가 
  
사후적으로 절대 변경될 수 없어야 할 것이 요청되는, 
  
한 묶음(block)의 데이터를 생각해보도록 하겠습니다
  
대표적인 사례로서어떤 은행이 고객들에게 개설한 모든 계좌들의 시간 순서에 따른 거래 내역들을 일주일 동안 한 파일 속에 그 순서대로 모은 원장(ledger)과 같은 것을이를 원하는 일부 고객들에게 지속적으로 배포하는 상황을 생각해볼 수 있습니다.
  
이러한 한 묶음의 데이터’ 전체를 입력 값으로 하여 SHA256 함수를 이용해 구한 일정한 크기의 해시 값은 단 하나만이 있을 것입니다따라서 각 참여자는 자신이 가진 데이터가 다른 참여자의 것과 일치하는지를 확인하기 위해서 방대한 데이터 자체를 일일이 대조하는 대신 자신이 보유한 한 묶음의 데이터의 다이제스트로서 그 SHA256 해시 값을 구해서 이것만을 서로 대조하는 방법으로 그 일치 여부를 간편하게 확인해 볼 수 있습니다
  
그런데이 방법은 해시 값 일치의 경우 데이터가 무결하다는 점을 확인할 수 있을 뿐불일치의 경우 – 권위 있는 중재자가 없는 한 과연 누구의 데이터가 진정한 것인지를 가릴 수 있는 수단이 없다는 단점을 가지고 있습니다이러한 단점을 해결하는 여러 방법들 중 하나가 바로 블록체인 기술이라고 할 수 있습니다이에 대해서는 다시 논하도록 하겠습니다.

(2) 공개키와 개인키 기술
  
블록체인 네트워크에서 블록체인을 이루는 각 데이터 블록에 담기는 내용이란 위에서 언급한 바와 같은 현실 세계에서 미리 예측할 수 없는 방식으로 발생하는 상태 변화(state change)의 사건들입니다. ‘상태 변화예컨대 계정의 목록과 계정별 자산부채 잔고의 변화와 같은 것을 말합니다이 경우 상태 변화를 야기하는 사건은 거래 네트워크’(이는 위에서 말한 검증 네트워크와 구별됩니다)에 참가하고 있는 참가자들(계정 보유자들사이의 – 예컨대재화의 거래를 위한 통신 내용입니다
  
그런데검증 네트워크에 의하여 검증되는 대상이 되는 데이터가 이미 생성 단계에서 조작(위조변조)된 상태라면 애초 데이터 블록에 대한 검증은 무의미해질 것입니다따라서 이와 같은 통신 내용이 애초 위조나 변조되지 않고 통신 상대방 및 검증 네트워크에 안전하게 도달될 수 있도록 확실하게 보장하는 기술이 필요합니다그런데 이를 보장하는 여러 기술들이 이미 널리 대중화되어 있으며 그 가운데 하나가 공개키/개인키 쌍(public key/private key pair)을 이용한 기술입니다.
  
⓵ RSA 알고리즘
  
역사적으로 볼 때 공개키/개인키 기술의 전형이 바로 RSA 알고리즘을 이용한 것이며 다른 경우도 결국 마찬가지의 아이디어에 기초한 것이라고 볼 수 있습니다따라서 여기서는 가장 간단하게 이해할 수 있는 이 RSA 알고리즘을 설명함으로써 공개키/개인키 기술을 소개하도록 하겠습니다. RSA 공개키 알고리즘은 이를 개발한 Ron Rivest, Adi Shamir, Leonard Adleman의 성의 첫 글자들을 조합하여 명명되었습니다
  
곧 살펴보게 될 비트코인이나 이더리움 등의 경우 수학에서 타원 곡선 알고리즘(elliptic curve cryptography)’이라고 불리는 종류 속하는, ‘secp256k1 curve’를 채택한 ‘ECDSA(Elliptic Curve Digital Signature Algorithm)’ 등을 디지털 서명 알고리즘으로 이용하기 때문에비트코인이 RSA 알고리즘을 그대로 이용한다고 말할 수는 없습니다물론 기본적인 구현 구조는 위에서 말한 바와 같이 동일합니다.
  
먼저평문(plain text) P를 암호화한 결과인 암호문(ciphertext)을 C라 하면 나머지를 구하는 연산을 mod로 표시할 때,
  
C = (P^E) mod N
  
의 관계에 서는 E와 N이 존재하게 됩니다예컨대, (E, N)가 (5, 323)일 때 P=123이면 C=225이 됩니다.
  
그리고 이 경우 마찬가지로,
  
P = (C^D) mod N
  
의 관계에 서는 D도 존재하게 됩니다위의 경우에서 “123=225D mod 323”이 되는 D는 29입니다암호문 C가 있을 때 (D, N)을 알면 평문 P를 바로 구할 수 있는 것입니다.
  
이산수학의 논의에 따르면 실제 활용에서 상당히 큰 수가 되는 N을 신속하게 소인수 분해할 수 있는 기술(예컨대양자컴퓨팅의 실용화나 리만가설의 입증)이 발견되지 않는 한 E, N을 가지고 D를 알아내는 것은 현실적으로 불가능하다는 점이 밝혀져 있습니다.
  
이러한 RSA 알고리즘에 의한 공개키/개인키 쌍은 우선 도청이 불가능한 통신 수단으로 활용될 수 있습니다어떤 사람이 다른 사람과 비밀이 보장되는 통신을 하고자 할 경우 우선 특정 (E, D, N)의 숫자 집합을 구한 다음 전언(message)을 보내줄 사람에게 암호화키인 공개키 (E, N)으로 평문을 암호화하도록 하고 이렇게 암호화된 암호문을 받은 사람은 자신만이 가지고 있던 개인키인 복호화키 (D, N)를 가지고 이를 복호화하여 원래 전언인 평문을 획득할 수 있는 것입니다이 과정에서 암호화키인 공개키만이 외부에 전달되므로 복호화키인 개인키의 경우 전달 과정에서 도청될 가능성이 전혀 없습니다.
  
⓶ RSA 알고리즘의 활용 거래의 수단으로서의 인증
  
이외에도 특히 블록체인 기술과 관련해서 이 공개키/개인키 쌍은 문서의 진정 성립 여부의 확인즉 인증(authentification)’을 위해서도 사용할 수 있습니다이는 보통 디지털 서명이라고 불리는 것으로 마치 인감 제도와 같은 것을 컴퓨터 공학으로 구현한 것이라고 할 수 있습니다.
  
그 구체적인 방법은 다음과 같습니다이 경우에는 거꾸로 암호화키를 개인키 내지 서명용 키로 사용하고 복호화키를 공개키 내지 검증용 키로 사용합니다만약 수신인이 공개키로써 복호화에 성공하여 평문을 얻을 수 있다면 이는 송신인이 그만이 알고 있는즉 개인키인 암호화키로써 암호문을 만들었다는 점을 확인한 것이 됩니다. 수신인 입장에서 송신인이 개인키로 암호화하는 방법으로 서명하였음을 확실히 확인할 수 있는 것입니다.
  
블록체인 검증 네트워크를 이용하게 되는 거래 네트워크의 참가자들은 거래 상대방과 검증 네트워크에 이상과 같은 디지털 서명을 통해 거래 내용을 전달하게 되는데 이러한 디지털 서명’ 기술을 통해 그 거래가 송신인의 진정한 의사에 기하여 이루어졌는지 여부를 인감 제도의 수준 이상으로 확실히 확인할 수 있는 것입니다.(전자서명법 제3조 제3항 참조)
  
요컨대이 아이디어의 핵심은 암호화용 개인키와 복호화용 공개키의 고유한 쌍이 적어도 하나 이상의 거래를 위하여 거래 네트워크 참가자에게 할당된다는 점에 착안하여 그 공개키 또는 그 공개키에 기초하여 일정한 계산을 통해 변환된 주소를 그 거래 참가자의 신원(ID)을 대신하는 것으로 간주하고 그 주소를 통해 특정되는 거래 참가자만이 주소에 대응하는 개인키를 알고 있는 유일한 사람이 되도록 한다는 것에 존재합니다이렇게 하면 어떤 거래 참가자의 주소즉 일종의 신원을 알고 있는 다른 참가자는 그 거래 참가자가 정말 어떤 거래를 수행하였는지 여부(자신의 개인키로 암호화하였는지 여부)를 그 주소에 지정된 공개키로 복호화할 수 있는지 여부로 확실하게 판단할 수 있게 되기 때문입니다.

암호기술의 한계와 블록체인 기술
  
(1) 암호 기술의 한계와 극복
  
이상의 논의에 기초해서 생각해보면암호 기술은 거래 네트워크 속에서 공개키/개인키 쌍 중 공개키 부분 또는 이에 기초하여 계산된 주소로 특정되는 거래자들 사이에서 거래가 진정한 의사에 기하여 이루어진다는 점을 확실히 할 수 있을 뿐만 아니라(디지털 서명검증 네트워크 속에서 이러한 거래들이 기록된 데이터 블록이 상호 일치하고 있는지를 확인하는 확실하고도 효율적인 방법(해시 함수)을 제공해준다고 평가할 수 있습니다.
  
하지만 이 각각은 한계를 갖고 있습니다.
  
우선디지털 서명은 개인키의 소지자가 서명을 한 것이라는 점을 확인할 수 있게 해줄 뿐 그 소지자가 구체적으로 누구인지를 확인해주지는 않습니다예컨대비트코인과 같은 블록체인 기술에서는 특정 공개키/개인키 쌍에 기초해 고유한 주소를 생성함으로써 이 주소를 마치 신원을 식별하는 표시(ID)처럼 이용하여 거래 네트워크에 참가하는 참가자를 확정합니다이 경우 해당 블록체인 거래 네트워크에서 주소의 보유자가 거래를 하기 위하여 해당 주소에 고유하게 할당된 개인키로써 거래 내용을 암호화하게 되는데 이러한 암호문이 만약 그 쌍을 이루는 공개키에 의하여 성공적으로 복호화될 수 있다면 그러한 사실은 그 거래 내용이 위조된 것이 아니라 분명히 그 주소의 보유자에 의하여 송신된 것이라는 점을 입증해주는 것입니다그럼에도 불구하고 여기서 더 나아가 그 주소의 보유자가 특정 주민등록번호를 가진 홍길동인지다른 성춘향인지를 특정해줄 수 있는 방법을 암호 기술이 제공해주는 것은 아닙니다. 따라서 이러한 한계를 극복하기 위해서는 불가피하게 공인인증기관이 필요하게 됩니다.(전자서명법 제415조 제1항 참조하지만 이러한 한계는 유별난 것은 아닙니다한국은행이 발행한 지폐나 동전 역시 그 보유자(점유자)에게 소유권이 인정될 뿐 그 자체로 소유자를 특정하는 방법은 갖고 있지 않기 때문입니다.(민법 제250조 단서) 뒤에서 보는 바와 같이 암호재산은 이와 같은 주소에 전적으로 귀속되기 때문에 누가 법률적으로 암호재산의 소유자인지의 문제는 누가 개인키를 보유하는 방법으로 이 주소에 대하여 사실상 지배를 하고 있지를 기준으로 판단하면 될 것입니다.
  
그런데암호 기술의 둘째 한계는 극복되지 않는다면 심각한 문제를 야기합니다재산의 이전과 같이 현실 세계의 상태 변화의 유효성이 그 직전의 상태에 순차적으로 의존되어 있는 경우에는 과거의 거래 기록들이 현재의 상태에 대한 궁극적인 근거가 되기 때문에 이와 같은 기록들예컨대 원장(ledger)’을 위조나 변조의 가능성이 없는 상태로 보존해야 할 필요성이 있습니다. 그런데 암호 기술은 직접적으로는 두 데이터 블록의 일치 여부에 대한 판단에 기여할 뿐 불일치의 경우 어떤 데이터 블록이 무결성을 갖추었는지를 판단해주지는 못합니다이러한 상황은 시스템 외부의 권위 있는 중재자(국가)에의 의존을 불가피하게 해주는 것처럼 보입니다.
  
그런데 이에 대한 궁극적인 해결 방법이 2009년 사토시 나카모토라는 필명의 암호학자가 작성한 ‘Bitcoin: A Peer-to-Peer Electronic Cash System’이라는 9장 분량의 영어 논문에 의하여 수학적 증명과 함께 제시되기에 이릅니다.(https://bitcoin.org/bitcoin.pdf 2018년 2월 8일 기준 누리집 주소그 요점을 이어서 서술하도록 하겠습니다.
  
일정 기간 동안 작성된 원장과 같은위에서 말한 한 묶음의 데이터를 이제 그냥 블록(block)이라고 불러보겠습니다역시 위에서 언급한 검증 네트워크’(이는 인터넷으로 서로 연결되어 통신하는 여러 컴퓨터들이 블록체인 알고리즘을 담고 있는 어떤 프로그램을 함께 동시에 실행하고 있는 경우 성립됩니다)의 각 참여자 컴퓨터(이하 이를 노드node’라고 하겠습니다)들은 함께 계속적으로 동일한 데이터(예컨대송금 거래와 같은상태 변화를 야기하는 사건)들을 자동적으로 배포받아 저장하게 됩니다.
  
이 논문에 담긴 아이디어들 중 첫째는위 그림에서처럼 상태 변화에 대한 기록들예컨대 원장에 기재되어야 할 기록들을 일정한 컴퓨터 네트워크를 구성하는 노드들에 모두 함께 저장해 나가되 그 과정에서 일정한 크기의 블록이 생성되면 이를 한 단위의 블록으로 삼아서 그 블록에 대한 해시 함수 값을 그 다음 순차로 생성되는 블록의 기록 내부에 쓰여질 한 항목으로 포함시킨다는 것에 존재합니다이렇게 하면 아무리 오래 전 거래라고 하여도 과거의 어떤 거래 내역을 조금이라도 위조나 변조한 경우에는 그 이후의 블록에 포함되는 모든 해시 값들이 변화되어 위조나 변조된 데이터 블록들의 연쇄는 진정한 데이터 블록들의 연쇄와 쉽게 구분될 수 있게 됩니다거래 내역 일부의 작은 조작이라도 이와 체인처럼 엮어진 그 이후에 생성된 모든 데이터 블록들의 내용에도 변화를 가져오게 되므로 조작의 발생을 쉽게 알 수 있게 해주는 것입니다결국 블록체인(blockchain)이란 용어도 이와 같은 아이디어에 초점을 두고 만들어졌다고 할 수 있겠습니다하지만 이 아이디어는 단지 효율적인 방법일 뿐 기본적으로 데이터 전체에 대한 해시 값을 비교하는 방법과 논리적으로는 동등한 것입니다. 문제가 있을 때 과연 어떤 보관자의 데이터가 조작되지 않은 원본인지에 대해서 판단할 수 있게 도와주는 것은 아닙니다.

블록체인의 간단한 도해 ]
  
그러나 이 논문에 담긴 두 번째 아이디어는 놀랍게도 어떤 보관자의 데이터가 조작되지 않는 원본인지에 대한 무결성 판단을 가능하게 해줍니다. 
  
이는 기본적으로 블록의 봉인(sealing; closing)이란 개념을 도입하는 것에 기초해 있습니다. ‘비트코인의 경우에는 블록의 봉인을 위해서 특히 작업증명(Proof of Work; PoW)이라는 명칭으로 불리는 방법을 채택하고 있습니다.(동 논문 제3블록의 봉인은 이외에도 지분증명중요도증명 등 다른 방법을 이용하여 이루어질 수 있습니다이하 작업증명에 의한 블록의 봉인에 대하여만 주로 서술하도록 하겠습니다
  
작업증명에 의한 해당 블록의 봉인 내지 검인은해당 블록이 일정한 크기가 도달하면 봉인을 위하여 내부에 해당 블록의 데이터를 기초로 제시된 수학 문제(해당 블록의 난이도 목표에 의해 주어집니다)와 그 해답(‘논스nonce’ 값입니다)을 포함시키도록 하고 이 항목들이 포함되면 더 이상 해당 블록의 수정이 불가능하다고 선언한 후 모든 노드들에게 이렇게 봉인된 블록을 배포하여 검증하도록 하며이렇게 검증이 마쳐지면 체인화라는 첫째 아이디어에 따라 이렇게 해답이 포함되어 봉인된 블록에 대한 해시 값을 구해서 그 다음 블록에 기재한 후 마찬가지의 과정을 재차 시작하는 방식으로써 이루어집니다.

비트코인 블록의 형식 ]
  
여기서 이 수학 문제는 해당 블록체인 프로그램에 의하여 노드 컴퓨터들이 협력하여 해결해야 할 것으로 예정되어 있습니다이 수학문제란 복잡한 것이 아니라 그 데이터 블록에 어떤 숫자(이는 보통 ‘nonce’라고 불립니다)를 추가해야지만 그 데이터 블록의 해시 함수 값이 미리 제시된 조건(보통 ‘target’ 값이라고 불리는 일정한 수보다 작아지는 조건)을 만족시키게 되는가와 같은 문제즉 ‘nonce’를 구하는 단순한 이산수학상의 문제입니다물론 문제는 단순하지만 그 해를 구하는 대수적 방법이 알려져 있지 않기 때문에 오로지 수많은 시행착오를 통해서만 해결할 수 있고 이에는 상당한 컴퓨팅 파워가 소요됩니다.
  
이제 이렇게 수학 문제와 해답을 포함시켜야만 비로소 해당 블록을 봉인할 수 있게 강제하는 작업증명의 방법이 도대체 왜 과거 거래 내역들이 담긴 블록의 위조 및 변조 가능성을 차단하는 것이 되는지를 보겠습니다.
  
우선이 문제의 해결과 그 정답의 검증은 비대칭성이 있다는 점에 주목해야 합니다이 성질은 복호화가 불가능한 암호화 방법인 SHA256 함수의 특징에서 기인하는 것입니다.
  
이 문제를 푸는 것은 단순히 데이터 블록에 대한 해시 값을 구하는 것이 아니라 해시 값이 일정한 조건을 만족하게 해주기 위해 데이터 블록에 추가되어야 할 숫자를 구하는 것이기 때문에매번 상이한 숫자를 추가한 후 그 해시 값을 구해 조건 충족 여부를 확인해보는 단순 작업을 여러 차례 반복해야 합니다이에는 상당한 시간과 노력이 소요됩니다.
  
반면일단 이 문제를 풀어 ‘nonce’ 값을 구해내기만 하면 그 정답 여부를 확인하는 것은 단지 그 데이터 블록에 ‘nonce’를 추가해서 그 해시 결과 값을 구해보는 것즉 그 결과 값이 미리 제시된 조건을 충족시키는지만 보면 되는 것이기 때문에 이러한 검증에는 거의 시간과 노력이 들지 않습니다.
  
이와 같은 논스 문제 해결과 검증의 비대칭성으로 인하여 작업증명 단계와 블럭 완성 이후의 단계 모두에서 위조나 변조의 가능성이 현실적으로 불가능하게 됩니다그 이유는일단 작업증명이 정상적으로 이루어지면 그것이 정상적이라는 점즉 해당 블록이 제대로 봉인되었는지를 확인하는 데에는 아주 짧은 시간밖에는 걸리지 않기 때문에 이미 검증이 완성된 데이터와 다른 데이터가 발생하였다는 사실즉 위조와 변조가 발생하였다는 사실은 그 즉시 이를 판별해 낼 수 있다는 점에 존재합니다왜 그렇게 되는지 그 구체적 이유를 더 자세히 풀어 설명하자면 이어지는 바와 같습니다.
  
첫째검증 네트워크에 참여하는 전체 컴퓨팅 파워 중 적어도 과반수는 위조나 변조에 가담하지 않는다는 전제를 받아들인다면 개인키/공개키 쌍 기술에 의하여 진정한 내용의 거래임이 확인된 거래 내역들이 블록을 형성하면서 적재되는 과정을 그대로 받아 저장하는 노드들의 컴퓨팅 파워가 위조나 변조를 시도하는 노드들의 컴퓨팅 파워보다 더 클 것이며 또한 거래 내역을 그대로 받아 저장하는 작업만을 하는 노드들은 이를 받아 추가적으로 위조나 변조의 작업을 하는 노드들보다 컴퓨팅 파워를 더 많이 논스 값을 계산하는 작업에 사용할 수 있게 됩니다따라서 생성 중에 있는 데이터 블록에 대한 봉인은 위조나 변조를 시도하지 않는 노드들이 먼저 성공하게 됩니다그리고 비트코인과 같은 블록체인 프로그램은 이러한 봉인 작업즉 작업증명(Proof of Work)에 소요되는 시간을 10분 내외로 짧은 시간으로 – 난이도 조절의 방법을 통해 자동적으로 조절함으로써 위조와 변조를 더욱 불가능하게 만들고 있습니다.
  
둘째만약 블록 완성 이후 이렇게 이미 생성 및 봉인이 종료된 블록에 대하여 위조 내지 변조를 시도하는 검증 네트워크의 일부 노드들이 있다면그들은 생성 중에 있는 데이터 블록에 대한 작업증명뿐만 아니라 조작을 시도하는 블록과 그 이후의 모든 블록에 대한 논스 값을 재계산하는 작업을단순히 생성 중에 있는 데이터 블록에 대한 작업증명만을 하는 대다수의 노드들의 작업 시간 이내에 처리해야만 그 위조 내지 변조에 성공할 것입니다그러나 이는 검증 네트워크의 과반수를 훨씬 넘어서는 컴퓨팅 파워를 확보하지 않는 한 불가능합니다.
  
따라서 위에서 말한 바와 같이 작업증명 단계와 블럭 완성 이후의 단계 모두에서 위조나 변조의 가능성이 현실적으로 불가능하게 되는 것입니다그 결과 이전에 제기한 문제즉 상호 불일치의 경우 과연 누구의 데이터 블록이 진짜인지를 가릴 수 있는 수단이 마련되게 됩니다
  
현실 세계에서 미리 예측할 수 없는 사건들이 발생하는 것에 따라 그 내용(데이터)이 그때마다 모든 네트워크 참가자들에게 배포되고 그 결과로 각자에게 그러한 데이터들이 하나의 데이터 블록을 구성할 수 있을 정도의 크기로 모이게 되면 즉시 자동적으로 이 블록 후보에 포함되어 있는 문제를 그 모든 네트워크 참가자들이 협력해서 풀어내는 작업이 시작됩니다그 결과로 누군가로부터 해답을 얻게 되면 그 해답을 해당 데이터 블록에 기재하고 그 블록을 완성하게 됩니다이렇게 완성된 블록은 다시 모든 네트워크 참가자들에게 배포하게 됩니다그러면 이를 배포받은 참가자들이 이렇게 받은 블록 속 ‘nonce’를 자신이 보유하는 데이터 블록에 합체하여 그 해시 값을 구한 다음 이를 배포된 블록의 해시 값과 대조해 정말로 일치하는지를 보면 간단히 자신이 보유하는 데이터 블록의 무결성 여부를 확인할 수 있습니다.(논스 문제 해결과 검증의 비대칭성만약 자신이 보유하는 데이터 블록의 해시 값이 일치하지 않는다면 자신이 보유한 데이터 블록은 폐기하고 배포된 것으로 대체하게 될 것입니다상호 불일치의 경우 완전무결한 데이터 블록이 어떤 것인지를 가릴 수 있게 되는 것입니다.
  
요컨대블록체인 기술의 기초가 되는 아이디어는어떤 데이터 블록의 완성을 위해서 이와 같은 문제와 그 해답즉 ‘target’ 값과 ‘nonce’ 값 역시 그 데이터 블록 자체 내에 그 일부로서 반드시 포함되어야만 하고여기서 한 걸음 더 나아가 이렇게 검증이 완료된 데이터 블록의 해시 값을 그 다음에 시간적으로 이어지는 데이터 블록 내에도 그 일부로서 포함시켜 블록들을 체인처럼 연결시킨다는 발상에 있습니다.
  
한 가지 부언하자면물론 이러한 네트워크에 연결된 컴퓨터(이를 ‘node’라 합니다)들에는 이와 같은 알고리즘을 구현한 프로그램이 설치되어 있어야 하고 만약 이 프로그램 자체가 해킹이 된다면 문제가 발생할 수 있다는 점입니다하지만 이 프로그램은 소위 피어 투 피어(Peer-To-Peer)’ 방식 내지 이를 기반으로 한 탈중앙화 애플리케이션(DApp)’ 방식으로 구동되기 때문에 설사 어떤 컴퓨터에 설치된 프로그램 자체에 해킹이 이루어지더라도 이러한 해킹은 일부 노드들에 대해서만 이루어질 것이기 때문에 전체 네트워크의 무결성에는 영향을 주지 않습니다.

(2) 블록체인 기술의 정의
  
하지만 여기까지의 설명은 원장을 분산 저장하면서도 그 위조 내지 변조 가능성을 차단하는 그러한 방법의 가능하다는 점에 대한 설명일 뿐이지 그렇다면 도대체 왜 참가자들이 자발적으로 이러한 검증 네트워크에 참여하여 자신들의 컴퓨팅 파워를 제공할 동기까지 설명해주는 것은 아닙니다.
  
위에서 본 바와 같이 블록체인 기술은 검증 네트워크를 구성하고 유지할 유인을 참가자들에게 반드시 제공해야만 합니다거래 네트워크의 주소 정보들을 포함한 거래 데이터들의 내역들을 보관하고 지속적으로 검증하는 역할을 하는 검증 네트워크의 참가자들즉 노드들에 대해서는 반드시 어떤 유인이 제공되어야만 하며 이러한 유인이 없는 경우 검증 네트워크의 구성과 유지가 불가능하게 될 것입니다.
  
사실 블록체인 기술의 핵심은 공지공용의 기술인 암호 기술에 있는 것이 아니라 이를 활용하여 검증 네트워크의 참가자들에게 검증 활동을 지속할 수 있도록 하는 유인과 동기를 제공하는 알고리즘에 있으며 이러한 알고리즘을 구성하는 방법은 하나만 있는 것이 아니지만 그 공통점을 볼 수는 있습니다.
  
예컨대유명한 비트코인’ 검증 네트워크의 경우에는 거래 네트워크가 하는 기능이 비트코인이라고 하는 무형의 대상을 그 일억 분의 일을 단위(‘사토시’ 단위)로 하여 거래 네트워크 참가자들 사이에서 이전되도록 하는 것이고 여기서 검증 네트워크가 하는 기능은 이러한 거래의 진정성 검증과 거래 내역의 무결성 검증을 확보하는 것입니다따라서 비트코인 블록체인 시스템은검증 네트워크에 참여하는 노드들에게는 이 네트워크를 통해 거래되는 무형의 대상인 비트코인을 검증 활동에 대한 대가로서 특수한 알고리즘에 따라 신규 발행(거래 내역 무결성 검증)하거나 수수료 지급(거래 진정성 검증)을 하는 방식으로 유인을 제공합니다.
  
이 무형의 대상이 바로 해당 네트워크에 대한 지분권으로서의 의미를 가지는 암호재산’, 즉 암호화폐’ 내지 가상통화/가상화폐입니다위에서 말한 블록의 봉인에 협력하는 대가가 암호재산인 것입니다
  
사실 비트코인 검증 네트워크의 경우는 특별히 화폐와 같은 기능을 수행할 수 있는 무형의 대상을 창조하기를 원했던 사람에 의하여 설계되었기 때문에 이상과 같은 최소한의 알고리즘을 채택한 것이지만 나아가 해당 블록체인의 설계 목적에 따라서 거래 내역 무결성 검증과 거래 진정성 검증 이외의 기준으로도 해당 블록체인이 창조하는 무형의 대상즉 암호재산을 발행하고 배분하는 내용의 알고리즘을 채택할 수도 있는 것입니다
  
예컨대블록체인의 저장 공간을 제공하는 노드들에 일정한 기준에 따라 암호재산을 발행하거나 배분할 수도 있고블록체인 자체의 유지와는 무관한 활동즉 블로그에 글을 작성하여 게시한 후 다른 참가자들의 추천을 받은 횟수에 따라서 암호재산을 발행받거나 배분받을 수도 있는 것입니다이러한 유인 제공 알고리즘들을 대체로 작업증명(Proof of Work)’, ‘지분증명(Proof of Share)’, ‘중요도증명(Proof of Importance)’ 등 세 부류로 나누는 것이 보통입니다.
  
나아가 거래의 조건도 단지 암호화폐의 일방적이고 무조건적인 이전이 아니라 미리 정해진 복잡한 계약 프로그램에 따르게 만드는 소위 스마트 계약’ 방식도 존재하며 이는 현재 더 개선된 블록체인으로 이해되고 있습니다이는 흔히 블록체인 2.0’이라고 불리며 그 대표적인 것으로는 이더리움etherium’ 블록체인 시스템이 있습니다이에 대해서는 뒤에서 비트코인 블록체인 시스템을 설명하면서 약간의 설명을 함께 덧붙이도록 하겠습니다.
  
결국성공적으로 활성화된 블록체인은 일차적으로는 절대적으로 신뢰할 수 있는 네트워크라는 기초적인 내재적 가치를 지니게 되고 그 이외에도 여러 응용된 형태의 블록체인의 경우 그 이외의 내재적 가치도 함께 지니게 됩니다결국 유인과 동기의 제공을 위하여 그 내부에서 발행되고 거래되는 무형의 대상은 이와 같은 신뢰 네트워크가 과거로부터 현재까지 쌓아온 가치에 대한 지분으로서의 의미를 가진다고 평가할 수 있습니다블록체인 네트워크가 자발적인 동기 하에 탈중앙화된 형태로 유지되기 위해서는 그 네트워크의 가치에 대한 지분으로서의 무형의 대상이 창조되어야만 하고 이것이 바로 암호재산’ 내지 암호화폐인 것입니다.
  
요컨대블록체인 기술은 이상과 같은 핵심 암호 기술을 토대로 하여 사람들로 하여금 분산된 원장 정보의 유지와 검증에의 자발적인 참여를 유도하도록 설계된 알고리즘을 갖춘 컴퓨터 프로그램과 이러한 프로그램이 실행되는 하드웨어 그리고 이러한 하드웨어들을 연결하는 통신망 등이 유기적으로 참여자들 각자의 동기 부여에 의하여 분산적으로 운용되도록 하는 기술이라고 정의될 수 있습니다.
  
블록체인 기술은 암호 기술에 바탕을 두고 있지만 단순히 기계적으로만즉 기계의 작동만으로 구현될 수는 없다는 특징이 있습니다따라서 암호재산에 의한 보상이 없이는 블록체인 네트워크가 유지될 수 없기 때문에 결국 암호재산은 떼어 놓고 생각할 수 없는 블록체인의 핵심이라 할 수 있을 것입니다.
  
이상의 암호 기술과 블록체인 기술에 대한 구체적인 시연은 다음의 누리집에서 찾을 수 있습니다.(2018년 2월 8일 기준)
  
https://anders.com/blockchain/
  
블록체인의 성공적인 실현 사례 비트코인
  
(1) 비트코인의 개요
  
마지막으로 실제 블록체인의 검증 네트워크에 노드로 참여하는 구체적 사례를 보도록 하겠습니다.
  
우선 비트코인 검증 네트워크에 참여하기 위하여 참가자는 자신의 노드를 구축할 필요가 있습니다이는 https://bitcoin.org/ko/download 등과 같은 누리집에 접속하여 노드 구축용 프로그램(무료 오픈소스로 MIT 라이센스하에 배포됩니다)을 다운로드받아 설치하는 것으로 수행할 수 있습니다이 프로그램이 설치되는 컴퓨터는 인터넷에 연결되어 있기만 한다면 최근 기준으로 평범한 사양의 가정용 컴퓨터이어도 정상적으로 작동합니다.
  
이렇게 노드 구축용 프로그램즉 일명 채굴용 프로그램을 설치하여 실행시키면 컴퓨터 전원을 내리지 않는 한 거래 검증(거래 진정성 검증)과 블록 검증(거래 내역 무결성 검증)을 자동적으로 수행하게 됩니다예컨대해당 컴퓨터가 가끔씩 채굴에 성공하는 경우즉 ‘nonce’를 찾는 문제를 가장 먼저 해결하게 되는 경우 이에 대한 보상으로 비트코인을 신규로 발행받게 됩니다.
  
마지막으로비트코인 거래’ 네트워크에 참여하는 것은 더욱 간단합니다비트코인 프로토콜에 부합하는 형식을 갖춘 개인키/공개키 쌍과 이를 기초로 할당되는 비트코인 주소를 발급받으면 되기 때문입니다그 다음 소위 지갑 프로그램을 인터넷에 연결된 상태에서 실행함으로써 개인키를 통해서 자신의 비트코인 주소에 보유한 비트코인을 이전시킬 수 있고 자신의 비트코인 주소를 타인에게 알려줌으로써 비트코인을 이전받을 수 있습니다이렇게 보유한 비트코인을 안전하게 보관하기 위해서는 단지 개인키를 종이에 출력해서 금고에 보관하거나 인터넷에 연결되지 않은 여러 저장장치에 중복 저장해서 보관하면 됩니다.
  
위에서 언급한 바와 같이 이 비트코인’ 검증 네트워크의 경우 이 검증 네트워크에 참여하는 노드들에게이 네트워크의 중개를 통해 거래 네트워크 속에서 거래되는 무형의 대상인 비트코인’ 자체를 바로 그 검증 활동에 대한 대가로서 특수한 알고리즘에 따라 신규 발행(거래 내역 무결성 검증)해주거나 수수료 지급(거래 진정성 검증)을 하는 방식으로 유인을 제공하고 있습니다.

(2) 비트코인 원장의 데이터 구조
  
이제 위에서 그림으로 보았던 비트코인 블록의 거래 내용’ 부분의 데이터 구조즉 원장 양식은 어떻게 이루어져 있는지를 구체적으로 살펴보도록 하겠습니다.
  
비트코인 블록체인의 경우에 거래 내용이 되는 현실 세계에서 미리 예측할 수 없는 방식으로 발생하는 상태 변화(state change)의 사건들은 비트코인이라고 불리는 무형의 대상의 신규 생성에 따른 주소 귀속(Coinbase Transaction)과 이전에 따른 귀속 주소의 변경(Transfer Transaction) 두 가지입니다비트코인 블록체인의 거래 내용은 하나의 코인베이스 거래와 여러 개의 이전 거래들로 이루어져 있습니다하나의 블록 속에서 보면 코인베이스 거래가 블록 생성과 함께 가장 먼저 기록되고 그 다음 순서대로 이전 거래들(Transfer Transactions)이 이어서 기록되게 됩니다.
  
여기서 코인베이스 거래란 작업증명을 성공시켜 하나의 블록의 봉인을 가능하게 해준 노드에게 그 보상으로 신규 발행되는 비트코인의 양과 그 귀속 주소를 내용으로 하는 거래를 말합니다비트코인이 신규 발행되는 거래는 유일하게 코인베이스 거래만이 있습니다.
  
반면 거래 네트워크 참가자들에 의하여 이루어지는 이전 거래들을 나타내는 거래 원장’ 하나는 다음과 같은 데이터 구조를 갖고 있습니다.

비트코인 블록체인 속 거래내용의 데이터 구조 ]
  
여기서 ‘INPUT’은 비트코인 송금을 의미하며 ‘OUTPUT’은 비트코인 수금을 의미합니다. 
  
‘INPUT’ 정보 부분즉 비트코인 송금 정보에는송금의 대상이 되는 비트코인이 어떤 ‘OUTPUT’에서 수금되었던 것인지를 그 거래 원장 식별번호(Transaction ID)와 ‘OUTPUT’ 번호(index)를 통해 특정하는 내용과 송금하는 주소 보유자의 개인키가 핵심이 되는 서명’(개인키 이외에 이른바 아래 검증 스크립트verifying script’의 조건을 충족시키는 - ‘해제 스크립트unlocking script’가 포함될 수 있습니다및 이와 쌍을 이루는 공개키가 기록되어 있습니다이렇게 서명이 ‘INPUT’에 포함되어 있다는 것은 비트코인 보유자가 자신의 의사로 송금했다는 증거가 됩니다이처럼 모든 ‘INPUT’은 이와 쌍을 이루는 비트코인 수금 정보즉 ‘OUTPUT’을 갖게 된다는 것을 알 수 있습니다이는 일종의 복식부기법(double-entry bookkeeping)’이라고 할 수 있습니다.
  
이 ‘OUTPUT’ 정보 부분즉 비트코인 수금 정보에는수령하는 비트코인의 사토시 단위로 표현된 수량과 수령하는 주소에 할당된 공개키 및 이 글에서 자세히 설명하지 않는 검증 스크립트’ 내지 잠금 스크립트locking script’ 프로그래밍 코드가 기록되어 있습니다이 코드는 아직 소비되지 않은 비트코인 정보가 담긴 아웃풋(UTXO)’ 속 비트코인이 향후 소비되기 위해 충족되어야만 하는 조건을 정하고 이를 검증하는 코드로서 이를 통해 간단한 형태의 스마트계약을 구현할 수도 있습니다.
  
결국 위에서 이미 본 바가 있는 하나의 비트코인 블록에는 이렇게 거래 식별 번호로 특정되는 거래 원장’ 여러 개가 코인베이스 거래’ 원장에 이어서 순서대로 기록되어 있는 것입니다여기서 ‘INPUT’과 ‘OUTPUT’ 쌍의 시간적 계열에서 맨 마지막 쌍의 ‘OUTPUT’이 되는아직 송금이 이루어지지 않아 최종 주소 보유자가 보유하고 있는 비트코인을 UTXO(Unspent Transaction Output)이라고 말한다는 것은 이미 본 바와 같습니다.
  
마지막으로위 거래원장’ 개념과 관련하여 간략하게 이더리움(ethereum)’과 같은 블록체인 2.0’의 기초적인 아이디어를 소개하겠습니다위에서 ‘INPUT’ 정보 부분즉 비트코인 송금 정보에는 송금하는 주소 보유자의 개인키가 핵심이 되는 서명(‘개인키’ 이외에 이른바 아래 검증 스크립트verifying script’의 조건을 충족시키는 - ‘해제 스크립트unlocking script’가 포함될 수 있습니다및 이와 쌍을 이루는 공개키가 기록되어 있다고 하였습니다이 서명과 공개키’ 중 서명은 송금하는 주소 보유자즉 사람이 직접 컴퓨터나 스마트폰 상에서 집행하는 것임은 물론입니다하지만 이 서명’ 부분이 사람에 의하여 직접 수행되는 방식 이외에도 사전에 특수한 프로그래밍 언어로 코딩되어 정해진 바 그대로 자동적기계적으로 수행되도록 한다면 편리할 경우가 많을 것입니다예컨대일정한 금액을 모금함에 있어서 그 모금된 금액이 일정 금액에 미달하는 경우에는 송금자에게 그대로 기부금을 반환하고 일정한 금액 기타 조건을 충족하는 경우에는 모금자에게 이체되도록 하는 크라우드펀딩이나 보험 등을 생각해볼 수 있습니다이러한 형태의 블록체인은 거래 참여자의 주소 내지 계정(, ‘공개키’)을 살아있는 사람뿐만 아니라 미리 코딩이 된 프로그램에게도 할당해주고 후자의 경우 개인키의 서명이 오로지 그 프로그램에 따라서만 수행되도록 하기만 하면 실현될 수 있습니다. ‘이더리움의 경우를 예로 들자면공개키즉 주소 내지 계정이 할당된 프로그램 단위를 스마트 컨트랙트(smart contract)’라고 부르고 그 프로그램을 코딩하는 프로그래밍 언어로서 솔리디티(solidity)’ 등을 채택하고 있습니다이러한 블록체인 2.0 기술은 블록체인을 인터넷으로 연결된 수많은 컴퓨터들 위에서 통일적으로 작동하는 하나의 거대한 운영체제로 만들어 주는 셈이 되며 스마트 컨트랙트는 그 위에서 탈중앙화된 형태로 확실한 신뢰성을 갖고 실행되는 하나의 응용프로그램(application)으로서의 지위를 갖게 된다는 놀라운 결과를 낳는다고 할 수 있습니다. 
  
이상으로 블록체인 기술과 이를 기초로 하여 객관적으로 인식 내지 식별될 수 있는 존재가 되는 암호재산 내지 가상통화의 기술적 개념을 간략하게 살펴보았습니다.

댓글 남기기