原文教材 与 参考资料:
Boneh Dan , Shoup Victor . A Graduate Course in Applied Cryptography[J].
该书项目地址(可以免费获取):http://toc.cryptobook.us/
博客内容为对该书的学习笔记(包括但不限于翻译、额外绘图、注解、个人理解等),并非原创知识,仅帮助理解,整理思路.
20.3 Non-interactive proof systems
非交互式零知识证明,一个经典的例子就是使用Fiat-Shamir 转换将任意的Sigma协议转化为一个非交互式的证明系统。基本的思路非常简单,将验证者生成随机挑战C用哈希函数H进行替换,即为挑战C由哈希函数以声明statement,承诺commitment生成。如果我们将哈希函数作为随机谕言机,那么我们可以证明如下的两个事实:
(1)如果sigma协议具备存在合理性(existentially sound) ,那么该NIPS(non-interactive proof system)也具备存在合理性。
(2)如果sigma协议是sHVZK,那么运行该NIPS不能从中恢复出任何关于证明者持有的证据信息。
显然,第一个属性可以直接从SIgma协议中继承过来。但是,第二个属性需要一个新的定义“Zero Knowledge”来帮助给出合理证明与定义。
20.3.1 Example :a voting protocol
一个典型的非交互系统为 电子投票系统:
该场景非常简单:参与者向投票中心提交自己的选票即可。
需要满足两个基本的属性:
(1)选票有效,即为选票内容需要是合法的。
(2)保证选票不能被泄露,投票过程要公平。
一般有一个可信的服务器用来计票,称之为vote tallying center (VTC)。
选票的过程分为两个阶段:
(1) Voting stage: 投票阶段,每个投票者将自己的选票提交给计票者。
(2)Tallying stafe: 计票阶段,VTC开始统计选票。
一种有效的设计算法是:每个用户使用EIGama算法,使用VTC的公钥对自己投票的内容进行加密,然后提交。例如,如果需要选择则加密比特1. 但是,这存在一个问题,如果有一个不诚实的投票者加密N(N > 1), 则会使得投票不在公平。一种方法是只允许投票者加密0 或者1. 在上节中已经给出了一个每次加密一个bit 的sigma协议,只需要在使用Fiat-Shamir 转换将交互式的协议转换成为非交互的投票协议即可。
20.3.2 Non-interactive proofs:basic syntax
下面给出非交互式系统的形式化定义,注意,这里仅仅定义的是非交互式系统,尚且不涉及零知识的内容。
该非交互式证明系统包含两个算法:
Gen: 一个有效的概率多项式算法,输入为 声明-证据对(statement-witness); 输出为 证明π,该证明属于一个证明空间。
Check: 一个有效的确定算法,输入为 声明-证明,输出为accept 或者 reject 。
20.3.3 The Fiat-Shamir transform
现在给出Fiat-Shamir 转换的形式化定义:将sigma 转化成为一个非交互证明系统。
该转换的核心就是 c = H( y, t ). 使用哈希函数生成挑战后,然后再生成证明。
20.3.4 Non-interactive existential soundness
本质上就是说很难对一个错误的声明产生合法的证明;对于非交互式证明系统的存在合理性刻画,有如下的攻击游戏:
敌手输出一个声明和一个证明,如果该证明并非是合理的R关系语言,但是依然能够通过验证,既可以认定其赢得了游戏(证明过程必须是由一个诚实验证者来证明)。
定理20.2 描述了在一个合适的假设下,Fiat-Shamir 转换能够产生一个具备存在合理性的非交互证明系统,在随机谕言机模型下(将哈希函数处理为随机谕言机)。
定理20.2 教材上没有给出详细的证明过程,我在后续会补上这个定理的证明详细过程。
20.3.5 Non-interactive zero knowledge
本小节给出非交互零知识的详细定义,值得注意的是之前的NIPF并没有体现零知识性,至少保证其能够获得存在合理性,但是并没有给出零知识性的保证。即为如何定义该属性,能够保证不能从证明中获得关于证据的任何有效信息。
我们可以使用类似HVZK的定义方法,如果存在以一个模拟器能够输出一个证明,该证明与Gen算法是不可区分的,那么显然,敌手与模拟器交互式不能获得任何的证据信息的。不幸的是,在这种情况下模拟者不知道任何一点的证据信息还要能够模拟成功,这是不现实的,模拟器总是要获得一点内部的知识。的确,如果模拟器在不掌握任何的“内部优势”的情况下,生成合法R语言的证明,那么也能够生成非法R语言的证明,这显然违背了存在合理性。所以如果能够给与模拟器一个合理的内部优势,将帮助给出一个合理的零知识证明。
所以这里讨论随机谕言机模型下的零知识证明模型,我们将内部优势转化为模拟器向随机谕言机发起的询问。
假设H为随机谕言机,那么模拟器将可以回复如下的随机谕言机请求(可以直接或者间接的请求)。
(1)未判定证明请求,对于一个声明y, 模拟器输出y的证明。
(2)随机谕言机请求,对于某个点u, 模拟器回复挑战信息c.
在该NIZK中,一个敌手不能区分“真实协议” 与 “模拟协议”,即为敌手交互获得的是一个真实证明与声明,还是由模拟器生成的证明与声明。
定义两个实验,敌手可以向挑战者发起一些的请求,该请求一共包含两类,一类是已判定证明请求,由挑战者输出(x,y)的证明内容。随机语言机请求,对于与任意的随机谕言机询问u, 挑战者回复挑战值c.
在Exp = 0 中,为真实协议,使用Gen(x,y)生成证明,使用RO回复随机谕言机请求(真随机)。
在Exp = 1中,为模拟协议,使用Sim的未判定证明询问来回答,以及Sim的随机谕言机回复。
注意,这里的模拟器是一个独立的组件,其自己负责运行证明模拟与随机谕言机回复,与real word 是完全不同的。【再次注意:这里真实协议中使用的随机谕言机是一个随机函数回复】
则定义敌手对该系统攻击的优势为:
下面给出NIZK在随机谕言机模型下的定义与Fait-shamir 转换定理:
对于模拟者如何进行谕言机回复,教材给出了一个例子如下图,【详细的证明过程这里依然没有,后续我会自己写一个补上*】