簡単まとめ

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

更新日:

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

これを読むとDFINITYで重要となる「ランダム性(乱数)」についてざっくりと知ることができます。よかったらDFINITYの全般的な質問を取り扱った前稿もどうぞ。

要点まとめ

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

  • 任意の時点で恣意的な操作を受ける可能性のあるDFINITYのようなネットワークでは、高いランダム性が必要である。
  • DFINITYでは、「閾値リレー」により、ほぼ公正・完全に操作不能・完全に予測不能なランダム性を生成する。
    • こういったランダム性はDFINITYだけでなく、DFINITYで動くようなアプリケーションにとっても有益である。
    • ランダム性によるセキュリティについて、ブロックハッシュやcommit-reveal型のデザインパターン、TPMチップ、ブロックの公証による恣意的な操作の排除が考えられるが、いずれも欠点がありDFINITYの要求水準を満たさない。
  • DFINITYネットワークはマイニングクライアントで構成される。DFINITYでは、このマイニングクライアントを「プロセス」と呼ぶ。
    • マイニングクライアント(プロセス)どうしの接続はKademlia様の構造となる。
  • マイニングクライアント(プロセス)は、マイニングアイデンティティを持たなければならない。
    • オープンまたはパブリックなDFINITYネットワークでは、BNSが設定する額のdfinitiesを保証金として預け入れることにより、マイニングアイデンティティが作成される。
    • プライベートなDFINITYネットワークでは、システムアドミニストレータなどの信用できる者がマイニングアイデンティティを作成する。
    • マイニングアイデンティティはグローバルに維持されているネットワークステートに記録される。

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

スポンサードサーチ

技術的な質問

どうしてDFINITYはランダム性に頼るの?(Why does DFINITY depend on randomness?)

現在のところ、仮想コンピュータを作り出す攻撃耐性の高いネットワークにおいて膨大な数のマイニングクライアントを組織化する唯一の方法は、暗号学的に生成されたランダム性を適用することだけです。もちろん、サトシもランダム性に頼っていることは言うまでもありません。総当たり計算でしか確率的に解法を見つけることのできないその時々のいわゆるパズルをマイナーに競争して解いてもらい、勝者がBitcoinトランザクションのブロックをチェーンに追加することができます。DFINITYには、決められた時間でより効率的に生成できるより強力かつより操作されにくいランダム性が必要です。ランダム性は、確実にコンセンサスパワーと報酬を全マイナー間で公平に分配するという大切な役割を担うだけではありません。DFINITYのようなチューリング完全のブロックチェーンでは、高水準のランダム性が必要なのです。なぜなら、スマートなアプリケーションが偶然の条件次第で大量のトランザクションを有効にする可能性があるため、操作を受ける可能性が任意に高くなってしまうからです。

私たちが見つけたソリューションは閾値リレーです。閾値リレーは、ほぼ公正で、完全に操作不能かつ予測不能な方法で、ランダム性を生成する暗号理論を十分なネットワーク参加者の要求に対して適用するものです。閾値リレーを用いることで、DFINITYのネットワーク参加者は決定論的VRF(Verified Random Funciton, 検証可能なランダム関数)を生成し、ネットワークの組織や処理に動く力を与えます。

さらに:Satoshiのブロックチェーンの出現よりずっと前に、分散コンピューティングにおいてランダム性が非常に重要な役割を担っていたということは注目に値します。非同期ネットワークにおいてリーダーなしで参加者に合意をもたらしてくれて、メッセージ伝達にどれだけ時間がかかっても継承を行うことができないような最強のビザンチン・フォールトトレラントなコンセンサスプロトコルでも、「共通硬貨」と呼ばれる構成物に依存しています(しゃれではなく)。これは一連のランダムなコイントスを生成するとともに、典型的にはユニークな決定論的閾値署名システムを使って実装されます。2000年にIBM研究所がこの方法をRSAに適用しています。2014年、Dominicはスケーラブルなクリプトプロジェクトに取り組んでいました。それは、つい最近の最良の複合プロトコルからの派生技術と関与していました。これが非中央集権型ネットワークに乱数を導入してくれるBLS署名アプリケーションと、それに続く数多くの強力なアプリケーションに関する考察の起源です。RSA閾値システムは信頼できるディーラーにセットアップを頼りますが、BLS閾値システムは信頼できるディーラーなしで簡単にセットアップすることができます。

ランダム性のソースはクラウドアプリケーションに有益?(Is a source of randomness useful for cloud apps?)

はい。オープンなクラウドプラットフォーム内部において、ランダム性のソースは必要不可欠でしょう。例えば、公平なくじ引きやゲームシステムのアプリケーションといった凡庸な事例を超えて、金融取引所に送られるトランザクションの順序をランダム化することでマイナーによる「フロントランニング行為」を難しくするためにランダム性を利用することができます(筆者注:仮にトランザクションの順序が決定論的に決まっているのであれば、少し先のブロックに含まれるトランザクションをある程度決定できるので、その少し先のブロックを予めマイニングしておきブロードキャストするということができる可能性がある=フロントランニング行為。トランザクションの順序がランダムであれば未来のブロックに含まれるトランザクションを特定する難易度は上がり、フロントランニングは難しい)。しかし、もしかすると最も強力なアプリケーションというのは自律システム内にあるかもしれません。PHI 分散型商用バンキングシステム(筆者注:オリジナルのリンクは切れていたが、第2版を見つけたのでそちらのリンクを掲載)は非常に良い例でしょう。String Labsチームが現在開発しています。PHIは完全に自立していますが、人間の検証者をプロキシのように使ってアルゴリズムで賢明にローンを貸与することができます。結託を防ぐため、検証者は次から次へとランダムに選ばれます。ほぼ間違いなく、自己検証できない外部データに対して意思決定をする必要のある自律システムは、システム外に関する判断を検証したり攻撃に抵抗するために、必然的にランダムセレクションに頼ることになります。

DFINITYはどうやってランダム性を生成するの?(How does DFINITY produce randomness?)

DFINITYは「閾値リレー」と呼ばれる最新のメカニズムを導入しています。「閾値リレー」により、ほぼ公正で、完全に操作不能かつ予測不能なランダム性の決定論的なソースを生成できます。

乱数としてブロックハッシュを使ったらいいんじゃない?(Hey, why not just use the block hash as a random value?)

DFINITYはスケールアウトするために利用しているプロトコルの多くはランダム性が操作不能かつ予測不能であることに依存しています。プルーフオブワーク型のシステムにおいては、ハッシュを「選ぶ」ために候補となるブロックをいくつか生成することに関する労力はかかりますが、ハッシュを変更することができます。総当たり計算が関連しないプルーフオブステーク型のシステムでは、マイナーは簡単にブロックの内容を変更してハッシュを決めてしまうことができるので、ブロックハッシュを作ることは完全に無意味です。しかし、いずれにしてもブロックハッシュでは私たちの目的に適いません。

ランダム性にcommit-reveal型のスキームを使ったらいいんじゃない?(Hey, why not just use a commit-reveal scheme for randomness?)

commit-reveal型のスキーム(筆者注:スマートコントラクトのデザインパターンの一つ。スマートコントラクトの参加者が互いに競争関係にあるなど、ブロックチェーンの透明性が仇となる場合においてこの問題を解決する設計手法。例えば仮想投票コントラクトの場合、互いに投票先が明らかになってしまうと不正が行われる可能性がある。このとき、××へ投票しその投票は伏せておく(鍵をかけるなどする)=Commit、そして全員の投票が終わったら投票先を公開する=Reveal というような設計を行うことで問題を解決する)は一般に、行動に移らないことを選択できるがゆえに仮に他の参加者がコミットを行ったところで結果に影響を与えられる「最後の公開者」の問題が関係します。コミットメントを保留している者たちに罰金を科すのは、ランダム性を操作することで得られる報酬の方がはるかに大きい可能性があることから、あまり機能しません(結局、どんなアプリケーションもクラウドが生成するランダム性に依存することになるのです)。このようなセキュリティの欠陥は別にしても、commit-reveal型のスキームは必然的に遅くて失敗しがちです。なぜなら、手続きを次に進めるには、その前に全参加者がコミットメントを提供しなければならないからです。

ランダム性にTPMチップを使ったらいいんじゃない?(Why not use a TPM chip for randomness?)

TPMチップでは誰がハードウェアを動かすべきかを決められません。それに電源を落とされてしまうかもしれません。

ランダム性にブロックの公証を使ったらいいんじゃない?(Why not use the notarization of a block for randomness?)

ブロックの公証を使う場合、まず唯一の勝ちブロックに全員が合意する必要があります。それはつまり完全なコンセンサスプロトコルを走らせるということであり、それをするだけの十分な時間はありません。さらに、合意プロセスでは2つ以上のメッセージの選択を始めることになるので、バイアス(操作)の一部が入り込む可能性があります。多重防護の点から、これは避けたいところです。もし合意フェーズと署名フェーズがはっきりと分かれており、署名が予測不能であるとすれば、バイアスはかかりません。

DFINITYネットワークはどう構成されるの?(How is a DFINITY network composed?)

DFINITYネットワークはピアトゥピアのブロードキャストネットワークで接続するマイニングクライアント(よく「プロセス」と呼ばれる)で構成されます。クライアントはそれぞれ「マイニングアイデンティティ」を持たなければならず、マイニングアイデンティティはコミュニケーションメッセージの署名を行うことと参加をするために利用されます。そしてマイニングアイデンティティはグローバルに維持されているネットワークステートに記録されます。パブリックあるいはオープンなDFINITYネットワークにおいては、非中央集権型のBNSガバナンス機構が設定する額のdfinitiesを保証金として預け入れることでマイニングアイデンティティが作られます。一方、プライベートなDFINITYネットワークにおいては、有効なマイニングアイデンティティは企業のシステムアドミニストレータなどの信頼できるディーラーによって定義されます。各クライアントは標準的な量の計算リソース(データ処理キャパシティ、ネットワーク帯域、ストレージ)を利用できることが求められます。リソースを使って、後述のFAQで説明するUSCIDのようなメカニズムを利用してマイニングアイデンティティは保持されます。ネットワークが大きくなるにつれて、通信のボトルネックが発生するのを防ぐため、ブロードキャストネットワークは多数のサブネットワークに分割されます。

さらに:プロセス(マイニングクライアント)間の接続は、パブリックアイデンティティの派生物を使ってKademlia様の構造で組成されます。パブリックアイデンティティの派生物が本物であることの証明は、ゼロ知識証明を使って行います。各プロセスはいくつかの他プロセスとの接続を維持します。その結果、各プロセスは、流したメッセージをネットワーク全体に伝播してもらったり、他プロセスがブロードキャストしたメッセージを受信したりする可能性が非常に高くなります。このようなブロードキャストメカニズムは、一般的に非中央集権型ネットワークの運営には必要不可欠です。攻撃者はブロードキャストメカニズムを「エクリプス攻撃」で破壊しようと試行することができます。「エクリプス攻撃」は正しいプロセスを不正なプロセスで取り囲んで正しいプロセスが送受信できるメッセージをフィルタリングしてしまう攻撃です。Tungsten段階のDFINITYリリースでは、内生のランダムビーコンやアイデンティティ自体に由来する暗号学的な操作を利用してプロセスが接続することのできるピアを制限することで、このような攻撃の実行をいっそう難しくすることを予定しています。ネットワークはランダムな形のネットワークへの再編成を継続的に強制されるため、順応性の高い攻撃者でも標的セクターに対して攻撃を行うのはほぼ不可能になります。

【簡単まとめ】DFINITYをFAQから見てみる1(全般的な質問編) ←← 前)|(次 →→ 【簡単まとめ】DFINITYをFAQから見てみる3(技術編2/5)

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

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

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