이쿠의 슬기로운 개발생활

함께 성장하기 위한 보안 개발자 EverNote 내용 공유

블록체인

작업 증명(Proof of Work)

이쿠우우 2021. 5. 9. 22:15
반응형

 

 

 

 

 

 

 

 

작업 증명 (Proof Of Work)

 

블록체인에서의 합의(Consensus)

이전 글인 블록체인에 대해 설명하는 과정 중 

정격 체인(Canonical chain)을 선정하는 과정이 필요했었음

정격 체인을 선정하는 방법으로 합의 알고리즘(Consensus Algorithn) 이 사용되고

그 종류로 작업증명, 지분증명 방식이 있는데

이번 글에서는 작업 증명에 대해 설명함.

 

 

 

작업증명(Proof of work)이란?

 

비트코인의 창시자 '나카모토 나토시'가 고안한 블록 생성 방식.

어떠한 거래가 발생 되었을 때 이 거래에 대해서 증명해주는 과정 중의 하나.

 

작업증명은 블럭 하나당 새로운 리더를 선출함.

리더로 선정된 사람은 본인의 블록은 블록체인에 연결 할 수 있음.

리더를 선출하는 과정을 비유하자면

사막에 바늘을 하나 던져놓고 모든 사람들이 투입되서 

가장먼저 바늘을 가져오는 사람이 리더가 됨.

즉 바늘을 가장 먼저 찾아오는 사람의 블럭을 추가할 수 있음.

 

이렇게 작업증명은 컴퓨터로 하여금 '작업'을 시키게 됨.

이 '작업'을 완료하게 되면 보상을 받게됨.

 

작업증명에서 하게되는 '작업'은 컴퓨팅 에너지를 소모하게 됨으로

전기를 굉장이 많이 사용하게 됨.

 

 

작업증명의 목표

새로운 블록을 추가하는 것.

공격으로 부터 블록체인을 보호하는 것.

 

비트코인에서의 작업증명 

먼저 용어를 간단하게 설명.

채굴자(Mininer) : 블록체인에 블록을 추가하는 사람들. 채굴자는 다수의 노드를 가질 수 있음.

노드(Node) : 연상장치들의 코어의 개수. 간단하게 채굴을하는 컴퓨터라고 생각하면됨.(정확히는 그래픽카드..)

채굴(Mining) : 블록체인에 블록을 추가하는 것.

 

아래는 본인(필자)이 개념을 이해하면서 의문점이 들었던 순서대로 그대로 나열하면서 

내용을 정리해봄...

 

비트코인을 사용해서 물품을 거래하거나 비트코인을 친구에게 보내면 실시간으로 그 거래내역은 확인되지 않음.

 

[ 왜? ]

비트코인은 블럭에 비트코인 거래내역을 저장하기 때문.

거래내역이 확인되는 시점은 비트코인 블록체인에 새로운 블록이 추가된 시점임.

새로운 블럭이 추가되는 시간은 보통 10분이 소요됨.

즉 거래가 성사되었다는 것을 10분 뒤에 알 수 있음.

 

[ 그럼 거래내역을 저장하는건 누가하나? ]

바로 채굴자(Miner)가 블럭에 비트코인 거래내용을 저장함.

그리고 블럭을 블록체인에 연결(추가)하는 작업은 채굴(Mining)이라고 함.

 

[ 채굴자들 왜 본인의 시간을 들여서 채굴작업을 하는가? ]

블록을 추가할 때 마다 비트코인에서 일정한 수의 비트코인을 지급함.

그렇기 때문에 채굴자들은 돈과 시간을 투자해서 수많은 Node를 생성하고

Node들이 채굴작업을 하도록함.

초창기에는 한개의 블럭을 추가할 때 마다 50개의 코인을 줬음.

하지만 4년마다 반감기가 와서 그 생산량이 반으로 줄어듬.

50 > 25 > 12.5 > 6.25로 지금은 블록 한개를 추가할 때마 6.25코인을 줌.

왜냐면 비트코인 생산량은 2100만개로 한정되어있기 때문.

 

[ 그럼 Node들이 많아질 수록 코인을 가져가기 위한 경쟁률만 높아지는게 아닌가? ]

엄청난 수의 Node들이 생겨남으로 그 만큼 보안성은 높아짐.

모든 Node들이 동일한 데이터를 저장하고 있고

블록에 새로운 거래내역이 저장된다면 수많은 node간에 데이터를 비교하고

해당 거래내역이 사실인지 판단하여 데이터가 위변조 되지 않음을 확인함.

또한 만약 데이터를 위조하고 싶다하면 이 모든 Node를 동시에 해킹해야함.

그러므로 Node가 많아질 수록 보안성과 신뢰도는 높아짐.

하지만 반대로 Node가 많아질 수록 전기에너지를 많이 사용하여

자원을 낭비하는 환경적으로 안좋은 영향이 있음.

 

[ 블록을 추가하는데 왜 10분이라는 시간이 소요되나? ]

채굴 작업 즉 블록체인에 블록을 올리는건 굉장히 어려움.

채굴자는 본인의 새로운 블럭을 비트코인 블록체인에 올리기 위해

새로운 거래내역이 생성될 때 마다 거래내역을 블록에 저장함.

블록이 꽉차면 해당 블록을 닫고 블록체인에 올리기 위해 채굴작업을 진행함.

상위에서 작업증명을 설명할 때 리더만이 블록체인이 본인의 블럭은 연결 할 수 있다고 했고

리더는 사막에서 바늘을 가장 먼저 찾은 사람이라고 했음.

즉 채굴작업은 사막에서 바늘 찾기에 해당함.

 

[ 그렇다면 비트코인에서 리더 선정 방법은? ]  : 비트코인 채굴작업이란?

사막에서 바늘 찾기를 비트코인에서는 Nonce(임시값) 찾기에 해당함.

비트코인은 네트워크 상에 있는 모든 채굴자들에게

"Nonce(임시값)에 들어갈 값은 뭘까요? 맞춘사람이 리더!" 라고 통보함.

그럼 모든 채굴자들은 거래내역으로 블록을 가득 채운뒤에

모든 채굴자들은 해당 Nonce값을 찾기위해 채굴작업을 시작함.

Nonce 값은 3개의 0으로 시작되는 해시를 만들려면 어떤 Nonce를 가져야 할지 알아내야함.

연속되는 0의 개수는 난이도에 따라 조정됨.

예를 들어 채굴자들이 Nonce값을 너무 빨리 찾았다하면

연속되는 0의 수가 증가하고 

너무 오래 걸렸다 하면

연속되는 0의 수가 감소함.

해쉬는 일방향성인 특성을 가지고 있어서 해쉬값으로 부터 원래값을 찾기는 굉장히 어려운데

Nonce값을 찾기 위해서는 0부터 ~ ??까지 모든 수를 해쉬에 넣어가면서

조건을 만족하는 Nonce값을 연산해야함.

즉 해쉬를 역으로 찾아가는게 비트코인에서의 작업증명에 사용되는

사막에서 바늘 찾기임.

Nonce값은 채굴자가 유일하게 변경할 수 있는 숫자임

Nonce빼고는 블럭에서 어떠한 data도 변경할 수 없음.

 

 

[ 만약 Nonce값을 여러명이 동시에 찾게 된다면? ]

네트워크상에서는 Delay가 존재함 길게는 2분 짧게는 1분 차이가 있음

2분 사이에 Nonce값을 찾은 채굴자가 다수 나올 수도 있음.

작업증명은 이러한 경우를 해결하기 위해

Nonce값을 찾은 모든 채굴자들의 블록을 일단 추가함.

그럼 일시적으로 다수의 체인이 생성됨.

여기서 계속해서 Nonce값을 추가해서 가장 먼저 6개의 블럭을 추가하는 사람의

Chain을 정격체인으로 선정함.

그럼 정격체인 이외에 다른 체인들은 모두 제거됨.

즉 비트코인을 벌었다고 생각한 몇몇 사람들은 기뻐하다가 몇분후에 다시보니

정격체인으로 선정되지 않아서 돈이 없어짐.

또 이러한 문제 때문에 거래내역이 확실하다! 라고 선정되는 시간이 30분 이후에 확정되기도함.

그래서 비트코인은 실시간 거래에 적합하지 않다고함.

주로 해외 거래에 사용된다고함.

해외거래는 길게는 2일정도 소요되니 이렇게 비트코인의 정격체인이 선정되는 시간에

타격이 있지 않기때문.

 

 

 

작업증명의 문제점.

 

1 . 환경 파괴

작업증명 방식이 도입된 블록체인 네트워크 환경에서 

사용자는 보상을 받기 위해 작업을 완료하기 위한 경쟁을 하게 되고

경쟁에서 승리하기 위해 남들보다 더 많은 컴퓨팅 에너지를 소모하게 됨.

여기서 컴퓨팅 에너지는 전기 사용량과 관련이 있음.

 

작은 블록체인 네트워크라면 경쟁을 하더라고 적은 전기를 사용하지만

블록체인 네트워크가 커질 수록 작업증명의 '작업'이 더 어려워지게 되고

그 만큼 컴퓨팅 에너지도 많이 소모하게 되어 전기를 많이 사용하게 됨.

 

이러한 전기를 생성하는 과정은 매우 다양하지만 

대부분의 방법이 환경에 좋지 않은 방법으로 생산됨.

즉 이러한 문제점이 바로 환경 파괴로 이어짐..

 

 

2 . 51% 공격

작업증명의 취약점.

상위의 [ 만약 Nonce값을 여러명이 동시에 찾게 된다면? ]에서 설명한 바와 같이 

작업증명 방식을 사용하는 암호화폐에서 '노드(Node)'는 

더 많은 블록을 가지고 있는 체인을 올바른 블록체인으로 인식함.

하지만 악의적인 사용자가 절반이 넘는 51% 네트워크의 해시파워를 보유하고 

악의적인 정보와 함께 블록들을 계속 생성해 낸다면, 

정해진 규칙에 따라 더 많은 블록을 가지고 있는 체인을 기존의 체인에 연결하게 됨.

그렇게 되면 블록체인의 보안이 깨지게 되고 정상적인 정보가 아닌

악의적인 정보가 삽입되어 문제가 발생함.

그렇게 때문에 51% 지분을 쉽게 가질 수 없어야하는데

비트코인과 같은 네트워크는 매우 커서 안전하지만

신생 코인이 작업증명 방식을 사용하게 된다면 51% 지분을 소유하기가 힘들지 않음으로

51%공격에 취약하게 됨.

 

 


 

 

참고

 

51% 공격

https://cryptochain.tistory.com/53

 

 

 

 

 

 

 

 

 

 

 

 

 

반응형

'블록체인' 카테고리의 다른 글

지분 증명(Proof of Stake)  (0) 2021.05.17
NFT란? (Non-Fungible Token)  (0) 2021.04.18
스마트 컨트랙트(Smart Contract)  (0) 2021.04.18
블록체인이란?  (0) 2021.03.15