ビットコイン:ピアーからピアーへ(P2P)の電子キャッシュシステム

Satoshi Nakamoto
atoshin@gmx.com
www.bitcoin.org
訳 片山泰男(Yasuo Katayama) Mar. 29 2018
戻る↑ 
概要: 電子キャッシュの純粋にP2P版が、信用機関を通さず一つの団体から他に直接に送るオンライン支払いを可能にするかもしれない。デジタル 署名がその解の部分を用意するが、2重支払いを防ぐために信用される第3の団体をまだ必要とするなら、主要な利便は失われる。我々は、 2重支払いの問題に、P2Pネットワークを使った解を提案する。商取引のネットワークのタイムスタンプを進行中のハッシュベースの仕事証 明の連鎖にハッシュすることで、仕事証明のやり直しなしには変更できない記録を形成する。最長の連鎖が出来事のシーケンスの目撃の証明 として役立つだけでなく、それがCPUパワーの最大の集団からくることの証明でもある。CPUパワーの大多数がネットワークへの攻撃に協力し ないノードによって制御される限り、それらは最長のチェーンを生成し攻撃者を凌駕するだろう。ネットワーク自身は最小の構造しか必要 としない。メッセージはベストエフォートベースで放送され、ノードは望むときネットワークから離脱でき、最長の仕事証明のチェーンを、 不在の間、何が起きたかの証明として受け入れ、再結合できる。


←BACK TOP↑ NEXT→

1. 導入

インターネット上の商取引は、電子支払い過程に信用される第3者として働く金融機関に、ほとんど排他的に依存するようになった。 ほとんどの取引にとってシステムは十分によく働く一方、それはまだ、信用ベースのモデルの固有の脆弱さのために苦労をしている。 完全な不可逆的な取引は現実に可能でなく、金融機関は仲介した争議を避けられない。仲介コストは取引コストを増加させ、実際的 な取引の最小サイズを制限し、普段の小さな取引への可能性を切り、不可逆サービスへの不可逆支払いをする能力の喪失には、より 広範なコストがある。反転の可能性に伴い、売買のスプレッドが必要になる。商人は彼らの顧客がそうでなければ彼らが必要とする 情報以上の情報を求めて悩むのを警戒しないといけない。詐欺のあるパーセンテージは避けられないとして受けいられる。これら コストと支払いの不確実さは、自ら物理的な通貨を使えば避けられるが、信用団体なしの通信回線上の支払メカニズムは存在しない。

必要なものは、信用の代わりに暗号の証明に基づく電子支払いシステムで、第3者の信用の必要なしにどの望む2団体も互いの 直接取引を許すものである。取引が反転することが計算量的に実際的でないことが、売人を詐欺から防御し、預託メカニズムの 手続きが、容易に買人の防御を実装できるだろう。この論文では、我々は2重消費問題に対して、P2Pの分散タイムスタンプサーバー を使った、取引の時間的順序の計算論的な証明を生成する解答を提案する。正直なノードが集合的に、 攻撃者ノードのどの協力グループよりも多くのCPUパワーを制御する限り、システムは安全である。


←BACK TOP↑ NEXT→

2. 取引

我々は、デジタル署名のチェーンとして電子通貨を定義する。各所有者は、以前の取引と次の所有者の公開鍵のハッシュにデジタル 署名してコインを次に転送し、コインの末にこれらを付け加える。受取人は、署名を検証して所有のチェーンを検証できる。


もちろん問題は、受取人が何れかの所有者がコインを2重消費しなかったことを検証できないことである。共通の解は、全ての取引に 2重支払いをチェックする、信用される中央権威者、造幣局の導入である。各取引の後、コインは造幣局に新コインを発行するために、 返却されないといけない。造幣局から直接発行されたコインだけが2重支払いがないと信用される。この解の問題は、全てのお金の システムが造幣を行う会社に頼っていて、どの取引も銀行のようなそれらを通さなければならないことである。

我々は、受取人が以前の所有者がどの取引かで署名しなかったことを知るための方法を必要とする。我々の目的のために、 我々が後の2重支払いの試みについて考慮しないような、最も以前の取引をひとつ考慮する。取引の不在を確認する唯一の方法は、 全取引を警戒することである。造幣局ベースモデルでは、造幣局は全ての取引を警戒するなかで、最初に到達したものと決定する。 信用する団体なしにこれが達成されるには、取引は公に案内されなくてはならない[1]、そして、それらが受け取られたなかで、 順序の単独の歴史について参加者が合意するシステムを必要とする。受取人は、各取引の時刻に最初に受け取ったということについて、 ノードの過半数が合意したという証明を必要とする。


←BACK TOP↑ NEXT→

3. タイムスタンプサーバー

我々の提案する解は、タイムスタンプサーバーと共に始まる。タイムスタンプサーバーは、タイムスタンプされる項目をもつブロックの ハッシュをとり、そのハッシュを新聞やユーズネットへの投稿[2-5]のように広く公開する。タイムスタンプは、データがその時、ハッシュ に投入するためには明らかに存在したに違いないことを証明する。各タイムスタンプは、そのハッシュのなかに以前のタイムスタンプを含み、 それぞれの追加的タイムスタンプをもってその前のものたちを強化するチェーンを形成する。



←BACK TOP↑ NEXT→

4. 仕事証明

P2Pベースのうえに、分散的タイムスタンプサーバーを実装するには、我々は、新聞やユーズネット投稿[2-5]ではなく、Adam Backの Hashcash[6]に似た仕事証明システムを使用する必要があるだろう。仕事証明は、SHA-256 でのようにハッシュされると、数桁のゼロビット で始まる値になるものを求める探索を意味する。平均的に要求される仕事は、要求されるゼロビットの数の指数関数であり、そして 単独のハッシュの実行で検証できる。

我々のタイムスタンプネットワークにとって、我々はブロック内のノンス(*)を値がブロックのハッシュが要求されるゼロビットを与えるまで 増加することによって仕事証明を実装する。ひとたびCPU労力が仕事証明を満たすまで消費されると、そのブロックは、その仕事をやり直しなし には、変更できない。後のブロックはその後に連鎖されるから、そのブロックを変更する仕事は、その後の全てのブロックをやり直しを含むだろう。


仕事証明はまた多数決決定において決定代表の問題を解く。もし、多数決がIPアドレス一票ベースなら、多くのIPを割り振れる誰かによって転覆 できるだろう。仕事証明は、本質的に、1CPU1票である。多数決は最長のチェーンによって代表され、そのなかに投資された最大の仕事証明の労力 をもつ。もし、CPUパワーの大多数が正直なノードによって制御されるなら、正直なチェーンは最も早く育ち、どの競争者をも凌駕するだろう。 過去のブロックを修正するには、攻撃者はそのブロックとその後の全ブロックの仕事証明をやり直し、それから、正直ノードの仕事に追いつき 凌駕しなくてはならないだろう。我々が後に示すのは、後継のブロックが追加されるに従って、より遅い攻撃者が追いつく確率が指数関数的に 消滅することである。

ハードウェアの速度増加と、時間において動作ノードの興味の変化を補償するために、仕事証明の難しさは、時間あたりの平均ブロック数を 目標にした移動平均で決定される。もし、それらが余りに速ければ、難しさが増加する。

(*) [訳者注] 暗号通信で用いられる、使い捨てのランダムな値


←BACK TOP↑ NEXT→

5. ネットワーク

ネットワークを動作させる段階は次のようである:

1) 新しい取引が全ノードに放送される。
2) 各ノードは、新取引を集めてブロックにいれる。
3) 各ノードは、そのブロックに難しい仕事証明を見出す仕事をする。
4) あるノードが仕事証明を見出したとき、ノードはそのブロックを全ノードに放送する。
5) ノードらは、そのブロックのなかの全取引が有効で、すでに消費されたものでないときだけ、ブロックを受け入れる。
6) ノードらは、そのブロックの彼らの受容を表明する、次のブロックをチェーンに作成することに働き、以前のハッシュと同じく、 受容ブロックのハッシュを使う。

ノードは、常に最長のチェーンを正しいものと考え、それを伸ばすことを続ける。もし、2つのノードが次のブロックの別のバージョン を同時に放送しても、いくらかのノードは最初に一つを受信したり他を受けたりしてもよい。その場合、彼らは彼らの最初の受信で働き、 しかし、他の枝をそれがより長くなるなら保存する。次の仕事証明が見出されひとつの枝がより長くなるとき、結合は壊されるだろう; 他の枝に働いているノードは、そのとき、より長いものに切り替える。

新しい取引の放送は必ずしも、全ノードに到達する必要はない。それらが多くのノードに到達する限り、彼らはやがてブロックに投入するだろう。 ブロックの放送は、またメーセージの欠落にも耐性がある。もし、ノードがブロックを受け取らなければ、それは次のブロックを受けたとき、 ブロックの喪失を知り、それを要求するだろう。


←BACK TOP↑ NEXT→

6. 動機

慣例によって、ブロックの最初の取引は、ブロックの創始者によって所有される新通貨を開始する特別な取引である。これはノードにネットワークを 支持することの動機を加算し、初期に通貨を流通に分散させる1方法を用意する、なぜなら、それらを発行する中心的権威がないからである。 新貨幣の一定量の安定した追加は、資源を費やして金を流通に追加する金鉱採掘と類似している。我々の場合、それはCPU時間と費やされた電気である。

動機はまた取引手数料によって資金を得られる。もし、取引の出力値がその入力値より少ないとき、その差は取引手数料であり、それは取引を包含する ブロックの動機値に加算される。ひとたび、予定した一定数の貨幣が流通に入ったとき、動機は全て取引手数料に転換でき、完全にインフレから自由になる。

動機はノードが正直にいることを勧める。もし、貪欲な攻撃者が全ての正直なノード以上のCPUパワーを集合することができたとしても、彼はそれを 彼の支払いを盗みとることで人々を詐取するために使用するか、新貨幣を生成することにそれを使用するかを選択しなければならないだろう。彼は、 ルールによって行動することがより利益を得ることを見出すべきだろう。ルールとは、システムと彼自身の冨の価値を覆すよりは、つながった他の 誰よりも新貨幣によって彼に好意的なルールである。


←BACK TOP↑ NEXT→

7. ディスクスペースの再利用

ひとたび、通貨の最新の取引が十分なブロックで埋まれば、その前の消費された取引はディスク容量をセーブするために廃棄できる。ブロックのハッシュを 壊さずにこれを容易にするには、取引は、ルートだけをブロックのハッシュに含めるMerkle Tree[7][2][5]でハッシュされる。古いブロックは木の枝を刈り取る ことで圧縮できる。内部のハッシュは蓄える必要がない。


取引なしのブロックのヘッダは約80byteであろう。もし、我々がブロックが10分毎に生成されると仮定するなら、80bytes * 6 * 24 * 365 = 4.2 MB 毎年である。コンピュータシステムが典型的に2GB のRAMを2008年のように売られ、そして、ムーアの法則が 1.2GB 毎年の成長を予測するなら、 メモリにブロックヘッダが保持されなければならないとしてさえ、ストレージは問題にならないだろう。


←BACK TOP↑ NEXT→

8. 単純化した支払い検証

ネットワークノード全体を走らすことなく、支払いの検証を行うことは可能である。ひとりのユーザだけが最長の仕事証明チェーンのブロックヘッダ のコピーを保持する必要があって、彼が最長のチェーンをもつと信じるまでは、彼はネットワークノードに問い合わせでそれ(*)を得て、そしてその タイムスタンプの入ったブロックにつながった Merkle 枝を得るような。彼は、彼自身では取引をチェックできないが、チェーンのある場所に繋がる ことで、彼は、ネットワークノードがそれを受け入れたこと、さらにその後の追加ブロックの確認をネットワークが受け入れたことを見ることができる。


そのように、正直なノードがネットワークを制御する限り、検証は信頼できるが、攻撃者によってネットワークが圧倒されるなら、ネットワークはより 脆弱だろうか。ネットワークノードは取引を彼ら自身で検証できる一方、攻撃者が続けてネットワークを圧倒している間、単純化した方法は攻撃者の まやかしの取引で騙され得る。これに対抗して防御する1戦略としては、ネットワークノードが無効なブロックを検知した時、彼らからの警告を受け、 それに即応し、ユーザのソフトウェアがブロック全体と警告を受けた取引を不整合の確認をするためにダウンロードすることであろう。

(*) [訳者注] 最長仕事証明チェーン


←BACK TOP↑ NEXT→

9. 値の複合と分岐

通貨を個々に扱うことは可能ではあるが、取引で全てのセントまで分離した取引をすることは、かさばり過ぎるだろう。値の分岐と複合を許すには、 取引に複数の入力と出力を含むことである。通常、大きな以前の取引から単独の入力を受ける、又は、複数の入力のより小さな量の複合であり、出力は 最大ふたつ: ひとつは支払いで、ひとつはもしあれば送り主へのお釣りである。


ファンアウト、取引が幾つかの取引に依存する場所で、さらにそれらの取引がより多数に依存するようなことは、ここでは問題ではないことに注意 しなければならない。取引の完全な単独の履歴の抽出は、決して必要ではない。


←BACK TOP↑ NEXT→

10. 匿名性

伝統的な銀行モデルは、含まれる団体と信用第3者の情報アクセスの制限によって、ある程度の匿名性を達成している。全ての取引の公に公開する 必要性は、この方法を排除するが、しかし、匿名性は、情報の流れの別の場所で断つこと、公開鍵を匿名に保つこと、でまだ維持されている。 公共は、誰かが他の誰かにある量を送ることを見ることができるが、取引が誰に繋がっているかの情報を持たない。これは、株式取引で公開されて いる情報に似ている。そこでは、時間と個々の取引のサイズは公にされるが、その当事者が誰かということなしにである。


追加的なファイアオールのように、よく知られた所有者に繋げられることから取引を守るには、それぞれの取引に新しい鍵のペアが使われる必要がある。 幾らかの繋がりは、多数の入力の取引では避けられない。それは必然的にそれらの入力が同じ所有者によって所有されていることを明かす。リスクは もし、鍵の所有者が明らかにされると、同じ所有者に属する他の取引を繋がりが明らかにするかもしれないことである。


←BACK TOP↑ NEXT→

11. 計算

我々は攻撃者が正直なチェーンより速く別のチェーンを発生する試みのシナリオを考察する。もし、これが実現されたとしても、それは システムを任意の変化に開くよう投げ込むものではない。そのような薄隙の詐取からくる創造的価値は、攻撃者に決して属さない。 ノードは無効な取引を支払いとして受け入れようとせず、正直なノードはそれらを含むブロックを決して受け入れないだろう。攻撃者は 彼自身の取引の彼が最近に消費したお金を取り戻そうとすることができるだけである。

正直なチェーンと攻撃者のチェーンとの間の競争は、2項分布のランダムウオークとして特徴付けられる。 勝利の事象は正直なチェーンが1ブロックだけ伸長し、そのリードを+1だけ増加することで、そして、 失敗の事象は攻撃者のチェーンが1ブロックだけ伸長し、そのギャップを-1だけ減らすことである。

攻撃者が与えられた赤字からの追付きの確率は、ギャンブラーの没落問題に類似している。無制限の信用をもったギャンプラーが赤字から 開始して、負債解消に達することを試みる可能性として無限回の試みをすることを仮定する。我々は彼が一度負債解消に達し、攻撃者が正直な チェーンを追撃することの確率を計算できる[8]。

$p$= 正直ノードが次のブロックを見出す確率
$q$= 攻撃者が次のブロックを見出す確率
$q_z$= 攻撃者が$z$ブロックビハインドから追撃するだろう確率
\[ q_z= \begin{cases} 1    (p \le q),\\ (q/p)^z  (p \gt q) \end{cases} \] $p \gt q$という我々の仮定を与えると、確率は攻撃者の追撃しなければならないブロック数の増加の指数関数で低下する。彼に不利な勝算なことに、 もし彼が幸運な突撃を初期にしないなら、彼がさらに負けることで、彼のチャンスは消滅的に小さくなる。

我々はいま、新しい取引の受取人が、十分確かに送り人が取引を変更できなくなるまで、どれだけ待つ必要があるかを考察する。我々は、送り人 が、彼が彼に支払ったと暫く受取人を信じさせることを欲する攻撃者と仮定する、そのとき、幾らか時間が過ぎた後、彼自身に払い戻すようにする。 受信者はそれが起きたら警告されるだろうが、送り人はそれが間に合わないだろうことを望む。

受信者は、新しい鍵のペアを生成し、公開鍵を送り人に与え、すぐにサインさせる。これは、彼が幸運にもずっと前に間に合って、そのとき取引を 実行するまで連続的に仕事することで、送り人にブロックのチェーンを前もって用意することを防ぐ。一度、取引が送られると、不正直な送り人は、 秘密に彼の取引の別バージョンを含む並列的なチェーンの仕事を開始する。

受取人は、取引があるブロックに加えられ、zブロックがその後に繋がるまで待つ。彼は、攻撃者のした過程の正確な量を知らないが、正直なブロック が平均的にブロック当たりの時間をとると仮定して、攻撃者の可能な過程が次の期待値をもつポアソン分布になる: \[ λ = z{q \over p} \] 攻撃者が今まだ追撃しているかもしれない確率を得るには我々は、彼がその点から追撃できる確率によって彼が成し遂げる進展の各量として ポアソン密度を掛け: \[ \sum_{k=0}^∞ { λ^ k e^{-λ}\over k!}・ \begin{cases} (q/p)^{(z-k)} (k \le z),\\  1   (k \gt z) \end{cases} \] 分布の無限の尾を総和を避けるため、再配置して、 \[ 1 - \sum_{k=0}^z {λ ^k e^{-λ}\over k!} ( 1 - (q/p)^{(z-k)} ) \] 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.0002428
z=7 P=0.0000647
z=8 P=0.0000173
z=9 P=0.0000046
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.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
Pが0.1%より小さい場合に解いて、
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


←BACK TOP↑ NEXT→

12. 結論

我々は、信用に頼ることなのない電子的取引のシステムを提案した。我々は、デジタル署名からなる通貨の通常のフレームワーク から出発し、それは所有の強い制御を用意するが、2重支払いを防止する方法なしには不完全である。これを解決するために、 我々は、CPUパワーの大多数を正直なノードが制御するなら、攻撃者が変更することが急速に計算論的に実際的でないようになる 取引の公開した履歴を記録する仕事証明を使う、P2Pのネットワークを提案した。ネットワークは、その非構造的な単純さ のなかで頑丈である。ノードは、同時に、ほとんど協同なしに働く。それらは、特定される必要もない、なぜなら、メッセージは どの特定の場所を通過させられることもなく、ベストエフォートベースで配信される必要があるだけである。ノードは希望に依って ネットワークと離脱したり、彼らが不在の間に何が行われたかの証明として仕事証明のチェーンを受け入れて、再結合したりできる。 彼らは彼らのCPUパワーで投票し、それらを伸長することに仕事することによって、有効なブロックの受容を表明し、そして、それらの 仕事を断ることによって無効なブロックを拒絶できる。何らかの必要なルールと動機付けはこの同意メカニズムを強化することができる。

References
[1] W. Dai, "b-money," http://www.weidai.com/bmoney.txt, 1998.
[2] H. Massias, X.S. Avila, and J.-J. Quisquater, "Design of a secure timestamping service with minimal trust requirements," In 20th Symposium on Information Theory in the Benelux, May 1999.
[3] S. Haber, W.S. Stornetta, "How to time-stamp a digital document," In Journal of Cryptology, vol 3, no 2, pages 99-111, 1991.
[4] D. Bayer, S. Haber, W.S. Stornetta, "Improving the efficiency and reliability of digital time-stamping," In Sequences II: Methods in Communication, Security and Computer Science, pages 329-334, 1993.
[5] S. Haber, W.S. Stornetta, "Secure names for bit-strings," In Proceedings of the 4th ACM Conference on Computer and Communications Security, pages 28-35, April 1997.
[6] A. Back, "Hashcash - a denial of service counter-measure," http://www.hashcash.org/papers/hashcash.pdf, 2002.
[7] R.C. Merkle, "Protocols for public key cryptosystems," In Proc. 1980 Symposium on Security and Privacy, IEEE Computer Society, pages 122-133, April 1980.
[8] W. Feller, "An introduction to probability theory and its applications," 1957.