본문 바로가기
Blockchain

[blockchain, Bitcoin] PoW(Proof-of-Work) 작업 증명 채굴 메커니즘(원제: 암호화 해시 함수를 기준으로 본 비트코인의 작업증명)

by 리나그(ReenAG) 2025. 12. 11.
728x90
반응형

 

 대학교 1학년에 들은 논리와 사회적 글쓰기 시간에 적었던 글의 원본과 지금의 내가 내용을 추가한 수정본을 올린다. 수정본은 이미 어느 정도 관련된 지식이 있는 사람들에게 배포를 하기 위해서 용어를 조금 더 추가하고 구체적인 내용이 늘어났다. 옛날부터 올리고 싶었던 건데, 이제야 올리게 된 것 같다.

(키워드) 암호화 해시함수(SHA 256), 비트코인, 작업증명(Proof-of-Work, PoW), nonce

  비트코인 이후로 새로운 암호화폐들이 우후죽순 생겨났지만, 여전히 비트코인이 제일 큰 규모를 자랑하고 있다. 투자하지 않더라도, 어째서 사람들에게 주목을 받고 있는지는 알아두면 좋을 것이다. 여기선 비트코인 보안의 핵심이자, 암호화폐를 만들어 내는 방식인 작업 증명(Proof-of-Work, 이하 PoW)과 그 구체적인 동작 방식을 이야기해보고자 한다.
  비트코인의 보안은 다름 아닌 “블록체인”으로 유지된다. 비트코인은 서로 거래한 내용을 모든 사용자가 가지고 있다. 이때 각 사용자가 가진 거래 내용의 목록을 블록체인이라고 한다. 비트코인은 모든 사람에게 “철수 -> 영희 50달러”와 같은 거래 정보를 방송한다. 이러한 거래(트랜잭션)을 모아놓은 것이 거래 장부, "블록"이라고 할 수 있다. 상당히 암호학적인 내용이라 생략하도록 하겠지만, 사람들이 가진 블록체인은 전부 같은 내용을 가지고 시작한다.
  PoW는 가장 많은 작업을 한 사람에게 다음 블록을 생성할 권리를 주는 일종의 합의이다. 우리는 반복 막노동밖에 풀 방법이 없지만, 어떤 사람이 정답을 외치면 그게 정답인지는 확인하기는 쉬운 문제를 만들 수 있다. 참가자들은 열심히 문제를 푼 사람의 블록이 추가될 수 있는 블록이라고 합의하고, 자신들의 블록체인에 추가한다. 이러한 작업, 합의를 통틀어 작업 증명이라고 부르는 것이다.
  구체적으로, “암호화 해시 함수”를 이용해서 문제를 낸다. 그것의 일종인 SHA256을 기준으로 설명하겠다. 이 함수의 특징은 언제나 정해진 인자에 대해서 정해진 256자리의 2진수(해시값)를 반환한다는 것이다. 조금만 인자가 바뀌어도 값이 크게 달라진다는 특징도 갖고 있다. 예를 들어, SHA256(“논사글 제”) = 111111...011이지만, SHA 256(“논사글 제”) = 110010...111인 식이다. 이 함수의 중요한 다른 특징은 역산할 수 없다는 것이다. 간단하게, 인자로 해시값을 알아내기는 쉽지만, 해시값으로 인자를 알아내기는 불가능하다는 것이다.
  우리는 블록에 어떤 임의의 Bit 필드, “nonce”을 설정할 수 있다. nonce를 무작위로 입력했는데, SHA 256에 넣었을 때 나오는 값이 30자리씩이나 0으로 시작한다고 해보자. (SHA 256(nonce가 입력된 블럭) = 0 X 30개 + 1001… 111) 함수의 특성상 조건에 맞는 nonce을 추정할 수도 없고, 역산도 불가능하다. 인자를 일일이 대입해보면서 조건에 맞는 nonce을 찾을 수 밖에 없다. 따라서, nonce을 구하는 문제는 위에서 이야기한 문제의 조건에 잘 들어맞는다.

  비트코인 네트워크는 이러한 nonce를 구해낸 블럭이어야지만 새로운 블럭으로 인정한다. 앞에서는 30자리 씩이나 0이다, 라고 임의로 이야기 했지만, "몇자리를 0으로 만들면 인정할 건가?"는 네트워크에서 자동적으로 조절한다. "10자리만 0이면 된다"면, nonce를 알아내는 과정이 수월해 질 것이고, "50자리나 0이어야 한다"면, nonce를 찾는 일은 아까 전의 10자리에 비해 2^40배는 어려질 것이다. 비크코인 네트워크는 10분 마다 1개의 블럭을 만드는 것을 목표로 하기 때문에, 사람들이 컴퓨터를 잔뜩 들고와서 nonce를 구하는 작업을 더 열심히 해버리면 이 문제의 난도를 올려버린다. 반대로 사람들이 비트코인이 더 이상 채굴될게 없다고 생각해서 네트워크를 떠나기 시작하면 nonce를 구하는 작업이 어려워지므로 이 문제의 난도를 내린다. 이를 PoW의 Difficulty(말 그대로 난도)라고 한다.
  2025년인 지금을 기준으로, 해시값을 봐보자. 앞의 0이 20개 있다. 다만 hex, 16진수로 표기된걸 감안한다면 2진수를 기준으로 약 80자리(!)나 0으로 맞춰야한다는 이야기가 될 것이다. 2^10 = 약 10^3 임을 감안하면, 약 10^24, 거의 1자번의 연산을 해야 한다. (억 -> 조 -> 경 -> 해 -> 자)

지금의 bitcoin 블럭

 

 위조 블록을 사람들에게 업데이트하고 싶다면 매번, nonce을 다른 사람보다 빠르게 알아내야 한다. 열심히 위조하기보다는 차라리 정상 블록을 만듦으로써 생기는 비트코인을 갖는 것이 낫다. 더욱이, 이런 사실이 알려진다면 비트코인의 신뢰가 급락해서 오히려 손해를 보게 된다. PoW는 위조하려는 소수보다 다수가 많은 연산력을 가지고 있다는 것을 이용하는 것이다. 이처럼 비트코인이 어떻게 위조를 막는지를 안다면, 암호화폐에 투자하는 것이 마냥 비합리적으로 느껴지지는 않을 것이다.

 


(수정사항) 

더보기

=> “장부”라는 예시를 들었지만 그 대신 “블록”이라는 직접적인 용어를 이용함.
=> 2~3번째 문단이 비트코인을 잘 모르는 사람에게는 어려울 수 있기 때문에 배경 설명을 추가하고 풀어쓴 말을 이용함.
=> 4~5번째 문단에 이용된 “민감”하다는 표현이 다소 모호할 수 있어 뒤 예시에서 이용한 쉬운 말을 대신 이용함.
=> 4번째 문단의 마지막 문장이 어색하다는 의견이 있어 문법을 고침.
=> 위조의 과정이 무엇인지 궁금하다는 의견이 있어 내용을 보강함.
=> 마무리 문장이 있으면 좋겠다는 의견이 있어 추가함.

(참고문헌)

더보기

1. 블록체인 혁명, 돈 댑스콧 저, 을유문화사, 2018
-> PoW의 정의를 풀어쓸 때 이용함.
2. 3Blue1Brown : https://www.youtube.com/watch?v=bBC-nXj3Ng4
-> 암호화폐의 동작원리를 아주 쉽고 자세히 풀어낸 동영상으로 여러 곳에 참고함.
3. https://www.synopsys.com/blogs/software-security/cryptographic-hash-functions/
-> 암호화폐에 쓰이는 암호화 해시 함수의 특성에 대해서 참고함.

** 전체 원문

더보기

(제목) 암호화 해시 함수를 기준으로 본 비트코인의 작업증명
(핵심어) 암호화 해시함수(SHA 256), 비트코인, 작업증명(Proof-of-Work, PoW)
(주제문) 비트코인이 합의를 할 때 쓰는 암호화 해시 함수는 작업증명에서 문제를 내는 역할을 맡는다.
(본문)
  비트코인 이후로 새로운 암호화폐들이 우후죽순 생겨났지만, 여전히 비트코인이 제일 큰 규모를 자랑하고 있다. 투자하지 않더라도, 어째서 사람들에게 주목을 받고 있는지는 알아두면 좋을 것이다. 여기선 비트코인 보안의 핵심이자, 암호화폐를 만들어 내는 방식인 작업 증명(Proof-of-Work, 이하 PoW)과 그 구체적인 동작 방식을 이야기해보고자 한다.
  비트코인의 보안은 다름 아닌 “블록체인”으로 유지된다. 비트코인은 서로 거래한 내용을 모든 사용자가 가지고 있다. 이때 각 사용자가 가진 거래 내용의 목록을 블록체인이라고 한다. 비트코인은 모든 사람에게 “철수 -> 영희 50달러”와 같은 정보를 방송함으로써 “블록”(=거래 내용)을 추가한다. 이 글에서는 사람들이 가진 블록체인이 전부 같은 내용을 갖고 있다고 가정한 뒤, 설명하도록 하겠다.
  PoW는 가장 많은 작업을 한 사람에게 다음 블록을 생성할 권리를 주는 일종의 합의이다. 우리는 반복 막노동밖에 풀 방법이 없지만, 어떤 사람이 정답을 외치면 그게 정답인지는 확인하기는 쉬운 문제를 만들 수 있다. 참가자들은 열심히 문제를 푼 사람의 블록이 추가될 수 있는 블록이라고 합의하고, 자신들의 블록체인에 추가한다. 이러한 작업, 합의를 통틀어 작업 증명이라고 부르는 것이다.
  구체적으로, “암호화 해시 함수”를 이용해서 문제를 낸다. 그것의 일종인 SHA 256을 기준으로 설명하겠다. 이 함수의 특징은 언제나 정해진 인자에 대해서 정해진 256자리의 2진수(해시값)를 반환한다는 것이다. 조금만 인자가 바뀌어도 값이 크게 달라진다는 특징도 갖고 있다. 예를 들어, SHA 256(“논사글 과제”) = 111111...011이지만, SHA 256(“논사글 꽈제”) = 110010...111인 식이다. 이 함수의 또 다른 특징은 역산할 수 없다는 것이다. 즉, 인자로 해시값을 알아내기는 쉽지만, 해시값으로 인자를 알아내기는 불가능하다는 것이다.
  블록에 어떤 “특별한 문자열”(이하 PoW 문)을 더하면, SHA 256에 넣었을 때 나오는 값이 30자리씩이나 0으로 시작한다고 해보자. (SHA 256(기존 블록 + PoW 문) = 0 X 30개 + 1001… 111) 함수의 특성상 조건에 맞는 PoW 문을 추정할 수도 없고, 역산도 불가능하다. 인자를 일일이 대입해보면서 조건에 맞는 PoW 문을 찾을 수밖에 없다. 따라서, PoW 문을 구하는 문제는 위에서 이야기한 문제의 조건에 잘 들어맞는다.
  PoW 문을 계산하려면 평균적으로 2^30 = 약 10억 번의 연산을 해야 한다. 위조 블록을 사람들에게 업데이트하고 싶다면 매번, PoW 문을 다른 사람보다 빠르게 알아내야 한다. 열심히 위조하기보다는 차라리 정상 블록을 만듦으로써 생기는 비트코인을 갖는 것이 낫다. PoW는 위조하려는 소수보다 다수가 많은 연산력을 가지고 있다는 것을 이용하는 것이다. 이처럼 비트코인이 어떻게 위조를 막는지를 안다면, 암호화폐에 투자하는 것이 마냥 비합리적으로 느껴지지는 않을 것이다.

 

728x90
반응형