TOUCH THE SECURITY Powered by Security Service G

コラム

2019.01.23

4枚の図解でわかるブロックチェーン技術

仮想通貨などで有名になったブロックチェーン技術。よく「改竄不可能な分散型台帳」などと言われ、仮想通貨の取引記録だけでなく、不動産取引、食品トレーサビリティなどへの応用も考えられ始めています。

しかし、厳密なことを言うとブロックチェーンは改竄不可能ではありません。ただのデータですから、書き換えれば改竄できてしまいます。ところが、改竄をしてもすぐに発覚をして自動修復されてしまう仕組み。それがブロックチェーンです。

今回は、そんなブロックチェーンの構造について、4枚の図で理解しましょう。

1.予備知識 「ハッシュ」と「ナンス値」

先ずはブロックの説明に入る前に、ブロックチェーン技術で使われる用語「ハッシュ」「ナンス値」について復習しておきましょう。

ハッシュ関数によって生成されるハッシュ値

ハッシュ値とは、小中学校で使われるクラスの出席番号のようなものだとイメージしてください。

多くの小中学校では、五十音順に出席番号をつけていると思います。仮に鈴木君が10人居ても、1対1に対応するユニークな数値を割り振っておけば、各々の識別は可能です。ある一意のものを識別すべく生成される数値、それがハッシュ値です。

このハッシュ値ですが、ハッシュ関数というアルゴリズムによって、一方向(不可逆)の値として生成されます。

先の小中学校の場合、出席簿の上から2番目に位置する井上くんに、出席番号2番を割り振ることは誰でも簡単に出来ます。しかし、出席簿を見ていない外部の人が、出席番号2という数字のみから「3年2組においてそれは誰か?」を知ることはとても難しい。一方向の演算は簡単なのに逆方向の演算は難しい、そうなるように考案されている関数です。茹でたジャガイモをごちゃまぜにするとハッシュドポテトになりますが、その名の通り「ごちゃまぜにする関数」の意で、暗号にきわめて近い関数です。

ナンス値

ナンス値についてはあまり難しく考える必要ありません。なぜなら、ナンスとはNumber Used Once=一度だけ使う数値の意味で、要は使い捨てにする数値のことです。どのような働きをするのかは、後ほど登場します。

2.ブロックとブロックを繋ぐジョイント

ブロックチェーンのひとつのブロックには、3つのものが格納されます。

  1. 取引データ
  2. ひとつ前のブロックのハッシュ値
  3. ナンス値

この3つの値を合成して、ハッシュ関数に入力し、ハッシュ値を計算します。このハッシュ値がブロックとブロックを繋ぐジョイントになるのです。

ブロックチェーンのひとつのブロックには、取引データだけでなく、ひとつ前のブロックのハッシュ値、ナンス値などが保存され、これを合成して、ハッシュ値を計算し、ブロックのジョイントとして利用する。

ところが、このジョイントには一定の制限があります。

それはブロックチェーンの仕様によって異なりますが、一般には「ハッシュ値の上位3桁が000である」というような制限をかけ、これに外れるハッシュ値はジョイントに利用できないようにしています。つまり、ハッシュ値全体の小さい方から1/1000しか、ジョイントに使えないようにしています(実際はもっと基準値を低くしています)。これがブロックチェーン技術のポイントなのです。

3.ジョイント生成の条件を満たすナンス値を探す ――マイニング――

ハッシュ関数は入力値に応じて、一定のアルゴリズムに従って、数値を出力します。それがいつもうまいこと小さい数になるということは期待できません。

「取引データ」と「ひとつ前のブロックのハッシュ値」はすでに決まっていますから変えようがありません。ところがナンス値は、変えることができます。と言うより、最終的なハッシュ値が小さい数になるようなナンス値を探すのです。

このナンス値を見つけるには、原則、総当たりしかありません。いろいろなナンス値を入れてみて、最終的なハッシュ値を計算して、それが「上位3桁が000」という条件に合うかどうかを確かめてみるしかないのです。このため、膨大な計算量を必要とします。

こんな大変な計算を誰がやってくれるのでしょうか。世界中の人にお願いするのです。もちろん、報酬なしにこんな計算を引き受ける人はいないので、利用できるキャッシュ値を見つけた人には、仮想通貨のブロックチェーンであれば、その仮想通貨が支払われます。この報酬を目当てに、多くの業者がこの計算に参加します。このような業者は、まるで岩の中から鉱脈を掘り当てるようなものなので、マイニング(採掘)業者と呼ばれます。

計算されたハッシュ値をジョイントして使うには、一定の条件を満たしていなければならない。満たしていないハッシュ値はジョイントとして利用できない。適切なハッシュ値が得られるように、ナンス値を探す作業がマイニング(発掘)。

4.過去データの改竄は出来るのか

総当りで見つかったナンス値により、条件に合うハッシュ値が算出されて、次のブロックを繋ぐ準備ができました。

次のブロックでは、このハッシュ値も使われるのがポイントです。

もし、悪意のある人が取引データを改竄したと考えてください。取引データは別のものになりますが、ひとつ前のハッシュ値とナンス値はそのままです。つまり、そのブロックのジョイントになるハッシュ値は違ったものになってしまいます。それは高い確率で「上位3桁が000」という条件から外れてしまうでしょう。そうすると、ブロックを接続することができず、ブロックは途切れてしまいます。

ジョイントとして使ったハッシュ値を次のブロックにも使う。こうすることで、取引データを改竄すると、ハッシュ値が変わってしまい、ブロックを繋ぐことができなくなり、チェーンが切断されてしまう。

5.分散型台帳とチェーンの淘汰

ブロックチェーンは分散型の台帳です。台帳は複数のサーバーにミラーリングされていますが、改竄された台帳は、チェーンが短くなるのでコピーされません。何故なら、ブロックチェーンの仕組み上、「最も長いチェーンが正しい正本」となる為、これによって上書きされるのです。

結果、どの台帳も、内容が正しく、最新の状態に保たれると言うわけです。

ブロックチェーンは、複数のサーバーにコピーが保存され、常に比較されている。この中で、いちばん長いチェーンが「正本」。改竄され、チェーンが途切れると、いちばん長いチェーンに置き換えられる。

ものすごく賢い仕組みです。ブロックチェーンの考え方は、2008年にサトシ・ナカモトと名乗る人物によって考案されました(国籍、正体とも不明)。

何十年後かに「21世紀で最も賢い発明」のトップ10に入ることは間違いありません。仮想通貨だけでなく、分散型台帳として、行政のあり方や個人間取引のあり方をまったく変えてしまうポテンシャルを持った技術です。

記事一覧に戻る