見出し画像

ナカモトサトシ白書解説(3)

以下は2016年12月28日に私が以下のホームページに掲載した記事です。
https://officemoorea.wordpress.com/
最近、web3という文脈でブロックチェーンが注目されていることや、上記ホームページの更新ができていないことから、古い記事ですが、noteに転載します。

■ナカモトサトシ白書解説 タイムスタンプサーバー


提案する解決法は、タイムスタンプ・サーバーから始まる。タイムスタンプ・サーバーは、タイムスタンプされる複数アイテムを含むデータブロックをハッシュとして処理し、そのハッシュを新聞やUsenetポストのように広範囲に公開する。タイムスタンプにより、そのデータがタイムスタンプされた時点で存在していたことが証明される。各タイムスタンプはそのハッシュの中に直前のタイムスタンプを含んでいくことでチェーンを形成し、タイムスタンプが増えるたびに以前のタイムスタンプを強化していく。

hashのつながり

解説


タイムスタンプサーバーは、データブロックに「時刻が記載されたハンコ」を押す役割を果たす。そのハンコによってそのデータブロックはスタンプを押された時点に間違いなく存在し、内容も改ざんされていないことを確かめることができる。

タイムスタンプサーバーは、スタンプを押すデータブロックに、前回スタンプを押したデータブロックのハッシュ値と現在時刻を追加して、ハッシュ値を計算し、電子署名を行う。

電子署名というのはハッシュ値をタイムスタンプサーバーが暗号化したものであり、タイプスタンプサーバーの公開鍵を使えば復号化でき、データブロックが改ざんされていないかどうかを確かめることができる。

前回のブロックのハッシュを含めることで、データブロックはチェーンとしてつながることになり、改ざんはますます難しくなっていく。

■ナカモトサトシ白書解説 プルーフ・オブ・ワーク


P2Pベースで分散型サーバーを実行するには、新聞やUsenetポストというよりはアダム・バックのハッシュキャッシュに似た、プルーフ・オブ・ワークシステムを使用する必要がある。

我々のタイムスタンプネットワークでは、データブロックにNonceと呼ぶワンタイムパスワードを足すことでプルーフ・オブ・ワークを実現している。すなわちハッシュ値の頭の何桁かがすべて0でなければならないという制約を課すのである。

このようにハッシュの頭の何桁かがすべて0になるNonceの値を見つけるには、1から順に総当たりでハッシュを計算する以外にない。このためにCPUパワーを費やす必要がある。これがプルーフ・オブ・ワークの考え方である。

一度記録されたデータブロックを変更するためには、Nonce値を見つける作業をやり直す必要がある。やり直している間に、その後のデータブロックもチェーン化されて後に連なるため、該当ブロックを書き換えようとするならば、それ以降の全てのブロックを書き換えなくてはならない。つまり変更(改ざん)するには、他の誰よりも速い速度でその作業をやる必要がある。

このプルーフ・オブ・ワークはまた、多数決で意思決定をする際の代表をどうするかという問題を解決する。プルーフ・オブ・ワークは原則的に1CPUにつき一票である。多数決の意思決定は、最も多くのプルーフ・オブ・ワークの労力が費やされたことを示す最も長いチェーンによって表される。

CPUパワーの過半数が良心的なノードによってコントロールされるとき、その良心的なチェーンは他のどのチェーンよりも早く成長する。過去のデータブロックを書き換えるためには、攻撃者はそのブロックのプルーフ・オブ・ワークだけでなくその後に続くプルーフ・オブ・ワークを書き換え、さらに良心的なチェーンに追いつき、追い越さなければならない。低速の攻撃者が良心的チェーンに追いつく可能性は、後続のブロックが追加されるごとに指数関数的に減少していくことをのちに説明する。

加速するハードウェアスピードと長期的に変動する利益レートに対応するために、プルーフ・オブ・ワーク算出の難易度は、一時間ごとのブロック数を一定の平均値に保つことを目指す平均移動によって決定される。ブロック算出のスピードが速ければ速いほど難易度が増す。

Block

解説


プルーフ・オブ・ワークはブロックチェーンの本質的な要素であるが、いちばん理解が難しい要素でもある。

取引は正当性を確認した上で、数百個をひとつのブロックにまとめブロックチェーンに追加される。その作業が採掘。これは以下のような方法で行われる。

20万冊のファイルが番号順に整然と並べられた書類棚を思い浮かべてほしい。一冊のファイル(ブロック)には数百の取引記録がパッケージ化されて収められており、その記録が正しいという証明として、「nonce」と呼ばれる32ビットの数字が付けられている。採掘作業というのは、数百の取引の正当性を確認し、それをファイルにまとめ、そのファイルに「nonce」をつける作業である。会計監査のようなものと考えればわかりやすい。

問題は「nonce」の求め方である。ブロックチェーンの最後尾のブロック、「nonce」、そして追加するブロック、この3つのデータから、ハッシュ関数というものを使って、256ビットのハッシュ値を計算する。ただしこのハッシュ値がある値以下でないといけないと決まっている。つまりハッシュの頭の何桁かはすべて0でなければならないという制約がある。

ハッシュ値を求めるのは簡単であり、高速CPUであれば一瞬で終わる計算である。しかしハッシュ関数の特性からわかるように、データブロックを書き換えてあるハッシュ値にするのは事実上不可能である。この特性を生かして、わざわざ計算を難しくして時間がかかるようにしているのが、プルーフ・オブ・ワークの考え方である。

つまりそのような条件を満たす「nonce」を見つけるには、0から順に「nonce」を増やしながらひたすらハッシュ値を計算するしかない。最近では10億回以上の試行が必要と言われており、膨大なCPUパワーが必要である。少しでも速く計算するため、専用のASICが開発され、それをデータセンターレベルのシステムにして採掘を行っているのが現状である。

このような作業を多くの採掘者が競争してやっており、最初にキーを見つけた人が新しいブロックを連結する権利を持つ。その対価としてビットコインが新たに発行され、採掘者の所有となる。採掘者とはブロックチェーンを正しく維持管理する人であり、その報奨としてビットコインがもらえる。

前回の記事  次回の記事

この記事が気に入ったらサポートをしてみませんか?