メインコンテンツへスキップ

数学を信じる

ArcBlock
ブロックチェーン分散化

先日、ArcBlock 研究開発担当副社長の Tyr Chen は Erlang コミュニティの世界開発者年次大会 Code BEAM SF 2019 に招かれて講演しました。終了後、技術的な視点からブロックチェーンを信頼するとは何かを綴りました。

今回の Code Beam での講演題目は「Build a decentralized, public-verifiable DB」でした。この二年、ブロックチェーン市場の浮き沈みから流星のような buzzword が次々に生まれましたが、深く考える価値のある概念も登場しました。その一つが公開検証可能性(public verifiable)です。これは信頼、すなわち相手の身元を信頼せずにデータそのものをどう信頼するかを問います。インターネット時代の信頼は身元、言い換えれば権威に基づいています。WeChat の友人データや Google の検索結果を信じるのは、その提供元が巨大企業だからです。彼らが悪事を働かないと心から信じているのではなく、選択肢がないため、悪事を働くコストは働かないコストより高いはずだと経済的に期待しているだけです。

Code Beam のチケットを例にしましょう。Eventbrite を信頼して購入するのは、1)この分野で権威があり、2)Code Beam がそこで販売しているからです。購入者は、1)Eventbrite が Code Beam の確認用に購入記録を正しく保存する、2)データベースが安全で、破損、紛失、改ざんされない、3)破損や紛失が起きても十分なバックアップから妥当な状態へ復旧できる、と信じています。

エンジニアなら、この信頼がいかに脆いかを知っています。データベースに何重ものアクセス権限を設け、災害復旧を綿密に考えても、すべての操作はデータ自体が信頼できるという前提に立っています。安全対策が保証するのは、利用者が許可されたデータだけを扱うことです。たとえば Tyr には asset テーブルへの追加だけを許し、変更や削除を禁じても、ログイン後にデータ型さえ合う落書きを追加すれば、データベースはそのまま受け入れます。

postgres、riak、aurora、dynamodb のいずれであれ、書き込み権限を持つユーザーは真実でも虚偽でも任意のデータを書けます。

つまり、データの信頼性はデータ自体ではなく、その環境の安全性に基づきます。環境を信じるからデータを信じるという完璧な論理です。これは『Mission Impossible』で、ダムの下に隠されたデータセンターへ飛び込み、データカードを交換して Benji の身元を改ざんする場面を思い出させます。

入力時点でデータの完全性と改ざん不能性を保証する方法はあるでしょうか。

答えは簡単です。デジタル署名です。

誰でもアクセスできるデータベース Cyberbase を仮定します。誰もが承認なしに自分に関するデータを書き込めますが、正しく署名されたデータだけを受け入れ、一定のルールで更新します。

たとえば WeChat 上の年齢を 18 歳に変える場合、現在のシステムでは WeChat に依頼し、WeChat がデータベースへ次を送ります。

update user set age = 18 where id = 'a008374856...';

Cyberbase では、私が秘密鍵で Tyr 今年 18 歳 という事実(fact)に署名します。ルールは、送信者(sender)の署名が正しければ sender.age = 18 を実行する、というものです。Tyr に関する fact は Tyr だけが表明できます。Alice は Tyr の秘密鍵を持たず正しく署名できないため、Tyr に関する fact を偽造できません。

ここに従来型データベースと Cyberbase の最初の重要な違いがあります。従来型データベースはデータの正しさと完全性を気にせず、それをアプリケーションに任せ、更新元の client が認可済みなら状態を盲目的に更新します。Cyberbase は入力時にイベントを検証し、署名が有効な fact だけを条件付きで反映します。

しかし fact だけでは Cyberbase 内のデータが改ざんされないとは保証できません。Tyr の年齢が 18 歳に更新されても、81 歳へ変えられる可能性があります。不正な更新を必ず発見する仕組みが必要です。不正更新の発生自体を防ぐのではありません。絶対に安全なシステムや環境はなく、起こり得ることはいずれ起こるからです。制御すべきなのは発生後の影響です。

Merkle tree を使えば、断片的な原データを継続的に統合して hash 化し、最終的に root hash へ集約できます。データが変わるとその hash が変わり、上位の hash も連鎖的に変わるため、root hash は必ず変化します。現在の数学モデルでは、データ改ざんを root hash に反映させないアルゴリズムはありません。更新ごとに root hash を適切に保存すれば、改ざんは必ず発見できます。Tyr の各種データが顔に集約され、その顔を見れば 81 歳という嘘を見破れるようなものです。

ただし root hash の適切な保存は簡単ではありません。Tyr の年齢を 81 歳に変えられるハッカーなら、merkle tree の hash を順に変えて新しい木を偽造し、保存した root hash も変更できます。root hash まで変われば Cyberbase は偽データを信頼してしまいます。したがって、データと同じ場所に root hash を保存することは適切ではありません。

別の場所、たとえば銀行の貸金庫に Tyr の顔ともいえる root hash を置けばよいでしょうか。年齢が改ざんされたか確かめるたび貸金庫を開ければよいのですが、1)費用が高く、システムの更新頻度に対応できず、2)通信路の安全性と、返されたデータが本物であることを保証できません。

困りました。

自分の場所は安全でなく、他人の場所も信頼できないなら、更新ごとの root hash を全世界へ知らせてはどうでしょう。この情報を持つ人々の 3 分の 1 を超える人数をハッカーが洗脳できない限り、改ざんは成功しません。

これで、root hash を保存しながら、データ改ざんを発見できなくなる問題を解決できます。

ここまでの Cyberbase を整理しましょう。各人はイベントに署名し、自分に関する検証可能で信頼できる fact を独立して生成します。それらは一定のルールで Cyberbase に書き込まれ、状態(state)になります。状態を merkle tree で組織して信頼の木をつくり、root hash をネットワークへ配信することで、改ざんコストを現実的でない水準まで高めます。

ここまで物理、ネットワーク、OS のいずれの環境的な安全にも依存していません。数学に根ざす暗号アルゴリズムと事前設定したルールによって、エンドツーエンドでデータの信頼性を保証しています。

まだ重要な問題があります。ルールが正しく実行されたことを誰が保証するのでしょう。Cyberbase が不良ディスク上で動けば、ルールを正しく実行しても書いたデータと読んだデータが一致しないかもしれません。ハッカーがルールのコードを変えれば、信頼できる fact信頼できないコード信頼できる stateへ反映し、結果として信頼できない stateを生みます。

そこで、誰もが Cyberbase を実行できるようにします。ネットワーク上の各ノードが fact を受け取り、所定のルールを独立して実行します。初期値(genesis data)、受け取る fact とその順序、ルールが同じなら、最終的な state、つまり root hash も同じです。一つの障害やルール改ざんは全体に影響しません。データ改ざんには十分な数のノードを攻撃する必要があり、ネットワークが大きくノードが分散するほどコストは高くなります。

これが分散化(decentralization)と公開検証可能性(public-verifiable)です。この Cyberbase では誰かを信じる必要はなく、宇宙の基盤である数学だけを信じればよいのです。それはデータの前では誰もが平等という美しい平等をつくります。巨大企業のサービスも個人のサービスも、信頼という尺度では同じです。印刷とルネサンスが上流階級による知識の独占を破って知識の平等をもたらし、情報革命とインターネットが少数メディアによる情報の作成、流通の独占を破って情報の平等をもたらしたように、Cyberbase を支えるブロックチェーン技術は、Google、WeChat、Facebook などの巨大企業だけが信頼できるデータを持つ独占を破り、データの平等をもたらす可能性があります。サービスの競争力はデータ独占ではなく、分析、ユーザー体験、ニーズへの理解から生まれるのです。

原文リンク: 誠者,天之道也

このページに関わるもの

用語

  • Decentralization

    単一の性質ではなく、部分ごとに問うべき問いです。誰がこれを変更できるか、誰が差し止められるか、そして後から誰が検証できるか。多くのシステムは一部の要素だけが分散的です。

  • ブロックチェーン

    記録を暗号学的に結び付け、共通の検証・合意形成ルールに従って取引履歴を確定する分散台帳。