[Makers Basic 6] 합의 알고리즘(1)-작업증명(PoW)

장경재
BlockMakers Powered by DAIOS
6 min readSep 27, 2018

블록체인 기술의 핵심은 합의 알고리즘입니다. 핵심이지만 내용이 조금 딱딱하거나 이해하기가 어려울 수 있습니다. 많은 내용을 참조하여 작성하였습니다. 출처는 아래에 작성되어 있습니다.

우선적으로 합의 알고리즘에 대해서 설명하기 전에 이해하기 쉽도록 거버넌스 구조와 채굴(마이닝)에 뜻을 알아보도록 하겠습니다.

거버넌스란?

거버넌스(governance)란 다수의 참여자들이 공동의 목표를 위해 서로 논의하고 결정하는 체계를 말한다.

아시다시피, 블록체인은 권위적인 중앙체계를 지니지 않기 때문에 사용하는 다수의 참여자들이 공동으로 의사결정을 내리기 위한 거버넌스 구조가 필요합니다.

중앙 체계가 없기 때문에 의사결정을 내리기 위해서는 네트워크에 참여하는 모든 사용자들이 평등한 관계에서 합의를 도출하기 위한 거버넌스와 이를 시스템적으로 자동 구현하기 위한 합의 알고리즘이 필요합니다.

채굴, 마이닝이란?

지난 포스팅에도 간단히 설명했지만 채굴이란 임의의 값인 논스(nonce)값을 대입하여 블록 해시 결과값을 생성하여 제시된 값보다 작은 블록 해시를 찾는 과정입니다. 작은 해시값을 찾기 위해서는 논스값을 수없이 대입하여 값을 찾아내는 단순 반복작업을 수행하게 됩니다. 이러한 과정을 1초에 몇번이나 수행할 수 있는 지에 대한 수치 정보를 해시파워라고 표현합니다. 해시파워가 높다는 것은 수행능력이 좋다는 것을 의미하여 확률적으로 더 많은 보상을 받게 됩니다.

이제 합의 알고리즘에 대하여 알아보면,

합의 알고리즘이란 P2P 네트워크와 같이 정보 도달에 시간차이가 있는 네트워크에서 참가자가 하나의 결과에 대한 합의를 얻기 위한 알고리즘입니다.

조금 자세히 말하자면 누가 블록을 채굴할 것인지, 그리고 채굴되는 확률을 어떻게 결정할 것인지, 어느 체인이 유효하여 블록에 추가될 것인지를 결정하는 것입니다.

이번 편에서는 합의 알고리즘 중에서 가장 대표적인 작업증명(Proof of Work)을 알아보겠습니다.

작업증명이란?

작업증명 (Proof of Work) =>계산 능력

어려운 문제를 빨리 해결한 노드에게 블록을 생성할 수 있는 권한을 주고 그 보상으로 코인을 제공하는 방식입니다. 따라서 작업증명에서는 계산능력이 관건입니다. 계산능력에 따라 채굴의 양이 달라지기에 채굴 능력, 혹은 채굴 확률이라고 하기도 합니다.

비트코인의 경우는 무작위로 생성된 난수를 맞추는 문제를 제공하고 있으며, 약 10분정도에 풀리도록 난이도 조절을 하고 있습니다. 난이도 조절은 마치 모의고사 난이도 조절과 같이 이전 문제를 푸는 시간을 통하여 조절합니다.

예시를 통해서 알아보도록 하겠습니다.

  1. A가 B에게 송금을 한다.(트랜잭션)
  2. 발생된 트랜잭션은 블록체인 P2P 네트워크를 통해서 모든 노드에게 전파된다.
  3. 트랜잭션을 받은 승인자는 블록을 생성하기 위한 요건을 만족시키는 해시값을 찾기 시작한다. 블록의 해시값이 제시된 값보다 작은 값을 찾는 것으로 논스값(nounce)을 찾는 것을 말한다.
  4. 조건을 만족하는 해답을 발견한 승인자는 모든 노드에게 전파한다.
  5. 블록을 받은 각각의 노드는 블록이 정당한지 검증하는데, 이때 50%이상이 동의할 경우 블록은 체인에 추가된다.
  6. 송금이 완료된다.

3번 과정에서 동시에 여러 노드가 값을 찾을 경우 여러개의 블록이 생성될 수 있습니다.이 경우를 분기 혹은 fork라고 합니다.(각 노드들의 데이터 전송시간 차이로 발생할 수도 있습니다.)

이러한 분기가 발생할 경우, 승인자(마이닝 노드)들은 하나의 블록체인을 선택하여 다음 블록을 생성하게 됩니다. 이후 먼저 블록이 생성되는 블록체인이 유효한 블록체인이 됩니다. 다시 말해서 더 긴 블록을 선호하는 정책으로 분기를 해결하는 것입니다. 그렇기 때문에 짧은 체인에 있던 블록의 내용은 없던 일이 되어서 잔액이 바뀌거나 거래 자체가 없어지는 경우도 발생할 수 있습니다.

비트코인의 경우에는 이런 경우를 방지하기 위하여 거래가 확정 되더라도 6블록 정도를 추가로 기다리지 않으면 다음 거래를 할 수 없도록 제한을 두는 등의 방법을 적용하고 있습니다.

이를 결제 완전성(Settlement Finality) 또는 파이널리티 불확실성(Finality Uncertainty)라고 한다. 금융시스템은 데이터에 대하여 안전하고 확실하게 이용되어야 하는 데, 이런 파이널리티 불확실성으로 인하여 금융 시스템에 도입되기 어려운 이유 중 하나가 되고 있습니다.

작업증명 방식의 문제점

블록체인 시스템에서 처음으로 도입한 합의 알고리즘은 작업증명 방식(PoW)입니다.

복습해보면 작업증명이란 목표값 이하의 해시를 찾는 과정을 수없이 반복해서 해당 작업에 참여했음을 증명하는 방식의 알고리즘이며. 이러한 방식이 마치 광산에서 금을 캐기 위한 행동과 비슷하다고 하여 채굴(mining)이라고 부르고 이러한 채굴을 통해 가장 먼저 목표값 이하의 해시값을 얻게 되는 사용자는 해당 블록을 체인에 연결하고 이에 대한 댓가로 신규 코인을 지급받습니다.

1. 자원낭비

이러한 작업증명 방식에 따른 채굴은 막대한 자원과 전기 낭비를 유발한다는 것입니다. 채굴을 통해 코인을 지급받는 사람은 1명이지만 수없이 많은 자원이 경쟁에 참여하기에 낭비가 커집니다. 일반적으로 사회에서 볼 수 있는 경쟁과는 다르게 이러한 경쟁은 경쟁후에 남는 것이 없으므로 소모적일 뿐입니다.

그리고 현재는 채굴 난이도가 높아져 연산에 필요한 고사양 장비가 많이 필요해져 개인 채굴자는 채굴을 할 수 없는 수준까지 왔습니다.

2. 51% 공격

경쟁이 심해지면서 여러 채굴업체들이 마이닝 풀(mining pool)을 구성하기도 합니다.

마이닝 풀이란 채굴기를 운영하는 개인이나 업체들은 공동으로 연합하는 것을 말합니다. 공동으로 채굴하고 수익을 배분하는 것입니다. 각각의 참여자들은 참여한 자신의 해시 연산력에 비례하여 수익을 배분 받습니다.

이러한 마이닝 풀을 통해 네트워크로 연결된 채굴기들은 1대의 슈퍼컴퓨터 성능이 좋게 작동하여 채굴 성공율을 높일 수 있게 됩니다.

지난 시간에 블록체인의 특징 중 신뢰성 부분을 언급을 할 때 알려드렸지만 채굴 성공율이 높아진 다는 것은 다른 노드들보다 좀 더 빠르게 새로운 블록을 생성하여 전파하게 되는 것이므로 단순계산이기는 하지만 상위 마이닝 풀이 담합을 한다면 51% 공격을 통해 기존 거래내역에 대한 위변조도 가능할수 있습니다.

블록체인은 중앙집중적인 기존의 시스템에서 탈피하고자 생긴 기술인데, 이렇게 마이닝 풀을 통하여 소수의 채굴업자들로 하여금 의사결정 권한이 집중되는 현상이 발생할 수 있다.

3. 파이널리티 불확실성(결제 완전성)

아까도 언급했듯이, 분기 혹은 fork가 발생했을 시, 블록체인은 긴 체인을 선호하는 정책으로 해결하는 데, 이 때 짧은 체인을 가지고 있던 노드는 선택되지 않아 해당 거래 잔액이 변경되거나 없어지는 등에 문제가 생기는 것을 말합니다.

출처 : 아이리포 & CSLEE, steemit, medium, tistory, 해시넷 블로그

--

--