今更ながら、自分の中での復習も兼ねて、Bitcoinがこの世に生み出された原論文の概要をまとめておきます。
少しだけ易しいMastering Bitcoinで一通りBitcoinの仕組みを理解していることを前提としているので、「Bitcoinの原論文ってどんなこと書いてあるんだろ」くらいの感覚で読んで頂けると幸いです。
原論文はここから読めます。
0. 基本情報
タイトル:Bitcoin: A Peer-to-Peer Electronic Cash System
著者:Satoshi Nakamoto(正体不明)
発表日時:2008年10月31日
1. Introduction
現在のインターネット決済では
- 金融機関が仲介するため、一度行った取引がなかったことになる可能性がある
- 仲介コストがかかることで、小額取引(マイクロペイメント)が難しい。(100円の振り込みしようと思ったら400円の振り込み手数料かかるから無理やんみたいなこと)
- 仲介者がいることで、めちゃめちゃ大きい額の取引ができなかったりする。
- 信用に依存しているため、詐欺等は一定確率で発生し、常に取引相手に対して懐疑心を持たねばならない。
といった問題があるので、よくない。
一方で、仲介者を無くそうとするシステムでは
- 二重支払い問題が解決できていない
という問題がある。
これらの問題を解決する仕組みBitcoinを提案しますという話
2.Transactions
トランザクションについて「UTXO, locking script, unlocking script」周りの話が、めっちゃざっくり説明してある。
二重支払い問題の解決は、これまで「中央機関が全ての取引を監視し、取引が起こるたびにそこで使われた通貨を一度無効にし、新しい通貨を発行することで、新しい通貨は二重使用されていない」という証明の仕方をしていたが、Bitcoinでは「全ての取引履歴を全員が監視し、多くの人が二重使用されていないと同意したらそのコインはそのコインは二重使用されていない」という証明方法を使います。といった話
3. Timestamp Server
連鎖していくブロックは直前のブロックの(正確にはブロックヘッダの)Hash値を含んでいるので、「このブロックは必ずこのブロックの前に存在していた」ということが証明され、一種のタイムスタンプになるという話。
4. Proof-of-Work
- 「どんなnonceの値を入れたらこのブロックのブロックヘッダハッシュはdifficulty以下の数値になるでしょうか?」というPoWの「大量の計算処理による試行錯誤を必要とする」問題の解をブロックヘッダに含めることによって、直前のブロックが次のブロックの要素となるという点と相まって「その大変な問題」をもう一度、それ以降のブロックの個数分解き直さないとデータブロックを変更できないという仕組みになっている
- difficultyもコンピュータの計算パワーが発展して変動するのに合わせて調整されるようになっている
- 最長のチェーンが正当だとみなされる
という点から、ブロックデータは改ざんできないようになってますという話
5. Network
1. 新規のトランザクションは全ノードに向けて送信される。(全ノードに届かなくても良い)
2. 各ノード(正確にはminer)が新しい取引をブロックに取り入れる。
3. 各ノード(正確にはminer)がそのブロックへのプルーフ・オブ・ワークを算出する。
4. PoWを見つけ次第、各ノードはそれを全ノードに告知する。
5. ノードは、ブロックに含まれる全ての取引が有効であり、以前に使われていないことを検証した上で、それを承認する。
6. ノードは、承認されたブロックのハッシュを直前のハッシュとして用いて、チェーンの次のブロックの作成を開始する。
と言った流れでトランザクションはブロックに入れられて行きますよという話
6. Incentive
ブロック作成者に「新規発行bitcoin(coinbeseトランザクション)」と「そのブロックに含まれるトランザクションの取引手数料の総和」を電力と計算資源使ってPoWを解いてブロック生成した報酬として与える。
もし他の全てのノードの計算力を上回る主体が攻撃者として不正を働こうとしても、
攻撃者ができることは
・自分の支払ったトランザクションをなかったことにする
くらいしかできず、それならその計算資源でマイニングしてたほうが儲かるから
不正するインセンティブないよねという話
7. Reclaiming Disk Space
古いブロックの中身トランザクションのデータは保持しておく必要はなく、Merkle Treeで要約したMerkle Rootがブロックヘッダに含まれているので、それだけ持ってることでディスク容量等節約できるよねという話。
8. Simplified Payment Verification
タイトルからわかる通り、SPVノードの説明。
7の考え方でブロックヘッダだけ保持していても、トランザクションを検証することはできるよねという話
9. Combining and Splitting Value
一つのUTXOに含まれるbitcoinは分割することはできず、各トランザクションにはInput, Output共に複数含めることが可能になっているという話。
10. Privacy
従来の商取引のプライバシー保護の仕方は「取引を処理する関連団体だけの秘密にする」(逆に言えば関係者には見られる)というものだったが、
Bitcoinでは「公開鍵と個人が紐づけられていない」ため、「誰かが誰かにいくら送ったかは全員に見られるけど、それが誰かはわからない」というプライバシー保護になっている。
また、同じBitcoinアドレス・公開鍵を使っていると取引傾向などで個人が判明する恐れがあるので、一回のトランザクションごとに新しい鍵を生成するようにする必要があるよという話
11. Calculations
攻撃者が正当なチェーンよりも速いスピードで偽のチェーンを伸ばして行き、データを改ざんしようとする場合について考えている。
攻撃者が新規ブロックを生成する確率(攻撃者の持つハッシュパワーに依存する)がその他の正常なノードが新規ブロックを生成する確率よりも低いと仮定した時には、ブロックが積み上がるに連れて攻撃が成功する確率が指数関数的に減少していくことを示している。
12. Conclusion
- 良心的なノードが CPU パワーの過半数をコントロールしている限り、Proof-of-Workを使って記録された公開型の取引履歴を攻撃者が変更するのが、実質上実行不可能になっていく P2P ネットワークとして設計している。
- 各ノードは同時に動作している必要はあるが、協調する必要はない。
- トランザクションやブロックなどのメッセージは特定の場所に転送されるわけではないのでノードが特定されることはない。
- ノードは自由にネットワークに接続、離脱できる。
- 各ノードは独立して、トランザクション・ブロックの検証と取り込みを行う。
といったこれらのルールによって成る、信用に依存しない電子取引のシステムBitcoinを提案するというまとめ話
<感想>
Bitcoinのwhite paper自体はとても簡潔に書かれており、Satoshi Nakamotoによって開発されたBitcoinリファレンスクライアントであるBitcoin Coreのソースコードを参照することを前提にしているんだろうなぁと感じました。
中でも、「11章 Calculations」は、Mastering Bitcoinにはなかった確率計算を読めるのでとても参考になります。
Mastering Bitcoinを読破→原論文の「11章 Calculations」という流れで読むといいと思います。
0コメント