学习:隐私计算-ZKP
零知识证明 ZKP, Zero-Knowledge Proof
证明者可以用ZKP向验证者证明某个声明,而不泄露额外信息
声明statement任何陈述即为声明
EX: A为知道B已超过18岁查看其身份证
声明:已过18岁
额外信息:B的生日,姓名,证件号等等
类型:交互式零知识证明IZK, Interactive Zero-Knowledge: prover和verifier之间有若干信息交互
非交互式零知识证明NIZK, Non-Interactive Zero-Knowledge: prover直接将证明发给verifier一条信息(没有回复没有交互
为什么我们需要ZKP:
非色盲证明协议:
设想:你(证明者)想向我(验证者)证明你不是红蓝色盲1,我随即从红蓝球桶中任意桶里拿出一颗球,问你这是什么颜色,你要回答蓝色或红色。错误则认定你是红蓝色盲,为了防止你猜测正确,重复这个过程10~20次,如果全部正确则相信你不是红蓝色盲。
协议具备性质:
1. 完备性Completeness:如果这个声明(证明者不是红蓝色盲)是真的,那么验证者一定会接受证明(如果你不是色盲,你一定会通过这个协议
2. 可靠性Soundness: 如果验证者接受证明,那么这个声明大概率是真的
but协议非零知识zero-knowledge
额外信息:每个桶里的颜色。如果验证者是色盲,验证者可以通过证明者来得到额外信息(如果验证者从左边桶里拿出,验证者回答红色即可知道左边桶是红色桶)
改进:问题变为“2个球颜色是否一样”则证明者就不会泄露额外信息
(安全假设:一个桶红球,一个桶篮球
完美的零知识性Perfect Zero-knowledge:在整个协议中,证明者泄露给验证者的额外信息为0
统计学的零知识性Statistical Zero-knowledge:在整个协议中,证明者泄露给验证者的额外信息是可忽略的
基于算力假设的零知识性Computational Zero-knowledge:在任意一个随机多项式时间的图灵机视角,在整个协议中,证明者泄露给验证者的额外信息是可忽略的
Practice:抽一张扑克牌用ZKP证明其为红色
answer:将黑色的牌全部给验证者(NIZK)