夏の終わりのプライバシー祭り
ブロックチェーンレイヤーのプライバシーとは
主な保護手法
Monero
zcash
zerochain
ベンチマーク
今後
tomoaki.icon<タイトルがエモい
ブロックチェーンレイヤーのプライバシー
秘匿性 (Confidentiality):
送金額・残高の秘匿化
SSL/TLS的な
比較的簡単 (暗号化などしてゼロ知識証明で送金額の範囲証明などを与えるだけ)
匿名性 (Anonymity, Obfucation)
トランザクションのUnlinkability
Tor的な
比較的むずい(トランザクションのlinkabilityを断ち切らないといけないので暗号化うんぬんではない)
address -> real-world identityの相関
一度相関できたらそのアドレスの過去と未来全てが繋がる
取引所などアドレス<->個人情報を紐づけているデータの流出
リスクスコアの算出
address <-> addressの相関
毎回違うアドレス使うようにすれば? -> これまで存在しなかったアドレスに対して送金
HDウォレットにより管理可能な新しいアドレスたちが自動的に生成されている(少なくともBitcoin walletでは)
そもそもアカウントベースだとgas fee払えない
Ethereum的なアカウントベースだと残高の増減により明らか。
UTXOだとある程度効果的
Tx linkabilityは断ち切れてないので複数inputsにおける相関は確率的に可能
https://gyazo.com/773d2216dc1596664638ae12659f49ba
多くのケースは2-inputs-2outputs.
送金額に十分な2つの自分のUTXOがInputで、宛先と自身のお釣り先がOutput
送金者がAだとすると、amountが少ないDがお釣りUTXOである確率が高い
(Dが宛先だとすると、2-inputsにする必要ないので)
Bがbrand newなアドレスだったとしても、保有者がAと同じであることがこのトランザクションで分かる。
なので、A=B=Dである確率が高い、みたいな
技術たち
秘密計算
ノードが暗号化したまま計算
sMPC (SMC)
準同型暗号
https://gyazo.com/bf1cf002667e5c60f5f966abd91a8151
ゼロ知識証明
Hash(a) = A
aを隠したままAが正しく計算されたハッシュ値であることを証明
加えてaが1~100までの数字であるとかの制限も加えられる
オンチェーンでの検証コストがZK内計算の複雑性によらず一定。(fully-succinctness)
Monero
https://gyazo.com/95bb5f0792489c2d1c076c389a7bb876
リング署名:どこから来たのかわからない〜
tomato.icon<どのUTXOを使っているのかわからないようにする技術!!
tomoaki.icon<リング自体で1つの鍵
↑鍵じゃなく署名かな?
shuntak.icon < リングを大きくすると署名検証の時間と署名のサイズが大きくなる
moneroは11固定(ユーザが勝手に変えられない)
mosa_siru.icon < 送信先アドレスは受け手の公開鍵をもとに送り手がワンタイムでつくれて、受け手は対応する秘密鍵を生成できるよ
mosa_siru.icon < light clientどうしてるんだろ(すべてのTxに対し復号を試みないと、自分向けのアドレスかわからない気がする)
Range proof (Bullet proofs):いくら送ったのかわからない〜
全ての送金時はone-time key pairを使うので、鍵ペアから一意に決まるKey Imageを二重支払い防止に利用
Anonymity sizeが11。
Anonymityを破る攻撃手法がいくつか
一方zcashはアカウント数と一致。
zcash
https://gyazo.com/215985b07a19730a99b50e2100b83aa0
送金時に消費するNoteに対応するnullifierがnullfiierセットに追加され、OutputとしてNote commitmentsが追加
Commitmentsの保有証明などはトランザクション内の暗号化されたパラメタ達を使って可能
送金者は受け手が復号可能な暗号鍵を使って暗号化(ここのvalidationとかもzkで)
エンドユーザーもフルノード必要
自身の復号鍵を使って全てのトランザクションを復号化できるかトライ
トランザクション送信時に消費するNoteがマークルツリーに含まれていることをゼロ知識証明するためにMerkle pathが必要 -> 最新のnote treeが必要
Auditorもフルノード必要
残高を使ったバリデーションはできない(utxo)
発行量の4%以上は保持できない、とか
最近のmixing on ethereum系もこんな感じのアプローチ
aztecもこんな感じのアプローチ - anonymityなくす + 独自のuniversalなzkp
Zerochain
https://gyazo.com/34ee8eb769dbd45a887a44aa62e43d41
pros
monero的なremote nodeを用意することでユーザーはフルノードを運営しなくて基本OK
Auditorはなんもいらない(最新の残高を取得するだけであれば)
復号鍵に対応するアドレスの暗号化残高を取得してそれを復号するだけ
残高-basedなバリデーションとかも可能なのでcapped-tokenとかも可能
cons
non-full-anonymity
ブロックチェーンの調子がデフォで悪い
moonty_sal.icon < おま
ベンチーマーク
https://gyazo.com/75cdfda089eb073b3f96f509e5409bf6
mosa_siru.icon < zcashのnote commitments の tree は高さ固定(32bit)
zether-based consortium&public chain
consortium: non-feeであることを想定して改善
public: パフォーマンス最適化、エポックパラメタ最適化によりTx失敗確率1%くらいまでは下げられそうだが..
accumulator-based consortium&public chain
value accountabilityとlight client 問題の解決
full-anonimityウェイウェイ
sMPC-based consortium chain
zk 秘匿統計向いてないゆえ
https://gyazo.com/818d4aeed12540bf36006b476d6ce7a7
mosa_siru.icon < proof sizeの削減や、trusted setup問題の解消(universal setup:アプリケーション固有でないセットアップのパフォーマンス改善)
最近はETHの秘匿化プロジェクトがたくさん出てきている
mixing 4つくらい
AZTECHは送金額秘匿化にふりきっている
recursive のsnarksやshardingのプロジェクトのpaperや実装がでてきている
moonty_sal.icon < Zetherが微妙なポイントどこだっけ
実装の信頼性がペーパー書くためのPoC実装なので低そう