비트코인을 '소유' 한다는 것
비트코인을 ‘소유’ 하고 있다는 건 어떤의미인가? 비트코인은 순전히 디지털로만 만들어진 화폐라는 이야기를 들어본 적이 있을 것이다. 비트코인은 발행하는 정부 주체도 없고, 계좌를 관리해주고 거래 내역을 확인해주는 은행조차도 필요 없다. 사토시 나카모토라는 사람이 만들었다고 되어 있지만, 그가 누구인지는 정확히 알려져 있지 않다. 비트코인을 ‘소유’하는 것이 어떤 의미인지, 일부라도 아는 사람들은 많지 않다. 그 의미를 이해하고, 그 안에 담긴 기술적인 세부 사항을 확인해보는 것은 쉽지 않은 일이지만, 차례차례 한 번 알아보자.
암호학에서 몇 가지 아이디어를 가져와서 특정한 기관이나 인물에 신뢰가 없어도 장부로 거래를 운영한다면, 그 거래에 사용된 화폐는 ‘암호화 화폐’라고 부른다. 비트코인은 수 많은 암호화 화폐들 중에서도 가장 먼저 만들어진 암호화 화폐이다.
공동 장부는 누구든지 볼 수 있고, 아무나 접속해서 글을 추가할 수 있는 웹사이트와 같다. 거래 내역을 모두 기록해두는 곳이다. 이런 공동 장부의 문제점은 아무나 기록할 수 있다는 점이다. 공동 장부에 기록된 내용들이 돈을 보내는 사람의 의도대로 진실되게 기록되어 있다는 것을 어떻게 믿을 수 있을까? 자기가 돈을 보낸다는 거래 기록에, 서명 같은 효과를 가지는 무언가를 추가할 수 있어야 한다. 그리고 그 증표는 위조가 불가능해야한다. 따라서 암호학을 이용한 디지털 서명(digital signature) 을 통해 위조를 막는다.
‘공개키(열쇠)-비밀키(열쇠)’를 만들면 위조를 막을 수 있다.
디지털 서명값은 문서의 내용 + 비밀키를 조합한 함수의 결과 값이다. 따라서 문서의 내용 중 단 한 글자만 바뀌어도 256개의 0과 1로 구성된 디지털 서명값은 완전히 달라지게 된다. 비밀키는 오직 본인만 알고 있으므로, 누군가가 본인의 디지털 서명값을 훔쳐도 그 훔친 디지털 서명값은 다른 문서에 대한 증표로는 사용할 수 없다.
디지털 서명과 관련된 두 번째 함수는 디지털 서명값이 유효한지 확인하는데 사용된다. 디지털 서명값의 유효성을 확인할 때 비밀키의 짝꿍인 공개키가 사용된다. 디지털 서명값이 공개키와 짝꿍인 비밀키를 이용해서 만들어져 있으면 참을, 그렇지 않으면 거짓을 반환하여 유효성을 판단한다.
하지만 여기에도 가벼운 허점은 있다. 특정 메세지에 대한 디지털 서명값을 위조할 수는 없지만, 동일한 내역 자체는 여러 번 복사할 수 있다는 것이다. 이런 문제가 발생하지 않게 하려면, 메세지에 거래별로 유일한 식별자인 ID값을 포함해야 된다. 그렇게 하면 메세지 내용이 서로 다르므로, 디지털 서명값도 모두 달라지게 되어, 메세지-서명 조합을 복사해도 다른 곳에 쓸 수 없게 된다.
하지만 여전히 거래 참여자에 대한 신뢰에 의지하지 않을 수는 없다. 왜냐하면 거래 참여자가 거래 기록을 장부에 남기고 실제로 정산할 때 나타나지 않고 도망갈 수 있기 때문이다. 따라서 장부기록-사후정산 방식 대신 그때그때 현금으로 주고 받는 방식을 채택해야한다.
도망가는 것을 막을 수 있는 좋은 방법은 바로 사람들이 자기들이 미리 적립해둔 금액 이상으로는 지출할 수 없게 하는 것이다. 이렇게 되면 이중지불 문제를 해결할 수 있다. 하지만 어떤 거래가 발생할 때마다 그 시점까지의 거래 내역 전부를 알아야만 한다는 제약 사항이 생긴다.
어떤 지불이 유효하다는 것을 어느 시점에 신뢰해도 되는 건지 이해하려면, 이 체계를 이용하는 누군가가 다른 누군가를 속이는 사례를 검토해보는 것이 효과적이다.
서로 충돌되는 이력을 가진 두개의 서로 다른 블록체인 정보가 들어왔다면, 둘 중에서 더 많은 계산 작업이 포함된 더 긴 블록체인 만을 유효한 블록체인으로 받아들여야 한다. 이렇게 되면 우리는 중앙의 통제 기관에 의지하지 않고도 분산된 합의에 도달할 수 있다.
중앙의 누군가에 의존하지 않으려면 모든 사람들이 장부의 복사본을 가지고 있어야 된다. 하지만 수 많은 장부 중에서 어떤 장부가 올바른 장부인지 어떻게 판단하는가?
비트코인이 제시한 해법은 가장 많은 계산 작업을 포함하고 있는 장부가 신뢰할 만한 올바른 장부라는 것이다. 그건 '암호화 해쉬 함수' 라는 것과 관련이 있다.
무엇을 신뢰할 것인가를 판단하는 기준을 계산 작업에 둔다면, 거래 내역을 속이거나 장부의 충돌을 유발하기 위해서는 정해진 시간 내에 처리가 불가능할만큼 엄청난 양의 계산이 필요하게 만들수 있다. 예를 들어 'SHA256'이라는 암호화 해쉬 함수는 입력값에 따라 결과 해쉬값이 어떻게 달라지는지 예측하는 것이 불가능하다. 입력값 중에서 단 한 글자만 바꾸더라도 결과 해쉬값은 약간만 달라지는게 아니라 전체적으로 완전히 다른 값이 나온다. 암호화 해쉬 함수는 결과값에서 역산을 통해 입력값을 알아내는 것이 현실적으로 불가능하기 때문에 입력값을 찍어서 맞춘다는 것은 확률상 거의 불가능하다.
정리하면, 매직 넘버를 찾아내는 데는 엄청난 양의 계산이 필요하지만 그 매직 넘버가 맞는 값인지 확인해 보는 일에는 별로 많은 양의 계산이 필요하지 않다. 이를 “작업증명”(=PoW)이라고 한다.
거래는 지불하는 송금자의 디지털 서명이 있어야만 유효한 거래로 인식되는 것처럼 블록도 마찬가지로 작업 증명이 있어야만 유효한 블록으로 인식될 수 있다.
더 나아가서 블록들의 순서까지 보장하려면 각 블록이 자기보다 앞에있는 이전 블록의 해쉬값을 포함하게 하면 된다. 이렇게 하면 변경한 블록에 대한 해쉬값이 바뀌므로, 그 다음에 이어져있는 블록들의 내용도 바뀌고 결과적으로 다음에 이어지는 블록들의 해쉬값도 바뀌게 된다.
블록은 이렇게 앞의 블록의 해쉬값을 통해 앞뒤가 연쇄적으로 연결되어 있기 때문에 그냥 장부라고 부르지 않고 “블록체인” 이라고 부른다.
결국 누구든지 브로드캐스팅 되는 거래 정보를 접수하고 접수한 거래 정보를 모아서 블록을 만들고 그 블록의 해쉬값이 60개의 0으로 시작하게 하는 매직 넘버를 찾기 위해 엄청난 양의 계산 작업을 수행하고 마침내 그 매직 넘버를 찾아내서 그 블록을 브로드캐스팅하면 블록의 생성자가 될 수 있다.
이 모든 작업을 수행(='채굴', '마이닝')한 블록 생성자에게 보상을 주기 위해서는 블록을 구성할 때 블록 생성자에게 예를 들어 10 장부달러를 지급한다는 아주 특별한 거래를 블록의 맨 처음 거래로 포함하게 하면 된다. 이 특별한 거래를 '블록 보상'이라고 부른다. 채굴자가 아닌, 비트코인을 결제 수단으로만 사용하는 사람들은 채굴자가 브로드캐스팅하는 블록 정보만 수집해서 각자의 블록체인 복사본을 업데이트 하면 된다.
비트코인은 새 블록을 생성하는데 드는 시간이 평균적으로 10분이 되도록 주기적으로 작업 증명에서의 0의 갯수를 조절한다. 21만 블록마다, 시간적으로는 약 4년마다 보상액은 절반으로 줄어든다.
2020년 기준, 블록 당 6.25 비트코인이 보상으로 지급되고있다. 보상액이 시간이 지남에 따라 기하급수적으로 줄어들게 되므로 비트코인의 총 개수가 2,100만 개가 되면 보상액은 0이 되고 코인 수는 더 이상 늘어나지 않는다. 하지만 보상액이 0이 된다고 해서 채굴자들이 채굴을 멈추지는 않는다.
왜냐하면 채굴자들은 블록 보상 외에도 일정량의 거래 수수료를 챙길 수 있기 때문이다.
Lectured by '3Blue1Brown'
video from https://www.youtube.com/watch?v=bBC-nXj3Ng4&t=323s