原文教材 与 参考资料:
Boneh Dan , Shoup Victor . A Graduate Course in Applied Cryptography[J].
该书项目地址(可以免费获取):http://toc.cryptobook.us/
博客为对该书的学习笔记,并非原创知识,仅帮助理解,整理思路。
19.4 Sigma protocols: basic definitions
Schnorr-ID 协议被称为Sigma protocol的一种特殊的例子,本小节将给出sigmal协议宏观上的定义与构造。直觉上,该协议允许一个证明者prover P 能够说服一个持怀疑态度的验证者V,P掌握某个满足一定关系R的证据w,在不需要暴露任何的对于V有用的关于该证据w的信息。
首先,sigma 协议本身就是一种对于“知识的证明”,但是该书此处并不以这个概念来定义,个人认为一种较好的理解是,sigma 是“知识的证明”的一种方式与实例。
知识这里就是说证据,证据一定是对于一个事实或者关系的证据与描述。那么,我们首先给出关系的定义:
关系R即为在二元域上的一个关系,X,Y,R都是可以被有效识别的,即为在多项式时间内被识别,其中Y的元素被叫做“statements、声明”,X中满足某个关系R且与Y为一组的元素x称为“witness”证据。
给定关系后,我们给出Sigma的语义定义:
一个基本的sigma 定义如下所示:
P证明者,持有一个关系R上的实例(x,y)
V验证者,持有关系R上的一个声明,y
P 首先给与V 一个承诺值,准备建立联系;V给与一个P 一个挑战信息c; P返回给V一个回复z;
V 此时可以对该关系R进行验证;
这里要去V在选取挑战c的信息是不能是超过挑战空间C的范围的,并且最终验证等式必须是确定性的即为输出要么是接受要么是拒绝。称(t,c,z)为一个可接受的会话。
给出一个例子,Schnorr's Sigma Protocol:
这是针对离散对数关系R的一个sigma协议:
值得注意的是在sigma协议中并没有指定关系R的元素生成算法,因为这个协议并不关系R上的元素是如何生成的,该协议关注的核心是如何证明该关系成立在不暴露秘密信息的条件下,我们亦可以理解为其关注的是前几篇提到的ID协议的“下半部”内容。这里的R关系实例相当于是“参数化的”。另外,在多数sigma协议中,P并不显示的使用“statement”.
19.4.1 knowledge soundness
给出sigma协议的一个关键安全属性“知识合理性”,即为如果该关系R是知识合理的,那么存在一个提取器,能够在两个可接受的会话中提取出秘密值,形式化定义如下:(另,题外话,很多签名协议如果存在这样的属性,即通过一个提取器能够在两个合法签名处提取出知识,那么就可以应用分叉引理来证明其安全性)
例如,在schnorr-sigma协议中,显然存在以下的提取过程:
使用两个可接受的会话即可提取秘密值,更一般得说,如果一个密码研究者说“P* 一定知道一个声明statement y的证据w”, 其意味着该证据可以通过P被提取出来通过重放技术。
19.4.2 Special honest verifier zero knowledge
HVZK 概念是比较容易的就可以迁移到sigma协议当中来,不过此处称sigma协议为特殊的零知识证明,下面直接给出概念:
如果存在一个有效的概率算法模拟者Sim, 并且满足以下的两个属性那这称之为SHVZK:
(1)对于输入(y,c)模拟者总是能生成一个合法的会话内容。
(2)如果由模拟者生成的会话内容和证明者P生成的会话内容分布相同。
这里Sim模拟者具备一个额外的输入c, 另外模拟者必须在没有证据的情况下生成一个可以接受的会话内容,满足上述两个属性,则称之为SHVZK。
19.5 Sigma protocols:examples
为了引出一般性的sigma理论,我们要进一步探讨一切其他具体的例子,甚至使特例,然后进而推理演绎出一般性的结论。
19.5.1 Okamto's protocol for representations
okamto 协议与schnorr协议的一个重要区别就是,okamto 协议可以证明其掌握一个离散对数的解,但是这个解并非是schnorr的确定的一个值,而是一对值(x.y), 则其证据是一对元素;核心还是证明者向验证者证明自己保有一对满足关系R的秘密值。每一个声明有很多的证据,最多有q个证据。
该协议中关系R的描述如下所示:
g,h,u 均为公开的元素,即为一个声明,alpha 和 bata 是该声明满足关系R的一个证据。该协议具体运行过程如下图所示:
在sigma 协议中,我们并不关注证据和声明之间的关系,我们关注的是如何推定这个证明过程,该协议运行如下:
1. P 计算承诺发送给V;2.V选择一个挑战C发送给证明者;3.P计算一个合法的会话给V,然后V验证会话的合理性(对关系R进行验证)
下面给出该协议的安全性定理:
OKamoto 协议是一个Sigma协议可以证明关系R,更重要的是,它提供了知识合理性并且是一个特殊的HVZK,HVZK是可以抵抗窃听敌手的,所有该协议至少是可以抵抗窃听敌手的,这里只要说明其具有知识合理性和是一个HVZK就可以了,这包含了其实抵抗窃听敌手的概念。
这里正确性和符合sigma协议定义都是显然的,我们现在观察,其是否是“知识合理”的:
推导过程如下:
现在来考虑S-HVZK属性:
显然,存在一个模拟器Sim,可以逆序生成一个可接受的会话如下图:
并且,显然模拟器输出和P的计算都是群上的元素,都是不可区分的。
19.5.2 The Chaum-Pedersen protocol for DH-triples
Chaum-Pedersen 协议,下文简称CP协议,该协议可以使得一个证明者说服一个怀疑的验证者,证明者持有一个DH元组。DH元组即为此处sigma协议所证明的关系R,如下所示:
即为一个声明具备一个证据beta当且仅当其(声明)是一个DH元组,这与之前看到的例子并不相同,即为并不是所有的声明都具有一个证据,这是合理的,因为此处我们关注的是协议的下半部,或者说是sigma部分,至于给出的证据和声明到底是如何生成的,这里不关心的,或者是确定性算法生成或者概率性算法生成都是可能的,
给出CP协议的交互图:
CP提取器如下所示:
显然,这也是一个SHVZK协议,此处不进行具体的描述了,和上小节的okmato协议是一样的。
经过上述两个例子,我们看到对于某个关系R的声明Y,其证据X可以不唯一,甚至可以并不存在,所以我们可以给出一个宏观上的sigma定义,经过给出宏观上的定义,再进一步探讨sigma协议的性质。
19.5.3 A sigma protocol for arbitrary linear relations
schnorr, okmato,cp协议本质上都是证明群元素上的一个线性关系R:
考虑如下的布尔函数所示:
即为给定x1-xn 这个n个整数,存在ui,gi分别计算元素的乘积使其相等,并且上市最终的布尔结果为真。对于特定的F类函数,我们可以给出一下的关系R:
所以该布尔函数就是一个声明,n个整数为变量使得该布尔函数成立,即为证明,该关系的成立原因是该关系是线性关系,我们可以得到如下写法,证据即为如下等式的一个解:
综上所述,我们可以给出一个通用的线性关系sigma协议:
显然,根据之前的三个例子我们可以得到如下:
所以给出通用关系的R的安全性定理:
我们对上述关系给出多种方程在不同的群上,凡是依照这个构造的数字签名一般均可以使用分叉引理来证明其安全性。
19.5.4 A Sigma protocol for the pre-image of a homomorphism
截止到目前为止所展示的协议,包括通用的线性结构,可以被描述为一种更简单、更简洁的描述通过群同态的语言。
设存在两个阿贝尔群H1,H2,并且该两个群之间存在一个同态关系,我们将描述群H1上的加法和群H2上的乘法。
定义u是H2的元素,那么下述的sigma协议允许证明者去劝服一个验证者,P知道u在一个同态下的H1中的原像。具体而言,该协议描述的是这样一个关系R:
协议描述如下所述:
通用线性关系R的例子如下所示:
和之前的类似,给出该构造的安全性定理:
19.5.5 A Sigma protocol for RSA
显然,上文给出的关系R主要是基于离散对数的,很多例子都是基于椭圆曲线离散对数问题,然而sigma协议可以应用于很多困难问题实例上,例如RSA-gen困难问题。
Guillou-Quisquaster(GQ)协议允许证明者向验证者证明其掌握一个声明y的e次根,该关系描述如下:
因为n,e是RSA的公钥,该声明y的证据一定是独一无二的。
GQ协议的交互过程如下:
GQ提取器如下:
进一步使用shamir trick算法,既可以得到秘密值x.
shamir's trick 算法:
对于一个RSA的碰撞,则可以解处RSA的一个秘密值:
输入:n,e ; f, w, y ,满足,w^e = y^f ,目的是求解y的e次根x.
输出:y的e次根x.