「Bitcoin P2P e-cash paper」— サトシのビットコイン初公開(2008-10)
新しい電子キャッシュシステムに取り組んでいる。完全な P2P 方式で、信頼された第三者を必要としない。
論文はこちらで公開している:
http://www.bitcoin.org/bitcoin.pdf
主な特性:
- 二重支払いは P2P ネットワークによって防止される。
- 造幣局や信頼された第三者は不要。
- 参加者は匿名でいられる。
- 新しいコインは Hashcash 形式のプルーフ・オブ・ワークから生成される。
- 新しいコイン生成のためのプルーフ・オブ・ワークが、二重支払いを防ぐためのネットワークの動力ともなる。
ビットコイン:ピアツーピア電子キャッシュシステム
概要:完全なピアツーピア版の電子キャッシュは、金融機関を経由する負担なしに、オンライン決済を当事者間で直接送金することを可能にする。デジタル署名はソリューションの一部を提供するが、信頼できる第三者が二重支払いの防止に依然として必要であれば、主要な利点は失われる。我々は、ピアツーピアネットワークを用いた二重支払い問題の解決策を提案する。ネットワークは、トランザクションをハッシュベースのプルーフ・オブ・ワークの継続的なチェーンにハッシュ化することでタイムスタンプを付与し、プルーフ・オブ・ワークをやり直さない限り変更できない記録を形成する。最長のチェーンは、目撃されたイベントの順序の証明としてだけでなく、それが最大の CPU パワーのプールから生まれたことの証明としても機能する。正直なノードがネットワーク上の CPU パワーの過半数を支配する限り、彼らは最長のチェーンを生成し、いかなる攻撃者をも凌駕できる。ネットワーク自体は最小限の構造しか必要としない。メッセージはベストエフォートベースでブロードキャストされ、ノードは自由にネットワークを離脱・再参加でき、不在中に何が起きたかの証明として最長のプルーフ・オブ・ワークチェーンを受け入れる。
完全な論文はこちら:
http://www.bitcoin.org/bitcoin.pdf
サトシ・ナカモト
関連: アーカイブ収蔵のホワイトペーパー
新しい電子キャッシュシステムに取り組んでいる。完全な P2P 方式で、信頼された第三者を必要としない。
論文はこちらで公開している:
http://www.bitcoin.org/bitcoin.pdf
こういうシステムは切実に必要だ。だが、この方式では必要な規模にスケールしないんじゃないか?
譲渡可能なプルーフ・オブ・ワークトークンに価値を持たせるには、貨幣的価値がなければならないのではないか。貨幣的価値を持つには、非常に大きなネットワーク内で——例えば bittorrent に類似したファイル交換ネットワークのように——移転されなければならないだろう。
二重支払いイベントをタイムリーに検出し拒否するためには、トランザクション内のコインの過去のトランザクションの大部分を持っていなければならないが、素朴に実装すると、各ピアが過去のトランザクションの大部分、あるいは最近発生した過去のトランザクションの大部分を持つ必要があるのではないか。何億人もの人々がトランザクションを行っている場合、それは膨大な帯域幅となる——すべてのノードがすべて、またはその大部分を知らなければならないだろう。
関連: アーカイブ収蔵のホワイトペーパー
こういうシステムは切実に必要だ。だが、この方式では必要な規模にスケールしないんじゃないか?
ネットワークがそこまで大きくなるずっと前に、ユーザーは簡易支払い検証(セクション 8)を使用して二重支払いをチェックすることが安全であり、これにはブロックヘッダーのチェーンのみ、つまり 1日あたり約 12KB しか必要としない。新しいコインを作成しようとする人だけがネットワークノードを実行する必要がある。当初はほとんどのユーザーがネットワークノードを実行するが、ネットワークがある程度以上に成長すると、専用ハードウェアのサーバーファームを持つ専門家にますます委ねられることになる。サーバーファームはネットワーク上に 1 つのノードを持つだけでよく、LAN の残りはそのノードに接続する。
帯域幅はあなたが思うほど禁止的ではないかもしれない。典型的なトランザクションは約 400 バイトだ(ECC はうまくコンパクトだ)。各トランザクションは 2回ブロードキャストされる必要があるので、1 トランザクションあたり 1KB としよう。Visa は 2008 会計年度に 370 億件のトランザクションを処理した。これは 1日平均 1 億件のトランザクションだ。それだけのトランザクションには 100GB の帯域幅、つまり DVD12枚分か HD 画質の映画 2 本分、現在の価格で約 18 ドル相当の帯域幅が必要となる。
ネットワークがそこまで大きくなるには数年かかるだろうし、その頃にはインターネットで HD 映画 2 本分を送ることは大したことではないだろう。
Satoshi Nakamoto
正直なノードがネットワーク上で最も多くのCPUパワーを支配している限り、 最長のチェーンを生成し、いかなる攻撃者も出し抜くことができる。
しかし実際にはそうなっていない。悪者は日常的に 10 万台以上のマシンのゾンビファームを支配している。スパム送信ゾンビのブラックリストを運用している私の知人は、1日に 100 万もの新しいゾンビを目にすることが珍しくないと言う。
これは hashcash が今日のインターネットで機能しないのと同じ理由だ——善人は悪者よりはるかに少ない計算能力しか持っていない。
他の点についても疑問はあるが、これが致命的な問題だ。
R’s, John
サトシ・ナカモトの投稿(2008年10月31日 18:10 UTC)正直なノードがネットワーク上で最も多くのCPUパワーを支配している限り、 最も長いチェーンを生成し、攻撃者を上回ることができる。
しかし実際にはそうなっていない。悪者は日常的に 10 万台以上のマシンのゾンビファームを支配している。スパム送信ゾンビのブラックリストを運用している私の知人は、1 日に 100 万もの新しいゾンビを目にすることが珍しくないと言う。
これはhashcashが今日のインターネットで機能しない理由と同じだ — 善良な者たちは悪者よりもはるかに少ない計算能力しか持っていない。
その点を指摘してくれてありがとう。
私はその主張を十分に強く表現できていなかった。要件は、善良な者たちが集合的に、単一の攻撃者よりも多くの CPU パワーを持つことだ。
ネットワークを圧倒するには小さすぎる多くの小規模ゾンビファームが存在し、それらはビットコインを生成することで利益を得ることができる。小規模ファームが「正直なノード」となる。(「正直」より良い用語が必要だ。)より多くの小規模ファームがビットコイン生成に向かうほど、ネットワークを圧倒するためのハードルは上がり、より大きなファームも圧倒するには小さすぎることになり、それらもビットコインを生成した方が良いことになる。「ロングテール」理論によれば、小規模、中規模、そして単に大規模なファームを合わせれば、最大のゾンビファームよりもはるかに多くなるはずだ。
たとえ悪者がネットワークを圧倒したとしても、すぐに富を得られるわけではない。彼にできることは、不渡り小切手のように、自分自身が使ったお金を取り戻すことだけだ。これを悪用するには、商人から何かを購入し、発送されるまで待ち、それからネットワークを圧倒してお金を取り戻そうとする必要がある。そのようなカーディング詐欺を試みるよりも、ビットコインを生成する方が多くの利益を得られると思う。そのような巨大なゾンビファームがあれば、他の全員を合わせたよりも多くのビットコインを生成できるだろう。
ビットコインネットワークは、ゾンビファームをビットコイン生成に転向させることで、実際にスパムを減らすかもしれない。
Satoshi Nakamoto
The Cryptography Mailing List Unsubscribe by sending “unsubscribe cryptography” to majordomo at metzdowd.com
サトシ・ナカモトの投稿(2008年11月3日 01:37 UTC)二重支払いイベントをタイムリーに検出し拒否するためには、トランザクション内のコインの過去のトランザクションの大部分を持っていなければならないが、素朴に実装すると、各ピアが過去のトランザクションの大部分、あるいは最近発生した過去のトランザクションの大部分を持つ必要があるのではないか。何億人もの人々がトランザクションを行っている場合、それは膨大な帯域幅となる——すべてのノードがすべて、またはその大部分を知らなければならないだろう。
ネットワークがそれほどの規模に近づくよりずっと前に、 利用者は二重支払い検査に Simplified Payment Verification ( 第 8 節 ) を 安全に使えるはずだ。 これはブロックヘッダーの連鎖だけを持っていればよい。
Simplified Payment Verification について私の理解が正しければ:
新規コイン発行者はすべてのコインと最近のコイン送金を保存する必要がある。新規コイン発行者は多数存在し、発行者になりたい者は誰でもなれるが、コイン利用者の方がはるかに多い。
一般の主体は単にコインを送金する。コイン送金が有効か確認するには、それを 1 つ以上の新規コイン発行者に報告し、その新規コイン発行者が受け入れるかを見る。新規コイン発行者は古いコインの送金を検査して新しいコインが有効な形式を持つようにし、その検査結果を公開して、人々が送金をその新規コイン発行者に報告するよう促す。
誰かがコインを二重支払いし、片方の支出が一方の新規コイン発行者に、もう片方が同時に別の新規コイン発行者に報告された場合、両発行者は支払いの一意の順序について速やかに合意する必要がある。これは大規模分散データベースの非自明な問題であり、ピアツーピア解は現時点で存在しない悪名高く厄介な問題だ。明らかに解ける問題で、人々は常にこれを解いているが、簡単ではない。失敗することも頻繁にある。
しかし、コイン発行ネットワークは少数の発行者に支配されると想定しよう。
少数の主体が新規コインを発行するなら、これは単一発行者の場合より国家攻撃に対する耐性が高い。だが政府は金融ネットワークを定期的に攻撃しており、最近の攻撃に起因する金融崩壊は今この瞬間も進行中だ。
政府支援企業が業界に参入し、やがて悪行が義務化され、悪の金融ネットワークが誠実な金融ネットワークより大きくなる。何が起きているかみんなが知っていても、ネットワーク効果のために人々は悪の金融ネットワークが発行する紙幣を使い続ける —— ビジネスをしたいなら、主要な大きな発行者を使うからだ。
すると知識ある人々は、悪の金融ネットワークが破綻に向かっている、政府支援企業が「金融システム全体の崩壊」 を引き起こすところだと不満を述べる。これは 2005 年に Wallison と Alan Greenspan が訴えたのと同じだ。政府は悪の政府支援企業を縮小すべきか議論する。例えば「S. 190 [109th]: Federal Housing Enterprise Regulatory Reform Act of 2005」 のように。だが彼らは easy money が魅力的すぎることに気付き、S. 190 は政治活動家の群れによって炎上する。彼らは easy money は健全であり、それに反対するのは人種差別主義者・ナチ・無知・憎悪に満ちていると唱えるのだ。 政府支援企業の不良住宅ローン債券発行ポートフォリオ制限を議論した最近の S. 190 論争は、1790 年代の新規アシニア発行制限論争の完全な再現である。
貨幣に対する大きく簡単な政府攻撃は、フランスのアシニア(1792 年)など、近代政治攻撃の最初のものと同様、単一の中央貨幣発行者を標的とする。 だが 19 世紀後半には金融ネットワーク自体への政治攻撃が始まった。 例えば 1913 年の連邦準備法だ。 目標は常にネットワークを単一の too big to fail エンティティに巻き上げることであり、これらの攻撃は最近のものに見られるように、徐々に大規模化・深刻化・破滅化している。 各攻撃は大成功を収め、攻撃が引き起こす大災害の後、攻撃者は貧者・抑圧者・国家全般の救世主と称えられ、その結果生じる悪い影響の責任はユダヤ人・強欲な銀行家・投機家などに転嫁される。 そのような攻撃は普通の人には理解しがたいからだ。 あなたの提案は理解しがたい —— 普通のユーザーは政府支援のセキュリティアップデートで簡単にだまされるだろう。 さらに危機が訪れた時、当局者が正しいことを疑い、問題は悪の投機家であるという論調に異論を唱えることは、2007 年のアメリカで起きたように政治的自殺になり、ワイマール・ドイツのように物理的な自殺になることもある。
それでも、これまで私が見たどんなものよりも、政府支援企業による攻撃への耐性が高い。
Visa は 2008 年度に 370 億トランザクションを処理した。 1 日平均 1 億件だ。その量のトランザクションは 100GB の帯域、つまり DVD 12 枚または HD 映画 2 本分の サイズ、現在の価格で約 18 ドルの帯域に相当する。
ネットワークがそこまで大きくなるには数年かかるだろうし、その頃にはインターネットで HD 映画 2 本分を送ることは大したことではないだろう。
政府の攻撃時までに百や千の貨幣発行者がいれば、最近見た種類の金融ネットワークに対する政府攻撃はずっと難しくなるだろう。
だが貨幣発行者に必要なデータ量と帯域を最小化することに我々は注意を向ける必要があると思う —— 小さなコインに対してこのプロトコルは無駄が多いように見える。大きなコインに対しては完全プロトコルを使い、小さなコインに対しては何らかの短縮版で、人々は大きなコインに包まれるまでは少額にアカウント型貨幣を信頼する、というのが理想的だろう。
貨幣発行者が必要とするデータストレージと帯域が小さいほど、最近見た種類の金融ネットワークに対する政府攻撃に対するシステムの耐性は高い。
The Cryptography Mailing List Unsubscribe by sending “unsubscribe cryptography” to majordomo at metzdowd.com
Simplified Payment Verification について私の理解が正しければ:
新規コイン発行者はすべてのコインと最近のコイン送金を 保存する必要がある。
新規コイン発行者は多数存在し、発行者になりたい者は誰でも なれるが、コイン利用者の方がはるかに多い。
一般の主体は単にコインを送金する。コイン送金が有効か確認 するには、それを 1 つ以上の新規コイン発行者に報告し、その 新規コイン発行者が受け入れるかを見る。新規コイン発行者は 古いコインの送金を検査して新しいコインが有効な形式を持つ ようにし、その検査結果を公開して、人々が送金をその新規 コイン発行者に報告するよう促す。
このシステムの本当の問題はビットコインの市場である、と私は考える。
プルーフ・オブ・ワークの計算には本源的価値が無い。供給曲線は限定的でありうる(ただし「通貨」 は約 35% のインフレ — コンピューターが毎年それだけ高速化するため — を含む)が、需要曲線が正の価格で供給と交差しない。
同じこと(本源的価値の欠如)は法定通貨にも言える、と私は知っている。しかし法定通貨に対する人工的な需要は、課税や法定通貨法など(の制度)によって作り出されている。また、法定通貨であっても、他の法定通貨のより高いインフレ率に対するインフレ・ヘッジになりうる。だがビットコインの場合、35% のインフレ率は技術によってほぼ保証されており、課税を支える仕組みは無く、法定通貨法も無い。人々は、可能であればこの高インフレ通貨で資産を保有しようとはしないだろう。
Bear
The Cryptography Mailing List Unsubscribe by sending “unsubscribe cryptography” to majordomo at metzdowd.com
[武力行使による独占に対するシステムの脆弱性に関する 長い解説は省略。]
政治的問題の解決策を暗号学に求めても見つからないだろう。
その通り、しかし我々は軍拡競争における大きな戦いに勝ち、数年間の新たな自由の領域を獲得することができる。
政府は Napster のような中央集権型ネットワークの頭を切り落とすことには長けているが、Gnutella や Tor のような純粋な P2P ネットワークは持ちこたえているようだ。
Satoshi
The Cryptography Mailing List Unsubscribe by sending “unsubscribe cryptography” to majordomo at metzdowd.com
ビットコインはすごく有望なアイデアだと思うんだ。セキュリティを正直な参加者の CPU パワーが攻撃者のそれを上回るという仮定に基づかせるアイデアが気に入っているんだ。これはロングテールの力を活用する非常に現代的な概念だよ。Wikipedia が始まった時、うまくいくとは思わなかったけど、同じような理由で大成功を収めた。
また、偽造できなくて、生産ペースが予測できて、腐った連中に左右されないトークン――これには価値があると思うんだ。法定通貨よりも金に近い。ニック・サボが何年も前に「ビットゴールド」と呼ぶものについて多くを書いていて、これはまさにその実装となりうるよ。重量級の非匿名システムの上に軽量な匿名決済スキームを構築する提案もあり、ビットコインを活用して匿名化を可能にすることもできるだろう。
ネットワークが資金力のある攻撃者に容易に圧倒されたり乗っ取られたりしないことが重要だと思う。サトシがこれらの質問のいくつかに対処するか、論文の中で既に対処している箇所を示してくれるとありがたいな。
ハル・フィニー
「通貨」はコンピューターが年間約35%速くなるため 約35%のインフレ率である …35%のインフレ率はテクノロジーによって ほぼ保証されている
ハードウェア速度の向上には対処している:「ハードウェア速度の向上とノードの運用への関心の変動を時間の経過とともに補正するため、プルーフ・オブ・ワークの難易度は 1時間あたりのブロック数の平均を目標とする移動平均によって決定される。生成が速すぎる場合、難易度が上がる。」
コンピューターが高速化し、ビットコインの生成に投入される総計算能力が増加すると、難易度は総新規生産量を一定に保つように比例して上昇する。したがって、将来毎年どれだけの新しいビットコインが生成されるかは事前にわかっている。
新しいコインが生産されることは通貨供給量が計画的に増加することを意味するが、必ずしもインフレになるわけではない。通貨供給量の増加が利用者数の増加と同じ率で増加すれば、物価は安定する。需要ほど速く増加しなければ、デフレが起こり、通貨の初期保有者はその価値の上昇を目にすることになる。
コインは何らかの方法で最初に分配されなければならず、一定の生成率が最良の方式と思われる。
Satoshi Nakamoto
The Cryptography Mailing List Unsubscribe by sending “unsubscribe cryptography” to majordomo at metzdowd.com
ブロードキャストされたトランザクションがすべてのノードに到達しなくても 大丈夫で、やがてブロックチェーンに入ると述べられているが、これはどのように 実現されるのだろうか——「次の」ブロックを作成するノード(hashcashの 衝突を最初に見つけたノード)がそのトランザクションを聞いておらず、 その後さらにいくつかのブロックがそのトランザクションを聞いていない ノードによって追加された場合はどうなるのだろうか?トランザクションを聞いた すべてのノードは、次の衝突を見つけるのに十分幸運になるまでそのトランザクションを 保持し、ブロックに組み込もうとするのだろうか?
その通り、ノードはトランザクションをブロックに入るまでワーキングセットに保持する。トランザクションがノードの 90%に到達した場合、新しいブロックが見つかるたびに、そのブロックに含まれる確率は 90%だ。
あるいは例えば、ノードが最も速く成長するチェーンを見極めるために 2つ以上のチェーンを保持しており、チェーンAのブロックが届いたが、 そこにチェーンBにあるコインの二重支払いが含まれている場合はどうだろうか? これはチェックされるのだろうか?(誰かが二重支払いを試み、 2つの異なるノードセットが同じコインの2つの異なるトランザクションを 受信した場合に起こりえる。)
それをチェックする必要はない。先行する分岐のトランザクションが有効となり、もう一方は無効となる。誰かがそのような二重支払いを試みた場合、1 つのみの支払いが常に有効となり、他は無効となる。
トランザクションの受取人は通常、この種の可能性が解決されるまでの時間を確保するため、おそらく 1時間以上トランザクションを保持する必要がある。コインは即座に再度使うことができるが、商品の発送などの行為を行う前には待つべきだ。
また、優秀な攻撃者がすべての正直な参加者よりも多くの計算能力を 集めることができた場合、二重支払いやトランザクションの取り消しが 正確にどのように達成されるのかも理解できない。彼が新しいブロックを 作成し、最長のチェーンに追加できることはわかるが、チェーン内の 古いトランザクションをどのように消去したり追加したりできるのだろうか? 攻撃者が新しいブロックを送信する際、正直なノードが何も消去されて いないことを確認するための整合性チェックはないのか?この攻撃の より詳しい説明があれば、攻撃者にとっての利得と、単に計算能力を使って 正直に新しいコインを鋳造することとの比較を判断するのに役立つだろう。
攻撃者は末尾にブロックを追加するのではない。自分のトランザクションが含まれるブロックまで遡り、そのブロックとその後のすべてのブロックをやり直さなければならない。さらに、その作業中にネットワークが末尾に追加し続けるすべての新しいブロックもやり直す必要がある。彼は歴史を書き換えているのだ。彼の分岐がより長くなれば、それが新しい有効なチェーンとなる。
これは重要なポイントに触れている。たとえその場にいる全員が不正を目にしていたとしても、その事実を利用する方法はない。
最長のチェーンが常に有効なものと見なされることは絶対に必要だ。その場にいたノードは、ある分岐が先にあり別の分岐に置き換えられたことを覚えているかもしれないが、その場にいなかった者にこのことを納得させる方法はない。ある分岐が最初だったと主張する派閥、別の分岐が最初だったと見た派閥、そして後から参加して何が起きたか見ていない派閥——このような分裂は許されない。CPU パワーのプルーフ・オブ・ワーク投票が最終決定権を持たなければならない。全員が同じページに留まる唯一の方法は、何があろうと最長のチェーンが常に有効であると信じることだ。
支払いトランザクションに関して、コインの受取人はどのようなチェックを 行う必要があるだろうか?コインの移転の全履歴を遡って、リスト上の すべてのトランザクションが「タイムスタンプ」ブロックチェーンに リンクされていることを確認する必要があるだろうか?それとも最新のもの だけでよいのだろうか?
受取人はブロックチェーン内の十分な深さまで遡って検証するだけでよく、多くの場合 2 トランザクションの深さだけで十分だ。それ以前のすべてのトランザクションは破棄できる。
タイムスタンプノードはトランザクションをチェックして、コインの前の トランザクションがチェーンに含まれていることを確認し、チェーン内の すべてのトランザクションが有効なコインを表すというルールを 強制しているのか?
その通り、まさにそうだ。ノードはブロックを受信すると、その中のすべてのトランザクションの署名を以前のブロック内のトランザクションと照合してチェックする。ブロックは前のブロックまたは同一ブロック内の有効なトランザクションに依存するトランザクションのみを含むことができる。トランザクション C は同一ブロック内のトランザクション B に依存し、B はより前のブロック内のトランザクション A に依存することができる。
多くの質問をして申し訳ないが、先ほど述べたように、これは非常に 有望で独創的なアイデアのようであり、このコンセプトがさらに発展する のを楽しみにしている。アイデアのよりプロセス指向の記述、 各種オブジェクト(コイン、ブロック、トランザクション)のデータ構造の 具体的な詳細、メッセージに含まれるデータ、このシステムで発生する 各種イベントの処理手順のアルゴリズム的記述があると役に立つだろう。 実装に取り組んでいるとのことだが、より形式的なテキストによる システムの記述が次のステップとして有益だろう。
ご質問をありがたく思う。実は私はこれを逆の順序で行った。すべての問題を解決できると自分を納得させるために、まずすべてのコードを書き、その後論文を書いた。詳細な仕様を書くよりも先にコードをリリースできると思う。あなたが空白を埋めた仮定のほとんどは、すでに正しい。
Satoshi Nakamoto
The Cryptography Mailing List Unsubscribe by sending “unsubscribe cryptography” to majordomo at metzdowd.com
核心的なコンセプトは、多数のエンティティが誰がどのビットコインを 所有しているかについて完全で一貫した情報を保持するということだ。
しかし、一貫性を維持するのは厄介である。誰かがあるトランザクションを あるメンテナーに報告し、別の誰かが別のトランザクションを別の メンテナーに伝えた場合に何が起こるかが明確でない。トランザクションは 過去のすべてのトランザクションのグローバルに共有されたビューに 組み込まれるまで有効であることがわからず、過去のすべてのトランザクションの グローバルに共有されたビューがグローバルに共有されていることは、 ある程度の時間が経過し、多くの新しいトランザクションが到着した後に しかわからない。
これをどのように行うか説明していたのに私が理解できなかったのか、 それともできると確信していたが詳細については少し曖昧だったのか?
プルーフ・オブ・ワークチェーンが同期化問題の解決策であり、誰も信頼することなくグローバルに共有されたビューが何であるかを知る方法だ。
トランザクションはネットワーク全体に素早く伝播するため、同じトランザクションの 2 つのバージョンがほぼ同時に報告された場合、先にスタートした方がより多くのノードに最初に到達するという大きな優位性を持つ。ノードは最初に見たものだけを受け入れ、2番目に到着したものを拒否するため、より早いトランザクションの方がより多くのノードによって次のプルーフ・オブ・ワークへの組み込みに取り組まれる。実質的に、各ノードはどのトランザクションを最初に見たかについての見解を、プルーフ・オブ・ワークの作業にそれを含めることで投票している。
トランザクションがまったく同時に届き、均等に分割された場合は、どちらが先にプルーフ・オブ・ワークに入るかに基づく運の問題であり、それが有効なものを決定する。
ノードがプルーフ・オブ・ワークを発見すると、新しいブロックはネットワーク全体に伝播し、全員がそれをチェーンに追加して次のブロックの作業を開始する。もう一方のトランザクションを持っていたノードは、受け入れられたチェーンに基づきそれが無効となったため、ブロックへの組み込みを試みるのを中止する。
プルーフ・オブ・ワークチェーン自体が、グローバルに共有されたビューから生まれたことの自明な証拠だ。ネットワークの過半数だけが、このような困難なプルーフ・オブ・ワークのチェーンを生成するのに十分な CPU パワーを共同で持っている。ユーザーはプルーフ・オブ・ワークチェーンを受信すると、ネットワークの過半数が何を承認したかがわかる。トランザクションがチェーン内の数リンク前のリンクにハッシュされると、それはグローバルな履歴に確固として刻み込まれる。
Satoshi Nakamoto
The Cryptography Mailing List Unsubscribe by sending “unsubscribe cryptography” to majordomo at metzdowd.com
あるノードがプルーフ・オブ・ワークに 正直で正当な単一支払いのトランザクション群を組み込み、 別のノードがプルーフ・オブ・ワークに 同様に正直で正当な単一支払いの 別のトランザクション群を組み込み、 両方のプルーフがほぼ同時に 生成されたとする。
その場合はどうなるのか?
両方ともブロックをブロードキャストする。すべてのノードは両方を受信して保持するが、最初に受信した方にのみ取り組む。正確に半分が一方を先に受信し、残りの半分がもう一方を先に受信したとしよう。
短時間で、すべてのトランザクションは伝播を完了し、全員がフルセットを持つことになる。各側で作業しているノードは、自分の側に欠けているトランザクションの追加を試みる。次のプルーフ・オブ・ワークが発見されると、そのノードが取り組んでいた前のブロックの分岐がより長くなり、同点が解消される。どちらの側であっても、新しいブロックにはトランザクションのもう半分が含まれるため、いずれの場合でも分岐にはすべてのトランザクションが含まれることになる。分岐が 2回連続で起こるという起こりにくいイベントの場合でも、2回目の分岐の両側にはいずれにせよフルセットのトランザクションが含まれる。
トランザクションがブロックに入るまで 1回かそれ以上の追加サイクルを待つ必要があっても問題ではない。
Satoshi Nakamoto
The Cryptography Mailing List Unsubscribe by sending “unsubscribe cryptography” to majordomo at metzdowd.com
さらに、提案されたシステムでは、誰がどのコインを持っているかを 追跡する作業はシニョリッジによって賄われており、 これはインフレを必要とするため、機能させることはできない。
インフレの問題で困っているなら、代わりにトランザクション手数料に調整するのは簡単だ。こう簡単なことだ:任意のトランザクションのアウトプット値をインプット値より 1 セント少なくする。クライアントソフトウェアが意図した支払い額より 1 セント多くトランザクションを自動的に書くか、受取人側から差し引くことができる。ノードがブロックのプルーフ・オブ・ワークを見つけた時のインセンティブ値は、ブロック内の手数料の合計になる。
Satoshi Nakamoto
The Cryptography Mailing List Unsubscribe by sending “unsubscribe cryptography” to majordomo at metzdowd.com
では、競争に負けたコインはどうなるのか?
…2番目に来た人がコインを失う可能性が高いのは 少し厳しい。
同じトランザクションの複数の二重支払いバージョンがある場合、1 つだけが有効となる。
支払いの受取人は、それが有効であると信じる前に 1時間ほど待たなければならない。ネットワークはそれまでにあらゆる二重支払いの競争を解決する。
無効となった二重支払いを受け取った人は、そもそもそれを持っていたとは思っていなかった。彼のソフトウェアではトランザクションが「未確認」から「無効」に変わったと表示されていたであろう。必要に応じて、UI はトランザクションがブロックチェーン内で十分に深くなるまで非表示にすることもできる。
さらに、あなたの事象の記述は、タイミングとコイン生成に 制約があることを示唆している——ネットワーク全体が 新しいコインのニュースがネットワーク全体に広まるのに 必要な時間と比較して、ゆっくりとコインを生成するということだ
それを明確にできなかったならすまない。ブロック間の目標時間はおそらく 10分になるだろう。
すべてのブロックには作成時刻が含まれる。時刻が 36時間以上ずれている場合、他のノードはそのブロックに取り組まない。直近の 62430 ブロックの期間が 15日未満の場合、ブロックの生成が速すぎるため、プルーフ・オブ・ワークの難易度が倍になる。全員が同じチェーンデータで同じ計算を行うため、チェーン内の同じリンクで全員が同じ結果を得る。
我々は支払い者に、分岐の競争が解決される 時間ではなく、支払いがネットワーク全体に広がる 時間において、トランザクションが有効であることの 確信を持たせたい。
即時の取り消し不能性は機能ではないが、既存のシステムよりはるかに高速だ。紙の小切手は 1〜2 週間後に不渡りになることがある。クレジットカードのトランザクションは 60〜180日後まで異議を申し立てられる。ビットコインのトランザクションは 1〜2時間で十分に不可逆的となりうる。
あるノードが自分に関係のないすべての支払いを 無視している場合、そのノードには何の不利な結果もない。
私が最近投稿したトランザクション手数料ベースのインセンティブシステムにより、ノードは受信したすべての有料トランザクションを含めるインセンティブを持つことになる。
Satoshi Nakamoto
The Cryptography Mailing List Unsubscribe by sending “unsubscribe cryptography” to majordomo at metzdowd.com
全員がXを知っているだけでは不十分だ。全員が 全員がXを知っていることを知り、さらに 全員が全員が全員がXを知っていることを知っていることを 知っている必要もある ——これはビザンチン将軍問題として知られる、 分散データ処理の古典的な難問だ。
プルーフ・オブ・ワークチェーンはビザンチン将軍問題の解決策だ。その文脈で言い換えてみよう。
何人かのビザンチン将軍がそれぞれコンピューターを持っており、王の Wi-Fi をブルートフォースで攻撃したいと考えている。パスワードの文字数はわかっている。ネットワークを刺激してパケットを発生させたら、限られた時間内にパスワードを破ってログを消去しなければならない。さもなければ発見されて面倒なことになる。彼らは過半数が同時に攻撃した場合にのみ、十分な速さで破れるだけの CPU パワーしか持っていない。
攻撃の時刻がいつかは特に重要ではなく、全員が一致していることだけが重要だ。やる気のある者が時刻を発表し、最初に聞こえた時刻が公式の攻撃時刻となることに決まっている。問題は、ネットワークが瞬時ではないことだ。2人の将軍がほぼ同時に異なる攻撃時刻を発表すると、ある者は片方を先に聞き、別の者はもう片方を先に聞くことになる。
彼らはこの問題を解くためにプルーフ・オブ・ワークチェーンを使う。各将軍は、最初に聞こえた攻撃時刻を受け取ると、その攻撃時刻をハッシュに含む極めて困難なプルーフ・オブ・ワーク問題を、自分のコンピューターに解かせる。プルーフ・オブ・ワークは非常に困難で、全員が同時に取り組んでも誰か一人が解を見つけるまでに 10分かかる見込みだ。誰か一人がプルーフ・オブ・ワークを見つけたら、彼はそれをネットワークにブロードキャストし、全員が現在のプルーフ・オブ・ワーク計算を、自分が取り組んでいるハッシュにそのプルーフ・オブ・ワークを含める形に切り替える。もし違う攻撃時刻に取り組んでいた者がいれば、こちらに切り替える。なぜなら、こちらのプルーフ・オブ・ワークチェーンの方が今は長いからだ。
2時間後には、ある一つの攻撃時刻が 12個のプルーフ・オブ・ワークによってハッシュされたチェーンになっているはずだ。どの将軍も、プルーフ・オブ・ワークチェーンの困難度を検証するだけで、そこに費やされた 1時間あたりの並列 CPU パワーを推定でき、決められた時間内にこれだけのプルーフ・オブ・ワークを生み出すには過半数のコンピューターが必要だったと見て取れる。プルーフ・オブ・ワークはまさに彼らがそれに取り組んだ証拠なので、全員がそれを見ていたはずだ。プルーフ・オブ・ワークチェーンに表れた CPU パワーがパスワード解読に十分であれば、合意された時刻に安全に攻撃できる。
プルーフ・オブ・ワークチェーンが、あなたが質問したすべての同期化、分散データベース、グローバルビューの問題を解決する方法だ。
各候補チェーンに関連付けた別々の 保留トランザクションリストをノードが保持する必要があると思う。 … また、任意の時点でノードはいくつの候補チェーンを 追跡する必要があるのか平均的に尋ねたい。
幸いにも、現在の最良ブランチに対する保留トランザクションプールのみを維持すれば十分だ。新しいブロックが最良ブランチに到着すると、ConnectBlock がそのブロックのトランザクションを保留トランザクションプールから削除する。別のブランチがより長くなった場合、フォークまでのメインブランチに対して DisconnectBlock を呼び出し、ブロックのトランザクションを保留トランザクションプールに戻し、新しいブランチに対して ConnectBlock を呼び出し、両方のブランチに含まれていたトランザクションを吸い上げる。このような再編成は稀で浅いものになると予想される。
この最適化により、候補ブランチは実際にはほとんど負担にならない。ディスク上に存在するだけで、メインチェーンにならない限り注意を払う必要がない。
あるいはジェームズが先に提起したように、ネットワークブロードキャストが 信頼性はあるが潜在的に遅いフラッディングアルゴリズムに依存している場合、 パフォーマンスにどのような影響があるか?
ブロードキャストはほぼ完全に信頼できるだろう。TCP 送信が今日ドロップされることはめったにないし、ブロードキャストプロトコルにはしばらく後に他のノードからデータを取得するリトライメカニズムがある。実際にブロードキャストが予想より遅いことが判明した場合、リソースの無駄を避けるためにブロック間の目標時間を増やす必要があるかもしれない。ブロックを生成するのにかかる時間よりもはるかに短い時間でブロックが伝播することを望んでいる。そうでなければ、ノードは廃れたブロックの作業に時間を費やしすぎることになる。
コンピューターがランダムに支払いを送信し、ランダムにパケットをドロップする自動テストを実行する予定だ。
- ビットコインシステムが社会的に有用で価値あるものであると判明し、 ノードオペレーターが自分たちの努力が世界への有益な貢献だと感じる (人々が善い目的のために計算資源を提供する様々な「@Home」計算 プロジェクトに類似)。
この場合、単純な利他主義がネットワークを適切に 稼働させ続けるのに十分であるように思われる。
適切に説明できれば、リバタリアンの視点にとって非常に魅力的だ。ただ、私は言葉よりコードの方が得意なのだが。
Satoshi Nakamoto
The Cryptography Mailing List Unsubscribe by sending “unsubscribe cryptography” to majordomo at metzdowd.com
なるほど……。 自分なりの理解でこのプロトコルを要約してみる。
論文に書かれていない運用上の細部は、 自分の「設計感覚」 が「これは必須の抜けだ」 「これは『当然の』 やり方だ」 と告げる部分で補っている。
まず、 人々は計算機のパワーを費やしてコインのプールを作り、 それをマネーとして使う。 各コインは、 そのコインが作られた時点でマネーに対して有効だった基準を満たすプルーフ・オブ・ワークだ。 作成時刻 ( ひいてはその時の基準 ) は後からでも検証できる。 なぜなら、 そのコインがトランザクションチェーンに登場した瞬間が見え、 そこから「合意ビュー」 におけるすべての使用履歴をたどれるからだ。 ( コイン生成をリンク追加と結びつける話は後述する )
コインを使う際、 買い手と売り手は ( ブラインド化された ) トランザクション記録にデジタル署名し、 それを多数のノードにブロードキャストする。 これらのノードの目的はコインの所有権に関する合意の追跡だ。 誰かが二重支払いを行った場合、 そのトランザクション記録はブラインドを解除でき、 不正者の身元が明らかになる。 これはかなり標準的なカットアンドチューズアルゴリズムで実現される。 買い手はいくつかのチャレンジに対して秘密分散の値で応答し、 売り手は「ブラインドを解除せよ」 と求めて、 一つを残して全部を検査する。 そして、 そのうちの任意の二つが揃えば買い手の身元を特定できる秘密分散値が確かに含まれていることを検証する。 この場合、 売り手はブラインド解除済みの使用記録が「おそらく」 有効な秘密分散値を含んでいると受け入れる。
コインの所有権に関する合意を追跡するノードはループの中にいる。 すべてのノードが、 これまで受信した最長のチェーンに「リンクを追加」 しようとしている。 各ノードは、 「合意」 された署名済みチェーンにまだ含まれていない、 報告されたトランザクションのプールを持っている。 これをプール「A」 と呼ぶことにする。 ノードはチェーンにリンクを追加するため、 プール A のすべてをプール「L」 に移し、 CPU 集約型のデジタル署名アルゴリズムを使って、 新しいブロック L を含むチェーンに署名する。 結果として、 プール L に保持していたすべてのトランザクション記録とそのノードのデジタル署名を含むブロックで、 チェーンが延長される。 この間にも新しいトランザクション記録は届き続け、 次の作業サイクルのために再びプール A に入る。
作業中に、 延長しようとしているチェーンと同じ長さのチェーンを受け取ることもある。 そのチェーンでは、 最後の数本の「リンク」 が、 自分が作業しているチェーンとは共通でないリンクだ。 そういうチェーンは無視する。 ( ? 本当に無視していいのか? 後でもう一度見直さねばならない状況はどんな時か? それらに基づく長いチェーンが現れれば、 そこに含まれているのだから、 という前提で )
しかし、 作業中に_より長い_チェーンを受け取った場合、 直ちに新しいリンク内のすべてのトランザクションをチェックする。 二重支払いが含まれていないこと、 およびすべての新しいリンクの「ワークファクター」 が適切であることを確認するためだ。 もし二重支払いが含まれていれば、 二重支払いの証拠となる「トランザクション」 を作成し、 自分のプール A に追加してブロードキャストし、 作業を続ける。 「新しい」 リンクのどれかに不適切なワークファクター ( つまり、 ルール上「正当」 と見なせるだけの CPU を誰かが投じていない場合 ) があれば、 そのリンクを作ったノードによるプロトコル違反の証拠となる新しい「トランザクション」 を作成し、 ブロードキャストし、 プール A に追加して、 そのチェーンを拒否する。 二重支払いがなく、 まだ見ていないすべてのリンクのワークファクターが適切な場合は、 その新しいチェーンを合意として受け入れる。
新しいチェーンが受け入れられた場合、 自分が現在追加中のリンクは諦め、 プール L からすべてのトランザクションをプール A に戻し ( 作業開始以降に受信または作成したトランザクションと合わせて )、 新しいチェーンの中のリンクの一部として既に含まれているトランザクション記録をプール A から除外し、 新しいチェーンを延長しようと再び作業を開始する。
自分の新しいリンクでチェーンの延長を完了したら、 それをブロードキャストし、 作業開始以降にプール A に蓄積したすべてのトランザクションを使って、 直ちにまた新しいリンクの作業を始める。
これで正しく理解できているだろうか?
最大の技術的問題:
「チェーン」 が最も速い 3〜4 ノードのみによって追加されたリンクで占められないことを保証する仕組みはあるのか? なぜなら、 ブロードキャストされたトランザクション記録がその 3〜4 ノードに届かないことは容易にあり得る。 そうなって、 かつそのノードがチェーンを支配し続ければ、 そのトランザクションは永久に追加されないかもしれない。
これを解決するには、 トランザクションの伝播可能性を証明できるようにするか、 あるノードのワークファクターを、 そのノードの直近のリンク追加から何リンク追加されたかに応じて変動させる必要がある。
残念ながら、 どちらの対策もソックパペット ( なりすまし複数アカウント ) で打ち破られる。 これはおそらく現状のこのプロトコルにおける最悪の問題だ。 ノードのアイデンティティ ( 鍵 ) を制御し、 人々が新しいソックパペットを作るのを防ぐ、 何らかの中央管理点が必要になる。
伝播可能性の証明とはこういう意味だ。 ボブがアリスから新しいチェーンを受け入れる際、 アリスが自分のプール「A」 と「L」 のすべてのトランザクションを持っているか ( あるいは入手するか ) を確認する必要がある。 ボブはそれらをアリスに送り、 アリスは受信した証拠として署名付きハッシュを返す。 アリスがこのトランザクションのブロックを受け取った後、 アリスが追加したリンクを含む後続のチェーンが、 そのリンクまでに、 もしくはそれ以前にこれらのトランザクションを含んでいなければ、 ボブはアリスに送ったブロックとアリスの署名を、 アリスがプロトコル違反した証拠として、 一つのトランザクションの形で公開できるはずだ。 ソックパペットはこれを打ち破る。 なぜなら、 アリスは後続のチェーンに署名する際、 新しい鍵を使って別ノードのふりをすればよいだけだからだ。
新規リンクの数に応じてワークファクターを変動させる方式を採れば、 結局のところ最も速い 3〜4 ノードによる支配に戻ってしまう。 ただし今度はその支配者たちに、 ワークファクターのペナルティを回避するために使われる 600 個ほどのソックパペットが加わるだけだ。
ソックパペット問題を解決するか、 もしくは新しい鍵の生成を制御する中央点があると受け入れるなら、 コインの生成は「合意」 チェーンにブロックを成功裏に追加する行為と結びつけるべきだ。 これは単純に実現できる。 コインの生成は一つのトランザクションであり、 そのブロック内の他のすべてのトランザクションと共に追加される。 ただし、 リンクごとに作れるコインは一つだけで、 当然ながら、 自分のバージョンのチェーンが受け入れられなかった場合、 「受理された」 ビューでは自分はそのコインを持っていないし、 使うこともできない。 これが、 合意データベースを維持する人々に CPU サイクルを費やす動機を与える。 とりわけ上で述べた、 自身の直近リンク以降に追加されたリンク数によるワークファクターの変動が、 最も速い 3〜4 ノードだけでなく全員に、 時折コインを作る機会を保証するからだ。
また、 チェーンにリンクを追加する作業要求は、 過去一週間にそのチェーンに追加されたリンクの数に応じて ( これも指数的に ) 変動させ、 コイン生成 ( したがってインフレ ) の率を厳格に制御できるようにすべきだ。
これがスケールするためにはコインの集約が必要だ。 誰かが額面 1 のコイン 10 枚を引退させ、 額面 10 の新しいコインを作るような「証明可能な」 トランザクションが必要になる。 これは難しくない。 すでに用意されているのと同じ基盤で実現できる。 単純にチェーンの一部となり、 そのチェーンが合意として受け入れられたとき、 全員がそれが起きたことを見ることができる。
Bear
できるだけ早くソースコードをリリースするよう急いでいる。これらの実装に関する疑問をすべて解消する参考になるだろう。
レイ・ディリンジャーの投稿(2008年11月15日 02:20 UTC)コインが使われる際、買い手と売り手は(ブラインド化された) トランザクション記録にデジタル署名する。
署名するのは買い手のみであり、ブラインド化はない。
誰かが二重支払いをした場合、トランザクション記録の ブラインドを解除して不正者の身元を明らかにすることができる。
身元は使用されず、償還請求への依存もない。すべては予防だ。
これはかなり標準的なカットアンドチューズアルゴリズムで行われ、 買い手は秘密分散を使ったいくつかのチャレンジに応答する
チャレンジも秘密分散もない。基本的なトランザクションはセクション 2 の図に示されているものだ。前のトランザクションの公開鍵を満たす(買い手の)署名と、次回使用時に満たす必要がある(売り手の)新しい公開鍵だ。
作業中に延長しようとしているチェーンと同じ長さだが、 最後の数「リンク」が取り組んでいるチェーンと共通でない リンクであるチェーンを受信することもある。 これらは無視する。
その通り、長さが等しい場合は、最初に受信したものを保持することで同点を解消する。
二重支払いが含まれている場合、二重支払いの「証拠」となる 「トランザクション」を作成し、プールAに追加し、 ブロードキャストして作業を続ける。
そのような「二重支払いの証拠」の報告は必要ない。同じチェーンに両方の支払いが含まれている場合、そのブロックは無効であり拒否される。
ブロックに十分なプルーフ・オブ・ワークがない場合も同様だ。そのブロックは無効であり拒否される。それについてレポートを回覧する必要はない。すべてのノードがそれを確認し、リレーする前に拒否できる。
2 つの競合するチェーンがあり、それぞれが同じトランザクションの異なるバージョンを含み、一方が資金をある人に、もう一方が同じ資金を別の人に送ろうとしている場合、どちらの支払いが有効かを裁定するのがプルーフ・オブ・ワークチェーンのすべてだ。
我々は二重支払いを「監視」してアラームを鳴らし不正者を捕まえるのではない。単にどちらの支払いが有効かを裁定するのだ。トランザクションの受取人は、解決のための時間を確保するために数ブロック待つ必要がある。不正を試みる者はすべて好きなだけ二重支払いを同時に試みればよいが、数ブロック以内に支払いの 1 つが有効となり、他は無効となる。メインチェーンに既に支払いが存在すれば、後の二重支払いは即座に拒否される。
まだチェーンに入っていないが、すべてのノードのプールに既にある場合でも、2番目の支払いは既に最初の支払いを持っているすべてのノードによって拒否される。
新しいチェーンが受け入れられた場合、現在のリンクの追加を 諦め、プールLからすべてのトランザクションをプールAに 戻し(作業開始以降に受信または作成したトランザクションとともに)、 新しいチェーンのリンクの一部であるトランザクション記録を プールAから除外し、新しいチェーンの延長を 再度試みて作業を開始する。
その通り。新しいトランザクションが入るたびにリフレッシュも行うので、L はほぼすべての A 内のものを常に含んでいる。
CPU集約型のデジタル署名アルゴリズムで 新しいブロックLを含むチェーンに署名する。
これは署名ではなく、Hashcash 方式の SHA-256 プルーフ・オブ・ワーク(ゼロの部分的プリイメージ)だ。
「チェーン」が最も速い3〜4ノードのみによって追加されたリンクで占められないことを保証する仕組みはあるのか? なぜなら、ブロードキャストされたトランザクション記録がその3〜4ノードに届かないことは容易にあり得る。そうなって、かつそのノードがチェーンを支配し続ければ、そのトランザクションは永久に追加されないかもしれない。
これを CPU 集約型のデジタル署名として考えている場合、長い操作を最初に完了する競争であり、最も速い者が常に勝つと考えているかもしれない。
プルーフ・オブ・ワークは Hashcash 方式の SHA-256 衝突発見だ。毎秒数百万回のハッシュを行うメモリーレスプロセスであり、毎回小さな確率で見つかる。最も速い 3〜4 ノードの優位性は、総 CPU パワーに占めるシェアに比例するだけだ。誰でもいつでも解を見つける確率は、CPU パワーに比例する。
トランザクション手数料があるため、ノードは受信したすべてのトランザクションを受け入れて含めるインセンティブを持つ。作成されたコインの総数が所定の上限に達すると、ノードは最終的にトランザクション手数料のみで報酬を受ける。
また、チェーンにリンクを追加する作業要求は、過去一週間にそのチェーンに追加されたリンクの数に応じて ( これも指数的に ) 変動させ、コイン生成 ( したがってインフレ ) の率を厳格に制御できるようにすべきだ。
その通り。
これをスケールさせるにはコインの集約が必要だ。 誰かが単一額面のコイン10枚を引退させ、 額面10の新しいコイン1枚を作成する「証明可能な」 トランザクションが必要だ。
すべてのトランザクションがこれだ。セクション 9、価値の結合と分割を参照。
Satoshi Nakamoto
The Cryptography Mailing List Unsubscribe by sending “unsubscribe cryptography” to majordomo at metzdowd.com
2008年11月15日 ( 土 ) 12:43 +0800、 サトシ・ナカモトは次のように書いた:
サトシ・ナカモトの投稿(2008年11月15日 04:43 UTC)できるだけ早くソースコードをリリースするよう急いでいる。これらの実装に関する疑問をすべて解消する参考になるだろう。
署名するのは買い手のみであり、 ブラインド化はない。
身元は使用されず、 償還請求への依存もない。 すべては予防だ。
なるほど、 これは意外だ。 もし買い手 / 売り手のアイデンティティを使わないのなら、 使われているコインの ( 受け取った記録のある ) 真の所有者によって支払いが行われているかどうかを確認していないことになる。
考えるうえで有用なアイデンティティのカテゴリは三つある。 カテゴリ 1: 公開。 現実世界のアイデンティティが記録され、 すべてのトランザクションに付随する。 カテゴリ 2: 仮名。 システム内に永続的な「アイデンティティ」 があり、 ある何かが別の何かと同じ仮名によって行われたかを人々は見ることができるが、 仮名と現実世界のアイデンティティを必ずしも結びつける手段はない。 カテゴリ 3: 結びつけ不可能な匿名。 アイデンティティという概念は、 永続的なものであれそれ以外であれ、 存在しない。 あるトランザクションに関与した主体が、 別のトランザクションに関与した主体と同じであるかどうか、 誰も言うことも証明することもできない。
あなたが主張しているのは、 そう見えるとおりカテゴリ 3 か、 それともカテゴリ 2 か? 多くの人は匿名プロトコルと仮名プロトコルを区別しないので、 ここで正確に何を意味しているのかを尋ねる価値がある。
ともあれ、 あなたが言ったことに ( 自分の想像できる限り ) ほぼそのまま、 つまり結びつけ不可能な匿名性を意味していたという前提で進めよう。 これは、 「アイデンティティ」 の代わりに、 使用者がコインの真の所有者だけが知る秘密を知っていることを示さなければならない、 ということを意味する。 一つのやり方としては、 コインを受け取る人が非対称鍵ペアを生成し、 その片方をトランザクションと共に公開する。 後でそのコインを使うためには、 非対称鍵ペアのもう片方を所持していることを示さねばならない。 おそらく、 新しい売り手が提供する鍵にそれで署名する形だ。 こうすると「アイデンティティ」 については何も証明できないが、 コインの使用者が、 コインを受け取った人が知る秘密を知っている誰かであることは証明できる。
そして、 あなたが次に述べていることは、 これを裏付けているように見える:
チャレンジも秘密分散もない。基本的なトランザクションはセクション2の図に示されているものだ。前のトランザクションの公開鍵を満たす(買い手の)署名と、次回使用時に満たす必要がある(売り手の)新しい公開鍵だ。
ただし、 これがアイデンティティそのものを含まなかったとしても、 使用を行う主体は、 以前にコインを受け取った主体と結びつけ可能なままだ。 つまり、 これらのトランザクションは結びつけ可能だ。 これに対抗するためには、 コインの所有者は、 普通のトランザクションと他者からは区別できないトランザクションを作る必要がある。 その中で新しい鍵ペアを生成し、 コインをその所持者に移す ( つまり、 ある一人のソックパペットから別の一人のソックパペットへ「使わせる」 )。 所有者の現実世界のアイデンティティは変わらないが、 コインを使った主体と結びつけ可能だった取引はその結びつきが切れる。 カテゴリ 3 の結びつけ不可能性のためには、 これをランダムな回数 — おそらく 1 回から 6 回程度 — 行う必要がある?
ところで、 改行を覚えてもらえないだろうか?? 行が馬鹿みたいに右へスクロールしていって、 あなたが一体何を言っているのか見るためにスクロールしなければならず、 返信する前には改行を加えるために編集しなければならない。
そのような「二重支払いの証拠」の報告は必要ない。同じチェーンに両方の支払いが含まれている場合、そのブロックは無効であり拒否される。
ブロックに十分なプルーフ・オブ・ワークがない場合も同様だ。そのブロックは無効であり拒否される。それについてレポートを回覧する必要はない。すべてのノードがそれを確認し、リレーする前に拒否できる。
うーん、 それで安心できるかは自信がない。 つまり、 協力しないノードを特定して排除する努力はしないということか? これは問題を招き、 DOS 攻撃の可能性につながると疑っている。
2つの競合するチェーンがあり、それぞれが同じトランザクションの異なるバージョンを含み、一方が資金をある人に、もう一方が同じ資金を別の人に送ろうとしている場合、どちらの支払いが有効かを裁定するのがプルーフ・オブ・ワークチェーンのすべてだ。
なるほど、 「同じ」 トランザクションと言って、 明らかに異なるトランザクションを指しているとき、 つまり二重支払いのことだろう? 同じ鍵で署名された二つのトランザクション?
我々は二重支払いを「監視」 してアラームを鳴らし不正者を捕まえているのではない。 単にどちらの支払いが有効かを裁定しているだけだ。 トランザクションの受取人は、 裁定が完了する時間を確保するために数ブロック待たねばならない。
それまで…… 何までだ? あるトランザクションが取り消し不能になったかどうかを、 誰がどうやって知るのか? 「数」 ブロックとは、 3 ブロックか? 30 か? 100 か? ノード数に依存するのか? ノード数に対して対数的なのか線形なのか?
不正を試みる者はすべて好きなだけ同時に二重支払いを試みればよいが、 数ブロック以内に支払いの一つが有効となり、 他は無効となる、 それだけのことだ。
しかしアイデンティティがない以上、 使用が無効になっても不正者にはデメリットがない。 二重支払いで得ようとした商品 ( ウェブサイトへのアクセス、 ダウンロード、 その他何でも ) を既に受け取っていれば、 損するのは「無効な」 コインを抱える商人の方だ。 ただし商人が、 支払いを受けたとみなす前にあの魔法の「数ブロック」 ( しかも何ブロックなのか、 どうやって知ればいい? ) を待つなら別だが。
消費者は、 コインを使ってからそれが使えるようになるまで一時間も待たされるなら、 使ってくれないだろう。 商人の方も、 客が二重支払いしたためにコインが無効と判明したとき、 その客に逆請求する手段がなければ、 こんなものは使わないだろう。
たとえ先行する使用がまだチェーンに入っていなくても、 全ノードのプールに既に存在していれば、 二番目の使用は、 最初の使用を既に持っているすべてのノードに弾かれる。
ということは、 最初の同時使用のブロードキャストどうしが干渉し合った時点で早期に捕捉される可能性があるということだ。 ここでは、 ブロードキャストを売り手が行うと想定している。 買い手側には、 使用記録を広く流布させない動機が働きうるからだ。
その通り。 新しいトランザクションが入るたびに L も更新されるので、 L はほぼ常に A の中のすべてを含む。
なるほど、 これは膨大かつ固定回数の CPU サイクルを必要とするプルーフ・オブ・ワークと、 少ない CPU サイクルで済むが成功確率が極小であるプルーフ・オブ・ワークとの大きな違いだ。 作業中にデータセットを変更しても、 最初からやり直しになるわけではない。 今回の場合、 最近受信したトランザクションを自分が作業中のリンクから除外して保持しておく必要がないという点で、 これは好都合だ。
もしこれをCPU集約型のデジタル署名として考えているなら、 長い操作を最初に完了する競争であり、 最も速い者が常に勝つと考えているのかもしれない。
その通り。 自分が抱いていた誤解はそれだった。 繰り返すが、 膨大かつ固定回数の CPU サイクルを必要とするプルーフと、 少ない CPU サイクルで済むが成功確率が極小であるプルーフとの違いだ。
誰でもいつでも解を見つける確率は、 そのCPUパワーに比例する。
これはワークファクターのランダムな変動のようなものだ。 この点で、 これはあなたに有利に働く。
トランザクション手数料があるため、 ノードは受信できるすべてのトランザクションを受け入れて含めるインセンティブを持つ。 作成されたコインの総数があらかじめ決められた上限に達すると、 ノードは最終的にトランザクション手数料のみで報酬を得ることになる。
「トランザクション手数料」 がどう機能し、 トランザクションを行う主体からネットワークを運営する人々へどうやってマネーが流れるのか、 私には理解できない。 ただ、 チェーンへのリンク追加がノードにコインを作る権利を与えるなら、 経済的効果は ( 多少ランダム化されているが ) 同じになる。 だから私はそちらの方式を支持する。
また、 異なるノードの計算能力は、 歴史のある時点においても二桁の幅で変動しうると想定しておく必要がある。
Bear
1つの方法は、コインの受取人に非対称鍵ペアを生成させ、 その半分をトランザクションとともに公開することだ。 後でコインを使うためには、非対称鍵ペアの もう半分の所有を証明する必要がある。 おそらく新しい売り手が提供する鍵に署名することで。
その通り、ECC デジタル署名だ。すべてのトランザクションで新しい鍵ペアが使用される。
個人を識別するニムという意味での疑似匿名ではないが、少なくともコインの次のアクションがそのコインの所有者からのものであると識別できるという意味では、少し疑似匿名的だ。
うーん、それで安心できるかは自信がない。つまり、協力しないノードを特定して排除する努力はしないということか? これは問題を招き、DOS攻撃の可能性につながると疑っている。
誰かを識別することに依存はしていない。あなたが言ったように、それは無駄であり、ソックパペットで簡単に破られる。
誰かが本物であることを確立するクレデンシャルは、CPU パワーを提供する能力だ。
それまで…… 何までだ? あるトランザクションが取り消し不能になったかどうかを、誰がどうやって知るのか?「数」ブロックとは、3ブロックか? 30か? 100か? ノード数に依存するのか? ノード数に対して対数的なのか線形なのか?
セクション 11 が攻撃下での最悪のケースを計算している。通常、5〜10 ブロックで十分だ。盗むためにネットワーク規模の攻撃を仕掛ける価値のないものを売っている場合、実際にはもっと少なくできる。
しかし身元がない場合、既に二重支払いで得た 商品(ウェブサイトへのアクセス、ダウンロードなど)を 受け取っていれば、支払いが無効になっても 彼らにとってデメリットはない。その魔法の「数ブロック」 (何ブロックかどうやって知るのか?)が経過するまで 支払い済みとして扱わなければ、商人は「無効な」コインを 掴まされることになる。
消費者はコインを使って、使った目的のことができるまでに 1時間かかるなら、そうしないだろう。 商人は、顧客の二重支払いによりコインが無効であることが わかっても顧客にチャージバックする方法がなければ、 そうしないだろう。
これはバージョン 2 の問題であり、ほとんどのアプリケーションでかなり満足のいく解決が可能だと考えている。
競争はトランザクションをネットワーク上で最初に広めることだ。6次の隔たりを考えれば——指数関数的に広がる。遅れてスタートした競合者が、最初のトランザクションがネットワーク全体を席巻する前に非常に多くのノードを獲得するチャンスはほとんどなく、わずか 2分程度しかかからない。その 2分間、商人のノードは二重支払いトランザクションを監視できる。二重支払い者は商人に知られずに代替トランザクションを世界にブラストすることはできないため、開始前に待つ必要がある。
本物のトランザクションが 90%に到達し、二重支払いトランザクションが 10%に到達した場合、二重支払い者は支払わずに済む確率がわずか 10%で、90%の確率でお金が使われてしまう。ほとんどの種類の商品に対して、詐欺師にとって割に合わない。
情報ベースの商品、例えばウェブサイトへのアクセスやダウンロードは転売不可能だ。ウェブサイトへのアクセスやダウンロードを盗んで生計を立てることはできない。それを盗むならファイル共有ネットワークに行けばいい。ほとんどの即時アクセス製品は盗む大きなインセンティブがない。
商人が実際に盗難の問題を抱えている場合、顧客に 2分待ってもらうか、メールで何かを待ってもらうことができ、多くの商人は既にそうしている。本当に最適化したい場合で、大きなダウンロードの場合、トランザクションが二重支払いとして戻ってきたらダウンロードの途中でキャンセルできる。ウェブサイトへのアクセスの場合、通常は顧客に 5分間アクセスさせて、拒否された場合はアクセスを遮断しても大した問題ではない。多くのそのようなサイトにはそもそも無料トライアルがある。
Satoshi Nakamoto
The Cryptography Mailing List Unsubscribe by sending “unsubscribe cryptography” to majordomo at metzdowd.com
幸い、現在の最良の分岐のための 保留トランザクションプールだけを保持すれば十分だ。
これは我々が知っている、つまり通信と データストレージが正常に動作している誠実で 行儀の良いピアが、現在の最良の分岐が何であるかを 知っていることを要求する——
ノードは自分が持っている最良の分岐の保留トランザクションプールだけを持てばよいということだ。現在最良の分岐だと考えている分岐のことだ。それがブロックを作ろうとしている分岐であり、プールが必要なのはそのためだけだ。
ブロードキャストはおそらくほぼ完全に 信頼できるだろう。
各メッセージが少なくとも1回は到着すると 仮定するのではなく、頻繁に到着に失敗する メッセージによって伝えられる場合でも 情報が到着するようなメカニズムを 作る必要がある。
ピアネットワーキングのブロードキャストメカニズムはカバーできていると思う。
各ノードは隣接ノードに、持っている新しいブロックとトランザクションのハッシュのインベントリリストを送信する。隣接ノードはまだ持っていないアイテムを要求する。タイムアウト後にアイテムが届かない場合、そのアイテムを持っていた別の隣接ノードにリクエストする。すべてまたはほとんどの隣接ノードが最終的に各アイテムを持つはずなので、1 つとの通信が失敗しても、他の任意のノードから 1 つずつ試して取得できる。
インベントリ-リクエスト-データのスキームは少しレイテンシを導入するが、余分なデータブロックを送信キューに入れないことで帯域幅を節約し、最終的にはスピードの向上に役立つ。
あなたにはそのような設計のアウトライン と提案があり、それは大きな前進だが、 悪魔は細部に宿る。
コーディングしながらこの 1年半でそれらの細かい詳細をすべて検討してきたと思うが、多くの詳細があった。機能的な詳細は論文ではカバーされていないが、ソースコードは近日公開する。メインファイルはお送りした。 (現時点ではリクエストに応じて提供可能、完全リリースは近日中)
Satoshi Nakamoto
The Cryptography Mailing List Unsubscribe by sending “unsubscribe cryptography” to majordomo at metzdowd.com