2020年6月18日 BLOGいまさら聞けないブロックチェーンの仕組み〈前編〉(杉井 靖典)

いまさら聞けないブロックチェーンの仕組み
〈前編〉

 

ブロックチェーンに刻まれたデータは、その特徴として「誰によって作成されたものかを検証」でき、かつ「改ざんも変更もできない」し「消すこともできない」と言われるけれども、それではなぜ、そういう状態になるのか?その仕組みはどうなっているのか?

今回は、これらの疑問に答える形でブロックチェーンの仕組みを語ろうと思います。

なお、以下の解説は特定のブロックチェーンの実装について語ったものではなく、ブロックチェーンの根源的な仕組みについて語ったものですので、どのブロックチェーンにも、おそらく通用するだろう論理です。

まず、ブロックチェーンに刻まれたデータが「誰によって作成されたものかを検証」できる仕組みについて、解説します。

ブロックチェーンに刻まれるデータには必ず「電子署名」が施されています。

電子署名とは、記録されるデータの作成者が、作成者自身しか知らない秘密鍵を使って自身を証明するために施されるもので、その仕組みを簡単に図示すると以下のようになっています。

 

この図で出てくる「秘密鍵」と「公開鍵」は必ず対になって存在し、これを「キーペア」と言います。そのキーペアの公開鍵で暗号化されたデータは秘密鍵でのみ復号でき、秘密鍵で暗号化したものは公開鍵でのみ復号できるという関係にあります。

 

ここで、秘密鍵の正体を明かすと、ただの「乱数」です。

ただの「乱数」を人間が読みやすいように文字列に変換したものが「秘密鍵」と呼ばれ「乱数」⇔「秘密鍵」は相互変換可能であることに対して「秘密鍵」から導出される「公開鍵」からは「秘密鍵」を導出できないという不可逆性を持っています。

キーペアのうち「秘密鍵」は、本人しか知り得ないよう厳重に保管される必要があることに対して「公開鍵」は文字通り公開しても良い鍵であり、この鍵は誰にでも利用する事ができます。

つまり「電子署名」の文脈においては、上記のようなキーペアの性質を利用して、秘密鍵を「署名鍵」として利用し、公開鍵を「検証鍵」として利用することで、対象のデータが「検証鍵=公開鍵」とキーペアを成す「署名鍵=秘密鍵」の所有者によって作成されたことを、第三者が検証することができます。

次に、その電子署名が施されたデータ(作成者を第三者が検証できるデータ)が、「変更・改ざんができない」状態で保管されるプロセスについて解説します。

まず、ブロックチェーンのネットワークは、一般的なクライアント・サーバ型の中央集権的な仕組みとは異なり、対等な役割を果たす「ノード」と呼ばれるコンピュータが形成する、分散型で中央の無いピアツーピアのメッシュ型ネットワークを形成しています。

電子署名の施されたデータは、ブロックチェーンの「トランザクション」と呼ばれ、ブロックチェーンのネットワーク内の最寄りのノードの「メモリプール」と呼ばれる領域に投函されます。

メモリプールに投函されたトランザクションの署名が当該ノードによって検証され合格すると他のノード宛に伝播し、伝播先のノードで検証・合格すると、さらに伝播するということを繰り返してネットワーク全体に広がってゆきます。

トランザクションがネットワーク全体に伝播すると同時に、ノードは手元のメモリプールにある複数のトランザクションを「マークルツリー構造」と呼ばれるデータ構造に集約して、いわゆる「ブロック」を形成するために、そのデータ構造の正当性をネットワーク全体に対して審議を問います。

このマークルツリー構造(=ブロック)にトランザクションを集約し、ネットワーク全体に審議を問う権限を有するノードの決定方法(合意形成アルゴリズム)は、ブロックチェーンの種類によって様々あります。

概ね、ノード参加者の人数(母集団)が定まらない不特定多数がノード参加者となっている「パブリックブロックチェーン」と、ノードの参加者(母集団)数が把握できる構成の「プライベートブロックチェーン」の分類によって異なり、前者の場合に採用されるのが、PoW(Proof of Work)やPoS(Proof of Stake)といった競争ゲーム型のアルゴリズムで、後者の場合に採用されるのがPBFT(Practical Byzantine Fault Tolerance)に分類される多数決型のアルゴリズムです。

これらの合意形成アルゴリズムに関する詳しい解説は、それだけで1つの論文になりそうな内容なのでここでは割愛しますが、いずれの場合にせよ、裏切り者や結託者がネットワーク参加者の中にある程度存在しても、正常な合意形成が対応できるよう工夫されたアルゴリズムになっていることが特徴です。

ここで「マークルツリー構造」について解説します。

マークルツリー構造とは、まさに、ブロックチェーンの構造そのものを指し、この構造こそが、ブロックチェーンの変更不可能性と耐改ざん性を担保しています。

まず、マークルツリー構造の特徴を知るには、その前提知識として「ハッシュ値」の存在が欠かせません。

ハッシュ値とは、ある入力値に対して、全く予想がつかない値を出力する関数から得られ、その入力値が1ビットでも異なれば、全く異なる出力値が得られる特性を持っています。また、同じ入力値について、同じ関数を利用すれば、誰がやっても必ず同じ値を出力します。

このハッシュ値のもつ特性を連鎖的に利用すると、複数のデータに依存性を持たせることができ、保管される内容はもちろん、保管される順番も固定することができるようになります。

ブロックチェーンでは、二分木構造を用いて探索効率や改ざん検出の効率を高める目的で「マークルツリー構造」とよばれるハッシュ値の連鎖構造を作ります。

そのイメージが以下の通りです。

ブロックチェーンは、このような構造を持つことにより、もし途中のトランザクションデータが1ビットでも改変されると、データ構造に矛盾が出ることになるため、改変のデータが含まれたまま存在することができず、近隣のノードから正しい構造を持つデータを取り寄せることで、データを自己修復しようとします。

つまり、ブロックチェーンに一度書き込まれたデータは、一瞬だけ「改ざん・変更」することはできても、ハッシュ値に矛盾を生じたブロック以降は一旦すべて廃棄され、すぐさまにネットワーク内の近隣にあるノードから正常なデータを取寄せて自己修復してしまうし、例えば一部のデータを「消した」としてもなお、自己修復の機構が働くので、消すことさえままならないのです。

 

次回「いまさら聞けないブロックチェーンの仕組み(後編)」では、保存されたデータの「改ざんも変更もできない」し「消すこともできない」という、一見、致命的にも思える機能欠如がある中で「スマートコントラクト」といわれる、契約を自動執行させるという如何にもミッションクリティカルそうなプログラムが動作するのはなぜか?にスポットを当てて解説します。

 

それでは、また。

いまさら聞けないブロックチェーンの仕組み〈後編〉はこちら
https://jba-web.jp/blogs/sugii_20200625

 

投稿者:

 

 

 

PREV NEXT