PR

暗号パズルの中身を解説する

 前述の「現在の最新のブロックのハッシュ値と、ひとまとめにしたデータの値に依存する暗号パズル」が、具体的にどのようなものかみてみよう。

 ここにもハッシュ関数が登場する。前に述べたように、ハッシュ関数は入力が1ビットでも異なると全く異なる値を出力する。そして、ハッシュ関数の出力結果から入力値を予想したり、同じ出力結果になる2つの入力を発見したりすることが極めて困難である。

 ビットコインが採用するProof of Workの暗号パズルを数学的に表現すると、「現在の最新のブロックのハッシュ値(B)と、ひとまとめにしたデータ(D1,..Dm)と、そして任意のデータ(X)を連結して、それをハッシュ関数の入力にした結果、出力が規定値(k)より小さくなるように、データ(X)を求めよ」となる。

 通常、ハッシュ関数は256ビットの大きな値を出力する。それがたまたま冒頭にゼロがたくさん並び、規定値より小さくなるようにするには、「データX」をいろいろ試してみる他ない。ビットコインでは、この試行に平均10分かかるように、過去の所要時間を参照してプログラムが動的に規定値(k)の大きさを決めている。

 このように、暗号パズルの答え(X)を求めるには莫大な計算が必要になるが、答えが正しいかどうかを確認するのは、簡単だ。ハッシュ関数を1回計算して確認すればよい。

 ではなぜ、データ管理者は暗号パズルレースに参加するのだろうか?

 ブロックチェーンを活用するシステムでは、データ管理者がレースに参加する動機(インセンティブ)を、別途適切に編み出さなくてはならない。ビットコインやイーサリアムでは、この暗号パズルを解いた人への報酬が、暗号通貨という形で提供されている。

 一例では、データを生成した生成者が、データの登録を依頼する際に「登録手数料」を暗号通貨の形で拠出し、この手数料が、暗号パズルを解いたデータ管理者に与えられることになっている。

 この報酬は、上記のブロックをつなげるルールを正しく実行していないと得られない。このためデータ管理者は、自分だけではなく、直前の人のブロックも正しく生成されているかどうかを確認する。正しく生成されたブロックにつながっていないと、自分のブロックの報酬がもらえないからである。このように相互に検証し合うことによって、ブロックチェーンの正しさが積みあがっていくのである。