はじめに
Shielded CSV 1は基本的にzkCoins2の仕様を厳密化し、インターフェースのみrustで準備したもの3です。加えて、匿名でありプライバシーに配慮されていることも特徴として挙げられています。この記事では、実際にどのようにプライバシーが実現されているのかという点と、プライバシー上の課題を紹介します。
Shielded CSV/zkCoinsの基本
Shielded CSVはCSVプロトコル(Client Side Validationプロトコル)の一種になります。
おおまかなアーキテクチャとしてはほぼzkCoinsと同じだと言えます。
相違点としては以下が挙げられます。
- シュノア署名の公開鍵と署名値(署名値はトランザクションのコミットメントを含んでいる)を無効化因子(nullifier)として使用する
- 受け取り手がブロックチェーン上で行う検証はトランザクションが正しくコミットされており、シュノア署名が正しいものであるかの確認だけになる
- 送金先の量と宛先が秘匿されている
- 無効化因子をまとめてブロックチェーン上に書き込む公開者(publisher)がシュノア署名を集約することでデータ量とオーバーヘッドを減らせる
アーキテクチャの概要は以下のとおりです(論文1より)。
zkCoins自体については以前に書いた記事2があるので、そちらを読んでみてください。
PCD(証明付きデータ)のプライバシー
論文1ではPCD456として一般化されていますが、要はzkCoins2で説明されているように再帰的なSTARK/SNARKの証明を使っています。この証明はzkSTARK/zkSNARKのようにゼロ知識性を持った証明スキームを使うことが可能です。ゼロ知識性を持った証明スキームを使う場合、CSVのトランザクションデータを受け取り手が受け取っても、基本的にはどのブロックチェーン上のコミットメント地点(無効化因子の公開鍵)から送金されたのかという情報だけしか分かりません。
論文1の 2章 Technical Overview中の Succinct & Private Coin Proofsのセクションによれば、コインの受け取り手は以下の情報を知ることができます。
- どのアカウント(ブロックチェーン上に書き込まれた一時的な公開鍵(nullifier: 無効化因子の公開鍵))から送金が行われたか
- 自分宛ての送金金額
一方、受け取り手は以下の情報はわからないことになります。
- 送金元アカウントのトランザクション履歴
- 送金元アカウントの残高
- その他の送金先の情報
- 簡単に言えば、他のユーザーの送金先・送金料は秘匿コミットメントになっており、送金先ごとにトランザクションとして異なる値を使うことができるため。送金されたものをユーザーが消費したい場合には、コミットメントをオープンする証明を消費用のトランザクションに含める。
なお、コインの受け取り手ではないその他のユーザーは、ブロックチェーンを観測しても「ブロック公開者(publisher)のアドレス」以外には意味のある情報を得ることができません。
プライバシー上の課題
論文1の6.3 Coin Linkabilityに書かれているとおり、一つのトランザクションの中で複数の宛先に対して送金を行った場合にはプライバシーが破られる可能性があります。トランザクションが参照しているブロックチェーン上のコミットメントを送金先に共有すると、それぞれの宛先のユーザーは、送り主が同一であるということを確信できるためです。他のユーザーへの送金先情報や送金金額は秘匿コミットメントになっているため、それらが他ユーザーに漏れることはありません(ただし宛先のアウトプット数自体は漏れる可能性もあるかも?)。
解決策として、関連付けられたくない送金先は別のトランザクションで送金することが挙げられています。
参考文献
-
Shielded CSV 🛡️: Private and Efficient Client-Side Validation https://github.com/shieldedcsv/shieldedcsv ↩ ↩ ↩ ↩ ↩
-
トークン転送のプライバシーとスケーラビリティを改善するzkCoins https://tech.hashport.io/4729/ ↩ ↩ ↩
-
src/primitives.rs
https://github.com/ShieldedCSV/ShieldedCSV/blob/dd79b5ec2234c81a9de707d300a555c714d6d182/src/primitives.rs ↩ -
Incrementally Verifiable Computation:効率的に証明をつなげる https://tech.hashport.io/3594/ ↩
-
第三者を信頼せずに段階的検証可能計算(IVC)を実現するHaloの解説 https://tech.hashport.io/3778/ ↩
-
Proof of Necessary Work: 再帰的SNARKを使ったビットコインの全ブロック検証 https://tech.hashport.io/3248/ ↩