【非交互式零知识证明】(下)

【非交互式零知识证明】(下)


继续上一节的内容,我们首先再回顾一下经典交互式零知识证明。

1.交互式零知识证明(续)

交互式零知识证明的一般模型如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aiexI542-1667803692601)(C:\Users\20376\AppData\Roaming\Typora\typora-user-images\image-20221011104338741.png)]
(1)证明者和验证者共享一个公共输入,证明者可能拥有某个秘密输入;
(2)如果验证者认可证明者的响应,则输出Accept,否则输出Reject。
经典交互式零知识证明除了应用在NP问题中,还可以应用在身份鉴别协议和Sigma协议簇中。

1.身份鉴别协议

在一个安全的身份认证协议中,要保证用户身份识别的安全性,身份鉴别协议至少要满足以下条件:
1)证明者P能够向验证者V证明他的确是P(P向V证明自己有P的私钥)。
2)在证明者P向验证者V证明他的身份后,验证者V没有获得任何有用的信息(V不能模仿P向第三方证明他是P )。
下面介绍三种经典的身份鉴别协议:

1)Feige-Fiat-Shamir身份鉴别协议
☆简化版本

过程图如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Cmy7JmOQ-1667803692603)(C:\Users\20376\AppData\Roaming\Typora\typora-user-images\image-20221011141013459.png)]

①系统初始化

首先信任中心TA选择并公布一个RSA型模数n=p·q,并对素数p和q保密,然后对于参与者,每一个参与者P选择一个与n互素的秘密值s,其中1≤s≤n-1,并计算v=s2(mod n),并向TA注册v为其公钥。

②鉴别协议流程

1)证明者选择一个随机数r,1≤r≤n-1,计算并发送x=r2(mod n)给V。

2)验证者随机选择一个比特值α∈R{0,1},并将α发送给证明者。

3)证明者根据α做出不同的响应:

若α=0,令y=r;若α=1,令y=r·s(mod n)。

4)验证者验证等式y2=x·vα(mod n)。如果等式不成立或者y=0,验证者不接受证明。否则,进行下一轮证明。验证者执行上述证明过程t轮后,且均未拒绝,则验证者接受证明者的证明,即相信它的身份(很简单,可以在纸上自己推一下)。

性质分析

1.完备性:如果证明者知道秘密值s,他对于不同的α都可以做出正确的响应。显然,诚实验证者接收的概率为1.

2.可靠性:如果证明者不知道秘密值s,那么他只能够以1/2的概率欺骗验证者。执行t轮后,欺骗概率下降到2-t.

3.零知识性:协议交互过程中泄露的信息有:x=r2(mod n),y=r或y=r·s(mod n),即(x,y)。模拟器的模拟方式:随机选择y,并令x=y2(当α=0时)或x=y2/v(当α=1时)。模拟器产生的(x,y)和真实交互的(x,y)是计算不可区分的。

这里的计算不可区分性这个概念不是很好懂,我查阅了很多资料,我理解的计算不可区分和统计不可区分大致就是:如果挑战者的能力是无限的,无限能力的挑战者都不能挑战成功那么他就是统计不可区分;如果挑战者的能力是多项式的,多项式能力的挑战者不能挑战成功那么他就是计算不可区分的(一般情况下,我们认为超过多项式时间复杂度的算法计算机就没法处理了)。

☆完整版本
系统初始化(一次性)

首先信任中心TA选择并公布一个RSA型模数n=p·q,并对素数p和q保密,然后对于参与者,每一个参与者选择k个与n互素的秘密值s1,s2,…,sk,1≤si≤n-1,并计算vi=si2(mod n),并向TA注册(v1,v2,…vk)为其公钥。

鉴别协议流程:

1)证明者选择一个随机数𝑟,1 ≤r≤n-1,计算并发送x=r2(mod n) 给V。

2)验证者随机选择𝑘个比特值α向量=(α1,α2,…,αk)并将𝜶发送给P。

3)P计算
y = r ⋅ ∏ i = 1 k S j a i ( m o d    n ) y=r\cdot \prod_{i=1}^{k}{S_{j}}^{a_{i}}(mod\; n) y=ri=1kSjai(modn)

并将𝑦发送给V。

4)V验证等式
∏ i = 1 k S j a i ( m o d    n ) \prod_{i=1}^{k}{S_{j}}^{a_{i}}(mod \; n) i=1kSjai(modn)
如果等式不成立或者y=0,V不接受证明。否则,进行下一轮证明。

验证者V执行上述证明过程 𝑡轮 后,且均未拒绝,则验证者接受证明者P的证明,即相信他的身份。

(与简化版本推导的过程类似)

性质分析

1.完备性:显然,诚实验证者接收的概率为1.

2.可靠性:如果证明者不知道秘密值s,那么他只能以1/2k的概率欺骗验证者。执行t轮后,欺骗概率下降到2-kt

3.零知识性:同样地,与简化版本一致,交互数据元组(x,y)可以被模拟器模拟,达到了计算不可区分性。

总结
1.安全假设

无论是简化版本还是完整版本,协议的安全性依赖于未知分解的大合数的模平方根求解难题。这个问题等价于大合数分解困难问题。

2.参数选择

以完整版本为例,k·t(简化版本中k=1)需要足够大,才能够保证非诚实证明者欺骗成功的概率几乎可忽略。同时,n的分解困难性也是安全性考虑之一。

3.安全平衡

每增加一轮协议,计算量和通信量均上升,但安全性越高。因此,需要在保证足够安全的前提下,减少协议重复轮数t,提升效率。

2)Guillo-Quisquater身份鉴别协议

Guillo和Quisquater给出了一个身份鉴别方案,这个协议需要可信第三方参与、三轮交互、利用RSA公钥密码体制。

过程如下图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YU8bX902-1667803692604)(C:\Users\20376\AppData\Roaming\Typora\typora-user-images\image-20221012130822315.png)]

①系统初始化

1)信任中心TA选择并公布一个RSA型模数𝑛=𝑝⋅𝑞,并对素数𝑝和𝑞保密。令φ=(p-1)(q-1) ,选取𝑒使得gcd(𝑒, 𝜙 )=1,计算𝑑=1/e 𝑚𝑜𝑑 𝜙 ,公开(𝑒, 𝑛)。

2)用户P选取唯一性身份IP ,通过哈希函数变换得到哈希值JP=H(IP), TA给A分配密钥SP=IP -d (mod n)

②鉴别协议流程

1)P产生随机数𝑟,1≤𝑟≤𝑛-1,计算𝑥=r(e) 𝑚𝑜𝑑 𝑛 , 并将 IP , 𝑥 发送给V;

2)V选取随机数𝑢,1 ≤ 𝑢 ≤𝑒,将𝑢发送给P。

3)P计算y=SuPmod n,并将y发送给V。

4)V计算JP=H(IP),并验证JUA·yemod n不为0且等于𝑥。如果成立,则此轮接收证明;否则,输出拒绝。

**完备性:**显然,诚实验证者接收的概率为1。

**可靠性:**如果证明者不知道秘密值𝑆p ,那么他只能够以1/𝑒的概率欺骗验证者。执行𝑡轮后,欺骗概率下降到e-t

**零知识性:**可被模拟器模拟,达到计算不可区分性。 如果𝑒比较大时,每轮的错误概率就会很低,那么需要重复执行的轮数𝑡就可以很小,甚至为1。

2.非交互式零知识证明

​ 采用Hash函数的方法来把一个交互式的证明系统变成非交互式的方法被称为Fiat-Shamir变换,它由密码学老前辈Amos Fiat和Adi Shamir两人在1986年提出。

​ Fiat-Shamir变换,又叫Fiat-Shamir Heurisitc(启发式),或者Fiat-Shamir Paradigm(范式)。是Fiat和Shamir在1986年提出的一个变换,其特点是可以将交互式零知识证明转换为非交互式零知识证明。这样就通过减少通信步骤而提高了通信的效率。
​ 菲亚特-沙米尔(Fiat-Shamir)启发式算法允许将交互步骤替换为非交互随机数预言机(Random oracle)。随机数预言机,即随机数函数,是一种针对任意输入得到的输出之间是项目独立切均匀分布的函数。理想的随机数预言机并不存在,在实现中,经常采用密码学哈希函数作为随机数预言机。

​ 以Schonor协议为例,交互式零知识证明的过程如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eAfUuPFR-1667803692608)(C:\Users\20376\AppData\Roaming\Typora\typora-user-images\image-20221107142937856.png)]

假设Alice 拥有一个秘密数字a,我们把这个数字当做私钥: sk,然后把它映射到椭圆曲线群上的一个点 aG*,(简写为 aG),这个点我们把它当做公钥: PK。(Schnorr 协议充分利用了有限域和循环群之间单向映射,实现了简洁的零知识证明安全协议)Alice 要向 Bob 证明她拥有 PK 对应的私钥 sk,那么如何证明呢。

​ 第一步:为了保证零知识,Alice 需要先产生一个随机数r,这个随机数是用来保护私钥无法被 Bob 抽取出来,会映射到椭圆曲线群上的点rG上,记为R发送给Bob;

​ 第二步:Bob 要提供一个随机数进行挑战,把它称为 c

第三步:Alice 根据挑战数计算 z = r + a * c,然后把 z 发给 Bob,Bob通过式子进行检验:zG ?= R + cPK*;

​ 由于z=r+csk,等式两边添加相同的生成元可得:zG= rG + c(aG)=cPK+R。就可以验证Alice确实拥有私钥sk*,但是验证者Bob并不能得到私钥sk的值,因此这个过程是零知识的,并且是交互式的。

​ 由于椭圆曲线上的离散对数问题,知道RG的情况下通过R=rG解出r是不可能的,所以保证了r的私密性。由这个问题也可以推广到一般问题,假如证明者对于验证者第一次提出的问题,回答正确的话,验证者就有p的概率相信证明者自己的命题,第二次p+p²,…,第n次达到1-pn的时候,当n越来越大,这个概率的值就越接近1。

​ 所以零知识证明是也一种基于概率的验证方式,验证者基于一定的随机性向证明者提出问题,如果证明者都能给出正确回答,则说明证明者大概率拥有他所声称的“知识”。零知识证明也并不是数学意义上的证明,因为它存在小概率的误差,欺骗的证明者有可能通过虚假的陈诉骗过验证者。换句话说,零知识证明是概率证明而不是确定性证明(但是也存在技术能将误差降低到可以忽略的值)。

​ 上面的整个过程是在证明者和验证者在私有安全通道中执行的。这是由于协议存在交互过程,只对参与交互的验证者有效,其他不参与交互的验证者,无法判断整个过程是否存在串通的舞弊行为,一旦两个验证者相互串通,交换自己得到的值,便可以推出私钥。因此,是无法公开验证的。所以在交互式Schnorr协议中存在的私钥泄露问题,使得算法无法在公开的环境下使用。可以将原始的交互式协议通过Fiat-Shamir变换变成非交互式零知识证明来解决这个问题:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fUErJbbO-1667803692609)(C:\Users\20376\AppData\Roaming\Typora\typora-user-images\image-20221107142847738.png)]

回顾一下交互式Schnorr 协议的第二步,Bob 需要给出一个随机的挑战数 c,这是为了防止Alice造假,这里我们可以让 Alice 用*c = Hash(PK, R)*这个式子来计算这个挑战数, 其中 R 是 Alice 发给 Bob 的椭圆曲线点,PK 是公钥。

这个式子达到了两个目的:

(1)Alice 在产生承诺 R 之前,没有办法预测 c,即使 c 最终是 Alice 生成的。

(2)c 是通过 Hash 函数计算的,会均匀分布在一个整数域内,可以作为一个随机数。

Hash 函数是单向的,这样一来,虽然 c 是 Alice 计算的,但是 Alice 并没有能力实现通过挑选 c 来作弊。因为只要 Alice 一产生 Rc 就相当于固定下来了。

这样,就把三步Schnorr协议合并为一步。Alice可直接发送*(R,z),因为Bob拥有Alice的公钥PK*,于是Bob可自行计算出c。然后验证zG?=R+cPK

利用 Hash 函数,把三步 Schnorr 协议合并为了一步。Alice 可以直接发送:(R, c, z)这个三元组。又因为 Bob 拥有 PK,于是 Bob 可以自行计算出 c,于是 Alice 可以只发送 (R, z) 这个二元组即可。

总体步骤如下:
·Alice:均匀随机选择r,并依次计算 R=rG c=Hash(R,PK) z=r+csk

·Alice:生成证明*(R,z)*

·Bob(或者任意一个验证者):计算e=Hash(PK,R)

·Bob(或者任意一个验证者):验证zG?==R+cPK

可以看到这个过程,与交互式证明的过程相比减少了重复的挑战和回应过程,证明者只需要发送一次数据供验证者验证。去掉交互过程,证明者直接公开验证所需的数据。

ps:写的比较潦草,恳请各位小可爱批评指正!
在这里插入图片描述

  • 14
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

三金哥爱吃醋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值