Dan Finlay氏、Karl Floersch氏、David Hoffman氏、ScrollチームとSoulWalletチームには、フィードバック、レビュー、提案をしていただき、心より感謝いたします。
イーサリアムが若い実験的な技術から、平均的なユーザーにオープンでグローバルでパーミッションレスな体験を実際にもたらすことができる成熟した技術スタックに移行するにつれて、スタックはほぼ同時に3つの主要な技術的移行を受ける必要があります。
生態系の遷移トライアングル。 3つのうち3つしか選べません。
前者がいなければ、イーサリアムは各取引のコストが3.75ドル(別の強気相場がある場合は82.48ドル)の費用がかかるため失敗し、マスマーケットを狙うすべての製品は必然的にチェーンを忘れ、すべてに中央集権的な回避策を採用します。
2つ目がなければ、ユーザーは自分の資金(および非金融資産)を保管することに抵抗があるため、イーサリアムは失敗し、誰もが中央集権的な取引所に移行します。
3つ目がなければ、すべてのトランザクション(およびPOAPなど)を文字通り誰でも見ることができるように公開することは、多くのユーザーにとってプライバシーを犠牲にしすぎているため、イーサリアムは失敗し、誰もが少なくともある程度データを隠す中央集権的なソリューションに移行します。
これら 3 つの移行は、上記の理由から重要です。 しかし、それらを適切に解決するためには、激しい調整が必要なため、困難でもあります。 改善する必要があるのはプロトコルの機能だけではありません。場合によっては、イーサリアムとのやり取りの方法を根本的に変える必要があり、アプリケーションやウォレットの大幅な変更が必要になります。
L2 スケーリングの世界では、ユーザーは多くの L2 に存在することになります。 あなたはOptimismで活動するExampleDAOのメンバーですか? 次に、Optimismのアカウントがあります。 ZkSyncのステーブルコインシステムでCDPを保有していますか? 次に、ZkSyncにアカウントがあります。 カカロットにたまたま住んでいたアプリケーションを試してみましたか? その後、カカロットのアカウントを持っています! ユーザーが1つのアドレスしか持たない時代は終わります。
Brave Walletの見解によると、私は4か所にETHを持っています。 そして、はい、ArbitrumとArbitrumNovaは異なります。 心配しないでください、それは時間の経過とともにより混乱します!
スマートコントラクトウォレットは、L1とさまざまなL2で同じアドレスを持つことをはるかに困難にすることで、複雑さを増します。 現在、ほとんどのユーザーは外部所有のアカウントを使用しており、そのアドレスは文字通り署名の検証に使用される公開鍵のハッシュであるため、L1とL2の間では何も変わりません。 しかし、スマートコントラクトウォレットでは、1つのアドレスを保持することがより困難になります。 アドレスをネットワーク全体で同等にできるコードのハッシュにするために多くの作業が行われてきましたが、特に CREATE2 と ERC-2470シングルトンファクトリは、これを完璧に機能させることは困難です。 一部の L2 (例: 「タイプ4 ZK-EVM」)はEVMと完全に同等ではなく、多くの場合、代わりにSolidityまたは中間アセンブリを使用しており、ハッシュの等価性を妨げています。 また、ハッシュを同等にできる場合でも、キーの変更によってウォレットの所有権が変更される可能性があるため、 他の直感的でない結果が生じます。
プライバシー保護のため、各ユーザーはさらに多くのアドレスを持つ必要があり、扱うアドレスの種類が変わることさえあります。 ステルスアドレスの提案が広く使用されるようになると、各ユーザーが少数のアドレスしか持たないか、L2ごとに1つのアドレスを持つのではなく、ユーザーはトランザクションごとに1つのアドレスを持つ可能性があります。Tornado Cashのような既存のものであっても、他のプライバシースキームは、資産の保管方法を異なる方法で変更します:多くのユーザーの資金は同じスマートコントラクトに(したがって同じアドレスに)保管されます。 特定のユーザーに資金を送金するには、ユーザーはプライバシースキーム独自の内部アドレス指定システムに依存する必要があります。
これまで見てきたように、3つのトランジションはそれぞれ異なる方法で「1人のユーザー~=1つのアドレス」のメンタルモデルを弱め、これらの効果の一部はトランジションの実行の複雑さにフィードバックされます。 特に複雑な点は、次の 2 つです。
スクロールにコインを持っていて、コーヒー代を払いたいです(「私」が文字通りこの記事の筆者である私である場合、「コーヒー」はもちろん「緑茶」の換喩です)。 あなたは私にコーヒーを売っていますが、太鼓でコインを受け取るようにしか設定されていません。 ワットか?
基本的に2つの解決策があります。
もちろん、これらのソリューションを組み合わせることもできます:受信者は受け入れる意思のあるL2のリストを提供し、送信者のウォレットは、運が良ければ直接送信するか、そうでなければクロスL2ブリッジングパスのいずれかを含む支払いを計算します。
しかし、これは 3 つの移行がもたらす重要な課題の一例にすぎません: 誰かに支払うような単純なアクションには、20 バイトのアドレスだけでなく、はるかに多くの情報が必要になります。
スマートコントラクトウォレットへの移行は、幸いなことにアドレッシングシステムにとって大きな負担にはなりませんが、アプリケーションスタックの他の部分には、解決すべき技術的な問題がまだいくつか残っています。 ウォレットは、トランザクションとともに21000ガスしか送信しないように更新する必要があり、ウォレットの支払い受取側がEOAからのETH送金だけでなく、スマートコントラクトコードによって送信されたETHも追跡するようにすることがさらに重要になります。 アドレスの所有権が不変であるという前提に依存しているアプリ(例: ロイヤリティを強制するためにスマートコントラクトを禁止するNFT)は、目標を達成するための他の方法を見つける必要があります。 スマートコントラクトウォレットは、特に、ETH以外のERC20トークンのみを受け取った場合、 ERC-4337ペイマスター を使用してそのトークンでガス代を支払うことができます。
一方、プライバシーは、私たちがまだ実際に対処していない大きな課題を再び提起しています。 オリジナルのTornado Cashは、内部送金をサポートしていなかったため、これらの問題は発生しませんでした:ユーザーはシステムに入金して、そこから引き出すことしかできませんでした。 ただし、内部転送を行うことができるようになると、ユーザーはプライバシー システムの内部アドレス指定スキームを使用する必要があります。 実際には、ユーザーの「支払い情報」には、(i) ある種の「支出パブキー」、つまり受信者が使用に使用できる秘密へのコミットメント、および (ii) 受信者が支払いを発見できるように、受信者のみが復号化できる暗号化された情報を送信者が送信する方法の両方が含まれている必要があります。
ステルスアドレスプロトコルは 、メタアドレスの概念に依存しており、メタアドレスの一部は送信者の支出キーのブラインドバージョンであり、別の部分は送信者の暗号化キーです(ただし、最小限の実装では、これら2つのキーを同じに設定できます)。
暗号化とZK-SNARKに基づく抽象的なステルスアドレス方式の概略図。
ここでの重要な教訓は、プライバシーに配慮したエコシステムでは、ユーザーは支出用公開鍵と暗号化公開鍵の両方を持ち、ユーザーの「支払い情報」には両方の鍵を含める必要があるということです。 また、支払い以外にも、この方向に拡大する正当な理由があります。 たとえば、イーサリアムベースの暗号化された電子メールが必要な場合、ユーザーは何らかの暗号化キーを公開する必要があります。 「EOAの世界」では、このためにアカウントキーを再利用することができますが、安全なスマートコントラクトウォレットの世界では、おそらくこのためのより明示的な機能を持つ必要があります。 これは、イーサリアムベースのIDを、イーサリアム以外の分散型プライバシーエコシステム、特にPGPキーとの互換性を高めるのにも役立ちます。
ユーザーごとに多数のアドレスが存在する世界でキーの変更とソーシャル回復を実装する既定の方法は、ユーザーが各アドレスで個別に回復手順を実行することです。 これはワンクリックで行うことができます:ウォレットには、ユーザーのすべてのアドレスで同時に回復手順を実行するソフトウェアを含めることができます。 ただし、このようなUXの簡素化を行っても、ナイーブなマルチアドレスリカバリには3つの問題があります。
これらの問題を解決するのは困難です。 幸いなことに、それなりにうまく機能する、やや洗練されたソリューション、つまり検証ロジックと資産保有を分離するアーキテクチャがあります。
各ユーザーには、1 つの場所 (メインネットまたは特定の L2) に存在するキーストア コントラクトがあります。 その後、ユーザーは異なる L2 にアドレスを持ち、それらの各アドレスの検証ロジックはキーストア コントラクトへのポインタになります。 これらのアドレスから支出するには、現在(またはより現実的にはごく最近の)支出公開鍵を示す証明をキーストアコントラクトに入力する必要があります。
証明はいくつかの方法で実装できます。
トランザクションごとに 1 つのプルーフを作成するのを避けたい場合は、回復のために L2 間のプルーフのみを必要とする、より軽いスキームを実装できます。 アカウントからの支出は、対応する公開鍵がそのアカウント内に格納されている支出キーに依存しますが、復旧には、キーストア内の現在のspending_pubkeyをコピーするトランザクションが必要です。 反事実的アドレスの資金は、古いキーがそうでなくても安全です:反事実的アドレスを「アクティブ化」して有効な契約に変えるには、現在のspending_pubkeyをコピーするためのクロスL2プルーフを作成する必要があります。 Safeフォーラムのこのスレッドでは、 同様のアーキテクチャがどのように機能するかを説明しています。
このようなスキームにプライバシーを追加するには、ポインタを暗号化するだけで、ZK-SNARK内ですべての証明を行います。
より多くの作業(例: <a href="https://notes.ethereum.org/@vbuterin/non_index_revealing_proof">this を使用します。 出発点として)、ZK-SNARKの複雑さのほとんどを取り除き、より必要最低限のKZGベースのスキームを作成することもできます。
これらのスキームは複雑になる可能性があります。 プラス面としては、それらの間に多くの潜在的な相乗効果があります。 たとえば、「キーストアコントラクト」の概念は、前節で述べた「アドレス」の課題に対する解決策にもなり得ます:ユーザーが鍵を更新するたびに変更されない永続的なアドレスをユーザーに持たせたい場合は、ステルスメタアドレス、暗号化鍵、およびその他の情報をキーストアコントラクトに入れ、キーストアコントラクトのアドレスをユーザーの「アドレス」として使用できます。
ENS の使用にはコストがかかります。 2023年6月の現在、状況はそれほど悪くなく、取引手数料は高額ですが、それでもENSドメインの手数料に匹敵します。 zuzalu.ethの登録には 約27ドルかかり、そのうち11ドルは取引手数料でした。 しかし、別の強気相場があれば、手数料は急騰します。 ETHの価格が上昇しなくても、ガス料金が200gweiに戻ると、ドメイン登録のTX料金が104ドルに上昇します。 したがって、特にユーザーがほぼ無料の登録を要求する分散型ソーシャルメディアのようなユースケースで、人々に実際にENSを使用してもらいたい場合(これらのプラットフォームはユーザーにサブドメインを提供しているため、ENSドメイン料金は問題になりません)、L2で動作するENSが必要です。
幸いなことに、ENS チームはステップアップし、L2 での ENS が実際に行われています。 ERC-3668 (別名「CCIP標準」) は、 ENSIP-10 とともに、任意の L2 上の ENS サブドメインを自動的に検証可能にする方法を提供します。 CCIP標準では、L2上のデータの証明を検証する方法を記述したスマートコントラクトと、ドメイン(例: Optinames は ecc.eth を使用します) は、そのようなコントラクトの管理下に置くことができます。 CCIP コントラクトが L1 の ecc.eth を制御すると、一部の subdomain.ecc.eth にアクセスすると、自動的に証明の検索と検証が必要になります (例: マークルブランチ)は、その特定のサブドメインを実際に保存するL2の状態です。
実際に証明を取得するには、コントラクトに保存されているURLのリストにアクセスする必要がありますが、これは確かに中央集権化のように感じられますが、実際にはそうではないと主張します:これは 1-of-N信頼モデル です(無効な証明はCCIPコントラクトのコールバック関数の検証ロジックによって捕捉され、URLの1つでも有効な証明が返される限り、 あなたは良いです)。 URL のリストには、数十の URL が含まれる場合があります。
ENS CCIPの取り組みはサクセスストーリーであり、私たちが必要とする抜本的な改革が実際に可能であることの表れと見なされるべきです。 しかし、アプリケーション層の改革は、まだまだたくさんあります。 いくつか例を挙げます。
今日、ウォレットは資産を保護するビジネスを行っています。 すべてがオンチェーンで存在し、ウォレットが保護する必要があるのは、現在それらの資産を保護している秘密鍵だけです。 キーを変更した場合は、翌日に以前の秘密キーをインターネットに安全に公開できます。 しかし、ZKの世界では、これはもはや真実ではなく、ウォレットは認証資格情報を保護するだけでなく、データも保持しています。
そのような世界の最初の兆候は、Zuzaluで使用されていたZK-SNARKベースのIDシステムである Zupassで見られました。 ユーザーは、システムへの認証に使用する秘密鍵を持っていて、それを使って「私がZuzaluの居住者であることを証明しなさい。どれかは明かさずに」といった基本的な証明をすることができます。 しかし、Zupassシステムには、他のアプリ、特にスタンプ(ZupassのPOAPバージョン)も構築され始めました。
私の多くのZupassスタンプの1つで、私がチームキャットの誇り高いメンバーであることを確認しています。
POAPよりも切手が優れている主な特徴は、切手がプライベートであることです:データをローカルに保持し、誰かにあなたに関する情報を持たせたい場合にのみ、スタンプ(または切手に対する計算)をZK証明します。 しかし、これは追加のリスクを生み出します:その情報を失うと、スタンプを失うことになります。
もちろん、データを保持するという問題は、単一の暗号化キーを保持するという問題に還元できます:何らかの第三者(またはチェーン)がデータの暗号化されたコピーを保持することができます。 これには、実行するアクションによって暗号化キーが変更されないため、暗号化キーを安全に保持しているシステムとの対話が不要になるという便利な利点があります。 しかし、それでも、暗号化キーを紛失すると、すべてが失われます。 反対に、誰かがあなたの暗号化キーを見ると、そのキーに暗号化されたすべてのものが表示されます。
Zupassの事実上の解決策は、人々が自分の鍵を複数のデバイスに保存することを奨励することでした(例: ラップトップと電話)、すべてのデバイスに同時にアクセスできなくなる可能性はごくわずかです。 さらに進んで、 シークレット共有 を使用してキーを保存し、複数のガーディアンに分割することもできます。
MPCによるこの種の社会的回復は、現在の保護者だけでなく、以前の保護者も共謀して資産を盗む可能性があり、許容できないほど高いリスクであるため、ウォレットにとって十分な解決策ではありません。 しかし、プライバシーの漏洩は一般的に資産の損失よりもリスクが低く、プライバシーの要求が高いユースケースを持つ人は、プライバシーを要求するアクションに関連するキーをバックアップしないことで、損失のリスクが高くなります。
複数の復旧経路を持つビザンチンシステムでユーザーを圧倒することを避けるために、ソーシャルリカバリをサポートするウォレットは、資産のリカバリと暗号化キーのリカバリの両方を管理する必要があるでしょう。
これらの変化に共通する点の1つは、オンチェーンで「あなた」を表すために使用する暗号識別子である「アドレス」の概念を根本的に変えなければならないということです。 「私との対話方法の指示」は、もはや単なるETHアドレスではありません。それらは、何らかの形で、複数のL2上の複数のアドレス、ステルスメタアドレス、暗号化キー、およびその他のデータの組み合わせである必要があります。
これを行う1つの方法は、ENSをあなたのアイデンティティにすることです:あなたのENSレコードは、これらの情報をすべて含めることができ、あなたが誰かにbob.eth(またはbob.ecc.eth または...)、より複雑なクロスドメインやプライバシー保護の方法を含め、支払い方法やあなたとのやり取りに関するすべてを調べて見ることができます。
しかし、このENS中心のアプローチには2つの弱点があります。
考えられる解決策の 1 つは、この記事で前述したアーキテクチャで説明したキーストア コントラクトにさらに多くのものを入れることです。 キーストアコントラクトには、ユーザーに関するさまざまな情報とユーザーとのやり取り方法がすべて含まれており(CCIPでは、その情報の一部がオフチェーンである可能性があります)、ユーザーはキーストアコントラクトをプライマリ識別子として使用します。 しかし、彼らが受け取る実際の資産は、あらゆる種類の異なる場所に保管されます。 キーストア コントラクトは名前に縛られず、事実に反する可能性が高くなります: 特定の固定の初期パラメータを持つキーストア コントラクトによってのみ初期化できることが証明可能なアドレスを生成できます。
別のカテゴリのソリューションは、 ビットコイン支払いプロトコルと同様の精神で、ユーザー向けアドレスの概念を完全に放棄することと関係があります。 1 つのアイデアは、送信者と受信者の間の直接的なコミュニケーション チャネルに大きく依存することです。たとえば、送信者は請求リンクを(明示的なURLまたはQRコードとして)送信し、受信者はそれを使用して支払いを好きなように受け入れることができます。
送信者と受信者のどちらが先に行動するかに関係なく、最新の支払い情報をリアルタイムで直接生成するウォレットへの依存度が高まると、摩擦を減らすことができます。 そうは言っても、永続的な識別子は (特に ENS では) 便利であり、送信者と受信者の間の直接通信の仮定は実際には非常にトリッキーなものであるため、さまざまな手法の組み合わせが見られる可能性があります。
これらすべての設計において、分散化され、ユーザーが理解しやすい状態を維持することが最も重要です。 ユーザーが現在の資産と、自分宛ての公開メッセージに関する最新のビューに簡単にアクセスできるようにする必要があります。 これらのビューは、プロプライエタリなソリューションではなく、オープンなツールに依存する必要があります。 決済インフラの複雑さが不透明な「抽象化の塔」に変わり、開発者が何が起こっているのかを理解し、それを新しいコンテキストに適応させるのに苦労するのを防ぐには、大変な努力が必要です。 課題はあるものの、一般ユーザーのスケーラビリティ、ウォレットのセキュリティ、プライバシーを実現することは、イーサリアムの将来にとって非常に重要です。 技術的な実現可能性だけでなく、一般ユーザーにとっての実際のアクセシビリティも重要です。 私たちはこの課題に立ち向かう必要があります。
Dan Finlay氏、Karl Floersch氏、David Hoffman氏、ScrollチームとSoulWalletチームには、フィードバック、レビュー、提案をしていただき、心より感謝いたします。
イーサリアムが若い実験的な技術から、平均的なユーザーにオープンでグローバルでパーミッションレスな体験を実際にもたらすことができる成熟した技術スタックに移行するにつれて、スタックはほぼ同時に3つの主要な技術的移行を受ける必要があります。
生態系の遷移トライアングル。 3つのうち3つしか選べません。
前者がいなければ、イーサリアムは各取引のコストが3.75ドル(別の強気相場がある場合は82.48ドル)の費用がかかるため失敗し、マスマーケットを狙うすべての製品は必然的にチェーンを忘れ、すべてに中央集権的な回避策を採用します。
2つ目がなければ、ユーザーは自分の資金(および非金融資産)を保管することに抵抗があるため、イーサリアムは失敗し、誰もが中央集権的な取引所に移行します。
3つ目がなければ、すべてのトランザクション(およびPOAPなど)を文字通り誰でも見ることができるように公開することは、多くのユーザーにとってプライバシーを犠牲にしすぎているため、イーサリアムは失敗し、誰もが少なくともある程度データを隠す中央集権的なソリューションに移行します。
これら 3 つの移行は、上記の理由から重要です。 しかし、それらを適切に解決するためには、激しい調整が必要なため、困難でもあります。 改善する必要があるのはプロトコルの機能だけではありません。場合によっては、イーサリアムとのやり取りの方法を根本的に変える必要があり、アプリケーションやウォレットの大幅な変更が必要になります。
L2 スケーリングの世界では、ユーザーは多くの L2 に存在することになります。 あなたはOptimismで活動するExampleDAOのメンバーですか? 次に、Optimismのアカウントがあります。 ZkSyncのステーブルコインシステムでCDPを保有していますか? 次に、ZkSyncにアカウントがあります。 カカロットにたまたま住んでいたアプリケーションを試してみましたか? その後、カカロットのアカウントを持っています! ユーザーが1つのアドレスしか持たない時代は終わります。
Brave Walletの見解によると、私は4か所にETHを持っています。 そして、はい、ArbitrumとArbitrumNovaは異なります。 心配しないでください、それは時間の経過とともにより混乱します!
スマートコントラクトウォレットは、L1とさまざまなL2で同じアドレスを持つことをはるかに困難にすることで、複雑さを増します。 現在、ほとんどのユーザーは外部所有のアカウントを使用しており、そのアドレスは文字通り署名の検証に使用される公開鍵のハッシュであるため、L1とL2の間では何も変わりません。 しかし、スマートコントラクトウォレットでは、1つのアドレスを保持することがより困難になります。 アドレスをネットワーク全体で同等にできるコードのハッシュにするために多くの作業が行われてきましたが、特に CREATE2 と ERC-2470シングルトンファクトリは、これを完璧に機能させることは困難です。 一部の L2 (例: 「タイプ4 ZK-EVM」)はEVMと完全に同等ではなく、多くの場合、代わりにSolidityまたは中間アセンブリを使用しており、ハッシュの等価性を妨げています。 また、ハッシュを同等にできる場合でも、キーの変更によってウォレットの所有権が変更される可能性があるため、 他の直感的でない結果が生じます。
プライバシー保護のため、各ユーザーはさらに多くのアドレスを持つ必要があり、扱うアドレスの種類が変わることさえあります。 ステルスアドレスの提案が広く使用されるようになると、各ユーザーが少数のアドレスしか持たないか、L2ごとに1つのアドレスを持つのではなく、ユーザーはトランザクションごとに1つのアドレスを持つ可能性があります。Tornado Cashのような既存のものであっても、他のプライバシースキームは、資産の保管方法を異なる方法で変更します:多くのユーザーの資金は同じスマートコントラクトに(したがって同じアドレスに)保管されます。 特定のユーザーに資金を送金するには、ユーザーはプライバシースキーム独自の内部アドレス指定システムに依存する必要があります。
これまで見てきたように、3つのトランジションはそれぞれ異なる方法で「1人のユーザー~=1つのアドレス」のメンタルモデルを弱め、これらの効果の一部はトランジションの実行の複雑さにフィードバックされます。 特に複雑な点は、次の 2 つです。
スクロールにコインを持っていて、コーヒー代を払いたいです(「私」が文字通りこの記事の筆者である私である場合、「コーヒー」はもちろん「緑茶」の換喩です)。 あなたは私にコーヒーを売っていますが、太鼓でコインを受け取るようにしか設定されていません。 ワットか?
基本的に2つの解決策があります。
もちろん、これらのソリューションを組み合わせることもできます:受信者は受け入れる意思のあるL2のリストを提供し、送信者のウォレットは、運が良ければ直接送信するか、そうでなければクロスL2ブリッジングパスのいずれかを含む支払いを計算します。
しかし、これは 3 つの移行がもたらす重要な課題の一例にすぎません: 誰かに支払うような単純なアクションには、20 バイトのアドレスだけでなく、はるかに多くの情報が必要になります。
スマートコントラクトウォレットへの移行は、幸いなことにアドレッシングシステムにとって大きな負担にはなりませんが、アプリケーションスタックの他の部分には、解決すべき技術的な問題がまだいくつか残っています。 ウォレットは、トランザクションとともに21000ガスしか送信しないように更新する必要があり、ウォレットの支払い受取側がEOAからのETH送金だけでなく、スマートコントラクトコードによって送信されたETHも追跡するようにすることがさらに重要になります。 アドレスの所有権が不変であるという前提に依存しているアプリ(例: ロイヤリティを強制するためにスマートコントラクトを禁止するNFT)は、目標を達成するための他の方法を見つける必要があります。 スマートコントラクトウォレットは、特に、ETH以外のERC20トークンのみを受け取った場合、 ERC-4337ペイマスター を使用してそのトークンでガス代を支払うことができます。
一方、プライバシーは、私たちがまだ実際に対処していない大きな課題を再び提起しています。 オリジナルのTornado Cashは、内部送金をサポートしていなかったため、これらの問題は発生しませんでした:ユーザーはシステムに入金して、そこから引き出すことしかできませんでした。 ただし、内部転送を行うことができるようになると、ユーザーはプライバシー システムの内部アドレス指定スキームを使用する必要があります。 実際には、ユーザーの「支払い情報」には、(i) ある種の「支出パブキー」、つまり受信者が使用に使用できる秘密へのコミットメント、および (ii) 受信者が支払いを発見できるように、受信者のみが復号化できる暗号化された情報を送信者が送信する方法の両方が含まれている必要があります。
ステルスアドレスプロトコルは 、メタアドレスの概念に依存しており、メタアドレスの一部は送信者の支出キーのブラインドバージョンであり、別の部分は送信者の暗号化キーです(ただし、最小限の実装では、これら2つのキーを同じに設定できます)。
暗号化とZK-SNARKに基づく抽象的なステルスアドレス方式の概略図。
ここでの重要な教訓は、プライバシーに配慮したエコシステムでは、ユーザーは支出用公開鍵と暗号化公開鍵の両方を持ち、ユーザーの「支払い情報」には両方の鍵を含める必要があるということです。 また、支払い以外にも、この方向に拡大する正当な理由があります。 たとえば、イーサリアムベースの暗号化された電子メールが必要な場合、ユーザーは何らかの暗号化キーを公開する必要があります。 「EOAの世界」では、このためにアカウントキーを再利用することができますが、安全なスマートコントラクトウォレットの世界では、おそらくこのためのより明示的な機能を持つ必要があります。 これは、イーサリアムベースのIDを、イーサリアム以外の分散型プライバシーエコシステム、特にPGPキーとの互換性を高めるのにも役立ちます。
ユーザーごとに多数のアドレスが存在する世界でキーの変更とソーシャル回復を実装する既定の方法は、ユーザーが各アドレスで個別に回復手順を実行することです。 これはワンクリックで行うことができます:ウォレットには、ユーザーのすべてのアドレスで同時に回復手順を実行するソフトウェアを含めることができます。 ただし、このようなUXの簡素化を行っても、ナイーブなマルチアドレスリカバリには3つの問題があります。
これらの問題を解決するのは困難です。 幸いなことに、それなりにうまく機能する、やや洗練されたソリューション、つまり検証ロジックと資産保有を分離するアーキテクチャがあります。
各ユーザーには、1 つの場所 (メインネットまたは特定の L2) に存在するキーストア コントラクトがあります。 その後、ユーザーは異なる L2 にアドレスを持ち、それらの各アドレスの検証ロジックはキーストア コントラクトへのポインタになります。 これらのアドレスから支出するには、現在(またはより現実的にはごく最近の)支出公開鍵を示す証明をキーストアコントラクトに入力する必要があります。
証明はいくつかの方法で実装できます。
トランザクションごとに 1 つのプルーフを作成するのを避けたい場合は、回復のために L2 間のプルーフのみを必要とする、より軽いスキームを実装できます。 アカウントからの支出は、対応する公開鍵がそのアカウント内に格納されている支出キーに依存しますが、復旧には、キーストア内の現在のspending_pubkeyをコピーするトランザクションが必要です。 反事実的アドレスの資金は、古いキーがそうでなくても安全です:反事実的アドレスを「アクティブ化」して有効な契約に変えるには、現在のspending_pubkeyをコピーするためのクロスL2プルーフを作成する必要があります。 Safeフォーラムのこのスレッドでは、 同様のアーキテクチャがどのように機能するかを説明しています。
このようなスキームにプライバシーを追加するには、ポインタを暗号化するだけで、ZK-SNARK内ですべての証明を行います。
より多くの作業(例: <a href="https://notes.ethereum.org/@vbuterin/non_index_revealing_proof">this を使用します。 出発点として)、ZK-SNARKの複雑さのほとんどを取り除き、より必要最低限のKZGベースのスキームを作成することもできます。
これらのスキームは複雑になる可能性があります。 プラス面としては、それらの間に多くの潜在的な相乗効果があります。 たとえば、「キーストアコントラクト」の概念は、前節で述べた「アドレス」の課題に対する解決策にもなり得ます:ユーザーが鍵を更新するたびに変更されない永続的なアドレスをユーザーに持たせたい場合は、ステルスメタアドレス、暗号化鍵、およびその他の情報をキーストアコントラクトに入れ、キーストアコントラクトのアドレスをユーザーの「アドレス」として使用できます。
ENS の使用にはコストがかかります。 2023年6月の現在、状況はそれほど悪くなく、取引手数料は高額ですが、それでもENSドメインの手数料に匹敵します。 zuzalu.ethの登録には 約27ドルかかり、そのうち11ドルは取引手数料でした。 しかし、別の強気相場があれば、手数料は急騰します。 ETHの価格が上昇しなくても、ガス料金が200gweiに戻ると、ドメイン登録のTX料金が104ドルに上昇します。 したがって、特にユーザーがほぼ無料の登録を要求する分散型ソーシャルメディアのようなユースケースで、人々に実際にENSを使用してもらいたい場合(これらのプラットフォームはユーザーにサブドメインを提供しているため、ENSドメイン料金は問題になりません)、L2で動作するENSが必要です。
幸いなことに、ENS チームはステップアップし、L2 での ENS が実際に行われています。 ERC-3668 (別名「CCIP標準」) は、 ENSIP-10 とともに、任意の L2 上の ENS サブドメインを自動的に検証可能にする方法を提供します。 CCIP標準では、L2上のデータの証明を検証する方法を記述したスマートコントラクトと、ドメイン(例: Optinames は ecc.eth を使用します) は、そのようなコントラクトの管理下に置くことができます。 CCIP コントラクトが L1 の ecc.eth を制御すると、一部の subdomain.ecc.eth にアクセスすると、自動的に証明の検索と検証が必要になります (例: マークルブランチ)は、その特定のサブドメインを実際に保存するL2の状態です。
実際に証明を取得するには、コントラクトに保存されているURLのリストにアクセスする必要がありますが、これは確かに中央集権化のように感じられますが、実際にはそうではないと主張します:これは 1-of-N信頼モデル です(無効な証明はCCIPコントラクトのコールバック関数の検証ロジックによって捕捉され、URLの1つでも有効な証明が返される限り、 あなたは良いです)。 URL のリストには、数十の URL が含まれる場合があります。
ENS CCIPの取り組みはサクセスストーリーであり、私たちが必要とする抜本的な改革が実際に可能であることの表れと見なされるべきです。 しかし、アプリケーション層の改革は、まだまだたくさんあります。 いくつか例を挙げます。
今日、ウォレットは資産を保護するビジネスを行っています。 すべてがオンチェーンで存在し、ウォレットが保護する必要があるのは、現在それらの資産を保護している秘密鍵だけです。 キーを変更した場合は、翌日に以前の秘密キーをインターネットに安全に公開できます。 しかし、ZKの世界では、これはもはや真実ではなく、ウォレットは認証資格情報を保護するだけでなく、データも保持しています。
そのような世界の最初の兆候は、Zuzaluで使用されていたZK-SNARKベースのIDシステムである Zupassで見られました。 ユーザーは、システムへの認証に使用する秘密鍵を持っていて、それを使って「私がZuzaluの居住者であることを証明しなさい。どれかは明かさずに」といった基本的な証明をすることができます。 しかし、Zupassシステムには、他のアプリ、特にスタンプ(ZupassのPOAPバージョン)も構築され始めました。
私の多くのZupassスタンプの1つで、私がチームキャットの誇り高いメンバーであることを確認しています。
POAPよりも切手が優れている主な特徴は、切手がプライベートであることです:データをローカルに保持し、誰かにあなたに関する情報を持たせたい場合にのみ、スタンプ(または切手に対する計算)をZK証明します。 しかし、これは追加のリスクを生み出します:その情報を失うと、スタンプを失うことになります。
もちろん、データを保持するという問題は、単一の暗号化キーを保持するという問題に還元できます:何らかの第三者(またはチェーン)がデータの暗号化されたコピーを保持することができます。 これには、実行するアクションによって暗号化キーが変更されないため、暗号化キーを安全に保持しているシステムとの対話が不要になるという便利な利点があります。 しかし、それでも、暗号化キーを紛失すると、すべてが失われます。 反対に、誰かがあなたの暗号化キーを見ると、そのキーに暗号化されたすべてのものが表示されます。
Zupassの事実上の解決策は、人々が自分の鍵を複数のデバイスに保存することを奨励することでした(例: ラップトップと電話)、すべてのデバイスに同時にアクセスできなくなる可能性はごくわずかです。 さらに進んで、 シークレット共有 を使用してキーを保存し、複数のガーディアンに分割することもできます。
MPCによるこの種の社会的回復は、現在の保護者だけでなく、以前の保護者も共謀して資産を盗む可能性があり、許容できないほど高いリスクであるため、ウォレットにとって十分な解決策ではありません。 しかし、プライバシーの漏洩は一般的に資産の損失よりもリスクが低く、プライバシーの要求が高いユースケースを持つ人は、プライバシーを要求するアクションに関連するキーをバックアップしないことで、損失のリスクが高くなります。
複数の復旧経路を持つビザンチンシステムでユーザーを圧倒することを避けるために、ソーシャルリカバリをサポートするウォレットは、資産のリカバリと暗号化キーのリカバリの両方を管理する必要があるでしょう。
これらの変化に共通する点の1つは、オンチェーンで「あなた」を表すために使用する暗号識別子である「アドレス」の概念を根本的に変えなければならないということです。 「私との対話方法の指示」は、もはや単なるETHアドレスではありません。それらは、何らかの形で、複数のL2上の複数のアドレス、ステルスメタアドレス、暗号化キー、およびその他のデータの組み合わせである必要があります。
これを行う1つの方法は、ENSをあなたのアイデンティティにすることです:あなたのENSレコードは、これらの情報をすべて含めることができ、あなたが誰かにbob.eth(またはbob.ecc.eth または...)、より複雑なクロスドメインやプライバシー保護の方法を含め、支払い方法やあなたとのやり取りに関するすべてを調べて見ることができます。
しかし、このENS中心のアプローチには2つの弱点があります。
考えられる解決策の 1 つは、この記事で前述したアーキテクチャで説明したキーストア コントラクトにさらに多くのものを入れることです。 キーストアコントラクトには、ユーザーに関するさまざまな情報とユーザーとのやり取り方法がすべて含まれており(CCIPでは、その情報の一部がオフチェーンである可能性があります)、ユーザーはキーストアコントラクトをプライマリ識別子として使用します。 しかし、彼らが受け取る実際の資産は、あらゆる種類の異なる場所に保管されます。 キーストア コントラクトは名前に縛られず、事実に反する可能性が高くなります: 特定の固定の初期パラメータを持つキーストア コントラクトによってのみ初期化できることが証明可能なアドレスを生成できます。
別のカテゴリのソリューションは、 ビットコイン支払いプロトコルと同様の精神で、ユーザー向けアドレスの概念を完全に放棄することと関係があります。 1 つのアイデアは、送信者と受信者の間の直接的なコミュニケーション チャネルに大きく依存することです。たとえば、送信者は請求リンクを(明示的なURLまたはQRコードとして)送信し、受信者はそれを使用して支払いを好きなように受け入れることができます。
送信者と受信者のどちらが先に行動するかに関係なく、最新の支払い情報をリアルタイムで直接生成するウォレットへの依存度が高まると、摩擦を減らすことができます。 そうは言っても、永続的な識別子は (特に ENS では) 便利であり、送信者と受信者の間の直接通信の仮定は実際には非常にトリッキーなものであるため、さまざまな手法の組み合わせが見られる可能性があります。
これらすべての設計において、分散化され、ユーザーが理解しやすい状態を維持することが最も重要です。 ユーザーが現在の資産と、自分宛ての公開メッセージに関する最新のビューに簡単にアクセスできるようにする必要があります。 これらのビューは、プロプライエタリなソリューションではなく、オープンなツールに依存する必要があります。 決済インフラの複雑さが不透明な「抽象化の塔」に変わり、開発者が何が起こっているのかを理解し、それを新しいコンテキストに適応させるのに苦労するのを防ぐには、大変な努力が必要です。 課題はあるものの、一般ユーザーのスケーラビリティ、ウォレットのセキュリティ、プライバシーを実現することは、イーサリアムの将来にとって非常に重要です。 技術的な実現可能性だけでなく、一般ユーザーにとっての実際のアクセシビリティも重要です。 私たちはこの課題に立ち向かう必要があります。