블록체인의 탄생
현대 사회에서 기술의 발전의 가장 큰 흐름은 바로 atom world 를 bit world 로 옮기려 한다는 것이다.
모든 실제 세계의 정보와 행동 양식 더 넘어서는 시장 그 자체에 이르기 까지 모든 atom world 즉, 실제 세계의 모든 것을 컴퓨터 사이의 네트워크로 구성되는 bit world 에 밀어 넣으려는 다양한 시도들이 계속되었다.
흔히, Database 즉, 데이터를 넣기위한 저장공간은 실제로 현대사회에서 모든 권리를 대변하고 있다.
은행의 돈, 국가에서 개인의 신분 등 모든 중요한 정보들은 database 내에 존재하고 실제가 어떻게 되었든 database 안의 내용이 곧 진리인 사회속에서 우리는 살아가고 있다. 심지어는 database에 명확하게 들어가지 못하는 많은 정보들은 그 가치를 잃어가는 사회이기도 하다.
하지만, 이렇게 모든 현실 세계의 데이터를 database라는 꽉막힌 틀이 쑤셔넣는 것은 상당한 노력을 필요로 하는 일이고, 심지어 이러한 데이터베이스는 단지 하나의 컴퓨터에 존재하는 bit 덩어리에 불과하기 때문에 사람들이 서로가 소통해서 문제를 해결하듯이 database와 database 사이에서 원활하게 정보를 교류하여 문제를 빠르게 처리하는 것은 매우 어렵다.
각 database는 서로 다른 형태로 존재하고 때문에 우리는 유사한 정보를 수도없이 많이 컴퓨터에게 가르쳐 주어야 한다.
흔한 예로 우리는 수많은 사이트에 수도없이 많이 같은 주소를 입력하고, 정부에서 민원을 처리하는 경우 각 부서를 옮겨다니면서 수십번씩 이름과 개인 정보를 입력하는 수고를 들여서 일을 처리해야 한다. 이는 너무나도 비효율적인 시스템이 아닐 수 없다.
시간이 지나고 우리는 이렇게 유연하지 못한 database의 홍수 속에서 어떻게 각각의 database를 통합하여 보다 유연하고 효율적인 데이터의 흐름을 만들어 낼 수 있을지 고민하게 되고 3가지의 해안을 제시하게 되었다.
1.Diverse peers model
첫번째 방법은 단순히 컴퓨터와 컴퓨터를 연결하는 것이다.
흔히 오늘날에는 결제를 하기 위해 쇼핑몰과 통신하고, 쇼핑몰은 은행과 은행은 다시 국세청과 정보를 교환해야 한다.
이렇게 하나의 단순 작업을 처리하기 위해서 각 peer들이 계속해서 통신을 해야하고 매일매일 소프트웨어를 업그레이드해야 할 뿐만 아니라 버그에도 매우 취약하다.
또 하나의 심각한 문제는 무엇이 진짜인지를 알 수 없다는 것이다.
진리는 존재하지 않고 각 peer 들 내부의 database의 수치값만이 존재하기 때문에 정보가 일관되지 않은 경우가 빈번하게 일어난다.
가령 내가 쇼핑몰에서 물건을 주문과 결제를했는데 쇼핑몰 내의 database에서 내가 결제한 정보가 없다고 선언해 버린다면 우리는 대처할 수 있는 방법이 사실상 거의 없다고 보아도 무관하다.
또 A 업체와 B 업체가 거래를 하려고 하는데 서로가 가진 재고량과 주문, 발송량이 일치하지 않는 경우 심각한 문제를 초래하게 된다.
2.Hub and Spoke
두번째 방법은 이렇게 어려움 프로세스를 맡아줄 중앙 허브를 두는 것이다.
많은 peer들이 직접 서로가 1:1 로 수십번 정보의 일관성을 흐리지 않고 정보를 교환하는 것은 매우 어렵기 때문에 이 모든 일을 다 처리해줄 마법같은 서비스들이 등장하게 되었다. 가령 결제사라던가 전자인증정보 시스템, VISA 처럼 수많은 peer들과 올바로 통신하고 데이터의 일관성을 보장해주는 중앙기관이 생기고 나머지 모든 peer는 이러한 중앙기관에 의존해 업무를 처리하는 것이다.
사실상 이러한 시스템은 자연적 독점기업이라고 보아도 무방하다. 이렇게 수많은 peer 들이 정보를 교환하는데 이 중앙 기업은 technical cost 라는 명목으로 막대한 부를 축적하고 당신의 신용과 정보에 대한 완벽한 통제권을 가지고 있다. 이는 전혀 민주적이지 못하며 VISA 사의 경우 전 세계 거래의 1% 라는 천문학적인 수입을 올릴 수 있는 시스템이 완성되는 것이다.
3.Protocol - if you can find them
프로토콜은 궁극의 유니콘 같은 존재이다. 최적의 프로토콜을 찾으면 이러한 database의 완벽한 통합을 할 수 있겠지만, 현실 세계에서는 아무도 그런 프로토콜을 가지고 있지 못하다.
HTTP, HTML, SMTP 등 많은 standard 들이 생겨나게 되었지만 아직 많은 한계들이 보인다.
가령 slack 이나 Gchat의 경우 각 플랫폼 내의 사용자들이 서로간에 소통할 수 있도록 기존의 프로토콜사용하여 훌륭하게 동작시키고 있지만, 각 기업들 사이에 데이터를 교환하는 것은 불가능하다. 왜냐하면 각 기업이 어떤 프로토콜을 사용하는지를 공개하지 않기 때문이다. 때문에, 모든 서비스에 접근하여 중재역할을 하기 위해서는 각 게이트웨이를 해킹하는 수밖에는 없다.
블록체인은 위의 세가지 해안이 극복하지 못하는 많은 부분을 해결해 줄 해안으로 떠올랐고 그것이 블록체인의 시작이다.
참고자료 - Programmable Blockchains in Context: Ethereum’s Future by vinay gupta
블록체인이란 무엇인가요?
블록체인이란 수많은 컴퓨터들을 연결하여 모든 컴퓨터가 동일한 체인 형태의 정보 리스트를 가지도록 하는 분산 컴퓨팅 기반의 데이터 위변조 기술이다.
이 때 저장하고자 하는 데이터는 작은 정보들의 집합인 블록으로 구성되고 각 블록들이 서로 연결고리를 가지게 하여 누구도 중간 블록을 수정할 수 없고, 변경의 결과를 열람할 수 있게된다.
이러한 블록체인의 가장 큰 특징은 바로 분산 노드의 운영자가 임의로 데이터를 조작하지 못한다는 것이다.
가령 기존의 데이터베이스의 경우 데이터베이스의 관리자가 손쉽게 데이터베이스를 조작할 수 있었고, 악한 마음을 가진다면 이를 기정사실화 하여 각종 보안 문제들에 휘말리게 된다. 하지만 블록체인의 경우 각 블록들이 수정되면 전체 연결고리가 깨어지게 되어 근본적으로 기존의 데이터를 수정하지 못하도록 고안되었기에 데이터베이스 관리자가 모든 권한을 가졌던 기존의 중앙집권적 권력체계가 무너지게 된다고 볼 수 있기에 보다 민주적인 형태의 데이터 저장 기술로 칭송받고 있다.
이러한 분산 시스템을 운영함에 있어 가장 큰 문제 중 하나는 비잔틴 장군 문제(Byzantine General Problems) 이다.
여기서는 적군의 도시를 공격하려는 비잔티움 제국군의 여러 부대가 지리적으로 떨어진 상태에서 각 부대의 지휘관들이 (중간에 잡힐지도 모르는) 전령을 통해 교신하면서 공격 계획을 함께 세우는 상황을 가정하고 있습니다. 이 부대의 지휘관 중 일부에는 배신자가 섞여있을 수 있고, 배신자는 규칙을 충실히 따르는 충직한 지휘관들과 달리 규칙에 얽매이지 않고 마음대로 행동할 수 있다. 이 때 배신자의 존재에도 불구하고 충직한 지휘관들이 동일한 공격 계획을 세우기 위해서는 충직한 지휘관들의 수가 얼마나 있어야 하며, 이 지휘관들이 어떤 규칙을 따라 교신해야 하는지에 대한 문제가 비잔티움 장군 문제이다.
블록체인 기술은 이러한 비잔틴 장군 문제를 최초로 해결하였으며 비잔틴 장군 문제에 대한 내성이 있다는 의미로 비잔틴 장애 허용(BFT) 시스템 중의 하나이다.
블록체인 플랫폼 이더리움 백서에 대한 설명
현대 가상화폐의 근간이 되는 블록체인 기술의 핵심은 시간의 흐름에 따른 각 노드의 상태를 저장하는 UTXO(Unspent Transaction Output) 를 모두 저장하는 것이다.
각 트랜잭션은 k개의 input을 가지고 각 입력은 UTXO에 대한 레퍼런스를 가지며 특정 노드의 상태는 이러한 UTXO의 리스트로 구성된다.
블록은 10분 간격으로 생성되며, 각 블록은 timestamp, nonce, hash of previous block, transaction list 로 구성되며 블록을 생성하기 위한 과정을 채굴(mining) 이라고 하며 다음의 단계에 따라 진행된다.
- 이전 블록의 해시값 검사
- 블록의 timestamp가 이전 블록의 것보다 크고 2시간이 경과하지 않은지 검사
- POW
- 상태집합 S 의 S[0] 에 이전 블록의 마지막 상태값을 저장
- 0 ~ n-1 의 모든 i에 대해 S[i+1] = APPLY(S[i], TX[i]) 를 수행
- 마지막 블록에 상태값 S[n] 를 등록
위 과정을 완료한 뒤에 해당 블록의 헤더를 해싱하고 그 해시를 풀기 위한 nonce를 무작위값을 계속 대입하면서 구함. = > mining
블록의 구조
블록은 위에서 언급했듯이 timestamp, nonce, hash of previous block, transaction list 로 구성되는데, 이 중에서 transaction list는 블록 데이터 부분에 저장되고 나머지는 블록 헤더에 저장이된다. 또, 블록 헤더에는 블록데이터에 대한 해시값이 저장되는데, 이 해시값은 머클트리 형태로 저장된 트랜잭션 리스트의 root hash의 값으로 하나의 트랜잭션이라도 조작되면 이 값이 바뀌게 되어 블록이 변질되었음을 알 수 있게 된다.
여기서 머클트리 란, 가령 n 개의 트랜잭션이 있다면 높이가 log(n)인 이진트리 형태로 구성되며, 각 부모는 자식의 해시를 가지게 되어 하나의 트랜잭션만 바뀌어도 수많은 노드의 해시값이 바뀌게 되는 트리이다.
이러한 블록들은 level DB 에 bloack hash 를 키로 블록 데이터를 value로 저장됩니다.
이러한 db의 종류는 block_hash db, block_number db, transaction db 등이 있습니다.
보안의 원리
블록체인은 어떠한 원리로 보안을 유지하는가?
먼저 다음과 같은 경우를 통해 블록체인을 훼손하는 경우를 생각해 보자.
먼저 가장 마지막 블록번호가 270번 블록이라고 하자.
- 사용자가 특정 상인에게 100BTC 를 입금한다.
- 상인이 사용자에게 디지털 재화를 전송한다(순식간에 전송 가능하다고 전재한다.)
- 사용자가 스스로에게 100BTC를 입금한다.
이 경우 블록체인은 3의 트랜잭션을 보 정상적인 state에 있지 않은 utxo라 판단하게 되고 사용자의 블록체인은 따로 분기되게 된다.
만약 그 동안 1시간이 경과하였다면 하지만 그와 동시에 다른 사용자들은 계속해서 블록을 생성하여 271~275까지 많은양의 블록을 생성한 상태이고 그들이 가리키는 해시값은 사용자의 270번 블록이 아닌 블록체인의 270번 블록을 가리키게 되고 사용자의 노드는 기존 블록체인에서 분리되게 된다.
이더리움
이더리움의 기본 단위는 account 이며, EOA(External Owned Account) 와 Contract 두 종류의 account 가 있습니다.
EOA 는 메세지를 보내는 주체이며 message에 의해 contract가 조작됩니다.
여기서 message는 가상의 객체이며 송/수신자 정보와 데이터, eth 양 등의 정보를 담고 있습니다.ㄴ
Contract가 Call 을 수행할때 생성됩니다.
블록체인의 비잔틴 장군 문제 해결
블록체인에서는 모든 정보를 블록이라는 정보 뭉치의 연결로 보고 각 블록에는 암호화된 해시값이 있어 다음 블록을 가리키고 있는 형태로 구성되어 있습니다.
또한 다음 블록이 생성되기 위해서는 참여하는 노드의 절반이상이 해당 노드가 올바른 노드라고 판단해야 다음 블록이 연결될 수 있기 때문에, 악의적인 목적을 가진 노드가 몇 개 존재한다고 하더라도 안정적으로 동작을 함을 말합니다.
합의 알고리즘
POW
새로운 화폐가 생성되는 과정(조폐)에서, 생성자들(채굴자들)에게 “일을 했다는 것을 증명(proof of work)”하는 것을 강제하여 화폐의 가치와 보안을 보장하는 방식이다.
분산 네트워크에서는 조폐 과정에서 누가 얼마의 새 화폐를 받을지를 결정할 중앙 권력이 없기 때문에 모든 참여자들이 자동적으로 동의할 수 있는 방법이 필요하다. 이때 일방향함수인 해시 함수가 계산(검산)하기는 쉽지만 역을 구하는 것(채굴)은 어렵다는 것에 착안하여, 모든 참여자가 해시 함수를 계산해서 가장 먼저 계산한 사람이 새 화폐를 받아가게 하는 것.
최초로 상업적 성공을 거둔 암호화폐 비트코인의 경우, 블록체인의 다음 블록을 캐기 위한 해시 함수의 입력값에 거래내역을 담은 블록체인의 최신값을 연동시켜서, 송금과 조폐 양 기능과 보안을 동시에 해결하였다.
나무 위키 참조
POS
암호화폐에서 proof-of-stake의 이니셜. 가치 증명, 또는 지분 증명으로 번역된다.
POW와는 근본적으로 다른 조폐 개념으로, 신규 코인을 발행할 때 이미 기존에 코인을 가지고 있던 사람들에게 전체 대비 각각의 소지량의 비율만큼을 지급하는 방식이다. 즉 암호화폐하면 으레 생각하는 채굴이 없다! 단, 현실적으로 액수에 관계없이 코인을 보유한 모든 지갑에 일괄적으로 %를 더하는 것은 불가능하므로, 조폐 과정에 참여하고 싶은 사람들이 일정 액수를 걸고(stake), 렌덤하게 추첨하여 참여자들 중 한명에게 다음 블록 보상(신규 코인)이 돌아가는 방식을 쓴다. 당연히 더 많이 걸수록 당첨 확률이 늘어난다. 참여에 필요한 최소 액수가 적어도 한화 수억원 어치이므로, 일반인들은 마이닝 풀과 유사한 개념인 스테이크 풀에 코인을 위탁해서 추첨에 참여한다.
얼핏 들으면 돈놓고 돈먹는 헤괴한 시스템으로 보일 수 있으나, 코인캡의 등락 없이는 신규 코인이 잔뜩 발행돼도 개당 가격이 내려가므로 각 코인 소유자들의 자산 가치는 동일하게 유지됨을 알 수 있다. 특정 집단이 과반수를 차지할 경우 그들의 지분이 계속 늘어나는 폐해가 벌어질 수 있으나, 채굴의 51%공격과 마찬가지로 당사자들의 이해관계 때문에 자정능력을 가진다. 채굴(POW) 대비 가장 큰 장점은 채굴에 들어가는 막대한 양의 에너지 낭비 없이 조폐와 거래를 운용할 수 있다는 점이다. 단점은 탈중앙화된 신규 코인은 이런 식으로 발행하기가 쉽지 않다는 점.
퀀텀(Qtum) 등에서 POS를 채택하고 있다.
POW와 POS 외에 POI라는 기술도 있다.
나무위키 참조
Comments