Alice要出示数字证书给Bob,那么她需要发送数字证书和CA的数字签名给Bob。为了防止重放攻击,她可以选择性地泄露一些信息,并用她的秘密密钥进行签名。
我们采用知识证明来进行数字签名,也就是说Alice必须向Bob证明她知道与公钥相对应的秘密密钥(x1,…,xl,α),其中,α∈Zq,g1,…,gl∈Gq。图6.8所示的协议中使用了不泄露Alice秘密密钥的知识证明。其中,∈RZq表示变量的选择是随机的,sign(h)表示CA的签名是基于数字证书公钥的,n是Bob的挑战,r1,…,rl+1表示Alice的响应。很容易看出如果Alice知道(x1,…,xl,α)并且遵循协议,那么就可以验证r1,…,rl+1成立。我们称α为初始证明。
图6.8 数字证书公钥的知识证明
在这个协议中,Bob不能计算Alice的秘密密钥以及任何h对应的秘密密钥。自己产生的。协议中挑战序列是很大的,冒充者需要相当长的时间才能攻破协议,但我们还是建议Alice的秘密密钥不要被泄露。
(2)如果Bob不知道所有xi的先验值,那么我们可以证明Alice的秘密密钥没有被泄露。也就是说,Bob不能获悉Alice在协议中使用的秘密密钥。我们已经知道h本身不会泄露信息,因此,如果在协议执行若干步后,Bob能够计算一个秘密密钥,这个密钥是Alice知道的密钥的可能性也不大。这就为Alice和Bob联合产生一个数字证书公钥提供了一种方法,即他们可以拥有多个秘密密钥。(www.daowen.com)
为了把知识证明转化成Alice的数字签名,挑战是由虚拟的验证者(Bob)实施。Alice设置c:=H(h,a,m),H()是公开的强单向Hash函数,m是能够防止Bob的重放攻击的任意消息,H()的输出小于q。我们假设可以找到H()的碰撞。元组(a,r1,…,rl+1)是Alice对消息m的数字签名。协议如图6.9所示,因为Alice的数字签名基于知识证明,所以我们称它为签名证明。
图6.9 Alice对Bob的消息m的数字签名
形成c时,a被Hash了,这是为了保证不能在c的基础上构造a。用数字证书公钥h产生数字签名的唯一方法是知道秘密密钥,而这通过分析以前产生的数字签名是无法得到的,这样就防止了重放攻击。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。