- Today
- Total
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- security
- DreamHack
- hacking
- bitcoin
- 이더리움
- PWN
- 반딧
- pow
- 블록체인
- blockchain
- wargame
- web3
- Linux
- defi
- pwnable
- Leak
- 해시
- 코인
- compound
- Ethereum
- lending
- overthewire
- BANDiT
- 해킹
- solidity
- 리눅스
- V2
- Crypto
- shellcode
- 비트코인
Nullorm
[Bitcoin] 블록체인 기술공부 / 비트코인 백서 공부 (4. 작업증명(PoW)) 본문
지난번 포스팅에서 다뤘었다.
대체 PoW가 무엇인가!!! 작업증명이 그래서 뭔데!!!
자. 지금부터 한번 시작해보도록 하자. 라는 말을 쓰는 지금 시점에서, 나는 작업증명이 뭔지 모른다.
따라서, 이 글을 읽는 사람들에게 누구보다 모르는 사람의 관점에서 잘 설명할 수 있지 않을까? (라는 희망.)
1. 서론
블록체인 네트워크에서 비트코인은 블록체인에 새로운 블록을 추가하는 방식으로 조폐(화폐를 제조) 및 송금을 한다.
작업증명은 이 조폐 및 송금에서 사용되는 트랜잭션(Transaction: 거래)시에 이를 거래하는 방법이다.
나카모토 사토시의 비트코인 백서에는 이런 말이 있었다(비트코인 백서 서론)
필요한 것은 신뢰 대신 암호학적 증명(cryptographic proof)에 기반해, 거래 의사가 있는 두 당사자가 신뢰받는 제삼 자를 찾지 않고 서로 직접 거래하게 하는 전자 결제 시스템이다.
즉, 거래를 중개하는 중개 플랫폼(은행 등)을 신뢰해야만 개인 간의 거래가 가능했던 이전의 방식이 아닌, 암호학적 증명에 기반하겠다는 말이다. 이는 곧, 사람, 시스템을 신뢰하는 데에는 어떻게든 오류가 생길 수 있으니, 절대적인 수학을 믿겠다는 말로 들린다.
2008년 글로벌 금융위기 사태 직후, 금융위기 조사위원회(FCIC)는 525페이지 분량의 보고서에 이런 말이 있다.
"당시의 위기는 인간의 행동과 무대책의 결광지, 천재지변이나 컴퓨터 모델 문제가 아니다. 셰익스피어를 인용하자면 잘못은 저 별들이 아니라 우리에게 있다." 즉, 2009년의 나카모토 사토시는 인간에 의해 만들어진 금융시스템을 신뢰하기보다는, 보다 믿을 수 있는 수학적(암호학적 증명) 방법에 기댔다고 볼 수 있겠다.
그렇다면, PoW는 대체 뭘까?
1. PoW(Proof of Work: 작업증명)
비트코인의 전체적인 구조를 살펴보자.
자, 시장이 처음 생기면 일단 어떻게 해야하는가?
1. 화폐를 만든다(찍는다)
2. 화폐를 시장에 공급한다.
3. 시장 구성원들이 화폐와 재화를 거래하며 화폐를 거래한다.
전체적으로 보면 이러한 구조가 될 것이다. 그런데, 각각의 단계를 어떠한 주체가 담당하는지 살펴보자.
1. 중앙은행에서 화폐를 발행한다.
2. 은행이 시장에 화폐를 공급한다.
3. 구성원들이 화폐를 거래한다(전자화폐의 경우, 이중지불문제와 보안을 위해 은행의 중개가 필요)
결국, 모든 과정에서 은행은 필수불가결의 요소이다.
하지만, 비트코인은 무엇인가?
바로 은행이 존재하지 않는, 은행을 신뢰하지 않는, 수학을 믿는 전자화폐이다. 이러한 과정들에서, 은행을 대신할 수 있는 요소로 등장하는 것이 바로 PoW, 작업증명이다.
작업증명이 비트코인에서 어떠한 기능을 하는지 가볍게 일단 한번 보자.
1. 채굴자는 화폐를 발행하고 이를 시장에 공급한다.(물론 바로 공급을 하지 않을 수 있겠지만.. 이들도 돈을 벌어야지)
2. 구성원들이 화폐를 거래한다.
해당 두 과정이 위의 세 과정을 압축했다고 볼 수 있다. 작업증명(PoW)는 이 두 과정 모두에서 작동한다.
우선, 조폐(1번)의 과정에서는, 화폐 발행인(채굴자)에게 일(채굴)을 했다는 것을 증명하도록 하여 화폐를 발행한다.
중앙집권화되지 않은 탈중앙화된 블록체인의 조폐 과정에서는 처음 만들어진 알고리즘 이외에는 누가 얼마의 화폐를 받을 지 결정할 수 있는 중앙 권력이 없기 때문에 모든 참여자들이 자동으로 동의할 수 있는 방법이 필요하다.
그렇다면, 채굴자는 어떤 문제를, 어떤 해시함수를 계산한다는 것일까? 간단하게 그림으로 한 번 알아보자.
비트코인의 작업증명 방식을 간단하게 그림으로 나타내보았다.
우선, 작업증명은 SHA-256과 같은 해시연산을 거쳐 이루어지는데,
과정은 이러하다.
Hash(이전 블록의 해시값 || 생성할 블록의 트랜잭션 data || 임의의 Random한 Nonce) < 목표값
을 달성할 경우, 작업증명에 성공했다고 보는 것이다.
이와 관련하여 백서에서는 어떻게 이야기하는지 살펴보자.
우리는 타임스탬프 네트워크용으로 블록의 해시에 주어진 0 비트들을 모두 발견할 때까지 블록 안에 임시값을 증가시키는(incrementing a nonce) 것으로 작업증명을 구현했다.
이 말이 위에서 한 말과 같은 말로 받아들이면 될 것이다.
이게 대체 뭔 과정이길래 이정도만으로도 작업증명이 된다는 것일까?
답은 바로 Hash함수의 일방향적 특성에 있다.
수학적(암호학적)으로, 해시(Hash)함수는 일방향함수이기 때문에, 이를 역산하는 것이 무차별 대입(Brute Force)이외에는 방법이 없다는 점에 착안하여, 모든 채굴자가 해시함수를 계산해 가장 먼저 계산한 사람이 새로 발행되는 비트코인을 받아가는 구조이다.
또한 작업증명(PoW)는, 다수결의 체인의 대표성을 결정하는 문제도 해결한다. 만약, 1 IP당, 1표에 기반한 다수결로 검증을 진행하게 된다면, 한번에 수많은 IP를 할당할 수 있는 누군가(악의적인 공격자)에 의해 해당 네트워크 전체가 장악될 수 있다. 위에서 소개한 다수결은 기본적으로 CPU당 1표이다. 다수결의 결과는 가장 많은 자원이 사용된 작업증명들의 가장 긴 체인이 된다(즉, Hash Rate가 가장 높은 체인이 가장 긴 체인이 된다.) 정직한 노드들에 의해 다수의 CPU파워가 통제된다면, 가장 정직한 체인이 가장 빠르게 늘어나 다른 경쟁 체인들을 압도할 것이다.
또한, 과거 블록을 수정하려면 공격자는 해당 과거 블록의 값에 대한 작업증명을 재수행해야하고, ( Hash(해당 블록의 이전 블록 해시 값 + 변경하고자 하는 데이터 + Nonce) 를 다시 해야함.) 또한, 해당 블록 이후의 모든 타임스탬프의 블록에 대하여 모든 연산을 재수행해야 하는 문제가 생긴다. 또한, 이러한 작업을 가장 정직한 노드들의 작업 속도를 따라잡아야 그것이 가장 무결한 노드라는 것을 인정받을 수 있다.
따라서, 비트코인은 그 구조상 블록의 수가 늘어날수록 블록의 위/변조가능성은 거의 0에 수렴하게 된다는 것을 알 수 있다.
또한, 실제로 발생한 문제이기도 하지만, 채굴자들은 자원을 아끼기 위해 기존 CPU의 수만배 파워를 내는 채굴기를 개발해내었다. 이러한 상황에서 채굴의 난이도는 상대적으로 쉬워질 수 밖에 없기 떄문에, 초기 알고리즘은 채굴의 난이도 (위 그림에서는 목표 값)를 시간당 평균 블록 수에 따른 평균 목표값을 조정하여 결정하도록 하였다.
즉, 블록들이 너무 빠르게 생성된다면 채굴 난이도는 높아진다는 것이다(목표값이 낮아진다는 것이다.)
3. 마치며...
이렇게 작업증명에 대한 기본적인 개념들을 다루어보았다.
다소 수학적인 내용이 등장할 것이라고 예상했었지만, 해시함수 이외에는(이것도 별 수학적으로 접근하지는 않았지만...) 그런 내용은 없었던 것 같다.
작업증명(Proof of Work) 이외에도 지분증명(Proof of Stake)라는 개념이 존재하는데, 이는 나아아중에 다뤄보도록 하겠다.
글 읽어주셔서 감사하옵니다^^
'Web3 > Web3 리서치' 카테고리의 다른 글
[Bitcoin] 블록체인 기술공부 / 비트코인 백서 공부 (3. 타임스탬프) / 이중지불 문제 (0) | 2024.04.07 |
---|---|
[Bitcoin] 블록체인 기술공부 / 비트코인 백서 공부 (2. 거래) / 트랜잭션(Transaction) (1) | 2024.04.07 |
[용어] 빗썸, 업비트에 등장하는 '에어드랍' 대체 뭘까? (1) | 2024.04.06 |
[Bitcoin] 블록체인 기술공부 / 비트코인 백서 공부 (1. 초록) / 이중지불 문제 (1) | 2024.04.06 |
[GRASS코인] 이게 대체 뭔데? 어떻게 하는건데? 가만히 있는데 코인을 준다고? / 비상장코인 (0) | 2024.04.04 |