a16z:技術詳細解説暗号プロジェクトの非中央集権的なオンチェーン信頼設定儀式
著者:Valeria Nikolaenko、Sam Ragsdale、a16z
編纂:Amber、Foresight News
信頼できる設定儀式(Trusted Setup Ceremony)は、暗号コミュニティに挑戦を投げかけ続けていますが、同時に暗号コミュニティを最も興奮させる要素でもあります。儀式の目的は、暗号ウォレット、ブロックチェーンプロトコル、またはゼロ知識証明システムを保護するための信頼できる暗号鍵を生成することです。これらのプログラムはプロジェクトの安全性の信頼の根幹であり、正確な操作と信頼できる設定儀式の実行を確保することが重要です。
現在、ブロックチェーンプロジェクトが行う信頼できる設定儀式の形式は多岐にわたりますが、blowtorches、radioactive dust、airplanesなどが含まれ、これらの形式には共通点があります。それは、すべてが中央集権的なコーディネーターに依存していることです。本稿では、スマートコントラクトを使用して中央集権的なコーディネーターを置き換え、プロセスを分散化する方法を示します。同時に、暗号業界の専門家が「Kate-Zaverucha-Goldberg(KZG)」または「powers-of-tau」と呼ぶ儀式をEthereum上で実行できるライブラリをオープンソース化します。
私たちの分散型アプローチには限界がありますが、それでも有用です。現在のオンチェーンデータの制限により、暗号パラメータのサイズは64 KBを超えない必要があります。しかし、参加者の数に上限はなく、誰でもいつでも貢献を提出できます。これらの短いパラメータの用途には、小型ゼロ知識SNARK、データ可用性サンプリング、Verkleツリーなどがあります。
信頼できる設定儀式の歴史とメカニズム
典型的な信頼できる設定儀式では、一群の参加者が協力して一組の暗号パラメータを生成します。各参加者は、ローカルで生成された暗号情報を使用して、これらのパラメータを作成するためのデータを生成します。適切な設定は、暗号情報が漏洩せず、暗号情報がプロトコルで指定された方法でのみ使用され、儀式の終了時に完全に破棄されることを保証します。儀式中に少なくとも一方が誠実であり、(儀式終了後に)暗号情報を破棄した場合、プロセス全体は安全と見なされます。(もちろん、前提としてコードにエラーがないことが必要です)
最も注目すべき儀式のいくつかは、プライバシーを重視したブロックチェーンプロジェクトであるZcashによって導入されました。これらの儀式の参加者は、Zcashユーザーがプライベートな暗号取引を構築し、検証できるようにするための公共パラメータを生成しました。6人の参加者が2016年に最初のZcash儀式Sproutを開催しました。2年後、暗号研究者のAriel Gabizon(現在はAztecのチーフサイエンティスト)は、儀式の設計において壊滅的なエラーを発見しました。このエラーは、基礎研究論文から引き継がれたものでした。
この脆弱性により、攻撃者が検出されることなく無限のZcashコインを作成できる可能性がありました。Zcashチームはこの脆弱性を7ヶ月間秘密にしており、システムのアップグレードであるSapling(この儀式には90人の参加者が関与)によってこの問題が解決されるまで公開されませんでした。セキュリティの脆弱性に基づく攻撃はユーザーの取引のプライバシーには影響しませんが、無限に偽造できる可能性はZcashの安全前提を損ないます。(理論的には、攻撃が発生したかどうかは分かりません。)
信頼できる設定のもう一つの注目すべき例は、Semaphoreのために設計された永続的な「tau-power-of-tau」儀式です。SemaphoreはEthereum上での匿名シグナリングのためのプライバシー保護技術です。この設定はBN254楕円曲線を使用しており、これまでに71人の参加者がいます。後にTornado.Cash、Hermezネットワーク、Loopringなどの著名なプロジェクトがこの設定を使用して独自の儀式を実行しました。
AztecはBLS12_381楕円曲線上で類似の儀式を開催し、176人の参加者がzkSyncに参加しました。zkSyncはゼロ知識集約を使用した「第2層」Ethereum拡張ソリューションです。Filecoinは分散型データストレージプロトコルで、最初の段階と第二の段階でそれぞれ19人と33人の参加者とともに儀式を開催し、元のリポジトリをフォークしました。Celoは1層のブロックチェーンであり、軽量クライアントPlumoのために儀式を開催しました。
永続的な儀式には参加者数の制限がありません。言い換えれば、誰でも任意のレベルのセキュリティに参加でき、他の人を信頼して信頼できる設定儀式を実行する必要はありません。信頼できる参加者は、すべての結果パラメータの安全性を保証します; チェーンはその最も強いリンクと同じ強さを持っています。名の通り、永続的な儀式は永久に開催される可能性があり、元のtau権力儀式の前提と同様です。つまり、プロジェクトは通常、儀式の具体的な開始と終了の時間を決定し、生成されたパラメータをプロトコルに組み込むことができ、常にそれらを更新することを心配する必要がありません。
Ethereumは、今後のProtoDankShardingおよびDankShardingアップグレードのために、より小規模な信頼できる設定儀式を実行する予定です。これらの2つのアップグレードは、Ethereumチェーンがクライアントに提供するストレージデータの量を増加させます。このデータの有効期限は提案された30〜60日です。この儀式は現在積極的に開発中で、来年初めに約6週間の間運用される予定です。(詳細についてはkzg-ceremony-specsを参照してください)そして、これはこれまでで最大のブロックチェーン信頼できる設定儀式になることが期待されています。
偏執は「美徳」であり、特に信頼できる設定儀式に関してはそうです。機械のハードウェアやソフトウェアが侵害されると、生成された秘密の安全性が損なわれる可能性があります。秘密を漏洩させるためのこっそりとしたサイドチャネル攻撃も排除するのが難しいです。たとえば、携帯電話はCPUの振動の音波を記録することでコンピュータの操作を監視できます。実際には、すべての可能なサイドチャネル攻撃を排除することは非常に難しいため(未発見または公開されていない攻撃を含む)、機械を宇宙に飛ばしてそこで儀式を開催することを提案する人もいます。
現在、厳密な儀式参加者のシナリオは通常次のようになります。新しい機械を購入する(汚染されていないハードウェア)。すべてのネットワークカードを取り外してリスクを隔離する(ローカルの秘密漏洩を防ぐため)。ファラデーケージ内の遠隔地で機械を運用する(潜在的な覗き見者を挫くため)。擬似ランダム暗号情報生成器に大量のエントロピーとハードコピーのデータを設定する(ランダムな入力やビデオファイルのシードなど、暗号情報が解読されにくくするため)。最後に、すべてを灰にすることで暗号情報を破壊します - そして、暗号情報に関するあらゆる痕跡も。
信頼できる設定儀式の調整
すべての信頼できる設定儀式は、中央集権的なコーディネーターに依存しています。コーディネーターは、参加者を登録し、順序を決定するために委託された個人、プライベートサーバー、または他のエンティティであり、前の参加者から次の参加者に情報を転送する中継役を果たし、監査用にすべての通信の集中ログを保持します。コーディネーターは通常、ログを永続的に公開する責任も負いますが、このような中央集権的なシステムは、管理が不十分であったり、非人為的な要因によって情報が失われる可能性が高いことを認めなければなりません。
皮肉なことに、分散化が暗号の精神の核心原則であるとき、暗号プロジェクトは中央集権的な信頼できる設定儀式に依存しなければなりません。したがって、私たちは、Ethereumブロックチェーン上で永続的なpowers-of-tauのために小規模な儀式を開催することの実現可能性を証明することに決めました。この設定は完全に分散化されており、許可不要で、検閲に対して耐性があり、参加者のいずれかが誠実であれば安全です。現在の価格で計算すると、儀式に参加する費用は、必要な結果パラメータのサイズ(この場合、8から1024のtauの間)に応じて7ドルから400ドルの範囲です。
これまでのところ、私たちはコードを実験目的以外で使用しないことをお勧めします。コードに問題があることを発見した人は、私たちに報告していただけると幸いです。私たちは、私たちの方法に関するフィードバックやレビューを喜んで収集します。
KZGまたは「powers-of-tau」儀式を理解する
最も人気のある信頼できる設定の1つであるKZG、または「powers-of-tau」儀式を探ってみましょう。Ethereumの共同創設者であるVitalik Buterinのおかげで、彼の信頼できる設定に関するブログ記事がこのセクションでの私たちの考えに情報を提供しています。この設定は、tauの冪を生成するものであり、tauは参加者が生成した秘密を表す変数です:
特定のSNARK回路のためにパラメータを生成する多者計算(MPC)儀式が第二段階として続く場合があります(たとえば、2016年にJens Grothが設計した人気のあるzkSNARK証明スキームであるGroth16の場合)。しかし、私たちの作業は第一段階にのみ焦点を当てています。第一段階 - tauの冪を生成する - は、汎用SNARK(たとえば、PLONKやSONIC)や他の暗号アプリケーション(たとえば、KZGコミットメント、Verkleツリー、データ可用性サンプリング)の基礎構築ブロックとして使用できます。(DAS)。
通常、汎用SNARKパラメータは非常に大きくする必要があります。そうすることで、大きくて有用な回路をサポートできます。より多くのゲートを含む回路は通常より有用であり、大規模な計算をキャプチャできます; tauの冪数は、回路内のゲート数に大体対応します。したがって、典型的な設定サイズは|pp|= ~40 GBであり、~2の回路28 Gasをサポートできます。Ethereumの現在の制約を考慮すると、そのような大きなパラメータをチェーン上に置くことは不可能ですが、小型SNARK回路、Verkleツリー、またはDASに有用な小さな信頼できる設定儀式はチェーン上で実行できます。
Ethereum財団は、サイズが200 KBから1.5 MBのpowers-of-tauのためにいくつかの小規模な儀式を実行する計画を立てています。より大きな儀式はより良いように見えるかもしれませんが、より大きなパラメータがより有用なSNARK回路を作成できることを考慮すると、実際にはより大きいことが常により良いわけではありません。特定のアプリケーション(DASなど)は、特に小さなアプリケーションを必要とします![理由は非常に技術的ですが、興味があれば、n次の冪を持つ設定(G内で)1) KZGが≤ n次多項式に対してのみコミットを許可するため、KZGコミットメントの下で多項式が任意のn次評価から再構築できることを保証することが重要です。
この属性はデータ可用性サンプリングをサポートします:多項式のランダム評価を成功裏に取得(サンプリング)するたびに、それは多項式が確率t/nで完全に再構築できることを保証します。DASに関する詳細を知りたい場合は、ButerinがEthereum研究フォーラムに投稿したこの記事を参照してください。
私たちは、信頼できる設定儀式を実行するためにEthereumブロックチェーン上にデプロイできるスマートコントラクトを設計しました。このコントラクトは公共パラメータを完全にチェーン上に保存し、ユーザーの取引を通じて参加を収集します。
新しい参加者は最初にこれらのパラメータを読み取ります:
次に、ランダムな鍵τ'をサンプリングし、更新されたパラメータを計算します:
そして、それらをチェーン上に公開し、次の3つの事実を証明します:
- 離散対数の知識:参加者はτ'を知っています。(信頼できる設定儀式への最新の貢献がすべての以前の参加者の作業に基づいていることを証明します。)
- ppの良好な形式1:これらの要素は実際に増分冪をエンコードしています。(新しい参加者の儀式への貢献の良好な形式を検証します。)
- 更新は消去されていない:τ' ≠ 0。(すべての参加者の過去の作業を削除することによってシステムを破壊しようとする攻撃者に対する防御です。)
スマートコントラクトは証明を検証し、正しい場合は保存している公共パラメータを更新します。数学とその背後にある推論に関する詳細は、リポジトリで見つけることができます。
Gasコストの計算
チェーン上で設定を実行する主な課題は、信頼できる設定儀式をできるだけ効率的にすることです。理想的には、寄付を提出する費用は50ドルを超えないことです。(大規模なプロジェクトは、寄付者にGasを補助できるかもしれません。この場合、数百人の参加者がそれぞれ100ドルを費やすことがより容易に想像できます。)以下に、設定の最も高価な部分に関する詳細情報を提供します。Gasコストが低いほど、貢献コストが下がり、より長いパラメータ(より多くのtauの冪とより大きなSNARK回路)を構築できるようになります!
私たちの設定は、楕円曲線BN254(BN256、BN128、alt_bn128とも呼ばれる)に適用され、Ethereum上の以下のプリコンパイルコントラクトをサポートします:
ECADDは、2つの楕円曲線ポイントを追加することを許可します。つまり、[α+ β]1を[α]1と[β]1から計算します:ガス費用150
ECMULTは、楕円曲線ポイントをスカラーで乗算することを許可します。つまり、[a*α]1をaと[α]1から計算します:ガス費用6,000
ECPAIRは、楕円曲線ペアの積をチェックすることを許可します。つまり、e([α1]1、[β1]2)* … *e([α1]1、[β1]2)= 1を計算します。これは、α1*β1+ … + αk*βk= 0をチェックすることに相当します:ガスコスト34,000 * k + 45,000
EthereumがBLS12_381を有効にできれば(EIP-2537で提案されているように)、私たちの設定契約も他の曲線に簡単に使用できます。
証明を検証するGasコスト。上記のように、各参加者は設定を更新し、3つのコンポーネントを含む証明を提出します。証明のコンポーネント1と3 - 「離散ログの知識」と「更新は消去されていない」 - は非常に安価に検証できます。課題は、コンポーネント2「ppの良好な形成性」1をチェーン上で検証することです。これには、大きな多スカラー乗算(MSM)と2つのペアリングが必要です:
ここで、ρ0,…,?n-1は擬似ランダムサンプリングスカラーです。プリコンパイルされたスマートコントラクトに関しては、次のものが必要です:
データを保存するためのGasコスト。各参加者は、呼び出しデータとしてチェーン上の更新を保存します(バイトごとに68ガス)、n * 64 * 68ガスを占めます。(楕円曲線暗号に精通している人にとって注意すべき点は、n = 256の測定に基づいて、圧縮点を保存すると、解凍が全体のコストを支配することになります。)
この推定されたGasコストは次のとおりです:
もちろん、私たちはGasコストを削減するための解決策も模索しています。
オープンソースライブラリ:evm-powers-of-tau
私たちは、EVMベースのpowers-of-tau儀式をgithub.com/a16z/evm-powers-of-tauでオープンソース化しました。私たちの戦略を使用して儀式を行うのは簡単で透明です:
- ストレージと検証協定をデプロイする(協定/KZG.sol)
- 参加者は以前のトランザクションから呼び出しデータを読み取って儀式パラメータを取得します
- 参加者はローカルで鍵を生成し、更新されたパラメータを計算します
- 貢献者は証明を生成します:pi1、pi2
- 貢献者はKZG.potUpdate()を介して更新されたパラメータを公共ブロックチェーン上にデプロイされたスマートコントラクトに提出します
- スマートコントラクトは更新の有効性を検証し、提出形式が誤っている場合は回復します
- 複数の貢献者がステップ2-5を永久に実行でき、各ステップが儀式の安全性を向上させることができます
- 開発者が提出の数と質に自信を持つと、彼らはブロックチェーンで現在のパラメータを照会し、これらの値を暗号鍵として使用できます。
私たちのリポジトリは、ステップ2と3を計算するためにarkworks-rsを使用しています(rust計算はsrc/potupdate.rsにあります)が、ユーザーは自分のものを書くことを望むかもしれません。更新提出の全エンドツーエンドプロセスは、tests/integrationtest.rsの統合テストで見つけることができます。
最後に、証明と詳細な方程式はtechreport/main.pdfの技術報告で見つけることができます。
今後の作業計画
この信頼できる設定儀式を生産環境で使用する前に、数学的証明とサンプル実装の徹底的なレビューを最初に行うことをお勧めします。
実装が進むにつれて、設定の更新にかかる取引コストは設定サイズに対して線形に増加します。ほとんどのアプリケーション(SNARKs、DAS)に対して、私たちは設定n > = 256を望んでおり、現在のところ、各更新の費用は73ドルです。
私たちは、効率的な更新計算のSTARK証明と更新値に対するベクトルコミットメントを通じて、亜線形の検証コストの増加を実現できるかもしれません。この構造は、Ethereum L1 BN254プリコンパイルへの依存を排除し、より一般的なBLS12-381曲線を使用できるようにします。
すべての儀式戦略は、反復的なトレードオフとテストを経て開発されています。私たちはこの構造が信頼できるものであり、良好な検証可能性と検閲耐性を持っていると考えています。しかし、私たちの方法の合理性を検証するためのさらなる作業が完了するまで、文中で言及されたこのアプローチを直接使用することには高い注意が必要です。