Chainlink VRF: オンチェーンの検証可能なランダム性

Chainlink Japan
Chainlink Community
18 min readFeb 17, 2021

本記事はChainlinkオフィシャルブログに公開された“Chainlink VRF: On-chain Verifiable Randomness”の和訳です。

Chainlink公式より許可をいただいた上で記事を翻訳・公開しています。

Chainlink VRFを発表できることを嬉しく思います。これは、検証可能なランダム関数を利用して、チェーン上で検証可能なランダム性を生成するものです。Chainlink VRF の恩恵を受けているスマートコントラクトは数多くあります。具体的には、彼らのコントロールを超えたランダム性の改ざん防止ソースを使用していることの証明を提供したいと思っているスマートコントラクトです。

学術的な協力者、Chainlink VRF へのフィードバックを提供してくれた開発者コミュニティ、そしてこの初期実装を現実のものにするために尽力してくれた多くのチームメンバーに感謝したいと思います。

Chainlink VRFはブロックチェーンゲーム、セキュリティ、レイヤツープロトコル、その他様々なユースケースに焦点を当てたスマートコントラクトの開発を可能にし、加速させます。開発者は最近リリースされた開発者向けのドキュメントを通じて、Chainlink VRFを簡単に統合して、スマートコントラクトに検証可能なランダム性を利用することができます。

検証可能なランダム性の必要性

スマートコントラクトを作成し、かつそのコントラクトが保有する資金を盗み出そうとする敵から守るためには、セキュリティセンシティブな考え方が必要です。ランダム性を重要なインプットとして使用するスマートコントラクトの開発者は、ランダム性の操作が重大なリスクであることを認識しなければなりません。ランダム性を利用したシステムはすべてのコントラクトの参加者にとって証明可能なほど公平で、かつ公平に不確実なものであることが理想的ですが、同時に、その結果を予測することで敵対者がコントラクトを悪用するリスクを軽減することにも成功しています。

Chainlink VRF は、ランダム性とオンチェーンで検証可能な暗号証明を提供し、ランダム性が実際に予測不可能であることを示すことで、これらの要件の両方を満たそうとしています。Chainlink VRFのランダム性のオンチェーン検証可能な性質により、Chainlink の今後のステイク機能を使用して金銭的なペナルティを受け、将来的にはランダム性のために手数料を支払っていたクエリーから削除される可能性があるため、参加ノードはリクエストを保留することしかできません。

Chainlink VRFを使用することで、予測不可能な結果を必要とするあらゆるアプリケーションのために、信頼性の高いスマートコントラクトを構築することができます。

  • チェーン上で検証可能なランダム性のソースを使用することで、ゲームの信頼性を高め、開発者はセキュリティセンシティブなユーザーに追加の証明を提供することができます。
  • やりがいのある予測不可能なシナリオや環境を生成し、リワードのドロップなどの予測不可能なプレイヤーの報酬を割り当てることで、ゲームをより楽しくします。
  • 任務やリソースを証明できるように無作為に割り当てることができます。例えば、裁判官を事件にランダムに割り当てたり、監査人を調査対象の会社にランダムに割り当てることができます。
  • 契約の合意形成のために必要な、提案に投票する資格のあるオブザーバーの代表的なサンプルを選択します(調査は、追加のシビルレジスタンスを提供するための効率的な方法です)。

既存の方法のセキュリティ上の制約

スマートコントラクトにランダム性を提供する既存のソリューションには限界がありますが、Chainlink VRF の検証可能なランダム性によって克服されます。ブロックハッシュのような既存のオンチェーンデータを使用したり、様々なオフチェーンのランダム性をオンチェーンに配置したりすることは、それぞれに固有の課題があります。

ブロックチェーンのランダム性を利用しようとするスマートコントラクトの開発者が避けるべき悪用の例として、ブロックハッシュベースのランダム性保証に過度に依存することが挙げられます。例えば、ある高さのブロックのハッシュの最後のビットのパリティに基づいてコントラクトが決断を行うとします。これは50/50の結果のように見えますが、平均的にブロックの3分の1を生産するマイナー(またはマイナーの連合)が、ブロックハッシュの最後のビットが1である当選ブロックを捨てて、約2–3ETHのブロック報酬を放棄することを決定する可能性があることを考えてみましょう。この場合、マイナーはゼロの結果を信頼できる50%の確率から2/3の確率に偏らせることができ、ランダム性生成のこの方法に依存するスマートコントラクトからユーザーの資金を失うことになります。コントラクトのゼロビットの動作が12–18ETH以上の利益をマイナーにもたらす場合、この動作は経済的に合理的であり、この方法を使用したコントラクトが確保すべき価値の上限を生み出すことになります。

このような問題を回避するために、スマートコントラクトの開発者はすでにオフチェーンソリューションを利用しています。しかしオフチェーンの値が偏りのないものであることを暗号化して検証しなければ、結果がオフチェーンのプロバイダによって操作されたり、ランダムな値をオンチェーンに置くデータトランスポート層によって操作されたりする可能性があります。同様にアプリケーションのユーザは、ランダム性が公平に生成され、アプリケーションへの途中で変更されることなくオンチェーンに持ち込まれたと仮定することを余儀なくされます。

スマートコントラクトのためのランダム性のソースを検討しているスマートコントラクト開発者が避けるべきであると我々が考える、その他の重要なトレードオフとセキュリティリスクには、以下のものが含まれます。

  • スマートコントラクトによるアクセス不能またはスマートコントラクトとの非互換性
  • 乱数発生器の集中演算子による操作
  • ブロックチェーンのマイナーによるアプリの利用者の一人としての悪用
  • アプリケーションのエンドユーザーからの不当に高い信頼性の要求

Chainlink VRFは、これらの望ましくないセキュリティリスクやその他のセキュリティリスクに対処するために、透明性と、各結果が公正に生成されていることを証明する暗号化証明を提供します。

Chainlink VRFの仕組み

Chainlink VRFの仕組み

簡単に言えば、スマートコントラクトはChainlinkにシードを提供することでランダム性をリクエストします。このシードは、提供されたオラクルが予測できないように、乱数を生成するために使用され、それがチェーン上のコントラクトに送られます。各オラクルは、乱数を生成する際に独自の秘密鍵を使用します。結果が証明とともにオンチェーンで公開されると、オラクルの公開鍵とアプリケーションのシードを使って検証されます。広く受け入れられているブロックチェーンの署名と証明の検証機能に依存することで、コントラクトはコントラクト自体を実行している同じオンチェーン環境で検証されたランダム性のみを消費することができます。

Chainlink VRF を使用する基本的な利点は、検証可能なランダム性です。たとえノードが漏洩したとしても、そのノードが操作したり、偏った回答を提供したりすることはできません。最悪のシナリオは、欠陥を生じたノードがリクエストに対するレスポンスを返さないことで、ブロックチェーン上に即座に永遠に表示されます。ユーザーはレスポンスを停止したり有効な証明をランダムに提供しないノードに頼ることはできなくなります。万が一ノードに欠陥が生じた場合でも、その結果として生じるランダム性は操作できません。欠陥が生じたノードはリクエストを保留してレスポンスを与えないだけであり、その結果、Chainlink の今後のステイク機能を使って金銭的なペナルティを受け、ランダム性のために料金を支払っていたであろう将来のクエリから削除されることになり、質の低いノードや行儀の悪いノード運営者にとっては、即時的にも長期的にも経済的な損失をもたらすことになります。簡単に言えばChainlink VRFは、それを適切に使用するアプリケーションを操作することはできません。それは、将来のランダム性のソースとして削除される前に、オフラインになるか、単一の結果を保留することができるだけです。これにより、スマートコントラクト開発者とそのユーザーに優れたセキュリティを提供します。

Chainlink VRF のさらなる利点は、より多くのユーザーが利用することで、ノードオペレータに支払われる ユーザー料金が増加し、ノードオペレータが可能な限り多くのセキュリティ保証を提供するインセンティブが生まれ ることです。ステーキングを通じた暗号経済的なセキュリティは、時間の経過とともに増加し、追加のセキュリティのために支払う大規模な料金で正当化することをユーザーが求めるものとなる可能性が高いです。これにより、ユーザーの料金に裏付けられたグローバルなリソースが共有され、独自のRNGソリューションを作るために資金を費やしていたユーザーが、ブロックチェーンエコシステム全体の共有リソースの集合的なセキュリティを向上させるために同じ資金を投入することが可能になります。ChainlinkがPolkadotTezosなどの様々なチェーンをサポートすることができるということは、このコミュニティリソースにお金を払っているユーザーの領域は、ユーザーシップと漸進的に増加する暗号経済的なセキュリティ保証の間のネットワーク効果で成長し続けることを意味しています。

統合の例: PoolTogether

Ethereum上の負けなしの貯金ゲーム、「PoolTogether」は私たちの心を躍らせるものであり、彼らのチームによる広範な技術研究の後、彼らがChainlink VRF を使用してアプリケーションの証明可能なほど公平なランダム性をユーザーに保証する予定だということに、私たちは興奮しています。

PoolTogtherがChainlinkの検証可能なランダム関数を使用する方法

PoolTogetherは、ユーザーの預金をプールし、毎日と毎週の抽選でランダムに選ばれた勝者にプールで得た利子を分配する損失のない貯蓄ゲームです。ゲームは、宝くじの仕組みを介して保存するインセンティブを与えます。

Chainlink VRF の検証可能なランダム性を実装することで、PoolTogether のユーザーは、各勝者が偏りのないランダム性のソースで選ばれていることを確認することができます。

PoolTogether は、自社のセキュリティをより確かなものにするだけでなく、アーキテクチャの重要な部分が証明可能な安全性と検証可能なランダム性で動作していることをユーザーに証明することができ、ユーザーがスマートコントラクトの参加者になった場合、PoolTogether が実際にペイアウトを提供してくれると信じる大きな理由を提供します。

テクニカルウォークスルー

Chainlink VRFは、こちらの論文で述べたGoldbergの検証可能なランダム関数 (VRF)を実装したものです。”検証可能なランダム関数”の “ランダム”は、”シードや秘密鍵を知らない人には全く予測できない(一様に分布している)”という意味です。

VRFの秘密鍵は、暗号的に安全な方法で、{0, …., #secp256k1–1}上の一様分布からオラクルが選択する番号です。(secp256k1はethereumの暗号で使用される楕円曲線です。) この秘密鍵と関連づけられているのが公開鍵で、これはオラクルを識別するために使用されます。オラクルは公開鍵を応答するChainlinkのジョブIDとともに、オンチェーン機構に登録します

消費型コントラクトがランダム性をリクエストするとき、それはシードを提供します。VRFの出力が予測しにくいことを保証するために、最新のブロックハッシュのような予測不可能で操作しにくい値や、おそらく暗号的に証明された実世界のデータをシードに組み込むのが良いでしょう。これらをbytes32に結合して、keccak256を使用してシード入力として使用することができます。オンチェーンのVRF機構はリプレイ攻撃を防ぐために、消費者が提供するシードを他のデータと混合することで、いくつかの基本的な保護を提供していますが、自分自身のシードも提供することが不可欠です。

オンチェーン機構がシードを決定すると、コンシューマリクエストで指定されたオラクルから対応するVRFアウトプットを要求するethereumログをブロードキャストしますこのログを見ると、オラクルは以下のように出力を構築します。

まずは、シードとオラクルの公開鍵を入力として使用して「曲線の入力をハッシュ化」し、secp256k1から暗号的に安全なランダムサンプルを取得します。これは出力が secp256k1 の基底体 (secp256k1 の説明では “p” です) の次数よりも小さくなるまで keccak256 を使って入力を再帰的にハッシュすることで行われ、それはsecp256k1 上のある点(x,y)の x 座標です(すなわち、基礎体ではy2=x3+7です)。(x,y) はその場合曲線の入力のハッシュ値です。

そして、secp256k1の曲線点としての (x,y) をその秘密鍵で乗算して点Ɣを求めます。Ɣのkeccak256ハッシュ(uint256)がVRFの出力です。これは、secp256k1生成器のオラクルの公開鍵がsecp256k1生成器の公開鍵であるのと同じ倍数であることの証明を生成します。この証明は、シュノア署名と非常によく似ています。まず,{0, …., #secp256k1–1}からナンスnを安全にサンプリングし,秘密鍵の場合と同様に,u=n×gを計算します(ここで、gはsecp256k1ジェネレータであり、uのethereumアドレスを取ります)。そしてv=n×(x,y) を計算します。 次に、(x,y)、VRF 公開鍵、Ɣ、u のアドレス、v をハッシュ化し、そのハッシュ mod #secp256k1の剰余を取得し、c を呼び出します。最後にkをその秘密のVRF鍵として、s=n-c×k modulo #secp256k1を計算しますプルーフは、公開鍵、Ɣ、c、s、および入力シードです。これをオンチェーンの VRF機構に送り返し証明を検証し、証明が検証されたと仮定して、アウトプットを消費するコントラクトに送り返します

なぜこれが暗号的に安全なのかについては、Jimmy Song氏の著書「Programming Bitcoin」の第3章「署名と検証」の「矢印」のアナロジーを参照してください。私たちの場合、私たちがヒットさせようとしている特別な「ターゲット」はcです。このスキームの安全性の完全な証明については、”NSEC5をDNSSECのために実用化する “の付録Bを参照してください。

残念ながら、c×Ɣのようなsecp256k1のスカラー乗算はEVM上で直接計算するには非常にコストがかかるので、効率化のためにVitalikのトリックを使って、証明にc×Ɣとして渡された値が実際に積c×Ɣと一致することを検証します。この方法では、実際にc×Ɣを計算する負担をオフチェーンに押し付け、c×Ɣとして渡された値が実際にはc×Ɣであることをより安価に検証するだけで済みます。

このように、上記のインプットとステップに加えて、証明のオンチェーン検証では、c×Ɣとs×(x,y)の証明が必要であり、これらの証明が有効なsecp256k1の曲線点であるかどうか、また、Vitalikのトリックを用いて、その証明が主張する積と一致するかどうかを確認することが検証に含まれます。さらに、u には ethereum アドレスを使用し、Vitalik のトリックを使用して点 c×pk+s×g と一致するかどうかを確認します。

Chainlink VRFの計画的な進化

しきい値署名を使用したオラクルネットワークの高度にスケーラブルでコスト効率の高い分散化を実現するChainlinkの今後のアプローチは、Chainlink VRFにも究極の分散化と可用性を提供します。

これら2つのアプローチを組み合わせることで、Chainlink VRFが持つオンチェーンで検証可能なランダム性を提供するユニークな能力と、Chainlink VRFのアップタイム/アベイラビリティを提供する数千のノードを費用対効果の高い方法で提供する能力の利点をすべて得ることができます。

ChainlinkのVRFへの分散型アプローチ

Chainlinkノードのより広いエコシステムが、Chainlink VRF乱数生成に参加できるようにすることで、我々は検証可能なランダムデータをオンチェーンで生成し、ブロードキャストすることに経済的なインセンティブを与える、グローバルに分散されたノードオペレータのネットワークに達することができます。Chainlinkのしきい値署名を高度に分散化されたノードオペレータのネットワークと組み合わせて使用することで、敵対者がユーザの資金を盗み出すことを防ぐことができます。Chainlink VRF からのレスポンスはオンチェーンで検証可能であるだけでなく、非常に高い稼働率と可用性を実現します。これは、検証可能なランダム性が有用であると思われる様々なブロックチェーン上での暗号経済的な保証とChainlinkの可用性を組み合わせたもので、Chainlink VRFをスマートコントラクトがランダム性を消費する方法の標準とする可能性が高いと言えます。

上記の利点に加えて、現在Chainlink VRFを改良し分散型ランダム性の生成に関する最先端の研究と他のRNGシステムとの連携を続けています。初期の研究から、Chainlink VRFはVDFや他のランダム性生成方法と組み合わせて、オンチェーンでもオフチェーンでもランダム性を生成できると考えています。私たちは、より大きなブロックチェーン業界とより大きな学術コミュニティの両方と協力して、スマートコントラクトのために可能な限り最高の証明可能な公正なランダム性のソースを作る方法について協力できることにわくわくしています。

Chainlink VRFを試してフィードバックをください

スマートコントラクト開発者の方で、Chainlink VRFの初期実装をどのように使用するかを知りたい場合は、開発者向けのドキュメントを参照して、testnet上でChainlink VRFと統合し、Discord上で技術的な議論に参加してください。

私たちは、Chainlink VRF のセキュリティレビューの最終段階にあり、開発者コミュニティと学術コミュニティの両方のユーザーと協力していきたいと考えています。VRF へのアプローチに関するフィードバックや、改善のための提案をお持ちの方は、custom@chain.link までご連絡ください。

現実世界の問題を解決する、安全で信頼性の高いスマートコントラクトの作成とサポートに興味があれば、現在、コアチームのメンバーを追加しています! 詳細は採用情報のページをご覧ください。

Chainlinkについてもっと詳しく知りたい方は、Chainlinkのウェブサイトをご覧になるか、TwitterRedditでフォローしてください。

Chainlink日本語リソース

--

--