Blockchain/Bitcoin

[Bitcoin] 비트코인 작업 증명 (PoW)

byunghyun23 2021. 3. 23. 20:16

블록체인은 탈중앙화 시스템으로 트랜잭션의 신뢰를 보장할 제3자가 존재하지 않습니다.

때문에 누가 트랜잭션을 보장하고, 그것을 어떻게 신뢰할 수 있는지가 굉장히 중요합니다.

 

작업 증명(Proof of Work)은 1993년 Cynthia Dwork, Moni Naor가 발명한 서비스 요청자로부터 특정 작업을 요구하여 서비스 거부 등의 공격을 차단하기 위한 알고리즘입니다.

비트코인은 작업 증명을 통해 신뢰를 보장합니다. 여기서 '작업'은 해시 퍼즐을 푸는 것이고, 각 노드는 해시 퍼즐을 풀어낸 노드에게 트랜잭션을 블록에 작성할 권한을 주는 것에 대해 합의합니다. 여기서 해시 퍼즐을 풀어낸 노드를 '마이너'라고 부르며 퍼즐을 풀고 보상을 받는 과정을 '마이닝'이라고 합니다.

 

해시 퍼즐은 해시 값이 목푯값보다 작거나 같도록 하는 입력값 중 Nonce를 찾는 문제입니다.

여기서 '입력'은 이전 포스팅에서 설명한 블록헤더의 이전블록의 해시값, 머클 루트, 비트, 타임스탬프, 버전, Nonce 입니다.

Nonce를 제외한 나머지 5개의 값은 블록이 생성될 때 주어지는 상수값이기 때문에 마이너는 Nonce 값을 조절하며 해시 값이 목푯값보다 작거나 같도록 하는 Nonce를 찾습니다.

 

Nonce를 찾은 마이너에게 트랜잭션 작성 권한을 주는 것에 합의하는 이유는 다음과 같습니다.

1. Nonce 값을 찾기 위한 컴퓨팅 파워 필요

2. 해시 퍼즐을 풀어내면 비트코인을 보상으로 받음

 

먼저, Nonce를 찾기 위해서는 엄청난 컴퓨팅 파워가 필요합니다. 해시 함수는 복호화가 불가능하기 때문에 무차별 대입(Brute-Force)으로 계산을 해야 합니다. 해커가 트랜잭션을 조작하여 마이닝을 할 수 있지만, 각 블록은 해시 값으로 연결되어 있기 때문에 검증 과정에서 올바른 트랜잭션으로 인정 받기 어렵습니다. 만약 전체 노드 중 51% 이상의 블록체인을 해킹하면 가능할 수 있지만, 비트코인은 약 10분마다 블록이 생성되기 때문에 이 시간안에 51% 이상의 블록체인 해킹은 사실상 불가능합니다. 인정 받지 못하는 블록을 생성하기 위해 컴퓨팅 파워를 쓰는 노드는 존재하지 않다는 전제입니다.

 

마이닝으로 비트코인을 보상 받을 수 있지만, 보상받은 비트코인은 블록이 인정받기 전까지는 자신의 것이 아닙니다.

만일 트랜잭션 내용이 변경되었거나, 올바른 Nonce를 찾은 것이 아니라면 각 노드의 검증 과정에서 보상은 취소될 수 있습니다.

그렇기 때문에 마이너는 Nonce를 찾고, 보상을 위해 올바른 트랜잭션을 기록하려고 할 것입니다.

비트코인의 신뢰는 개인의 이익을 위한 행동으로부터 보장됩니다.

 

작업 증명의 프로세스는 다음과 같습니다.

1. Nonce 값을 0으로 설정

2. 'SHA256(SHA256(Header)) <= Target' 만족할 경우, 4번으로 분기

3. Nonce 값에 1을 더한 후, 2번으로 분기

4. Nonce 값을 찾으면 종료

 

Fig 1. PoW

 

 

목푯값(Target)을 구하는 방법은 다음과 같습니다.

Bits의 값이 419668748 라고 가정할 때, 이것을 Hex 값으로 변경한 0x1903a30c를 이용합니다.

 

여기서 Target 값은 아래와 같이 정의됩니다.

Target = 0x03a30c * 2**(8 * (0x19 - 3))

 

결국은 Bits 값을 이용하여 목푯값을 만들 때, 시프트를 통해 난이도를 조절하는 것입니다.

(결과적으로 아래 그림에서는 0x03a30c 값을 left-shift 했습니다.)

Fig 2. Target calculation

brunch.co.kr/@loum/35