티스토리 뷰

📺시리즈

2023.08.25 - [블록체인/Bitcoin] - 밑바닥부터 시작하는 비트코인 - 1장 유한체

2023.08.27 - [블록체인/Bitcoin] - 밑바닥부터 시작하는 비트코인 - 2장 타원곡선

2023.08.30 - [블록체인/Bitcoin] - 밑바닥부터 시작하는 비트코인 - 3장 타원곡선 암호

2023.09.02 - [블록체인/Bitcoin] - 밑바닥부터 시작하는 비트코인 - 4장 직렬화

2023.09.05 - [블록체인/Bitcoin] - 밑바닥부터 시작하는 비트코인 - 5장 트랜잭션

2023.09.11 - [블록체인/Bitcoin] - 밑바닥부터 시작하는 비트코인 - 6장 스크립트

2023.09.16 - [블록체인/Bitcoin] - 밑바닥부터 시작하는 비트코인 - 7장 트랜잭션 검증과 생성

2023.09.20 - [블록체인/Bitcoin] - 밑바닥부터 시작하는 비트코인 - 8장 p2sh 스크립트

2023.09.21 - [블록체인/Bitcoin] - 밑바닥부터 시작하는 비트코인 - 9장 블록

2024.01.08 - [블록체인/Bitcoin] - 밑바닥부터 시작하는 비트코인 - 10장 네트워킹

2024.01.09 - [블록체인/Bitcoin] - 밑바닥부터 시작하는 비트코인 - 11장 단순 지급 검증

2024.01.10 - [블록체인/Bitcoin] - 밑바닥부터 시작하는 비트코인 - 12장 블룸 필터

2024.01.13 - [블록체인/Bitcoin] - 밑바닥부터 시작하는 비트코인 - 13장 세그윗 1

2024.01.14 - [블록체인/Bitcoin] - 밑바닥부터 시작하는 비트코인 - 13장 세그윗 2

2024.01.17 - [블록체인/Bitcoin] - 밑바닥부터 시작하는 비트코인 - 외전1 네트워크 요청 및 응답 개선


🏡 태초마을로

태초마을이야!

 

 2023년 8월 말에 시작하여 3개월의 공백을 지나, 마침내 '밑바닥부터 시작하는 비트코인' 저서를 통해 비트코인의 핵심을 알아보는 여정이 마무리되었습니다. 그런데 여기서 마무리 짓기 전에 해야 할 일이 있습니다. 포켓몬스터 게임에서는 전통적으로 챔피언로드를 지나 챔피언에 오르고 난 뒤에는 반드시 시작했던 마을, 주인공의 집으로 돌아가 후반부 스토리가 전개됩니다. 아직 발견하지 못한 장소, 새로운 이벤트, 환상의 포켓몬 등등 당장 손에서 게임을 내려놓기에는 너무 많은 두근거림이 남아있습니다. 이러한 이치로 태초마을로 돌아가서 비트코인을, 블록체인을 처음부터 다시 공부해야 한다면 무엇부터 하는 것이 좋을까? 하는 생각을 하게 되었습니다. 그리고 결론을 내린 것이 '비트코인 백서' 읽기입니다.


📜 왜 비트코인 백서인가?

 선지자를 자처하는 수많은 소인배들이 스러져간 황건당의 난이 지나고, 작금은 ETF 승인을 받은 비트코인을 필두로 한 군웅할거의 시대. 난세의 소용돌이 속에서 살아남기 위해서는 수많은 인재들이 18로 제후의 맹주인 원소를 거쳐 새로운 군주를 만나 왕좌지재(王佐之材)가 되거나 자신의 세력을 형성하여 위세를 떨쳤듯이, 강자에게 의탁하여 기반을 쌓는 것이 정도(正道)입니다.

원소의 자 본초(本初)는 근본이라는 뜻을 가지고 있다

 

 같은 이치로 비트코인은 블록체인 업계에서 개발자로 살아남고자 하는 이들이 거쳐야 할 관문이 아닐까 조심스럽게 말해봅니다. 제가 처음 블록체인 코어 공부를 결심했을 때 무작정 구매한 것이 비트코인 관련 서적(볼 만한 번역서가 없는 것도 한몫) '밑바닥부터 시작하는 비트코인'이었습니다. 처음부터 무언가를 알고 그랬다기보다는 '근본'을 따져보자니 비트코인 말고는 떠오르는 것이 없었기 때문입니다.

 

 그러나 막상 '비트코인=근본'이다라는 생각을 뒷받침해 줄 수 있는 근거는 명확하게 설명이 되지 않습니다. 아무래도 이 책에서는 비트코인 코어의 구성요소를 다루고는 있지만, 그 이전에 애초에 이런 시스템이 왜 필요했는가에 대해서는 다루고 있지 않기 때문인 것 같습니다. 그래서 처음으로 돌아가서 비트코인 백서를 한 번 읽어보고자 합니다. 말 그대로 의식의 흐름대로 읽고 지금껏 배운 것들과 연결하여 저만의 주석을 달아보도록 하겠습니다.

  일반적으로 백서(White Paper)는 어떤 기술, 제품 또는 서비스에 대한 상세한 설명을 담은 문서를 가리킵니다. 이는 해당 주제에 대한 이해를 돕고 관련 정보를 제공하는 데 목적을 두고 있습니다.

 비트코인 백서는 '사토시 나카모토'라는 개발자가 2008년에 발표한 문서를 가리킵니다. 이 백서는 비트코인의 핵심 아이디어와 기술적인 세부 사항을 정의하고 있습니다.

1️⃣ 서론

 

 2007년 서브프라임 모기지 사태가 발생했습니다.  요약하자면

  1. 미국의 저금리 정책으로 부동산 가격이 막 올라가니까 너도나도 대출 빼서 '일단 집부터 사고! 올라가면 판다' 전략으로 부동산을 사놓고 그 부동산을 담보로 또 대출을 빼는 것을 무한반복
  2. 은행에서도 상환 능력이 되는지 안되는지 제대로 된 절차도 없이 아무한테나 무지성으로 돈을 빌려줌
  3. 이미 할 사람들은 다 대출 빼서 집을 사놓은 터라 더 이상 집을 살 사람이 없자 집값이 폭락
  4. '오르면 판다'에서 그냥 빚더미에 나앉게 된 대출자들. 문제는 빚을 갚을 능력도 없다는 것
  5. 빌려준 돈을 받지 못하게 된 미국 은행들의 죽음과 함께 그들이 판매한 대출 채권을 구매한 전 세계의 금융기관에 폭탄 돌리기
  6. 그렇게 세계 경제가 망했다

 서브프라임 모기지 사태가 발생한 다음 해인 2008년에 발표된 비트코인 백서에는 기존 금융 시스템에 대한 사토시 나카모토의 부정적인 인식이 담겨있습니다. 현재 금융 시스템에서는 전자 거래를 위해 제삼자의 개입이 필수불가결합니다. 거래 참여자끼리는 서로를 믿을 수 없기 때문이죠.

 

 2000년대 초반 온라인 게임에서 유저 간의 거래를 해보신 분이라면 '인간불신'에 빠졌다고 해도 과언이 아닐 정도로 온갖 사기행위가 난무했음을 기억할 것입니다. 상대방의 집 주소나 전화번호를 알아놓고 거래를 해도 사기 칠 놈들은 사기를 쳤습니다. 그래서 이후에는 경매장이나 거래소 시스템 같은 제삼자인 운영진이 개입하는 시스템이 도입되었습니다. 이런 시스템을 통한 거래는 사기당할 위험을 혁신적으로 낮추어줬지만, 거래 수수료를 지불해야 한다는 문제가 있습니다. 판매자는 거래 수수료를 고려해 더 높은 가격에 상품을 올려야 하고 구매자는 그만큼 더 많은 금액을 지불해야 합니다.

 

 '철회할 수 없는 서비스에 맞는 철회할 수 없는 결제 기능의 상실'은 다음 예를 들 수 있을 것 같습니다. 지금도 그런는지는 모르겠는데 한 때 구x 플레이(중개자)에서 사용자의 인 앱 결제에 대해 환불 가능한 선에서 최초로 한 번만 묻지도 따지지도 않고 환불해 주는 정책이 있었습니다. 판매자의 입장에서는 철회할 수 없는 서비스인데도 말입니다. 사용자의 환불 신청에 대해 서비스 제공자는 이미 사용자에게 제공된 인 앱 재화를 환수할 수도 없고 그렇다고 결제 대금도 받을 수 없으니 모든 피해를 감내해야 했습니다(물론 악용하다가 계정이 영구정지 당하는 사례도 많음). 이처럼 중개자를 통한 거래는 환불이라든가 계정 정지 같은 분쟁 중재를 위한 비용을 발생시킵니다.

 

 중재자를 가운데에 두고 이를 방패 삼아 단순 변심으로 구매를 철회하는 구매자와 아이패드 대신 벽돌을 보내는 판매자.

이를 방지하려면 중재자는 거래 참여자의 신원을 확실시할 수 있도록 더 많은 개인정보를 요구해야 합니다. 그리고 이렇게 중재자의 데이터베이스에 쌓인 개인정보는 소위 알고리즘이라고 불리는 개인 맞춤형 서비스를 통해 내 머릿속을 들여다보는 것이 아닐까 할 정도로 소름 끼치게 정확한 항목들을 추천해 줍니다. 그러나 이는 결코 좋은 현상이 아닙니다. 개인에 대한 너무 많은 데이터를 중재자가 쥐고 흔들다 보니까 오히려 개인이 자신이 누구고 무엇을 좋아하는지 알기 위해 중재자에게 의존해야 하는 데이터 주권의 역전이 발생한 것입니다.

 

 사토시 나카모토는 '신뢰 기반 모델은 이렇게 문제가 많고, 어차피 서로 못 믿으니까 암호학적 증명으로 승부를 봅시다'라고 제안합니다. 이 새로운 시스템에서는 개인 대 개인(P2P)으로 거래가 이루어지며 중개자도 필요가 없습니다. 장부도 공개되어 있어서 누구나 열람해 볼 수 있습니다. 그런데 장부에 아무나 거래 내역을 작성할 수 있고 아무나 수정할 수 있으면 금방 엉망이 될 것입니다. 그래서 일단 거래 내역을 기록하면 변경이 불가능해야 하고 기록을 담당하는 과정은 모든 사용자의 합의를 통해 이루어질 것인데, 결국 이러한 것들을 가능하게 하는 것이 암호학적 증명이라는 것입니다.


2️⃣ 거래

 위의 그림은 하나의 입력과 하나의 출력으로 체인처럼 엮여있는 거래 구조입니다. 

  1. A는 이전 거래내역의 해시를 생성하고 전자적으로 서명함으로써 이전 거래의 출력(코인)이 자신의 소유임을 증명합니다.
  2. 그리고 소유권이 검증된 출력을 사용해 B에게 코인을 전송하는데 이때 거래의 출력에는 B의 공개키가 들어갑니다.
  3. B는 마찬가지로 전자 서명을 통해 소유권의 체인을 검증할 수 있습니다.

 전자 서명은 개인키를 드러내지 않고도 공개키를 소유하고 있음을 증명하기 위해 사용합니다. 문제는 이렇게 전송된 코인이 과연 B한테만 전송되었는가입니다. A가 B한테서 상품을 구매하기 위해 결제 대금을 지불한 것인데, 동일한 코인을 C(또는 자신)한테도 보내서 C가 먼저 사용하게 할 수 있습니다. 이렇게 되면 막상 B가 코인을 사용하려고 할 때는 사용할 수는 없는 문제가 발생하며 A는 '돈 보냈으니까 연락하지 마세요'하고 발뺌해 버림으로써 부당 이득을 취할 수 있습니다. 이러한 문제를 두고 이중지불(Double Spending)이라고 합니다. 이중지불 문제는 서명을 검증하는 것 만으로는 쉽게 확인할 수 없습니다.

 

 시스템 상에서는 이중지불 문제에 대응하기 위해 동일한 코인에 대해 가장 먼저 생성된 거래만을 인정하는 방식을 채택했습니다. 이를 위해서는 중앙화된 금융기관처럼 모든 거래내역을 비교대조해 보는 것이 필요합니다. 그러나 중앙화된 제삼자가 없는 시스템에서는 중앙화된 서버나 데이터베이스가 존재하지 않습니다. 그렇다면 어떻게 거래의 순서를 따져볼 수 있을까요? 우선은 모든 거래가 공개되어야 할 것입니다. 그래야 네트워크의 모든 참여자가 거래내역을 비교대조해 볼 수 있습니다. 그리고 참여자들끼리 서로 말이 다를 수 있기 때문에 단 하나의 거래순서 기록에 도달하는 합의 메커니즘이 필요합니다. 또한 거래의 수취자는 코인을 사용하기 전에 해당 거래가 최초라고 다수의 참여자로부터 동의를 받았다는 것을 증명해야만 코인을 사용할 수 있어야 합니다. 


3️⃣ 타임스탬프 서버

 

 처음에는 이게 무슨 소리인가 싶었는데, 그림을 보고 깨달았습니다. 여기서 '블록'의 개념이 최초로 등장합니다. '타임스탬프가 찍힌 항목들'이라고 표현하고 있는데 트랜잭션에는 타임스탬프가 찍히지 않고 블록에만 찍힙니다. 각각의 블록은 이전 블록의 해시를 포함함으로써 체인의 형태로 연결됩니다. 이렇게 되면 블록이 체인으로 연결되어 있고 타임스탬프가 찍혀 있기 때문에 블록의 순서로 트랜잭션의 순서 또한 특정할 수 있습니다. 그리고 또 중요한 것은 모든 블록이 신문에 실린 기사처럼 누구나 볼 수 있게 공개되어야 한다는 것입니다. 우리는 이를 블록체인이라고 부르고 있지만 비트코인 백서에는 그러한 단어가 직접적으로 언급되지는 않습니다.


4️⃣ 작업증명

 

 블록은 작업증명(Proof of Work)이라고 하는 합의 메커니즘을 통해 생성됩니다. 간략하게 설명하자면, 특정 난이도를 만족하는 블록 해시를 찾을 때까지 nonce 값을 조정하여 해시연산을 실행하는 것입니다. 그리고 답을 찾은 노드는 해당 블록을 전파하여 다른 노드들의 검증을 받고 체인에 연결합니다. 이 과정을 '채굴'이라고도 합니다.

 

 사토시 나카모토가 이 방법을 사용한 이유는 블록에 담긴 데이터의 무결성을 보장하고 공격자의 비용을 크게 증가시킨 위함입니다. 해시함수는 특성상 값이 조금만 바뀌더라도 완전히 다른 해시가 나오기 때문에 이전 블록을 구성하는 일부만 변경되더라도 이를 쉽게 감지할 수 있고 블록 해시가 변경되기 때문에 이 값을 참조하는 다음 블록으로 연쇄적으로 문제가 전파가 됩니다. 또한 블록의 일부를 변경하더라도 작업증명이 유효하지 않으면 그 블록은 체인에 연결될 수 없습니다. 따라서 공격자는 작업증명이 유효한 블록을 만들어 내더라도 변경되기 전의 블록 해시를 참조하는 블록의 작업증명을 다시 구해야 하고, 체인을 따라서 모든 블록의 작업증명을 다시 계산해야 하므로 천문학적 비용이 발생하게 됩니다.

 

 또 다른 이유로는 단순히 IP주소 같은 것을 사용해서 다수결로 블록 생성을 결정했을 때 100만 아스가르드인(Tor 사용자)의 침공을 받을 우려가 존재하기 때문입니다. 작업증명은 CPU 당 1표로 제한됩니다. 그렇다고 해서 다수결의 문제로부터 자유로운 것은 아닙니다. 만약 네트워크의 CPU 파워의 과반수(50% 초과)를 공격자가 차지하고 있다면 체인에 분기를 만들어내고 기존의 체인 분기를 압도할 수 있습니다. 따라서 네트워크에는 가능한 많은(51% 이상) 정직한 노드들이 존재해야 합니다.

 

 작업증명의 난이도는 2,016개의 블록이 생성되는데 평균적으로 2주가 걸리도록 조정되고 있습니다. 최초의 제네시스 블록의 난이도는 1인데 2024년 1월 15일을 기준으로 73조라는 수치를 기록하고 있습니다;;

 

Bitcoin Difficulty Chart - BTC Difficulty

 

www.coinwarz.com


5️⃣ 네트워크

 

 노드 간의 통신은 비동기로 이루어지기 때문에 두 노드가 각각 A, B 두 개의 블록을 동시에 전송하면 어떤 노드는 A를 먼저 받고 어떤 노드는 B를 먼저 받게 됩니다. 블록을 받은 노드는 먼저 받은 것부터 작업을 할 테지만, 혹시 모를 상황에 대비해 체인에 분기를 만들어 나중에 들어온 블록을 이어 놓습니다. 이후에는 결국 더 긴 하나의 분기만 남게 되지만, 얼마 전까지 유효했던 블록이 무효 처리돼버렸다 하는 조금은 황당한 상황이 발생할 수 있습니다. 여기서 완결성(Finality)이라는 개념이 등장합니다. 완결성이란, 블록체인에 저장된 데이터가 더 이상 변하지 않는 불변성을 의미합니다. 완결성이 보장되려면 블록체인에서는 최소 6개의 블록이 뒤이어 추가되어야 합니다. 즉, 트랜잭션이 블록에 추가되고 한 시간을 더 기다려야 한다는 것인데, 카드 결제를 하고 한 시간이나 기다려야 한다면 숨이 막힐 것 같네요.

 

 네트워크는 책으로 공부를 하면서 개인적으로 벽을 크게 느낀 부분입니다. 읽고 이해했다고 해서 코드 좀 따라 쳤다고 해서 되는 부분이 아닌 것 같더라고요. 그래서 네트워크는 조금 더 신경을 써서 공부해 볼 생각입니다.


6️⃣ 인센티브

 

 블록의 첫 번째 트랜잭션, 코인베이스 트랜잭션은 채굴자에게 보상을 지급하는 트랜잭션입니다. 채굴에 대한 보상을 지급하지 않는다면 누가 시간하고 돈 써가면서 정직하게 블록을 채굴하겠냐는 겁니다. 인간은 이윤을 추구하므로 감시자가 없어도 정직할 수 있다, 이거는 조금 고민을 해볼 만한 철학적 주제가 아닐까 싶습니다.

 

 보상에는 거래 수수료도 포함되어 있습니다. 그렇기 때문에 채굴자들은 보상을 극대화하기 위해 수수료를 많이 지불한 트랜잭션을 우선적으로 블록에 담을 것입니다. 또한 화폐 유통량이 제한되어 있으므로 결국에는 코인베이스 트랜잭션으로 지급할 수 있는 코인은 없어질 것이고 수수료로 먹고살아야 한다는 미래가 예견되어 있습니다. 이미 코인보상 반감기가 여러 번 찾아와서 지금도 블록 하나 채굴해서 본전도 못 뽑는다는 얘기가 도는 것 같은데 그때쯤이면 어떻게 될까요? 인플레이션과 관련해서는 잘 모르는 내용이라 넘어가겠습니다.

 

 채굴 보상을 지급하는 또 다른 이유는 공격을 통해 화폐 가치를 떨어트리는 것보다는 채굴을 통해 보상을 받는 쪽이 단기적으로나 장기적으로나 이득이라는 것을 공격자가 납득하게 될 것이라는 데에 있습니다.


7️⃣ 디스크 공간 회수

 

 

Bitcoin Blockchain Size

Overview Interactive Chart More

ycharts.com

 2024년 1월 17일 시점에 비트코인 풀 노드의 크기는 542GB입니다. 연간 4.2MB는 블록 헤더만 해당하고 트랜잭션은 크기가 제각각이라 얼마나 될지는 모르지만 아무튼 많은 부분을 트랜잭션이 차지하고 있는 것 같습니다. 블록 헤더에 비해 너무 많은 용량을 차지하는데, 이미 사용되고 충분한 시간이 지난 트랜잭션들은 점진적으로 가지를 치는 게 좋지 않을까요?

 

 비트코인은 머클트리라는 자료 구조를 사용해서 트랜잭션을 저장합니다. 트리의 리프 노드는 트랜잭션의 해시로 구성되어 있으며, 두 개의 자식 노드를 연결하여 새로운 해시를 구하는 과정을 반복하여 루트 노드를 구하는데 이를 머클루트라고 합니다. 머클루트 또한 해시이므로 블록 해시와 마찬가지로 해시함수의 입력값이 조금이라도 바뀌면 완전히 다른 값이 나오게 됩니다. 따라서 트랜잭션의 값이 변경되면 전혀 다른 머클루트가 나오게 되고 이를 통해 트랜잭션의 무결성을 검사할 수 있습니다. 또한 아무리 많은 리프를 가지고 있어도 결국에는 32바이트 크기의 머클루트로 블록 헤더에 저장되므로 디스크 공간을 크게 절약할 수 있습니다.


8️⃣ 간소화된 결제 검증

 

 간소화된 결제 검증(또는 단순 지급 검증)을 위해 블록 헤더의 사본만을 가지고 있는 노드를 '라이트 노드'라고 합니다. 그림에서 나타내는 라이트 노드의 검증 과정은 다음과 같습니다.

  1. 라이트 노드는 '거래3'의 검증을 위해 풀 노드에게 '해시01'과 '해시2'가 들어있는 머클블록을 요청합니다.
  2. 라이트 노드는 주어진 해시를 사용하여 머클루트를 구하고 자신이 보유한 블록 헤더의 머클루트와 일치하는지 비교합니다.

 라이트 노드의 문제점은 트랜잭션을 검증하기 위해 풀 노드에 의존해야 한다는 것입니다. 풀 노드가 악의적으로 잘못된 정보를 보내준다면 제대로 된 검증을 진행할 수 없습니다. 이런 경우, 방어책이 있다고 하는데 네트워크 노드(네트워크와 관련된 모든 기능을 수행하는 노드인 것 같음)가 유효하지 않은 블록을 탐지한다는 것은 라이트 노드로부터 어떠한 신호를 전달받는다는 것을 의미할까요? 그렇게 신호를 받으면 라이트 노드로 블록 전체를 보내서 어디에서 문제가 발생했는지 확인하도록 하는 것 같습니다.


9️⃣ 가치 합치기와 나누기

 

  500원짜리 동전 두 개 갖다 붙인다고 1,000원짜리 지폐가 되지 않는 것처럼, 흩어져 있는 코인들을 하나의 트랜잭션으로 통합하는 것은 불가능합니다. 코인을 전송하려면 전송하는 금액과 동일하거나 더 많아지도록 하나 또는 여러 개의 UTXO를 조합하여 입력에 집어넣고 출력에는 보내는 금액과 잔돈이 들어갑니다. 출력에 들어가는 금액의 합은 항상 입력의 합보다 작아야 하는데, 이는 존재하지 않는 코인이 생성되는 것을 방지하기 위함입니다. 두 값이 같은 경우는 가능은 한데 수수료(입력의 합 - 출력의 합)가 0이 되기 때문에 트랜잭션이 평생 블록에 들어가지 못하는 불상사가 발생할 수 있습니다.


🔟 프라이버시

 

 전통적인 거래 방식은 거래당사자들과 금융기관을 제외하고는 상세한 내역을 알 수 없습니다. 그러나 블록체인 상에서는 누구나 거래 내역을 확인할 수 있습니다. 따라서 블록체인 상에서 무턱대고 자신의 본명을 사용한다거나 이메일 주소를 사용하는 것이 꺼려질 수밖에 없습니다. 비트코인은 프라이버시를 보호하기 위한 장치로 의미 없어 보이는 숫자와 문자열의 조합인 지갑 주소를 사용해 사용자의 신원을 특정하기 어렵게 만들었습니다. 추가적으로 키 페어를 생성하여 사용할 수 도 있는데, 그럼에도 불구하고 결국에는 신원을 추적당하거나 특정될 수 있는 위험이 존재하므로 이 때는 알아서 잘 처신하면 될 것 같습니다.


1️⃣1️⃣ 계산들

처음 듣는 개념

 

  • 이항 랜덤 워크(Binomial Random Walk)
  • 도박꾼의 파산 문제(Gambler's Ruin)
  • 푸아송 분포(Poisson Distribution)

...

 무슨 소린지 잘 모르겠지만 일단 go로 따라 쳐 보았습니다.

package main

import (
	"fmt"
	"math"
)

func main() {
	tests := []struct {
		q        float64
		from     int
		to       int
		interval int
	}{
		{0.1, 0, 10, 1},
		{0.3, 0, 50, 5},
	}

	for _, test := range tests {
		fmt.Printf("q = %.1f\n", test.q)
		for i := test.from; i <= test.to; i += test.interval {
			fmt.Printf("z = %2d, P = %.7f\n", i, attackSuccessProbability(test.q, i))
		}
		fmt.Println()
	}
}

func attackSuccessProbability(q float64, z int) float64 {
	p := 1.0 - q
	lambda := float64(z) * (q / p)
	sum := 1.0

	for k := 0; k <= z; k++ {
		poisson := math.Exp(-lambda)
		for i := 1; i <= k; i++ {
			poisson *= lambda / float64(i)
		}
		sum -= poisson * (1 - math.Pow(q/p, float64(z-k)))
	}

	return sum
}
$ go run .
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

 0.1% 미만에 대한 P를 풀면

    P < 0.001
    q=0.10    z=5
    q=0.15    z=8
    q=0.20    z=11
    q=0.25    z=15
    q=0.30    z=24
    q=0.35    z=41
    q=0.40    z=89
    q=0.45    z=340

 결론만 간단하게 정리하면, 공격자가 논스를 찾아 블록 x 만드는 확률이 10%(q)이고 x를 뒤이어 5개(z)의 블록이 체인에 연결되어 있을 때 이를 따라잡아 공격에 성공할 확률은 0.1%(P) 미만이라는 것입니다. 그리고 체인에 블록이 계속해서 추가될수록(z가 커질수록) 공격 성공 확률은 지수적으로 감소합니다. 이는 공격자는 공격하느라 무의미하게 돈과 시간을 낭비하지 말고 투항하여 채굴자가 되라는 항복 권유 문서와 마찬가지입니다.


1️⃣2️⃣ 결론

 기존의 금융 시스템을 신뢰할 수 있는 제삼자를 기반으로 한 간접적인 신뢰 구조로 불필요한 사회적 비용을 초래합니다. 이에 사토시 나카모토는 암호학적 증명에 기반한 P2P 전자거래 시스템을 제안했습니다.

 

 그런데 이러한 시스템에서는 필연적으로 이중지불 문제가 발생합니다. 이를 해결하기 위해서는 거래의 순서를 정하는 메커니즘이 필요한데 이는 타임스탬프를 포함한 블록을 체인 형태로 연결하는 것으로 해결할 수 있습니다.

 

 문제는 네트워크에 참여하는 모든 노드가 납득할 수 있는 블록 생성 방법인데, 이는 작업 증명을 통해 일종의 퍼즐을 먼저 해결한 노드가 블록을 생성하게 함으로써 해결하였습니다.

 

 또한 보상체계를 통해 네트워크의 과반수 이상이 정직한 노드로 구성되게 하여 네트워크에는 활기를 불어넣고, 공격자에게는 천문학적 비용을 지불하게끔 만드는 장치를 마련했습니다.

 

 비트코인 백서를 처음부터 읽으면서 느낀 것은 이렇게 주어진 문제 상황을 해결하려는 시도에서부터 혁신이 시작된다는 것입니다. 누구나 다 알고 있는 보편적인 사실이기는 하지만, 누가 이렇더라 하고 알려주는 것보다 이렇게 직접 깨닫는 쪽이 더 울림이 크네요. 물론 비트코인도 완벽한 시스템은 아닐 테죠. 확장성이나 속도 등의 문제가 있어서 BIP(Bitcoin Improvement Proposal)라고 하는 개선안들이 계속해서 제시되고 있다는 것, 그리고 이것이 어느 개인이 아닌 온라인상의 수많은 개인들이 함께 일구어 간다는 것. 블록체인에는 감동이 있다.

 

 이상으로 비트코인 백서 의식의 흐름대로 읽기를 마치겠습니다. 감사합니다.


📖 참고자료

 

비트코인/백서 - 나무위키

기존의 인터넷 기반 상거래는 전자결제를 처리하기 위해, 우리는 신뢰할 수 있는 제 3자인 외부의 금융기관에 의존해 왔다. 이러한 방식은 대부분의 거래에서 잘 작동하지만, 여전히 신뢰 기반

namu.wiki

최근에 올라온 글
최근에 달린 댓글
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Total
Today
Yesterday
글 보관함