zk-SNARKs
概要
Zero Knowledge – Succinct Non-interactive Argument of Knowledge(zk-SNARKs)
ゼロ知識証明を一回のメッセージ送信で軽く実現する方法
ゼロ知識証明とは
「相手に秘密の情報を明かすことなく、自分がその情報を知っていることを証明すること」
ゼロ知識証明が満たす条件
証明者が証明できたら、承認者は承認する
証明者が証明できなかったら、承認者は承認しない
証明者の秘密情報を承認者は知ることができない
一般的に、ゼロ知識証明は、承認者と証明者が何度かやりとりを繰り返して証明を行う。
それを一回のメッセージ送信で証明する
応用先
Ethereum
問題点
鍵の生成に信頼できる第三者が必要になる
生成時に使うパラメタを知っていると不正に証明が作れてしまう
ツール
Ethereumで使える
任意の計算結果を検証するためのコントラクトを生成する
任意の計算の証明を生成する
任意の計算のセットアップを行う
詳細
https://gyazo.com/aba976e79f8d8f43c3f085a3d8da6dfe
3つの関数で構成される
G(R, C):証明鍵と承認鍵を生成する関数
P(証明鍵, X, h):証明(prf)を生成する関数
V(承認鍵, h, prf):証明を検証して承認する関数
ただし、
R:秘密の値
C:あるプログラム
X:証明したい情報
h:RをCに入れて獲得した値
「Gで証明の下準備をして、Pで証明を生成する。それをVで承認する。」
ある値hを秘密の情報Xと組み合わせて計算する
その時の計算結果が証明(prf)となる。
承認者はhを元に似たような計算をして、prfと同じ結果を得ることができれば証明が正しかったことになる。
zk-SNARKsの問題点
Gで事前セットアップを行う時に、信用できる第三者が必要
パラメータRを所有している人は誰でも正しい証明を提出できるようになってしまうので、Rを確実に破棄する必要がある
各関数の中身の早見表(難)
https://gyazo.com/0f21a1649a75e61caef6dcfeabc66c4b
もう少し細かい全体像
https://gyazo.com/6e9a8e8b9264420317921a2b637b17d1
参考動画
https://www.youtube.com/watch?v=jr95o_k_SwI
参考文献
書籍
現代暗号の誕生と発展
岡本龍明
Web
イーサリアムに導入されたプライバシー保護技術「zk-SNARK」とは
Osuke
zk-SNARKs — A Realistic Zero-Knowledge Example and Deep Dive
Adam Luciano Coinmonks
Zokrates
ZoKrates - zkSNARKs On Ethereum (made easy)