[Bitcoin] 논문 정리 - 2

in #jjangjjangman6 years ago

지난번 [Bitcoin] 논문 정리 - 1 에 이어서 비트코인 논문의 뒷 부분을 이어서 포스팅 한다.
역시나 자세히 정리하려고 하다보니 글이 길어졌지만 그래도 시작해보자!

인센티브


관례상 블록 안의 기록될 첫 거래는 블록을 만든 이에게 보상으로 돌아갈 새 화폐로 시작되는 특별한 거래이다.
이를 통해 화폐를 발행하는 중앙기관 없이 노드가 네트워크를 지원할 인센티브를 더해 주며 초기에 발행한 화폐를 유통할 방법을 제공한다.
새 화폐를 일정량 꾸준히 추가하는 것은 금 채굴자가 유통하는 금을 추가하기 위해 자원을 소비하는 것과 유사하며 이 경우 소비되는 자원은 CPU 시간과 전기이다.

인센티브는 또한 거래 수수료 재원이 될 수 있다.
거래 처리 비용으로 산정된 금액보다 실제 처리 금액이 더 작다면 그 차이만큼은 블록 생산자의 인센티브에 추가된다.
한 번 선결된 화폐 수(21,000,000개)가 모두 유통되면 이 인센티브는 모두 거래 수수료로 전환되어 인플레이션으로부터 완전히 자유로워 질 수 있다.

또한 이 인센티브를 통해 노드들이 계속 정직하길 유도할 수 있다.
만약 탐욕스러운 공격자가 모든 정직한 노드들 보다 더 많은 CPU 파워를 모을 수 있다면 자신의 결제 거래 정보를 조작하거나, 새로운 화폐를 만들어 내는 것 중 선택해야 한다.
즉, 첫 번째는 해킹이고 두 번째는 규칙대로 행동하는 것이다.
여기에서 규칙대로 움직이는 것이 시스템과 공격자가 보유한 부의 유효성을 해치는 것보다 더 많은 새 화폐를 제공하므로 공격자는 두 번째 규칙대로 행동할 것이며 노드들이 계속해서 정직한 방향으로 증가될 것이다.

디스크 공간 회수


거래가 많아지고, 블록이 계속 증가하면 디스크 공간을 절약하기 위해 최신 블록들만 유지하여 디스크 공간을 절약할 수 있는데 이 과정에서 과거 거래 내용이 삭제되는 문제가 발생한다.
이것을 방지하기 위해 블록의 해시를 깨지 않고 거래를 머클트리로 해시하여 그 루트를 블록의 해시 안에 포함시킨다.
이것을 통해 아무리 많은 거래라도 하나의 머클루트에 저장되어 디스크 공간을 절약할 수 있으며 이진 트리인 머클트리로 인하여 원하는 거래를 찾기 위한 탐색 시간도 log 스케일로 줄일 수 있다.

거래가 없는 블록 헤더는 약 80byte이며 블록이 10분마다 생성된다고 가정하면 연간 4.2MB의 블록이 생성된다.
(80 * 6 * 24 * 365 = 4.2MB -> 10분 * 6은 1시간, 1시간 * 24시간은 1일, 1일 * 365일은 1년)
현재 디스크의 용량은 모든 블록을 저장하기에 큰 문제가 되지 않는다.

간소화한 결제 검증


결제 검증은 전체 네트워크 노드를 구동하지 않고도 가능하다.
사용자는 그가 최장 작업증명 사슬을 가졌다고 확신할 때까지 네트워크 노드를 조회하여 얻을 수 있는 가장 긴 사슬의 블록 사본을 유지하며, 사용자의 거래를 타임스탬프가 존재하는 블록에 연결된 머클분기를 얻기만 하면 된다.
자신의 거래를 검사할 수는 없지만 머클분기를 이용하여 네트워크 노드가 그걸 받아들인 것과, 이후 그게 받아들여졌음을 확인한 뒤 추가된 블록을 볼 수 있다.

만약 네트워크가 공격자에 의해 과점된다면 이러한 검증은 신뢰성이 떨어지게 된다.
네트워크 노드는 거래를 자체 검증할 수 있지만 간소화한 방법은 공격자가 네트워크를 계속 과점할 수 있는 한 그가 조작한 거래에 의해 기만당할 수 있다.
이를 방어하기 위해 네트워크 노드가 유효하지 않은 블록을 탐지시 경고하며 간소화한 검증 사용자는 네트워크 노드를 통해 온전한 블록을 내려받도록 유도된다.

가치 합치기와 나누기


화폐를 독립적으로 다루는 것은 가능하더라도 송금에 모든 푼돈을 별도 거래로 만드는 건 무리한 일이다.
가치를 나누고 합칠 수 있도록 거래는 여러건의 입출금을 포함한다.
일반적으로 입금은 더 큰 먼젓번 거래의 단수 입금 또는 더 작은 양을 결합한 복수 입금이며 출금은 지불용 출금 하나와 만일 있다면 송금인에게 돌려줄 거스름돈 출금 하나, 이렇게 많아봐야 둘이다.

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

프라이버시


전통적인 은행 모델은 참여 당사자와 신뢰받는 제 3자에게 정보 접근을 제한함으로써 일정 수준 프라이버시를 달성하지만 이 방법은 모든 거래를 공개할 필요성에 따라 배제된다.
하지만 공개키의 익명성을 통해 프라이버시를 보장할 수 있다.
대중은 누군가가 다른 누군가에게 보내는 금액은 볼 수 있지만 그 거래에 연결된 누군가에 대한 정보는 볼 수 없다.
하지만 특정 공개키에 대해 지속적으로 거래가 발생하고 그 공개키의 소유자가 공개된다면 소유자가 노출될 수 있다.

계산


정직한 사슬보다 더 빨리 대체 사슬을 만들어내려는 공격자의 시나리오를 고려하면 이런 시도가 성공한다 하더라도 공격자는 아무것도 없는 곳에서 가치를 만들어 내거나 공격자가 소유한 적도 없는 돈을 얻게 만드는 식으로 시스템의 변경은 불가능하다.
왜냐하면 노드는 유효하지 않은 거래는 받아들이지 않으며 정직한 노드는 그걸 포함하는 블록은 절대 받아들이지 않기 때무이다.
공격자는 오로지 자신의 거래에서 그가 최근 지출한 돈을 거둬들이는 것 하나만 변경이 가능하다.

확률로 이러한 시나리오를 계산하면 공격자가 정직한 노드를 앞지를 확률은 지수적으로 감소한다.
자세한 증명은 논문의 내용을 참고하기 바라며 여기에서는 C 코드를 통한 결론만을 보여준다.

#include <math.h>
double AttackerSuccessProbability(double q, int z)
{
    double p = 1.0 - q;
    double lambda = z * (q / p);
    double sum = 1.0;
    int i, k;
    for (k = 0; k <= z; k++)
    {
        double poisson = exp(-lambda);
        for (i = 1; i <= k; i++)
            poisson *= lambda / i;
        sum -= poisson * (1 - pow(q / p, z - k));
    }
    return sum;
}

q는 공격자가 해당 시점부터 정직한 사슬을 따라잡을 확률이며, z는 정직한 사슬로부터 떨어진 블록의 카운트이다.
따라서 P는 위의 값에 따른 확률을 나타낸다.
결과는 다음과 같이 z에 따라 지수적으로 감소하는 확률을 볼 수 있다.

    q=0.1
    z=0    P=1.0000000
    z=1    P=0.2045873
    z=2    P=0.0509779
    z=3    P=0.0131722
    z=4    P=0.0034552
    z=5    P=0.0009137
    z=6    P=0.0002428
    z=7    P=0.0000647
    z=8    P=0.0000173
    z=9    P=0.0000046
    z=10   P=0.0000012

    q=0.3
    z=0    P=1.0000000
    z=5    P=0.1773523
    z=10   P=0.0416605
    z=15   P=0.0101008
    z=20   P=0.0024804
    z=25   P=0.0006132
    z=30   P=0.0001522
    z=35   P=0.0000379
    z=40   P=0.0000095
    z=45   P=0.0000024
    z=50   P=0.0000006

결론


신뢰에 의존하지 않는 전자거래용 시스템을 다음과 같이 제안한다.
강력한 소유권 통제를 제공하는 디지털 서명으로 만든 화폐의 유력한 프레임워크로 시작했지만 이는 이중지불 방지수단 없이는 불완전하다.
이를 해결하기 위해 정직한 노드가 CPU파워 대부분을 제어한다면 공격자가 전산적으로 변경하기가 금세 비현실적이 되는 작업증명을 사용해 공개된 거래 이력을 기록하는 개인 대 개인 네트워크를 제안한다.
이 네트워크의 견고함은 그 정형화되지 않은 단순성에 있다.
노드는 거의 조정 없이 한 번에 모두 동작하며 이들은 메시지가 경로를 지정받아 어떤 특정 위치로 가는 게 아니라 단지 최선의 노력을 다해 전달되면 그만이기 때문에 식별될 필요가 없다.
노드는 의지에 따라 네트워크를 떠났다가 그가 없는 동안 벌어진 일의 증거로 작업증명 사슬을 받아들여 재합류 할 수 있다.
이들은 CPU 파워를 사용한 투표로 유효한 블록을 연장하는 작업을 통해 그걸 승인했음을 나타내고 유효하지 않은 블록에 대한 작업을 거부함으로써 그걸 기각함으로써 어떤 필요 규칙과 유인이든 이 합의 작용을 통해 집행될 수 있다.

마치며...


논문이라 그런지 이해하기 쉽지는 않지만 그래도 비트코인의 원리를 이해하기 위해 첫 발걸음을 내딛었다고 볼 수 있겠다.
암호화폐의 건전한 투자와 미래를 위해 앞으로도 열심히 공부해야겠다.

참고자료

  1. MINCHEOL IM 님의 비트코인 논문 한국어 번역판 (ver0.9)
  2. @jsralph 님의 머클트리 정리
Sort:  

짱짱맨 태그 사용에 감사드립니다^^
짱짱 레포트가 나왔어요^^
https://steemit.com/kr/@gudrn6677/3zzexa-and

오 감사합니다! ^^

Wow nice post. Keep em coming. will folloy you for more in the future :)

Thank you so much! :)