Cosmosのセキュリティについて解説しよう

こんにちはユーキムラです。

前回はCosmosとPolkadotの違いについて話をしました。

大石さんの記事もあります。

http://doublehash.me/cosmos-polkadot/

補完関係の記事書きあうのはm0t0k1ch1さんのとき以来でなんか良いですね。

さて、両者の本質的な違いはマージバリデーションの有無だということですが、マージバリデーションが標準的なPolkadotではセキュリティはすべて共有なのであんまり気にしなくていいのは誰の目にも明らかでしょう。

逆に、各ブロックチェーンにブロック承認を任せてるCosmosは危険ではないのか、という発想もあるでしょう。

セキュリティの観点ですね。それを話します。

なぜCosmosHubが必要なのか

毎度のごとく、チェーンAとそこのネイティブトークンA’、みたいな感じでB,B’,C,C’を考えます。

Aでは、A’が100枚発行されているとしましょう。

ここで、AからBにA’を60枚送ります。すると

  • AでA’は40枚
  • BでA’は60枚

という残高になるはずですね。

じゃあ次。チェーンAが不正に、「Cに対してA’をまた60枚送るよ~」というIBCを送信しようとしたとします。

AにはA’は40枚しかないので、60枚はホントは送ってはいけませんね。

もし送れてしまうと、

  • AでA’は-20枚
  • BでA’は60枚
  • CでA’は60枚

となり、ブロックチェーンでマイナスの残高、つまり負債が発生することになります。しかし、分散型台帳で根本的に負債を表現することはできません。負債を抱えるアカウントは、捨ててしまえば良いからです。

では、どのようにして「残高足りないのにAからCにA’を60枚送る」ような不正なIBCを防ぐことができるのか。

解は3つあります。

  • マージバリデーションしてしまう(Polkadotの手法)
  • 各チェーンは、世の中に存在するすべてのIBC通信を監視する
  • 中継監視役をつくる

この最後の「中継監視役」こそがCosmosHubなのです。

Cosmos Hubの役割

Cosmos Hubはなにをするかというと、IBC通信をすべてCosmos Hubを経由してやってもらうことによって、先程のような不正なIBCがあれば不正だと弾く役割があります。

まず、AがCosmosHubに「BにA’を60枚送る」とIBC送信したとしましょう。

で、次にAがCosmosHubに対して「CにA’を60枚送る」という不正IBCを送るとしましょう。

ここでCosmos Hubは、不正だとして弾きます。「おめえ残高40しかないのになに60も送ろうとしてんだ」と。

Cosmos Hubの役割は、たったこれだけです。

へ?

と思う人もいるでしょうが本当にこれだけです。

Cosmos Hubの必要性

しかしながら、これだけの役割でも、大きな役割です。

というのも、3つの解にあげた2つ目を採用する場合を考えてみましょう。

「各チェーンは世の中に存在するすべてのIBC通信を監視する」というものです。

チェーンA,B,Cがあったとして、これをやるには

  • AとBの通信
  • BとCの通信
  • CとAの通信

の3通りの組み合わせがあります。この3経路を監視することになりますね。

じゃあチェーンA,B,C,Dがあった場合を考えてみましょう。

  • AとBの通信
  • BとCの通信
  • CとDの通信
  • DとAの通信
  • AとCの通信
  • BとDの通信

と、6通りも組み合わせがでてきてしまいます。

そう、高校数学で習う、[latex]{}_n\mathrm{C}_r[/latex]通りの数になるんですね。ここでは[latex]{}_4\mathrm{C}_2=6[/latex]です。

ここでチェーンの数が5,6,7,とどんどん増えていくと…

組み合わせの数は[latex]{}_n\mathrm{C}_2[/latex]通りとなり、nに対して指数関数的に増大します。組み合わせ爆発というやつです。

nが大きい場合、[latex]{}_n\mathrm{C}_2[/latex]をすべて監視することは到底できません。しかし、ここでCosmos Hubがあると、経路が[latex]n[/latex]個に減るのです。

ハブアンドスポーク理論的なやつですね。

もしHubと並列的または子的な別のHubが出てくることになった場合は、一番最上位の階のHubの数は高々3個が限界だと考えられます。nが3の場合はハブ化しても経路が減らないが、4から減るため。

HUB-AHUB-B
HUB-C
HUB-A-AHUB-A-BZONEHUB-B-AZONEZONEZONEZONEZONE

イメージ図。

しかしまあこのようにHubも無限に増やせるので、スケーラビリティという観点では無限と言えると思います。極めて分散的。

Cosmosのセキュリティ

上述のように、Cosmos Hubはたったこれだけの役割しか(その大きな役割一つだけしか)やりません。

そんなんでネットワークのセキュリティ保てるのかと思う人もいると思いますが、結論としては、セキュリティの問題は極めて限定的と言えると思います。

例えばCosmos Hubのバリデーターに悪意あるノードが1/3を占めた場合、IBCはうまく動かなくなります。

しかしながら、各ブロックチェーン(ゾーン)はどうかというと、IBCで送られてきたトークン以外はすべて正常に作動します。Cosmos Hubに関係なくバリデーションするので当然ですね。

一方でPolkadotのようなマージバリデーションだと、ハブとなるチェーン(リレーチェーン)に悪意あるノードが多数を占めると、各ブロックチェーン(パラチェーン)はすべて作動しなくなります

要約すると、

  • IBCでセキュリティの問題が別チェーンに波及するのはIBCで送ったトークンに限られる。それ以上にはなんの影響もない。
  • このように影響を非常に小さくできるのは、バリデーションすら分散化されているから。

と言えるでしょう。

IBCでできないアレ

よく、「PolkadotはCosmosのIBCと違って、トークンだけでデータもやりとりできる」というのを見かけます。

が、各チェーンのKey Value Storeの値を読み取るくらいなら、各チェーンがKVSデータを見せるAPIを提供していればなんの造作もありません。

この点はなんの差別化にもなっていないというかなんというか、「中にVMがあるかないか」によって生まれた違いでしかないのではないかと思っています。

CosmosゾーンはVMを持たないのが普通で、ビジネスロジックはそのままチェーンにハードコーディングされ、むしろVM内プログラムにデータを受け渡すインターフェイスが必要ないだけではないかと。KVSデータとってくるくらい余裕なんですから。

ようするに、マージバリデーションがデフォルトでついてるかついてないかで違う、そこだけが唯一にして最大の違いでしょう。