Zether on Quorum
JPモルガンの以前までの取り組み
ZSL (zero-knowledge security layer)
zcashとパートナー組んで、zcash protocolっぽいのをquorum上に実装
この前発表されたAnonymous Zether on Quoprum
概要
Benedikt Bunz et.al によってpublishされたZether protocolをQuorum上に実装。
ZSC(Zether Smart Contract)のSolidity実装
Mint, Burn, Transfer + Sigma bulletsの検証ロジック
(コアなSigma bulletsの証明部分はPaperベンチマークのコードをそのまま利用)
Zether
アカウントベースの秘匿化
送金額や残高は暗号化して、暗号化したままオンチェーン上で足し算・引き算
moonty_sal.icon < Lifted El Gamalじゃなくて別のやつなんですか? -> A. Lifted El Gamalだそう
ちゃんと暗号化したか?自分の残高以上の送金額を送ろうとしていないか?などをゼロ知識証明で送金額や残高を明らかにせずに証明。
アドレスも一定レベル秘匿化
https://gyazo.com/ec6142ca1cb7ff29d793a86f43fdabc1
ゼロ知識証明はSigma bullet。
Bullet proofは、MoneroやGrinなどで使われているtrusted setupが必要ない種類のゼロ知識証明
Benedikt Bunzが2017年に提案。Moneroの証明サイズが従来と比べて97%改善。
Bullet proofは範囲証明(と一応汎用的な計算)に適しているのに対し、Sigma bulletsはZetherで使われている準同型暗号のゼロ知識証明の計算に適している。
つまり、アカウントベースで、送金額・残高を暗号化し、ゼロ知識証明を使って検証してるやつ。
Zether on Quorum
ZSC(Zether Smart Contract) 上での秘匿・匿名送金。
できること / Pros
送金額・残高の秘匿化
暗号アルゴリズム自体が崩されない限り秘匿
ZSCにトークンをデポジットし、ZSC内のアカウント同士での秘匿送金
一定レベルのアドレス秘匿化
trusted setupは必要ない
できないこと / Cons
完全な(?) アドレスの秘匿化
ZSC上での送金以外の処理
Auditabilityはない
mosa_siru.icon < zerochainでは可
Gas feeの支払いからアドレス分かっちゃう問題はQuorumの場合はFeeゼロにしておけばOK?
検証コストはethereumだと無理ゲーなくらいでかい
Confidential paymentでギリギリブロックに収まるくらい。
スキーム
1. コントラクトデプロイ
特定のERC20コントラクトと対応するZSCを用意し、そのERC20がZSC上で秘匿送金できるように設計。
mosa_siru.icon < assemblyの嵐
akinama.icon < ガスコスト減らすため?
mosa_siru.icon < yeah
shuntak.icon < バイトごとに処理してスロット効率利用してガスコスト減らす(Solidityそのままだとできない)
2. Register
ZSCに登録。
自身のQuorumアドレスとZSC上のZetherアドレス(BN128という楕円曲線上の公開鍵のy座標)を結びつける。
mosa_siru.icon < この紐づけは皆にみえる
ZSCからトークンを引き出す時は、Zetherアドレスに対応するQuorumアドレスに出金。
code:register.js
var alice = new Client(deployedZSC, home, web3)
alice.account.initialize()
Promise { <pending> }
Registration submitted (txHash = "0x3420c7ec482391ddaf349742bacc30ac26a5eba92dd1828f95499c5909c572b3").
Registration successful.
3. Fund
ZSC(Zether Smart Contract)にデポジット
ZSCにトークンをデポジットすると、秘匿トークンをmint。
デポジット時は秘匿じゃない。
code:fund.js
alice.deposit(100)
Initiating deposit.
Promise { <pending> }
Deposit submitted (txHash = "0xa6e4c2d415dda9402c6b20a6b1f374939f847c00d7c0f206200142597ff5be7e").
Deposit of 100 was successful. Balance now 100.
4. Transfer
ZSCに登録されているアカウント同士で秘匿送金ができる。
匿名送金のためには、Fake account(decoy)を加える。
code:friend.js
'Friend added.'
mosa_siru.icon < この2つでzether上のBob addressに相当(64bytes)
code:transfer.js
alice.transfer("Bob", 20)
Initiating transfer.
Promise { <pending> }
Transfer submitted (txHash = "0x4c0631483e6ea89d2068c90d5a2f9fa42ad12a102650ff80b887542e18e1d988").
Transfer of 20 was successful. Balance now 70.
code:transfer.js
Initiating transfer.
Promise { <pending> }
Transfer submitted (txHash = "0x9b3f51f3511c6797789862ce745a81d5bdfb00304831a8f25cc8554ea7597860").
Transfer of 10 was successful. Balance now 10.
5. Burn
ZSCからZetherアドレスに保持しているコイン量をもとに、トークンをwithdraw。
引き出し時は秘匿じゃない。
code:burn.js
alice.withdraw(10)
Initiating withdrawal.
Promise { <pending> }
Withdrawal submitted (txHash = "0xd7cd5de1680594da89823a18c0b74716b6953e23fe60056cc074df75e94c92c5").
Withdrawal of 10 was successful. Balance now 90.
ユーザーから見たZerochainとの違い
スマートコントラクト上かどうか
zk-SNARKs or Sigma bullets
Auditabilityあるかないか
秘匿送金におけるAnonimity性質
トランザクションやアドレスを暗号化することがアドレスの秘匿化にはならない。
トランザクショングラフを秘匿化することがアドレス秘匿化。
akinama.icon < やっと理解、UTXOのときは送信元・送信先のアドレス秘匿化されてればよい?
mosa_siru.icon < UTXOのoutputと次のinputが紐付かないのがアドレス秘匿化
Anonimity Setが増えれば増えるほど匿名性は増す。
Anonimity set: この10人の中にSenderとRecipientがいる。他8人はFake account(Decoy)。第三者はどれが本物のSenderとRecipientか分からない。
akinama.icon < デコイ数が10は計算コストと秘匿性のバランス問題?
Bitcoinなどの通常の送金はAnonimity setは存在しない。
SenderとRecipientは1対1で一意に決まる。
decoyベースの場合だと、N対1のTx送信。
例えば、MoneroのAnonimity setは10で固定。
Mixing, Minblewimble, Aztec, Zether
基本的に、decoyを増やせば増やすほどコストも増える
mosa_siru.icon < 送金額秘匿のみならPartial Burnに相当
https://gyazo.com/2d8b8e63e51349ae7ce1a707420db440
mosa_siru.icon < 今gas limit は8Mなので、Partial Burnでギリギリ
sigma bulletではなくzkSNARKsなら1-2桁gasさがる。コンソーシアムなら trusted setupはあって良いのでは説
Moneroで1年間、10kドルで50%のTxがトレース可能な攻撃
攻撃者がたくさんの自身の少額UTXOが作り、UTXOをランダムピックアップで攻撃者のUTXOがピックアップされる確率を増やし、Decoyをなくす攻撃
逆に、コンソーシアムとかで書き込み権限アカウントがごく少数の場合はdecoyでアカウント全体になったりする
mosa_siru.icon < ので良い (下図において3つ目の5/5の状態)
Zcashの場合だと、Anonimity setはz-address accounts全体。
プライバシー的には一番優れてると言ってOK
問題点としてTrusted setupや強い安全性仮定がよくあげられるが、UX的に一番の問題点は現状Full nodeウォレットが必要なこと。
https://gyazo.com/8fdfbf13789c65bbd5db654cbcd067c1
https://gyazo.com/119c563315f41d2b478aaa547c61837d
Tomato.icon<ドラマ「シリコンバレー」のアーリックにめっちゃ似てる
akinama.icon < ゼロチェーンのほうがよい