安全多方计算之五:零知识证明(从入门到入土。。)
创始人
2024-05-23 00:10:16
0

零知识证明

  • 1. 简介
  • 2. 零知识证明的例子
    • 2.1 向红绿色盲证明红球、绿球
    • 2.2 数独的零知识证明
    • 2.3 三染色问题的零知识证明
    • 2.4 Quisquater-Guillou 零知识协议
  • 3. ElGamal加密的零知识证明
    • 3.1 ElGamal加密的已知明文证明
    • 3.2 ElGamal加密的二选一零知识证明
    • 3.3 ElGamal加密的1-out-of-N零知识证明
  • 4. 身份的零知识证明
    • 4.1 Fiat-Shamir 身份识别协议

1. 简介

零知识证明(Zero Knowledge Proof)由S.Goldwasser、S.Micali 及 C.Rackoff于1985年在论文《The Knowledge Complexity of Interactive Proof Systems》(交互式证明系统中的知识复杂性)首次提出,是一种用于证明者在不泄露任何其他信息的情况下证明其掌握知识正确性的密码学协议。

该协议的一方称为证明者(Prover),用PPP表示;另一方称为验证者(Verifier),用VVV表示。零知识证明指PPP试图使VVV相信某个论断是正确的,但却不向VVV泄露任何有用的信息,即PPP在论证的过程中VVV得不到任何有用的信息。零知识证明除了证明证明者论断的正确性外不泄露任何其他信息或知识。

零知识证明一般包含以下阶段:

  • 承诺(Commit):证明者针对命题做出承诺,该承诺等待验证者提出挑战并进行验证。

  • 挑战(Challenge):验证者选择随机数(即上述例子中的行、列或格)对提出的承诺进行挑战。

  • 回应挑战(Response):证明者将收到的随机数结合给出的承诺(承诺不可修改),返回挑战的回应。

  • 验证(Verify):验证者验证挑战的回应是否正确,如果错误,则证明失败。

证明者与验证者重复执行以上步骤,直到可以相信的概率达到验证者接受的条件,证明成功。

零知识证明具有以下特点:

  • 完备性(Completeness):如果证明者和验证者都是诚实的,并遵守证明过程的每一步进行正确的计算,则该证明一定会成功,验证者也一定能够接受证明者;
  • 合理性(Soundness):没有人能够假冒证明者,从而使这个证明成功;
  • 零知识性(Zero-Knowledge):证明过程执行完后,验证者只会得悉"证明者拥有这项知识",而没有获得关于这项知识本身的任何信息。

零知识证明与比特承诺都要求协议参与者对某种知识或某个声明做出证明或承诺,但不泄露该知识或承诺的任何信息。不同的是比特承诺需要在打开阶段揭示承诺,但零知识证明在证明过程结束后仍不会泄露掌握的知识。比特承诺一般用于在电子拍卖或电子投票中参与者对自己的投票或选票做出承诺;而在协议执行过程中,为了抵抗恶意参与者或主动攻击者,需要协议参与者通过零知识证明来证明自己所作操作都是按照协议正确执行的。

2. 零知识证明的例子

2.1 向红绿色盲证明红球、绿球

有两颗形状、大小完全一样的球:一颗红球、一颗绿球,XXX是红绿色盲,YYY能够向XXX证明这两颗球是一红一绿吗?

  • XXX左手拿着红球,右手拿着绿球,并在背后不让YYY看到,进行交换(或者不交换)两只球
  • YYY能够根据颜色精准判断XXX是否进行了交换
  • 执行上述操作NNN次后,即能在XXX是色盲的情况下,YYY仍能够向XXX证明能这两颗球是一红一绿

2.2 数独的零知识证明

数独(Sudoku)规则如下:

9×99\times 99×9方格,其中已经填入部分数字,要求玩家在空白方格中填入数字1−91-91−9,使得完成后的每行、每列及999个3×33\times33×3方格都包含数字1−91-91−9且每个数字只出现一次

在这里插入图片描述
假设PPP给出一道数独题目,由VVV来完成,但VVV过了很久都未能解出,他怀疑该数独题目没有解,要求PPP证明该题目有解。因此PPP希望在不告诉VVV答案相关的任何信息的情况下证明这道题有解且自己知道这个解。

PPP和VVV执行以下操作:

(1)承诺

PPP将答案的每个数字写在纸片上,并按照答案摆放(正面朝下),题目中已有的数字正面朝上,这81个纸片的放置为PPP的“承诺”。
在这里插入图片描述
(2)挑战

VVV不能直接将纸片翻转查看数字,但是 VVV可以在行、列、格中任意指定一种验证方式。如图所示,VVV选择按照行的方式进行挑战。
在这里插入图片描述

(3)挑战回应

PPP按照VVV选择行验证方式将桌面上每行的999张卡片装入一个袋子里,并且将纸片进行混淆后,把袋子交给VVV,作为挑战的回应。

(4)验证

VVV打开纸袋可验证每个纸袋里的999张纸片刚好为1−91-91−9,即PPP在承诺阶段做出的承诺满足“每行1−91-91−9都出现且只出现一次”的要求,同时在一定程度上说明PPP做出的承诺很可能是一个合法的解(因为随意给出的数字不会满足这一要求,并且在承诺的时候并不知道VVV会选择行、列、格哪种验证方式)。
在这里插入图片描述
由于存在1/31/31/3的概率PPP事先猜对VVV选择行验证,然后给出的承诺仅满足行要求,不满足列要求和格要求。或者PPP拥有满足两项要求,但是不满足第三项要求的错误答案,此时猜对的概率为 2/32/32/3。

但PPP为了向VVV证明自己知道该数独的解,会和VVV重复该方案的承诺、挑战、回应挑战和验证,允许VVV在挑战阶段任意选择验证方式,如果出现任何一次验证错误则表示证明失败。

假设进行的nnn次过程都验证成功,那么PPP在不知道数独答案的条件下单次验证成功的概率最大为2/32/32/3(考虑 PPP 满足两项要求,但是不满足第三项要求的错误答案),所有验证都成功的概率为 (23)n(\frac{2}{3})^n(32​)n随着nnn的增大,这一概率趋近于000,而 PPP拥有正确答案的概率趋近于 111,表明 VVV 可以以大概率相信 PPP 拥有正确答案。

2.3 三染色问题的零知识证明

地图三染色问题:如何用三种颜色染色一个地图,保证任意两个相邻的地区都是不同的颜色。

该问题可转变成连通图的顶点三染色问题,即不同城市(节点)之间修建了一些道路(边),是否存在一种染色方式,使得每个城市都用特定的三种颜色之一表示,并且任意有道路相连的两个城市都不是相同颜色。

如图所示,证明者Alice拥有一个特地地图三染色的方案,希望在不泄漏任何信息的条件下向Bob证明自己拥有该方案。

在这里插入图片描述
(1)承诺

Alice将染色方案进行置换(蓝色->绿色,绿色->橙色,橙色->蓝色),然后将每个节点装入一个信封里,放在桌子上出示给Bob。

在这里插入图片描述
(2)挑战

Bob可以选择任意一条连边,要求Alice打开相邻两个节点的信封进行验证。

在这里插入图片描述
(3)回应挑战

Alice打开Bob指定的两个节点,作为对挑战的回应。
在这里插入图片描述

(4)验证

Bob验证结果:两节点颜色不同

重复以上过程
在这里插入图片描述

当重复交互很多次之后,Bob 得到了大量的信息,但没有得到关于染色方案的任何知识,却能够相信Alice拥有该方案。

2.4 Quisquater-Guillou 零知识协议

1990年,LouisC.Guillou 和 Jean-Jacques Quisquater 提出一种形象的基本零知证明协议的例子,该图表示一个迷宫,CCC与DDD之间有一道门,需知道秘密咒语才能打开。现在,证明者PPP希望向验证者VVV证明他拥有这道门的秘密语,但是PPP不愿意向 VVV泄露该咒语。PPP采用“分割与选择”(Cut-and-Choose)技术实现这一零知识协议。

在这里插入图片描述

  • (1)验证者VVV开始停留在位置AAA
  • (2)证明者PPP一直走到迷宫的深处,随机选择到位置CCC或位置DDD
  • (3)VVV看不到PPP后,走到位置BBB,然后命令PPP从某个出口返回BBB;
  • (4)PPP服从VVV的命令,要么原路返回至位置 BBB,要么使用秘密咒语打开门后到达位置BBB

上述协议中,若PPP不知道秘密咒语,就只能原路返回,而PPP第一次猜对VVV要求他一条路径的概率为0.50.50.5,第一轮协议PPP能够欺骗VVV的概率为0.50.50.5。

PPP和VVV重复上述步骤nnn次,PPP成功欺骗VVV的概率为1/2n1/2^n1/2n。假定n=20n=20n=20,则PPP成功欺骗VVV的概率为1/1048571/1048571/104857,如果PPP能够202020 次按VVV的要求返回,VVV即证明PPP确实知道秘密咒语。同时,VVV无法从上证明过程中获取任何关于PPP的秘密咒语的信息。

在这里插入图片描述

3. ElGamal加密的零知识证明

3.1 ElGamal加密的已知明文证明

对于 ElGamal加密方案的密文E(M)=(α,β)=(gr,yrM)E(M)=(\alpha, \beta)=\left(g^{r}, y^{r} M\right)E(M)=(α,β)=(gr,yrM) , 如果一个参与者知道了rrr, 则可非常方便地利用零知识证明来证明自己知道密文(α,β)(\alpha, \beta)(α,β) 所对应的明文 M , 这就是已知明文证明。

Schonorr提出参与者能够使用零知识证明的方法俩证明他知道一个rrr 使得α=gr\alpha=g^{r}α=gr 成立, 方法如下:

  • 步骤1: Alice 选择随机数zzz 发送 a′=gza^{\prime}=g^{z}a′=gz 至 Bob。
  • 步骤2: Bob 选择随机数 ccc 发送至 Alice。
  • 步骤3: Alice 发送 k=(z+cr)modqk=(z+c r) \bmod qk=(z+cr)modq 至 Bob。
  • 步骤4: Bob 验证 gk=a′αcg^{k}=a^{\prime} \alpha^{c}gk=a′αc 。

3.2 ElGamal加密的二选一零知识证明

Cramer 提出, Alice 对消息MMM 的 ElGamal 加密 (α,β)=(grmodp,yrMmodp)(\alpha, \beta)=\left(g^{r} \bmod p, y^{r} M \bmod p\right)(α,β)=(grmodp,yrMmodp)在不泄露 MMM 的前提下, 可以向其他人证明 M=7M=7M=7 或 M=ZM=ZM=Z, 步骤如下:

步骤 1 :

  • 若M=1M=1M=1 , Alice 选择随机数 r1,d1,wr_{1}, d_{1}, wr1​,d1​,w , 发送(α,β),a1=gr1αd1,b1=yr1(βz)d1,a2=gw,b2=yw(\alpha, \beta), a_{1}=g^{r_1} \alpha^{d_{1}}, b_{1}= y^{r_{1}}\left(\frac{\beta}{z}\right)^{d_{1}}, a_{2}=g^{w}, b_{2}=y^{w} (α,β),a1​=gr1​αd1​,b1​=yr1​(zβ​)d1​,a2​=gw,b2​=yw至 Bob;

  • 若M=ZM=ZM=Z , Alice 选择随机数 $r_{2}, d_{2}, w ,发送, 发送,发送(α,β),a1=gw,b1=yw,a2=gr2αd2,b2=yr2βd2(\alpha, \beta), a_{1}= g^{w}, b_{1}=y^{w}, a_{2}=g^{r_{2}} \alpha^{d_{2}}, b_{2}=y^{r_{2}} \beta^{d_{2}}(α,β),a1​=gw,b1​=yw,a2​=gr2​αd2​,b2​=yr2​βd2​$至 Bob。

步骤 2: Bob 发送随机数ccc 至 Alice。

步骤 3:

  • 若M=1M=1M=1 , Alice 发送 d1,d2=(c−d1)modp,r1,r2=(w−rd2)modpd_{1}, d_{2}=\left(c-d_{1}\right) \bmod p, r_{1}, r_{2}=\left(w-r d_{2}\right) \bmod pd1​,d2​=(c−d1​)modp,r1​,r2​=(w−rd2​)modp至 Bob;

  • 若M=ZM=ZM=Z , Alice 发送 d1=(c−d2)modp,d2,r1=(w−rd1)modp,r2d_{1}=\left(c-d_{2}\right) \bmod p, d_{2}, r_{1=}\left(w-r d_{1}\right) \bmod p, r_{2}d1​=(c−d2​)modp,d2​,r1=​(w−rd1​)modp,r2​ 至 Bob。

步骤 4: Bob 验证 c=(d1+d2)modp,a1=gr1αd1,b1=yr1(βz)d1,a2=gr2αd2,b2=yr2βd2c=(d_{1}+d_{2})\bmod p, a_{1}=g^{r_{1}} \alpha^{d_{1}}, b_{1}=y^{r_{1}}\left(\frac{\beta}{z}\right)^{d_{1}}, a_{2}=g^{r_{2}} \alpha^{d_{2}}, b_{2}= y^{r_{2}} \beta^{d_{2}}c=(d1​+d2​)modp,a1​=gr1​αd1​,b1​=yr1​(zβ​)d1​,a2​=gr2​αd2​,b2​=yr2​βd2​

3.3 ElGamal加密的1-out-of-N零知识证明

Alice 对消息mmm 的 ElGamal 加密 (α,β)=(grmodp,yrmmodp)(\alpha, \beta)=\left(g^{r} \bmod p, y^{r} m \bmod p\right)(α,β)=(grmodp,yrmmodp)

M=(m1,m2,…,mN)M= \left(m_{1}, m_{2}, \ldots, m_{N}\right)M=(m1​,m2​,…,mN​) 为明文集合 。m=mt,t∈[1,N]m=m_{t}, t \in[1, N]m=mt​,t∈[1,N],可以在不泄露mmm的情况下, 证明m∈Mm \in Mm∈M 。

假设 MMM 对应的其 ElGamal 加密的密文集合为 ((α1,β1),(α2,β2),…,(αN′βN))\left(\left(\alpha_{1}, \beta_{1}\right),\left(\alpha_{2}, \beta_{2}\right), \ldots,\left(\alpha_{N^{\prime}} \beta_{N}\right)\right)((α1​,β1​),(α2​,β2​),…,(αN′​βN​))其中(αi′βi)=(gkimodp,ykimimodp)\left(\alpha_{i^{\prime}} \beta_{i}\right)= \left(g^{k_{i}} \bmod p, y^{k_{i}} m_{i} \bmod p\right)(αi′​βi​)=(gki​modp,yki​mi​modp)

步骤 1:

Alice 选择随机数d1,d2,…,dN,r1,r2,…,rNd_{1}, d_{2}, \ldots, d_{N}, r_{1}, r_{2}, \ldots, r_{N}d1​,d2​,…,dN​,r1​,r2​,…,rN​ , 计算
ai=(αiα)di⋅gri,bi=(βiβ)di⋅yri,i=1,…,N,i≠t.a_{i}=\left(\frac{\alpha_{i}}{\alpha}\right)^{d_{i}} \cdot g^{r_{i}}, \quad b_{i}=\left(\frac{\beta_{i}}{\beta}\right)^{d_{i}} \cdot y^{r_{i}}, \quad i=1, \ldots, N,i \neq t . ai​=(ααi​​)di​⋅gri​,bi​=(ββi​​)di​⋅yri​,i=1,…,N,i=t.

at=gw,bt=ywa_{t}=g^{w}, b_{t}=y^{w}at​=gw,bt​=yw, 其中 w=(kt−r)dt+rtw=\left(k_{t}-r\right) d_{t}+r_{t}w=(kt​−r)dt​+rt​,并将(aibi),i=1,…,N\left(a_{i} b_{i}\right), i=1, \ldots, N(ai​bi​),i=1,…,N发送至 Bob。

步骤 2: Bob 发送随机数 ccc 至 Alice。

步骤 3: Alice 修改dtd_{t}dt​ 与 rtr_{t}rt​ , 使得 c=∑i=1Ndi,w=(kt−r)dt+rtc=\sum_{i=1}^{N} d_{i}, w=\left(k_{t}-r\right) d_{t}+r_{t}c=i=1∑N​di​,w=(kt​−r)dt​+rt​

然后将 d1,d2,…,dN,r1,r2,…,rNd_{1}, d_{2}, \ldots, d_{N}, r_{1}, r_{2}, \ldots, r_{N}d1​,d2​,…,dN​,r1​,r2​,…,rN​ 发送至 Bob。

步骤 4: Bob 验证 c=∑i=1Ndi,ai=(αiα)di⋅gri,bi=(βiβ)di⋅yri,i=1,…,Nc=\sum_{i=1}^{N} d_{i}, \quad a_{i}=\left(\frac{\alpha_{i}}{\alpha}\right)^{d_{i}} \cdot g^{r_{i}}, \quad b_{i}=\left(\frac{\beta_{i}}{\beta}\right)^{d_{i}} \cdot y^{r_{i}}, \quad i= 1, \ldots, Nc=i=1∑N​di​,ai​=(ααi​​)di​⋅gri​,bi​=(ββi​​)di​⋅yri​,i=1,…,N

4. 身份的零知识证明

一个安全的身份识别协议至少应满足以下两个条件:

  • 证明者PPP能够向验证者VVV证明他的确是PPP;
  • 在证明者PPP向验证者VVV证明他的身份后,验证者VVV不能获得关于PPP的任何有用信息,使得VVV不能冒充PPP向第三方证明VVV是PPP。

也就是说,PPP既能向VVV证明他的身份,又没有向VVV泄露PPP的识别信息,即安全的身份识别协议应满足零知识性和认证性。

4.1 Fiat-Shamir 身份识别协议

1986 年,A. Fiat与A. Shamir 提出了一种基于二次剩余根的身份识别协议,即Fiat-Shamir 身份识别协议。

1988 年,U.Feige、A.Fiat和 A.Shamir 把 Fiat-Shamir 身份识别协议改进为零知识证明的身份识别协议,即Feige-Fiat-Shamir身份识别协议,简称 F.F.S协议。该协议把“分割与选择”和“挑战与应答”的思想结合起来,其目的是证明者PPP向验证者VVV证明他的身份,且事后VVV不能冒充PPP。

协议描述

假定存在一个可信任的中心TA,该中心的唯一任务是选择形式为4r+34r+34r+3的两个大素数p、qp、qp、q,使得n=p×qn = p \times qn=p×q是难分解的,然后向其他人公布nnn(nnn为Blum 数)。TA任务完成后可被关闭或取消,因为它不再有其他的任务,但该中心不能泄露p、qp、qp、q的信息。

证明者PPP的秘密身份由kkk个数x1,...,xi,...,xkx_1,...,x_i,...,x_kx1​,...,xi​,...,xk​表示,其中1≤xi

  • PPP随机选择一个整数aaa,计算r≡±a2modnr \equiv \pm a^2 \bmod nr≡±a2modn并把其中一个值发送给VVV;

  • VVV从1,2,…,k{1,2,…,k}1,2,…,k中选择一子集e={e1,e2,...,ej}e=\{e_1,e_2,...,e_j\}e={e1​,e2​,...,ej​},然后将eee交给PPP;

  • PPP计算出Tx≡∏i=1jxeimodnT_x \equiv \prod_{i=1}^{j} x_{e_i} \bmod nTx​≡∏i=1j​xei​​modn,并将b≡aTxmodnb \equiv aT_x \bmod nb≡aTx​modn交给VVV;

  • VVV计算出Ty≡∏i=1jyeimodnT_y \equiv \prod_{i=1}^{j} y_{e_i} \bmod nTy​≡∏i=1j​yei​​modn,并验证r≡±b2Tymodnr \equiv \pm b^2 T_y \bmod nr≡±b2Ty​modn 是否成立;

若验证通过,则重复执行上述步骤;否则拒绝。

相关内容

热门资讯

【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
AWSElasticBeans... 在Dockerfile中手动配置nginx反向代理。例如,在Dockerfile中添加以下代码:FR...
AsusVivobook无法开... 首先,我们可以尝试重置BIOS(Basic Input/Output System)来解决这个问题。...
ASM贪吃蛇游戏-解决错误的问... 要解决ASM贪吃蛇游戏中的错误问题,你可以按照以下步骤进行:首先,确定错误的具体表现和问题所在。在贪...
月入8000+的steam搬砖... 大家好,我是阿阳 今天要给大家介绍的是 steam 游戏搬砖项目,目前...