블록체인 합의 방법 작업증명(pow, proof-of-work) 지분증명 (Pos, proof-of-stake) 소개
IT 지식/IT 지식

블록체인 합의 방법 작업증명(pow, proof-of-work) 지분증명 (Pos, proof-of-stake) 소개

반응형

오늘 회사에서 샌프란시스코 대학교 블록체인 관련 교수인 정은진 교수님에게 블록체인 관련된 세미나를 들었다. 


오늘 강의를 통해 그 동안 내가 블록체인에서 의구심을 가졌던 내용을 정리해보았다.


블록체인이란?

우선 앞에 글에서도 설명하였듯이 블록체인은 hash의 연결이다. 

hash는 y=f(x)로 이루어져 있는 함수로써 함수에 들어간 값에 따라 y의 값이 바로바로 나온다. 이때 사용되는 해쉬는 sha256이다. x값으로 y의 값을 찾는데 어렵지 않으나, y의 값으로 x의 값을 찾는 것은 무지 어렵다. 이런 y값으로 x의 값을 찾는 것이 결국 비트코인을 채굴한다는 의미와 같다.


블록체인은 아래 그림과 같이 각 블록이 hash 값으로 연결되어 있다. 앞에 hash 값은 이전의 블록의 hash 값이 포함되어 있으므로, 중간의 블록이 변경될경우 모든 신뢰성이 깨지게 된다. 그러므로 데이터의 신뢰성을 보장한다하여 요새 각광받고 있다.


조금 더 쉽게 설명하면 위에 사용된 블록을 거래 장표라고 한다면 각 거래장표는 hash로 증명이되고 각 거래장표는 서로 연결되어 있는 구조로 생각하면된다. 여기서 거래장표는 y=f(x)에서 x의 값이 되는 것이다. x의 값은 매체가 무엇이냐에 따라 장표가 아니라 다양하게 사용할 수 있다.


블록생성 합의

블록은 다음 블록의 hash값을 찾기위해 nonce 값을 찾으면서 연결된다. 그런데 만약 블록의 nonce 값을 찾는 과정이 동시에 일어나서 블록이 여러개 생성된다면 어떨까? 그러면 결국 아래 그림처럼 트리구조가 되어버릴수가 있다. 그러면 결국 체인이 아닌 트리가 되고 신뢰가 깨지기 때문에 문제가 발생한다. 그래서 합의 알고리즘을 통한 합의 과정이 필요한다.


practical byzantine fault tolerance

블록체인의 합의 과정 중 자주 사용되는 개념으로 비잔틴 3분의 1 법칙이 있다. 3분의 1 미만의 컴퓨터가 악의적으로 행동해도 나머지 3분의2 이상의 컴퓨터가 데이터에 대한 합의를 이루는 방식. 예를 들어 4대의 컴퓨터 중 1대가 악의적으로 행동해도 나머지 3대가 데이터에 대한 합의를 이룰 수 있음.

즉 정리하면, 악의적 행동을 하는 사람이 3분의 1일 넘어서면 합의에 이룰수 없는 이론이다. 반대로 말하면 3분의 1이하가 반대를 한다면 그것은 합의가 가능하다.


합의 알고리즘 (작업증명 PoW)

- 가장 많이 사용하는 합의 방법으로 먼저 체굴한 블록이 선정되는 합의 알고리즘

- 이는 이더리움 포함한 대부분의 코인에서 사용하는 방식이지만 장비가 좋거나 돈이 많아 사람을 많이 고용할 수 있는 집단이 다 챙겨먹을 수 있기에 빈익빈부익부 현상을 초래


합의 알고리즘 (지분증명 PoS)

- 이더리움이 새로 개발하려는 캐스퍼의 일종으로 기준치의 비트코인(블록)을 가지고 있는 사람에게 투표권을 주며 그 투표권을 가진 사람들이 투표권을 행사하여 정격체인을 선택하는 구조.

- 여기서 아까 봤던 practical byzantine fault tolerance 개념이 사용되는데 투표를 진행하였을때 2/3 이상의 사용자가 투표한 체인만 정격체인이된다. 한번 투표를 통해 더 이상 바뀔수 없는 경우 완결한 형태의 체인이 된다.

- 현재 이더리움에서도 사용하려는 개념이며 투표를 하면 0.7%의 이자율을 준다. 이는 투표를 장려하여 빠른 체인 형성을 위해서이다. 하지만 패널티도 존재한다. 만약 투표를 진행하지 않으면 예치금을 깍는다.

- 투표를 진행하고도 또 다른 체인에 투표할 시 페널티로 예치금을 모두 환수한다.

- 하지만 이런 구조는 2/3 체인에 등록되기 위해 지분이 많은 사람에게 몰리게되는 단점이 있음.



합의 알고리즘에 선택되지 못한 블록의 트랜잭션은 어떻게될까?

가장 내가 블록체인 공부하면서 궁금했던 부분이 이부분이다. 만약 내가 생성된 블록에 여러 트랜잭션을 집어넣었는데 내 블록이 선택되지 않아 페기된다면 과연 이 내부에 존재하는 거래내역(트랜잭션은)은 어떻게 될까? 


이는 교수님이 설명을 해주셨는데 블록에 들어가지 못한 트랜잭션은 결국 트랜잭션 큐에 들어가게 되고 블록에 선택될 때까지 거래가 완료되지 않는다고 했다. 그럼 대세 블록에 들어가게 하여 거래를 성사하고 싶으면 어떻게 해야할까?

비싼 수수료를 블록 소유자한테 납부하고 그 블록에 소속되면 된다. 이는 이더리움에서 송금할 때 가스를 주입한다는 방식과 동일하다고 한다.


적용사례

비트코인뿐 아니라 다양한 산업에서 블록체인을 사용한다. 카카오 인증, 멜론 인디음악, 현대카드 SSO등등 하지만 블록체인은 100%의 신뢰를 가지지 못하고 속도의 제약, 수수료 등등 문제가 있어 아직 보편화 되기에는 이른 것 같다.


지금까지 블록체인에 대해 알아보았다. 신기한 기술이지만 그만큼 문제도 많은 것 같다. 초창기니까 더 보완이 되면 좋은 알고리즘이 되지 않을까 싶다.

반응형

'IT 지식 > IT 지식' 카테고리의 다른 글

[토이프로젝트] TimeLine 개선  (0) 2020.06.14
비트코인 핵심기술 블록체인 핵심 요약  (1) 2018.05.27