본문 바로가기

6.수학과 알고리즘

Blockchain

들어가기

비트코인에 사용하는 블록체인 기술에 대한 글이다. 블록(block)이라는 관리 대상이 있는 데이터를 체인(chain)처럼 연결고리 형태의 분산 데이터 저장하여 위 변조를 방지하는 기술이다. 가상화폐보다 블록체인에 대한 기술적 요소를 다룰려고 한다.

작성자: ospace114@empal.com, http://ospace.tistory.com/

Block 구조

블록(block)이라는 데이터 구조를 살펴보자. 아래는 bitcoin에 사용하는 데이터 구조이다.

각 블록은 헤더(Header)와 몸체(Body)로 구성된다. 헤더에 블록체인 기술을 위한 주요 정보가 포함되고 몸체는 관리할 데이터가 저장된다.

헤더에는 version, previous block hash(이전블록해시값), time(생성시간), merklehash(Body의 해시값), bits(난이도), nonce 등이 포함된다. 몸체는 다양한 정보(ex. 거래정보)등이 포함될 수 있다.

블록체인(BlockChain)은 링크드 리스트(Linked List)형태의 데이터 구조로 Block ← Block ← …. ← Block 형태로 연결된다. 링크드 리스트가 부모가 자식 노드로 연결된 구조라면 블록 체인은 자식이 부모를 가리키는 구조이다. 자식 노드가 부모 노드에 대한 증명을 하는 구조이다. 중간 블록을 수정하려면 이후 블록을 재증명해야 하기에 중간 블록 수정이 거의 불가능하다. Bitcoin에서 최초 블록을 Genesis Block이라고 한다.

Proof-of-Work

증명작업은 어떻게 이뤄지는 살펴보자. 증명작업이 완료되면 새로운 블록이 추가된다.

증명작업 과정은 다음과 같은 순서로 진행된다.

  1. 이전 블록 해시 값을 포함하여 하나의 블록 생성한다.
  2. 헤더 정보에서 nonce값을 임의로 생성한다.
  3. 블록 헤더의 해시 값을 계산을 구한다.
  4. 난이도 특정 숫자보다 작은지 확인한다.
  5. 더 큰 값이라면 2으로 가서 반복하고 작다면 완료한다.

Bitcoin에서는 증명작업 시간이 10분 정도 걸리도록 난이도 조절한다. 이런 작업을 마이닝(mining)이라고 한다. 이런 증명작업을 통해 기여하면 코인을 통해 보상을 받는다. 이를 채굴이라고 표현한다. 현재 최대 2100만 비트코인이 고정되어 있어서 코인이 모두 생성되면 코인이 아닌 수수료만 유일한 보상이 될 수 있다.
증명 작업의 목적은 난이도 계산 값보다 작은 Nonce값을 찾는데 있다. 단순히 생각하기에 이런 Nonce을 찾는게 뭐가 어렵지하는 부분이다. 이는 가능한 모든 값을 하나식 계산해서 찾아야하기 때문이다. 그렇기 때문에 중간에 블록을 수정해야할 경우 이후 모든 모든 값에 대한 Nonce을 찾는 작업이 만만치 않게 된다. 만약 너무 쉬운 Nonce을 사용한다면 의심받을 수 밖에 없다.

Proof-of-Work in Distributed Environment

앞의 증명작업은 단순히 로컬에서만 진행되기에 크게 문제되지 않는다. 그러나 여러 분산된 환경에서는 이런 증명작업이 간단하지 않다. Bitcoin에서는 합의 알고리즘을 통해서 진행된다.
작업증명의 본질은 1CPU 당 1표 의결권이라고 볼 수 있다. 대부분의 참여자는 올바른 행동을 한다. 그렇기에 더 많은 의결권을 가진 쪽을 선택한다. 만약 GPU을 사용할 경우는 어떻게 될까? GPU는 소규모 CPU를 다수를 가지기 때문에 이슈가 발생한다. 그렇기에 Bitcoin의 개발자인 사토시(?)도 GPU 사용을 지양해야 한다고 했다. 물론 지금은 GPU는 기본이다.

난이도 조절 알고리즘 사용하여 10분당 1~2개 블록 생성(Bitcoin)해도록 제어한다. 분산된 환경에서 정보를 동기화 과정을 거칠 수 밖에 없다. 멀리 떨어진 지역의 정보가 서로 다를 수 있다. 생성된 블록도 다른 정보를 가지면서 충돌이 발생한다.

충돌해결

여러 개의 다음 블록이 생성되는 경우 충돌 발생한다. 즉, 체인 분기가 된다. Longest chain rule에 의해 다다음에 생성되는 블록에 의해서 블록길이가 긴 블록이 선택된다. 블록생성은 10분이 걸리기에 충돌발생 가능성은 매우 적다. 일반적으로 이후 블록 3~5개가 추가되어야 유효한 체인으로 확정한다. 선택되지 않은 고아 블록이 있을 경우 확정된 이후에 미 포함된 정보를 다시 추가해서 블록 생성하게 된다.

출처: https://bitsonblocks.net/2015/09/09/a-gentle-introduction-to-blockchain-technology/

마무리

블록체인은 아직도 관심이 많은 대상이다. 추후 어떻게 흘러갈지 흥미진진하다. 어차피 모든 기술은 장단점이 있고, 모든 것에 만능으로 완벽하게 해결하지는 못한다. 그 시대와 상황에 맞게 기술이 선택되어진다. 현재 시대에 비트코인은 어떤 선택을 할까? 원래 목적에 맞게 선택이 될까 아니면 원하지 않는 다른 방향으로 흘러 갈지 궁금하네요.

블록 체인 자체는 보안적 측면에서는 흥미로운 기술이다. 즉, 자기 자신이 자신을 증명함으로서 자신을 보호하는 기술이라고 본다. 그러나 개방형 블록체인을 적용하기에는 너무 큰 리소스가 필요로 해서 실용성이 좋아 보이지는 않는다. 여기서 다양한 아이디어가 나올 수 있다고 생각한다.

부족한 글이지만 여러분에게 도움이 되었으면 하네요. 모두 즐거운 코딩생활되세요. ospace.

덧글: 예전에 정리했던 자료라 일부 참고 자료는 찾을 수가 없네요.

참고

[1] https://blog.theloop.co.kr/2017/06/01/작업증명pow-proof-of-work과-지분증명pos-proof-of-stake/

[2] Tutorial blockchain technical overview-ss, https://www.slideshare.net/HowardAnglin/tutorial-blockchain-technicaloverviewss-66485781

[3] https://hackernoon.com/blockchains-dont-scale-not-today-at-least-but-there-s-hope-2cb43946551a

[4] Bitcoin: A Peer-to-Peer Electronic Cash System 정리, https://ospace.tistory.com/768

반응형

'6.수학과 알고리즘' 카테고리의 다른 글

CNN 이미지 식별 알고리즘  (0) 2024.03.11
BoF 알고리즘  (0) 2024.03.10
[javascript] 펜윅 트리 Fenwick tree  (0) 2023.10.20
나비에-스토크스(Navier-Stokes) 방정식  (0) 2023.01.03
랑그랑주 역학  (0) 2022.12.28