บิตคอยน์: ระบบเงินสดอิเล็กทรอนิกส์แบบเพียร์ทูเพียร์

著 Satoshi Nakamoto · 2008

Abstract

純粋なpeer-to-peerの電子キャッシュにより、金融機関を介さずに一方の当事者からもう一方へ直接オンライン決済を行うことが可能になる。デジタル署名はその解決策の一部を提供するが、二重支払いを防ぐために信頼できる第三者が依然として必要であれば、主な利点は失われてしまう。我々はpeer-to-peerネットワークを用いた二重支払い問題への解決策を提案する。このネットワークは、トランザクションをhashベースのproof-of-workの連鎖にhash化することでタイムスタンプを付与し、proof-of-workをやり直さない限り変更できない記録を形成する。最長のチェーンは、目撃されたイベントの順序の証明としてのみならず、それが最大のCPUパワーのプールから生まれたことの証明としても機能する。CPUパワーの過半数がネットワークへの攻撃に協力していないノードによって制御されている限り、それらのノードが最長のチェーンを生成し、攻撃者を凌駕する。ネットワーク自体は最小限の構造しか必要としない。メッセージはベストエフォートで配信され、ノードは自由にネットワークから離脱・再参加でき、不在中に何が起こったかの証明として最長のproof-of-workチェーンを受け入れる。

Abstract

ระบบเงินสดอิเล็กทรอนิกส์แบบ peer-to-peer อย่างแท้จริงจะช่วยให้การชำระเงินออนไลน์สามารถส่งตรงจากฝ่ายหนึ่งไปยังอีกฝ่ายหนึ่งโดยไม่ต้องผ่านสถาบันการเงิน ลายเซ็นดิจิทัลเป็นส่วนหนึ่งของคำตอบ แต่ประโยชน์หลักจะสูญเสียไปหากยังคงต้องการบุคคลที่สามที่เชื่อถือได้เพื่อป้องกัน double-spending เราเสนอวิธีแก้ปัญหา double-spending โดยใช้เครือข่าย peer-to-peer เครือข่ายประทับเวลาธุรกรรมโดยการ hash เข้าไปในห่วงโซ่ proof-of-work แบบต่อเนื่องที่ใช้ hash เป็นพื้นฐาน สร้างเป็นบันทึกที่ไม่สามารถเปลี่ยนแปลงได้โดยไม่ทำ proof-of-work ใหม่ ห่วงโซ่ที่ยาวที่สุดไม่เพียงทำหน้าที่เป็นหลักฐานของลำดับเหตุการณ์ที่ได้เห็น แต่ยังเป็นหลักฐานว่ามันมาจากกลุ่มพลังงาน CPU ที่ใหญ่ที่สุด ตราบใดที่พลังงาน CPU ส่วนใหญ่ถูกควบคุมโดย node ที่ไม่ร่วมมือกันโจมตีเครือข่าย พวกเขาจะสร้างห่วงโซ่ที่ยาวที่สุดและแซงหน้าผู้โจมตีได้ ตัวเครือข่ายเองต้องการโครงสร้างน้อยที่สุด ข้อความถูกประกาศแบบพยายามอย่างดีที่สุด และ node สามารถออกจากและกลับเข้าร่วมเครือข่ายได้ตามต้องการ โดยยอมรับห่วงโซ่ proof-of-work ที่ยาวที่สุดเป็นหลักฐานของสิ่งที่เกิดขึ้นขณะที่พวกเขาไม่อยู่

Introduction

インターネット上の商取引は、電子決済を処理する信頼できる第三者として機能する金融機関にほぼ全面的に依存するようになった。このシステムはほとんどのトランザクションに対して十分に機能しているが、信頼ベースモデルに固有の弱点を依然として抱えている。金融機関は紛争の仲裁を避けることができないため、完全に不可逆なトランザクションは実質的に不可能である。仲裁コストはトランザクションコストを増大させ、実用的な最小トランザクションサイズを制限し、小規模なカジュアルトランザクションの可能性を断つ。さらに、不可逆なサービスに対して不可逆な支払いができないことによる、より広範なコストも存在する。取消しの可能性がある限り、信頼の必要性が広がる。商人は顧客を警戒し、本来不要な情報まで求めなければならない。一定割合の詐欺は不可避として受け入れられている。これらのコストと支払いの不確実性は、物理的な通貨を使用すれば対面で回避できるが、信頼できる当事者なしに通信チャネルを通じて支払いを行うメカニズムは存在しない。

必要とされているのは、信頼ではなく暗号学的証明に基づく電子決済システムであり、信頼できる第三者を必要とせずに任意の二者が直接取引できるようにするものである。計算上取消しが実質的に不可能なトランザクションは売り手を詐欺から保護し、日常的なエスクローメカニズムで買い手を容易に保護できる。本論文では、peer-to-peer分散タイムスタンプサーバーを用いてトランザクションの時系列順序の計算的証明を生成することで、二重支払い問題への解決策を提案する。このシステムは、正直なノードが協力する攻撃者ノードの集団よりも多くのCPUパワーを集合的に制御している限り安全である。

Introduction

การพาณิชย์บนอินเทอร์เน็ตได้พึ่งพาสถาบันการเงินที่ทำหน้าที่เป็นบุคคลที่สามที่เชื่อถือได้ในการประมวลผลการชำระเงินอิเล็กทรอนิกส์เกือบทั้งหมด แม้ว่าระบบจะทำงานได้ดีเพียงพอสำหรับธุรกรรมส่วนใหญ่ แต่ก็ยังคงประสบปัญหาจากจุดอ่อนโดยธรรมชาติของโมเดลที่อิงความไว้วางใจ ธุรกรรมที่ไม่สามารถย้อนกลับได้อย่างสมบูรณ์นั้นไม่สามารถเป็นไปได้จริง เนื่องจากสถาบันการเงินไม่สามารถหลีกเลี่ยงการไกล่เกลี่ยข้อพิพาทได้ ต้นทุนของการไกล่เกลี่ยเพิ่มต้นทุนธุรกรรม จำกัดขนาดธุรกรรมขั้นต่ำที่ใช้งานได้จริงและตัดความเป็นไปได้ของธุรกรรมเล็กน้อยทั่วไป และยังมีต้นทุนที่กว้างขึ้นในการสูญเสียความสามารถในการชำระเงินที่ไม่สามารถย้อนกลับได้สำหรับบริการที่ไม่สามารถย้อนกลับได้ ด้วยความเป็นไปได้ของการย้อนกลับ ความต้องการความไว้วางใจจึงแพร่กระจาย ผู้ค้าต้องระวังลูกค้าของตน รบกวนพวกเขาเพื่อขอข้อมูลมากกว่าที่พวกเขาต้องการ เปอร์เซ็นต์หนึ่งของการฉ้อโกงถูกยอมรับว่าหลีกเลี่ยงไม่ได้ ต้นทุนเหล่านี้และความไม่แน่นอนของการชำระเงินสามารถหลีกเลี่ยงได้เมื่อทำธุรกรรมด้วยตนเองโดยใช้สกุลเงินจริง แต่ไม่มีกลไกใดที่จะทำการชำระเงินผ่านช่องทางการสื่อสารโดยไม่มีฝ่ายที่เชื่อถือได้

สิ่งที่จำเป็นคือระบบการชำระเงินอิเล็กทรอนิกส์ที่อิงหลักฐานการเข้ารหัสแทนความไว้วางใจ ซึ่งอนุญาตให้สองฝ่ายที่เต็มใจทำธุรกรรมโดยตรงกับกันโดยไม่ต้องการบุคคลที่สามที่เชื่อถือได้ ธุรกรรมที่ไม่สามารถย้อนกลับได้ในทางคอมพิวเตอร์จะปกป้องผู้ขายจากการฉ้อโกง และกลไก escrow ตามปกติสามารถนำมาใช้ได้อย่างง่ายดายเพื่อปกป้องผู้ซื้อ ในบทความนี้ เราเสนอวิธีแก้ปัญหา double-spending โดยใช้เซิร์ฟเวอร์ประทับเวลาแบบกระจาย peer-to-peer เพื่อสร้างหลักฐานทางการคำนวณของลำดับเวลาของธุรกรรม ระบบจะปลอดภัยตราบใดที่ node ที่ซื่อสัตย์ร่วมกันควบคุมพลังงาน CPU มากกว่ากลุ่ม node ผู้โจมตีใดๆ ที่ร่วมมือกัน

Transactions

我々は電子コインをデジタル署名のチェーンとして定義する。各所有者は、前のトランザクションのhashと次の所有者の公開鍵にデジタル署名し、これらをコインの末尾に追加することで、次の所有者にコインを転送する。受取人は署名を検証することで所有権のチェーンを検証できる。

Bitcoin transaction chain showing the signature-linked ownership transfer model

もちろん問題は、受取人が所有者の一人がコインを二重支払いしていないことを検証できないことである。一般的な解決策は、すべてのトランザクションの二重支払いをチェックする信頼できる中央機関、つまり造幣局を導入することである。各トランザクションの後、コインは新しいコインを発行するために造幣局に返却されなければならず、造幣局から直接発行されたコインのみが二重支払いされていないと信頼される。この解決策の問題は、銀行と同様に、すべてのトランザクションがそこを経由しなければならず、貨幣システム全体の運命が造幣局を運営する企業に依存することである。

我々は、受取人が以前の所有者がそれ以前のトランザクションに署名していないことを知る方法を必要とする。我々の目的においては、最も早いトランザクションが有効であり、それ以降の二重支払いの試みは問題としない。トランザクションが存在しないことを確認する唯一の方法は、すべてのトランザクションを認識することである。造幣局ベースのモデルでは、造幣局がすべてのトランザクションを認識し、どれが最初に到着したかを決定していた。信頼できる当事者なしにこれを達成するためには、トランザクションは公開で通知されなければならず[^1]、参加者がトランザクションの受信順序の単一の履歴に合意するシステムが必要である。受取人は、各トランザクションの時点で、ノードの過半数がそれを最初に受信したものとして合意したことの証明を必要とする。

Transactions

เรานิยามเหรียญอิเล็กทรอนิกส์เป็นห่วงโซ่ของลายเซ็นดิจิทัล เจ้าของแต่ละคนโอนเหรียญไปยังเจ้าของคนถัดไปโดยการเซ็นดิจิทัลบน hash ของธุรกรรมก่อนหน้าและ public key ของเจ้าของคนถัดไป แล้วเพิ่มสิ่งเหล่านี้ต่อท้ายเหรียญ ผู้รับเงินสามารถตรวจสอบลายเซ็นเพื่อยืนยันห่วงโซ่ความเป็นเจ้าของได้

Bitcoin transaction chain showing the signature-linked ownership transfer model

ปัญหาแน่นอนคือผู้รับเงินไม่สามารถยืนยันได้ว่าเจ้าของคนใดคนหนึ่งไม่ได้ใช้จ่ายเหรียญซ้ำ (double-spend) วิธีแก้ปัญหาทั่วไปคือการแนะนำหน่วยงานกลางที่เชื่อถือได้ หรือโรงกษาปณ์ ที่ตรวจสอบทุกธุรกรรมสำหรับการใช้จ่ายซ้ำ หลังจากแต่ละธุรกรรม เหรียญจะต้องถูกส่งคืนโรงกษาปณ์เพื่อออกเหรียญใหม่ และเฉพาะเหรียญที่ออกโดยตรงจากโรงกษาปณ์เท่านั้นที่ถูกเชื่อถือว่าไม่ได้ถูกใช้จ่ายซ้ำ ปัญหาของวิธีแก้ปัญหานี้คือชะตากรรมของระบบการเงินทั้งหมดขึ้นอยู่กับบริษัทที่ดำเนินการโรงกษาปณ์ โดยทุกธุรกรรมต้องผ่านพวกเขา เช่นเดียวกับธนาคาร

เราต้องการวิธีให้ผู้รับเงินรู้ว่าเจ้าของก่อนหน้าไม่ได้ลงนามในธุรกรรมใดๆ ก่อนหน้านี้ สำหรับวัตถุประสงค์ของเรา ธุรกรรมที่เร็วที่สุดคือธุรกรรมที่นับ ดังนั้นเราจึงไม่สนใจความพยายามในการใช้จ่ายซ้ำในภายหลัง วิธีเดียวที่จะยืนยันการไม่มีอยู่ของธุรกรรมคือการรับรู้ธุรกรรมทั้งหมด ในโมเดลที่ใช้โรงกษาปณ์ โรงกษาปณ์รับรู้ธุรกรรมทั้งหมดและตัดสินว่าธุรกรรมใดมาถึงก่อน เพื่อทำสิ่งนี้โดยไม่ต้องมีบุคคลที่สามที่เชื่อถือได้ ธุรกรรมต้องถูกประกาศต่อสาธารณะ [^1] และเราต้องการระบบสำหรับผู้เข้าร่วมเพื่อตกลงกันในประวัติเดียวของลำดับที่ได้รับ ผู้รับเงินต้องการหลักฐานว่าในเวลาของแต่ละธุรกรรม node ส่วนใหญ่เห็นด้วยว่ามันเป็นธุรกรรมที่ได้รับเป็นอันดับแรก

Timestamp Server

我々が提案する解決策はタイムスタンプサーバーから始まる。タイムスタンプサーバーは、タイムスタンプを付与するアイテムのブロックのhashを取得し、新聞やUsenetへの投稿のようにそのhashを広く公開することで機能する[^2] [^3] [^4] [^5]。タイムスタンプは、hashに含まれるためにそのデータがその時点で存在していたことを明らかに証明する。各タイムスタンプはそのhash内に前のタイムスタンプを含み、チェーンを形成し、追加のタイムスタンプごとにそれ以前のものを強化する。

Bitcoin timestamp server hash-chain diagram linking blocks and items

Timestamp Server

วิธีแก้ปัญหาที่เราเสนอเริ่มต้นด้วยเซิร์ฟเวอร์ประทับเวลา เซิร์ฟเวอร์ประทับเวลาทำงานโดยการนำ hash ของบล็อกรายการที่จะถูกประทับเวลาและเผยแพร่ hash อย่างกว้างขวาง เช่น ในหนังสือพิมพ์หรือโพสต์ Usenet [^2] [^3] [^4] [^5] การประทับเวลาพิสูจน์ว่าข้อมูลต้องมีอยู่ในเวลานั้น อย่างเห็นได้ชัด เพื่อที่จะเข้าไปใน hash ได้ แต่ละการประทับเวลารวมการประทับเวลาก่อนหน้าไว้ใน hash ของมัน สร้างเป็นห่วงโซ่ โดยแต่ละการประทับเวลาเพิ่มเติมจะเสริมความแข็งแกร่งให้กับการประทับเวลาก่อนหน้า

Bitcoin timestamp server hash-chain diagram linking blocks and items

Proof-of-Work

peer-to-peerベースで分散タイムスタンプサーバーを実装するには、新聞やUsenetの投稿ではなく、Adam BackのHashcash [^6]に類似したproof-of-workシステムを使用する必要がある。proof-of-workは、hash化した際に(例えばSHA-256で)hashが一定数のゼロビットで始まる値を探索することを含む。必要な平均作業量はゼロビット数に対して指数関数的であり、単一のhashを実行することで検証できる。

我々のタイムスタンプネットワークでは、ブロック内のnonceをインクリメントし、ブロックのhashに必要なゼロビットを与える値が見つかるまで繰り返すことでproof-of-workを実装する。proof-of-workを満たすためにCPUの労力が費やされると、その作業をやり直さない限りブロックを変更することはできない。後続のブロックがその後にチェーンされるため、ブロックを変更するための作業にはそれ以降のすべてのブロックをやり直すことが含まれる。

Bitcoin proof-of-work block chain diagram with previous hash transaction set and nonce

proof-of-workは、多数決における代表性の決定問題も解決する。もし多数決が1つのIPアドレスにつき1票に基づいていたならば、多数のIPを割り当てられる者によって覆される可能性がある。proof-of-workは本質的に1つのCPUにつき1票である。多数決は最長のチェーン、すなわち最大のproof-of-work労力が投入されたチェーンによって表される。CPUパワーの過半数が正直なノードによって制御されていれば、正直なチェーンが最も速く成長し、競合するいかなるチェーンも凌駕する。過去のブロックを改変するには、攻撃者はそのブロックとそれ以降のすべてのブロックのproof-of-workをやり直し、さらに正直なノードの作業に追いつき追い越さなければならない。遅い攻撃者が追いつく確率は、後続のブロックが追加されるにつれて指数関数的に減少することを後に示す。

ハードウェア速度の向上と、時間の経過に伴うノード運用への関心の変動を補うため、proof-of-workの難易度は1時間あたりの平均ブロック数を目標とする移動平均によって決定される。生成速度が速すぎる場合、難易度は上昇する。

Proof-of-Work

ในการนำเซิร์ฟเวอร์ประทับเวลาแบบกระจายมาใช้บนพื้นฐาน peer-to-peer เราจะต้องใช้ระบบ proof-of-work ที่คล้ายกับ Hashcash ของ Adam Back [^6] แทนที่จะใช้หนังสือพิมพ์หรือโพสต์ Usenet proof-of-work เกี่ยวข้องกับการสแกนหาค่าที่เมื่อถูก hash เช่น ด้วย SHA-256 แล้ว hash จะเริ่มต้นด้วยจำนวนบิตศูนย์ที่กำหนด งานเฉลี่ยที่ต้องการจะเพิ่มขึ้นแบบเลขยกกำลังตามจำนวนบิตศูนย์ที่ต้องการ และสามารถตรวจสอบได้โดยการรัน hash เพียงครั้งเดียว

สำหรับเครือข่ายประทับเวลาของเรา เรานำ proof-of-work มาใช้โดยการเพิ่ม nonce ในบล็อกจนกว่าจะพบค่าที่ให้ hash ของบล็อกมีจำนวนบิตศูนย์ที่ต้องการ เมื่อใช้ความพยายามของ CPU ไปเพื่อให้ตรงตาม proof-of-work แล้ว บล็อกจะไม่สามารถเปลี่ยนแปลงได้โดยไม่ทำงานใหม่ เมื่อบล็อกถัดไปถูกเชื่อมต่อหลังจากมัน งานในการเปลี่ยนแปลงบล็อกจะรวมถึงการทำใหม่ทั้งหมดของบล็อกหลังจากมัน

Bitcoin proof-of-work block chain diagram with previous hash transaction set and nonce

Proof-of-work ยังแก้ปัญหาการกำหนดตัวแทนในการตัดสินใจแบบเสียงข้างมากด้วย หากเสียงข้างมากใช้พื้นฐานหนึ่ง-IP-หนึ่ง-เสียง มันสามารถถูกบ่อนทำลายโดยใครก็ตามที่สามารถจัดสรร IP จำนวนมากได้ Proof-of-work โดยพื้นฐานคือหนึ่ง-CPU-หนึ่ง-เสียง การตัดสินใจของเสียงข้างมากถูกแทนด้วยห่วงโซ่ที่ยาวที่สุด ซึ่งมีความพยายาม proof-of-work มากที่สุดที่ลงทุนไว้ หากพลังงาน CPU ส่วนใหญ่ถูกควบคุมโดย node ที่ซื่อสัตย์ ห่วงโซ่ที่ซื่อสัตย์จะเติบโตเร็วที่สุดและแซงหน้าห่วงโซ่คู่แข่งใดๆ ในการแก้ไขบล็อกในอดีต ผู้โจมตีจะต้องทำ proof-of-work ของบล็อกนั้นและบล็อกทั้งหมดหลังจากมันใหม่ แล้วจึงไล่ตามและแซงหน้างานของ node ที่ซื่อสัตย์ เราจะแสดงในภายหลังว่าความน่าจะเป็นที่ผู้โจมตีที่ช้ากว่าจะไล่ทันจะลดลงแบบเลขยกกำลังเมื่อบล็อกถัดไปถูกเพิ่มเข้ามา

เพื่อชดเชยความเร็วฮาร์ดแวร์ที่เพิ่มขึ้นและความสนใจที่เปลี่ยนแปลงในการรัน node ตามเวลา ความยากของ proof-of-work ถูกกำหนดโดยค่าเฉลี่ยเคลื่อนที่ที่กำหนดเป้าหมายจำนวนบล็อกเฉลี่ยต่อชั่วโมง หากสร้างเร็วเกินไป ความยากจะเพิ่มขึ้น

Network

ネットワークを運用する手順は以下の通りである:

  1. 新しいトランザクションがすべてのノードにブロードキャストされる。
  2. 各ノードが新しいトランザクションをブロックに収集する。
  3. 各ノードがそのブロックに対する困難なproof-of-workの発見に取り組む。
  4. ノードがproof-of-workを発見すると、そのブロックをすべてのノードにブロードキャストする。
  5. ノードは、ブロック内のすべてのトランザクションが有効であり、まだ使用されていない場合にのみ、そのブロックを承認する。
  6. ノードは、承認されたブロックのhashを前のhashとして使用し、チェーンの次のブロックの作成に取り組むことで、そのブロックの承認を表明する。

ノードは常に最長のチェーンを正しいものとみなし、その延長に取り組み続ける。2つのノードが異なるバージョンの次のブロックを同時にブロードキャストした場合、一部のノードはどちらか一方を先に受信する可能性がある。その場合、ノードは最初に受信した方に取り組むが、もう一方のブランチがより長くなった場合に備えて保存しておく。次のproof-of-workが発見され、一方のブランチがより長くなった時点で決着がつき、もう一方のブランチで作業していたノードはより長い方に切り替える。

新しいトランザクションのブロードキャストは、必ずしもすべてのノードに到達する必要はない。多くのノードに到達すれば、やがてブロックに取り込まれる。ブロックのブロードキャストもメッセージの欠落に対して寛容である。ノードがブロックを受信しなかった場合、次のブロックを受信した際に欠落に気づき、そのブロックを要求する。

Network

ขั้นตอนในการดำเนินเครือข่ายมีดังนี้:

  1. ธุรกรรมใหม่ถูกประกาศไปยัง node ทั้งหมด
  2. แต่ละ node รวบรวมธุรกรรมใหม่เข้าไปในบล็อก
  3. แต่ละ node ทำงานเพื่อหา proof-of-work ที่ยากสำหรับบล็อกของตน
  4. เมื่อ node หนึ่งพบ proof-of-work มันจะประกาศบล็อกไปยัง node ทั้งหมด
  5. Node ยอมรับบล็อกเฉพาะเมื่อธุรกรรมทั้งหมดในนั้นถูกต้องและยังไม่ถูกใช้จ่าย
  6. Node แสดงการยอมรับบล็อกโดยการทำงานสร้างบล็อกถัดไปในห่วงโซ่ โดยใช้ hash ของบล็อกที่ยอมรับเป็น hash ก่อนหน้า

Node จะถือว่าห่วงโซ่ที่ยาวที่สุดเป็นห่วงโซ่ที่ถูกต้องเสมอ และจะทำงานต่อไปเพื่อขยายมัน หากสอง node ประกาศเวอร์ชันที่แตกต่างกันของบล็อกถัดไปพร้อมกัน node บางตัวอาจได้รับเวอร์ชันหนึ่งหรืออีกเวอร์ชันก่อน ในกรณีนั้น พวกเขาทำงานบนเวอร์ชันที่ได้รับก่อน แต่บันทึกสาขาอื่นไว้ในกรณีที่มันยาวกว่า สถานการณ์เสมอกันจะถูกทำลายเมื่อ proof-of-work ถัดไปถูกพบและสาขาหนึ่งยาวกว่า node ที่ทำงานบนสาขาอื่นจะเปลี่ยนไปยังสาขาที่ยาวกว่า

การประกาศธุรกรรมใหม่ไม่จำเป็นต้องไปถึง node ทั้งหมด ตราบใดที่มันไปถึง node จำนวนมาก มันจะเข้าไปในบล็อกในไม่ช้า การประกาศบล็อกก็ทนต่อข้อความที่สูญหายเช่นกัน หาก node ไม่ได้รับบล็อก มันจะร้องขอเมื่อได้รับบล็อกถัดไปและตระหนักว่าพลาดบล็อกหนึ่งไป

Incentive

慣例により、ブロック内の最初のトランザクションは、ブロックの作成者が所有する新しいコインを生成する特別なトランザクションである。これはノードがネットワークを支援するインセンティブを追加し、発行する中央機関が存在しないため、コインを流通させる初期分配の方法を提供する。一定量の新しいコインの着実な追加は、金鉱夫が資源を費やして金を流通に追加することに類似している。我々の場合、費やされるのはCPU時間と電力である。

インセンティブはトランザクション手数料でも賄うことができる。トランザクションの出力値がその入力値よりも小さい場合、差額はそのトランザクションを含むブロックのインセンティブ値に加算されるトランザクション手数料となる。所定の数のコインが流通に入った後、インセンティブは完全にトランザクション手数料に移行し、完全にインフレーションフリーとなることができる。

インセンティブはノードが正直であり続けることを促す助けとなりうる。貪欲な攻撃者がすべての正直なノードよりも多くのCPUパワーを集めることができた場合、その力を使って自身の支払いを取り戻す詐欺を行うか、新しいコインの生成に使用するかを選択しなければならない。ルールに従って行動する方がより収益性が高いと判断するはずであり、そのようなルールは他の全員を合わせたよりも多くの新しいコインを彼に有利に与えるのであって、システムと自身の富の正当性を損なうよりもましである。

Incentive

ตามธรรมเนียม ธุรกรรมแรกในบล็อกเป็นธุรกรรมพิเศษที่เริ่มต้นเหรียญใหม่ที่เป็นของผู้สร้างบล็อก สิ่งนี้เพิ่มแรงจูงใจให้ node สนับสนุนเครือข่าย และเป็นวิธีในการแจกจ่ายเหรียญเข้าสู่การหมุนเวียนในเบื้องต้น เนื่องจากไม่มีหน่วยงานกลางที่จะออกเหรียญ การเพิ่มจำนวนเหรียญใหม่คงที่อย่างสม่ำเสมอนั้นคล้ายคลึงกับนักขุดทองที่ใช้ทรัพยากรเพื่อเพิ่มทองเข้าสู่การหมุนเวียน ในกรณีของเรา คือเวลา CPU และไฟฟ้าที่ถูกใช้ไป

แรงจูงใจยังสามารถได้รับการสนับสนุนจากค่าธรรมเนียมธุรกรรม หากมูลค่าเอาต์พุตของธุรกรรมน้อยกว่ามูลค่าอินพุต ส่วนต่างคือค่าธรรมเนียมธุรกรรมที่ถูกเพิ่มเข้าไปในมูลค่าแรงจูงใจของบล็อกที่มีธุรกรรมนั้น เมื่อจำนวนเหรียญที่กำหนดไว้ล่วงหน้าเข้าสู่การหมุนเวียนแล้ว แรงจูงใจสามารถเปลี่ยนไปเป็นค่าธรรมเนียมธุรกรรมทั้งหมดและปราศจากเงินเฟ้อโดยสมบูรณ์

แรงจูงใจอาจช่วยส่งเสริมให้ node รักษาความซื่อสัตย์ หากผู้โจมตีที่โลภสามารถรวบรวมพลังงาน CPU ได้มากกว่า node ที่ซื่อสัตย์ทั้งหมด เขาจะต้องเลือกระหว่างการใช้มันเพื่อหลอกลวงผู้คนโดยการขโมยเงินที่จ่ายไปคืน หรือใช้มันเพื่อสร้างเหรียญใหม่ เขาควรพบว่าการเล่นตามกติกาจะมีกำไรมากกว่า กติกาที่ให้เขาได้รับเหรียญใหม่มากกว่าคนอื่นทั้งหมดรวมกัน แทนที่จะบ่อนทำลายระบบและความถูกต้องของทรัพย์สินของตนเอง

Reclaiming Disk Space

コイン内の最新のトランザクションが十分な数のブロックの下に埋まれば、それ以前の使用済みトランザクションはディスクスペースを節約するために破棄できる。ブロックのhashを壊さずにこれを実現するため、トランザクションはMerkle Tree [^7] [^2] [^5]にhash化され、ルートのみがブロックのhashに含まれる。古いブロックはツリーの枝を切り落とすことでコンパクトにできる。内部のhashは保存する必要がない。

Bitcoin Merkle Tree diagram showing transaction hashing and block pruning by stubbing off branches

トランザクションを含まないブロックヘッダーは約80バイトとなる。ブロックが10分ごとに生成されると仮定すると、80バイト * 6 * 24 * 365 = 年間4.2MBとなる。2008年時点でコンピュータシステムが一般的に2GBのRAMを搭載して販売されており、ムーアの法則が年間1.2GBの現在の成長を予測していることを考えると、ブロックヘッダーをメモリに保持しなければならないとしてもストレージは問題とはならない。

Reclaiming Disk Space

เมื่อธุรกรรมล่าสุดในเหรียญถูกฝังอยู่ใต้บล็อกจำนวนมากเพียงพอ ธุรกรรมที่ถูกใช้จ่ายก่อนหน้านั้นสามารถถูกทิ้งเพื่อประหยัดพื้นที่ดิสก์ เพื่ออำนวยความสะดวกในเรื่องนี้โดยไม่ทำลาย hash ของบล็อก ธุรกรรมถูก hash ใน Merkle Tree [^7] [^2] [^5] โดยมีเฉพาะ root เท่านั้นที่ถูกรวมไว้ใน hash ของบล็อก บล็อกเก่าสามารถถูกบีบอัดโดยการตัดกิ่งของต้นไม้ออก hash ภายในไม่จำเป็นต้องถูกจัดเก็บ

Bitcoin Merkle Tree diagram showing transaction hashing and block pruning by stubbing off branches

ส่วนหัวบล็อกที่ไม่มีธุรกรรมจะมีขนาดประมาณ 80 ไบต์ หากเราสมมติว่าบล็อกถูกสร้างทุก 10 นาที 80 ไบต์ * 6 * 24 * 365 = 4.2MB ต่อปี ด้วยระบบคอมพิวเตอร์ที่มักจะขายพร้อม RAM 2GB ณ ปี 2008 และกฎของมัวร์ที่คาดการณ์การเติบโตปัจจุบันที่ 1.2GB ต่อปี การจัดเก็บไม่ควรเป็นปัญหาแม้ว่าส่วนหัวบล็อกจะต้องถูกเก็บไว้ในหน่วยความจำ

Simplified Payment Verification

完全なネットワークノードを稼働させずに支払いを検証することが可能である。ユーザーは最長のproof-of-workチェーンのブロックヘッダーのコピーのみを保持すればよく、最長のチェーンを持っていると確信するまでネットワークノードに問い合わせることで取得でき、トランザクションをそれがタイムスタンプされたブロックにリンクするMerkleブランチを取得できる。ユーザー自身がトランザクションを確認することはできないが、チェーン内の場所にリンクすることで、ネットワークノードがそれを承認したことを確認でき、その後に追加されたブロックがネットワークがそれを承認したことをさらに裏付ける。

Bitcoin simplified payment verification showing the longest proof-of-work chain with Merkle branch linking to a transaction

そのため、正直なノードがネットワークを制御している限り検証は信頼できるが、ネットワークが攻撃者に圧倒された場合はより脆弱になる。ネットワークノードはトランザクションを自ら検証できるが、この簡易的な方法は、攻撃者がネットワークを圧倒し続けられる限り、攻撃者が捏造したトランザクションに欺かれる可能性がある。これに対する防御戦略の一つは、ネットワークノードが無効なブロックを検出した際にアラートを受け入れ、ユーザーのソフトウェアに完全なブロックとアラートされたトランザクションをダウンロードさせ、不整合を確認することである。頻繁に支払いを受ける企業は、より独立したセキュリティと迅速な検証のために、おそらく自社のノードを運用することを望むだろう。

Simplified Payment Verification

เป็นไปได้ที่จะตรวจสอบการชำระเงินโดยไม่ต้องรัน node เครือข่ายเต็มรูปแบบ ผู้ใช้เพียงแค่ต้องเก็บสำเนาส่วนหัวบล็อกของห่วงโซ่ proof-of-work ที่ยาวที่สุด ซึ่งสามารถได้รับโดยการสอบถาม node เครือข่ายจนกว่าจะมั่นใจว่ามีห่วงโซ่ที่ยาวที่สุด และได้รับสาขา Merkle ที่เชื่อมต่อธุรกรรมกับบล็อกที่มันถูกประทับเวลา ผู้ใช้ไม่สามารถตรวจสอบธุรกรรมด้วยตนเองได้ แต่โดยการเชื่อมต่อมันกับตำแหน่งในห่วงโซ่ เขาจะเห็นว่า node เครือข่ายได้ยอมรับมัน และบล็อกที่เพิ่มหลังจากนั้นยืนยันเพิ่มเติมว่าเครือข่ายได้ยอมรับมัน

Bitcoin simplified payment verification showing the longest proof-of-work chain with Merkle branch linking to a transaction

ดังนั้น การตรวจสอบจึงเชื่อถือได้ตราบใดที่ node ที่ซื่อสัตย์ควบคุมเครือข่าย แต่จะเปราะบางมากขึ้นหากเครือข่ายถูกครอบงำโดยผู้โจมตี ในขณะที่ node เครือข่ายสามารถตรวจสอบธุรกรรมด้วยตนเอง วิธีการที่ง่ายขึ้นสามารถถูกหลอกโดยธุรกรรมปลอมของผู้โจมตีตราบใดที่ผู้โจมตีสามารถครอบงำเครือข่ายต่อไปได้ กลยุทธ์หนึ่งในการป้องกันสิ่งนี้คือการรับการแจ้งเตือนจาก node เครือข่ายเมื่อพวกเขาตรวจพบบล็อกที่ไม่ถูกต้อง กระตุ้นให้ซอฟต์แวร์ของผู้ใช้ดาวน์โหลดบล็อกเต็มและธุรกรรมที่ถูกแจ้งเตือนเพื่อยืนยันความไม่สอดคล้องกัน ธุรกิจที่รับการชำระเงินบ่อยครั้งอาจยังคงต้องการรัน node ของตนเองเพื่อความปลอดภัยที่เป็นอิสระมากขึ้นและการตรวจสอบที่รวดเร็วขึ้น

Combining and Splitting Value

コインを個別に扱うことは可能であるが、送金の1セントごとに別々のトランザクションを作成するのは扱いにくい。価値の分割と結合を可能にするため、トランザクションには複数の入力と出力が含まれる。通常、より大きな前のトランザクションからの単一の入力か、より小さな金額を結合する複数の入力があり、出力は最大で2つ:支払い用の1つと、もしあればお釣りを送信者に返す1つである。

Bitcoin transaction combining and splitting value with multiple inputs and outputs

あるトランザクションが複数のトランザクションに依存し、それらのトランザクションがさらに多くのトランザクションに依存するファンアウトは、ここでは問題にならないことに注意すべきである。トランザクションの完全な独立したコピーを抽出する必要は決してない。

Combining and Splitting Value

แม้ว่าจะเป็นไปได้ที่จะจัดการเหรียญแต่ละเหรียญ แต่การทำธุรกรรมแยกต่างหากสำหรับทุกเซ็นต์ในการโอนจะยุ่งยาก เพื่อให้มูลค่าสามารถแบ่งและรวมได้ ธุรกรรมประกอบด้วยอินพุตและเอาต์พุตหลายรายการ โดยปกติจะมีอินพุตเดียวจากธุรกรรมก่อนหน้าที่มีมูลค่ามากกว่า หรืออินพุตหลายรายการที่รวมจำนวนเงินที่น้อยกว่า และเอาต์พุตไม่เกินสองรายการ: หนึ่งสำหรับการชำระเงิน และหนึ่งสำหรับคืนเงินทอน ถ้ามี กลับไปยังผู้ส่ง

Bitcoin transaction combining and splitting value with multiple inputs and outputs

ควรสังเกตว่า fan-out ที่ธุรกรรมขึ้นอยู่กับหลายธุรกรรม และธุรกรรมเหล่านั้นขึ้นอยู่กับอีกมากมาย ไม่ใช่ปัญหาที่นี่ ไม่จำเป็นต้องแยกสำเนาประวัติธุรกรรมที่สมบูรณ์แบบแยกต่างหาก

Privacy

従来の銀行モデルは、関係当事者と信頼できる第三者に情報へのアクセスを制限することで一定レベルのプライバシーを実現している。すべてのトランザクションを公開で通知する必要性はこの方法を不可能にするが、別の場所で情報の流れを断ち切ることでプライバシーを維持することは可能である:公開鍵を匿名に保つことによってである。誰かが他の誰かに金額を送金していることは公開で見ることができるが、そのトランザクションを個人に結びつける情報はない。これは、証券取引所が公開する情報レベルに類似しており、個々の取引の時間と規模、すなわち「ティッカーテープ」は公開されるが、当事者が誰であるかは明かされない。

Bitcoin privacy model comparison showing traditional model with trusted third party versus new model with anonymous public keys

追加のファイアウォールとして、各トランザクションに新しいキーペアを使用し、共通の所有者にリンクされることを防ぐべきである。複数入力のトランザクションでは、一部のリンクは依然として不可避であり、それらの入力が同一の所有者のものであったことが必然的に明らかになる。リスクは、鍵の所有者が明らかになった場合、リンクによって同一の所有者に属する他のトランザクションが明らかになる可能性があることである。

Privacy

โมเดลธนาคารแบบดั้งเดิมบรรลุระดับความเป็นส่วนตัวโดยการจำกัดการเข้าถึงข้อมูลเฉพาะฝ่ายที่เกี่ยวข้องและบุคคลที่สามที่เชื่อถือได้ ความจำเป็นในการประกาศธุรกรรมทั้งหมดต่อสาธารณะทำให้วิธีนี้ไม่สามารถใช้ได้ แต่ความเป็นส่วนตัวยังคงสามารถรักษาได้โดยการตัดกระแสข้อมูลในจุดอื่น: โดยการรักษา public key ให้เป็นนิรนาม สาธารณชนสามารถเห็นว่าใครบางคนกำลังส่งจำนวนเงินให้คนอื่น แต่ไม่มีข้อมูลที่เชื่อมโยงธุรกรรมกับใครก็ตาม สิ่งนี้คล้ายกับระดับข้อมูลที่เปิดเผยโดยตลาดหลักทรัพย์ ที่ซึ่งเวลาและขนาดของการซื้อขายแต่ละรายการ หรือ "เทป" ถูกเปิดเผยต่อสาธารณะ แต่ไม่บอกว่าฝ่ายต่างๆ เป็นใคร

Bitcoin privacy model comparison showing traditional model with trusted third party versus new model with anonymous public keys

เป็นไฟร์วอลล์เพิ่มเติม ควรใช้คู่กุญแจใหม่สำหรับแต่ละธุรกรรมเพื่อป้องกันไม่ให้ถูกเชื่อมโยงกับเจ้าของร่วมกัน การเชื่อมโยงบางส่วนยังคงหลีกเลี่ยงไม่ได้กับธุรกรรมที่มีหลายอินพุต ซึ่งจำเป็นต้องเปิดเผยว่าอินพุตของพวกเขาเป็นของเจ้าของคนเดียวกัน ความเสี่ยงคือหากเจ้าของกุญแจถูกเปิดเผย การเชื่อมโยงอาจเปิดเผยธุรกรรมอื่นที่เป็นของเจ้าของคนเดียวกัน

Calculations

攻撃者が正直なチェーンよりも速く代替チェーンを生成しようとするシナリオを考える。これが達成されたとしても、無から価値を創造したり、攻撃者に属さない金銭を奪うなど、システムが恣意的な変更に開かれるわけではない。ノードは無効なトランザクションを支払いとして受け入れず、正直なノードはそれを含むブロックを決して受け入れない。攻撃者は、自分自身のトランザクションの1つを変更して最近使った金銭を取り戻すことしか試みることができない。

正直なチェーンと攻撃者のチェーンの競争は二項ランダムウォークとして特徴づけることができる。成功事象は正直なチェーンが1ブロック延長されリードが+1増加すること、失敗事象は攻撃者のチェーンが1ブロック延長され差が-1縮小することである。

攻撃者が所定の不足分から追いつく確率は、ギャンブラーの破産問題に類似している。無限の信用を持つギャンブラーが不足分から出発し、損益分岐点に達しようと無限の試行を行うと仮定する。損益分岐点に達する確率、つまり攻撃者が正直なチェーンに追いつく確率は以下のように計算できる[^8]:

p = probability an honest node finds the next block
q = probability the attacker finds the next block
q = probability the attacker will ever catch up from z blocks behind
``````

\[
qz =
\begin{cases}
1 & \text{if } p \leq q \\
\left(\frac{q}{p}\right) z & \text{if } p > q
\end{cases}
\]

p  qという我々の仮定の下では、攻撃者が追いつかなければならないブロック数が増加するにつれて確率は指数関数的に低下する。不利な状況において、早い段階で幸運にも前進できなければ、遅れるにつれてその可能性は極めて小さくなる。

次に、新しいトランザクションの受取人が、送信者がトランザクションを変更できないと十分に確信するまでにどのくらい待つ必要があるかを考える。送信者は、受取人にしばらくの間支払ったと信じさせた後、一定時間の経過後に自分自身への支払いに切り替えたい攻撃者であると仮定する。受信者はそれが起こった時にアラートを受けるが、送信者はそれが手遅れであることを望んでいる。

受信者は新しいキーペアを生成し、署名の直前に送信者に公開鍵を渡す。これにより、送信者が十分先行できるほどの幸運を得るまで継続的にブロックのチェーンを事前に準備し、そのタイミングでトランザクションを実行することを防ぐ。トランザクションが送信されると、不正な送信者は自分のトランザクションの代替バージョンを含む並行チェーンを秘密裏に作成する作業を開始する。

受取人はトランザクションがブロックに追加され、その後にzブロックがリンクされるまで待つ。攻撃者が正確にどの程度進んでいるかは分からないが、正直なブロックがブロックあたりの平均予想時間を要したと仮定すると、攻撃者の潜在的な進捗は期待値が次のPoisson分布となる:

\[
\lambda = z\frac{q}{p}
\]

攻撃者が今なお追いつける確率を求めるために、攻撃者が到達しうる各進捗量のPoisson密度に、その地点から追いつける確率を乗じる:

\[
\sum_{k=0}^{\infty} \frac{\lambda^k e^{-\lambda}}{k!} \cdot \left\{
\begin{array}{cl}
\left(\frac{q}{p}\right)^{(z-k)} & \text{if } k \leq z \\
1 & \text{if } k > z
\end{array}
\right.
\]

分布の無限の裾を合計することを避けるために整理すると...

\[
1 - \sum_{k=0}^{z} \frac{\lambda^k e^{-\lambda}}{k!} \left(1-\left(\frac{q}{p}\right)^{(z-k)}\right)
\]

C言語コードに変換すると...

```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;
}

いくつかの結果を実行すると、確率が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

Pが0.1%未満となるzを求めると...

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

Calculations

เราพิจารณาสถานการณ์ที่ผู้โจมตีพยายามสร้างห่วงโซ่ทางเลือกเร็วกว่าห่วงโซ่ที่ซื่อสัตย์ แม้ว่าจะสำเร็จ มันก็ไม่ได้เปิดระบบให้มีการเปลี่ยนแปลงตามอำเภอใจ เช่น การสร้างมูลค่าจากอากาศ หรือการนำเงินที่ไม่เคยเป็นของผู้โจมตี Node จะไม่ยอมรับธุรกรรมที่ไม่ถูกต้องเป็นการชำระเงิน และ node ที่ซื่อสัตย์จะไม่มีวันยอมรับบล็อกที่มีธุรกรรมเหล่านั้น ผู้โจมตีสามารถพยายามเปลี่ยนแปลงธุรกรรมของตนเองเพียงรายการเดียวเพื่อนำเงินที่เพิ่งใช้จ่ายไปกลับคืนมาเท่านั้น

การแข่งขันระหว่างห่วงโซ่ที่ซื่อสัตย์และห่วงโซ่ของผู้โจมตีสามารถอธิบายได้เป็น Binomial Random Walk เหตุการณ์ที่ประสบความสำเร็จคือห่วงโซ่ที่ซื่อสัตย์ถูกขยายออกหนึ่งบล็อก เพิ่มระยะนำขึ้น +1 และเหตุการณ์ที่ล้มเหลวคือห่วงโซ่ของผู้โจมตีถูกขยายออกหนึ่งบล็อก ลดช่องว่างลง -1

ความน่าจะเป็นที่ผู้โจมตีจะไล่ทันจากส่วนต่างที่กำหนดนั้นคล้ายกับปัญหาการล้มละลายของนักพนัน สมมติว่านักพนันที่มีเครดิตไม่จำกัดเริ่มต้นที่ส่วนต่างและเล่นจำนวนรอบที่อาจเป็นอนันต์เพื่อพยายามไปถึงจุดคุ้มทุน เราสามารถคำนวณความน่าจะเป็นที่เขาจะไปถึงจุดคุ้มทุน หรือที่ผู้โจมตีจะไล่ทันห่วงโซ่ที่ซื่อสัตย์ ได้ดังนี้ [^8]:

p = ความน่าจะเป็นที่ node ที่ซื่อสัตย์จะพบบล็อกถัดไป
q = ความน่าจะเป็นที่ผู้โจมตีจะพบบล็อกถัดไป
q = ความน่าจะเป็นที่ผู้โจมตีจะไล่ทันจาก z บล็อกที่ตามหลัง
``````

\[
qz =
\begin{cases}
1 & \text{if } p \leq q \\
\left(\frac{q}{p}\right) z & \text{if } p > q
\end{cases}
\]

เมื่อให้สมมติฐานของเราว่า p  q ความน่าจะเป็นจะลดลงแบบเลขยกกำลังเมื่อจำนวนบล็อกที่ผู้โจมตีต้องไล่ทันเพิ่มขึ้น เมื่ออัตราต่อต้านเขา หากเขาไม่สามารถก้าวกระโดดไปข้างหน้าอย่างโชคดีตั้งแต่เนิ่นๆ โอกาสของเขาจะเล็กลงจนแทบไม่มีเมื่อเขาตามหลังมากขึ้น

ตอนนี้เราพิจารณาว่าผู้รับธุรกรรมใหม่ต้องรอนานเท่าไหร่ก่อนที่จะมั่นใจเพียงพอว่าผู้ส่งไม่สามารถเปลี่ยนแปลงธุรกรรมได้ เราสมมติว่าผู้ส่งเป็นผู้โจมตีที่ต้องการทำให้ผู้รับเชื่อว่าเขาได้จ่ายเงินให้เขาสักพักหนึ่ง แล้วเปลี่ยนไปจ่ายกลับให้ตัวเองหลังจากเวลาผ่านไป ผู้รับจะได้รับการแจ้งเตือนเมื่อเกิดเหตุการณ์นั้น แต่ผู้ส่งหวังว่ามันจะสายเกินไป

ผู้รับสร้างคู่กุญแจใหม่และให้ public key แก่ผู้ส่งไม่นานก่อนการลงนาม สิ่งนี้ป้องกันผู้ส่งจากการเตรียมห่วงโซ่ของบล็อกล่วงหน้าโดยทำงานอย่างต่อเนื่องจนกว่าจะโชคดีพอที่จะนำหน้าไปไกลพอ แล้วจึงดำเนินการธุรกรรมในขณะนั้น เมื่อธุรกรรมถูกส่งแล้ว ผู้ส่งที่ไม่ซื่อสัตย์เริ่มทำงานอย่างลับๆ บนห่วงโซ่คู่ขนานที่มีเวอร์ชันทางเลือกของธุรกรรมของเขา

ผู้รับรอจนกว่าธุรกรรมจะถูกเพิ่มลงในบล็อกและ z บล็อกถูกเชื่อมต่อหลังจากมัน เขาไม่รู้จำนวนที่แน่นอนของความก้าวหน้าที่ผู้โจมตีทำได้ แต่สมมติว่าบล็อกที่ซื่อสัตย์ใช้เวลาเฉลี่ยที่คาดหวังต่อบล็อก ความก้าวหน้าที่เป็นไปได้ของผู้โจมตีจะเป็นการแจกแจงปัวซงที่มีค่าที่คาดหวัง:

\[
\lambda = z\frac{q}{p}
\]

เพื่อหาความน่าจะเป็นที่ผู้โจมตียังสามารถไล่ทันได้ในตอนนี้ เราคูณความหนาแน่นปัวซงสำหรับแต่ละจำนวนความก้าวหน้าที่เขาอาจทำได้ด้วยความน่าจะเป็นที่เขาสามารถไล่ทันจากจุดนั้น:

\[
\sum_{k=0}^{\infty} \frac{\lambda^k e^{-\lambda}}{k!} \cdot \left\{
\begin{array}{cl}
\left(\frac{q}{p}\right)^{(z-k)} & \text{if } k \leq z \\
1 & \text{if } k > z
\end{array}
\right.
\]

จัดเรียงใหม่เพื่อหลีกเลี่ยงการรวมหางอนันต์ของการแจกแจง...

\[
1 - \sum_{k=0}^{z} \frac{\lambda^k e^{-\lambda}}{k!} \left(1-\left(\frac{q}{p}\right)^{(z-k)}\right)
\]

แปลงเป็นโค้ด C...

```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;
}

เมื่อรันผลลัพธ์บางส่วน เราจะเห็นว่าความน่าจะเป็นลดลงแบบเลขยกกำลังตาม 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

แก้สมการสำหรับ P น้อยกว่า 0.1%...

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

Conclusion

我々は信頼に依存しない電子取引のシステムを提案した。デジタル署名から作られるコインの通常のフレームワークから出発した。これは所有権の強力な管理を提供するが、二重支払いを防ぐ方法がなければ不完全である。これを解決するために、proof-of-workを用いてトランザクションの公開履歴を記録するpeer-to-peerネットワークを提案した。正直なノードがCPUパワーの過半数を制御していれば、攻撃者がそれを変更することは計算上急速に非現実的となる。ネットワークはその非構造的な単純さにおいて頑健である。ノードはほとんど協調なしに一斉に作業する。メッセージは特定の場所にルーティングされるのではなくベストエフォートで配信されるだけでよいため、ノードは識別される必要がない。ノードは自由にネットワークから離脱・再参加でき、不在中に何が起こったかの証明としてproof-of-workチェーンを受け入れる。ノードはCPUパワーで投票し、有効なブロックの延長に取り組むことでその承認を表明し、無効なブロックに対しては作業を拒否することで拒絶する。必要なルールとインセンティブはすべてこの合意メカニズムによって施行できる。

Conclusion

เราได้เสนอระบบสำหรับธุรกรรมอิเล็กทรอนิกส์โดยไม่ต้องพึ่งพาความไว้วางใจ เราเริ่มต้นด้วยกรอบการทำงานปกติของเหรียญที่สร้างจากลายเซ็นดิจิทัล ซึ่งให้การควบคุมความเป็นเจ้าของที่แข็งแกร่ง แต่ไม่สมบูรณ์หากไม่มีวิธีป้องกัน double-spending เพื่อแก้ปัญหานี้ เราเสนอเครือข่าย peer-to-peer ที่ใช้ proof-of-work เพื่อบันทึกประวัติสาธารณะของธุรกรรม ซึ่งกลายเป็นสิ่งที่ไม่สามารถทำได้ในทางคำนวณสำหรับผู้โจมตีที่จะเปลี่ยนแปลงอย่างรวดเร็ว หาก node ที่ซื่อสัตย์ควบคุมพลังงาน CPU ส่วนใหญ่ เครือข่ายมีความแข็งแกร่งในความเรียบง่ายที่ไม่มีโครงสร้าง Node ทำงานพร้อมกันทั้งหมดโดยมีการประสานงานเพียงเล็กน้อย พวกเขาไม่จำเป็นต้องถูกระบุตัวตน เนื่องจากข้อความไม่ได้ถูกส่งไปยังสถานที่ใดสถานที่หนึ่งโดยเฉพาะ และเพียงแค่ต้องถูกส่งมอบบนพื้นฐานความพยายามอย่างดีที่สุด Node สามารถออกจากและกลับเข้าร่วมเครือข่ายได้ตามต้องการ โดยยอมรับห่วงโซ่ proof-of-work เป็นหลักฐานของสิ่งที่เกิดขึ้นขณะที่พวกเขาไม่อยู่ พวกเขาลงคะแนนด้วยพลังงาน CPU ของพวกเขา แสดงการยอมรับบล็อกที่ถูกต้องโดยการทำงานขยายมัน และปฏิเสธบล็อกที่ไม่ถูกต้องโดยปฏิเสธที่จะทำงานบนมัน กฎและแรงจูงใจที่จำเป็นใดๆ สามารถบังคับใช้ด้วยกลไกฉันทามตินี้

References


  1. W. Dai, "b-money," http://www.weidai.com/bmoney.txt, 1998.

  2. H. Massias, X.S. Avila, and J.-J. Quisquater, "Design of a secure timestamping service with minimal trust requirements," In 20th Symposium on Information Theory in the Benelux, May 1999.

  3. S. Haber, W.S. Stornetta, "How to time-stamp a digital document," In Journal of Cryptology, vol 3, no 2, pages 99-111, 1991.

  4. D. Bayer, S. Haber, W.S. Stornetta, "Improving the efficiency and reliability of digital time-stamping," In Sequences II: Methods in Communication, Security and Computer Science, pages 329-334, 1993.

  5. S. Haber, W.S. Stornetta, "Secure names for bit-strings," In Proceedings of the 4th ACM Conference on Computer and Communications Security, pages 28-35, April 1997.

  6. A. Back, "Hashcash - a denial of service counter-measure," http://www.hashcash.org/papers/hashcash.pdf, 2002.

  7. R.C. Merkle, "Protocols for public key cryptosystems," In Proc. 1980 Symposium on Security and Privacy, IEEE Computer Society, pages 122-133, April 1980.

  8. W. Feller, "An introduction to probability theory and its applications," 1957.

References


  1. W. Dai, "b-money," http://www.weidai.com/bmoney.txt, 1998.

  2. H. Massias, X.S. Avila, and J.-J. Quisquater, "Design of a secure timestamping service with minimal trust requirements," In 20th Symposium on Information Theory in the Benelux, May 1999.

  3. S. Haber, W.S. Stornetta, "How to time-stamp a digital document," In Journal of Cryptology, vol 3, no 2, pages 99-111, 1991.

  4. D. Bayer, S. Haber, W.S. Stornetta, "Improving the efficiency and reliability of digital time-stamping," In Sequences II: Methods in Communication, Security and Computer Science, pages 329-334, 1993.

  5. S. Haber, W.S. Stornetta, "Secure names for bit-strings," In Proceedings of the 4th ACM Conference on Computer and Communications Security, pages 28-35, April 1997.

  6. A. Back, "Hashcash - a denial of service counter-measure," http://www.hashcash.org/papers/hashcash.pdf, 2002.

  7. R.C. Merkle, "Protocols for public key cryptosystems," In Proc. 1980 Symposium on Security and Privacy, IEEE Computer Society, pages 122-133, April 1980.

  8. W. Feller, "An introduction to probability theory and its applications," 1957.