近年、ビットコインなど多くの仮想通貨が世の中に登場し注目されていますが、これらの仮想通貨とともに話題になるのが「ブロックチェーン」という言葉です。ブロックチェーンはビットコインと同じようなものと混同されやすいですが、ブロックチェーンは「技術」であり、ビットコインはその技術を使った一つの「用途」と言えるでしょう。ブロックチェーンはその高い改ざん耐性から仮想通貨などの金銭的価値の授受の仕組みや、食品のトレーサビリティなどに利用されています。
今回は、図を用いながらブロックチェーンの仕組みをわかりやすく紹介します。
ブロックチェーンとは何か
ブロックチェーンは、単純にいえば取引などの時系列のデータを記録していく「台帳」の技術です。
銀行の預金通帳などをイメージするとわかりやすいと思いますが、どこから何円入金があった、どこへ何円送金した、といった時系列の取引履歴を記録していくことに適した技術です。従来は、取引や物の動きを管理する「管理者」がいて、その管理者が台帳も管理していました。先の例で挙げた銀行口座であれば銀行が台帳を管理しますし、商品を買った時にもらえるポイントなどは、そのポイントを発行する企業が管理者として台帳を管理することが一般的です。
ところが、ブロックチェーンではその台帳を特別な権限をもった管理者が管理するわけではなく、すべての参加者が分散して持つ仕組みになっています。このことから、ブロックチェーンは「分散型台帳技術」と呼ばれています。
では、どのように台帳が管理されているのでしょうか。まずは台帳に記録されるデータの仕組みについて解説していきます。
ブロックチェーンのデータ構造
ブロックチェーンの「台帳」には、台帳が作成されて最初に発生した取引(*1)から最新の取引に至るまでの全ての取引の情報を全参加者で共有しています。(*2)
ブロックチェーンでは「AさんがBさんに100円渡した」というような取引の情報を格納する単位を「ブロック」と呼んでいます。ブロックには複数の取引の情報が保存されており、そのブロックが時系列に鎖(チェーン)のようにつながることで、このような名前で呼ばれています。
従来の台帳も基本的には取引の履歴を記述したものですから、その部分では同じ仕組みと言えるでしょう。銀行の預金通帳も、入出金の履歴を記述して台帳を形成しているのと同様です。
ただし、従来の台帳では特定の取引の情報が改ざんされたり、過去の取引の間に別の架空の取引が挿入されたとしても、基本的には他の取引の情報には影響を与えません。したがって、取引データをチェックしても改ざんを検知することができないため、別のセキュリティソフトやデータ更新履歴などを取得する仕組みが必要でした。
これに対し、ブロックチェーンではその台帳のデータの持ち方自体に改ざん防止策が埋め込まれており、ブロックチェーンの仕組みの中で改ざんがわかるようになっています。
ハッシュがブロック間の整合性を保つ
ブロックチェーンの各ブロックは、取引の情報以外に、一つ前のブロックの情報を暗号化した「ハッシュ」と呼ばれる値を持っています。(*3)
ハッシュは「ハッシュ関数」と呼ばれる計算式にデータを入力すると得られる乱数(文字列)です。入力する際はあらゆる長さのデータを入力でき、出力されるハッシュの値は固定長になります。ハッシュ関数には様々な種類がありますが、代表的なハッシュ関数であるSHA-256では、入力されたデータを64文字の乱数(文字列)に変換します。
このハッシュ関数は、同じ入力データからは同じハッシュの値が生成され、入力データが少しでも変われば全く異なるハッシュが生成されるという特徴があります。また、入力するデータからハッシュを想定したり、傾向を見つけることはできません。
前述の通り、各ブロックは前のブロックのハッシュを保有しているため、あるブロックに変更があると、その次のブロックの情報との不整合が生じます。つまり、ブロックチェーンでは、あるブロックを改ざんした場合、それ以降のすべてのブロックを変更しない限り、ブロック間に不整合が生じて改ざんが発覚します。
ナンスを用いた改ざん防止の仕組み
では、改ざんしたブロック以降のすべてのブロックを改ざんすることは可能なのでしょうか。それを事実上不可能にしている仕組みがブロックチェーンにはあります。
まず理解しやすいのは、ブロックチェーンでは全ての参加者により台帳が分散されて共有されているということです。1箇所のサーバーやパソコンにある台帳だけの改ざんでは、改ざんは成立しません。全ての台帳を変更しなければ、どこかで不整合が発覚します。
もう一つは、ブロックチェーンに特徴的な仕組みになります。ブロックチェーンの参加者は取引を正規に台帳に書き込むために新しいブロックを作りますが、ブロックを作るには3つのデータを用意する必要があります。(*4)
1つ目はまだブロックに書き込まれていない新しい取引のデータ、2つめは前のブロックのハッシュ、3つめ目は「ナンス(*5)」という値です。このナンスの存在が、改ざんを極めて困難にしている仕掛けと言ってもよいでしょう。ナンスは「新しいブロック」のハッシュ値を調整するための値だと考えてください。
実は、ブロックチェーンにおいては各ブロックのハッシュ値は何でもよいわけではなく、ある一定のルールがあります。例えば「ハッシュの最初のn桁が全て0となっている値」というようなルールです。
前述の通り、ハッシュ関数は入力された値によってランダムに変化し、コントロールすることはできません。したがってデータを入力して「最初のn桁が全て0」というハッシュ値を得るのは、例えるなら自分のマイナンバーに0が連続した番号をもらうような、極めて稀なことであり、その稀な入力データとなるような、ナンスの値を探す必要があるということです。
「取引内容」と「前のブロックのハッシュ」は変わりませんので、ナンスに様々な値を入れ、そのブロックのハッシュを計算し、条件に合うハッシュの値を得るまでトライ・アンド・エラーを繰り返すという作業が必要になります。
この、条件に合うナンスを探す作業を「マイニング」と呼びますが、これは総当たり的に探すくじ引きのようなもので、完全に運頼みの作業です。条件が厳しくなればなるほど、このナンスを導くには途方もない数の試行が必要となり、それを実行するサーバーの処理能力と時間、そして膨大な電力が消費される処理になっています。
そして運良く条件に合うナンスを見つけられた参加者だけが、台帳に新しいブロックを正規に書き込むことができ、それを他の参加者と共有することができます。他の参加者は、そのブロックが正しいものかどうかを検証し、一定割合の参加者が正しいという結果となれば、それを自分が持つ正規の台帳に書き込むという処理が行われます。
ブロックチェーンの改ざんは事実上不可能
さて、データを改ざんすることの難易度の話に戻ります。データを改ざんしようとした参加者がいたとして、その改ざんを成立させるためには、まず改ざんしたブロックのナンスを算出し、次にそれ以降のブロックのナンスも全て算出して更新し、さらにはナンスを計算している間に生成されている新しいブロックのナンスも計算して最後のブロックまで更新していく必要があります。
これを行うためには、参加者全体の処理能力の51%以上を持っていない限り改ざんが新規ブロックの作成に追いつくことはないとされており、事実上改ざんが不可能な仕組みとして考えられています。
これらの仕組みにより、ブロックチェーンは特別な権限や特別なセキュリティ対策をした管理者がいなくても台帳が安全に運用されているのです。仮に、セキュリティ対策を全くしない参加者が持つ台帳が改ざんされたとしても、ブロックチェーン自体の仕組みから、改ざんが簡単に発見されるため、従来の台帳に比べて改ざん耐性に優れていると言われています。
なお、ブロックチェーン全体で正規の台帳が同期するには時間がかかるため、ブロックチェーンの中で同時に新しいブロックが作られたり、それが連鎖してまた次のブロックを生んでチェーンの分岐を形成することもありますが、分岐したチェーンがある場合、長い方を正しいチェーンとして認めるというルールがあり、分岐が発生したとしてもこのルールによりチェーン1つに選択され、参加者全体で一つの台帳となる仕組みを持っています。長い方を正しいチェーンとすることで、改ざんはさらに難しくなります。
ブロックチェーンの用途は広がっていく
本記事でご紹介したように、ブロックチェーンはその仕組み自体が1つの改ざん防止の仕組みを持っており、かつデータの履歴管理などに幅広く使えるデータ保管技術として、仮想通貨だけでなく様々な用途への展開が期待されています。
また、これにより従来の管理者が運用・管理する「中央集権型」の取引やネットワークシステムは、ブロックチェーンにより置き換えられる可能性があるとも言われています。今後もブロックチェーンを用いた新しい商品やサービスが登場してくることに世界中が注目しています。
———–
【注記】
(*1) : ブロックチェーンでは取引以外も扱うことができますが、理解しやすさのため本記事では取引に適用した例として記述します。
(*2) : 厳密には取引の生データは膨大な容量になるため、取引の履歴を「ハッシュ」の仕組みを利用した、短いデータとして持っています。
(*3) : 厳密にはブロック自体のハッシュではなくその一部(ヘッダー)のハッシュですが、本記事では技術の概要の理解を目的としているため、ブロック自体のハッシュという記述とします。
(*4) : ブロック内に含まれる主要なデータです。実際には他のデータも含まれますが、本記事の趣旨から離れるため省略しています。
(*5) : ナンス(Nonce)とはNumber used once(一度だけ使用される数字)の略。それ自体に特に意味があるわけではなく、あくまでも乱数を生成するための1つの調整値。
トレードシフト について詳しくはこちら→日本法人立ち上げメンバーが語る ー 企業間取引ネットワーク「Tradeshift」とは?