Skip to Content

사토시 나카모토의 비트코인 백서 요약

Table of Contents

Bitcoin: A Peer-to-Peer Electronic Cash System

Introduction

신뢰 기관에 의존한 기존 금융 시스템의 한계점

  • 기존의 금융 기관을 신뢰 기관으로 의존하는 지불 시스템은 대부분의 전자 지불을 처리하고 있지만, 제 3자 (금융기관)을 신뢰 제공자로 일임하는 시스템 자체의 한계를 가지고 있다.
    • 지불 과정에 금융 기관이 중간 매개자 역할을 하기 때문에, 중개 수수료로 높은 전송 수수료가 요구되어, 작은 금액의 일상적인 지불 가능성을 막는다.
    • 지불이 거절 또는 반환 될 가능성이 있기 때문에 (Possibility of reversal), 금융기관은 고객들이 개인 정보를 제공하도록 요구한다.
  • 현금을 사용하는 것을 제외하고는 제 3자의 중개가 없는 개인 대 개인 전자 지불 시스템은 아직 없다.

암호학적 증명에 기반한 개인 대 개인 지불 시스템의 가능성

  • 이 논문에서는 암호학적 증명에 기반한 지불 시스템이 제 3자의 신뢰 중개 기관이 없이도 가치 지불 시스템을 만들 수 있다는 것을 보이고자 한다.
  • 암호학적 증명에 기반한 시스템은,
    • 지불의 반전 가능성을 없애 판매자들이 사기를 당할 가능성을 제거한다.
    • 에스크로 매커니즘을 통해 구매자를 보호할 수 있다.
  • 제안하는 시스템은 개인 대 개인의 분산된 타임 스탬프 (Time-stamp) 서버를 사용해 이중 지불 (Double-spending) 문제를 해결하고, 거래의 시간적 순서에 대한 계산적 증명을 제공할 수 있다.
  • 또한, 이 시스템의 선의를 가진 노드들이 악의적 노드들 보다 더 많은 CPU 파워를 가지면 시스템이 악의적 노드들의 공격에 대해 안전할 수 있다.

거래 (Transactions)

정의

전자 코인은 디지털 서명의 체인으로 정의된다.

코인의 전송

  • 코인의 소유자가 자신의 코인을 다른 사람에게 전송할 때, 이전 거래와 코인의 수취인의 퍼블릭 키에 대한 해시 값에 디지털 서명을 하여 코인 거래의 끝에 첨부한다.

  • 코인의 수취인은 소유권의 체인에 첨부된 서명을 검증함으로 해당 전송을 검증 할 수 있다.

이중 지불 문제

  • 위의 방법 만으로는 수취인이 해당 코인이 이중 지불 되었는지의 여부를 확인 할 수 없다.
  • 이중 지불 문제를 해결하는 기존의 방법은,
    • 제 3자의 신뢰 기관이 모든 거래 내역을 확인하여 해당 코인이 이중 지불 되었는가를 검증하는 것이다.
    • 각 거래 후 코인은 조폐국으로 돌아가 새로운 코인으로 발행되고, 이 조폐국으로부터 발행 된 코인 만이 이중 지불 되지 않은 코인으로 인정받을 수 있다.
    • 이 방식의 문제는 전체 화폐 시스템이 조폐국을 관리하는 회사의 존폐, 신뢰성에 달려있다는 것이다.
  • 이중 지불 문제를 신뢰기관 없이 해결 하는 방법
    • 수취인이 어떤 코인이 이중 지불 되지 않았다는 것을 알기 위해서는, 해당 코인의 전 보유자가 다른 이전의 거래에 서명하지 않았다는 것에 대한 보증이 필요하다.
    • 어떤 거래가 없었다는 것을 증명하기 위해서는 발생한 모든 거래 내역을 살펴보는 수 밖에 없다.
    • 위의 조폐국 모델에서는 조폐국이 모든 거래를 살펴보고 어떤 거래가 먼저 도착했는가를 따진다.
    • 신뢰 기관 없이 이 것을 해결하기 위해서는 모든 거래 내역이 공개되고, 시스템의 참가자들이 인정하는 단 하나의 거래의 순서 (거래내역)만이 존재해야한다.
    • 이를 위해서는 각 거래에 대해서 과반수의 노드의 동의가 있어야 한다.

타임스탬프 서버

  • 타임스탬프 서버란, 거래 내역을 가지고 있는 블록에 대한 해시에 타임 스탬프를 찍어서 그 해시를 발행하는 역할을 하는 서버를 의미한다.
  • 타임스탬프는 해당 데이터가 해당 시간에 해쉬로 변환되기 위해 존재했다는 것을 의미한다.
  • 각 타임스탬프는 이전 타임스탬프를 해쉬의 형태로 가져서 체인의 형태를 가진다. 즉, 어떤 추가된 타임스탬프는 이전의 타임스탬프의 존재를 강제한다.

작업 증명 (Proof-of-Work)

작업증명 과정

  • 분산된 타임스탬프 서버를 개인-대-개인의 형태로 구현하기 위해서는 Adam Back의 해시캐쉬와 비슷한 작업 증명 시스템이 필요하다.
  • 작업 증명은 앞에 몇 개의 0을 포함하는 SHA-256으로 해시된 값에 대한 스캐닝 작업을 동반한다.
  • 이 작업은 평균적으로 해쉬된 값의 0의 숫자와 지수함수적 관계를 갖는 스캔을 필요로 한다.
  • 타임스탬프 서버는 nonce 값을 증가시켜가며 블록의 해쉬의 앞 0의 개수가 맞을 때까지 계산을 진행한다.
  • 만족하는 nonce 값을 찾고 난 후에는 해당 작업 (Nonce값 찾기)를 다시 하지 않는 이상 블록을 바꿀 수 없다.
  • 다른 블록들이 이후에 체인에 연결된 후에는 해당 지점의 블록을 바꾸기 위해서는 이후에 일어난 모든 연산을 다시 해야 한다.

작업 증명과 과반수 의사 결정

작업 증명은 과반후 의사 결정 (다수결)의 구현을 가능하게 한다. 만약 과반수 결정의 단위가 한 IP당 하나의 투표라면, 이 시스템은 여러 IP를 배치할 수 있는 사람에 의해 그 타당성을 잃을 것이다. 작업 증명은 한 CPU당 하나의 투표권을 주는 것과 같다. 이때 과반수의 결정은 가장 긴 체인의 형태로 나타나며, 이 것은 해당 체인에 가장 많은 작업량이 투입 되었음을 의미한다. 만약 대다수의 컴퓨팅 파워가 선의의 노드들에 의해 통제된다면, 선의의 체인이 다른 체인들 보다 빨리 그리고 가장 길게 성장할 것이다. 만일 어떤 공격자가 이전의 블록을 수정하기 위해서는 해당 블록과 그 이후 체인을 구성하는 모든 블록들에 대한 작업 증명을 다시 해서 선의의 노드들이 해 놓은 작업을 따라잡아야만 한다. 각 블록이 선의의 노드들에 의해 쌓아짐에 따라 어떤 공격자가 체인을 따라잡을 가능성은 지수함수적으로 감소한다. 블록을 생성함에 있어서 하드웨어의 성능 증가를 상쇄하기 위해서, 작업 증명 알고리즘은 한 시간에 평균적으로 특정 개수의 블록이 생성되도록 난이도를 조정한다.

네트워크

네트워크를 실행 시키기 위한 단계들

  1. 모든 노드에 새로운 거래들이 전파된다.
  2. 각 노드는 수집한 거래내역들을 블록에 저장한다.
  3. 각 노드는 그 블록에 대한 작업 증명을 수행한다.
  4. 어떤 노드가 작업 증명에 대한 해답을 찾아내면, 그 블록을 모든 노드에 전파한다.
  5. 모든 노드들은 해당 블록이 포함하고 있는 거래 내역들이 아직 소비되지 않은 타당한 거래일 때만 그 블록을 수용한다.
  6. 노드들을 수용한 블록의 해쉬 값을 이전 해쉬 값으로 갖는 새로운 블록의 생성을 시작함으로써 해당 블록의 수용을 표현한다. 노드들은 항상 가장 긴 체인을 맞는 체인으로 여기고 그것을 연장하는 작업을 수행한다. 만약, 두 개의 다른 노드가 다른 블록 해답을 동시에 찾아낸다면, 어떤 노드는 첫 번째 블록을 받고, 어떤 노드는 다른 블록을 받았을 수 있다. 이 경우, 노드들은 그들이 처음으로 받은 블록에 대해 일을 시작하고, 다른 브랜치가 더 길어질 경우를 고려하여 그 브랜치를 저장해 둔다. 이 경우 두 브랜치에 대한 작업 증명 경쟁이 생기고, 먼저 다음 블록을 찾은 브랜치가 더 길어지게 되어, 성공한 브랜치가 아닌 다른 브랜치의 블록을 찾고 있던 노드들도 더 길어진 브랜치로 참여하게 된다. 새로운 거래 내역은 꼭 모든 노드에로 전파될 필요가 없다. 가능한 많은 노드로만 전파하는 한, 이전의 가장 긴 블록에 포함 될 수 있다. 블록 전파는 또한 메세지 드롭 문제에 저항성을 갖는다. 만약 어떤 노드가 블록을 받지 못한다면, 그 노드는 그 다음 블록을 받을 때 중간에 비는 블록이 있는 것을 깨닫고 그것을 요청하게 된다.

보상

  • 블록의 첫 번째 거래는 새로운 코인을 블록의 생성자에게 주는 특별한 거래로 정해져있다.이것은 네트워크를 유지하는 노드에 대한 보상이자, 중앙의 코인 발급 장치가 없기 때문에, 새로운 코인을 시장에 공급하는 방식이다. 일정한 양의 새로운 코인을 시장에 공급하는 이러한 방식은 금을 채굴하는 방식과 비슷하다.
  • 블록 보상은 또한 블록 내 거래들의 거래 수수료에서도 지급된다.
  • 정해진 양의 코인이 시장으로 모두 공급되면, 블록 보상은 오로지 거래 수수료로만 이루어지게 되고, 시스템은 완전히 인플레이션 없는 상태가 된다.
  • 블록보상은 노드들이 선의의 노드로 머물도록 하는데 도움을 준다. 만약 악의적 공격자가 선의적 노드들 보다 더 많은 컴퓨팅 파워를 점유하게 된다면, 그는 규칙을 깨고 코인을 탈취하는 것을 택하거나, 새로운 코인을 생성하는데 일조하는 것을 선택할 수 있다. 이때 악의적 공격자는 시스템을 해치는 것 보다 규칙에 따르는 것이 더 이득일 수 밖에 없다.

저장 공간의 재활용(Reclaiming)

거래가 확정될 만큼의 블록이 거래 블록 위에 쌓인 후에는, 지불 된 거래는 저장 공간을 활용하기 위해 폐기된다. 블록의 해시를 위반하지 않으면서 이를 수행하기 위해서 거래들은 머클 트리(Merkle Tree)로 해시된다. 머클 트리에서는 트리의 루트이 블록의 해시를 포함한다. 오래된 블록들은 저장될 필요가 없는 내부 해쉬를 가진 트리의 가지들을 쳐내어 작은 크기로 압축된다. 거래를 갖지 않는 블록의 헤더는 약 80바이트 크기이고, 블록이 10분마다 생성된다면 1년에 4.2MB의 크기를 갖게 된다. 컴퓨터의 저장 공간이 무어의 법칙에 따라 성장한다고 예측했을때, 블록체인이 성장함에 따라 블록 헤더를 메모리에 올리는데 문제가 없을 것으로 볼 수 있다.

단순화된 지불 검증

풀 노드를 사용하지 않아도 지불을 검증할 수 있다. 사용자는 가장 긴 블록체인의 헤더 복사본 만을 가지고, 블록의 거래에 대한 머클 브랜치의 링크를 찾으면 된다. 사용자가 직접 거래를 확인하지 못하지만, 거래에 대한 체인의 장소로 링크함으로써 사용자는 네트워크 노드가 해당 거래를 수용했고, 블록이 이후에 추가되어 그 거래를 확정했음을 볼 수 있다. 이러한 검증은 선의의 노드들이 네트워크를 통제하고 있을 때 믿을 수 있지만, 만일 네트워크가 공격자에 의해서 독점되었다면 검증의 신뢰성은 떨어진다. 네트워크 노드들은 거래를 직접 검증할 수 있지만, 단순화된 방식만을 사용한다면 공격자가 날조된 거래내역으로 검증 방식을 속일 수 있기 때문이다. 이것에 대한 대응 방식으로는 네트워크 노드가 무효한 블록을 탐지했을 때 경보를 만들어서 사용자의 소프트웨어가 전체 블록을 다운받아 경보가 울린 거래에 대한 검증을 수행하는 방식이 있다. 자주 거래를 수행하는 비즈니스의 경우에는 그들의 노드를 직접 실행하여 독립적인 보안 방식과 더 빠른 검증을 수행하는 것이 나을 것이다.

분할된 값의 결합

코인들을 개별적으로 다루는 것도 가능하지만, 전송에 포함된 모든 코인들을 개별적인 거래로 처리하는 것은 버거운 일이 될 수 있다. 값들이 분할되고 다시 결합되는 것을 가능하게 하여 거래가 여러 입력값과 출력 값을 가지게 만든다. 보통은 이전 거래에서의 단일 입력이 있거나, 또는 여러 작은 값을 결합한 다중 입력이 있고, 출력은 최소 두개가 있다. 하나는 지불 대상으로의 출력이고 다른 하나는 잔돈이 지불자에게 반환되는 것이다.

하나의 전송이 여러 전송들에 의존할 때 그리고 이러한 전송들이 또 다른 여러 전송들에 의존될 때의 분산은 여기서 문제가 되지 않는다. 거래 기록에 대한 완전한 복사 본을 추출할 필요가 없다.

프라이버시

기존의 뱅킹 모델은 제 3자의 신뢰기관으로 흘러가는 정보의 양을 제한하는 방식으로 프라이버시를 구축하였다. 모든 거래 내역을 공개하는 방식에서는 이러한 방식이 불가능하다. 그러나 퍼블릭 키를 익명으로 함으로써 프라이버시를 제공할 수 있다. 사람들은 누군가가 다른 누구에게 전송하는 것을 볼 수 있지만, 해당 주소를 실제 소유자로는 연결할 수 없다. 이것은 주식 거래에서 제공되는 정소의 정보와 비슷하다. 각각의 거래 크기와 시간은 알 수 있지만, 누가 거래했는 지는 알 수 없다. 추가적인 프라이버시에 대한 방화벽으로는, 매 거래에 대해서 새로운 키 페어가 사용되어서 그 것의 공동 소유자에 대한 정보를 차단하는 것이 있다. 다중 입력 거래에 대해서는 해당 입력이 같은 소유자로부터 왔다는 것이 드러나 어느 정도의 소유자로의 연결이 불가피하다. 이 경우 만약 소유자의 키가 노출된다면 같은 소유자의 다른 거래들 까지 노출될 가능성이 있기 때문이다.

계산들

악의적 공격자가 따라잡을 확률

악의적 공격자가 선의의 체인보다 빠르게 체인을 생성하는 상황을 가정해보자. 만일 이것이 가능하더라도, 이 공격자가 아무것도 없는 곳에서 소유한 적 없는 코인을 만들어내는 등의 시스템에 임의의 변경을 가하는 것은 불가능하다. 노드들은 지불에 있어서 무효한 거래 내역을 수용하지 않으며, 선의의 노드들은 이러한 거래를 포함하는 블록을 수용하지 않을 것이다. 공격자는 그 자신이 소유한 거래에 대해서만 수정을 가하여 이미 소모한 코인을 다시 회수하는 등의 수정을 가할 수 있다. 선의의 체인과 공격자 체인간의 경쟁은 이진 랜덤 워크로 특징화 될 수 있다. 성공 이벤트는 선의의 체인이 한 블록을 더 연장시키는 것이고, 실패 케이스는 공격자 체인이 한 블록을 연장시키는 것이다. 공격자가 주어진 체인 길이 차이에서 선의의 체인을 따라잡는 확률은 도박꾼의 파산 문제와 유사하다. 무제한의 자산을 가진 도박꾼이 적자 상태에서 시작해서 적자를 메울 때 까지 무한정 도박을 하는 시나리오이다. 우리는 도박꾼이 적자를 메우는 상황, 즉 공격자 체인이 선의 체인을 따라잡는 상황에 대한 확률을 계산할 수 있다.

$$p = \text{다음 블록을 선의의 노드가 찾을 확률}$$ $$q = \text{다음 블록을 공격자 노드가 찾을 확률}$$ $$q_z = \text{공격자가 z 블록 뒤에서 선의의 노드를 따라잡을 확률}$$

$$q_z = 1\ \ \text{if}\ \ p \leq q $$ $$q_z = ({\frac{q}{z}})^z \ \text{if}\ \ p \gt q $$

\(p \gt q \) 인 상황에서, 공격자가 따라잡아야 하는 블록이 늘어 감에 따라 따라잡을 확률은 지수적으로 감소한다.

지불의 확정

새로운 거래가 충분히 확정되어 전송자가 그것을 바꾸지 못할 정도가 되려면 수신자가 얼마나 기다려야 할까? 전송자가 공격자라고 가정해보자. 공격자는 수신자가 거래를 받았다고 잠시동안 믿게 만들고, 이후에 해당 거래를 다시 자신에게 돌아오게 만들 것이다. 수신자는 해당 사건이 발생하면 경보를 받지만, 공격자는 해당 경보가 너무 늦게 울리기를 바란다. 수신자는 새로운 키 페어를 생성하여 퍼블릭 키를 전송자에게 보낸다. 이것은 전송자가 미리 블록을 준비해 두어서 블록을 해당 시간에 생성하는 것을 방지한다. 일단 거래가 전송되면 전송자는 평행한 체인을 생성하는 작업을 시작해서 그의 전송에 대한 다른 버젼의 블록을 만들어낸다. 수신자는 가의 거래가 블록에 추가되고 이후 z 개의 블록이 추가되는 것을 기다리지만, 공격자가 같은 양의 블록을 진행해 두었다는 것을 알지 못한다. 하지만 선의에 의해 생성되는 블록 생성 시간 동안 공격자의 잠재적 생성 속도는 푸아송 분포에 따른다. $$\lambda = z\frac{q}{p}$$ 공격자가 블록 생성을 따라잡을 확률을 구하기 위해서 우리는 푸아송 확률 밀도 함수를 따른 확률을 따라잡아야 하는 개수 만큼 곱하면 된다. 계산 하면 우리는 공격자가 따라 잡을 확률이 z가 증가함에 따라 지수적으로 감소함을 알 수 있다.

결론

이 논문에서는 제 3자의 신뢰 기관에 기대지 않고 전자 지불을 가능하게 하는 시스템을 제안했다. 디지털 서명으로부터 만들어져 소유권을 만들어 줄 수 있지만 이중 지불 문제는 해결하지 못하는 코인의 프레임워크에서부터, 이를 해결하기 위해 개인 대 개인 네트워크 상에서 작업 증명을 통해 공개된 거래의 장부를 구성하고 이에 대한 공격자의 공격이 다수의 노드가 선의의 노드라는 가정 하에서 무효함을 보였다. 이 네트워크는 구조화 되지 않는 단순성 하에서 강인하다. 노드는 작은 조직을 통해 일 할 수 잇고, 그들은 식별될 필요가 없다. 왜냐하면 메세지는 어떤 특정 장소에서도 라우팅될 수 있고, 최선의 방식으로만 전달되면 되기 때문이다. 노드들은 네트워크에 자신의 의지에 따라 참여하거나 떠날 수 있다. 작업 증명 체인을 그들이 떠나 있는 동안 발생한 거래에 대해 받아들이면서 말이다. 그들은 그들의 컴퓨팅 파워에 따라 투표하며, 유효한 블록에 대한 그들의 수용성을 블록을 연장하거나 무효한 블록을 거부하는 방식으로 표현한다. 다른 필요한 규칙이나 보상이 이 합의 매커니즘을 강화하기 위해 쓰일 수 있다.


ADA Tip Jar


글쓴이 후원하기

ADA : Ae2tdPwUPEZ2NHXQnDT4Y6qUQndmkJd5mEyEkSQNqJCrePaD1YBibGGfVhX

comments powered by Disqus