现代密码学(五)——零知识证明

       零知识证明(Zero—Knowledge Proof),是由S.Goldwasser、S.Micali及C.Rackoff在20世纪80年代初提出的。它指的是证明者能够在不向验证者提供任何有用的信息的情况下,使验证者相信某个论断是正确的。零知识证明实质上是一种涉及两方或更多方的协议,即两方或更多方完成一项任务所需采取的一系列步骤。证明者向验证者证明并使其相信自己知道或拥有某一消息,但证明过程不能向验证者泄漏任何关于被证明消息的信息。大量事实证明,零知识证明在密码学中非常有用。如果能够将零知识证明用于验证,将可以有效解决许多问题。

 

最小泄露协议中零知识证明需要满足下述两个性质:

(1)正确性。P(示证者)无法欺骗V(验证者)。换言之,若P不知道一个定理的证明方法,则P使V相信他会证明定理的概率很低。

(2)完备性。V无法欺骗P。若P知道一个定理的证明方法,则P使V以绝对优势的概率相信他能证明。

在零知识协议中,除满足上述两个条件以外,还满足下述的第三个性质。

(3)零知识性。V无法获取任何额外的知识。

我们把性质(1)和(2)称为零知识证明的正确性和完备性,而性质(3)称为零知识性。

 

零知识证明分为交互式零知识证明非交互式零知识证明:

交互式零知识证明:

        V向P提问,若P知道证明则可正确回答V的提学问;若P不知道证明,则对提问给出正确回答概率仅为1/2。V以足够多的提问就可推定P是否知道证明,且要保证这些提问及其相应的回答不会泄露出有关P所知道的知识。

非交互式零知识证明:

       非交互式的证明则不需要这种互动。但是会额外需要一些机器或者程序,并且需要一串试验序列,这个试验序列不能被任何人知道。有了这么一个程序和试验序列,证明机就能自动算出一个证明,并且能防止任何一方作假。

       对于非交互式零知识证明,示证者可以公布证明,任何人可以花时间检验该证明的正确性,而交互式只能验证在交互时是正确的。

 

零知识证明的基本协议:

 设P知道咒语,可以打开C和D之间的机关门,不知道者将走向死胡同中。

1)V站在A点;

2)P进入洞中任意一点C或D;

3)当P进洞之后,V走到B点;

4)V叫P:(a)从左边出来,或(b)从右边出来;

5)P按要求实现(以咒语,即解数学难题);

6)P和V重复执行(1)~(5)共n次。

     若P不知道咒语,则只有50%的概率猜中V的要求,协议执行n次,则只有2^{-n}的机会完全猜中。

 

另一种形式:

1)P用其信息和某种随机数将难题转成另一种难题,且与原来的同构,A可用其信息和随机数解新的难题;

2)P想出新的难题的解;

3)P将新难题出示给V,但V不能由此新难题得到有关原问题或其解;

4)V向P提下述问题之一:(a)向V证明老和新问题是同构的,(b)公开(2)中的解,并明它是新难题的解;

5)P按V的要求执行;

6)P和V重复执行(1)~(6)共n次。

       必须仔细选择适当问题和随机信息,使V即使重复执行多次协议也得不到有关原问题的任何信息。并非所有的“难题”都可用于零知识证明,但有不少可用于此。

 

用基于离散对数问题构造零知识证明:

公钥:(g,y,n),且y = g^x mod n,P要向V证明他拥有私钥x,但并不像让V知道私钥x的任何信息;

1)V选择一个随机数k,并计算a = g^k mod n,并将a发送给P;

2)P收到之后,计算b = a^x = (g^k)^x mod n,将b发送给V;

3)V收到之后,计算c = y^a = (g^k)^x mod n,判断c = b是否成立;

4)重复(1)~(3)n次。

这个的安全性依赖于解决离散对数问题的困难性。

 

  • 1
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值