<< TOPへ
Bitcoin A Peer-to-Peer Electronic Cash System.pdf
---
## Page 1
[](/attach/b1674191a88ec5cdd733e4240a81803105dc412d6c6708d53ab94fc248f4f553_p001.png)
### 和訳
ビットコイン:仲介者なしの電子マネーシステム
サトシ・ナカモト
satoshin@gmx.com
www.bitcoin.org
要約。ほんまにな、銀行とか通さんと、直接お金のやり取りできる電子マネーがあったらええと思わへん?デジタル署名っていう技術で一部は解決できるんやけど、結局「二重使用」を防ぐのに信頼できる仲介者が必要やったら意味ないやん。せやから俺ら、仲介者なしのネットワークで二重使用問題を解決する方法を提案するで。このネットワークでは、取引を「ハッシュ」っていう暗号に変換して、「プルーフ・オブ・ワーク」っていう計算作業でつないだチェーンにどんどん記録していくねん。で、この記録は、プルーフ・オブ・ワークを全部やり直さへん限り改ざんでけへんようになってるんや。一番長いチェーンが「こういう順番で取引が起きましたよ」っていう証拠になるだけやなくて、一番多くの計算パワーから生まれたっていう証拠にもなるねん。ネットワークを攻撃しようとするグループより、普通に参加してる人らの計算パワーが上回ってる限り、正直者側が一番長いチェーンを作り続けて、攻撃者を追い抜けるってわけや。ネットワーク自体はめっちゃシンプルな構造でええねん。メッセージは「届いたらラッキー」程度の気楽さで送るし、参加者は好きなときに抜けたり戻ったりできて、戻ったときは一番長いチェーンを「自分がおらん間に起きたこと」として受け入れたらええだけやねん。
1. はじめに
今のインターネットの商取引って、ほぼ完全に銀行とかの金融機関に頼りきりやねん。電子決済を処理してもらう「信頼できる仲介者」としてな。まあ、ほとんどの取引はこれでうまいこといくんやけど、この「信頼に基づくモデル」には根本的な弱点があるねん。完全に取り消せない取引って実はでけへんのよ。なんでかっていうと、金融機関はトラブルがあったら仲裁せなあかんから。で、この仲裁のコストが取引コストを上げてもうて、実用的な最低取引額が上がってまうし、ちょっとした少額取引ができひんようになるねん。それに、取り消せないサービスに対して取り消せない支払いができひんのも、もっと大きな問題やな。取り消しの可能性があるから、いろんなところで信頼が必要になってくるねん。お店は客を警戒せなあかんし、本来必要ない情報まで聞き出さなあかん。一定割合の詐欺は「しゃあない」って受け入れるしかないのが現状や。こういうコストや決済の不確実性は、直接会って現金使えば避けられるけど、ネット経由で信頼できる仲介者なしに決済する方法がなかったんよな。
ほな何が必要かっていうと、信頼やなくて暗号による証明に基づいた電子決済システムやねん。そしたら、取引したい2人が直接やり取りできるし、信頼できる第三者いらんようになるやん。計算上、事実上取り消せない取引にしたら売り手は詐欺から守られるし、買い手を守るための「エスクロー」っていう預かり金の仕組みも簡単に作れるで。この論文では、仲介者なしの分散型タイムスタンプサーバーを使って、取引の時系列を計算で証明することで、二重使用問題を解決する方法を提案するわ。正直に参加してる人らの計算パワーの合計が、グルになった攻撃者グループより大きい限り、このシステムは安全やねん。
---
## Page 2
[](/attach/b1674191a88ec5cdd733e4240a81803105dc412d6c6708d53ab94fc248f4f553_p002.png)
### 和訳
2. トランザクション
電子コインって何やねんっていうと、デジタル署名のチェーンみたいなもんやねん。どういうことかっていうと、コインの持ち主が次の人に渡すときに、前のトランザクションのハッシュと、次の持ち主の公開鍵をデジタル署名して、それをコインの最後にくっつけていくんや。ほんで、お金を受け取る側は、その署名を順番に確認していけば、「ほんまにこの人からこの人に渡ってきたんやな」っていう所有権の流れを検証できるわけやねん。
でもな、ここで問題があんねん。受け取る側からしたら、前の持ち主が同じコインを二重に使ってへんか確認できひんのや。これを解決するために、よくあるのは信頼できる中央機関、まあ造幣局みたいなもんを作って、全部のトランザクションで二重使用がないかチェックする方法やな。取引のたびにコインを造幣局に戻して、新しいコインを発行してもらう。ほんで、造幣局から直接発行されたコインだけが「二重使用されてへん」って信頼される仕組みや。でもこれの問題は何かっていうと、お金のシステム全体が造幣局を運営してる会社に依存してまうことやねん。全部の取引がそこを通らなあかんから、結局銀行と一緒やんってなるわけや。
せやから、受け取る側が「前の持ち主らは、これより前に署名してへんな」って確認できる方法が必要やねん。ここで大事なんは、一番最初のトランザクションだけが有効ってことや。後から二重使用しようとしても、そんなん関係あらへん。で、「このトランザクションは存在せえへん」って確認する唯一の方法は、全部のトランザクションを把握することやねん。造幣局モデルやったら、造幣局が全トランザクションを知ってて、どれが先に来たか判断してたわけや。これを信頼できる第三者なしでやるには、トランザクションを公開して発表せなあかん。ほんで、参加者みんなが「どの順番で受け取ったか」っていう履歴を一つに合意できるシステムが必要やねん。受け取る側としては、「その取引の時点で、ノードの大多数がこれを最初に受け取ったって合意してた」っていう証拠が欲しいわけや。
3. タイムスタンプサーバー
俺らが提案する解決策は、タイムスタンプサーバーから始まるねん。タイムスタンプサーバーって何するかっていうと、タイムスタンプを付けたいアイテムをまとめたブロックのハッシュを取って、それを新聞とかUsenetの投稿とかで広く公開するんや。このタイムスタンプがあることで、「そのデータはその時点で存在してたはずや」って証明できるわけやな。だってハッシュに入れるためには、そのデータがその時にないとあかんもんな。ほんで、各タイムスタンプには前のタイムスタンプがハッシュに含まれてて、チェーンを形成していくねん。新しいタイムスタンプが追加されるたびに、前のタイムスタンプがどんどん強化されていく仕組みや。
---
## Page 3
[](/attach/b1674191a88ec5cdd733e4240a81803105dc412d6c6708d53ab94fc248f4f553_p003.png)
### 和訳
4. プルーフ・オブ・ワーク
ピアツーピアでタイムスタンプサーバーを分散型で動かそう思ったら、新聞とかUsenetの投稿やなくて、アダム・バックさんが考えたHashcash [6]みたいなプルーフ・オブ・ワーク(仕事の証明)っていうシステムが必要になんねん。これ何かっていうと、SHA-256みたいなハッシュ関数で値を計算したときに、その結果がゼロビットで始まるような値を探し回る作業のことやねん。必要なゼロビットの数が増えれば増えるほど、平均で必要な作業量は指数関数的にめっちゃ増えるんやけど、検証するときはハッシュ1回計算するだけでOKやから楽ちんやで。
このタイムスタンプネットワークでは、ブロックの中のナンス(使い捨ての数値)をちょっとずつ増やしていって、ブロックのハッシュ値が必要な数のゼロビットで始まる値を見つけるまで頑張るんや。CPUでめっちゃ計算してプルーフ・オブ・ワークの条件を満たしたら、そのブロックは作業をやり直さん限り変更でけへんようになるわけや。しかも後からブロックがどんどん繋がっていくから、過去のブロックを変えようと思ったら、それ以降の全部のブロックの作業もやり直さなあかんねん。
ブロック → ブロック
前のハッシュ / ナンス / 取引 取引 ... → 前のハッシュ / ナンス / 取引 取引 ...
プルーフ・オブ・ワークはな、多数決で物事決めるときの「誰の意見をどれだけ重視するか」っていう問題も解決してくれんねん。もし「1つのIPアドレスで1票」ってルールにしたら、IPアドレスいっぱい持ってる奴がズルできてまうやろ?せやけどプルーフ・オブ・ワークは実質「1つのCPUで1票」になるわけや。多数派の決定は一番長いチェーン、つまり一番たくさんのプルーフ・オブ・ワークを費やしたチェーンで表されるんや。正直者のノードがCPUパワーの過半数を持ってたら、正直なチェーンが一番速く伸びて、他のチェーンを追い抜くわけやな。過去のブロックを改ざんしようと思ったら、攻撃者はそのブロックとそれ以降の全ブロックのプルーフ・オブ・ワークをやり直して、さらに正直者のノードの作業に追いついて追い越さなあかん。後で説明するけど、遅い攻撃者が追いつける確率は、ブロックが追加されるたびに指数関数的に小さくなっていくんやで。
ハードウェアの性能がどんどん上がったり、ノードを動かす人の数が時期によって変わったりするのを調整するために、プルーフ・オブ・ワークの難易度は移動平均で調整されてて、1時間あたりのブロック数が目標の数になるようにしてるんや。ブロックが速く生成されすぎたら、難易度が上がる仕組みやねん。
5. ネットワーク
ネットワークを動かす手順はこんな感じや:
1) 新しい取引は全ノードにブロードキャスト(一斉送信)される
2) 各ノードが新しい取引をブロックに集める
3) 各ノードが自分のブロックの難しいプルーフ・オブ・ワークを見つけようと頑張る
4) ノードがプルーフ・オブ・ワークを見つけたら、そのブロックを全ノードにブロードキャストする
5) ノードはそのブロック内の全取引が有効で、まだ使われてないときだけブロックを受け入れる
6) ノードは受け入れたブロックのハッシュを前のハッシュとして使って、次のブロックを作る作業を始めることで、そのブロックを認めたことを示すんや
ノードは常に一番長いチェーンを正しいもんとみなして、それを伸ばす作業を続けるんや。もし2つのノードが同時に違うバージョンの次のブロックをブロードキャストしたら、受け取るノードによってどっちを先に受け取るか変わるやろ?そしたら、先に受け取った方で作業するんやけど、もう片方のブランチ(枝分かれ)も念のため保存しとくんや。次のプルーフ・オブ・ワークが見つかって片方のブランチが長くなったときに決着がつくんやな。短い方で作業してたノードは、そのとき長い方に乗り換えるっちゅうわけや。
---
## Page 4
[](/attach/b1674191a88ec5cdd733e4240a81803105dc412d6c6708d53ab94fc248f4f553_p004.png)
### 和訳
新しい取引のブロードキャストな、別に全部のノードに届かんでもええねん。たくさんのノードに届いたら、そのうちブロックに入れてもらえるからな。ブロックのブロードキャストも、メッセージが途中で落ちても大丈夫なようにできてるねん。もしノードがブロック受け取れへんかったら、次のブロック受け取った時に「あ、一個飛ばしてもうた」って気づいて、リクエストして取りに行くんやで。
## 6. インセンティブ
ルールとして、ブロックの一番最初の取引はちょっと特別なやつでな、そのブロック作った人が新しいコインもらえるっていう取引なんよ。これがあることで、ノードがネットワーク支えよう!ってモチベーションになるし、中央銀行みたいなコイン発行する偉い人おらんから、最初にコインを世の中に流す方法にもなってるわけや。一定量の新しいコインがコツコツ増えていくのは、金鉱掘りが頑張って金を世の中に出すのと似てるやろ?うちらの場合は、CPUの処理時間と電気代を使ってるってことやな。
インセンティブは取引手数料からも出せるで。取引の出力の金額が入力より少なかったら、その差額が取引手数料になって、その取引が入ってるブロックのインセンティブに上乗せされるんや。あらかじめ決められた量のコインが世の中に出回ったら、インセンティブは完全に取引手数料だけでまかなえるようになって、インフレとは無縁になるんやで。
このインセンティブの仕組み、ノードが正直でいようって思わせる効果もあんねん。もし欲張りな攻撃者が正直なノード全部合わせたよりも多いCPUパワー集めたとしてもや、選択肢は二つしかないねん。そのパワー使って自分の支払いを取り消す詐欺するか、新しいコイン生み出すのに使うか。でもな、よう考えたら、ルール通りにやった方が儲かるはずやねん。だってそしたら他の全員合わせたより多い新しいコインもらえるルールになってるんやから。システム壊して自分の財産の価値まで下げるより、ずっとマシやろ?
## 7. ディスク容量の節約
コインの最新の取引が十分な数のブロックの下に埋まったら、その前の使用済み取引は捨ててディスク容量節約できるようになるねん。これをブロックのハッシュ壊さんとやるために、取引はマークルツリー[7][2][5]っていう形でハッシュ化されてて、ブロックのハッシュにはそのルート(根っこ)だけが含まれてるんや。せやから古いブロックは、ツリーの枝を切り落として圧縮できるんよ。内部のハッシュは保存しとく必要ないねん。
[図の説明:ブロックヘッダーにはPrev Hash(前のハッシュ)とNonce(ナンス)とRoot Hash(ルートハッシュ)があって、その下にHash01とHash23、さらにその下にHash0、Hash1、Hash2、Hash3があって、一番下にTx0、Tx1、Tx2、Tx3の取引がある。これがマークルツリーでハッシュ化された取引や。剪定後はTx0-2が消えて、Tx3とHash2、Hash3だけ残る感じやな]
取引なしのブロックヘッダーは大体80バイトくらいやねん。ブロックが10分ごとに生成されるとしたら、80バイト × 6 × 24 × 365 = 年間4.2MBや。2008年時点でコンピュータは普通2GBのRAM積んで売られてて、ムーアの法則によると年間1.2GBずつ増えていくから、ブロックヘッダー全部メモリに置いとかなあかんくても、容量の問題にはならへんはずやで。
---
## Page 5
[](/attach/b1674191a88ec5cdd733e4240a81803105dc412d6c6708d53ab94fc248f4f553_p005.png)
### 和訳
8. 簡易支払い確認(めっちゃ楽ちんな確認方法)
なぁ聞いてや、実はネットワークのフル機能動かさんでも支払いの確認できるねん。ユーザーがせなあかんのは、一番長いプルーフ・オブ・ワークのチェーン(これが本物の記録や)のブロックヘッダーだけ手元に持っとくことやねん。これはネットワークのノードに「最長のチェーンくれや」って聞きまくって、「よっしゃこれが一番長いわ」って確信できるまで集めたらええねん。ほんで、自分の取引がどのブロックに入ってるか紐づけてるマークルブランチっていう証明書みたいなんをゲットするわけや。
自分で取引の中身をガッツリ検証はでけへんねんけど、チェーンのどこかにちゃんと繋がってるのが確認できたら、「あ、ネットワークのノードがこの取引認めたんやな」ってわかるやん。しかもその後にブロックがどんどん追加されてったら、「ほんまにネットワーク全体が認めてるわ」ってさらに確信持てるわけや。
【図の説明:一番長いプルーフ・オブ・ワークチェーンがあって、各ブロックヘッダーには前のハッシュとナンス、マークルルートが入ってる。で、取引3(Tx3)がどのブロックに入ってるか、マークルブランチで辿れるようになってんねん】
そやから、正直もんのノードがネットワーク支配しとる限り、この確認方法は信頼できるで。でもな、攻撃者にネットワーク乗っ取られたらヤバいねん。普通のネットワークノードは自分で取引検証できるけど、この簡易版やと、攻撃者がでっち上げた偽取引に騙されてまう可能性あるねん。攻撃者がネットワーク支配し続けてる間はずっとや。
これに対抗する作戦としては、ネットワークノードが「おい、不正なブロック見つけたで!」ってアラート出してくれるようにして、それ受け取ったらユーザーのソフトがフルブロックと怪しい取引をダウンロードして、「ほんまに不正やったんか」確認するっていう方法があるねん。頻繁に支払い受ける店とかビジネスやってるとこは、セキュリティ的にも確認のスピード的にも、自前でノード動かした方がええやろな。
9. お金の合体と分割
コインを1枚1枚別々に扱うことも理論上はできるで。でもな、1円ずつ別の取引にしてたらめんどくさすぎてやってられへんやろ?だから取引には複数のインプット(入ってくるお金)とアウトプット(出ていくお金)を入れられるようになってんねん。
普通は、デカい取引1個からのインプットか、小さい金額いくつか合わせたインプットのどっちかやな。ほんでアウトプットは多くても2個:1個は支払い先、もう1個はお釣りを自分に戻す用や(お釣りある時だけやけどな)。
【図の説明:取引の箱があって、複数のインプットが入ってきて、複数のアウトプットに出ていく感じや】
ちなみに「ファンアウト」って呼ばれる、1つの取引が複数の過去取引に依存して、その過去取引もさらに大量の取引に依存してる…みたいな状況も別に問題ないねん。取引の履歴を全部完璧にコピーして持っとく必要なんてないからな。
---
## Page 6
[](/attach/b1674191a88ec5cdd733e4240a81803105dc412d6c6708d53ab94fc248f4f553_p006.png)
### 和訳
10. プライバシーの話やで
従来の銀行システムってな、プライバシーを守るために、関係者と信頼できる第三者(銀行とかやな)だけに情報へのアクセスを制限しとったわけや。でもな、このシステムやと全部の取引を公開せなあかんから、そのやり方は使われへんねん。せやけど、別のところで情報の流れを断ち切ることで、プライバシーは守れるんや。どうするかっていうと、公開鍵を匿名のままにしとくねん。つまりな、誰かが誰かにお金送っとるのは世間に見えるんやけど、その取引が具体的に誰のもんかはわからんようになっとるわけや。これ、株式取引所が出しとる情報と似とるねん。取引の時間と規模、いわゆる「ティッカーテープ」は公開されとるけど、誰が売り買いしたかは教えてくれへんやろ?あれと同じ発想やな。
従来のプライバシーモデル
個人の身元 → 取引情報 → 信頼できる第三者 → 取引相手
↓
一般公開
新しいプライバシーモデル
個人の身元 → 取引情報 → 一般公開
(身元と取引の間でつながりが切れとる)
さらにファイアウォールとして、取引ごとに新しい鍵ペアを使うのがええで。そうすることで、複数の取引が同じ持ち主のもんやってバレにくくなるんや。ただな、複数のインプットがある取引やと、どうしてもそれらのインプットが同じ持ち主のもんやって分かってまうことがあるねん。これは避けられへん。リスクとしては、もし鍵の持ち主が特定されてもうたら、その人の他の取引まで芋づる式にバレてまう可能性があるってことやな。
11. 計算の話やで
ここでは、攻撃者が正直なチェーンより速く別のチェーンを作ろうとするシナリオを考えるで。仮にそれができたとしても、システムが好き勝手にいじれるようになるわけちゃうねん。例えば、何もないところからお金を生み出したり、元々攻撃者のもんちゃうお金を奪ったりはでけへんのや。なんでかっていうと、ノードは不正な取引を支払いとして受け付けへんし、正直なノードはそんな取引が入ったブロックは絶対に承認せえへんからや。攻撃者ができるのは、自分がやった取引を書き換えて、最近使ったお金を取り戻そうとすることくらいやねん。
正直なチェーンと攻撃者のチェーンの競争は、「二項ランダムウォーク」っていう確率の問題で表現できるんや。成功イベントは正直なチェーンが1ブロック伸びること、これでリードが+1増えるわけやな。失敗イベントは攻撃者のチェーンが1ブロック伸びること、これで差が-1縮まるわけや。
攻撃者がある程度の差をつけられた状態から追いつく確率は、「ギャンブラーの破産問題」と同じ考え方で計算できるねん。例えばな、無限にお金借りられるギャンブラーが、マイナスからスタートして、プラマイゼロになるまで無限に勝負し続けるとするやろ?そのギャンブラーがプラマイゼロに到達できる確率、つまり攻撃者が正直なチェーンに追いつける確率は、こうやって計算できるんや[8]:
p = 正直なノードが次のブロックを見つける確率
q = 攻撃者が次のブロックを見つける確率
qz = 攻撃者がzブロック遅れから追いつく確率
qz = { 1 もし p ≤ q の場合(攻撃者が同等以上の計算力持っとったら確実に追いつく)
{ (q/p)^z もし p > q の場合(正直者が強かったら、遅れるほど追いつく確率はめっちゃ下がる)}
---
## Page 7
[](/attach/b1674191a88ec5cdd733e4240a81803105dc412d6c6708d53ab94fc248f4f553_p007.png)
### 和訳
さて、p > q っていう前提やけど、攻撃者が追いつかなあかんブロック数が増えれば増えるほど、成功する確率はめっちゃ急激に下がっていくねん。分が悪い状況で、最初のうちにラッキーパンチで一気に追いつけへんかったら、どんどん遅れていくにつれて、もうほぼチャンスなくなってまうんやな。
ほんで次に考えるのは、新しい取引を受け取った人が「この送金、もう変更されへんわ」って安心できるまでどんだけ待たなあかんかってことやねん。ここでは送金者が悪いやつで、しばらくの間「ちゃんと払ったで」って思わせといて、時間経ってから自分に金戻すように書き換えようとしてるって想定するで。受け取り側はそれが起きたら通知されるんやけど、送金者は「その頃にはもう手遅れやろ」って狙ってるわけや。
受け取り側は新しい鍵ペアを作って、署名する直前に公開鍵を送金者に渡すねん。こうすることで、送金者が事前にブロックのチェーンをコツコツ作り続けて、十分先に進んだタイミングで取引を実行する、っていう手が使えんようになるんや。取引が送られた後、悪い送金者は秘密裏に別バージョンの取引を含む並行チェーンの作成を始めるわけやな。
受け取り側は、取引がブロックに追加されて、その後ろに z 個のブロックが繋がるまで待つねん。攻撃者が実際どんだけ進んでるかは正確にはわからへんけど、正直なブロックが平均的な時間で作られたって仮定すると、攻撃者の進み具合はポアソン分布っていう確率分布に従うんや。期待値はこうなるで:
λ = z × (q/p)
ほんで、攻撃者が今から追いつける確率を求めるには、攻撃者がどんだけ進んだかの各パターンについてポアソン分布の確率を出して、そこから追いつける確率を掛けて全部足すねん:
∞ k e−λ
Σ ────── × { (q/p)^(z-k) もし k ≤ z のとき
k=0 k! { 1 もし k > z のとき
無限に続く分布の後ろの方を足さんでええように式を整理すると...
1 − Σ (λ^k × e^−λ / k!) × (1 − (q/p)^(z−k))
k=0〜z
これをC言語のコードにするとこうなるで...
```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;
}
```
---
## Page 8
[](/attach/b1674191a88ec5cdd733e4240a81803105dc412d6c6708d53ab94fc248f4f553_p008.png)
### 和訳
ほな実際に計算してみた結果見てみてな。確率がzの値によって指数関数的にガクンと下がっていくのがわかるで。
q=0.1(攻撃者が10%のパワー持ってる場合)
z=0 P=1.0000000(そら0ブロックやったら100%逆転できるわな)
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.0002428
z=7 P=0.0000647
z=8 P=0.0000173
z=9 P=0.0000046
z=10 P=0.0000012(もうほぼゼロやん)
q=0.3(攻撃者が30%のパワー持ってる場合)
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.0006132
z=30 P=0.0001522
z=35 P=0.0000379
z=40 P=0.0000095
z=45 P=0.0000024
z=50 P=0.0000006
ほんで確率が0.1%未満になるには何ブロック待てばええか計算したで...
P < 0.001(0.1%未満)
q=0.10 z=5(攻撃者10%なら5ブロック待てばOK)
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(45%もパワー持ってる攻撃者やと340ブロックも待たなあかんねん)
12. まとめ
ワシらは信頼に頼らんでも電子取引できるシステムを提案したんや。まずはデジタル署名でコイン作るっていう、まあ普通のやり方から始めたんやけどな。これで所有権はガッチリ管理できるんやけど、二重使用を防ぐ仕組みがないと不完全やったわけや。
これを解決するためにな、プルーフ・オブ・ワーク(仕事の証明)を使ったP2Pネットワークを提案したんや。これで取引の履歴を公開記録として残すんやけど、正直なノードが過半数のCPUパワー持ってる限り、攻撃者がこれを改ざんしようとしても計算量的にめっちゃ無理ゲーになるんや。
このネットワークのええとこは、構造がシンプルやからめっちゃ頑丈ってことやねん。ノードはみんな一斉に動いて、ほとんど調整いらんのや。身元確認も必要ないで。なんでかっていうと、メッセージは特定の場所に送る必要なくて、とりあえず届けばOKやからや。ノードは好きな時にネットワークから抜けても、また戻ってきてもええねん。戻ってきた時はプルーフ・オブ・ワークのチェーンを見れば、おらん間に何が起こったかわかるようになってるんや。
投票はCPUパワーでするんやで。正当なブロックは延長する作業を続けることで「これ認めるわ」って意思表示して、不正なブロックは作業せーへんことで「これあかんわ」って拒否するんや。必要なルールやインセンティブは、全部このコンセンサスメカニズムで実現できるんやで。
---
## Page 9
[](/attach/b1674191a88ec5cdd733e4240a81803105dc412d6c6708d53ab94fc248f4f553_p009.png)
### 和訳
参考文献
[1] W. Dai, 「b-money」, http://www.weidai.com/bmoney.txt, 1998年.
これがな、ビットコインの元ネタみたいな論文やねん。Wei Daiっていう人が考えた電子マネーのアイデアや。
[2] H. Massias, X.S. Avila, J.-J. Quisquater, 「できるだけ信頼せんでええセキュアなタイムスタンプサービスの設計」, ベネルクス情報理論シンポジウム第20回, 1999年5月.
タイムスタンプってのは「この文書、この時点で存在してましたよ」って証明するやつやねんけど、それをなるべく誰も信用せんでも動く仕組みにしようって研究やな。
[3] S. Haber, W.S. Stornetta, 「デジタル文書にタイムスタンプ押す方法」, Journal of Cryptology, 第3巻, 第2号, 99-111ページ, 1991年.
めっちゃ有名な論文やで!デジタルのファイルに「いつ作られたか」を改ざんできひんように記録する方法を考えた、ブロックチェーンの先祖みたいな研究やねん。
[4] D. Bayer, S. Haber, W.S. Stornetta, 「デジタルタイムスタンプの効率と信頼性をもっとええ感じにする方法」, Sequences II: Methods in Communication, Security and Computer Science, 329-334ページ, 1993年.
上の論文の続きでな、もっと効率よくタイムスタンプできるように改良した話や。
[5] S. Haber, W.S. Stornetta, 「ビット列に安全な名前つける方法」, 第4回ACMコンピュータ・通信セキュリティ会議, 28-35ページ, 1997年4月.
データに「これは絶対このデータや」って証明できる名前をつける技術の話やな。ハッシュ関数使うやつや。
[6] A. Back, 「Hashcash - DoS攻撃への対抗手段」, http://www.hashcash.org/papers/hashcash.pdf, 2002年.
これがほんまに重要でな!ビットコインのマイニングの元ネタになったやつや。計算パズル解かせてスパムとか防ごうっていうアイデアやねん。
[7] R.C. Merkle, 「公開鍵暗号システムのためのプロトコル」, 1980年セキュリティ・プライバシーシンポジウム, IEEE Computer Society, 122-133ページ, 1980年4月.
マークルツリーを発明した人の論文やで。データをめっちゃ効率よく検証できる木構造のことや。ブロックチェーンでバリバリ使われとるで。
[8] W. Feller, 「確率論とその応用入門」, 1957年.
確率の教科書やな。ビットコインの論文で攻撃者が追いつく確率の計算に使われとるねん。数学の基礎として引用されとるわけや。
---
1 / 1