블록체인은 데이터 분산 처리 기술이다.
네트워크에 참여하는 모든 사용자가 모든 거래 내역등의 데이터를 분산, 저장하는 기술을 의미한다.
블록체인이라는 이름이 붙은 이유는 블록들을 체인 형태로 묶은 형태이기 때문이다.
블록체인에서 '블록'은 개인과 개인의 거래(P2P)의 데이터가 기록되는 장부가 된다. 이런 블록들은 형성된 후 시간의 흐름에 따라 순차적으로 연결된 '사슬(체인)'의 구조를 가지게 된다.
모든 사용자가 거래내역을 보유하고 있어 거래 내역을 확인할 때는 모든 사용자가 보유한 장부를 대조하고 확인해야 한다. 때문에 블록체인은 '공공 거래장부' 또는 '분산 거래장부'로도 불리기도 한다.
은행을 예로 들어보면, 기존거래 방식(중앙 집중형 원장 관리)은 은행이 모든 거래 내역을 가지고 있다. 만약 A가 B에게 10만원을 송금하면 현재 금융 시스템에서는 은행이 중간 역할을 한다. 왜냐하면 A가 B에게 10만원을 줬다는 사실을 증명해줘야 하기 때문이다. 은행은 두 사람 사이에 안전하게 거래할 수 있도록 중간 다리 역할을 해주는 것이다.
블록체인(분산 원장 관리)도 거래 내역을 저장하고 증명한다. 그러나 거래 내역을 은행이 아닌 여러 명이 나눠서 저장을 한다. 만약 한 네트워크에 10명이 참여하고 있다면 A와 B의 거래 내역을 10개의 블록을 생성해 10명 모두에게 전송, 저장한다. 나중에 거래 내역을 확인할 때는 블록으로 나눠 저장한 데이터들을 연결해 확인한다.
먼저 최초의 블록을 Genesis Block 이라고 한다. 추가되는 블록은 헤더(Header)와 데이터(Data)로 이뤄져 있다.
제네시스 블록에 추가 되는 블록의 헤더에는 제네시스 블록의 해시 포인터를 갖고 있다.
해시 포인터는 이전 블록의 데이터가 어디에 저장되어 있는지와 Data가 변했는지를 검증하기 위한 검증 정보가 담겨져 있다.
(블록체인은 해시 포인터로 연결된 Linked List라고 할 수 있다.)
해시포인터는 이전 블록(=부모 블록)의 해시값을 뜻한다.
해시값은 해시 함수를 이용해서 임의의 데이터로부터 고정된 길이의 난수를 만들어 내는 방법이다. 입력값에서 출력으로 계산은 단순하지만, 역으로 출력 값에서 입력 값을 계산하는 것은 거의 불가능한 매우 어려운 작업이다.
블록에 대해 자세히 살펴보면, 블록의 헤더에는 블록의 버전 정보, 이전 블록 헤더의 해시값과 머클루트 값, 생성된 timestamp 정보, 마이닝시 사용되는 난이도 정보와 Nonce값을 가진다.
여기서 각각의 블록은 헤더에 이전 블록의 해시값만을 저장하고 트랜잭션 데이터에 대한 값을 저장하고 있지 않는다.
만약 트랜잭션 데이터를 악의적으로 변경하면 어떻게 검증할 수 있을까? 이는 머클루트 값을 통해 해결할 수 있다.
머클루트는 머클트리의 루트값을 의미한다.
머클루트는 해시포인터로 이뤄진 이진트리이다. 루트 아래에는 자식 노드들이 달리고 최하위 노드에는 데이터를 가리키고 있는 해시포인터가 달리게 된다. 즉, 머클루트 값을 알면 모든 데이터의 해시 포인터를 알 수 있다.
만약 블록의 데이터를 머클트리로 구성하게 되면 누군가 일부 트랜잭션 데이터를 변경하게 되면 머클루트값 자체가 변하기 때문에 변경을 감지할 수 있게 된다.
포크(fork)는 갈림길이 갈라지듯이 블록체인이 둘로 나뉘어지는 현상이다. 간단히 말해서 블록체인을 업그레이드 하는 것이다.
이때 포크에는 두가지 종류가 있는데 소프트 포크와 하드 포크가 있다.
하드 포크는 이전 버전과 호환이 불가능하다. 때문에 하드 포크의 경우 개발자들과 채굴자들의 동의가 필수적이다. 이때 합의하는 과정에 필요한 것이 합의 알고리즘이다.
합의 알고리즘은 한 텀마다 컴퓨터가 수행하기 어려운 계산(해시값 찾기)을 수행하게 하고, 일정 결과를 만족시키는 결과값을 도출한 노드가 모든 노드들로부터 인정(합의)을 받는 행위라고 할 수 있다.
합의 알고리즘 종류에는 크게 두가지로 작업증명과 지분증명이 있다.
이렇게 합의 알고리즘을 통해 합의가 되면 결국 하나의 체인이 남게 된다.
이때, 마지막에 남는 체인은 정격체인(Canonical Chain)이라고 하고, 이 정격체인에 들어있는 거래만이 실제로 일어난 거래라고 인정 받는다.
비트코인 네트워크에서는 결과값을 도출한 노드에게 비트코인으로 보상하게 되고 트랜잭션 데이터 블록을 추가하게 된다. 비트코인 네트워크에서는 이를 채굴이라고 한다.
분산 저장
블록체인 데이터는 대개 수천 개의 분산화된 네트워크 노드에 저장되기 때문에 시스템과 데이터는 기술적 실패와 악의적 공격에 대한 강한 저항력을 갖는다.
중앙 관리자가 필요 없다
은행이나 정부 등의 중앙기관이나 중앙 관리자가 필요했던 것은 공식적인 증명, 등기, 인증 등이 필요했기 때문이다. 그러나 블록체인은 다수가 데이터를 저장, 증명하기 때문에 중앙관리자가 존재하지 않게 된다.
안전성
승인된 블록들은 되돌리기가 무척 어렵고, 이는 데이터가 블록체인에 기록된 다음에는 이를 삭제하거나 변경하기가 무척 어렵다는 것을 뜻한다. 그만큼 중요한 정보들에 대해서는 안전성이 보장된다.
데이터 수정
블록체인 시스템은 블록체인에 데이터가 기록되면 이를 수정하기가 무척 어렵다.
느린 속도
블록체인은 실제 사용하기엔 매우 느린 처리 속도이다. 때문에 간단한 이체를 하기 위해서는 상당한 시간이 소요된다.