Blockchain Structure

블록체인의 구조

How to achieve Decentralization?

블록체인의 가장 중요한 이념은 탈중앙화(decentralization)이다. 비트코인 백서에서 다뤘던 것과 같이 블록체인은 중앙 관리 시스템 없이 개인간의 신뢰를 통해 탈중앙화를 달성한다.

화폐의 관점에서 보면 중앙 관리 시스템은 은행이다. 내가 버튼 하나 눌러서 송금을 하고 불안해하지 않는 이유는 은행에게 송금을 믿고 맡길 수 있기 때문이다. 1퍼센트 확률로 송금이 실패한다면 대부분은 은행을 통해 송금을 하지 않을 것이다.

비트코인도 똑같다. 비트코인이 100% 신뢰있는 시스템을 구축하지 않으면 비트코인은 거래의 수단으로 이용될 수 없을 것이다. 블록체인은 비트코인을 100% 신뢰할 수 있는 시스템으로 만들어주는 기술이다.

What is our purpose?

가상화폐 사용자들끼리 거래를 한다는 것은 거래 내역을 적는다는 뜻이다. A가 B에게 500원을 주었다는 거래 내역을 전 세계인이 알고 인정해준다면 해당 거래는 완전히 유효한 것이 된다.

그렇다면 거래 내역을 어떻게 전 세계인이 인정하도록 저장할 것인가?

What is problem

디지털 통화의 첫번째 문제는 무엇일까? 디지털 통화는 사실 비트 한 뭉치이기 때문에 쉽게 복사하여 사용할 수 있다. 예를 들어 A가 B에게 비트코인을 주면서 동시에 같은 비트코인을 C에게 줄 수 있다. 이 문제를 Double spending 이라고 부른다.

다음의 문제 상황을 가정해보자.

"A가 비트코인 x를 B에게 주었다는 거래내역(Txab)과 A가 비트코인 x를 C에게 주었다는 거래내역(Txac)을 동시에 비트코인 네트워크에 저장하였다."

Txab(Transcation x from a to b) 와 Txac(Transcation x from a to c) 중 어떤 거래가 유효한 거래인가?

Timestamp Server Approach

a와 b의 순서가 정해져있다면 먼저 진행된 거래를 유효한 거래로 승인하고 뒤의 중복된 거래를 버릴 수 있다. Timestamp 서버는 순서를 보장해줌으로써 유효한 거래를 보장해준다.

Timestamp 서버는 암호학적인 방법으로 특정 시간에 해당 데이터가 쓰여 졌음을 서명하고 이를 널리 퍼뜨리는 일을 한다. 예를 들면 "A가 B에게 10231번째 발행된 500원 동을 주었다"는 내용을 뉴스 헤드라인 기사에 날짜와 시간을 명시하여 적고 해당 신문을 전국에 뿌리는 것과 같다.

Timestamp Server가 "데이터가 특정 시간에 쓰여 졌음을 서명한다"는 것은 "데이터와 시간을 인풋으로 하고 암호화 해시 함수를 이용해서 해시값을 계산한다"는 뜻이다. Timestamp Server Approach에서는 데이터들의 순서를 보장하기 위해 해시값을 계산할 때 한가지 트릭을 사용한다. 그것은 이전 해시값을 인풋값에 추가하는 것이다. 만약 데이터 A의 해시값을 통해 데이터 B의 해시값을 계산할 수 있다면 데이터 A가 데이터 B보다 먼저임을 증명할 수 있다. 데이터 A가 Txab, 데이터 B가 Txac라면 Txab가 유효한 거래로 판별된다.

예를 들어서 하루에 하나의 기사만 쓰는 신문사가 있다고 해보자. 신문사 "A가 B에게 10231번째 발행된 500원 동전을 주었다"는 내용의 제보와 "A가 C에게 10231번째 발행된 500원 동전을 주었다"는 제보를 순서대로 받고 먼저 들어온 제보를 2021년 4월 7일자 신문에 적어 배포한다. 다음날 신문에 올라 "A가 C에게 10231번째 발행된 500원 동전을 주었다"는 기사는 유효하지 않다고 판별될 것이다.

이처럼 Timestamp Server를 이용한 방식에서 다음 해시값을 만드는데 이전 해시값이 필요하기 때문에 아래 그림처럼 Chain을 형성한다.

해시에 관련된 자세한 내용은 아래 페이지에서 확인하자.

Hash

Distributed Timestamp Server

하지만 Timestamp 서버를 사용하여 인증하는 방식은 아직 중앙 시스템이 관여한다. 공신력 있는 신문사가 날짜와 시간을 적어서 뿌리는 것이 아닌 peer-to-peer 방식으로 동작하는 분산 Timestamp 서버가 필요하다. 비트코인은 Proof-of-Work를 이용하여 분산 Timestamp 서버를 구현하였다. Proof-of-Work는 엄청 요약하면 어려운 문제의 답을 구하는 것이고 다음 문제는 답이 구해진 후에 출제된다. 문제의 답을 찾으면 블록을 만들고 데이터를 저장하여 퍼트리고 다른 참여자들은 답을 대입해서 유효성을 판별한다. 문제가 어렵기 때문에 답을 찾아서 새롭게 생성되는 블록에 순서가 생기고 문제 출제를 이전 블록의 해시값을 이용해서 하기 때문에 Timestamp server와 마찬가지로 블록들의 순서가 보장된다.

아래 그림처럼 이전 블록의 해시가 다음 블록에 사용되는 것이 반복되어 마치 블록들이 체인을 형성한 것 같은 모양이 되기 때문에 이를 블록체인이라고 부른다.

여기서 말하고자 하는 내용은 Proof-of-work를 통해 Timestamp 서버 없이도 순서를 보장하여 데이터를 저장할 수 있다는 것이다. Proof-of-work 방식에 대한 자세한 설명은 아래 페이지에서 확인할 수 있다.

Proof of Work

Distributed immutable ledger

데이터 간의 순서를 보장하여 double spending 문제를 방지하였다. 하지만 데이터가 유일하고 유효한 데이터임을 보장하는 것으로 100%의 신뢰를 줄 수 없다. 데이터를 조작하는 행위 또한 방지되어야 한다.

사실 이 문제도 위의 Proof-of-work 방식을 통해 형성된 블록체인에 의해서 해결된다. 모든 유효한 데이터 블록이 체인을 형성하여 연결되어 있기 때문에 이중 한 블록의 내용을 바꾸기 위해서는 그 이후 블록의 답을 다시 모두 계산하여 바꾸어야 유효한 블록으로 인정받을 수 있다.

간단한 문제를 도입해서 느낌을 잡아보자. 아래 간단한 블록체인에 사용된 문제와 해시 함수는 다음과 같다.

  • Question = Prev Hash + Nonce를 7로 나누어 나머지가 0이 되게 하는 자연수 Nonce

  • 해시 함수 = (Prev Hash + Nonce * 2 + 데이터) % 10

위의 완성된 블록체인에서 악의적인 참여자가 첫번째 블록의 데이터를 수정한다면 어떻게 될까? 아래 그림과 같이 첫번째 블록에 대한 해시값도 바뀌게 되어 다음 블록의 Nonce가 더이상 정답이 아니게 된다. 즉, 수정된 블록체인은 잘못되었다고 판단되어 버려진다.

악의적인 참여자가 데이터 수정에 성공하려면 데이터를 바꾼 블록 이후의 모든 블록에 대한 Nonce를 다시 계산해서 바꾸어야 한다. 만약 이것이 성공한다면 다른 참여자들이 조작된 블록체인을 유효하다고 판별할 것이다.

하지만 실제 블록체인에서 사용하는 문제는 암호학을 이용한 상당히 어려운 문제이다. 답을 구하는 공식이 아직 밝혀지지 않아서 답을 구하기 위해서는 답을 하나하나 대입해보아야 한다. 따라서 수정된 블록부터 다시 해법을 구한 다는 것은 실질적으로 불가능하다. 게다가 다시 답을 구하는 동안 다른 정직한 참여자들이 계속 새로운 블록을 추가한다. 즉, 악의적인 참여자는 정직한 참여자들이 블록을 추가하는 속도보다 빠르게 해답을 찾아내야 한다. 정직한 참여자들의 계산 속도가 단 1%만 빨라도 블록체인의 신뢰도는 유지된다. 신뢰도를 깨뜨리기위해서는 51%의 컴퓨팅 파워를 가진 공격자가 필요하다. 51% Attack의 자세한 내용은 이곳에서 확인하자.‌

Date: 04/07/0201

Last updated