簡単まとめ

【簡単まとめ】DFINITYをFAQから見てみる4(技術編3/5)

更新日:

DFINITY本家のFAQページをもとに、DFINITYについて見ていきます。

これを読むとDFINITYの検証の仕組みのうちValidation Towerについてざっくりと知ることができます。技術編2/5はこちら

要点まとめ

まず、本記事の要点をお伝えします。

  • Validation Treeは、マークルルートを作るために必要で、非中央集権型ネットワークがステート遷移を検証するのを手助けする。
  • Validation Treeの各ノードがValidation Towerになる。
  • Validation Towerの目的は、ネットワーク上の少数のプロセスを使ってステート遷移を検証することである。
  • Validation Towerは、無数の「面(level)」の積み重ねと言える。
    • 面は1グループで構成され、そのグループは最上層の閾値リレーチェーンが生成するランダムビーコン(乱数)によって選ばれる。
    • 面が作られるということは、その面で示される変化と、その面から深さdまでの面が示す変化が有効であることを意味する(つまり、面Xは、X, X-1, X-2, ..., X-dの全ての面が示す変化が有効であることを示す)。
    • 面が深さdに到達すると、その面で示される変化は不可逆となる(深さdの面は、その後に新しい面Xが作られると深さd+1になるが、Xは深さdまでの有効性を示すのみなので動かしようがない)。
    • 面を作るのに関わったグループのプロセスは、その面が深さdより下に到達するまでネットワークの役割に加わることはできない(例えば、面Xの作成に関わったプロセスはその後面X+dが作られる(=面Xの深さがdになる)まで新しい面を作ることはできない)。
    • 乱数によらない面を作成してValidation Towerに入れると、その面より下の検証を得ていない面の深さはリセットされ、不可逆になるまでさらにd-1の面が必要になる。
  • Validation Towerにおける面の性質と、乱数の公正かつ操作不能かつ予測不能な性質から、攻撃者が不正な変化を有効にするためには乱数に従いながらd-1個の面を作らないといけない。しかしこれは確率的に不可能である。

次に詳細としてDIFINITY本家による英文FAQページの日本語訳を掲載します。細部を知りたい方は読み進めてください。

スポンサードサーチ

技術的な質問

Validation Towerって何するの?どう動くの?(What does a Validation Tower do and how does it work?)

注)技術論文や入門資料集もご確認ください。

概略

BitcoinやEthereumのような従来のブロックチェーンシステムでは、ブロックは全てのトランザクションと、ブロックの内容とステートに対する更新記録が有効かの確認に携わったネットワークの全メンバをジェネシスブロックからずっと記録しています。このような仕組みはDFINITYのようなシステムでは絶対に機能しません。1つ1つ処理するにはデータとトランザクションの量があまりにも多すぎるからです。毎秒数エクサバイト、数十億トランザクションまで及ぶ可能性もあります。従って、DFINITYにはステートシャードに対する更新をネットワーク内のプロセス(マイニングクライアント)の部分集合を利用して安全に検証する方法が必要です。そして、最上層チェーンのグローバルステートにアンカーをつけている単一マークルルートだけを保存します(皮肉なことに、BitcoinやEthereumの仕組みよりはるかに軽量に構築することができます)。

Validation Treeはマークルルートを構築するために必要となります。マークル木が1つのルートハッシュを使って制限なくデータの存在を公証できるのと似たような方法で、Validation Treeは非中央集権型ネットワークが無制限に事象を検証する手助けをします。Validation Treeの各ノードはValidation Towerとなって、割り当てられたインプットを検証し処理したことを証明するアウトプットダイジェストを生成します。Validation Treeの最下層では、Validation Towerはトランザクションと割り当てられたシャードステートのデータに発生する結果的な変化の提案を受信します。Validation Towerの目的はネットワークにあるプロセスの相対的に小規模な部分集合を利用して事象を検証することですが、ネットワークの全プロセスを利用しているのと同じようなセキュリティで(少なくとも理論的にはBitcoinやEthereumでやっているのと同様に)やらなければなりません。一見すると不可能そうですが、幸いなことに実現可能です。

Validation Towerは無数の面の連なりを進みます。それぞれの面ではある変化が有効であることを示す証明を出します。例えば、ネットワークに送信されたトランザクションによりストレージシャードに対して行われた変更を検証するためにあるValidation Towerを割り当てられる可能性があります。Validation Towerの面はそれぞれ新しいプロセス(マイニングクライアント)の1グループで構成されます。そのグループのプロセスは、最上層の閾値リレーチェーンが生成するランダムビーコンによって選ばれます。グループがValidation Towerの新しい面を作ると、その面はとある新しい変化が有効であること、及び、その面から深さdまで下層にある面の示す変化も有効であることに証明を与えます。

ひと度変化が「検証された」とみなされると、その変化を一番最初に証明を与えた面は深さdまで埋まることになります。そのため、深さd-1以上の面もその変化に対して証明を与えていることを示します。従って通常の条件下では、プロセスグループが新しい面を作るとすぐに、面を作る前までは深さd-1の面にあった変化は深さdまで押し下げられて完全に検証がなされて不可逆のステートになります。攻撃者はどうにかして不正な変化を深さdまで埋めさせる方法はないのか、と疑問に思うのはもっともしょう。これを実行するには、攻撃者はd個の面が作られるまでずっと面を作るグループをコントロールしなければならず、非常に多くの試行錯誤が求められるでしょう。ただ、仮に不正な変更を認めさせることで1兆ドルもらえるとしたらやる価値はありますね。

どうして不正ができないのかを理解するために、まず、一度とあるプロセスが新しいValidation Towerの面の署名に参加するとそのプロセスが休眠状態になることについて考えてみます。ここで、そのプロセスは自分の参加した面が十分に深いところ(通常の条件下では深さd)に埋まるまで休眠状態であり続けるものとします。そして、十分深くまで埋まったら活動を再開するものとします(実際、ブロックのフォージングのようなネットワークの役割に参加する場合、プロセスは自らが最後に参加したValidation Towerの面が検証されたことを証明する必要があります。そして、この仕組みがプロセスを除外する方法でもあります)。従って攻撃を行うには、攻撃者のプロセスが凍結されることによる出費を乗り越えなければなりません。攻撃者のプロセスは参加トークンや他の高価なオペレーションで相当の保証金を支払ってネットワークに入っていなければならないからです。ひと度プロセスが不正な面にコミットしてしまうと、他のプロセスがその不正な面の上にさらに面を作って深さdまで埋めてくれるまで何もできません。

攻撃者は確立を考えて出費と大量の利得とトレードしようとするかもしれません。このとき、攻撃者が最初に直面する問題は、次の面を作るべくランダムビーコンが招集するプロセスが分からないということで、これはその後に続く面でも同様です。というのも、ランダムビーコンの乱数が操作不能かつ予測不能だからです。もし正しいプロセスが選ばれて次の面を作ってしまうと、正しいプロセスは攻撃者の面を不正であるため拒否してしまいます。ゆえに、再び攻撃者が次のプロセスを制御できる時まで、乱数により割り当てられるプロセスには不正な面を解放せずに留保しておく可能性があります。そうすれば攻撃者の制御するプロセスが不正な面を検証することになります。しかし、Validation Towerプロトコルがこのような事態が起こるのを防ぎます。つまり、新しい面がランダムビーコンと足並みを合わせて作成されなければ、その新しい面の下にある検証されていない面は全て、有効になるまでにさらにd-1の面が必要となるようにリセットされます。しかしながら、数学はそれほど彼に都合よくできていないことは言うまでもありません。

従って、攻撃者は不正なプロセスを不正な面を作るためにコミットさせる必要があり(これが不正なステート遷移を認めさせるのは1兆ドルの価値があると形容した理由です)、その上で、100%偶然にも乱数が次の面を作るのに選ぶグループがd-1回連続して攻撃者が制御するものであることを祈らなければならないのです。例えば、面はそれぞれ10のプロセスで作られるものと仮定すると、新しい面の作成にはそのうち6プロセスの協力がなければなりません。また、ネットワークには10000プロセスがあってそのうち3000が不正なものである(さらに、既にもうあり得ないことですが、1人の攻撃者が不正な3000プロセスを制御している)と仮定します。このとき、攻撃者が1つの面を作るグループを制御できる確率は0.047です。攻撃者は不正な面にコミットして、(運よく)攻撃者が選ぶグループによってあと9つの面を作ることができれば不正行為を有効化できるとします。この発生確率は、たった(0.047)9=0.000000000001119、別の言い方をすれば893,550,862,955回(筆者注:約9000億回)試行すれば1度成功する確率があるということになります。

これで攻撃者の持つ問題を理解できたでしょう。攻撃者は不正な面にコミットし、さらに攻撃者のプロセスが選択されて連続でd-1個の面を作成するよう祈ることで何とか全力で不正をしようとしますが、そのたびに非常に高確率で攻撃者は自分が攻撃に利用したプロセスを廃止することになります(その一方で、攻撃者の不正な面の下にある正しいプロセスは、攻撃者の面の下から面を作ることができるので廃止されません)。この例では、Validation Towerでは絶対に認められることのない面を1つ攻撃者が作るのに、6プロセスを要しました。もし、1プロセスの参加にまつわるトークン保証金が10000ドルであるとしたら、1つ不正な面を作るごとに6プロセスを失って、攻撃の成功までに5.36e+16ドル(筆者注:1回の攻撃成功となるまでに、893,550,862,955試行回数×6プロセス×10000ドル≒5.36x1016ドル=5京3600兆ドル)かかります。攻撃者が頑張って1兆ドルの暗号通貨を不正に入手するよりもはるかに前に、明らかに現実世界のリソースを使い果たしてしまいます。

Validation Towerの素晴らしい点は、ネットワークが小規模なプロセスの部分集合を充てるだけでステート遷移を完全なセキュリティで検証できてしまうことです。そんなオペレーションに必要なものは公正かつ操作不能かつ予測不能なランダム性のソースだけなのです。そして親切なことに、それは閾値リレーチェーンが提供してくれます。

【簡単まとめ】DFINITYをFAQから見てみる3(技術編2/5) ←← 前)|(次 →→ 【簡単まとめ】DFINITYをFAQから見てみる5(技術編4/5)

-簡単まとめ
-, , , , , , , , , ,

Copyright© 暗号通貨界隈のメモ書きなど。 , 2019 All Rights Reserved Powered by STINGER.

%d人のブロガーが「いいね」をつけました。