출처:https://medium.com/@NipolNIpol/blockchain%EC%97%90-%EB%8C%80%ED%95%98%EC%97%AC-%EA%B3%BC%EA%B1%B0%EC%97%90%EC%84%9C-%EB%AF%B8%EB%9E%98%EA%B9%8C%EC%A7%80-a4917534327c
대다수가 Bitcoin이라는 것은 들어보았지만, 이 Bitcoin Network를 안정적으로 유지하는 Blockchain이라는 기술은 많이 알려지지 못했습니다. 아주 많은 장점을 가지고 있고, 다양한 수단으로도 사용될 수 있는 미래가 있기 때문에, 자처해서 전도사 역할을 하여봅니다.
Blockchain을 구성하는 “안정적인 합의과정을 구성하는 것들”은 고유의 기술적 위치가 확실하고, 서로 맞물려 Blockchain을 이루고 있기 때문에, 기술 요소를 하나씩 설명하는 것은 문맥상으로도 맞지않고. 그것들을 하나씩 맞춰가는 과정 또한 필요하기 때문에, 이는 옳지 않다고 판단했습니다. 이러한 이유로 며칠을 고민했는지 모르겠네요.
다음과 같이 개요를 설명하는 것이 제일 나으리라 판단하였고, 이 글이 Blockchain의 이해를 돕고 다양한 프로젝트로 기준화 되고, 기존 산업을 대체하는 수단으로 많은 활용이 되었으면합니다.
Peer to Peer의 세계
Blockchain은 Peer to Peer 클라이언트들로 이루어진 하나의 Network 그룹입니다. 혹시 이 글을 읽는 독자분들은, 파일공유 프로토콜인 Torrent를 사용해 본 적이 있나요? 특정한 파일을 가지고 싶다고 네트워크에 참여해 외치면, 파일을 가지고 있는 다른 사람들이 자발적으로 전송해주는 아주 고마운 프로토콜입니다.
나 또한 네트워크에 참여한 일원이기 때문에 전송받은 파일을 가지게 되면, 다른 사람이 네트워크에서 파일이 필요하다고 외칠 때도 나는 자진해서 전송해줍니다. Torrent란 자발적으로 파일을 유지하기 위한 합의된 클라이언트의 집합인 것입니다.
이러한 서비스의 특징은 무엇이냐면, 서버를 중심으로 모여있는 클라이언트들의 집합이 아니라는 것입니다. 모든 네트워크에 접속된 사용자들은 파일을 전송해주는 서버이자, 파일을 요청하는 클라이언트입니다.
또 다른 특징은, 굳이 내가 파일을 가지고 있지 않더라도, 네트워크에 요청하면 누군가 파일을 전송해 주기 때문에, 실질적으로 파일을 가지고 있는 것과 다름이 없다는 것이죠!
전 세계에 나를 제외한 모든 사람이 "Cinema Paradiso"라는 영화를 가지고 있다고 가정해봅시다. 내가 그 영화를 가지고 있지 않더라도, "사회"라는 사람들이 모여있는곳에 영화를 전송해 줄 것을 요청하면 "누군가, 한 명 쯤"은 전송해주지 않을까요.
이런 분산된(Distributed) 서비스는 Server — Client과 같은 중앙화된(Centralized) 서비스와 많이 다르다는 것을 알 수 있지요.
이처럼, Peer to Peer(이하 P2P) 서비스에 참여한 사용자들은 Node라고 부르는데, 이는 하나의 Node가 서버와 클라이언트를 분간하지 않고, 두가지 역할을 모두 수행하고 있기 때문입니다. 그럼 Torrent를 추상적인 관점으로 바라본다면, 무제한 파일 저장소나 다름없다고 볼 수 있겠네요! 이런 무한한 데이터 저장소에 모든 내용을 저장한다면 어떨까요? Blockchain은 바로 이 물음에서 부터 시작합니다.
세상에서 가장 커다란 저장소
Blockchain은 거대한 분산 장부(Ledger)입니다. 장부에는 무언가를 사고 팔았던 거래내역들이 모두 나타납니다. 이런 모든 거래 내역은 네트워크에 참여한 노드들이 보증을 하고, 필요하다면 나에게, 또는 나의 친구에게 전송해 주어 아무나 확인할 수 있도록 해 주는 것입니다.
Torrent는 딱 네트워크에 전파하고자 하는 파일들만 공유할 수 있었습니다. 새롭게 업데이트된 파일을 공유하고 싶다면, 새로운 Torrent 네트워크를 생성하여야 했죠. 하지만 Blockchain은 새롭게 생성되는 파일들을 추가하여, 네트워크에 참여한 모든 사람이 같은 파일을 가질 수 있게 할 수 있습니다.
이해를 돕기 위해 세 사람, A, B, C를 등장 시켜보겠습니다. 이 세 사람의 모임의 구성원은 각각 10만원씩 가지고 있으며 서로가 하는 거래를 보장하기 위해서 Blockchain을 사용하려고 합니다. 각각 10만원씩 모아 30만원을 만든 다음, 은행에 공동명의 통장을 개설 합니다. 이제 금액을 보장하는 주체는 은행이 되었고, 이제 모든 거래는 Blockchain을 통해서 이루어질 예정입니다. 이제 세 사람의 금액은 은행이 아닌, Blockchain에 의해 보장받게 됩니다. 그렇다면 이제 Blockchain이 얼마나 신뢰성이 높은지 알아 보아야 할 차례입니다.
Blockchain에 참여한 세 사람은 서로간의 거래를 할 때 모임의 과반수 이상이 참여했을 때 거래를 할 수 있도록 합의를 하였습니다. 점심. A는 B가 대신 지불한 도시락 가격 2,500을 준 것으로, 장부를 작성하였습니다. 그날 저녁 A는 C와 함께 술을 마셨고, A는 C가 대신 지불한 비용의 반인 10,500원을 준 것으로, 장부를 작성하였습니다.
이 모든 장부 내역은 세 사람이 가지고 있으며, 서로가 얼마를 가지고 있는지 확인 할 수 있고. 각자 돈을 어떻게 얻게 되었는지, 어떻게 잃게 되었는지 복기를 할 수 있게 되었습니다.
돈이 점점 없어지는 A는 돈이 아까웠습니다. 그래서 새로운 장부를 하나 작성하고, B와 C가 돈을 5만원씩 준 것으로 장부를 작성하였습니다.
하지만 이 장부는 B와 C에게 받아들여지지 않습니다. 과반수가 모여있지 않은 상태에서 작성한 장부를 인정할 수 없는 것이지요.
A가 만들어온 장부는 받아들여지지 않았고, B와 C는 A가 너무 괴씸하다는 생각을 했습니다. 그래서 A의 잔고를 각각 나누어 가지기로 하고, 새로운 장부를 합의하에 작성하였습니다.
A는 과반수에 의해 생성된 장부를 인정할 수 밖에 없으며, B와 C는 은행의 모임통장을 해지하고 돈을 찾아 나누어 가졌다는 행복한 이야기랍니다.
행복한 이야기 잘 보셨나요? 여기서는 모든 장부는 Block으로 표현되었고, 거래내역을 포함하고, 이전의 거래내역을 기반으로 새로운 Block을 생성하기 때문에 Chaining이 기본이 됩니다. 또한 모든 노드들의 잔고내역이 남기 때문에, "거래 가능한 잔고증명"도 가능하죠.
하지만 위의 이야기를 읽으시면서 어떤 부당함이 있지 않았나요? 우선 세 사람은 자신의 잔고가 다른 사람에 의해 사용될 수 있었습니다. 또 과반수에 의한 Block 생성이 가능했습니다.
하지만 실제 Blockchain들은 위의 취약점을 가지고 있지 않습니다. 하지만 어떻게 위의 취약점을 해결했는지 알아 둘 필요는 있지요.
Blockchain의 검증
해시 함수(Hash Function)는 임의 길이데이터를 고정된 길이의 문자열로 변환하는 함수인데, 이는 ‘같은 입력 값’에 한해서 같은 해시 문자열을 보장하며, 입력 값이 다르면, 다른 결과 값을 내줍니다.
해시 함수는 수학 공식의 결과물로 해시 문자열이 충돌되는 일이 없어야 합니다. 해시 함수의 효과중에 하나로 눈사태 효과(Avalanche Effect)라는 것이 있는데, 이는 기존의 데이터에서 아주 작은 데이터값이 바뀌더라도, 전체 해시 문자열이 바뀌어 원래 데이터의 유추가 불가능하게 됩니다.
이렇듯, 해시 함수는 짧은 문자열을 사용하여 패스워드의 일치 파일의 위변조 방지에 사용되고 있으며. 특히나 네트워크의 위변조를 방지하는데 사용되고 있습니다. 이러한 것을 Blockchain과 장부(Ledger)에 사용한다면?
장부의 찍혀있는 숫자 하나만 바뀌어도 눈사태 효과로 인해서 해시 문자열의 결과가 많이 달라지게 될 것입니다. Blockchain에서는 해시 함수를 이용하여 다음과 같은 합의된 방법으로 Block을 검증합니다.
해시함수( “블럭 양식 버전” + “이전 블럭의 해시” + “이전 블럭 작성시간” + “새로운 블럭에 포함될 거래 갯수” + “블럭 생성자” +”난이도 계수” )
= “새로운 블럭의 해시”
이런식으로 Block의 해시를 이룰 수 있는 정보들도 함께 기술되기 때문에, 블럭의 무결성을 확인할 수 있게 되었습니다. 이전 Block의 해시또한 다음 블럭의 해시를 생성하기 위한 수단으로 사용하기 때문에, 이는 충분히 검증된 수단으로 사용할 수 있습니다.
Block을 생성하는 구성요소들을 확인해보면 “블럭 생성자”와 “난이도 계수” 라는 것들도 Block을 증명하는데 쓰이게 됩니다. 그렇다면 이 두개의 값은 무엇을 위해서 추가되는 것일까요?
Blockchain에서 Block이 생성되지 않는다면, 화폐의 거래는 증명될 수 없습니다. 거래들은 Block에 포함되어야, 잔고증명이 성공적으로 이루어졌다라는 사실에 기초하기 때문이죠.
예시로 Bitcoin 블럭 해시를 한 번 볼까요?
#100,000–000000000003ba27aa200b1cecaad478d2b00432346c3f1f3986da1afd33e506
#390,001–0000000000000000055265fb53f189394aaa2c88ca37548c693c17965c9a45e2
무언가 특이하지 않나요?
100,000번 째 블럭은 11개의 0으로 시작하는 해시로 이루어져 있고, 390,001번째 블럭은 17개의 0으로 시작하는 해시로 이루어져 있습니다. Bitcoin의 “블럭 생성 난이도”는 해시의 시작을 0으로 하되, 0의 길이를 점점 증가시키는 것을 난이도를 상승시킨다고 합니다. 이런 해시형태를 만족하기 위한 Count 값이 "난이도 계수"인 것이지요.
100,000번 째 블럭과 390,001번 째 블럭들 사이에는 난이도가 무척 많이 상승했음을 알 수 있습니다. 지금 Bitcoin Network의 연산 성능은 전세계 500위 안에 있는 슈퍼컴퓨터의 연산 성능을 합한 것 보다 더욱 높다고 합니다. 이와같은 연산능력을 사용하여 블럭을 증명하는 방식을 Proof of Work(PoW)라고 합니다.
Blockchain에도 DDoS (Distributed Deniel of Service) 공격은 존재합니다. 잘못된 거래를 포함한 블럭들을 많이 생성해서 네트워크에 전파시킨다면, 네트워크는 이를 검증하는 작업으로 시간을 뺏기게 될 것이며, 올바른 블럭의 생성은 이루어지지 않을 것입니다. 그렇기 때문에 Network의 연산 성능 또한 DDoS Attack을 막기 위해 필요한 것이며, 실제로 Bitcoin Network는 잘못된 블럭들을 아주 빠른 시간 안에 거부할 수 있습니다.
해시함수의 특성상 이런 특이한 형태의 해시값을 만족하는 데이터들을 구성하는 것은 시간과 컴퓨터의 연산 성능을 정말 많이 사용합니다. “난이도 계수”를 1씩 증가시켜서 0000000…. 으로 시작하는 해시 문자열을 만드는 것이죠. 눈사태 효과를 뚫고 이러한 해시를 생성하는 일은 엄청난 컴퓨팅 파워를 요구하게 됩니다. 네트워크를 유지하는데 사용되는 연산능력이 점점 증가하면 아무나 블럭을 생성할 수 없기 때문에 Block에 포함되는 거래는 점점 신뢰도가 높아지겠지요.
Blockchain의 노드들은 이런 특이한 형태를 만족하는 해시값들만 올바르다고 판단합니다. Block을 생성하는 것은 어렵지만, Block을 구성하는 데이터가 공개되어 있으니, 해시함수를 이용하여 검증을 하는 일은 무척 쉽지요!
Trustlessness
Blockchain은 기본적으로 모든 블럭들을 똑같이 가지기 때문에, 모든 거래내역 그리고 잔고들을 모든 노드들이 가지게 됩니다. 모든 정보들이 공개되어 있으니, 태생적으로 Blockchain은 신뢰 불가능(Trustless)한 플렛폼이 될 수 밖에 없었습니다.
하지만 Blockchain의 모든 요소들은 익명성(Anonymous)을 가지기 때문에 모든 정보가 공개되어도 상관이 없습니다. 오히려 안정성은 확보할 수 있게 되었고, 거래의 주체도 특정인을 지징할 수 없으니 더욱 나은 시스템이라고 할 수 있습니다. Blockchain에서 지갑 주소라고 알려진 이것 또한, 사용자로 부터 입력받은 문자열을 기반해서 생성된 해시 문자열로 이루어져 있습니다.
암호화 함수(“지갑 비밀번호”, “비밀번호 암호화 방식”, “Salt”)
= “암호화된 패스워드”
해시 함수( “암호화된 패스워드” + “지갑 생성 시간” + “지갑 생성 난수” )
= “지갑 해시 문자열”
이런식으로 해시 문자열이 생성되게 되며, 절대 일치하는 값이 생성되지 않습니다. 지갑이 새로 발행되었다고, 네트워크에 전파되는 것도 아닙니다. 이는 네트워크에 참여한 순간부터, 사용자를 구분하고, 거래할 하나의 고유한 ID가 됩니다.
사실 위의 내용보다 지갑의 해시를 구성하는 데이터는 외울 수 없는 것들로 더욱 복잡하지만, 간단히 설명해 보았고, 아주 작은 디지털 파일로써 백업을 할 수 있는 대상이기도 합니다.
이런 지갑의 소유권을 증명하기 위해서는 이체를 할 때, 지갑을 만들때 사용한 패스워드를 입력하여, 같은 지갑주소가 생성되면 그때서야 소유권을 인정받고 이체를 할 수 있습니다.
이로써 블럭을 들여다 보면, 온통 해시만 가득한 거래내역과 블럭 해시 밖에 보이지 않습니다. 신뢰할 수 없는 플렛폼에서 거래의 익명성을 보장받게 된 것입니다.
Reward
앞서서 Torrent 네트워크를 무제한 파일 저장소나 다름 없다고 하였지만, 이제는 이 말을 취소해야 할 때인 것 같습니다. 사실 Torrent 같은 Peer to Peer 프로토콜의 가장 커다란 문제는 참여의 결여가 가장 커다란 문제입니다.
공유자가 없는 파일은 더이상 네트워크에 존재하지 않는 파일입니다. 또는 어떤 파일은 요구하는 사람이 너무 많아서 내 컴퓨터의 자원과 네트워크 속도를 갉아 먹을 것입니다. 내 컴퓨터의 자원을 사용하며 파일을 공유하지만, 이것은 순수한 자원 봉사를 통한 선행이지, 절대 득이되는 일은 아닙니다. 참여하고 있는 Node들은 언젠가 자연스럽게 소멸하겠지요.
Peer to Peer 통신을 기반으로 하는 Blockchain 또한 이런 위협에 안전하지 않습니다. 네트워크를 탄탄하게 유지하기 위해서는 참여자들에게 충분한 보상이 되어야 합니다. 그렇습니다. Blockchain은 이 문제를 해결했습니다.
컴퓨터 자원을 사용해 Block을 생성하는 일은 네트워크를 안정적으로 유지하는데 기여를 하는 일입니다. 이런 기여에 감사의 목적으로 보상을 제공하게 되었습니다. 그것이 바로 Crypto Currency(암호 화폐)인 Bitcoin이었습니다. 이것이 블럭을 구성하는 요소 중, "블럭 생성자"라는 요소가 존재하는 이유입니다.
사실 이 글에서는 Blockchain이 먼저 등장한 개념이고, Bitcoin이 뒤에 따라온 개념처럼 설명이 되었는데, 사실은 그렇지 않습니다. 중앙 서버가 없는 디지털 화폐를 유지하기 위한 목적으로 개발된 것이었기 때문입니다. Bitcoin을 유지하기 위한 목적으로 Blockchain이 개발된 것입니다. 하지만 우리는 이 Blockchain이라는 기술에 집중해 보겠습니다.
Block Difficult
Bitcoin은 지속적으로 블럭을 생성하는 난이도를 증가시키며, 컴퓨팅 파워를 많이 사용하는 Proof of Work 방식을 통해 Block을 생성하고, 거래를 승인합니다. 이로써 얻는 장점은 무엇일까요.
- 블럭 생성자에게 보상이 지급됨에 따라, 네트워크에 컴퓨팅 파워가 집중되면 블럭이 빠르게 생성됩니다. 이는 화폐가 많이 발행되는 인플레이션 현상을 불러올 수 있기 때문에, 화폐의 과다한 유통을 막는 역할을 합니다.
- 연산능력을 최대로 동원하기 때문에 충돌할 수 없는 유일한 해시값을 생성합니다.
- 특이한 형태의 해시값을 이용하기 때문에 블럭의 위변조가 어렵습니다.
- 중앙에서 관리받지 않는 네트워크의 신뢰성을 더합니다.
하지만, 장점이 있다면 단점 또한 존재합니다.
- 블럭 생성이 느려지자 거래 승인이 느려졌습니다.
- 혼자서 블럭을 생성할 수 있는 노드가 줄어들어, 채굴 노드의 다양성이 떨어졌습니다.
이런 블럭을 생성하는 작업을 Mining, 즉 채굴이라고 하며, 채굴에 성공하면 보상이 지급되는 광산업의 영향을 많이 받았다고 할 수 있습니다.
보상을 목적으로 네트워크에 많은 연산능력이 도입되면서, Block 난이도는 점점 증가하기 시작했습니다. 그러면서 ASIC(Application Specific Integrated Circuit) 즉, 주문형 반도체가 등장하면서 반도체 제조사 주도로, 네트워크가 기업화 되기 시작했습니다. 이는 일반적인 컴퓨터 한 대가 낼 수 있는 연산능력의 몇 백/몇 천 배를 훨씬 뛰어넘었습니다.
51% Threat
Block의 채굴은 점점 어려워지고, Node들은 자기가 가진 연산능력을 모아 Block을 채굴하고, 얻은 보상을 나누어 가지기 시작했습니다.
이렇듯, 많은 노드들이 모여 해시 파워가 집중되는 특정 노드들이 등장하기 시작했습니다. 이렇게 하나로 모여진 노드들은 부모노드의 결과를 그대로 수용하게 됩니다. 그렇다면 부모노드가 거래내역을 조작한다면 어떻게 될까요?
해시파워를 모아주는 자식 노드들은 부모노드의 결과를 그대로 수용할 것이며, 이런 노드들이 전체 네트워크의 51%. 즉 과반수를 넘어버리게된다면 네트워크의 신뢰성에 문제가 발생합니다. 이것이 "51% 위협"입니다.
이는 Blockchain에서 가장 위험한 것이며, 시스템이 붕괴될 수 있는 요소입니다. 우리는 이제 올바른 Block을 검증하는 수단을 가지고 있고, 다른사람이 인정할 수 있는 Block을 생성하는 방법또한 알고있지만, 다른 사람이 생성한 Block을 나의 블럭에 추가하는 과정은 나보다 긴 Block을 가진 과반수 이상의 노드들이 Block을 가지고 있다면 나의 Blockchain에 추가합니다.
이미 과반수를 점유하고 있는 네트워크의 노드들이 해당 블럭은 검증을 통과했으니 다른 노드들에게 블럭을 추가하라고 할 것입니다. 네트워크는 이미 스틱스 강을 건너버리고 난 뒤입니다.
이런 사태가 일어나게 된 가장 커다란 이유는 블럭 검증을 위한 PoW방식 알고리즘 때문입니다. 거래를 인증하기 위해서 많은 에너지, 많은 자원이 필요하기 때문이고, 사이드이펙트로 이런 채굴 노드의 집중화를 불러 옵니다. 이러한 문제때문에 Proof of Waste라고 부르기도 합니다.
전 Bitcoin Core Developer, Mike Hearn이 Bitcoin Foundation과 Bitcoin Core Developer Team에 대한 글, The resolution of the Bitcoin experiment을(번역) 올렸는데, 이는 다양한 이유들로 Bitcoin 네트워크가 위험하다고 경고하고 있다.
현재 Coinbase의 CEO인 Brian Armstrong 또한 What Happened At The Satoshi Roundtable라는 글을 작성하며, Bitcoin Community가 좋은 커뮤니티가 아니라고 언급.
Proof of Stake
그렇다면 이런 중앙으로 집중화될 수 있는 PoW를 대체할 다른 수단은 없는 걸까요?
이러한 Bitcoin의 한계를 알게된 Scott Nadal과 Sunny King은 오로지 “합의”에 의한 블럭생성 방식을 만들어 내었고, 이는 Peercoin이라는 Altcoin에 의해서 증명되었습니다.
Peercoin은 기존의 PoW 방식의 블럭 증명은 비효율적이며, 자신들의 블럭 생성 알고리즘은 Proof of Stake (PoS)를 기반으로 작동한다고 합니다.
네트워크에 포함된 어떤 노드가 거래를 시작하면, 인접한 다른 노드가 기존의 블럭에 있는 거래를 참고하여 잔고를 증명하고, 거래를 해시함수로 검증해줍니다. 그리고 이는 검증된 블럭으로써 다른 사용자들에게 배포됩니다.
이런 증명은 네트워크의 노드들 사이 이해관계를 기반하고 있기 때문에 Proof of Stake라고 합니다. 이러한 블럭 증명 방식이 PoW와 비교하여 어떤 잇점이 생기는지 확인해 볼까요.
- 블럭의 생성을 위해 특별한 해시결과물을 요구하지 않습니다.
- 블럭 생성 속도가 아주 빠릅니다.
- 이해관계를 통한 증명을 하기 때문에 해시 파워가 집중될 수 없습니다.
- 해시 파워가 집중되지 않기 때문에 에너지 효율적입니다.
- 완전한 분산 환경과 자율권을 가지며, 51% 위협에 안전합니다.
Before Blockchain
모든 정보들을 한 번 종합해 보겠습니다. 기존의 Blockchain은 CryptoCurrency에 의한, CryptoCurrency를 위한 플렛폼이었습니다. 모든 거래는 디지털 화폐로 이루어지고, Blockchain으로 보장되는 내용들도 디지털 화폐에 대한 내용이었습니다.
Satoshi Nakamoto가 처음 작성한 White Paper의 제목 또한 Bitcoin: A Peer-to-Peer Electronic Cash System 이었습니다. 위에 작성한 내용을 바탕으로 Blockchain을 잠시 정리해 보면,
- Blockchain에 적혀있는 거래내역을 바탕으로 잔고를 증명한다.
- Block의 생성과 검증은 해시 함수로 이루어져 안전하다.
- Blockchain은 모두에게 공개되어 있어서 신뢰불가능한 플렛폼이다.
- 거래주체자들은 모두 해시화 되어 있어, 완전한 익명성을 가진다.
- 모든 통제권은 네트워크에 참여한 노드들이 각자 가지고 있다.
- 모든 Blockchain은 모든 노드가 가지게된다.
이렇듯 Blockchain기술을 기반한 것들은 중앙화 될 수 없습니다. 과반수의 위협에 대응하기 위해 전 세계에 분산된 노드들이 있어야 하며, 이들 노드들은 합의된 내용에 따라 연이어진 블럭을 생성하고 검증하기 때문에 자연스럽게 비가역적(非可逆的)인 특성을 지니게 됩니다. 중복 지출을 막을 수 있으며, 한번 시행된 거래는 최종적이며, 다시 취소할 수 없습니다.
이런 Blockchain의 특성을 이용한 기술들은 무엇이 있는지 알아보겠습니다.
- Namecoin — https://namecoin.info : Blockchain 기술을 이용한 DDNS시스템입니다. 기존의 DDNS는 도메인의 변경점이 있다면 전세계 라우터에 적용되기 까지 무척이나 오래걸렸지만, Namecoin은 도메인 정보들을 블럭에 담아 chain을 구성하였고, Block들이 네트워크 상에서 빠르게 전송된다는 잇점을 이용하여 라우팅 시스템을 구성하였습니다. 또한 가까이에 있는 Namecoin 노드를 참조해서 빠르게 DDNS의 주인과 도착지를 조회할 수 있다는 것도 장점입니다. `.bit` domain을 지원합니다.
- Open Assets — http://www.openassets.org : 기존의 Bitcoin Blockchain을 이용한 다양한 코인 발행 플렛폼입니다. 이는 bitcoin과 다르게, 코인을 한 사람이 발행하고, 코인의 전송과 보장에는에는 Bitcoin네트워크를 이용한 시스템입니다. 이 프로토콜을 이용하여 사업을 하고 있는 회사는 ColoredCoin, CoinPrizm, BPSI 외 다양하게 있으며 이며 특히나 BSPI는 실물 자산을 보장하는 수단으로 사용하고 있습니다. Open Assets의 자산들이 가치가 더해진다면, Bitcoin의 네트워크 가치도 덩달아 상승하게 됩니다.
- Dnschain — https://okturtles.com : Blockchain 기술을 이용한 DNS시스템입니다. 이 DNS는 블록체인에 분산된 공개키 기반의 암호화를 이용하여 Man in The Middle 공격을 원천적으로 차단할 수 있고, 노드들이 분산된 CA의 역할을 하기 때문에 SSL/TLS 기반의 인증서가 필요없게됩니다. 외부로 드러나는 프로토콜은 DNS기능을 하기 때문에, 기존 시스템에도 아주 잘 어울린다는 특징이 있습니다. 자체적으로 `.dns` domain을 지원합니다.
- Storj — http://storj.io : Chunk 기반 파일을 전세계에 저장하고 리워드로 암호화 화폐를 받을 수 있는 Driveshare. 파일의 위치를 Blockchain에 저장하고, 파일을 찾을때 Blockchain에 기록된 파일의 위치를 참조하여 파일을 찾는 Metadisk를 운영하고 있는 회사입니다. 사실상 전세계에 깔린 AWS S3을 쓰는 것과 같으며, 파일을 요청하는 지역적 위치에 따라 빠르게 파일을 찾고 전송받을 수 있는 것이 특징입니다.
- OpenLedger — https://www.openledger.info : 공공장부를 지양하는 프로젝트이며, 네트워크를 발전 가능한 하나의 기업 또는 커뮤니티로 보고, Bitshare라는 코인을 이용하여 주식에 따른 투표권을 가집니다. 이 투표권으로 제안과 변경을 주도할 수 있습니다. 또한 Bitshare를 이용하여, OpenAsset같은 다양한 자산들을 만들고 관리할 수 있는 플렛폼이기도 합니다.
- IPFS — https://ipfs.io : 파일을 블럭체인에 업로드하고, 어느 노드에서든지 확인할 수 있는 플렛폼입니다. 모든 노드들은 서로 연결되어 있고, 업로드된 파일들을 나누어 가집니다. 노드를 유지하지 않더라도 외부에서 파일에 접근할 수 있습니다. 하지만 파일을 유지하여도 코인을 보상으로 지급하지 않습니다.
외에도 Filecoin, NextCoin, Peercoin 등등 이 모든 것들이 Blockchain플렛폼들입니다. 기존의 산업 형태를 바꾸는 많은 시도들이 Blockchain이라는 공통적인 특성 위에서 구현되고 있습니다.
하지만 구현된 Blockchain들은 호환성을 가지지 않고 각자 별개의 프로토콜을 가지고 있습니다. 이러한 사용자들의 참여는 네트워크간의 단편화를 불러오고, 있습니다. 참여가 저조한 네트워크가 있다면 해당 네트워크의 몰락은 더욱 빠르게 다가올 것입니다.
Smart Contract
컴퓨터 과학자인 Nick Szabo는 1993년 Smart Contract라는 컴퓨터 프로토콜의 한 형태를 발표하였습니다. 이 Smart Contract는 컴퓨터간의 자원의 사용에 대해서 불필요한 계약 과정을 생략할 수 있는 합의 프로토콜이었습니다.
이런 특성들로 본다면, Smart Contract는 자가 실행이 가능하여야 하고, 부분적, 또는 전체적으로 실행될 수 있어야 합니다. 이는 인터페이스를 통하여 어떤 사용자든지 사용할 수 있는 객체, 또는 서비스 데몬으로 볼 수도 있겠지만, 신뢰불가능한 인터넷 환경에서 높은 추상화로 개발된 프로토콜을 합의하는 개념이었습니다.
Contract라는 단어에서 계약서라는 단어를 떠올릴 수도 있겠으나, 이를 컴퓨터 사이의 계약이라고 본다면, 프로그래밍된 그대로 작동을 보장하는 하나의 객체로 볼 수 있습니다. 예를 들면... 컴퓨터 바이러스가 있겠네요! 제 3자의 개입없이 혼자서 작동하고, 지정된 일만 한다고 생각하면 되겠습니다.
하지만 Blockchain의 설명에 왜 Smart Contract라는 추상화된 개념이 등장했을까요? 이 추상화된 개념이 Blockchain을 만나 구현체를 가지게 되면서, 기존의 산업 전반의 형태가 바뀌게 됩니다.
Next Generation Blockchain
이미 앞서서 보았듯 다양한 기능을 가진 Blockchain들이 시장에 하나씩 등장하게 됩니다. 이 글을 읽는 분들이 눈치를 챘는지 모르겠지만, 이미 이들은 다양한 형태의 Smart Contract를 구현하고 있는셈입니다.
우리는 Blockchain이 신뢰하지 않는 컴퓨터 네트워크에서 서로를 신뢰하기 위해서 해시 함수를 사용하고 있고, 모든 정보들은 모든 노드들이 가지고 있다고 하였죠, 그리고 Blockchain의 고유 기능들은 노드들 간의 합의에 의해서 자율적으로 작동하고 있습니다! 이런 형태 모두가 Smart Contract이죠!
하지만 이들 모두가 서로의 Blockchain과 호환되지 않는다는 사실을 우리는 잘 알고 있습니다. 그리고 대다수의 Blockchain은 자기 자신을 보장하기에는 너무 작은 노드들을 가지고 있게 되겠지요. 종국에는 해당 Blockchain의 몰락을 가져오게 될 것입니다.
이러한 한계를 미리 예견하고 있던, 한 개발자가 있습니다. Vitalik Buterin은 Smart Contract 프로그래밍이 가능하며, 많은 참여자를 기반으로 보안성을 가질수 있는 공개된 Blockchain을 개발하고자 하였습니다. 이것이 바로 Ethereum입니다.
Ethereum
Ethereum은 분산된 어플리케이션의 개발 환경을 제공하는데에 초점이 맞추어져 있습니다. 여기에는 EVM(Ethereum Virtual Machine) 이라는 것이 내장되어 있고, 이는 Smart Contract를 실행할 수 있는 vm의 한 종류입니다.
Smart Contract는 EVM위에서 자율적으로 작동하게 되며, 인터페이스를 통한 접근이나 메시지의 작동에 일정부분 코드를 실행하고 결과를 저장 또는 반환하여 주며, 모든 내용은 Block에 기록되며, 모든 참여자들에 의해 보장받게 됩니다.
Ethereum 또한 Block 생성의 리워드로 Ether라는 코인을 제공하고 있습니다. 하지만 Ether는 단순히 코인이 아닌 EVM위에서 Smart Contract를 작동시키기 위한 연료로써 사용됩니다!
높은 수준 프로그래밍 언어로 구현된 Smart Contract는 Assembly로 변환되어, 특정 부분, 또는 전체를 실행할 수 있으며, Assembly 명령어의 길이와 수준에 따라 Ether를 지출하게 됩니다. Bitcoin처럼 단순히 코인으로써 끝나는 것이 아니라, 획득과 사용에 선순환을 이루게 되는 것이 특징입니다. Ethereum Foundation에서는 Ether를 Crypto-Fuel이라고 부르고 있기도 합니다.
위에서 설명한 대부분의 Blockchain 프로젝트는 Ethereum에서 코드 몇 줄로 구현할 수 있습니다.
또한 Ethereum Foundation은 ÐΞVp2p라는 것을 구현하고 있기도 합니다. Common Blockchain Platform의 입지를 확실히 다지고, 많은 사용자의 참여를 유도하게 하는 하나의 방법이며, 전세계의 네트워크를 좀 더 안전하게 이용할 수 있도록 도와줍니다.
다수의 노드가 100% 가용성으로 작동되고 있어서 이로 인한 네트워크의 이익은 무궁무진합니다. 모든 메시지를 암호화하여 머신과 머신 사이에 멀티플랙스 방식으로 전송하고 수신할 수도 있고, 인접한 노드를 찾아 다양한 이유로 사용할 수도 있습니다.
그렇다고 기존 네트워크 프로토콜을 무시하지는 않습니다. Web3.0 이라는 구현체가 대표적인데, 이는 기존 HTTP기반 프로토콜에서 작동하여 Ethereum 네트워크와 긴밀하게 통신하며 Smart Contract를 실행할 수도 있습니다.
- Whisper — 1:N, N:N 종단간 암호화를 지원하는 메시지 프로토콜
- Swarm — chunk 분산 파일 저장 프로토콜
- Name Registry — “.eth” 도메인 등록 프로토콜
- Contract Registry — 공공 Contract 등록 프로토콜
위의 구현체들이 대표적인 Web 3.0 기반의 프로토콜이며, 특히나 Whisper 같은 경우에는 노드들이 분산되면서, 미리 합의된 채널과 키로 수신과 발신이 가능하게 되면서, 네트워크 자체가 암호화를 지원하게 되었고 이는 N:N 종단간 암호화를 가능하게 하였습니다.
Realistic Problem
이제 실질적인 문제를 맞이할 때인 것 같습니다. 제가 장황하게 설명을 하긴 하였지만 모두 이론적인 설명들일 뿐입니다. 우리가 실질적으로 겪는 문제와 거리가 있죠. 그래서 이번 장에서는 최대한 기존 산업에서 발생하는 문제를 Blockchain으로 해결하는 과정을 글로 설명해 보려고 합니다.
혹시 이런 적 없으셨나요?
- 즐겨하던 게임이 서버에 이상이 생겨, 3일 전으로 백-서버를 당했다.
- 온라인 쇼핑몰에서 결제 클릭을 2번 눌렀는데 결제가 2번 되어, 나머지 하나에 대한 환불처리가 무척 늦었다.
- 중고 제품을 거래할 때 에스크로 서비스가 너무 비싸 사용한 적이 없다.
모든 상황들이 암울하지만, 하나씩 짚어보며 넘어가겠습니다.
대표적으로 모든 게임은 사용자간의 거래가 가능합니다. 모든 플레이어들의 인벤토리를 블럭체인에 저장하고, 교환이 발생하면 Smart Contract를 이용하여 교환에 참여한 플레이어들의 인벤토리 변경점을 기록하기만 하면 됩니다. 그러면 모든 내용에 대해서 가용성 100%의 Blockchain이 보증하게 되죠. 서버 프로그램만 다시 살린다면, 서비스는 잃어버리거나, 이전으로 돌아가는 내용없이 플레이어들에게 신뢰도를 줄 수 있습니다.
요즘이야 그런 일이 잘 없지만, 예전에는 결제 버튼을 누르고, 결제 완료 창으로 넘어가기 전에 버튼을 한 번 더 누르면 결제가 한 번 더 일어나는 일이 빈번했고, 같은 주문서 코드에 두 개의 결제가 이루어져, 이런 이중지불을 찾아내는 일도 어렵습니다.
제가 Blockchain은 비가역성을 띤다고 이야기 한 것이 기억 나시나요? Blockchain에서의 거래는 하나의 거래가 오픈되면 단 한번의 결제만 인정됩니다. 같은 거래에 두 번의 지출이 되는 이중지불은 비가역성이라는 특성에 의하여 올바르지 않은 거래로 아예 성립 자체가 불가능하며, 이중지불 자체가 성립 불가능하게 되어, 올바르지 않은 거래로 처리됩니다. 안심하세요!
Smart Contract가 제 3자의 개입없이 작동한다고 말했던가요? Escrow 서비스를 Smart Contract 형태로 구현하고, 작동의 보장을 타인으로 받는다면 어떨까요? 수수료는 Smart Contract작동비만 사용될 것이고, 제품에 대한 보증기간과, 지불에 대한 문제를 완전히 해결할 수 있겠지요!
Ethereum Additional
현재 Ethereum은 PoW 방식의 블럭생성을 하고 있지만, Bitcoin 네트워크의 ASIC은 작동하지 않습니다. Ethereum은 컴퓨터의 일반적인 실행방식을 공유하는 것이 목적이기 때문에, 이러한 블럭만을 생성하는 알고리즘 방식을 개선한 Ethash-Dagger 으로 블럭을 생성하고 검증합니다. 때마다 달라지는 1GB의 Dagger 테이블을 참조하기 때문에 저항성을 가지게 되지요.
이 글을 쓰는 시점에서 전체 네트워크 평균 해시레이트는 1.4 Terahash/sec 이며 블럭 생성에는 17.41Terahash가 평균적으로 필요합니다. Nvidia 970 시리즈에서 10 Megahash/sec. AMD 280X가 20 Megahash/sec정도 속도를 내는데, 이는 어마어마한 컴퓨팅 자원이 Ethereum에 사용되고 있다는 것을 알 수 있습니다.
현재 4단계의 런칭 프로세스 중에서 두 번째 프로덕션 네트워크로 사용할 수 있는 Homestead가 런칭되었으며, 올해 말 또는 내년 초에 Metropolis 네트워크의 오픈을 예정하고 있습니다. 최종 런칭단계인 Serenity는 블럭 생성 방식인 PoW를 PoS로 변경할 예정이며, 블럭 보상에 관한 내용도 바뀔 예정입니다. 현재 블럭 보상은 5 Ether이며, 최종적으로 이 블럭 보상은 줄어들 것으로 보입니다.
- Frontier
- Homestead
- Metropolis
- Serenity
이 글에서는 Blockchain에 대한 내용을 비-개발자들도 이해할 수 있는 예시와 표현을 사용하였으나, 좀 더 전문성 있는 글을 원하신다면 White Paper를 참고하시면 되겠습니다. White Paper는 현재도 지속적으로 업데이트 되고 있으며 앞으로의 발전방향과 Blockchain에 대한 상세한 설명이 되어 있습니다. 추가적으로 Homestead에서 필요한 내용들을 모은 가이드 문서 또한 첨부해 두었습니다.
Not Enough?
Smart Contract를 구현하는 Blockchain 플렛폼은 Ethereum만 있는 것이 아닙니다. Linux Foundation과 30개의 다국적 기업이 참여한 HyperLedger 또한 Smart Contract 구현체입니다. 현제 참여한 회사들이 구현체를 각각 만들고 있으며, 아직 어느것하나 컨셉증명을 넘어서진 않았습니다.
또한 R3 Cev라는 곳을 소개하지 않을 수가 없습니다. 미국의 은행들과 전세계 은행들이 연합하여 만든 컨소시움인데, Blockchain을 통하여 통화의 변혁을 일으키기 위한 컨소시움이며, 이 R3에서는 Ethereum을 사용할 예정입니다. (아직 한국의 은행은 컨소시움에 포함되지 않았습니다.)
Blockchain과 Ethereum에 대한 이야기는 이쯤에서 정리를 하면 될 것 같습니다. 개인적으로는 Ethereum이 미래의 플렛폼들 중 하나라고 생각되며 빠른 시일내로 Blockchain 기반 기술들이 심화된 내용으로 여러 입에 오르내리는 때를 기대하고 있습니다.
충분히 많은 이야기를 글에 담았으며, 이해와 기술에 대한 설명이 중간중간 들어갔다고 생각합니다. 의견은 Note나 Response를 활용하여 남겨주세요~ 많은 이야기가 오갈 수 있는 계기가 되었으면 합니다.
읽어주셔서 감사합니다.
'IT기술 관련 > 기타 기술' 카테고리의 다른 글
하이퍼레저 패브릭 네트워크 구조[Hyperledger Fabric Network Structure] (0) | 2019.03.28 |
---|---|
비트코인은 망했다 (번역) (0) | 2017.07.10 |
POW vs POS (0) | 2017.07.10 |
하드포크 vs 소프트 포크 (0) | 2017.07.10 |
사물인터넷 환경에서의 보안 패러다임 (0) | 2017.02.10 |