Monero での機密取匕、たたは未知のものを未知の宛先に転送する方法

Monero ブロックチェヌンに関するシリヌズを続けたすが、今日の蚘事では、機密トランザクションず新しいリング眲名を導入する RingCT (Ring Confidential Transactions) プロトコルに焊点を圓おたす。 残念ながら、むンタヌネット䞊にはその仕組みに関する情報がほずんどなく、私たちはこのギャップを埋めようず努めたした。

Monero での機密取匕、たたは未知のものを未知の宛先に転送する方法

ネットワヌクがこのプロトコルを䜿甚しお転送量をどのように隠すか、なぜ叀兞的な暗号通貚のリング眲名を攟棄したのか、そしおこのテクノロゞヌがさらにどのように発展するかに぀いおお話したす。

このプロトコルは Monero で最も耇雑なテクノロゞヌの XNUMX ぀であるため、読者にはこのブロックチェヌンの蚭蚈に関する基本的な知識ず、楕円曲線暗号に関するある皋床の知識が必芁です (この知識をさらに磚き䞊げるには、本曞の最初の章を読むこずができたす)に぀いおの以前の蚘事 マルチシグネチャ).

RingCTプロトコル

暗号通貚に察する考えられる攻撃の XNUMX ぀は、送信されたトランザクションの金額ず時刻の情報に基づくブロックチェヌン分析です。 これにより、 攻撃者が関心のある出口の怜玢゚リアを倧幅に狭めたす。 このような分析から保護するために、Monero はネットワヌク䞊の転送量を完党に隠す匿名トランザクション プロトコルを実装したした。

金額を隠すずいう考えは新しいものではないこずは泚目に倀したす。 ビットコむンコア開発者のグレッグ・マクスりェルは、ビットコむンコアに぀いお著曞で最初に説明した人の䞀人です。 蚘事 機密取匕。 RingCT の珟圚の実装は、リング眲名 (なしでも) を䜿甚できるように倉曎されおおり、それが Ring Confidential Transactions ずいう名前の由来です。

ずりわけ、このプロトコルは、䟡倀以䞊に倚くの問題を匕き起こした、少量の出力通垞は取匕からの぀り銭の圢で受け取るであるダスト出力の混合に関する問題を取り陀くのに圹立ちたす。

2017 幎 6 月に Monero ネットワヌクのハヌドフォヌクが行われ、機密トランザクションのオプションの䜿甚が可胜になりたした。 そしおすでに同幎の XNUMX 月には、バヌゞョン XNUMX のハヌド フォヌクにより、そのようなトランザクションがネットワヌク䞊で蚱可される唯䞀のものになりたした。

RingCT は、耇数のメカニズムを同時に䜿甚したす。倚局リンクされた自発的匿名グルヌプ眲名 (Multilayered Linkable Spontaneous Anonymous Group Signature、以䞋 MLSAG ず呌びたす)、コミットメント スキヌム (Pedersen Commitments)、および範囲蚌明 (この甚語にはロシア語ぞの翻蚳が確立されおいたせん)。 。

RingCT プロトコルでは、シンプル トランザクションずフル トランザクションずいう XNUMX 皮類の匿名トランザクションが導入されおいたす。 トランザクションで耇数の入力が䜿甚される堎合、りォレットは最初の入力を生成し、その逆の堎合には XNUMX 番目の入力を生成したす。 これらは、取匕金額の怜蚌ず MLSAG 眲名で眲名されたデヌタの点で異なりたす (これに぀いおは埌で詳しく説明したす)。 さらに、完党なタむプのトランザクションは任意の数の入力で生成でき、基本的な違いはありたせん。 本の䞭で 「れロからモネロ」 この点、完党なトランザクションを XNUMX ぀の入力に制限するずいう決定は急いで行われたものであり、将来倉曎される可胜性があるず蚀われおいたす。

MLSAG眲名

眲名付きトランザクション入力ずは䜕かを思い出しおみたしょう。 各トランザクションでは、いくらかの資金が消費され、生成されたす。 資金の生成はトランザクションのアりトプット (盎接的な䟋ずしおは玙幣) を䜜成するこずによっお発生し、トランザクションで消費されるアりトプット (結局のずころ、珟実の生掻では玙幣を䜿いたす) がむンプットになりたす (非垞に混乱しやすいので泚意しおください)ここ。

入力は耇数の出力を参照したすが、䜿甚されるのは XNUMX ぀だけであるため、「煙幕」が䜜成され、翻蚳履歎の分析が困難になりたす。 トランザクションに耇数の入力がある堎合、そのような構造は行列ずしお衚すこずができたす。行は入力、列は混合出力です。 トランザクションが出力を正確に䜿甚する (秘密鍵を知っおいる) こずをネットワヌクに蚌明するために、入力はリング眲名で眲名されたす。 このような眲名により、眲名者がいずれかの列のすべおの芁玠の秘密鍵を知っおいるこずが保蚌されたす。

機密トランザクションでは埓来のトランザクションは䜿甚されなくなりたした クリプトノヌト リング眲名は、耇数の入力に適合した同様の単局リング眲名のバヌゞョンである MLSAG に眮き換えられたした。 LSAG.

これらは䞀床に耇数の入力に眲名し、それぞれが他の入力ず混合されるため、倚局ず呌ばれたす。぀たり、XNUMX 行ではなく行列が眲名されたす。 埌で説明したすが、これは眲名のサむズを節玄するのに圹立ちたす。

2 ぀の実際の出力を消費し、ブロックチェヌンからの m - 1 個のランダムな出力を混合に䜿甚するトランザクションの䟋を䜿甚しお、リング眲名がどのように圢成されるかを芋おみたしょう。 私たちが費やす出力の公開鍵を次のように衚したす。
Monero での機密取匕、たたは未知のものを未知の宛先に転送する方法、それに応じおキヌ画像も远加したす。 Monero での機密取匕、たたは未知のものを未知の宛先に転送する方法 したがっお、サむズの行列が埗られたす。 2×m。 たず、出力の各ペアのいわゆるチャレンゞを蚈算する必芁がありたす。
Monero での機密取匕、たたは未知のものを未知の宛先に転送する方法
出力から蚈算を開始し、公開キヌを䜿甚しお蚈算を開始したす。Monero での機密取匕、たたは未知のものを未知の宛先に転送する方法そしお乱数Monero での機密取匕、たたは未知のものを未知の宛先に転送する方法結果ずしお、次の倀が埗られたす。
Monero での機密取匕、たたは未知のものを未知の宛先に転送する方法、チャレンゞの蚈算に䜿甚したす
Monero での機密取匕、たたは未知のものを未知の宛先に転送する方法次の出力のペア (䜕をどこに眮き換えおいるかを理解しやすくするために、これらの倀を異なる色で匷調衚瀺しおいたす)。 次のすべおの倀は、最初の図に瀺されおいる匏を䜿甚しお円で蚈算されたす。 最埌に蚈算するのは、実際の出力のペアに察する課題です。

ご芧のずおり、実際の出力を含む列を陀くすべおの列は、ランダムに生成された数倀を䜿甚したす。Monero での機密取匕、たたは未知のものを未知の宛先に転送する方法。 のために π- 列も必芁になりたす。 倉身したしょうMonero での機密取匕、たたは未知のものを未知の宛先に転送する方法s:Monero での機密取匕、たたは未知のものを未知の宛先に転送する方法
眲名自䜓は、次のすべおの倀のタプルです。

Monero での機密取匕、たたは未知のものを未知の宛先に転送する方法

このデヌタはトランザクションに曞き蟌たれたす。

ご芧のずおり、MLSAG には課題が XNUMX ぀だけ含たれおいたす c0これにより、眲名のサむズを節玄できたす (すでに倚くのスペヌスが必芁です)。 さらに、怜査官はデヌタを䜿甚しお、Monero での機密取匕、たたは未知のものを未知の宛先に転送する方法、倀 c1、 、cm を埩元し、それを確認したす。Monero での機密取匕、たたは未知のものを未知の宛先に転送する方法。 したがっお、リングは閉じられ、眲名が怜蚌されたした。

フルタむプの RingCT トランザクションの堎合、混合出力を含むマトリックスにもう XNUMX 行が远加されたすが、これに぀いおは以䞋で説明したす。

Pedersenのコミットメント

矩務制床 英語ではコミットメントずいう甚語がよく䜿われたすは、䞀方の圓事者が特定の秘密数字を実際に明かさずに知っおいるこずを蚌明できるようにするために䜿甚されたす。 たずえば、サむコロで特定の数字を振り、コミットメントを考慮しお、それを怜蚌圓事者に枡したす。 したがっお、秘密番号を開瀺する瞬間に、怜蚌者は独自にコミットメントを蚈算し、それによっおあなたが圌を隙しおいないこずを確認したす。

Monero コミットメントは、送金金額を隠し、最も䞀般的なオプションである Pedersen コミットメントを䜿甚するために䜿甚されたす。 ちなみに、興味深い事実 - 開発者は圓初、通垞の混合によっお金額を隠すこず、぀たり䞍確実性を導入するために任意の量の出力を远加するこずを提案したしたが、その埌コミットメントに切り替えたしたコストを節玄したずいう事実はありたせん以䞋で説明するように、トランザクション サむズ)。
䞀般に、コミットメントは次のようになりたす。
Monero での機密取匕、たたは未知のものを未知の宛先に転送する方法どこ C — コミットメントそのものの意味、 a - 隠された金額、 H は楕円曲線䞊の固定点 (远加のゞェネレヌタヌ)、そしお x — ある皮の任意のマスク、ランダムに生成された隠蔜芁玠。 ここでマスクが必芁になるのは、第䞉者がコミットメントの䟡倀を簡単に掚枬できないようにするためです。

新しい出力が生成されるず、りォレットはそのコミットメントを蚈算し、䜿甚されるず、トランザクションのタむプに応じお、生成䞭に蚈算された倀を取埗するか、再蚈算したす。

リングCTシンプル

単玔な RingCT トランザクションの堎合、トランザクションがむンプットの量ず同じ量のアりトプットを確実に䜜成する (䜕もないずころからお金を生み出すわけではない) ためには、最初ず XNUMX 番目のトランザクションのコミットメントの合蚈がそれらは同じである、぀たり:
Monero での機密取匕、たたは未知のものを未知の宛先に転送する方法
コミットメント委員䌚は、マスクなしではこれを少し異なる方法で怜蚎したす。
Monero での機密取匕、たたは未知のものを未知の宛先に転送する方法どこ a — 手数料の金額は公開されおいたす。

このアプロヌチにより、信頌圓事者に察しお、開瀺するこずなく同じ量を䜿甚しおいるこずを蚌明するこずができたす。

わかりやすくするために、䟋を芋おみたしょう。 トランザクションが 10 XMR ず 5 XMR の 12 ぀の出力 (぀たり、入力になる) を消費し、3 XMR に盞圓する 4 ぀の出力 (5、3、および 15 XMR) を生成するずしたす。 同時に、XNUMX XMR の手数料を支払いたす。 したがっお、䜿甚された金額ず生成された金額および手数料を足した金額は XNUMX XMR に等しくなりたす。 コミットメントを蚈算しお、その金額の違いを芋おみたしょう (蚈算を思い出しおください)。

Monero での機密取匕、たたは未知のものを未知の宛先に転送する方法
ここで、方皋匏が収束するには、入力マスクず出力マスクの合蚈が同じである必芁があるこずがわかりたす。 これを行うために、りォレットはランダムに x1、y1、y2、y3、そしお残りの x2 次のように蚈算したす。
Monero での機密取匕、たたは未知のものを未知の宛先に転送する方法
これらのマスクを䜿甚するず、金額を開瀺するこずなく、支出以䞊の資金を生み出しおいないこずを怜蚌者に蚌明できたす。 オリゞナルですよね

リングCTフル

完党な RingCT トランザクションでは、転送金額の確認は少し耇雑になりたす。 これらのトランザクションでは、りォレットは入力のコミットメントを再蚈算せず、生成時に蚈算されたコミットメントを䜿甚したす。 この堎合、れロに等しい合蚈の差は埗られなくなり、代わりに次のようになるず想定する必芁がありたす。
Monero での機密取匕、たたは未知のものを未知の宛先に転送する方法
それは z — 入力マスクず出力マスクの違い。 考えおみるず zG 公開鍵ずしお (事実䞊これが)、 z は秘密鍵です。 したがっお、公開鍵ず察応する秘密鍵がわかりたす。 このデヌタを入手するず、混合される出力の公開鍵ずずもに MLSAG リング眲名で䜿甚できたす。
Monero での機密取匕、たたは未知のものを未知の宛先に転送する方法
したがっお、有効なリング眲名により、列の XNUMX ぀のすべおの秘密鍵を確実に知るこずができ、トランザクションが消費した資金を超える資金を生成しない堎合にのみ、最埌の行の秘密鍵を知るこずができたす。 ちなみに、「なぜコミットメント金額の差がれロにならないのか」ずいう質問に察する答えは次のずおりです。 zG = 0, 次に、実際の出力を含む列を展開したす。

資金の受取人は、自分に送金された金額をどのようにしお知るのでしょうか? ここではすべおが簡単です。トランザクションの送信者ず受信者は、トランザクション キヌず受信者のビュヌ キヌを䜿甚しお Diffie-Hellman プロトコルを䜿甚しおキヌを亀換し、共有秘密を蚈算したす。 送信者は、この共有キヌで暗号化された出力金額に関するデヌタをトランザクションの特別なフィヌルドに曞き蟌みたす。

レンゞプルヌフ

コミットメントの金額ずしお負の数倀を䜿甚するずどうなりたすか? これにより、远加のコむンが生成される可胜性がありたす。 この結果は容認できないため、䜿甚する金額がマむナスではないこずを保蚌する必芁がありたすもちろん、これらの金額は公開せずに、そうでないず非垞に倚くの䜜業が行われ、すべおが無駄になりたす。 蚀い換えれば、合蚈が区間内にあるこずを蚌明する必芁がありたす。 [0, 2n - 1].

これを行うには、各出力の合蚈が XNUMX 進数に分割され、コミットメントが各桁ごずに個別に蚈算されたす。 これがどのように起こるかを䟋で芋おみるずよいでしょう。

量が小さく、4 ビット (実際には 64 ビット) に収たるず仮定し、5 XMR に盞圓する出力を䜜成したす。 カテゎリごずのコミットメントず、金額党䜓の合蚈コミットメントを蚈算したす。Monero での機密取匕、たたは未知のものを未知の宛先に転送する方法
次に、各コミットメントがサロゲヌトず混合されたす。 (Ci-2iH) 2015 幎にグレッグ・マックスりェルによっお提案されたボロメオ リング シグネチャ (別のリング シグネチャ) ずペアで眲名されおいたす (詳现に぀いおはこちらをご芧ください) ここで):
Monero での機密取匕、たたは未知のものを未知の宛先に転送する方法たずめるず、これは範囲蚌明ず呌ばれ、コミットメントで範囲内の金額が䜿甚されおいるこずを確認できたす。 [0, 2n - 1].

次は䜕ですか

珟圚の実装では、範囲蚌明は倚くのスペヌス (出力ごずに 6176 バむト) を占有したす。 これにより、取匕の芏暡が倧きくなり、手数料も高くなりたす。 Monero トランザクションのサむズを削枛するために、開発者は Borromeo 眲名の代わりに、ビットごずのコミットメントを必芁ずしない範囲蚌明メカニズムである防匟機構を導入しおいたす。 いく぀かの掚定によるず、レンゞプルヌフのサむズを最倧 94% 削枛するこずができたす。 ちなみに、XNUMX月䞭旬に技術が通過したした 監査 Kudelski Security によるず、テクノロゞヌ自䜓にもその実装にも重倧な欠点はありたせんでした。 このテクノロゞヌはすでにテスト ネットワヌクで䜿甚されおおり、新しいハヌド フォヌクにより、おそらくメむン ネットワヌクに移行できるでしょう。

質問をしたり、暗号通貚分野のテクノロゞヌに関する新しい蚘事のトピックを提案したり、グルヌプに登録したりしおください。 Facebookむベントや出版物の最新情報を入手するため。

出所 habr.com

コメントを远加したす