블록체인의 원리 ; 2. 비트코인의 PoW(Proof of Work)

Ok Haeeun·2021년 9월 4일
0

블록체인의 원리

목록 보기
4/5
post-thumbnail

의문 풀고 가기

블록체인은 서로가 서로를 감시한다?

블록체인은 서로가 서로를 감시하며 안전하게 작동하게 만든다는 이야기를 들어본 적이 있을 것이다.
TTA과학칼럼에 따르면 우리가 카페에서 음료를 가지러 갈때, 다른 사람들이 서로를 지켜보고 있다는 생각을 바탕으로 짐을 자리에 잠시 놓고 가듯이 블록체인도 비슷한 논리로 동작한다고 말한다. 네트워크에 참여하는 이들은 거래정보를 모두 확인할 수 있으므로 정보가 조작되었을 때, 검증하는 과정에서 잘못된 것을 바로 알 수 있다. 거래기록들을 담은 새로운 블록이 성공적으로 생성되려면, 증명과정을 통해 이 거래들에게 문제가 없음이 증명되어야 하기 때문이다.


네트워크에 참여하는 사람들 중 꽤 많은 사람들이 나쁘게 마음을 먹으면 해킹할 수 있나?

물론 가능하다. 그러나 전세계에 분산되어 있는 네트워크 참여 컴퓨터들 중에서 아주 많은 컴퓨터를 거의 동시에 해킹한다는 것은 불가능에 가까우므로 확률적으로는 어렵다고 할 수 있다. 작은 규모의 블록체인인 경우에는 참여하고 있는 네트워크 내의 특정 다수 집단이 자신들이 원하는 방향으로 흘러가도록 만들 확률은 존재한다.

하지만 그것이 화폐인 경우에, 다수가 참여하면서도 네트워크가 깨끗함이 증명되어야 화폐의 가치를 인정받을 수 있기 때문에 굳이 컴퓨팅 파워를 낭비하면서까지 해킹하려 하지 않는 것이다.

현재의 화폐 제도를 생각해보아도 그렇다. 화폐는 거래에 그것을 이용할 수 있어야 가치가 생기고, 많은 사람들이 이용할수록 보증되며 가치가 높아진다고 할 수 있다. 우리는 현재 정부에서 발급하는 "돈"이라는 것을 이용하면 다른 것을 이용한 거래보다 비교적 많은 사람들에게 보증받은 것으로, 공평한 거래를 할 수 있다는 믿음이 있다. 이런 맥락에서 암호화폐도 믿음직한 네트워크가 가지고 있는 화폐의 가치가 올라가는 것이 당연하게 되는 것이다.



지난 게시글은 블록체인에서 블록을 생성할 때 생길 수 있는 가장 대표적인 문제인 비잔틴 장군 문제에 대해 다뤘다.

비잔틴 장군 문제는 블록체인 합의의 과정에서 발생할 수 있는 문제를 말한다.
분산된 시스템이 하나의 결론을 도출해야 할 때 시스템 내에 오류나 의도적인 조작이 있더라도 적합한 결론을 낼 수 있도록 하는 것이다.

현존하는 블록체인들 중 거의 완벽하게 비잔틴 문제를 해결했다고 보는 시스템은 "비트코인"이다. '블록체인'하면 '비트코인'이 떠오를만큼 블록체인을 이용해 만들어진 가상화폐 중 단연 1등이라고 할 수 있다.
아직까지 비트코인 시스템 자체의 해킹은 이뤄지지 않은 것으로 보고 있다.

비트코인은 비잔틴 장군 문제를 작업증명방식(PoW;Proof of Work)으로 해결했다.

PoW는 무엇일까?


2.1. PoW(Proof of Work)

작업증명방식의 사전적 의미는 다음과 같다.

목표값 이하의 해시를 찾는 과정을 무수히 반복함으로써 해당 작업에 참여했음을 증명하는 방식의 합의 알고리즘 (출처 : 해시넷)

채굴(mining)을 통해 증명한다. 비트코인, 이더리움, 라이트코인, 비트코인캐시, 비트코인골드, 모네로 등이 합의 알고리즘으로 작업증명방식을 사용하고 있다.

해시캐시(hashcash)

이메일을 보낼 때 우표 대신 해시캐시를 지불하게 함으로써 시간과 비용 부담 때문에 대량 스팸메일 발송을 못하게 하려는 목적으로 만들어진 암호화폐이다.

이메일을 발송하기 위해 해시캐시가 먼저 있어야 된다. 해시캐시는 컴퓨터 연산을 통해 받을 수 있다. 이것이 PoW과정이 되는 것이다. 특정 해시값을 찾기위해 시간과 비용을 들이게 함으로써 대량의 스팸메일을 보낼 수 없게 한다는 논리이다.

PoW 간단 역사

1993년 : 심시아 더크(Cynthia Dwork) & 모니 나노어(Moni Naor);
작업 증명 기본 개념 고안
1999년 : 마커스 제이콥슨(Markus_Jakobsson) & 아리 쥬엘스(Ari Juels);
Proof of Work 라는 명칭이 붙음.
1997년 : 아담 백(Adam Back);
최초의 작업증명 방식 적용 (해시캐시;스팸메일을 막기 위한 암호화폐)
2009년 : 사토시 나카모토;
비트코인(bitcoin)에 사용.


2.2. 채굴(Mining)

채굴은 암호화폐의 거래내역(트랜잭션)을 기록한 블록을 생성하고 그 대가로 암호화폐를 얻는 행위를 말한다. 블록을 생성하기 위해서 블록 내에 있는 거래내역이 조작 없이 유효한지를 검증하고, 작업증명방식에서 만든 계산문제를 푸는 과정을 거치면 블록을 생성할 수 있게 된다. 여기서, 블록이 "생성되는 것"이 아니라, "생성될 수도 있다는 것"이 포인트다. 다른 채굴자들의 검증과정을 통과해야 생성되기 때문이다.

작업증명방식에서 해시함수의 개념을 빼놓을 수 없다. 문제를 푸는 과정은 오래 걸리고, 어렵지만 다른 채굴자들의 검증과정을 빠르게 진행될 수 있도록 하기 때문이다.

2.2.1. 해시함수(Hash Function)

해시함수는 message digest라고도 하며, 메시지를 작게 축약한 것이라는 의미를 가지고 있다.

임의의 길이의 문자열을 고정 길이(n)의 문자열로 바꾸는 함수를 말한다.
정의역이 공역에 비해 훨씬 크기 때문에 결과값이 충돌할 수 밖에(겹칠 수 밖에) 없다.

해시함수를 거쳐 나온 해시값은 해당 문자열의 "지문"이라고 할 수 있을 정도로 특정한 값을 갖는다. 입력에 따른 결과 값은 변하지 않기 때문이다.

채굴은 난이도에 맞는 문제를 풀어 특정 해시값을 찾는 것이므로

출력값은 해시값이 된다. 아까 말했듯이, 정의역이 공역에 비해 훨씬 크기 때문에 다른 입력값이어도 결과값은 같을 수 있다. 그래서 결과값에서 입력값을 도출하기는 어렵다. 하지만 입력값이 있다면 출력값은 아주 빠르게 도출할 수 있다.

특정 기준에 부합하는 해시값을 찾는 것은 어렵지만, 찾고 나서 증명하는 것은 아주 쉽게 되기 때문이다.

풀어야 할 문제가 어떻게 생겼는데?

2.2.2. 블록의 구조

블록의 구조는 다음과 같다.

출처

이 포스팅에서 블록의 구조에 대해 복잡하게 설명하지는 않겠다. 간단히 말하면 블록 헤더 안에 있는 논스 값을 일일이 바꾸며 대입하여 문제의 기준에 맞는 해시값이 나오도록 하는 과정을 반복하는 것이다.
어떤 논스 값을 넣었을 때 어떤 해시값이 나올지 예측하기 매우 어렵기 때문에 직접 대입해보는 것이 가장 빠르다. 채굴자들은 일일이 숫자를 대입해보며 기준에 맞는 논스값을 찾아야 하는 것이다. 그래서 어느정도 난이도를 예측할 수 있게 되고, 문제를 푸는 속도가 곧 블록 생성 속도가 되므로 블록마다 난이도도 문제를 푸는 시간에 따라 조절하게 된다.

물론 0부터 대입해보는 사람이 있고, 3000부터 대입해보는 사람이 있듯이 문제를 푸는 속도엔 차이가 있을 수 있으나, 대체로 10분에 1개가 만들어지도록 비트코인에서는 난이도를 조절하고 있다.

2.3. 검증

논스값을 제외한 나머지 값은 정해진 정보이므로, 어떤 채굴자가 논스값을 찾아 블록을 생성할 수 있게 되었을 때, 다른 채굴자들은 정해진 정보에 해당 논스값을 대입하여 블록 생성이 유효한지 검증한다.

검증이 끝나면, 채굴자 각자 자신의 장부에 블록을 추가하게 된다.


이번 포스팅에서는 PoW에 대해 간단히 개념만 알아보았다.

다음 시간에는 PoW 방법 이후에 나온 PoS(Proof of Stake) 방법에 대해 작성해보겠다.

profile
貫徹

0개의 댓글