ビットコイン ホワイトペーパー 日本語訳 Proof of Workの始まり
ビットコイン ホワイトペーパー訳 Proof of Workの始まり
ビットコインホワイトペーパーはビットコインの最初の提案書ですね、理解する為に直訳から独自の解釈、意訳へ昇華させていきたい。まずは入口という位置づけでただただ参考レベルでお楽しみください。。
実際の原本はこちらのよう。
タイトル:ビットコイン:ピアツーピア電子キャッシュシステム
タイトルは”Bitcoin: A Peer-to-Peer Electronic Cash System”となっており、 ビットコイン:ピアツーピア電子キャッシュシステム といったところでしょう。
概要
概要。純粋な電子現金のピアツーピアのやり取りでは、金融機関を経由せずに、オンライン支払いをある当事者から別の当事者に直接送信可能なはずです。デジタル署名はソリューションの一部を提供しますが、二重支払いを防ぐために信頼できるサードパーティが依然として必要な場合、主な利点は失われます。
ピアツーピアネットワークを使用して、二重支払い問題の解決策を提案します。
ネットワークは、ハッシュしたトランザクションにタイムスタンプを付けハッシュベースのプルーフオブワークの継続的なチェーンに入れていき、プルーフオブワークをやり直さないと変更できないレコードを形成します。
最長のチェーンは、目撃された一連のイベントの証明として機能するだけでなく、CPUパワーの最大のプールからのものであることの証明としても機能します。 CPUパワーの大部分が、ネットワークを攻撃するために協力していないノードによって制御されている限り、それらは最長のチェーンを生成し、攻撃者を上回ります。ネットワーク自体は最小限の構造である必要があります。メッセージはベストエフォートベースでブロードキャストされ、ノードは自由にネットワークを離れたりネットワークに再参加でき、メッセージが消えたときに何が起こったかの証明として、最長のプルーフオブワークチェーンを受け入れます。
はじめに
インターネット上の商取引は、電子決済を処理するために信頼できる第三者機関として機能する金融機関にほぼ独占的に依存するようになりました。システムはほとんどのトランザクションで十分に機能しますが、それでも信頼ベースのモデルに固有の弱点があります。
金融機関は紛争の調停を避けられないため、完全に不可逆的な取引は実際には不可能です。調停のコストはトランザクションコストを増加させ、最小の実際のトランザクションサイズを制限し、小さなカジュアルなトランザクションの可能性を遮断します。また、不可逆的なサービスに対して不可逆的な支払いを行う能力を失うことで、より広いコストが発生します。逆転の可能性があるため、信頼の必要性が広がります。商人はしなければならない
彼らの顧客に用心し、彼らがそうでなければ必要とするより多くの情報のために彼らを悩ませます。
一定の割合の詐欺は避けられないものとして受け入れられます。これらのコストと支払いの不確実性は、物理的な通貨を使用することで直接回避できますが、信頼できる当事者なしで通信チャネルを介して支払いを行うメカニズムは存在しません。
必要なのは、信頼ではなく暗号証明に基づく電子決済システムであり、信頼できる第三者を必要とせずに、任意の2つの自発的な当事者が互いに直接取引できるようにします。計算上元に戻すのが非現実的なトランザクションは、売り手を詐欺から保護し、定期的なエスクローメカニズムを簡単に実装して買い手を保護することができます。この論文では、ピアツーピア分散タイムスタンプサーバーを使用して二重支払い問題の解決策を提案し、トランザクションの時系列の順序の計算による証明を生成します。正直なノードが、攻撃者ノードの協力グループよりも多くのCPUパワーを集合的に制御している限り、システムは安全です。
トランザクション
電子コインをデジタル署名のチェーンとして定義します。各所有者は、前のトランザクションのハッシュと次の所有者の公開鍵にデジタル署名し、これらをコインの最後に追加することによって、コインを次の所有者に転送します。受取人は署名を確認して、所有権の連鎖を確認できます。
もちろん問題は、受取人が所有者の1人がコインを二重支払いしなかったことを確認できないことです。一般的な解決策は、すべてのトランザクションで二重支払いをチェックする信頼できる中央機関、つまりミントを導入することです。各取引の後、新しいコインを発行するには、コインをミントに返却する必要があります。ミントから直接発行されたコインのみが、二重に使用されないことが信頼されます。
このソリューションの問題は、通貨システム全体の運命は、銀行のように、すべてのトランザクションがミントを通過する必要がある、ミントを実行している会社に依存することです。
以前の所有者が以前の取引に署名しなかったことを受取人が知る方法が必要です。私たちの目的では、最も早いトランザクションが重要なトランザクションであるため、後で二重支払いを試みることは気にしません。トランザクションがないことを確認する唯一の方法は、すべてのトランザクションを認識することです。ミントベースのモデルでは、ミントはすべてのトランザクションを認識し、どちらが最初に到着するかを決定しました。
信頼できる当事者なしでこれを達成するには、トランザクションは
公に発表された[1]、そして参加者が彼らが受け取られた順序の単一の履歴について合意するためのシステムが必要です。受取人は、各トランザクションの時点で、ノードの大多数が最初に受け取ったものであることに同意した屋根を必要とします
タイムスタンプサーバー
私たちが提案するソリューションは、タイムスタンプサーバーから始まります。 タイムスタンプサーバーは、タイムスタンプが付けられるアイテムのブロックのハッシュを取得し、新聞やUsenetの投稿などでハッシュを広く公開することで機能します[2-5]。 タイムスタンプは、明らかに、ハッシュに入るには、その時点でデータが存在している必要があることを証明します。 各タイムスタンプはハッシュに前のタイムスタンプを含み、チェーンを形成し、追加のタイムスタンプごとに前のタイムスタンプを補強します。
Proof-of-Work
分散型タイムスタンプサーバーをピアツーピアベースで実装するには、新聞やUsenetの投稿ではなく、AdamBackのHashcash [6]と同様のプルーフオブワークシステムを使用する必要があります。
プルーフオブワークには、SHA-256などでハッシュされたときに、ハッシュがゼロビットの数で始まる値をスキャンすることが含まれます。必要な平均作業量は、必要なゼロビット数で指数関数的であり、単一のハッシュを実行することで検証できます。
タイムスタンプネットワークでは、ブロックのハッシュに必要なゼロビットを与える値が見つかるまでブロック内のナンスをインクリメントすることにより、プルーフオブワークを実装します。プルーフオブワークを満たすためにCPUの労力が費やされると、作業をやり直すことなくブロックを変更することはできません。後のブロックはその後にチェーンされるため、ブロックを変更する作業には、その後のすべてのブロックのやり直しが含まれます。
プルーフオブワークは、多数決の意思決定における代表を決定する問題も解決します。大多数が1つのIPアドレス1票に基づいている場合、多くのIPを割り当てることができる人なら誰でもそれを破壊することができます。プルーフオブワークは、基本的に1つのCPUと1つの投票です。多数決は、最も長いチェーンによって表されます。チェーンには、最大のプルーフオブワークの取り組みが投資されています。 CPUパワーの大部分が正直なノードによって制御されている場合、正直なチェーンは最も速く成長し、競合するチェーンを上回ります。過去のブロックを変更するには、攻撃者はブロックとその後のすべてのブロックのプルーフオブワークをやり直してから、正直なノードの作業に追いつき、それを超える必要があります。後で、遅い攻撃者が追いつく確率が、後続のブロックが追加されるにつれて指数関数的に減少することを示します。
ハードウェア速度の向上と時間の経過に伴うノードの実行に対する関心の変化を補うために、プルーフオブワークの難易度は、1時間あたりの平均ブロック数を対象とした移動平均によって決定されます。生成が速すぎると、難易度が高くなります。
ネットワーク
ネットワークを実行する手順は次のとおりです。
1)新しいトランザクションがすべてのノードにブロードキャストされます。
2)各ノードは新しいトランザクションをブロックに収集します。
3)各ノードは、そのブロックの難しいプルーフオブワークを見つけるために作業します。
4)ノードがプルーフオブワークを見つけると、そのブロックをすべてのノードにブロードキャストします。
5)ノードは、ブロック内のすべてのトランザクションが有効で、まだ使用されていない場合にのみブロックを受け入れます。
6)ノードは、次のブロックの作成に取り組むことにより、ブロックの受け入れを表現します。
チェーン。受け入れられたブロックのハッシュを前のハッシュとして使用します。
ノードは常に最長のチェーンを正しいチェーンと見なし、それを拡張する作業を続けます。 2つのノードが次のブロックの異なるバージョンを同時にブロードキャストする場合、一部のノードはどちらか一方を最初に受信する可能性があります。その場合、最初に受け取ったブランチで作業しますが、長くなる場合に備えて他のブランチを保存します。次のプルーフオブワークが見つかり、1つのブランチが長くなると、タイは解除されます。他のブランチで動作していたノードは、長い方のブランチに切り替わります。
3
新しいトランザクションブロードキャストは、必ずしもすべてのノードに到達する必要はありません。それらが多くのノードに到達する限り、それらはやがてブロックに入ります。ブロックブロードキャストは、ドロップされたメッセージにも耐性があります。ノードがブロックを受信しない場合、ノードは次のブロックを受信したときにそのブロックを要求し、ブロックが欠落していることに気付きます。
インセンティブ
慣例により、ブロック内の最初のトランザクションは、ブロックの作成者が所有する新しいコインを開始する特別なトランザクションです。これにより、ノードがネットワークをサポートするインセンティブが追加され、コインを発行する中央の権限がないため、最初にコインを流通させる方法が提供されます。
一定量の新しいコインを着実に追加することは、金鉱夫が金を流通に追加するためにリソースを消費することに似ています。私たちの場合、消費されるのはCPU時間と電力です。
インセンティブは、取引手数料で賄うこともできます。トランザクションの出力値が入力値よりも小さい場合、差額は、トランザクションを含むブロックのインセンティブ値に追加されるトランザクション料金です。所定の数のコインが流通すると、インセンティブは完全に取引手数料に移行し、完全にインフレがなくなります。
インセンティブは、ノードが正直でいることを奨励するのに役立つ場合があります。貪欲な攻撃者がすべての正直なノードよりも多くのCPUパワーを集めることができる場合、彼は支払いを盗むことによって人々を欺くためにそれを使用するか、新しいコインを生成するためにそれを使用するかを選択する必要があります。彼は、システムと彼自身の富の有効性を損なうよりも、他の誰よりも多くの新しいコインで彼を支持するようなルールでプレーする方がより有益であると考えるべきです。
ディスクスペースの再利用
コインの最新のトランザクションが十分なブロックに埋もれると、ディスクスペースを節約するために破棄する前に使用済みのトランザクションが発生します。 ブロックのハッシュを壊さずにこれを容易にするために、トランザクションはマークルツリー[7] [2] [5]でハッシュされ、ルートのみがブロックのハッシュに含まれます。
次に、古いブロックは、枝を切り落とすことによって圧縮できます。
木。 内部ハッシュは保管する必要はありません。
トランザクションのないブロックヘッダーは約80バイトになります。 ブロックが10分ごとに生成されると仮定すると、80バイト* 6 * 24 * 365 = 4.2MB /年。 2008年の時点で通常2GBのRAMで販売されているコンピュータシステムで、ムーアの法則は現在の成長を予測しています。
年間1.2GB、ブロックヘッダーをメモリに保持する必要がある場合でも、ストレージは問題になりません。
簡略化された支払い検証
完全なネットワークノードを実行しなくても、支払いを確認することができます。ユーザーは、最長のプルーフオブワークチェーンのブロックヘッダーのコピーを保持するだけで済みます。これは、最長のチェーンがあると確信するまでネットワークノードにクエリを実行することで取得でき、Merkleブランチを取得できます。
トランザクションをタイムスタンプが付けられたブロックにリンクします。トランザクションを自分でチェックすることはできませんが、チェーン内の場所にリンクすることで、ネットワークノードがトランザクションを受け入れたことを確認でき、さらにブロックが追加されたことを確認できます。ネットワークはそれを受け入れました。
そのため、正直なノードがネットワークを制御している限り、検証は信頼できますが、ネットワークが攻撃者によって圧倒されている場合は、より脆弱になります。ネットワークノードは自分自身でトランザクションを検証できますが、攻撃者がネットワークを圧倒し続けることができる限り、単純化された方法は攻撃者の偽造されたトランザクションにだまされる可能性があります。これを防ぐための1つの戦略は、無効なブロックを検出したときにネットワークノードからのアラートを受け入れ、ユーザーのソフトウェアに完全なブロックとアラートされたトランザクションをダウンロードするように促すことです。
不整合を確認します。頻繁に支払いを受ける企業は、より独立したセキュリティとより迅速な検証のために、おそらく独自のノードを実行したいと思うでしょう。
値の結合と分割
コインを個別に処理することは可能ですが、送金の1セントごとに個別の取引を行うのは扱いにくいでしょう。 値を分割して結合できるようにするために、トランザクションには複数の入力と出力が含まれています。 通常、以前の大規模なトランザクションからの単一の入力、または少額の金額を組み合わせた複数の入力のいずれかがあり、最大で2つの出力があります。1つは支払い用で、もう1つは変更がある場合は送信者に返します。 トランザクションが複数のトランザクションに依存し、それらのトランザクションがさらに多くに依存するファンアウトは、ここでは問題になりません。 トランザクションの履歴の完全なスタンドアロンコピーを抽出する必要はありません
プライバシー
従来の銀行モデルは、情報へのアクセスを関係者と信頼できる第三者に制限することにより、ある程度のプライバシーを実現します。すべてのトランザクションを公開する必要があるため、この方法は不可能ですが、公開鍵を匿名に保つことで、別の場所で情報の流れを遮断することでプライバシーを維持できます。一般の人々は、誰かが他の誰かに金額を送っているのを見ることができますが、トランザクションを誰かにリンクする情報はありません。これは、証券取引所が公開する情報のレベルに似ています。証券取引所では、個々の取引の時間とサイズである「テープ」が公開されますが、当事者が誰であるかはわかりません。
追加のファイアウォールとして、トランザクションごとに新しいキーペアを使用して、トランザクションが共通の所有者にリンクされないようにする必要があります。複数入力トランザクションでは、一部のリンクは依然として避けられません。これにより、入力が同じ所有者によって所有されていることが必然的に明らかになります。リスクは、キーの所有者が明らかになった場合、リンクによって同じ所有者に属する他のトランザクションが明らかになる可能性があることです。
計算
攻撃者が正直なチェーンよりも速く代替チェーンを生成しようとするシナリオを考えます。これが達成されたとしても、システムを恣意的な変更にさらすことはありません。たとえば、空中から価値を生み出したり、攻撃者が所有したことのないお金を奪ったりすることはありません。ノードは無効なトランザクションを支払いとして受け入れることはなく、正直なノードはブロックを受け入れることはありません
それらを含む。攻撃者は、自分のトランザクションの1つを変更して、最近使用したお金を取り戻すことしかできません。正直なチェーンと攻撃者のチェーンの間の競争は、二項ランダムウォークとして特徴付けることができます。成功イベントは、正直なチェーンが1ブロック延長され、リードが+1増加し、失敗イベントは、攻撃者のチェーンが1ブロック延長され、ギャップが-1減少することです。攻撃者が特定の赤字に追いつく確率は、ギャンブラーの破滅の問題に類似しています。無制限のクレジットを持つギャンブラーが赤字で始まり、損益分岐点に到達しようとするために潜在的に無限の試行回数をプレイするとします。次のように、彼が損益分岐点に達する確率、または攻撃者が正直な連鎖に追いつく確率を計算できます。
p =正直なノードが次のブロックを見つける確率
q =攻撃者が次のブロックを見つける確率
qz=攻撃者がzブロックの後ろから追いつく確率*qzのzは右下に小さく、下の数式のように。
p> qであるという仮定を考えると、攻撃者が追いつく必要のあるブロックの数が増えるにつれて、確率は指数関数的に低下します。彼に反対する可能性があるので、彼が早い段階で幸運な突進をしなければ、彼がさらに遅れるにつれて、彼のチャンスは消えていくほど小さくなります。
ここで、送信者がトランザクションを変更できないことを十分に確認する前に、新しいトランザクションの受信者が待機する必要がある時間を検討します。送信者は攻撃者であり、受信者にしばらく支払ったと信じ込ませ、それを切り替えて返済したいと考えています。
しばらくしてから自分自身に。それが発生すると受信者にアラートが送信されますが、送信者は手遅れになることを望んでいます。受信者は新しい鍵ペアを生成し、署名の直前に送信者に公開鍵を渡します。これにより、送信者は、幸運にも十分に先に進むことができるまで継続的に作業し、その時点でトランザクションを実行することで、ブロックのチェーンを事前に準備することができなくなります。トランザクションが送信されると、不正な送信者は、トランザクションの代替バージョンを含む並列チェーンで秘密裏に作業を開始します。受信者は、トランザクションがブロックに追加され、その後にzブロックがリンクされるまで待機します。彼は攻撃者が行った正確な進捗量を知りませんが、正直なブロックがブロックあたりの平均予想時間を要したと仮定すると、攻撃者の潜在的な進捗は期待値のポアソン分布になります。
攻撃者が今でも追いつくことができる確率を取得するために、攻撃者が達成できた可能性のある各進行量のポアソン密度に、攻撃者がその時点から追いつくことができる確率を掛けます。
分布の無限の裾を合計しないように再配置します。
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.00002428
z = 7 P = 0.00000647
z = 8 P = 0.0000173
z = 9 P = 0.00000046
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.00006132
z = 30 P = 0.00001522
z = 35 P = 0.00000379
z = 40 P = 0.0000095
z = 45 P = 0.0000024
z = 50 P = 0.000000006
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
結論
信頼に頼らずに電子取引を行うシステムを提案しました。私たちは、所有権を強力に管理できるデジタル署名から作られたコインの通常のフレームワークから始めましたが、二重支払いを防ぐ方法がなければ不完全です。これを解決するために、プルーフオブワークを使用してトランザクションのパブリックヒストリーを記録するピアツーピアネットワークを提案しました。これは、正直なノードがCPUパワーの大部分を制御している場合、攻撃者が変更するのは計算上非現実的です。ネットワークは、構造化されていない単純さで堅牢です。ノードはほとんど調整せずに一度に機能します。メッセージは特定の場所にルーティングされず、ベストエフォートベースで配信されるだけでよいため、メッセージを識別する必要はありません。ノードは自由にネットワークを離れたり、ネットワークに再参加したりできます。ノードがなくなったときに何が起こったかの証明として、プルーフオブワークチェーンを受け入れます。彼らはCPUパワーで投票し、有効なブロックの拡張に取り組むことで有効なブロックを受け入れ、無効なブロックでの作業を拒否することで拒否することを表明します。このコンセンサスメカニズムを使用して、必要なルールとインセンティブを適用できます。
その他関連