第4節 演算量証明

P2Pでタイムスタンプサーバを実装するためには、新聞やネットニュースなどよりも、むしろアダム・バックのハッシュキャッシュ(※6)のようなシステムが必要です。

※スパムメール防止のために考案されたハッシュキャッシュ(Hashcash)という技術を元にしたアルゴリズムのこと

 

これは、演算に費やした時間を第三者に頼らずに証明する手法です。

 

例えば、SHA-256のようなハッシュ関数を通すと、最初のnビットがすべて0となるような値を総当たりで発見することによって実現できます。

 

そのような演算にかかる平均時間は、nに対して指数関数的に増大します。

 

それに対して、検証する側はハッシュ関数を1回計算するだけで良いのです。

 

タイムスタンプネットワークでは、ブロックデータとNonce※と呼ばれる数字を組み合わせます。

 

※暗号通信で用いられる、使い捨てのランダムな値のこと

 

Nonceを適当な値から1ずつ増やし続けて、ハッシュ値の最初のnビットがすべて0になる場合を探します。

 

このようにCPUを使って演算量を証明しておけば、ブロックの内容を改ざんして辻褄を合わせるためには、同じ計算をもう一度行わなくてはならなくなります。

 

さらにその後ろにブロックがチェーンでつながっていたら、それらすべてに対する演算をやり直す必要が出てきます。

 

演算量を証明することにより、集団における意思決定をどう行うべきかという問題も解決します。

 

多数決方式を採用し各IPアドレスに1票ずつを割り当てるような方法を採用した場合、

誰かがIPアドレスを大量に確保した時点でその人にすべて決められてしまいます。

 

一方、演算量証明に基づく本システムは、各CPUに1票を与えるようなものです。

 

実際には、最もCPU能力を費やして作られた情報、すなわち最も長いチェーンを、集団の意思決定の結果である決めています。

CPU能力の大多数が善良なノードによって構成されていれば、不正がないチェーンが最速で成長し、ねつ造した情報を含むどのチェーンよりも長くなります。

 

もし、改ざんしたい人間が過去のブロックを改ざんしようとしたら、それ以降のブロックをすべて計算し直し、善良なノード群が計算するチェーンの長さに追いつき追い越す必要があります。

 

計算能力的に劣る改ざん者が正しいチェーンに追いつける確率は、追いつくべきブロック数に対して指数関数的に小さくなります。

 

年月が経つと、ハードウェアの速度が向上したり、世間の注目度合いによって参加ノード数が増えたりするはずです。

 

そこで生成されるブロック数がそのような影響を受けないように、演算量証明の難易度が、過去一定期間の生成ブロック数をもとに設定されます。

 

つまりブロックの生成間隔が短すぎる時には、難易度が高くなります。