ホントにわかるブロックチェーン2 ブロックチェーンって本当に安全?
中央集権型ネットワークに対して中央サーバーを介さないシステムへの需要が高まり、個々のコンピュータ同士がつながり合うことで有機的にネットワークを形成する分散型ネットワーク(P2Pネットワーク)が生まれました。
そこで一番の課題として挙がったのが、不特定多数が参加する自由で開放的なネットワークを維持しながらセキュリティを担保するといった相反する要素を成り立たせることでした。
その技術基盤を担えるデータベースとしてできたのがブロックチェーンです。
では、ブロックチェーンがどのようにしてオープンなネットワークでシステムの安定と信頼をつくり上げているのか?本当にブロックチェーンは安全なのか?
この疑問を解くために、今回はブロックチェーンを構成する技術を一つひとつ見ていきたいと思います。
唯一無二のデジタル指紋、ハッシュ値
ブロックチェーンとは取引履歴を一つのブロックにまとめ、それぞれのブロックを連結させながら一つの台帳をつくり上げる仕組みです。それは、取引履歴を1ページごとにまとめ、各ページをつなぎ合わせて1冊の帳簿をつくり上げるイメージと似ています。
各ページの情報を整理するブロックチェーン技術に「ハッシュ値」というものがあります。これは、本で言うところのページ同士をつなぐ「糊しろ」や、それぞれのページの特徴を目立たせる「ブックマーク」のような役割を担っており、ブロックチェーンの根幹技術の一つです。
膨大な量のトランザクションデータがやり取りされるP2Pネットワークにおいては、瞬時にデータが一意的なものかを判断する必要があります。そこで、ブロックチェーンのデータ管理にブックマークのような目印が必要となり、データ構造の至るところでハッシュ値が多様されています。
ハッシュ値は「ハッシュ関数」と呼ばれる計算で得られた16進法で表されたランダムな文字列です。入力データの特徴を要約したたった一つの値であるため、「デジタル指紋」とも呼ばれています。以下のようなハッシュ関数の性質をブロックチェーンのデータベースシステムに活かしています。
ハッシュ関数は答えを元に戻す術がありません。これは、指紋から本人の身体的特徴や性格などの情報が読み取れないことと似ています。
もしどうしても入力データを知りたい場合は、ランダムな数字を総当たり的にハッシュ関数に入力し、偶然同じデータが見つかるまでやり続けるほかありません。そのためハッシュ関数は、不可逆的・一方向的であると言えます(以下、ハッシュ値は便宜的に簡略化されたものを使用)。
さらに、異なる入力データから同じハッシュ値が算出されることは極めて稀であり、衝突する可能性がほぼゼロであるとされています。このため、ハッシュ関数は衝突耐性があると言われています。
3と4については、具体的な例を見ていきましょう。「De Beyond」という言葉をハッシュ関数で計算してみたいと思います。
このように、大文字・小文字や半角スペースの有無が異なるだけでも入力データのビット数が変わるため、全く別の答えが算出される仕組みになっています。
5に関しても実際に文章をハッシュ化してみましょう。
入力データの長さ(量)にかかわらずハッシュ値の長さが固定されているため、ハッシュ値から元のデータの長さを推測することはできません。これはハッシュ値から入力値を求められない特性をさらに強くしています。
このように、ハッシュ値という変化に敏感な唯一無二の目印をブロック構造に随所に取り込むことでデータの検証を容易にしました。このことが、オープンなネットワークシステムにおいてもブロックチェーンが安全に取引できる基礎となっています。
即時に変化に気づく、参照システム
前回の記事「ブロックチェーンのデータ構造」の節で述べたように、ブロックチェーンはブロックヘッダに直前のブロック番号を必ず格納するルールがあります。
ブロック番号は、ブロック内の全情報から算出されたハッシュ値です。つまり、「直前のブロック番号」というのは、「直前のブロックのハッシュ値」のことを指しています。
さらに詳しく言うと、このハッシュ値は直前のブロックのデータベースを参照しているため、「ハッシュ参照」とも呼ばれます。これはフォルダのショートカットのように参照元となるデータベースがある場所を指しており、直接アクセスすることができます。
そのためもし元データ(直前のブロック)で変更が生じたら、次のブロックに格納されているショートカットフォルダ内のデータも同期的に変更されます。このように、ブロックチェーンは各ブロックがハッシュ参照でリンクし合っているため、「チェーン(鎖)のように連結している」と考えられるのです。
トランザクションをリンクさせる簡単な例を見てみましょう。下図では、ハッシュ参照は前に発生したトランザクションを指していることが分かります。
最後に追加されたハッシュ参照(上図では「ハッシュ参照3」)を「チェーンのヘッド」と言い、全てのトランザクションデータが集約されています。つまりこの場合は、全部の「トランザクション1、2、3」を把握するには、「ハッシュ参照3」だけを確認すればいいわけです。
データが密に連携し合っているこの構造が、丈夫で堅牢なブロックチェーンシステムづくりにおける一番の肝となっているのです。
相互連結した頑丈なデータの木、マークルツリー
ハッシュ参照はブロックを結び付ける以外に、トランザクションをまとめる際にも効果的です。各トランザクションをまとめる技術を「マークルツリー」と言います。これは、ブロックの二階層部分の「ブロック本体」に当たる部分です。ブロックとは別のデータベースに格納されており、ハッシュ参照でトランザクションデータにアクセスしています。
マークルツリーは、ハッシュ参照を使ってトランザクションをリンク形式でまとめていく方法です。二本木式という二つのトランザクションのペアをつくってハッシュ参照を計算し、その数が一つになるまで繰り返します。この最後のハッシュ参照を「マークルツリーのルート(ルートハッシュ)」と呼びます。
マークルツリーのルート(ルートハッシュ)は、トランザクションの要約データとして各ブロックのブロックヘッダに組み込まれます。
マークルツリーは下の階層のトランザクションを参照することで成り立っています。そのため、トランザクションの内容が一つでも変更されると、それ以降の全てのハッシュ参照も変わってしまいます。
最終的にはルートハッシュも変更され、連動してブロックに登録されたハッシュ値まで変わってしまいます。その結果、前後のブロックとの整合性が保てなくなり、チェーンが切れて改ざんが発覚する仕組みになっています。
このように、マークルツリーは前の情報を参照することでトランザクションがリンクし合う仕組みになっています。この相互依存状態が、誤りや改ざんを探知しやすい構造をつくり上げているのです。
ハッシュ値は、データの比較・検証だけではありません。ブロックの生成に必要なブロックヘッダのハッシュ値を求める難解なハッシュパズルもまた、ブロックチェーンのセキュリティを高めるのに一役かっています。
ハッシュパズルは数字がピッタリ揃わなければ開かないダイヤル錠と似ています。ダイヤル錠を開けようとしたら片っ端から何通りもの番号の羅列を試す必要があります。それは知識やロジックではどうにもならないものです。ハッシュパズルもそのような試行錯誤が求められます。
どのような作業かと言うと、「ナンス」と呼ばれるランダムの数字を見つけ出し、「難易度」によって指定された数の0が先頭に付いたハッシュ値を探すことが求められます。これは例えるなら、大小のサイズやピース数(=難易度)の異なるパズルで、最後の失われたピースを探しているようなイメージです。
この最後の1ピースである「ナンス」と「難易度」の両方を満たすハッシュ値が見つかるまで総当たり戦で計算を繰り返します。ハッシュパズルを解くには膨大な計算が必要となるため、「大量のハッシュ計算をしたことの証明」=「Proof of Work(PoW)」と呼ばれるのはこのためです。また、希少なハッシュ値を導出することが、あたかも金塊を採掘するかのような過程という意味合いで「マイニング」とも言われます。
このようにブロックチェーンは、情報の変更に対するコストが非常に高く、全てを変えるか変えないかの“ゼロか百”しか選択肢が事実上ありません。そのため、履歴の改ざんが限りなく不可能に近い構造となっています。追記専用のデータベースとも言え、データを積み上げて保存していくのには適しているのです。
このように、ブロックチェーンでは構造的にデータの変更を困難にすることでデータベースの信頼性を保っています。一方で、一つひとつのトランザクションにおいても、きちんと保護がなされたうえで送られています。
そこで次回は、ブロックチェーンにおける送受信を安全に行うための仕組みと技術についてさらに深ぼりしていきたいと思います。