こんにちは。
Jiroです。
ナカモトサトシさんが2009年に公開したビットコイン原論文を読んでみました。
英語では、以下のサイトから
https://bitcoin.org/bitcoin.pdf日本語では以下のサイトを引用させていただきました。

ビットコイン原論文
概要
純粋なP2P電子マネーによって、金融機関を通さない甲乙間の直接的オンライン取引が可能になる。
メッセージは最善努力原則で送信され、ノードは自由にネットワークから離脱、再接続することができ、離脱していた間のイベントの証明として最長のプルーフ・オブ・ワークチェーンを受信する。
[speech_bubble type=”ln” subtype=”L1″ icon=”18040908.png” name=”jiro”]銀行などの金融機関を通さないで取引を行うことを目的として、ビットコインが考えられれていることがわかります。
[/speech_bubble]
イントロダクション
金融機関は争議の仲裁を避けて通ることができないため、完全に非可逆的な取引を扱うことができない。仲裁コストが取引のコストを引き上げることで、取引規模は限定され、小額取引の可能性が失われる。
第三者機関を通さずに通信チャンネル経由で支払いを可能にするメカニズムは存在していない。
この論文では、時系列取引のコンピュータ的証明を作成するP2P分散型タイムスタンプ・サーバーを用いた、二重支払い問題の解決策を提案する。
[speech_bubble type=”ln” subtype=”L1″ icon=”18040908.png” name=”jiro”]非可逆的な取引というのがポイントだと感じます。
可逆的であることが多くの無駄な労力と手数料を生み出していると考えているようです。[/speech_bubble]
取引
一つの電子コインは、連続するデジタル署名のチェーンと定義される。電子コインの各所有者は、直前の取引のハッシュと次の所有者のパブリック・キー(公開鍵)をデジタル署名でコインの最後に加えることにより、電子コインを次の所有者に転送する。受取人は一連の署名を検証することで、過去の所有権を検証できる。
これを第三者機関なしに行うには、取引が公開され、参加者たちが受け取った順番の唯一の取引履歴に合意することのできるシステムが必要となる。受取人は取引毎に、取引が行われた時点で大多数のノードがそのコインが初めて使用されたことに賛同したという証明を必要とする。
[speech_bubble type=”ln” subtype=”L1″ icon=”18040908.png” name=”jiro”]前の取引と次の取引がキーによって繋がれていることがからブロックチェーンという呼ばれ方をされ、それをたどることで取引の検証が可能になりかつ書き換えをより難しくなることがわかります。[/speech_bubble]
タイムスタンプサーバー
タイムスタンプ・サーバーは、タイムスタンプされる複数アイテムを含むデータブロックをハッシュとして処理
[speech_bubble type=”ln” subtype=”L1″ icon=”18040908.png” name=”jiro”]前の取引を含めたデータをハッシュとして処理することによって、チェーンを形成する。時間が経つにつれて、そのチェーンの長さが増えていくという仕組みなるようです。[/speech_bubble]
プルーフオブワーク
ハッシュ化の際に要求される0ビットを与える値が見つかるまでの間、データブロックにワンタイムパスワードを足すことでプルーフ・オブ・ワークを実現している。
このプルーフ・オブ・ワークはまた、多数決で意思決定をする際の代表をどうするかという問題を解決する。
プルーフ・オブ・ワークは原則的に1CPUにつき一票である。多数決の意思決定は、最も多くのプルーフ・オブ・ワークの労力が費やされたことを示す最も長いチェーンによって表される。
プルーフ・オブ・ワーク算出の難易度は、一時間ごとのブロック数を一定の平均値に保つことを目指す平均移動によって決定される。
[speech_bubble type=”ln” subtype=”L1″ icon=”18040908.png” name=”jiro”]プルーフオブワークは、今のところ非常に強固なセキュリティーシステムだと言われています。
取引の改ざんを目論む攻撃者がいても、実際には取引を正常に行おうとする人が次のブロックをより早く生成するので改ざんをするために過去を遡るよりも未来の取引に寄与した方が効率が良くなるということです。[/speech_bubble]
ネットワーク
ここでは、ネットワークの実行手順に関しての説明でした。
以下のスライドがわかりやすいと思います。
インセンティブ
もしある取引でアウトプットされた価値がインプットされた価値よりも少ない場合、その差は取引手数料としてその取引を含むブロックのインセンティブに加算される。
もし欲深い攻撃者が良心的なノードの合計を上回るCPUパワーを作り出すことができたとして、攻撃者はそのパワーを使って、他の良心的なノードから自分の支払った金額を盗んで取り戻すか、新しいコインを作り出すかの選択を迫られることになり、おのずと自分の資産価値とそれを支えるシステムを損なうよりも、ルールに従って行動し、他の全ノードを合わせたよりも多くの新しいコインを作りだすほうが、自分の利益になると考えるだろう。
[speech_bubble type=”ln” subtype=”L1″ icon=”18040908.png” name=”jiro”]計算するリソースを提供する側が得る利益をうまく利用して、良い方向へ取引を誘導していくのは素晴らしいシステムだと思います。[/speech_bubble]
ディスク・スペースを再利用する
ブロックのハッシュを壊さずにこの作業を行うために、取引はそのブロックのハッシュにルートしか含まないマークル・ツリー(Merkle Tree[7][2][5])を用いてハッシュ化される。
マークル・ツリーを用いてハッシュ化された取引ブロックからTx0-2を取り除いた後引なしのブロック・ヘッダーは約80 bytesである。仮に十分ごとに一つのブロックが作成されると仮定すると、80 bytes × 6 ×24 ×365 = 4.2 MB/年 となる。
[speech_bubble type=”ln” subtype=”L1″ icon=”18040908.png” name=”jiro”]計算する側のメモリ管理に関しても言及されています。ムーアの法則を使った予測などブロックの生成に必要なメモリ領域に関しては、Merkle Treeという手法を用いています。[/speech_bubble]
Merkle Treeに関しては、以下のスライドがわかりやすいと思います。
簡易版支払い検証
これも Merkle treeの特徴を使った検証になります。
ユーザーは、ネットワークノードにクエリーを行って得られる最長のチェーンが含む各ブロックのブロック・ヘッダーのコピーを保存しておくだけで、そのブロックにタイムスタンプされている取引をブロックにリンクしているマークル・ブランチを得ることができるからだ。
頻繁に支払いを受け取るビジネスに関しては、より独立した安全性とスピードの速い検証のために、独自のノードを運営するほうが良いだろう。
価値の結合や分割
取引に使われる金額を1セントずつ個別に取引することは非常に不便だ。価値の分割や結合を可能にするために、取引には複数のインプットとアウトプットが含まれる。
注目すべきは、一つの取引が複数の取引に依存し、それらの取引もまた多数の取引に依存しているファンアウトはここでは問題でないことである。取引履歴からある取引の完全に独立したコピーを抽出する必要性はあり得ないからである。
お金の取引に置いて、インプットの形は様々になります。送りたい人・場所・金額などです。しかし、アウトプットは、支払先か払い戻しになります。複数の取引をまとめて行うことで、価値を分割したり結合したりすることを可能にしているのですね。
プライバシー
パブリック・キーを匿名にするのである。誰かが他者にどれだけのコインを送っているかは公開されるが、その取引情報は誰にもリンクされていない。
これは個別の取引の時間やサイズ、「テープ」は公開されても取引の当事者は明らかにされない証券取引で公表されるのと同等の情報レベルである。
リスクは、もしキーの所有者が明らかになった場合、そのリンクにより同じ所有者が関わった他の取引も露見する可能性があることである。
[speech_bubble type=”ln” subtype=”L1″ icon=”18040908.png” name=”jiro”]取引自体は公開されているが、その当事者と結びつけるものは何もないというのは、面白いですよね。実際の社会では、当事者のアクションから物事が始まることが多いので、ハッシュ値で管理されている世界だからこそできるものだと思います。[/speech_bubble]
計算
攻撃者が正当なチェーンよりも速いスピードで偽のチェーンを作成しようとするシナリオを考えてみる。
P = 良心的なノードが次のブロックを見つける確率
q = 攻撃者が次のブロックを見つける確率
qz= 攻撃者がzブロックの遅れから追いつく確率
この章はブロックが増えていくにつれて、攻撃者がブロック生成に追いつくことができる確率が指数関数的に減少していくことを数式とC言語プログラムを用いて説明しています。
C言語プログラムをPythonで書き直してみたので、参考にしてみてください。
結論
本論文では、信用に依存しない電子取引のシステムを提案した。
その解決策として、良心的なノードがCPUパワーの過半数をコントロールする限り、プルーフ・オブ・ワークを使って記録された公開型の取引履歴を攻撃者が変えようとすることが、コンピュータ的に加速度的に実質上実行不可能になっていくP2Pネットワークを提案した。
[speech_bubble type=”ln” subtype=”L1″ icon=”18040908.png” name=”jiro”]信用に依存しない取引というのが、興味深いです。お金という金融商品を信用に依存しないシステムが取引するとおいうことですから。[/speech_bubble]
まとめ
2008年に発表された論文ということで、すでに10年が経過しています。
しかし、システム自体は非常に考えられており、現在の暗号通貨を支える技術となっています。
細かい部分で、理解が追いつかない部分があったのでより勉強していきたいと思います。
日本語訳サイトは、非常に参考になりました。
コメント