零知识证明-概述性质数学困难问题与举例

零知识证明

概述:
  零知识证明(Zero—Knowledge Proof),是由S.Goldwasser、S.Micali及C.Rackoff在20世纪80年代初提出的。它指的是证明者能够在不向验证者提供任何有用的信息的情况下,使验证者相信某个论断是正确的。零知识证明实质上是一种涉及两方或更多方的协议,即两方或更多方完成一项任务所需采取的一系列步骤。证明者向验证者证明并使其相信自己知道或拥有某一消息,但证明过程不能向验证者泄漏任何关于被证明消息的信息。
  早在16世纪的文艺复兴时期,意大利有两位数学家为竞争一元三次方程求根公式发现者的桂冠,就采用了零知识证明的方法。当时,数学家塔尔塔里雅和菲奥都宣称自己掌握了这个求根公式,为了证明自己没有说谎,又不把公式的具体内容公布出来(可能在当时数学公式也是一种技术秘密),他们摆开了擂台:双方各出30个一元三次方程给对方解,谁能全部解出,就说明谁掌握了这个公式。比赛结果显示,塔尔塔里雅解出了菲奥出的全部30个方程,而菲奥一个也解不出。于是人们相信塔尔塔里雅是一元三次方程求根公式的真正发现者,虽然当时除了塔尔塔里雅外,谁也不知道这个公式到底是个什么样子。从这个故事,我们可以初步了解零知识证明的概念。

性质:
  (1)正确性。P无法欺骗V。换言之,若P不知道一个定理的证明方法,则P使V相信他会证明定理的概率很低。
  (2)完备性。V无法欺骗P。若P知道一个定理的证明方法,则P使V以绝对优势的概率相信他能证明。
  (3)零知识性。V无法获取任何额外的知识。

数学问题:
  零知识证明协议主要基于的几类数学问题,通常零知识证明协议所基于的数学问题类似于密码学中的公钥密码体制,都是主要基于如下几类数学问题的.

模n平方根问题
  设 n 是一个正整数,若存在一个x,使得 x2 ≡y (modn),则称 x 是 y 的模 n 平方根。其中:1 大整数分解问题
  大整数分解问题是指,给定两个素数 p,q,计算 乘积 pq=n 很容易;但是,反过来给定整数 n,求 n 的素因数 p,q 使得 n=pq 非常困难. 大整数的分解 问题至今还没有很好的快速分解的方法.在现有的 条件下,若 n 足够大,并且有时间的限制,则想要破 解大整数问题将是非常困难的.
离散对数问题
  离散对数问题指的是整数中一种基于同余运算和原根的对数运算,也可以按照如下方式进行简单描述:任意给定一个质数p,和有限域Zp上的一个本原元 a,对于有限域Zp上整数 b,可以找到唯一的一个整数 c,使 a^c≡(modp)成立.一般来说,如果选择p恰当,则得到该问题的解是困难的,且至今计算离散对数问题的多项式时间算法还没有找到。为了抵抗已知的攻击,p至少应该是150位的二进制整数,且p-1至少有一个大的素数因子。
举例:

1、A要向B证明自己拥有某个房间的钥匙,假设该房间只能用钥匙打开锁,而其他任何方法都打不开。这时有2个方法:
①A把钥匙出示给B,B用这把钥匙打开该房间的锁,从而证明A拥有该房间的正确的钥匙。
②B确定该房间内有某一物体,A用自己拥有的钥匙打开该房间的门,然后把物体拿出来出示给B,从而证明自己确实拥有该房间的钥匙。
后面的②方法属于零知识证明。它的好处在于,在整个证明的过程中,B始终不能看到钥匙的样子,从而避免了钥匙的泄露。
2、A拥有B的公钥,A没有见过B,而B见过A的照片,偶然一天两个人见面了,B认出了A,但A不能确定面前的人是否是B,这时B要向A证明自己是B,也有2个方法。
① B把自己的私钥给A,A用公钥对某个数据加密,然后用B的私钥解密,如果正确,则证明对方确实是B。
② A给出一个随机值,并使用B的公钥对其加密,然后将加密后的数据交给B,B用自己的私钥解密并展示给A,如果与A给出的随机值相同,则证明对方是B。
后面的方法属于零知识证明。
3、有一个缺口环形的长廊,出口和入口距离非常近(在目距之内),但走廊中间某处有一道只能用钥匙打开的门,A要向B证明自己拥有该门的钥匙。采用零知识证明,则B看着A从入口进入走廊,然后又从出口走出走廊,这时B没有得到任何关于这个钥匙的信息,但是完全可以证明A拥有钥匙。
4、该图表示一个简单的迷宫,只有知道秘密口令的人才能打开C 和D之间的密门。现在,P希望向V证明P能够打开此门,但是又不愿意向V泄漏P掌握的秘密口令。为此, P采用了所谓的“分隔与选择”技术实现一个零知识协议。

(1) V 站在A点。
(2) P 一直走到迷宫深处,随即选择C点或者D点。
(3) 在 P消失后,V走到B点。
(4) V 向 P 喊叫,要她:从左通道出来,或者从右通道出来。
(5) P答应了,如果有必要她就用秘密口令打开密门。
P 和 V重复第(1)至第(5)步 n 次。
在上述协议中,如果P不知道秘密口令,他只能从来路返回到B点,而不能走另外一条路。此外, P每一次猜对V要求他走哪一条路的概率是1/2。因此,每一轮协议P能够欺骗V的概率是1/2。执行n轮协议后,P成功欺骗V的概率是1/2n。嘉定n=16,则执行16轮协议后,P 成功欺骗V的概率是1/216=1/65536。于是,如果P能够16次按V的要求路线返回,V即能证明P确实知道秘密口令。同时,V无法从上述证明过程中获取丝毫有关P的秘密口令的消息。所以,这是一个零知识协议。
5、图的三色问题是指对任意简单(即没有平行边也无自回路)有限图,可用三种颜色为其着色,使得任意两个相邻顶点为不同的颜色。

在现实中,P很容易地向V证明他掌握一个三色图,
首先P请V离开房间,然后对图着色,并将图的每个顶点
盖起来,然后请V进来。V随机选图的一边,P将这个边2
个顶点的遮盖物去掉,V检查两个顶点的确为不同的颜色。
这一过程重复很多次,V最终将相信这个图是三色的。
在实际应用中,为了保证遮挡涂色,可用离散对数对色彩数值加密。
攻击:

1、象棋大师问题
一个有预谋的用户A想使其他人相信她是一个象棋高手,她可以通过这样的方法来实现:她找到两位世界顶尖级象棋界高手B和C,向他们提出挑战,并定于同一时间,在同一地点的不同房间和他们进行比赛。在比赛的过程中,每当B或C下一步棋,A就跑到隔壁的房间如法炮制,走同一步棋。也就是说,尽管B和C以为他们都在和A对弈,但实际的情况是B和C在彼此对弈。无论最后是B和C哪个赢,A总会是某一局棋的得胜者,从而向其他人证明她的确是一名象棋高手。该过程是对身份的零知识证明的一种攻击。
2、黑手党骗局
A正在B(黑手党)的餐厅吃饭。此时C(黑手党)按照计划来到一家D开的高档珠宝店买东西。B和C随时可以通过一条秘密的无线电线路保持联系,而A和D都对即将到来的骗局一无所知。
当A准备结账并对B证明其身份时,B立刻发信号给C让他准备行动,此时的C早已挑好了许多名贵珠宝,于是他向D证明他的身份。当D开始提问时,C用无线电把问题传给B,B则向A询问同样的问题,得到了答复后B再把答案通过无线电传给C。
知网论文:

1、 阿里巴巴的零知识证明 奥卡姆剃刀
2、 零知识证明协议研究 张引兵; 王慧
3、 ElGamal数字签名的零知识证明 高骥忠; 张海

你可能感兴趣的:(区块链,区块链,零知识证明,加密算法)