イーサリアムのトランザクションを機密化:Aztecのプライバシー構造
著:Jon Wu
翻訳:Takeshi@Think Globally, Act Locally
Aztecはイーサリアム上のプライバシーファーストのゼロ知識ロールアップとして、完全なプライバシー保護の実現のためにゼロから構築された唯一のL2です。
プライベートトランザクションのパラダイムを変える性質と、ネットワークの構造に直接プライバシーを組み込むことの重要性を理解するには、まず「イーサリアムがなぜプライベートでないのか」について把握する必要があります。
イーサリアム:パブリックブロックチェーン
公開台帳やパブリックチェーンという言葉を聞いたことがあるかもしれませんが、これはアカウントと残高の2つの部分から構成されています。
イーサリアムで最も基本的な取引は、あるアカウント(アドレス)から別のアカウントにETHを送ることです。ネットワークがこれを追跡する方法は、一方のアカウントの残高を増やし、他方のアカウントの残高を減らすことです。
例えば、 snoopdogg.eth が cozomomedici.eth にトランザクションを送りたがっていると仮定しましょう。
Snoopは100ETHを持っていたとして、彼のアカウントから20ETHが引き落とされます。Cozomoは0ETHである場合、彼のアカウントに20ETHが入金されます。Snoopの最終的なアカウント残高は80ETHとなり、Cozomoの方は20ETHとなります。これで送金完了です。
各アカウントのイン/アウトは誰でも見られるようにetherscan.io上で公開で追跡することができます。以下は、twinkienft.ethというENSの最近の取引履歴です。
etherscan.ioに行けば、ブロックチェーンに書き込まれる全てのトランザクションを追跡・確認することができます。
ここで明確な問題に気づくかもしれません。全てのアカウントの取引履歴を見れるだけでなく、資産や取引相手も全て見ることができてしまうのです。これこそが公開によって監査や検証を可能にするパブリックブロックチェーンの力であり、プライバシーが存在しないという問題を抱える所以なのです。
ChainalysisやNansenなどの企業は、高度なフォレンジック分析を行って、様々なウォレットを関連付け、活動を監視し、誰が何を所有しているかを確率的に推測しています。
もし、あなたがパンを買うためにクレジットカードを通すたびに、世界中の人にあなたの取引明細書が見られていたらと想像してください。
これが今日のイーサリアムの現状なのです。
問題の解答:アカウントの暗号化
「なるほど」と思ったでしょうか?アカウント、残高、所有者を暗号化すれば良いのです。馬鹿みたいに単純な答えです。
では、暗号化されたアカウントがどのように機能するか、実際に見てみましょう。
先ほどの取引事例を思い出してください。暗号化されたアカウントにおける取引では、次のようになります:
このようになり、問題は解決します。
では、ネットワークはどのようにアカウントをチェックし、二重支出や不正のないようにするのでしょうか?これを解決するのは、実はかなり難しいのです。
そこで、再びSnoopはCozomoを事例にしてみましょう。もし彼らが取引をする場合、ネットワークは彼らの取引をチェックできないので、対話する必要があります。
Snoopがやり取りを開始します:
- SnoopがCozomoの暗号化されたアカウントの状態を要求する
- Cozomoは暗号化された状態をSnoopに送信する
- SnoopはCozomoの状態を解読し、取引前の残高を確認する
- SnoopはCozomoに暗号化された支払いを送信する
- Cozomoは更新された暗号化された状態をSnoopに送信する
- SnoopはCozomoの新しい状態を解読して、取引後の残高を確認する(そしてCozomoが約束のお金を手に入れたことを確認する)
この手の込んだやり取りには重大な欠点があります。高価で、時間がかかり、一度に一人の人間としか対話できません。
最悪な部分は、両者の対話が終わった時に、どちらの当事者も世界の他の人たちに何も証明する術がないということです。
では今度は、この帰属構造を反転させて考えてみましょう。
イーサリアムのデフォルトはアカウントモデルで、アカウントには残高があります。つまり、アカウントを調べると、残高が表示されます。
その代替として、ノートに記述されたある金額のお金に所有者が存在するという構造にしてみたらどうでしょう?お金を調べれば、それが誰のものであるかがわかります。
これがビットコインの仕組みで、UTXO(unspent transaction output)と呼ばれるものです。しかし、用語は忘れてください。UTXOはお金だと考えてください。
なぜ、私たちが慣れ親しんでいるお金が本質的に安全でプライベートなものなのか、アカウントベースのシステムよりも安全でプライベートなものなのかについて少し考えてみましょう。
お金のやり取りをする当事者だけが、お金の所有権が変わったことを知ることができるので、安全なのです。このやり取りは他の誰にも知られることはないのです。
お金の取引は物(紙幣)の所有権の変更と考えることができ、会計取引上は2つのアカウントの状態の変更と考えることができます。
では、暗号化されたノートの所有権変更はどのように見えるのでしょうか?
Aztecのトランザクションが処理されるとき、アカウントの残高の更新(残高の増加や減少)を行うのではなく、ネットワークはノートの所有権の再割り当てを実行します。
なぜこれが便利な仕組みなのでしょうか?
なぜなら、お金のやり取りに必要な情報は、そのお金の価値と所有者の2点だけだからです。持ち主が変わったら、前の持ち主の名前を書き写して、新しい持ち主の名前を書けばいいのです。これで完成です。
Aztecでの送金プロセス
では、単純なノートの取引では、いったい何が起こるのでしょうか?
例えば、Snoopが50ETHのノートを2枚合計100ETH持っていて、Cozomoが0枚のノートを持っているとします。
Snoopの2つの50ETHのノートは破棄されて、2つの新しいノートが作成される必要があります。Snoopに残る80ETHを記したノートと、新しい所有者のCozomoに行く20ETHを記したノートです。
この場合、ノートの価値を明らかにしながら、プライバシーを守ることができる仕組みが必要になります。
つまり、その内容を公開しない仕組みです。もちろん、SnoopとCozomoは、現金のやりとりのように、その価値を知っていますが、それを世間に明らかにする必要はないのです。
お互いのプライバシーを守るために、SnoopはCozomoだけが自分の秘密鍵で開けられる錠を付けて取引を公開するのです。例えるなら、ノートを小さな鍵付きの箱に入れるようなイメージです。
新しい所有権が記されたノートは、 過去に作成された全てのノートを保持するデータ構造(Merkle Treeハッシュ)に戻されます。
最適な家計簿
Snoopは2つのノートを破棄して、2つの新しいノートを作成し、そのうちの1つをCozomoに送ったことが分かっています。この2人が結託して、例えば二重支払いを防ぐにはどうしたらいいのでしょうか?Snoopが合計100ETHの価値のある2つのノートを破棄して、合計200ETHの価値のある2つの新しいノートを作成したらどうでしょうか?
2つのステップを思い出しましょう:
- Snoopは2つの50ETHノートを破棄して、20ETHのノートと80ETHのノートを作成する
- Snoopは20ETHのノートをCozomoに送る
このステップ1で不正が起こらないようにSnoopがすべきことは、彼が作成する2つのノートが、彼が破棄しようとする2つのノートと同等の価値であることをシステム(Aztec)に証明することです。
これはjoin-splitトランザクションと呼ばれるもので、次のような単純な等価性に合致します:A + B = C + D
ここからが肝心な部分です。
出力(C + D)が入力(A + B、または100 ETH)と等価であることを証明するために、Snoopはブラウザでゼロ知識証明(ZKP)をローカルに生成します。ZKPは、個々の値を一切明かすことなく、A + B = C + Dの等価性を証明することができる仕組みを持っています。
スマートコントラクトは、2つの入力ノートを破棄し、2つの出力ノートを生成し、新しい出力ノートをノートレジストリに暗号化されたコミットメントとして記録します。
所有権の証明
イーサリアムとAztecで、ノートの所有権がどのように証明されるかを把握しておく必要があります。イーサリアムは、どのようにアドレスへのアクセス権を証明するのでしょうか?
自分のウォレットを使ってメッセージに署名します。
Aztecでは、ノートへのアクセス権をどのように証明するのでしょうか?
ゼロ知識証明を活用した暗号化署名を使います。
「Aztecのどこかに」「ある価値を持つお金が存在し」「それを私が所有している」という証明です
Aztecのシステムの状態はどのように保存されているのでしょうか?
2つのマークルツリーによってです:
- ノートツリー:過去に作成された全てのノートを含む
- 無効化ツリー(nullifier tree):過去に破棄された全てのノートを含む
あるノートを所有していると言うことは、そのノートがノートツリーに存在し、対応する無効化ノートがヌリファイアツリーに存在しないことをAztecに示すことになります。
極めて社交的ノーマルなノートツリーと、陰気な無効化ツリー。もし無効化ツリーが話せたら、きっと「お前なんか大嫌いだ!」とか言うんのでしょう。15歳の思春期の子供のようなイメージです。
ノートを「破棄」するというのは、ノートツリーからノートを削除するのではなく、無効化ツリーに追加することを意味します。
自分が所有していることを証明したノートを送るために、新たなマークルツリー(とマークルルート)が作成されます。ノートツリーと無効化ツリーの両方のマークルルートが新しい値に移動(システムの状態が更新)したら、このルートはイーサリアムのメインチェーン上で公開(決済)され、取引が正式に記録されたとみなされます。
まとめ
証明とプライバシーの両立がなぜ難しいのか、について理解するための基本部分を把握できたと思います。私たちは、ユーザーデータを侵害・公開することなく、取引が正当で適切に実行されたことを確認する必要があります。
このような制約から解放するためには、プライバシー構造を一から構築する必要があるのです。Aztecは、この構築に取り組む唯一のL2です。プライバシーはそのコアアーキテクチャによって保護され、ゼロ知識の魔法によって促進されています。お読みいただきありがとうございました。
Aztecコミュニティに参加しませんか
Aztecでは、常に才能あるエンジニアを募集しています。もし、イーサリアムにスケーラブルなプライバシーをもたらすというミッションへの参加に興味があれば hello@aztecprotocol.com までご連絡ください。