Feige-Fiat-Shamir零知识身份认证

一.零知识证明

零知识证明(Zero—Knowledge Proof),是由S.Goldwasser、S.Micali及C.Rackoff在20世纪80年代初提出的。它指的是证明者能够在不向验证者提供任何有用的信息的情况下,使验证者相信某个论断是正确的。零知识证明实质上是一种涉及两方或更多方的协议,即两方或更多方完成一项任务所需采取的一系列步骤。零知识证明必须包括两个方面,一方为证明者P,另一方为验证者V。证明者试图向验证者证明某个论断是正确的,或者证明者拥有某个知识,却不向验证者透露任何有用的消息。零知识证明目前在密码学中得到了广泛的应用,尤其是在认证协议、数字签名方面。

举个例子:A要向B证明自己拥有某个房间的钥匙,假设该房间只能用钥匙打开锁,而其他任何方法都打不开。这时有2个方法:(一)A把钥匙出示给B,B用这把钥匙打开该房间的锁,从而证明A拥有该房间的正确的钥匙。(二)B确定该房间内有某一物体,A用自己拥有的钥匙打开该房间的门,然后把物体拿出来出示给B,从而证明自己确实拥有该房间的钥匙。后面这个方法属于零知识证明。好处在于在整个证明的过程中,B始终不能看到钥匙的样子,从而避免了钥匙的泄露。

对于零知识证明的介绍有个有、意思的帖子,若有兴趣请移步《一个数独引发的惨案:零知识证明(Zero-Knowledge Proof)》。在Goldwasser等人提出的零知识证明中,证明者和验证者之间必须进行交互,这样的零知识证明被称为“交互零知识证明”。80年代末,Blum等人进一步提出了“非交互零知识证明”的概念,用一个短随机串代替交互过程并实现了零知识证明。非交互零知识证明的一个重要应用场合是需要执行大量密码协议的大型网络。接下来要讲的Feige-Fiat-Shamir协议会以交互式的角度来进行。

二.Feige-Fiat-Shamir零知识身份认证

从实用角度考虑,要保证用户身份识别的安全性,身份识别协议至少要满足以下条件:

  1. 识别者A能够向验证者B证明他的确是A(A向B证明自己有A的私钥)。
  2. 在识别者A向验证者B证明他的身份后,验证者B没有获得任何有用的信息,B不能模仿A向第三方证明他是A 。

1986年,Feige,Fiat 和 Shamir基于零知识的思想设计了一个零知识身份识别协议,这就是著名的 Feige-Fiat-Shamir 零知识身份识别协议。该协议的目的是证明者P向验证者V证明他的身份(私钥),且事后V不能冒充P。

先从简化版本的Feige-Fiat-Shamir 零知识身份识别协议谈起:

在发放私人密钥之前,仲裁方随机选取一个模数n,n为两个大素数之积。实际中,n应至少为 512 位长,尽量接近 1024 位。n值可在一组证明者之间共享。

证明者P的公私钥生成方法如下:

在这里插入图片描述

公钥v与私钥s间满足的关系是什么,你能看出来吗?
身份鉴别协议如下:

在这里插入图片描述

简要分析:

在这里插入图片描述

完整版本的Feige-Fiat-Shamir 零知识身份识别协议如下:

在这里插入图片描述

简要分析:

现在证明者P有k个公私密钥对(向量),公钥组(v1,v2,…vk)与与其对应的私钥组(s1,s2,…sk)。简化版本其实是k=1的情况。这样P欺骗V一次的概率为1/2k,欺骗t次的概率为1/2kt

Reference:https://wenku.baidu.com/view/5d9a0076376baf1ffc4fada0.html

猜你喜欢

转载自blog.csdn.net/weixin_43255133/article/details/83513411