ビットコイン: ピアツーピアの電子キャッシュ システム

サトシ・ナカモト

satoshin@gmx.com

www.bitcoin.org


アブストラクト。電子マネーの純粋なピアツーピア バージョンでは、金融機関を経由せずにオンライン決済をある当事者から別の当事者に直接送信できます。デジタル署名はソリューションの一部を提供しますが、二重支出を防ぐために信頼できるサードパーティが依然として必要な場合、主な利点は失われます.ピア ツー ピア ネットワークを使用して、二重支出の問題を解決する方法を提案します。ネットワークは、トランザクションをハッシュベースのプルーフ オブ ワークの進行中のチェーンにハッシュすることでトランザクションにタイムスタンプを付け、プルーフ オブ ワークをやり直さない限り変更できないレコードを形成します。最長のチェーンは、目撃された一連のイベントの証拠として機能するだけでなく、それが CPU パワーの最大のプールからのものであることの証拠でもあります。ネットワークを攻撃するために協力していないノードによって CPU パワーの大部分が制御されている限り、ノードは最長のチェーンを生成し、攻撃者を追い越します。ネットワーク自体には最小限の構造が必要です。メッセージはベスト エフォート ベースでブロードキャストされ、ノードは自由にネットワークを離れたり、ネットワークに再参加したりできます。最長のプルーフ オブ ワーク チェーンを、ノードが離れている間に何が起こったかの証拠として受け入れます。

 

1.はじめに

インターネット上の商取引は、電子決済を処理する信頼できる第三者として機能する金融機関にほぼ独占的に依存するようになりました。システムはほとんどのトランザクションで十分に機能しますが、信頼ベースのモデルに固有の弱点があります。金融機関は紛争の調停を避けることができないため、完全に不可逆的な取引は実際には不可能です。調停のコストは取引コストを増加させ、実際の最小取引サイズを制限し、小規模なカジュアルな取引の可能性を遮断します。また、不可逆的なサービスに対して不可逆的な支払いを行う能力の喪失には、より広範なコストがあります。反転の可能性があるため、信頼の必要性が広がります。マーチャントは、顧客が必要とする以上の情報を求めて煩わしくし、顧客を警戒する必要があります。一定の割合の詐欺は避けられないものとして受け入れられます。これらのコストと支払いの不確実性は、物理的な通貨を使用することで直接回避できますが、信頼できる当事者なしで通信チャネルを介して支払いを行うメカニズムは存在しません.

必要なのは、信頼の代わりに暗号証明に基づく電子決済システムであり、信頼できる第三者を必要とせずに任意の 2 つの当事者が互いに直接取引できるようにするものです。取り消すことが計算上非現実的なトランザクションは、売り手を詐欺から保護し、通常のエスクロー メカニズムを簡単に実装して買い手を保護することができます。この論文では、ピアツーピアの分散型タイムスタンプ サーバーを使用してトランザクションの時系列の計算証明を生成することで、二重支出の問題に対する解決策を提案します。正直なノードが攻撃者ノードの協力グループよりも多くの CPU パワーを集合的に制御している限り、システムは安全です。

2. 取引

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

もちろん問題は、所有者の 1 人がコインを二重に使っていないことを受取人が確認できないことです。一般的な解決策は、信頼できる中央機関またはミントを導入することです。これは、すべてのトランザクションで二重支出がないかチェックします。各取引の後、新しいコインを発行するためにコインを造幣局に戻す必要があり、造幣局から直接発行されたコインのみが二重使用されないと信頼されています。このソリューションの問題点は、マネー システム全体の運命が造幣局を運営する会社に依存し、すべての取引が銀行と同じように造幣局を通過しなければならないことです。

前の所有者が以前のトランザクションに署名していないことを受取人が知る方法が必要です。私たちの目的では、最も早いトランザクションが重要なので、後の二重支払いの試みは気にしません。トランザクションがないことを確認する唯一の方法は、すべてのトランザクションを認識することです。造幣局ベースのモデルでは、造幣局がすべてのトランザクションを認識しており、どれが最初に到着したかを決定していました。信頼できる当事者なしでこれを達成するには、トランザクションを公に発表する必要があり [1]、参加者が受け取った順序の単一の履歴に同意するシステムが必要です。受取人は、各トランザクションの時点で、ノードの大部分が最初に受け取ったものであることに同意したという証拠が必要です。

3. タイムスタンプ サーバー

私たちが提案するソリューションは、タイムスタンプ サーバーから始まります。タイムスタンプ サーバーは、タイムスタンプを付けるアイテムのブロックのハッシュを取得し、そのハッシュを新聞や Usenet の投稿 [2-5] などで広く公開することによって機能します。タイムスタンプは、明らかに、ハッシュに入るために、データがその時点で存在していなければならなかったことを証明します。各タイムスタンプには、そのハッシュに以前のタイムスタンプが含まれてチェーンを形成し、追加のタイムスタンプごとにその前のタイムスタンプが強化されます。

4. プルーフ・オブ・ワーク

ピアツーピアベースで分散型タイムスタンプ サーバーを実装するには、新聞や Usenet の投稿ではなく、 Adam Back のHashcash [6] に似たプルーフ オブ ワーク システムを使用する必要があります。プルーフ オブ ワークには、SHA-256 などでハッシュされたときに、ハッシュが多数のゼロ ビットで始まる値をスキャンすることが含まれます。必要な平均作業量は、必要なゼロ ビットの数で指数関数的になり、単一のハッシュを実行することで確認できます。

私たちのタイムスタンプ ネットワークでは、ブロックのハッシュに必要なゼロ ビットを与える値が見つかるまで、ブロック内の nonce をインクリメントすることにより、作業証明を実装します。プルーフ・オブ・ワークを満たすために CPU の労力が費やされると、作業をやり直さない限りブロックを変更することはできません。後のブロックはその後に連鎖するため、ブロックを変更する作業には、その後のすべてのブロックのやり直しが含まれます。

プルーフ・オブ・ワークは、多数決意思決定における代表決定の問題も解決します。過半数が 1 IP アドレス 1 票に基づいていた場合、多くの IP を割り当てることができる人によって覆される可能性があります。プルーフ オブ ワークは、基本的に 1 CPU 1 票です。多数決は、最長のチェーンで表され、プルーフ オブ ワークの労力が最も大きく投資されます。 CPU パワーの大部分が正直なノードによって制御されている場合、正直なチェーンは最も速く成長し、競合するチェーンを凌駕します。過去のブロックを変更するには、攻撃者はそのブロックとその後のすべてのブロックのプルーフ オブ ワークをやり直してから、正直なノードの作業に追いつき、追い越す必要があります。遅い攻撃者が追いつく可能性は、後続のブロックが追加されるにつれて指数関数的に減少することを後で示します。

ハードウェアの速度の向上と、時間の経過に伴うノードの実行に対する関心の変化を補うために、時間あたりの平均ブロック数を対象とする移動平均によって作業証明の難易度が決定されます。生成が速すぎると、難易度が上がります。

5. ネットワーク

ネットワークを実行する手順は次のとおりです。

1)    新しいトランザクションがすべてのノードにブロードキャストされます。

2)    各ノードは、新しいトランザクションをブロックに収集します。

3)    各ノードは、そのブロックの困難なプルーフ オブ ワークを見つけることに取り組みます。

4)    ノードがプルーフ オブ ワークを見つけると、そのブロックをすべてのノードにブロードキャストします。

5)    ノードは、ブロック内のすべてのトランザクションが有効であり、まだ消費されていない場合にのみブロックを受け入れます。

6)    ノードは、受け入れられたブロックのハッシュを前のハッシュとして使用して、チェーン内の次のブロックの作成に取り組むことにより、ブロックの受け入れを表明します。

ノードは常に最長のチェーンを正しいものと見なし、チェーンの延長に取り組み続けます。 2 つのノードが次のブロックの異なるバージョンを同時にブロードキャストする場合、一部のノードがどちらか一方を先に受信する可能性があります。その場合、最初に受け取ったブランチで作業しますが、長くなった場合に備えて他のブランチを保存します。次のプルーフ オブ ワークが見つかり、1 つのブランチが長くなると、同点は解消されます。他のブランチで動作していたノードは、より長いブランチに切り替わります。

新しいトランザクションのブロードキャストは、必ずしもすべてのノードに到達する必要はありません。多くのノードに到達する限り、やがてブロックに到達します。ブロック ブロードキャストは、ドロップされたメッセージに対しても耐性があります。ノードがブロックを受信しない場合、次のブロックを受信したときにそれを要求し、1 つを逃したことに気付きます。

6. インセンティブ

慣例により、ブロック内の最初のトランザクションは、ブロックの作成者が所有する新しいコインを開始する特別なトランザクションです。これにより、ノードがネットワークをサポートするインセンティブが追加され、コインを発行する中央機関がないため、最初にコインを流通させる方法が提供されます。一定量の新しいコインが着実に追加されることは、金鉱夫が資源を消費して金を循環に追加することに似ています。私たちの場合、消費されるのは CPU 時間と電力です。

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

インセンティブは、ノードが正直でいることを促すのに役立つ場合があります。貪欲な攻撃者がすべての正直なノードよりも多くの CPU パワーを集めることができる場合、彼はそれを使用して支払いを盗んで人々を欺くか、それを使用して新しいコインを生成するかを選択する必要があります。彼は、システムと彼自身の富の有効性を損なうよりも、他のすべての人を合わせたよりも多くの新しいコインで彼に有利なルールでプレーする方がより有益であることに気付くべきです.

7. ディスク容量の再利用

コインの最新のトランザクションが十分なブロックに埋もれたら、それ以前の使用済みトランザクションを破棄してディスク容量を節約できます。ブロックのハッシュを壊さずにこれを容易にするために、トランザクションはマークル ツリー [7][2][5] でハッシュされ、ブロックのハッシュにはルートのみが含まれます。古いブロックは、ツリーのブランチを切り落とすことで圧縮できます。内部ハッシュを保存する必要はありません。

トランザクションのないブロック ヘッダーは約 80 バイトになります。ブロックが 10 分ごとに生成されると仮定すると、80 バイト * 6 * 24 * 365 = 1 年あたり 4.2MB になります。 2008 年時点で 2GB の RAM を搭載したコンピューター システムが一般的に販売されており、ムーアの法則は現在の成長率を予測しています。

年間 1.2GB であり、ブロック ヘッダーをメモリに保持する必要がある場合でも、ストレージは問題になりません。

8. 支払い確認の簡素化

完全なネットワーク ノードを実行せずに支払いを確認することは可能です。ユーザーは、最長のプルーフ オブ ワーク チェーンのブロック ヘッダーのコピーを保持するだけで済みます。これは、最長のチェーンを持っていると確信するまでネットワーク ノードにクエリを実行することで取得でき、トランザクションをブロックにリンクするマークル ブランチを取得します。トランザクションを自分で確認することはできませんが、トランザクションをチェーン内の場所にリンクすることで、ネットワーク ノードがトランザクションを受け入れたことを確認でき、ネットワークがトランザクションを受け入れたことをさらに確認した後にブロックが追加されます。

そのため、正当なノードがネットワークを制御している限り検証は信頼できますが、ネットワークが攻撃者によって圧倒された場合はより脆弱になります。ネットワーク ノードは自分自身でトランザクションを検証できますが、単純化された方法は、攻撃者がネットワークを圧倒し続けることができる限り、攻撃者が作成したトランザクションによってだまされる可能性があります。これを防ぐための戦略の 1 つは、無効なブロックを検出したときにネットワーク ノードからのアラートを受け入れ、ユーザーのソフトウェアにブロック全体をダウンロードするよう促し、トランザクションをアラートして不整合を確認することです。頻繁に支払いを受ける企業は、より独立したセキュリティと迅速な検証のために、おそらく独自のノードを実行したいと考えるでしょう。

9. 価値の結合と分割

コインを個別に処理することは可能ですが、送金で 1 セントごとに個別の取引を行うのは扱いにくいでしょう。値の分割と結合を可能にするために、トランザクションには複数の入力と出力が含まれます。通常、前のより大きな取引からの単一の入力、または少額を組み合わせた複数の入力のいずれかがあり、最大で 2 つの出力があります。

トランザクションが複数のトランザクションに依存し、それらのトランザクションがさらに多くのトランザクションに依存するファンアウトは、ここでは問題ではないことに注意してください。トランザクション履歴の完全なスタンドアロン コピーを抽出する必要はありません。

10. プライバシー

従来の銀行モデルでは、情報へのアクセスを関係者と信頼できる第三者に制限することで、一定レベルのプライバシーを実現しています。すべてのトランザクションを公に発表する必要があるため、この方法は不可能ですが、別の場所で情報の流れを遮断することでプライバシーを維持できます。つまり、公開鍵を匿名に保つことです。一般の人々は、誰かが他の誰かに金額を送金していることを確認できますが、トランザクションを誰かに関連付ける情報はありません。これは、個々の取引の時間とサイズ、つまり「テープ」が公開されているが、当事者が誰であるかを明らかにしていない、証券取引所が公開する情報のレベルに似ています。

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

11. 計算

攻撃者が正直なチェーンよりも速く別のチェーンを生成しようとするシナリオを検討します。これが達成されたとしても、何もないところから価値を生み出したり、攻撃者に属していなかったお金を盗んだりするなど、システムが恣意的な変更にさらされることはありません。ノードは無効なトランザクションを支払いとして受け入れることはなく、正直なノードはそれらを含むブロックを受け入れることはありません。攻撃者は、自分のトランザクションの 1 つを変更して、最近使ったお金を取り戻そうとすることしかできません。

正直なチェーンと攻撃者のチェーンの間の競争は、二項ランダム ウォークとして特徴付けることができます。成功イベントは、正直なチェーンが 1 ブロック延長され、リードが +1 増加することです。失敗イベントは、攻撃者のチェーンが 1 ブロック延長され、ギャップが -1 減少することです。

攻撃者が与えられた赤字から追いつく確率は、ギャンブラーの廃墟の問題に似ています。無制限のクレジットを持つギャンブラーが、赤字から始めて、損益分岐点に到達するために試行回数が無限になる可能性があるとします。

p > q という仮定を考えると、攻撃者が追いつく必要があるブロックの数が増えるにつれて、確率は指数関数的に低下します。彼に対するオッズでは、彼が早い段階で幸運な突進を行わなければ、彼がさらに遅れを取るにつれて、彼の可能性はほとんどなくなります。

ここで、送信者がトランザクションを変更できないことを十分に確認する前に、新しいトランザクションの受信者が待機する必要がある時間を検討します。送信者は、受信者に自分が支払ったと信じ込ませ、しばらくすると自分に支払ったと思わせようとする攻撃者であると仮定します。それが発生すると、受信者は警告を受けますが、送信者は手遅れになることを望んでいます。

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

受信者は、トランザクションがブロックに追加され、その後に z ブロックがリンクされるまで待機します。彼は攻撃者が行った正確な進行状況を知りませんが、正直なブロックがブロックごとに平均予想時間を要したと仮定すると、攻撃者の潜在的な進行状況はポアソン分布になります。

12. 結論

信用に頼らない電子商取引の仕組みを提案。私たちはデジタル署名から作られたコインの通常のフレームワークから始めました。これは所有権を強力に制御しますが、二重支払いを防ぐ方法がなければ不完全です.これを解決するために、私たちはプルーフ オブ ワークを使用してトランザクションの公開履歴を記録するピアツーピア ネットワークを提案しました。これは、正直なノードが CPU パワーの大部分を制御している場合、攻撃者が変更することは計算上実際的ではなくなります。ネットワークは、構造化されていないシンプルさで堅牢です。ノードは、ほとんど調整せずに一度に動作します。メッセージは特定の場所にルーティングされず、ベスト エフォート ベースでのみ配信される必要があるため、メッセージを識別する必要はありません。ノードは自由にネットワークを離れたり、ネットワークに再参加したりでき、プルーフ オブ ワーク チェーンを、ノードが去っている間に何が起こったかの証拠として受け入れます。彼らは CPU パワーで投票し、有効なブロックの拡張に取り組むことで有効なブロックの受け入れを表明し、無効なブロックの処理を拒否することで拒否します。このコンセンサスメカニズムを使用して、必要なルールとインセンティブを適用できます。

 

参考文献[1]         W. Dai、「b-money」、http://www.weidai.com/bmoney.txt、1998.[2] H. Massias 、XS Avila、および J.-J. Quisquater 、「最小限の信頼要件を備えた安全なタイムスタンプ サービスの設計」、1999 年 5 月、ベネルクスで開催された第 20 回情報理論シンポジウム。[3] S. Haber、WS Stornetta 、「デジタル ドキュメントにタイムスタンプを付ける方法」、Journal of Cryptology、第 3 巻、第 2 号、99 ~ 111 ページ、1991 年。[4]                D. Bayer、S. Haber、WS Stornetta 、「デジタル タイムスタンプの効率と信頼性の向上」、In Sequences II: Methods in Communication、Security and Computer Science、ページ 329-334、1993.[5]       S. Haber, WS Stornetta , "Secure names for bit-strings," In Proceedings of the 4th ACM Conference on Computer and Communications Security, page 28-35, April 1997.[6]         A. 戻る、「 Hashcash - サービス拒否対策」、http://www.hashcash.org/papers/hashcash.pdf、2002.[7]            RC Merkle、「公開鍵暗号システムのプロトコル」、Proc。 1980 年のセキュリティとプライバシーに関するシンポジウム、IEEE Computer Society、122 ~ 133 ページ、1980 年 4 月 [8] W.フェラー、「確率論とその応用の紹介」、1957 年。

ビットコインの購入

ここでビットコインを購入できます。