5.6.2 不可否认签名
不可否认签名最先由Chaum和Antwerpen提出,同时还提出了拒绝协议(Disavowal Protocol)。不可否认签名的本质是:若要验证签名的有效性,必须签名者参与,否则验证将无法进行。利用该签名方案,可以在一定程度上防止由某一实体签署的文件被任意复制和散布,从而保护该实体的合法权益。该特性在版权保护方面有着比较重要的作用。例如,某著名咨询公司A发布了一份研究报告,然后将该报告签名后卖给另一实体B,而实体B打算将其拷贝版卖给第三方C。在这种情况下,没有A的参与,C就无法验证签名的有效性,从而无法判断该报告是否真实。
在该签名方案中,签名的验证必须要签名者参与,这一特性既是该方案的优点,又是缺点。例如,签名确实出自某实体,但他却拒绝合作来验证签名,从而导致签名的有效性无法证实。为了防范这一情况,可以在第三方的监督下采用拒绝协议以验证签名的真假。如果该实体不愿参加拒绝协议,那么可以认为该签名就是他的;如果签名不是该实体的,则通过拒绝协议可以确认他没有签署过该文件。
下面将详细介绍不可否认签名方案的实施过程以及拒绝协议的实施过程。首先介绍不可否认签名方案。
1.发送方密钥的生成
(1)随机产生两个不同的大素数p、q,且p=2q+1,在中构造一个q阶的乘法子群G,g为
的一个生成元;
(2)用户的私钥为x,且满足1≤x≤q-1;
(3)用户的公钥为y,y=gx mod p。
2.签名过程
对消息m的签名为s=mx mod p。
3.验证过程
(1)显然,没有签名者的配合,签名接收者无法验证签名的有效性。在签名者的配合下,验证签名的过程如下。
①接收者收到消息和签名(m,s)后,选择两个随机数a和b,0≤a≤p,0≤b≤p;
②计算c=sa(gx)b mod p,然后将c发送给签名者;
③签名者计算,将d发送给签名接收者;
④接收者验证等式d=magb mod p是否成立。若成立,签名有效,否则签名无效。
(2)若签名者拒绝合法的验证过程,则需要启用拒绝协议进行验证。拒绝协议的实施过程如下。
①签名接收者选择随机数a和b,0≤a≤p,0≤b≤p;
②签名接收者计算c=sayb mod p,然后将c发送给签名者;
③签名者计算,然后将d发送给签名接收者;
④接收者验证d=magb mod p,若成立,则说明该签名有效,终止协议;
⑤签名接收者选择随机数i和j,0≤i≤p,0≤j≤p;
⑥签名接收者计算C=siyj mod p,然后将C发送给签名者;
⑦签名者计算,然后将D发送给签名接收者;
⑧接收者验证D=migj mod p,若成立,则说明该签名有效,终止协议;
⑨若成立,则接收者可以判定签名s是伪造的,否则,签名有效,只是签名者故意拒绝签名。
拒绝协议的实施过程如图5-6所示。签名者可以以四种行为(理由)拒绝签名。
图5-6 拒绝协议的实施过程
行为一:拒绝参与验证算法。显然这种做法可以被视为明显的抵赖,因此可以判定签名是有效的。
行为二:成功执行验证协议,但还声称签名是伪造的。
行为三:签名确实是伪造的。
行为四:故意错误执行验证协议。
拒绝协议总体来讲可以实现对行为二、三以及四的防范。对于行为二,只要能够正确执行验证协议,若签名为真,则在拒绝协议实施的第④步就停止了,从而确定签名是真实有效的(而不管签名者如何声称它的真伪);对于行为三,若正确地执行了验证协议,且签名为真,则在拒绝协议的第④步或者第⑧步就停止了,而现在却执行到了第⑨步,并且通过了该步骤的验证,因此可以判定收发双方都正确执行了拒绝协议,只是该签名是伪造的;对于行为三,如果拒绝协议执行到了第⑨步,且无法通过该步骤的验证,则可以证明,签名者故意否认他的签名,因此需要在验证过程中采取行动,错误执行某些步骤。例如,不遵守步骤③和⑦,则有
在这种情况下通过步骤⑨是很难的,即不满足的概率为(1-1/p)。
请注意,步骤⑨最主要的作用是验证收发双方是否正确执行了拒绝协议。因为只要遵循协议,无论签名是否为真,都有。关于签名真伪的鉴别关键步骤在第④步和第⑧步。若签名为假,则第④和第⑧步都不会停止,从而执行到第⑨步。
例5-9 假如签名者的参数选择为q=3,p=7,g=2,x=2,传递的消息m=2,则y=gx mod p=4;正确的签名为s=mx mod p=22 mod 7=4。
若签名者正确进行签名,则接收方接收到的消息和签名为(2,5)。根据接收到的这个信息,执行拒绝协议:
①签名接收者选择随机数a=1和b=2;
②签名接收者计算c=sayb mod p=41×42 mod 7=1,然后将c=1发送给签名者;
③签名者计算,然后将d=1发送给签名接收者;
④接收者验证d=magb mod p=21×22 mod 7=1,若成立,则说明该签名有效,终止协议。
若签名是伪造的,假设此时签名为5,则拒绝协议的执行过程如下:
①签名接收者选择随机数a=1和b=2;
②签名接收者计算c=sayb mod p=41×42 mod 7,然后将c发送给签名者;
③签名者计算,然后将d发送给签名接收者;
④签名接收者验证d≠magb mod p=21×22 mod 7=1,所以还要进行第⑤步及以下步骤;
⑤签名接收者选择随机数i=2和j=2;
⑥签名接收者计算C=siyj mod p=42×42 mod 7,然后将C发送给签名者;
⑦签名者计算,然后将D发送给签名接收者;
⑧接收者验证D≠migj mod p=22×22 mod 7=2;
⑨由于(dg-b)i=[(4×42)1/2×2-2]2 mod 7=52 mod 7
(Dg-j)a=[(42×42)1/2×2-2]1 mod 7=52 mod 7
所以(dg-b)i=(Dg-j)a mod p成立,因此接收者可以判定签名s=5是伪造的。至于签名者故意错误执行第③步或者第⑦步,情况比较多而且相对来说比较简单,在此就不举例说明了。