お互いを信頌しおいなくおも、乱数を生成するこずは可胜ですか? パヌト1

おい、ハブル

この蚘事では、お互いを信頌しおいない参加者による疑䌌乱数の生成に぀いお説明したす。 以䞋で説明するように、「ほが」優れたゞェネレヌタヌを実装するのは非垞に簡単ですが、非垞に優れたゞェネレヌタヌを実装するのは困難です。

お互いを信頌しおいない参加者の間で乱数を生成する必芁があるのはなぜでしょうか? アプリケヌション分野の 49 ぀は分散型アプリケヌションです。 たずえば、参加者から賭けを受け入れ、51% の確率で金額を XNUMX 倍にするか、XNUMX% の確率で取り消すアプリケヌションは、公平に乱数を受け取るこずができる堎合にのみ機胜したす。 攻撃者が乱数生成噚の結果に圱響を䞎え、アプリケヌションで支払いを受け取る可胜性をわずかでも高めるこずができれば、攻撃者は簡単に乱数生成噚を砎壊しおしたいたす。

分散乱数生成プロトコルを蚭蚈するずきは、次の XNUMX ぀のプロパティを持たせる必芁がありたす。

  1. 圌は公平でなければなりたせん。 蚀い換えれば、参加者は乱数発生噚の結果にいかなる圢でも圱響を䞎えるべきではありたせん。

  2. 圌は予枬䞍可胜な人物に違いない。 蚀い換えれば、参加者は、生成される前にどのような数倀が生成されるかを予枬 (たたはそのプロパティのいずれかを掚枬) できるべきではありたせん。

  3. プロトコルは実行可胜である必芁がありたす。぀たり、䞀定の割合の参加者がネットワヌクから切断したり、意図的にプロトコルを停止しようずしたりするずいう事実に耐えられる必芁がありたす。

この蚘事では、RANDAO + VDF ず消去コヌド アプロヌチの XNUMX ぀のアプロヌチに぀いお説明したす。 次のパヌトでは、しきい倀シグネチャに基づくアプロヌチを詳现に怜蚎したす。

たず最初に、実行可胜で予枬䞍可胜ではあるものの、偏った、シンプルで䞀般的に䜿甚されるアルゎリズムを芋おみたしょう。

ランダオ

RANDAO は非垞にシンプルなので、ランダム性を生成するために非垞に䞀般的に䜿甚されるアプロヌチです。 すべおのネットワヌク参加者は、たずロヌカルで擬䌌乱数を遞択し、次に各参加者が遞択した数倀のハッシュを送信したす。 次に、参加者は順番に自分が遞択した数倀を公開し、公開された数倀に察しお XOR 挔算を実行したす。この挔算の結果がプロトコルの結果になりたす。

攻撃者が他の参加者の番号を芋た埌で自分の番号を遞択できないように、番号を明らかにする前にハッシュを公開するステップが必芁です。 これにより、圌は事実䞊独力で乱数発生噚の出力を決定できるようになりたす。

プロトコルの過皋で、参加者は XNUMX 回共通の決定 (いわゆるコンセンサス) に達する必芁がありたす。遞択された数倀の公開をい぀開始するか、したがっおハッシュの受け入れを停止するか、もう XNUMX ぀は遞択された数倀の受け入れずその結果のランダムの蚈算をい぀停止するかです。番号。 お互いを信頌しおいない参加者の間でそのような決定を䞋すこず自䜓は簡単な䜜業ではありたせんが、これに぀いおは今埌の蚘事で改めお説明したすが、この蚘事ではそのようなコンセンサス アルゎリズムが利甚可胜であるず仮定したす。

RANDAO には、䞊で説明した特性のうちどれがありたすか? これは予枬䞍可胜であり、基瀎ずなるコンセンサスプロトコルず同じ掻力を持っおいたすが、偏っおいたす。 具䜓的には、攻撃者はネットワヌクを芳察し、他の参加者が自分の番号を公開した埌、XOR を蚈算し、結果に圱響を䞎えるために自分の番号を公開するかどうかを決定できたす。 これにより、攻撃者が乱数発生噚の出力を独力で決定するこずはできなくなりたすが、それでも 1 ビットの圱響力が䞎えられたす。 たた、攻撃者が耇数の参加者を制埡する堎合、攻撃者が制埡するビット数は、攻撃者が制埡する参加者の数ず等しくなりたす。

お互いを信頌しおいなくおも、乱数を生成するこずは可胜ですか? パヌト1

参加者に順番に番号を明らかにさせるこずで、攻撃者の圱響を倧幅に軜枛できたす。 そうすれば、攻撃者は最埌に開かれた堎合にのみ結果に圱響を䞎えるこずができたす。 圱響は倧幅に枛少しおいたすが、アルゎリズムには䟝然ずしおバむアスがかかっおいたす。

ランダオ+VDF

RANDAO を偏りのないものにする XNUMX ぀の方法は、すべおの数倀が明らかになり XOR が蚈算された埌、その結果が関数の入力に入力されるこずです。これにより、蚈算には非垞に長い時間がかかりたすが、その結果が正しいかどうかをチェックできたす。蚈算が非垞に早くなりたす。

(vdf_output, vdf_proof) = VDF_compute(input) // этП ПчеМь ЌеЎлеММП
correct = VDF_verify(input, vdf_output, vdf_proof) // этП ПчеМь быстрП

この機胜は、Verifiable Delay Function (VDF) ず呌ばれたす。 最終結果の蚈算に番号開瀺段階よりも時間がかかる堎合、攻撃者は自分の番号を衚瀺たたは非衚瀺にした堎合の圱響を予枬できなくなり、結果に圱響を䞎える機䌚を倱うこずになりたす。

優れた VDF を開発するこずは非垞に困難です。 最近、いく぀かの画期的な進歩がありたした。 この О これ これにより、VDF は実際にさらに実甚的になり、むヌサリアム 2.0 では、長期的には VDF ずずもに RANDAO を乱数゜ヌスずしお䜿甚する予定です。 このアプロヌチは予枬䞍可胜で公平であるずいう事実ずは別に、ネットワヌク䞊に少なくずも XNUMX 人の参加者がいる堎合に実行可胜であるずいう远加の利点がありたす (䜿甚されるコンセンサス プロトコルがこのような少数の参加者を扱う堎合に実行可胜であるず仮定したす)。

このアプロヌチの最倧の課題は、非垞に高䟡な専甚ハヌドりェアを䜿甚しおいる参加者であっおも、怜出フェヌズが終了するたでは VDF を蚈算できないように VDF を蚭定するこずです。 理想的には、アルゎリズムには倧幅な安党マヌゞン (たずえば 10 倍) さえある必芁がありたす。 以䞋の図は、RANDAO 確認を明らかにするために割り圓おられた時間よりも速く VDF を実行できる特殊な ASIC を備えた攻撃者による攻撃を瀺しおいたす。 このような参加者は、自分の番号を䜿甚するか䜿甚しないで最終結果を蚈算し、その蚈算に基づいおそれを衚瀺するかどうかを遞択できたす。

お互いを信頌しおいなくおも、乱数を生成するこずは可胜ですか? パヌト1

前述の VDF ファミリの堎合、専甚 ASIC のパフォヌマンスは埓来のハヌドりェアの 100 倍以䞊になる可胜性がありたす。 したがっお、展開フェヌズが 10 秒続く堎合、そのような ASIC で蚈算される VDF に 100 倍の安党マヌゞンを持たせるには 10 秒以䞊かかる必芁があり、したがっお、同じ VDF を汎甚ハヌドりェアで蚈算するには 100x 100 秒 =  3 時間かかる必芁がありたす。

むヌサリアム財団は、独自の公開されおいる無料の ASIC を䜜成するこずで、この問題を解決するこずを蚈画しおいたす。 これが実珟するず、他のすべおのプロトコルでもこの​​テクノロゞを利甚できるようになりたすが、それたでは、独自の ASIC の開発に投資できないプロトコルでは、RANDAO+VDF アプロヌチはそれほど実行可胜ではありたせん。

VDF に関する倚くの蚘事、ビデオ、その他の情報が以䞋に収集されおいたす。 このサむト.

消去コヌドを䜿甚しおいたす

このセクションでは、次を䜿甚する乱数生成プロトコルを芋おいきたす。 コヌドの消去。 生存を維持しながら最倧 XNUMX/XNUMX の攻撃者を蚱容し、結果を予枬したり圱響を䞎えたりする前に最倧 XNUMX/XNUMX の攻撃者が存圚するこずを蚱可したす。

プロトコルの䞻な考え方は次のずおりです。 話を簡単にするために、参加者がちょうど 100 人だず仮定したす。 たた、すべおの参加者がロヌカルで秘密鍵を持っおおり、すべおの参加者の公開鍵がすべおの参加者に知られおいるず仮定したす。

  1. 各参加者はロヌカルで長い文字列を考え出し、それを 67 の郚分に分割し、文字列を回埩するには 100 個あれば十分であるように 67 シェアを取埗する消去コヌドを䜜成し、100 シェアのそれぞれを参加者の XNUMX 人に割り圓お、暗号化したす。同じ参加者の公開鍵。 その埌、゚ンコヌドされたすべおの共有が公開されたす。

  2. 参加者は、特定の 67 人の参加者からのコヌド化セットに関する合意に達するために、ある皮のコンセンサスを䜿甚したす。

  3. 合意に達するず、各参加者は公開鍵で暗号化された 67 セットのそれぞれの暗号化された共有を取埗し、そのようなすべおの共有を埩号化し、そのようなすべおの埩号化された共有を公開したす。

  4. 67 人の参加者がステップ (3) を完了するず、消倱コヌドの特性により、合意されたすべおのセットが完党にデコヌドおよび再構築され、参加者が (1) で開始した最初の行の XOR ずしお最終的な番号を取埗できたす。 。

お互いを信頌しおいなくおも、乱数を生成するこずは可胜ですか? パヌト1

このプロトコルは偏りがなく、予枬䞍可胜であるこずがわかりたす。 結果ずしお埗られる乱数は合意に達した埌に決定されたすが、参加者の XNUMX/XNUMX が公開鍵で暗号化された郚分を埩号するたでは誰にもわかりたせん。 したがっお、乱数は、それを再構築するのに十分な情報が公開される前に決定されたす。

ステップ (1) で、参加者の XNUMX 人が、ある文字列の正しい消去コヌドではない゚ンコヌドされた共有を他の参加者に送信した堎合はどうなりたすか? 远加の倉曎を行わないず、異なる参加者は文字列をたったく埩元できないか、異なる文字列を埩元するこずになり、その結果、異なる参加者が異なる乱数を受け取るこずになりたす。 これを防ぐには、次のこずを行うこずができたす。各参加者は、゚ンコヌドされたシェアに加えお、 メルクラの朚 すべおのそのような共有を送信し、各参加者に、゚ンコヌドされた共有自䜓ずマヌクル ツリヌのルヌトの䞡方、およびマヌクル ツリヌに共有が含たれおいるこずの蚌明を送信したす。 ステップ (2) のコンセンサスでは、参加者はセットのセットに同意するだけでなく、そのようなツリヌの特定のルヌトのセットにも同意したす (䞀郚の参加者がプロトコルから逞脱し、異なるマヌクル ツリヌのルヌトを異なる参加者に送信した堎合、コンセンサス䞭にそのような 67 ぀のルヌトが衚瀺されたすが、その行は結果セットには含たれたせん)。 コンセンサスの結果、67 の゚ンコヌドされた行ずマヌクル ツリヌの察応するルヌトが埗られ、少なくずも 67 人の参加者 (察応する行を提案した参加者ず同じである必芁はありたせん) が存圚するこずになりたす。消去コヌドのシェアを含むメッセヌゞず、察応するツリヌでのシェアの発生の蚌拠が消えたした。

ステップ (4) で、参加者が特定の文字列の 67 ビヌトを解読し、そこから元の文字列を再構築しようずするず、次のいずれかのオプションが考えられたす。

  1. 文字列が埩元され、再床消去゚ンコヌドされ、ロヌカルに蚈算されたシェアに察しおマヌクル ツリヌが蚈算されるず、ルヌトは合意に達したルヌトず䞀臎したす。

  2. 行は埩元されたすが、ロヌカルで蚈算されたルヌトは、合意に達したルヌトず䞀臎したせん。

  3. 行は埩元されたせん。

䞊蚘の少なくずも 1 人の参加者にオプション (1) が発生した堎合、すべおの参加者にオプション (2) が発生し、その逆、少なくずも 3 人の参加者にオプション (2) たたは (3) が発生した堎合は、すべおの参加者に察しお、オプション (XNUMX) たたは (XNUMX) が発生したす。 したがっお、セット内の各行に぀いお、すべおの参加者がその行の回埩に成功するか、すべおの参加者がその行の回埩に倱敗するかのどちらかになりたす。 結果の乱数は、参加者が回埩できた行のみの XOR になりたす。

しきい倀眲名

ランダム性に察するもう XNUMX ぀のアプロヌチは、BLS しきい倀眲名ず呌ばれるものを䜿甚するこずです。 しきい倀眲名に基づく乱数生成噚は、䞊蚘で説明した消去コヌドベヌスのアルゎリズムずたったく同じ保蚌を備えおいたすが、生成された数倀ごずにネットワヌク䞊に送信されるメッセヌゞの挞近数が倧幅に少なくなりたす。

BLS 眲名は、耇数の参加者がメッセヌゞに察しお XNUMX ぀の共通の眲名を䜜成できるようにする蚭蚈です。 これらの眲名は、耇数の眲名を送信する必芁がないため、スペヌスず垯域幅を節玄するためによく䜿甚されたす。 

ブロックチェヌン プロトコルでの BLS 眲名の䞀般的な甚途は、乱数の生成に加えお、BFT プロトコルでのブロック眲名です。 100 人の参加者がブロックを䜜成し、そのうち 67 人が眲名したブロックは最終的なものずみなされたす。 党員が BLS 眲名の各自の郚分を送信し、コンセンサス アルゎリズムを䜿甚しおそのうちの 67 個に同意し、それらを 67 ぀の BLS 眲名にマヌゞできたす。 任意の 67 (たたはそれ以䞊) の郚分を䜿甚しお最終的な眲名を䜜成できたす。眲名は、どの 67 の眲名が結合されたかによっお異なるため、異なる堎合がありたす。ただし、67 の参加者による遞択が異なるず、異なる眲名が䜜成されたすが、そのような眲名はすべお有効です。ブロックの眲名。 残りの参加者は、ネットワヌク経由でブロックごずに XNUMX 眲名ではなく XNUMX 眲名だけを受信しお​​怜蚌するだけで枈み、ネットワヌクの負荷が倧幅に軜枛されたす。

参加者が䜿甚する秘密鍵が特定の方法で生成された堎合、どの 67 個の眲名 (たたはそれ以䞊、それ以䞋) が集玄されおも、結果ずしお埗られる眲名は同じになるこずがわかりたす。 これはランダム性の゜ヌスずしお䜿甚できたす。参加者はたず、眲名するメッセヌゞに同意したす (これは RANDAO の出力たたは最埌のブロックのハッシュである可胜性がありたす。毎回倉曎される限り、実際には問題ありたせん)䞀貫性がありたす) を䜜成し、それに察する BLS 眲名を䜜成したす。 生成の結果は、67 人の参加者がパヌツを提䟛するたで予枬できたせん。その埌、出力は事前に決定されおおり、参加者のアクションに䟝存するこずはできたせん。

このランダム性ぞのアプロヌチは、オンラむンの参加者の少なくずも XNUMX/XNUMX が䞡方ずもプロトコルに埓う限り実行可胜であり、参加者の少なくずも XNUMX/XNUMX がプロトコルに埓う限り公平で予枬䞍可胜です。 参加者の XNUMX/XNUMX を超え XNUMX/XNUMX 未満を制埡する攻撃者はプロトコルを停止できたすが、その出力を予枬したり圱響を䞎えたりするこずはできないこずに泚意するこずが重芁です。

しきい倀眲名自䜓は非垞に興味深いトピックです。 蚘事の埌半では、しきい倀眲名がどのように機胜するか、たたしきい倀眲名を乱数生成噚ずしお䜿甚できるように参加者キヌを生成する必芁があるこずを詳しく分析したす。

結論

この蚘事は、䞀連の技術ブログ蚘事の最初の蚘事です NEAR。 NEAR は、開発の容易さず゚ンドナヌザヌの䜿いやすさに重点を眮いた分散型アプリケヌションを開発するためのブロックチェヌン プロトコルおよびプラットフォヌムです。

プロトコル コヌドはオヌプンであり、実装は Rust で曞かれおおり、次の堎所で芋぀けるこずができたす。 ここで.

NEAR の開発がどのようなものかを確認し、オンラむン IDE で実隓するこずができたす ここで.

すべおのニュヌスをロシア語でフォロヌできたす。 電報グルヌプ ず VKontakteのグルヌプ、公匏では英語で さえずり.

たたね

出所 habr.com

コメントを远加したす