Recommanded Free YOUTUBE Lecture: <% selectedImage[1] %>

Contents

BolckChain 소개

블럭체인(BlockChain)은 말 그대로 "블럭"의 "연속된 연결"이다. 이때 이 연결은 암호로 보호가 된다. 정보의 권한과 소유권은 계속 바뀔 수 있으며, 이를 추적하는 것은 매우 중요한 일이다. 블럭체인을 이용하면, 이러한 연속된 정보의 변경을 안전하게 저장하고 추적 할 수 있다.

블럭의 연결을 암호화해서 안전하게 관리하자라는 작업은 1991년 Stuart Haber와 W.Scott Stornetta에 의해서, 그 개념이 만들어졌다.

블럭체인의 구현을 위한 구체적인 스펙은 2008년 Satoshi Nakamoto이 정리했으며, 이후 비트코인(bitcoin)으로 구현됐다. 비트코인은 P2P 네트워크와 분산 시스템 서버를 이용해서 블럭 체인 데이터베이스를 자율적으로 관리할 수 있다는 특징이 있다. 비트코인에 대한 블록 체인은 신뢰할 수 있는 관리자를 요구하지 않으면서 "이중 지출 문제를 해결한 최초의 디지털 화폐"가 됐다.

블럭체인은 이전 기록이 중요한 연속된 정보의 흐름을 보장하는 용도에 특히 적당하다. 이러한 특징은 화폐 발행과 같은 응용에 적합한 측면이 있다. 화폐 발행에서 가장 중요한 것은 화폐발행을 누가 할 것인가(통제권)과 소유의 흐름을 어떻게 관리 할 것인가 하는 거다. 화폐발행의 통제와 흐름의 관리.. 지금까지 은행이 했던 일이며, 중앙에 집중되는 경향이 있었다. 블럭체인은 발행주체가 분산이 된다.

 블럭체인의 구성

블럭체인의 위 그림으로 묘사 할 수 있다. 각각의 사각형은 블럭이며, 이 블럭들을 연결하는 선이 체인이다. 검은색 블럭들이 연결된 체인은 메인(main)체인으로, 최초 블럭(파란색)으로 부터 가장 길게 연결된 체인이 메인체인이 된다. 빨간 색은 중간 중간 메인 체인으로 부터 파생되는 체인은 Orphan체인이다. 고아(Orphan)체인이라는 의미에서 볼 수 있듯이 이 체인은 보통 버려진다.

저장소

블럭체인은 저장소다. 다른 어떤 특별한 것이 아니다. 하지만 기존의 다른 저장소(데이터베이스)가 가지지 못한 특징을 가지고 있다.

분산과 보호

블럭체인은 블럭과 블럭의 연결이다. 연결만 유지 할 수 있다면 각각의 블럭은 어디에 있던지 상관이 없으며, 컴퓨터 네트워크 상에서 분산될 수 있다. 데이터를 네트워크 전체에 저장함으로써 데이터가 중앙에 집중되는 위험을 제거한다. 해커는 데이터가 밀집된 중앙 저장소를 공격 타겟으로 삼는다. 분산된 블럭체인 시스템의 경우 집중된 취약지점과 실패지점이 없다. 블럭체인의 보안으로 공개 키 암호화 방식을 사용한다. 공개키가 블럭체인의 주소가 되며, 개인키로 해당 블럭체인에 접근 할 수 있다.

블럭체인은 분산 시스템을 구성하는 모든 노드에 체인의 복사본을 유지한다. 여기에는 중앙집중식 공식 사본이라는게 존재하지 않는다. 모든 복사본은 동등한 위상을 가진다. 특별한 복사본이 없다는 것은 민주주의적 시스템이 작동 할 수 있음을 의미한다. 분산 시스템 상에는 서로 다른 복사본을 가지고 있을 수 있는데, 이때 가장 많은 노드들이 가지고 있는 복사본이 진짜 복사본으로 선택된다.

만약 블록을 쉽게 만들 수 있다면, 해커가 많은 수의 컴퓨터를 가지는 것으로 기록의 조작이 가능해 질 것이다. 그렇지만 문제를 해결하기 힘들게 만들었기 때문에, 블럭체인을 조작하려면 선의의 채굴자가 가진 CPU 파워보다 더 큰 파워를 가져야 한다. 민주주의 시스템에 따라서 51%의 공격이 가능해야 한다. 게다가 헤커가 조작하고자 하는 블럭에 이미 다른 블록들이 이어져 있다면 공격은 더욱 어려워질 것이다.

블럭의 사슬

블럭체인은 거래의 사슬이라고 했는데, 이 블럭은 단일 거래가 아니다. 10분 동안의 거래내역을 묶어서 하나의 블록을 만든다. 이 블럭은 네트워크에 참여한 모든 노드에 전달되는데, 참여자들이 타당한 거래라고 승인해야만 이전에 있던 블럭에 연결될 수 있다. 이렇게 승인되고 연결된 블럭은 영구히 저장된다.

 BlockChain의 저장 방식

일단 블럭체인을 형성하면 위/변조가 힘들어진다. "여러 노드가 승인"에 참여했기 때문에, 모든 노드의 블럭을 변조해야 한다. 해당 블럭을 변조한다고 해도, 연결된 연속된 블럭들을 변조하지 못한다면, 위/변조에 성공 할 수 없다. 사실상 위/번조가 불가능하다고 볼 수 있다.

블럭의 구조

블럭의 대략적인 모습이다.

 블럭의 구조

블럭은 하나 이상의 트랜잭션의 모음이다. 비트코인은 10분마다 한번씩 블럭을 만드는데, 이전 블럭의 해더의 해시를 포함한다. 블럭은 트랜잭션 정보를 포함한 매우 중요한 정보다. 악의를 가진 노드가 블럭을 만들어서 이전 블랙에 링크해버리면, 이후에 만들어지는 블럭 모두를 신뢰 할 수 없게 될 것이다. 비트코인은 노력증명을 통해서 블럭의 생성권한을 준다.
  1. 난이도 목표 : 문제의 난이도다. 이 문제를 풀어야지 블럭을 만들 수 있다.
  2. Nonce : 문제는 해시 때려맞추기다. 난이도는 해시의 몇째줄 까지를 때려맞춰야 하는지로 결정된다. 결국 노드는 난이도 목표를 만족하는 값을 찾을 때까지 루프를 돌면서 카운트 할 수 밖에 없다. Nonce는 문제의 해답이다. 노력증명에 대해서는 아래에서 자세히 다룬다.

트랜잭션

트랜잭션은 거래다. 비트코인 네트워크에서 유저는 거래를 위한 address(전자 지갑)을 만든다. 거래라는 것은 비토코인을 다른 유저의 비트코인으로 옮기는 과정이다. 이 과정이 하나의 트랜젹션이 된다. 트랜잭션을 묘사한 그림이다.

output이라는 것은 다른 주소로 비트코인을 보내는 행위인데, 여러 주소로 보낼 수 있다. 따라서 하나의 트랜잭션은 하나 이상의 output을 가질 수 있다. output은 오직 하나의 input으로만 보내는 것으로 이중지출을 막는다.

output은 Unspend Transaction Outputs(UTXOs) 혹은 spend transaction output 둘 중 하나의 상태를 가진다. input은 하나의 트랜잭션에서 반드시 완전히 소비(output)되야 한다. 트랜잭션에서 소비하지 못한 input은 UTXOs 상태의 output으로 소비한다.

그림에서 Transaction 0은 100k satoshis를 입력받았다. 그리고 두개의 output으로 40k와 50k를 소비했다. 10k는 블럭 생성자에게 지불하기 위해서 따로 소비됐다. 그러므로 100k를 모두 소비했다. Tx3의 경우에는 output이 없으므로 지불금인 10k를 제외한 20k가 UTXo로 소비됐다. UTxo는 미사용금액이고, Tx3로 부터 왔다는 것을 알고 있으므로, 추적 가능하다.

블럭을 만들 권한

비트코인 네트워크에서 이루어지는 "거래"는 비트코인 지갑들간의 정보(가치)의 이동이다. 유저의 거래는 개인키에 의해서 서명이 되서 모든 유저에게 알려진다. 이 거래는 "채굴"이라는 단계를 거쳐서 10분안에 그 내역이 확인된다.

채굴은 10분동안 이루어진 거래를 "승인"하기 위한 매우 민감한 행위다. 따라서 승인 권한이 있을지를 결정하는 어떤 매커니즘이 있어야 하는데, 비트코인은 POW를 이용한다.

비트코인은 매우 풀기 어려운 문제를 제출하고, 이 문제를 푼 노드에게 블럭 승인 권한을 준다. 이 과정은 경쟁적으로 이루어지기 때문에, 악의적인 유저가 연성적으로 블럭을 생성 할 수 없게 만든다. 경쟁에 참여하게 하려면 당연히 그에 맞는 보상이 있어야 할 것이다. 비트코인 네트워크는 코인을 지급한다.

네트워크가 커질 수록 채굴 노드가 많아지기 때문에, 문제는 점점 더 어려워진다. 개인 컴퓨터로 마이닝해서는 답이 없기 때문에, GPU 클러스터를 만들거나 채굴 풀에 가입해서 문제를 풀기도 한다.

문제를 풀어서 블럭을 만들면, 이는 분산 네트워크에 전달되고 승인을 받으면 메인 블럭체인의 끝자락에 위치하게 된다.

블럭체인에서의 문제 풀이

블럭체인에서 블럭을 만들기 위해서는 노력(CPU 파워)이 필요하다. 블럭체인은 참여자들로 하여금 hashcash문제를 풀게해서, 문제를 푸는 사람에게 블럭에 대한 권한을 준다. 문제를 푸는 이 과정이 채광(mining)라고 한다.

문제는 해결하기는 어렵지만 검증하기는 쉬워야 한다. 그래야 참여자들이 블럭과 거래를 빠르게 검증 할 수 있기 때문이다. 블럭체인에서는 SHA-256 해시 알고리즘을 사용한다. 해시값으로 원본 데이터를 찾으려면 2^256의 데이터를 일일이 대입해야 하는, 현대의 컴퓨터로는 불가능한 연산을 해야 한다.

hashcash는 난이도를 낮춰서 현실적인 참여가 가능하도록 만든 문제다. 기본 개념은 간단하다. 2^256개를 전부 맞추는 대신에, 일부만 맞추면 되는 것으로 문턱을 낮췄다. 예를 들어 2^256 해시 전체를 찾는 대신에 앞자리 2^20 정도만 일치해도 맞는 것으로 해주는 식이다. 2^20이면 약 1백만 정도로 일반적인 PC로도 충분히 문제를 풀 수 있는 정도가 된다.

Hard forks

하드포크는 기존의 블록체인과 호환되지 않는 프로토콜의 변경이 이루어지는 걸 의미한다. 이더리움(Ethereum)은 2016년 6월17일 발생한 $60M 가량의 해킹 사건에 대한 해결책으로 하드포크를 진행했다. 이 사건은 이더리움기반의 플랫폼 위에서 작동하는 애플리케이션 The DAO의 취약점이 공격당하면서 발생했는데, 이로 인해서 발생한 $60M의 화폐를 아예 롤백해버리기로 결정한 것이다.

당연히 전체 블럭 체인 네트워크의 신뢰성을 위해서는 이런 일이 있어서는 안될 것이다. 명목상 해커에 의한 거래를 되돌리는 것으로 당연히 해야 할 조치라고 생각 할 수 있겠으나, "특정인이 개입하여 소프트웨어를 변경하는 의사 결정 자체가 "중앙 통제 없이 작동하는게 가장 큰 특징이자 장점인 블럭체인의 사상을 흔드는"일이 될 수 있기 때문이다.

이런 우려가 있는 반면, 블럭체인 기술을 활용하면서도 중앙에서 통제권을 행사하기를 원하는 은행은 긍정적으로 바라보기도 한다.

블럭체인의 작동 방식

조사할 내용들
  • 블럭체인은 P2P 네트워크를 구성한다.(어떻게 구성이 되는가 ? 궁금하다 확인해봐야 겠다.)
  • P2P 네트워크를 구성하는 각 컴퓨터를 노드라고 하자.
  • 각 노드는 중앙 데이터베이스 필요 없이 독자적으로 블럭체인을 검증 할 수 있다.
  • 또 한 각 노드는 역시 독자적으로 블럭체인에 블럭을 추가 할 수 있다. 블럭을 추가히기 위해서는 문제를 풀어야 한다. 문제는 여러 명이 풀 수 있겠는데, 가장 먼저 문제에 대한 해답을 제출한 노드의 블럭만을 인정해 준다.
  • 많은 노드가 참여해야 네트워크가 성공 할 수 있다. 신용카드에 사용자에게 혜택을 주는 이유를 생각해 보자. 블럭체인 역시 혜택을 줘서 네트워크로의 참여를 독려한다. 비트코인의 경우에는 (CPU를 열심히 돌려서 1등으로 문제를 제출한)참여자에게 비트코인과 블럭내에서의 거래에 대한 수수료를 지급한다.
  • 다양한 블럭체인 네트워크를 만들 수 있을 텐데, 서비스의 특징에 맞는 혜택을 잘 설계해야 할 것이다. 독립적인 카 쉐어링 네트워크를 만든다면, 포인트, 할인, 컨텐츠, 신용, 수수료, 각종 차량 서비스들을 혜택으로 제공 할 수 있을 것이다. 부동산 거래 네트워크, 중고차량 네트워크 등도 참여를 독려하기 위한 혜택을 설계 할 수 있을 것이다.

블럭의 분기

각 노드는 독자적으로 블럭을 만들 수 있다. 여러 노드가 비슷한 시기에 블럭을 만들어서 제출 할 수 있고 노드가 분기 될 것이다. 이 중 하나의 블럭체인을 정식 블럭체인으로 승인하고, 다른 증복된 블럭체인은 버려야 할 것이다.

비트코인은 가장 빠르게 성정한 블럭체인을 메인 체인으로 인정한다. 어떤 노드가 블럭을 제출했다고 가정해보자. 채굴자들은 가능한 빠르게 이전블럭으로 부터 새로운 블럭을 만들어야 자신 소유의 블럭을 만들 확률이 높아진다. 이런 이기적인 목적하에, 가장 성공 할만한 블럭을 찾게 될 것인데, 가장 성공 할만한 블럭이란 가장 빠르게 제출된 블럭이 될 것이다.

만약 충분한 수의 노드와 컴퓨팅 파워를 보유하고 있다면, 자신의 블럭이 메인 체인이 포함되도록 조작 할 수 있을 것이다. 이 문제는 네트워크의 규모로 해결 할 수 있을 텐데, 초반 규모가 충분하지 않을 때, 체인의 조작을 어떻게 막을지에 대한 설계도 필요 할 것이다.

블럭체인의 장점과 단점

블럭체인은 안전성, 투명성, 분산, 비용절감, 상호운용성의 확보 등의 장점이 있다. 반면 거래취소가 어렵고, 거래에서 문제가 발생 할 경우 책임질 사람이 없다는 문제점을 가지고 있다. 하지만 이들 문제는 해결하기 위한 여러 방법들이 개발되고 있으므로, 적절한 타협점을 찾을 것으로 보인다.

활용

  • 공공데이터
  • 핀테크
  • 전자상거래
  • 저작권 관리
  • 크라우드 펀딩
  • IoT 플랫폼
  • 스마크 거래(Smart Contract)
  • 의료데이터
  • 비트코인
  • 금융
  • 주식
  • SNS : 블럭체인기반의 분산 블로깅 시스템 같은.

의료

미국인들은 평생동안 16명의 의사를 방문한다. 이들 데이터는 디지털로 저장하도록 허용하고 있는데, 다른 의료시설과 의사들의 결과가 호환되지 않는 데이터베이스에 저장되고는 한다. 아마도 우리나라는 더 심각 할 것으로 생각 된다.

MIT에서는 MedRec이라는 이더리움 블럭체인 기반의 의료 데이터 관리 시스템을 만들고 있다. MedRec에서 마이닝 주체는 의료인이 된다. MedRec는 여러 기관, 의사, 연구원으로 부터 만들어진 환자 본인의 의료데이터 뿐만 아니라, 자녀, 형제, 손자의 데이터까지 안전하게 저장 할 수 있다. 의료정보와 같은 민감한 정보를 안전하게 관리 할 수 있다는 것은 핵심적인 장점이다. 여기에는 개인의 DNA 정보들도 저장 할 수 있을 것이다.

마이닝 주체인 의료기관들은 해당 네트워크를 조회하는 것으로 다양한 의료 서비스를 만들 수 있으며, 각 개인은 안전하게 자신과 가족의 의료 서비스를 받을 수 있다.

여기에서 고민해야 할 것이 있다. 굳이 블럭체인이어야만 하는가 ?

"그냥 의료기관들끼리 의료정보를 서로 공유하자라고 해도 괜찮지 않을까 ?" 컨소시엄 같은 걸 맺어서 데이터 포맷 약속하고, 중앙 데이터베이스에 함께 저장하는 거다. 클라우드만 있어도 되는 것 아닌가. 블럭체인은 익명의 네트워크 참여자도 신뢰할 수 있다는게 장점이다. 하지만 의료기관은 "익명"이 아니다. 의료기록은 트랜잭션(거래)가 아닌, "데이터를 만드는"행위다. 거래내용을 블럭으로 만드는 거라면, 블럭의 트랜잭션이 검증되면 누가 블럭을 만들더라도 상관 없을 것이다. 그렇지만 의료기록의 경우, "의료기록을 만들 수 있을 전문성과 신뢰성"을 입증해야만 한다. 결국 네트워크에는 익명의 기관이 아닌 상호 검증된 기관이 참여하게 된다.

하지만 어떤 기술이든지 원안이 제공하는 스펙그대로 사용하는 경우는 없다. 블럭체인은 "분산된 저장소"라는 걸 기억하자. 다양한 관점에서 접근할 필요가 있다.

우선 "개인정보의 보호"는 의료 네트워크를 구성하는 핵심요소가 될 수 있다. 의료영역에서 개인정보를 저장할 필요가 없는 블럭체인의 장점을 살릴 수 있을까 ?

 의료 블럭체인

유저가 병원에서 진단을 받았다. 이 정보는 블럭체인에 저장된다. 유저는 약국에 가서, 처방을 받는다. 기존 시스템이라면 처방전을 가지고 약국을 방문해야 겠지만, 처방전은 모두 블럭체인에 있으니 유저는 몸만 가면 된다. 이때 정보의 흐름을 보자.

 트랜잭션 흐름

  1. 유저가 병원에서 진료를 받는다.
  2. 진료기록과 처방전은 병원에서 기록한다.
  3. 이 진료기록은 유저의 프라이빗키로 서명한다.
  4. 유저는 아무 약국에 들러서 자신의 프라이빗키로 처방전을 요구한다.
  5. 약국은 유저 퍼블릭키에 대한 address를 이용, 의료기록을 찾아서 처방한다.
  6. 처방이 끝났다면, 이 트랜잭션을 서명한다.
진료기록에는 유저의 개인 정보를 포함하지 않기 때문에, 약국은 "개인정보 이슈 없이 처방에 필요한 정보를 자유롭게 열람할 수 있다."

이때 병원은 개인정보를 가지고 있어야 할까? 언뜻 생각해보면, 굳이 개인정보가 없어도 기록을 추적하는데 아무런 문제가 없겠지만, 다른 이유로 개인정보를 알아야 할 수도 있다. 뭔가 사고가 터졌을 때, 개인이나 보호자 등에게 연락을 해야 할 수도 있다.

개인 정보를 저장하는 주체가 그에 대응하는 퍼블릭 키를 알수 있다면, 블럭체인 네트워크에 분산저장된 개인의 모든 정보를 가져올 수 있다. 심각한 개인정보 보안 문제가 발생 할 수 있다. 결국 개인정보는 블럭체인 네트워크와 완전히 독립해서 관리해야 할 것이다.
  • 개인은 자신의 Private Key를 이용해서 의료정보에 접근 할 수 있다.
  • 개인정보는 개인만 접근 할 수 있어야 한다. 의료기관은 블럭체인의 내용을 보고 개인을 식별 할 수 없어야 한다.
고민이 필요하다.

참고