bitcoin white paper 톺아보기

Downy·2023년 3월 19일
0

비트코인 : 개인 대 개인 전자 화폐 시스템

비트코인 백서 중 중요한 챕터를 선별해 내용을 정리해 보았다.

✔️ 인터넷 기반 상거래
: 금융기관을 제 3자로 의존

  • 완전한 비가역 거래 불가능 > 제 3자에 의해 거래 내역이 수정될 수 있음
  • 중재비용(수수료) 발생 > 거래비용 상승 > 소액거래 제한
  • 비가역 결제기능 상실 > 거래 내용이 수정될 가능성 >> 신뢰결핍

✔️ 전자화폐 시스템
: 신뢰를 대신할 암호학적 증명을 바탕으로 두 당사자가 직접 거래를 할 수 있도록 함
: 개인 대 개인간 분산 타임스탬프 서버

  • 전산적 철회가 불가능 > 비가역성 보장됨 > 거래자 보호

** 가역성 (reversibility)
: 반응 시 초기상황으로 돌아올 수 있는지의 여부

거래

  • 전자화폐를 디지털 서명의 사슬로써 정의
  • 소유자는 거래 시 이전 거래 내역 및 다음 소유자의 공개 키의 해시값에 전자적으로 서명, 이 정보를 화폐의 끝에 첨가한다.
  • 수령인은 체인의 소유권을 입증하기 위해 서명을 보증할 수 있다.
  • 이중지불 여부를 검증하기 어려움
  • 이중지불 여부를 알기 위해 모든 거래를 인식하고 해당 거래가 최초의 거래임을 보증하는 합의 시스템 필요

** 화폐의 이중지불(double spending)이란?

  • 원본 파일에 저장된 가치를 지불한 뒤, 해당 파일을 복사하여 다른 사람에게 또 지불하는 것

  • 블록체인에서 모든 거래내역은 해시로 변환되어 저장되는데, 하나의 블록에는 과거의 모든 거래내역이 담긴 이전 해시값을 포함하고 있기 때문에 이중지불이 불가능

    ex) A가 B에게 1000원을 전송한 경우 해당 거래내역이 블록체인에 기록되기 때문에 A가 다시 1000원을 C에게 전송하려고 할 경우 해당 거래는 블록체인 네트워크에 참여한 다른 노드들의 승인을 얻지 못함 -> 실패

타임스탬프 서버

  • 타임스탬프를 통해 특정 데이터가 해시에 들어가기 위해 해당 시각부터 존재했음을 입증한다.
  • 각 타임스탬프는 그 해시 안에 이전 타임스탬프를 포함하고, 그에 앞선 것들을 하나씩 연장하는 타임스탬프가 찍힌 사슬을 생성한다.
  • 타임스탬프는 상대적이며, 정확한 시각을 저장하는 것이 아닌 이전, 이후 타임스탬프들과의 연결을 통해 증명한다.

작업증명(POW)

  • 블록체인 네트워크에서 합의를 통해 transaction을 인증하고 체인에 새 블록을 생성하는 합의 매커니즘이다.

  • POW에서 사용하는 해시 알고리즘은 SHA-256이다.

  • 작업증명을 통해 노드들은 거래를 검증하고, 보상을 받기 위해 경쟁하며, 다음 블록 구축에 선택될 확률은 CPU의 연산능력과 관련된다.

  • 최다 작업증명 동작이 투입된 가장 긴 사슬은 가장 명확하고 신뢰성있는 사슬로 대표된다.

  • 작업증명난도(difficulty)는 시간당 평균 블록 수에 따른 평균 목표치를 조정해 결정된다. 난도를 증가시킴으로써 블록의 생성 속도를 조절한다.

    네트워크

네트워크 실행 단계

  1. 개인 대 개인 간 거래에서 트랙잭션이 발생
  2. 거래자의 노드와 이웃관계인 노드들부터 순차적으로 트랜잭션이 공유되며 몇초안에 모든 노드로 해당 트랜잭션이 공유됨. 이때의 Tx(Transaction)은 아직 pending 상태로 검증이 되지 않은 상태이다.
    3.네트워크의 모든 채굴자들이 Tx를 저장할 블록 채굴
    4.채굴경쟁에서 승리한 노드가(작업증명을 가장 빨리 성공한 노드가) broadcast한다.
  3. 승리한 노드 포함 모든 노드들이 해당 거래를 검증 후 블록에 저장한다.
    여기서 검증할 내용에는
  • 거래규모가 허용된 가치범위 내에 있는지 (0~2100만 BTC)
  • 거래의 owner가 쓰려는 특정개수의 BTC가 진짜 존재하는 BTC인지
  • owner가 가진 BTC크기가 거래량보다 큰지
  • owner의 서명이 올바른 서명인지
    등이 있다.
    이러한 검증들 중 하나라도 false라면 거래는 즉시 폐기된다.

노드는 항상 가장 긴 사슬을 정확한 것으로 간주한다.
만약 두 노드가 동시에 다음 블록을 브로드캐스트하면, 노드들이 받은 다음 블록이 서로 다를 수 있다.
그러나 다수결에 따라 더 많은 노드들이 저장한 블록들이 더 신뢰성있는 체인으로 간주된다. 다른 브랜치를 작업하던 노드들은 더 긴 브랜치로 전환한다.

디스크 공간 회수

  • 블록체인의 용량은 시간이 지남에 따라 지속적으로 증가하기 때문에 고성능의 소수 CPU만 풀노드 운영이 가능하다.
  • 라이트 노드들은 거래를 머클트리(Merkle Tree)로 해시하여 그 루트만 블록의 해시안에 포함시킨다. 이를 통해 디스크 공간을 절약할 수 있다.

  • 각 거래를 해싱하고 두개씩 묶는다. 묶은 거래들을 또다시 해싱하여 두개씩 묶는 과정을 반복한다.
    이 과정을 거친 루트 해시만을 블록 안에 포함시킨다.
  • 나중에 거래를 찾을 때도 루트해시를 통해 쉽고 빠르게 찾을 수 있다. 위의 그림에서 Tx1을 찾으려면 두번의 경로만 찾으면 된다.
  • 거래 건수 N당 찾을 경로 횟수는 log2(N)이다. 즉, 1024개의 거래에서도 연산 10회를 통해 데이터를 찾을 수 있다.

프라이버시

  • 전통적 프라이버시 모델은 거래자의 신원 거래내용 거래 상대 등의 public에 불투명하다.
  • 그러나 새 프라이버시 모델은 거래 내용을 public하게 하지만 거래에 연결된 누군가에 대한 정보는 볼 수 없다.

계산

  • 노드는 유효하지 않은 거래를 결제로 받아들이지 않으며, 정직한 노드는 그걸 포함하는 블록을 절대 받아들이지 않는다.
  • 공격자는 오로지 자신의 거래에서 그가 최근 지출한 돈을 거둬들이는 것 하나만을 바꿀 수 있다. 즉, 이중 지불만 가능하다.
  • 간단히 정직한 사슬의 블록 개수가 늘어날수록, 즉 공격자가 따라잡아야 하는 블록 수가 늘어날수록 공격 성공 확률은 지수적으로 감소한다.
  • 정직한 블록이 예상되는 블록당 시간 평균치를 따른다고 가정하면, 공격자의 잠재적 진척도 기대값을 갖는 푸아송 분포(Poisson distribution)가 될 것이다.

**푸아송분포?

정해진 시간 안에 어떤 사건이 일어날 횟수에 대한 기대값을 λ라 했을 때 그 사건이 n회 일어날 확률은 다음과 같다.

이항분포에서 n이 너무 크고 p가 너무 작은 경우에 이항 분포의 확률분포를 근사적으로 계산하기 위해서는 극한값을 이용한 새로운 형태의 분포가 필요하다.

즉, 수많은 사건 중(n->∞) 특정한 사건이 발생할 확률이 매우 적은(p->0) 확률변수가 갖는 분포이다.

포아송 분포는 이러한 문제를 해결하기 위해 탄생한 분포라고 할 수 있다.

다시 본문으로 돌아와서,
공격자가 따라잡을 수 있는 확률을 얻기 위해, 해당 시점부터 따라잡을 수 있는 확률로 만들어낼 각 진척 규모별 푸아송 밀도를 곱한다.

이를 분포의 무한꼬리 합산을 피하도록 정리하고

c코드로 바꾸면

다음과 같은 결과를 얻을 수 있다.

이 결과를 통해 z에 따라 지수적으로 감소하는 확률을 볼 수 있다.

0개의 댓글