작업 증명(PoW)이란 무엇인가요?
목차
들어가며
이중 지불이란 무엇인가요?
작업 증명이 필요한 이유는 무엇인가요?
작업 증명은 어떻게 작동하나요?
작업 증명 vs. 지분 증명
마치며
작업 증명(PoW)이란 무엇인가요?
아티클
작업 증명(PoW)이란 무엇인가요?

작업 증명(PoW)이란 무엇인가요?

중급
Published Dec 6, 2018Updated Aug 24, 2021
8m


목차


들어가며

작업 증명(PoW, Proof of Work)은 이중 지불을 방지하는 메커니즘입니다. 대부분의 주요 암호화폐는 작업 증명을 합의 알고리즘으로 사용합니다. 작업 증명은 암호화폐 원장을 보호하는 방법 중 하나입니다.
작업 증명은 최초의 합의 알고리즘이었으며, 오늘날까지 우위를 점하고 있습니다. 이는 2008년 사토시 나카모토에 의해 비트코인 백서에서 소개되었지만, 기술 자체는 오래전에 구상되었습니다. 

아담 백의 해시캐시(HashCash)는 암호화폐 이전 시대 작업 증명 알고리즘의 초기 예시 중 하나입니다. 전송자가 이메일을 보내기 전에 약간의 연산 작업을 수행하게 함으로써, 수신자는 스팸을 줄일 수 있었습니다. 적당한 수준의 이메일을 전송하는 이에게는 연산 비용이 거의 들지 않지만, 많은 이메일을 보내는 이들에게는 비용이 급격히 증가하게 됩니다.


이중 지불이란 무엇인가요?

이중 지불은 동일한 자금이 한 번 이상 사용되는 것입니다. 해당 용어는 대부분 디지털 화폐의 맥락에서 배타적으로 사용되는데, 실제 현금을 두 번 사용하는 것은 어렵기 때문입니다. 여러분은 오늘의 커피 값을 지불할 때, 아마도 점원에게 현금을 건넸을 것이고, 점원은 이를 금전 등록기에 넣어두었을 것입니다. 여러분은 동일한 지폐를 갖고 커피 가게 건너편으로 건너가거나, 다른 커피를 구매하는 데 이를 사용할 수 없습니다.

디지털 화폐 체계에서는 이것이 가능할 수도 있습니다. 여러분은 복사하고 붙여넣기를 통해 컴퓨터 파일을 이전에 복제해 본 적이 있을 것입니다. 여러분은 이메일을 통해 동일한 파일을 열 명, 스무 명, 오십 명에게 전송할 수 있습니다.

디지털 화폐는 단순한 데이터이기 때문에 사람들이 이를 복제하고 동일한 단위를 다른 곳에 사용하지 못하게 해야 합니다. 그렇지 않으면 해당 통화가 즉시 붕괴될 것입니다.

이중 지불에 대해 더 자세히 알아보고 싶으시다면, 이중 지불 설명을 확인해 보시기 바랍니다.


작업 증명이 필요한 이유는 무엇인가요?

여러분이 블록체인 기술 설명을 읽어보셨다면, 사용자가 네트워크에 트랜잭션을 전송한다는 것을 아실 것입니다. 그러나 이러한 트랜잭션이 즉시 유효한 것으로 간주되지는 않습니다. 트랜잭션들이 블록체인에 추가될 때만 이는 유효한 것으로 간주됩니다. 
블록체인은 누구나 볼 수 있는 하나의 커다란 데이터베이스이며, 따라서 누구나 자금이 이전에 사용된 적이 있는지 확인할 수 있습니다. 여러분과 세 명의 친구가 하나의 메모지를 갖고 있다고 상상해 보시기 바랍니다. 여러분 중 한 명이 여러분이 사용하는 단위가 무엇이든 이를 전송하고자 한다면, 앨리스가 밥에게 다섯 개, 밥이 캐롤에게 두 개를 지불과 같이 적을 수 있습니다.
여기에는 또 다른 복잡한 사항이 존재하는데, 트랜잭션을 생성할 때마다 자금이 어디에서 비롯된 것인지 하는 트랜잭을 회부해야 한다는 것입니다. 따라서 밥이 캐롤에게 두 개를 지불한다면, 실제로 항목은 다음과 같을 것입니다. 이전 앨리스의 트랜잭션에서 비롯된 두 개를 밥이 캐롤에게 지불.

이제 우리는 해당 단위를 추적할 수 있습니다. 밥이 캐롤에게 막 전송한 동일한 단위를 다른 트랜잭션에 사용하려 한다면, 모두가 이를 즉시 알게 될 것입니다. 구성원은 해당 트랜잭션이 메모지에 기록되는 것을 허락하지 않을 것입니다.

이러한 작업은 작은 규모의 그룹에서는 잘 이뤄질 수 있습니다. 모두가 서로를 알기 때문에, 친구 중 누구가 메모지에 트랜잭션을 추가할지에 동의할 수 있을 것입니다. 우리가 참가자가 10,000명인 하나의 그룹을 원할 경우에는 어떨까요? 메모지 아이디어는 확장하기가 좀처럼 어려운데, 누구도 이를 관리하기 위해 낯선 이를 믿고 싶어 하지 않기 때문입니다.

이곳이 작업 증명이 등장하는 시점입니다. 작업 증명은 사용자가 사용할 권한이 없는 자금을 사용하지 못하도록 합니다. 게임 이론과 암호 방식을 결합하여 작업 증명 알고리즘은 시스템 규칙을 따라 누구나 블록체인을 업데이트할 수 있게 합니다.


작업 증명은 어떻게 작동하나요?

위의 메모장이 블록체인입니다. 그러나 우리는 트랜잭션을 하나씩 추가하지 않으며, 블록으로 묶어서 처리합니다. 우리는 네트워크에 트랜잭션을 알리고, 이후 사용자가 후보 블록에 포함될 블록을 생성합니다. 트랜잭션은 후보 블록이 승인된 블록이 되어야만 유효한 것으로 간주될 것이며, 이는 해당 블록이 블록체인에 추가되었음을 의미합니다.
그러나 블록을 추가하는 비용은 저렴하지 않습니다. 작업 증명에는 특혜를 받기 위해 자신의 자원을 사용하는 마이너(블록을 생성하는 사람)가 필요합니다. 해당 자원은 연산 능력이며, 퍼즐의 정답을 찾게 될 때까지 블록 데이터를 해시하는 데 사용됩니다.
블록 데이터를 해싱한다는 것은 이를 해싱 함수에 통과시켜 블록 해시를 생성한다는 것을 의미합니다. 블록 해시는 하나의 “지문” 기능을 하는데, 이는 각 블록마다 고유하며 여러분의 입력 데이터에 대한 하나의 신원입니다.

블록 해시를 되돌려 입력 데이터를 알아내는 것은 사실상 불가능합니다. 그러나 입력값을 안다면 해당 해시가 정확한지 확인하는 것은 간단합니다. 여러분은 해당 함수에 입력값을 제출하고, 결괏값이 동일한지 확인하면 됩니다.

작업 증명에서는 해시가 특정 조건에 부합하는 데이터를 제공해야 합니다. 그러나 여러분은 해당 데이터를 얻는 방법을 알지 못합니다. 유일한 방법은 해시 함수를 통해 데이터를 전달하고, 그것이 조건과 일치하는지를 확인하는 것입니다. 만약 일치하지 않는다면 데이터를 조금 변경하여 다른 해시를 얻어야 할 것입니다. 여러분의 데이터 문자를 하나만 변경해도, 결과를 완전히 달라질 것입니다. 따라서 결괏값이 무엇인지 예측할 수 있는 방법은 없습니다.

따라서 여러분이 하나의 블록을 생성하고자 한다면, 여러분은 하나의 추측 게임을 하고 있는 것입니다. 여러분은 일반적으로 추가하고자 하는 모든 트랜잭션의 정보와 다른 중요한 데이터를 수집하고 이를 모두 해시화합니다. 그러나 여러분의 데이터 세트는 변하지 않으므로, 변화를 줄 수 있는 정보 조각을 추가해야 합니다. 그렇지 않다면, 결괏값으로 매번 동일한 해시를 얻게 될 것입니다. 우리는 변수 데이터를 논스(nonce)라고 부릅니다. 이는 해싱을 시도할 때마다 변화하는 숫자이므로, 매번 다른 해시를 얻게 됩니다. 우리는 이를 마이닝이라 일컫습니다.

요약하자면, 마이닝은 블록체인 데이터를 수집하고 특정한 해시를 찾게 될 때까지 이를 논스와 함께 해시화하는 과정입니다. 여러분이 프로토콜에서 규정한 조건을 만족하는 해시를 찾게 될 경우, 새로운 블록을 네트워크에 전송할 수 있는 권한을 갖게 됩니다. 해당 시점에서 네트워크의 다른 참가자는 새로운 블록을 포함시키기 위해 자신의 블록체인을 업데이트합니다.

오늘날의 주요 암호화폐에서는 이러한 조건을 만족시키기가 무척 어렵습니다. 네트워크상의 해시 레이트가 높을수록, 유효한 해시를 찾기가 더욱 어려워집니다. 이는 블록이 너무 빨리 발견되지 않게 하기 위함입니다.
여러분이 상상할 수 있는 것처럼, 상당한 양의 해시를 추측하려 한다면 여러분의 컴퓨터는 상당한 대가를 치러야 할 것입니다. 여러분은 연산 회로와 전기를 낭비하게 됩니다. 그러나 여러분이 유효한 해시를 찾게 된다면, 프로토콜이 암호화폐를 보상해 줄 것입니다.

이제까지 우리가 알아본 것들을 정리해보겠습니다.

  • 마이닝에는 비용이 많이 든다.
  • 유효한 블록을 생성하면 보상을 받게 된다.
  • 입력값을 알고 있을 경우, 사용자는 쉽게 해시를 확인할 수 있다. 즉, 마이닝을 하지 않는 사용자도 지나치게 많은 연산 능력을 사용하지 않고 블록이 유효한지 검증할 수 있다.

여기까지는 아무런 문제가 없어 보입니다. 하지만 여러분이 부정행위를 시도한다면 어떨까요? 사용자가 수 많은 가짜 트랜잭션을 블록에 추가하고 유효한 해시를 생성하지 못하게 하려면 어떻게 해야 할까요?

이때 필요한 것이 공개 키 암호방식입니다. 이번 아티클에서는 자세히 살펴보지는 않을 것이지만, 공개 키 암호방식이란 무엇인가요?를 통해 이를 전반적으로 살펴보실 수 있습니다. 간단히 말해, 우리는 누군가 사용하고자 하는 자금을 이동시킬 권리가 있는지를 모든 사용자들이 확인할 수 있도록 하기 위해 간단하지만 훌륭한 몇 가지 암호 방식을 사용합니다.
여러분이 트랜잭션을 생성할 때, 여러분은 이에 서명하게 됩니다. 네트워크상의 누구나 여러분의 서명과 여러분의 공개 키를 비교하고 일치 여부를 확인할 수 있습니다. 또한 누구나 여러분이 실제로 자금을 사용할 수 있으며, 여러분의 입력값의 총합이 결괏값의 총합보다 큰지(여러분이 보유하고 있는 것보다 더 많이 사용하려고 하지 않는지) 확인할 수 있습니다.

유효하지 않은 트랜잭션을 포함하고 있는 블록은 모두 네트워크에서 자동으로 거부될 것입니다. 부정 행위를 시도하는 것만으로도 많은 비용이 듭니다. 여러분은 아무런 보상 없이 여러분의 자원을 낭비하게 될 것입니다.

여기에 작업 증명의 아름다움이 존재합니다. 부정 행위를 저지르는 데는 비용이 많이 들지만, 정직하게 행동하면 이익이 됩니다. 합리적인 모든 마이너는 투자 수익률(ROI)을 추구할 것이며, 이익을 얻도록 보장된 방법을 따라 행동할 것으라 기대할 수 있습니다.



암호화폐 거래를 생각 중이신가요? 바이낸스에서 비트코인을 구매하세요!



작업 증명 vs. 지분 증명

많은 합의 알고리즘이 존재하지만 가장 많은 기대를 받고 있는 합의 알고리즘 중 하나는 지분 증명(PoS)입니다. 지분 증명 개념의 시작은 2011년으로 거슬러 올라가며, 이는 보다 작은 규모의 일부 프로토콜에서 구현되어 왔습니다. 아직까지는 큰 규모의 어떤 블록체인에서도 채택되지 않았습니다.
지분 증명 시스템에는 마이너가 검증자로 대체됩니다. 지분 증명에는 마이닝이 필요하지 않으며, 해시를 측정하기 위한 경쟁도 없습니다. 그 대신 사용자들이 무작위로 선택되며, 만약 선택받게 될 경우 반드시 하나의 블록을 제시(또는 “형성”)해야 합니다. 블록이 유효할 경우 블록체인 트랜잭션 수수료로 구성된 보상을 받게 됩니다.
모든 사용자들이 선택될 수 있는 것은 아니며, 프로토콜은 여러 가지 요소에 기초하여 검증자를 선택합니다. 검증자 가격을 얻기 위해서 참가자는 반드시 지분을 동결해야 하며, 이는 사전에 정의된 블록체인 자체 통화 금액입니다. 지분은 일종의 보석금 기능을 합니다. 피고가 재판을 건너뛰지 못하게 하기 위해 많은 비용이 요구되는 것처럼, 검증자도 부정행위를 막기 위해 지분을 동결합니다.
지분 증명은 작업 증명에 비해 몇 가지 장점을 갖고 있습니다. 가장 주목할 만한 것은 탄소 발자국이 작다는 것인데, 고출력 마이닝 팜(mining farms)이 필요하지 않기 때문입니다. 지분 증명에서 소비되는 전력은 작업 증명의 극히 일부에 불과합니다. 

그렇긴 하지만, 작업 증명과 같은 실적을 내는 것도 없습니다. 마이닝은 낭비적인 것으로 간주될 수도 있지만, 어떤 규모에서도 입증된 합의 알고리즘입니다. 지난 10년 동안 작업 증명은 수조 달러에 해당하는 트랜잭션을 보호해왔습니다. 지분 증명이 작업 증명 보안에 필적할 수 있다고 확실히 말하기 위해서는 보다 다양한 환경에서 스테이킹이 적절하게 테스트 되어야 합니다.


마치며

작업 증명은 본래 이중 지불 문제의 해결책이었으며, 믿을 수 있고 안전한 것으로 증명되었습니다. 비트코인은 동일한 자금이 두 번 사용되는 것을 방지하기 위해 중앙화된 주체가 필요하지 않다는 것을 보여줬습니다. 뛰어난 암호 방식, 해시 함수, 게임 이론을 사용하여 탈중앙화 환경에 참여하는 이들은 금융 데이터베이스의 상태에 동의할 수 있습니다.