비트코인 백서

박근원·2022년 12월 30일
0

초록(Abstract)

  • 개인 대 개인 버전의 거래를 금융기관을 거치지 않고 한 쪽에서 다른 쪽으로 직접 전달되는 온라인 결제의 실현. (제 3자를 필요로 하는 것에서 벗어나기 위함임)
  • 거래를 해싱하여 타임스탬프를 찍어서 해시 기반 작업증명(proof-of-work)을 연결한 체인으로 만들어 작업증명을 재수행하지 않고는 변경할 수 없는 기록 생성.
  • 체인이 사건의 순서를 증명, 광대한 cpu 파워 풀에서 비롯됨을 증명.
  • 과반의 cpu파워(Hashrate)가 네트워크 공격에 협력한다면 문제가 생길 수 있음.
  • 메시지가 최선의 노력을 다해 퍼져나감.
  • 노드는 자기가 빠진 사이에 벌어진 거래의 증명으로 가장 긴 작업증명 사슬을 채택하여 뜻대로 네트워크 나갔다가 재합류 가능.

1. 서록(Introduction)

  • 인터넷 기반 상거래는 제 3 자의 역할에 전적으로 의존. 신뢰 기반 모델의 태생적 약점을 극복하지 못함.

  • 완전 비가역 거래가 가능하지 않아서 높은 중재 비용으로 소액의 일상적 거래 가능성을 가로막음.

  • 따라서 신뢰 대신 암호학적 증명(crptographic proof)에 기반하여 제 3 자 없이 직접 거래 하도록 하는 전자 화폐 시스템이 필요함.

  • 거래 시간순의 전산적 증명을 생성하는 개인대 개인간 분산 타임스탬프 서버를 사용한 이중지불 문제의 솔루션을 제안.

2. 거래(Transactions)

  • 위 과정은 수금자가 소유자 가운데 누군가 화페를 이중지불 하지 않았는지 검증이 불가하다는 것.

  • 통상적 해법은 중앙통제기관이나 조폐국을 세우고 모든 거래마다 이중지불 여부를 점검하는 것. 이때 조폐국을 운영하는 회사에 의존할 수 밖에 없다.

  • 먼젓번 소유자가 어떤 거래에도 서명하지 않았음을 수금자에게 알릴 수단이 필요.

  • 가장 헤드에 있는 거래 하나를 인정하고 이후에는 이중지불에 대해 신경쓰지 않으며 거래가 있었느냐를 확인하는 방법은 앞에서부터 모든 거래를 훑는 것.

  • 조폐국과 같이 신뢰받는 자 없이 이 방식을 실현하려면 거래는 공개적이어야 하며 참가자들은 그걸 받은 순서의 단일한 이력에 합의하는 시스템이 필요하다.

  • 수금자는 각 거래의 시점에 그게 최초에 받은 거래임을 노드 다수가 동의했다는 증명을 필요로 한다.

3. 타임스탬프 서버(Timestamp Server)

  • 타임스탬프 서버는 타임스탬프가 찍힌 항목 블록의 해시를 가져가 그 해시를 신문이나 유즈넷 게시물처럼 널리 배포하는 식으로 작동.
  • 타임스탬프는 데이터가 해시에 들어가기 위해 해당 시각부터 존재했음을 증명함.
  • 각 타임스탬프는 해시에 먼젓번 타임스탬프를 포함. 그 앞에 것들을 하나씩 연장하는 타임스탬프가 찍힌 사슬을 생성.

4. 작업증명(Proof-of-Work, PoW)

  • 애덤 백의 해시캐시와 유사한 작업증명 시스템을 사용할 필요 있음.
  • SHA-256 같은 연산을 통해 결과가 0비트 여러개로 시작할, 특정 값을 찾는 작업을 수반. 평균 연산 작업은 결과값에 필요한 0 비트 갯수에 따라 지수적으로 달라짐.
  • 타임스탬프 네트워크용으로, 블록의 해시에 필요한 0 비트를 주는 값이 발견될 때까지 블록 안에 임시값을 증분하는 것으로 작업증명을 구현.
  • 작업증명을 충족하는데 cpu가 동원되었다면, 그 블록은 해당 작업 재수행 전에는 변경 불가. 하지만 블록이 연결되어 있기 때문에 변경하는 재수행 작업은 그 뒤 모든 블록을 생성하는 연산까지 포함됨.

5. 네트워크(Network)

  1. 새로운 거래가 모든 노드에 브로드캐스트
  2. 각 노드가 새로운 거래를 블록에 수집
  3. 각 노드가 그 블록에 맞는 난도의 작업증명을 찾아 나선다.
  4. 노드가 작업증명을 찾은 시점에, 거기서 모든 노드로 그 블록을 브로드캐스트
  5. 노드는 모든 거래가 유효하며 아직 지불되지 않았다는 조건에 맞을 경우에만 그 블록을 승인
  6. 블록 승인을 표현하기 위해 먼젓번 해시로 승인된 블록의 해시를 사용해 사슬 안에 다음 블록을 생성.
  • 항상 긴 사슬을 정확한 것으로 간주.
  • 새로운 거래 브로드캐스트는 반드시 모든 노드에 도달할 필요는 없음. 충분히 많은 노드에 도달하는대로 곧 한 블록 안에 들어감.

6. 인센티브(Incentive)

  • 블록 안의 첫 거래는 블록을 만든 이의 몫이 될 새 화폐로 시작하는 특별한 거래.
  • 노드가 네트워크를 지원할 인센티브를 더해주며 초기에 발행한 화폐를 유통할 방법을 제공.
  • 소비되는 것은 cpu time과 전기
  • 인센티브는 거래 수수료(거래에서 도출된 가치 - 투입된 가치)로서 충당도 가능
  • 정해둔 수 만큼의 화폐가 유통되면, 인센티브는 전부 거래 수수료로 바뀌어 인플레이션에서 자유로워짐.
  • 만약 탐욕스러운 공격자가 정직한 노드보다 더 많은 cpu파워를 모으더라도, 사람들을 속이는 데 쓰는 것 보다 새로운 화폐를 만들어내는 데 쓰는 것이 더 이득일 것. 결국 규칙대로 움직이는 것이 더 이득.

7. 디스크 공간 회수(reclaiming Disk Space)

  • 전에 지불된 거래는 디스크 공간 절약을 위해 폐기 가능하다.

  • 블록의 해시를 깨지 않고 이걸 지우기 위해서 머클트리로 사용하고 루트만 블록의 해시에 포함. 오래된 블록은 트리의 분기를 쳐냄으로써 작아질 수 있음. 내부 해시는 저장될 필요 없음.

  • 저장공간이 획기적으로 줄어듦.

  • 삭제한 내용이라고 하더라도 전체 노드에서 삭제되는 것이 아니라 특정 노드에서 삭제. 따라서 삭제된 부분에서 문제가 생기더라도 다른 노드에서 탐색하면 문제 확인이 가능함.

  • 실질적으로 비트코인의 블록의 크기는 크지 않기 때문에 그리 부담이 되진 않는다.

8. 간소화한 결제 검증(Simplified Payment Verification)

  • 전체 네트워크 노드를 다 구동하지 않고도 결제 검증은 가능하다.
  • 최장 작업증명 체인을(POW chain) 가졌다고 확신할때 까지만 네트워크 노드를 조회. 얻을 수 있는 가장 긴 사슬의 블록 헤더 사본 유지. 해당 거래를 타임스탬프가 찍힌 블록에 연결한 머클 분기를 얻기만 하면 된다.
  • 네트워크 노드가 정직하다면 믿을만 하지만, 공격자에 의해 과점된다면 취약해질 수 있다.
  • 네트워크 노드가 거래 자체를 검증할 수는 있으나 간소화한 방법은 공격자 네트워크가 과점 가능하다면 거래에 속을 수 있음.
  • 네트워크 노드가 유효하지 않은 블록을 탐지해 경고를 한다면 사용자 소프트웨어가 온전한 블록을 내려받고 경고 거래와의 모순성을 조사하면 된다.
  • 수금이 잦은 비즈니스에서는 독립적 보안과 빠른 검증을 위해 자체 노드 구동을 할 것임.

9. 가지 합치기와 나누기(Combining and Splitting Value)

  • 거래가 여러 거래에 의존하고 그 여러 거래가 더 많은 거래에 의존하는 것은 문제가 되지 않는다.
  • 완전히 독립된 거래 내역 사본을 추출해야 할 필요는 전혀 없다.

10. 프라이버시(Privacy)

  • 증권거래소에서 공개되는 정보 수준과 비슷하게, 개별 거래 시각과 규모를 나타내는 “테이프”는 공개 되지만, 그 거래 당사자가 누구인지 알지는 못한다.
  • 각 거래마다 새로운 키 쌍이 사용돼야 그게 어떤 공통된 소유자에게 연결되는 일을 피할 수 있다.
  • 키 소유자가 드러나면, 연결이 동일 소유자에게 속한 다른 거래까지 노출할 위험이 있다.

0개의 댓글