原文教材 与 参考资料:
Boneh Dan , Shoup Victor . A Graduate Course in Applied Cryptography[J].
该书项目地址(可以免费获取):http://toc.cryptobook.us/
博客内容为对该书的学习笔记(包括但不限于翻译、额外绘图、注解、个人理解等),并非原创知识,仅帮助理解,整理思路.
本章节将讨论将sigma协议应用成为“知识的证明”,使用重绕技术和知识合理性,将有效的提取一个证据从任何的证明者处。使用sigma协议构造零知识方案,安全取决于声明的真实性,而不是任何确定的知识概念。例如在CP协议中,证明者向验证者证明自己掌握一个DH元组,但是并非一个确定数值的DH元组,其的确掌握一个DH元组这件事就是声明的真实性。
20.1 languages and existenial soundness
开头说到证明“证明的真实性”,其实就是证明一种关系R,而该关系一定能用某种语言来描述,下面给出真实声明的描述语言定义:
true statement: 对于关系R,一个statement y 存在符合关系R的x。
false statement: 对于关系R,一个statement y 不存符合关系R的x。
定义LR,被称为由R定义的语言,其中LR是一个集合, 该集合中包含所有正确的statement.
给出一个之前章节提到的CP协议中的关系R的定义:
现在给出一个定义“existenial soundness”存在合理性:
存在一个协议PV是sigma协议,并且该协议能够有效的证明存在一个正确的关系R,那么存在一个敌手A, 该敌手在Y空间上选择一个statement y(注意这个声明不一定是正确的),并将这个声明给与挑战者(验证者),然后,敌手和验证者V(y)进行交互,如果敌手能够使得验证者(挑战者,诚实的)接受这个声明statement, 但是y 属于Y不属于LR,那么我们称该敌手赢得游戏,定义敌手的优势为ESadv[A,(P,V)],换句话说,如果敌手能够在不知道证据的情况下(也许没有证据)劝服挑战者接受这个输入,那么敌手赢得游戏。
定义:如果这个敌手的优势可以忽略,那么定义该协议具备“existentially sound”性质;
20.2 Proving properties on encrypted data
知识的证明可以应用到非常多的场景场景中,一种比较常见的是加密数据的证明,该场景如下图所示:
A 使用了 B 的公钥加密了消息m, A希望在不打开密文的情况下,向Charlie证明Alice确实加密了消息m.
一个具备存在合理性 以及 SHVZK的sigma 协议可以被用来解决这个问题。但是,这并不是一个完善的解决方案。一个问题是HVZK仅仅只能在Charlie是诚实的情况下,在不泄露m信息的情况下证明这个消息。一种方法是,剥夺验证者自己产生随机挑战的能力,使用哈希函数来替代验证者随机产生挑战,即为Alice对加密的m产生一个非交互的证明;
此处,给出几个使用sigma协议证明加密数据的例子:
Example 20.1
对于EIgamal加密算法:
Alice使用Bob公钥加密消息m, 得到密文(v0, e0). Alice使用Bill公钥加密消息m,得到密文(v1, e1).
那么实际上,我们需要实现的是如下的关系R,证明两个密文加密的是相同的明文:
这里只需要Alice证明其具有满足下列关系即可:
非常简单,使用线性的sigma通用构造即可, 即为 z1 = c*x1 + a, z2 = c*x2 + b 形式.
Example 20.2
考虑这样一个例子,Alice此时使用Bob的公钥对同一个消息加密2次,得到两个密文,此时Alice企图向Charlie证明自己掌握的确是将一个消息加密两次,如下:
这里有两种证明方法:
方法1. 存在,那么按照sigma 对于线性的关系证明,只需要证明存在即可。那么使用通用sigma协议即可。
首先,生成随机数a,然后对a进行承诺。
其次,接受挑战c.
最后,计算给验证者,显然验证者 g^z =?=(v0/v1)^c * g^a即可。
方法2. 直接将这个协议看成CP协议,证明是一个DH元组。
特别的,ALice不一定要作为密文的生成方,实际上Alice可以从其他方接受密文(v0,e0)然后生成新的密文(v1,e1) = 。这是一种对消息进行重加密的有效方法。
Example 20.3
在第三个例子中,我们考虑加密一个比特b = {0,1}, 然后Alice使用Bob的公钥对其进行加密,得到一个密文(v,e),此时Alice企图向Charlie证明自己的确是加密了一个比特。那么,Alice此时实际上想要证明的是这样一个关系R:
即为v,u,e为一个statement, b和bata是该statement的证据。那么,我们可以将该关系转化成一个对DH元组证明的关系:
然而,实际上只加密了一个比特,所以需要使用OR-proof 来证明该事实,即为Charlie可知道要么存在b=1 ,u,v,e 是DH元组,要么b= 0,uv,e 是DH元组。但是,实际上Charlie并不知道其加密的是b= 0 或者 b= 1. 所以,进一步转化关系R如下:
下面给出完整的Sigma 协议证明加密比特:
证明者首先设定w0 和 w1即为两个加密对应的声明,接着初始化一对承诺值,然后证明者对该两个声明发送同一个挑战值,P计算回复Z,其中一个是用模拟器计算的结果Z,另外一个是诚实按照协议计算的Z,然后将两个回复发送给V,最终V可以验证两个statement都是合法的,意味着P的确加密了某一个比特。
Example 20.4
假设Alice有一个DH元组,然后Alice 使用Bob的公钥对该元组进行加密,得到三组密文如下:
所以需要使用sigma 协议来证明这样一种关系:
那么,其实只要证明如下等式成立即可:
使用sigma协议对于线性关系的证明,是容易得到该等式的。
Example 20.5
使用例子20.4 我们可以得到一个对于加密一个比特的新的sigma协议,即为证明b ^ 2 = b. 在整数域中,只有b = 0 和 b = 1满足这种情况,0 ^2 = 0. 1^2 =1. 这里的知识合理性与HVZK属性与上文例子20.3是相同的。这里的确可以证明存在b , 0<= b < B , B 是大于2的,在下一个例子中,将证明该b满足一个线性关系b(b-1)***(b-(B-1)) = 0, 故对于b = 1 或 0 上述关系是成立的。
Example 20.6
考虑这样一个例子,Alice使用Bob的公钥对两个明文进行了加密,明文是g^r1 ,g ^r2, 现在Alice企图证明r1 和 r2 之间存在一个函数关系f. f函数如下所述:
这里的系数及其个数是公开的,故我们需要使用sigma协议证明如下的关系R:
Alice向Charlie证明其掌握如下的秘密值:
满足如下的关系式:
【完整协议待补充*】
下面给出一个概念:language reduction 语言规约:
使用这样一个规约,我们可以从R`得到R的一个sigma协议构造。
20.2.1 A generic protocol for non-linear reations[待补充]*