連載の1~3回では、ブロックチェーンの新規性、社会で成し遂げたこと、抱えている課題について、それぞれの著者の視点から解説した。

 本稿では、ブロックチェーンへの理解をさらに深めるため、ビットコイン、イーサリアム(Ethereum)を例にとり、「履歴蓄積システム」としてのブロックチェーンの基本的な動作を紹介したい。

 履歴蓄積システムとしてのブロックチェーンには、論理的に3種類の役割がある。履歴となるデータを生成する「データ生成者」、履歴データを管理する「データ管理者」、履歴データを参照する「参照者」である。

 さらに、データ生成者が生成するデータのうち、何が履歴としてふさわしいのかを決める「ルール」が事前に存在し、これがブロックチェーンの仕様となる。

 この履歴蓄積システムに対し、外部から求められる要件は明快だ。「正当なデータ生成者からのデータのみを履歴とする」、「一度記録された履歴が改変されない」、そして「蓄積された履歴を参照者が参照できる」の三つである。

 データ管理者を無条件で信頼できるなら、これらの要件は一般的なデータベースで実現可能である。わざわざブロックチェーンを持ち出さなくとも、データ管理者はデータ生成者を認証し、その生成データを受け取って登録し、そのまま管理すればよい。

 しかし、データ管理者が信頼できない場合には「このデータは、本当にそのデータ生成者が登録したデータなのか?」「データ管理者が改ざんしていないか?」といった不安が発生する。

 ここに、ブロックチェーンの存在意義がある。ブロックチェーンを使えば、信頼できるデータ管理者を置かずとも、これらの外部要件を満たせる。このために活用するのが「デジタル署名」と「ハッシュチェーン」という技術だ。

 データ生成者は、登録したいデータに自分のデジタル署名(生成者だけが持つ秘密鍵で暗号処理を施したデータ)を付与する。データ管理者は、この署名付きの履歴データを履歴管理システムに記録する。データには生成者の署名があるため、データ管理者でさえも改ざんできない。改ざんしたら、データ参照時に署名検証(生成者の公開鍵を使ってデータの整合性を確認すること)が失敗し、ばれてしまうからだ。

 ただしデジタル署名は、その生成者が確かにデータを生成した、という正当性は保証してくれるが、複数の異なる生成者の履歴データがあった場合、その順序の一貫性は保証してくれない。例えばデータ管理者が、ある参照者には「Aさんのデータ」「Bさんのデータ」「Cさんのデータ」という順番で開示し、ほかの参照者には恣意的に「Aさん」「Cさん」「Bさん」という順番でデータを開示したら、履歴蓄積システムとしての一貫性がなくなってしまう。

 この一貫性を担保してくれるのが、ハッシュチェーンという技術である。

ハッシュチェーンの基本構造
ハッシュチェーンの基本構造
[画像のクリックで拡大表示]

 データ管理者はまず、Aさんのデータを受け取った後、Aさんのデータのハッシュ値を公開する。次にデータ管理者はBさんのデータを受け取ると、直前に公開したハッシュ値と、Bさんのデータを連結したハッシュ値を公開する。同様に、Cさんのデータを受け取った後、直前のハッシュ値とCさんのデータを連結したハッシュ値を公開する。

 ハッシュ値とは、任意の長さの入力データから比較的短い一定長のビット列を算出する「ハッシュ関数」の出力値である。ハッシュ関数は入力が1ビットでも異なるとハッシュ値は全く異なるように作られている。従って、本来は履歴データとしてA、B、Cの順だったのに、A、C、Bと偽って提示すると、公開されたハッシュ値との不一致により、不正が検出できる。