普通数字签名可以容易地进行复制,这对于公开声明、宣传广告等需要广泛散发的文件来说是方便的和有益的。但是对于需要保护知识产权的软件来说,却不希望容易地进行复制,否则其知识产权和经济利益将受到危害。例如,软件开发者可以利用不可否认签名对他们的软件进行保护,使得只有授权用户才能验证签名并得到软件开发者的售后服务,而非法复制者不能验证签名,从而不能得到软件的售后服务。Chaum和Van Antwerprn于1989年提出了不可否认签名的概念,它拓展了普通签名的概念,使签名者能够限制签名的验证权,即不可否认签名的验证必须在签名者的帮助下完成。这一性质有效地防止了签名者滥用签名,使得不可否认签名可以被应用到某些特殊的场合,如银行用户保险箱。
不可否认签名与普通数字签名最本质的不同在于,对于不可否认签名,在得不到签名者配合的情况下其他人不能正确进行签名验证,从而可以防止非法复制和扩散签名者所签署的文件。这对于保护软件等电子出版物的知识产权有积极意义。
一个不可否认的签名方案由三个部分组成:签名算法、验证协议以及否认协议。这里我们假设q和p是大素数,p是安全素数,即p=2q+1,有限域GF(p)的乘法群Z*p中的离散对数问题是困难的。α是Z*p中的一个q阶元素,a是Z*p中的一个元素,1≤a≤q-1。β=αa mod p,参数α和p可以公开,β为用户的公开钥,以a为用户的秘密钥,要由β求出a是求解有限城的离散对数问题,这是极困难的。
(1)签名算法
设待签名的消息为M,1≤M≤q-1,则用户的签名为
签名者把签名S发送给接收者。
(2)验证算法
①接收者接收签名S。
②接收者选择随机数e1、e2,1≤e1,e2≤p-1。
③接收者计算c,并把c发送给签名者。
④签名者计算
并把d发送给接收者。
⑤当且仅当
接收者认为S是一个真实的签名。
关于上述验证算法的合理性可简单证明如下。
因为β=αa mod p,b=a-1 mod q,所以有βb=αmod p。又因为S=Ma mod p,所以又有Sb=M mod p。把它们代入d=cb mod p=(Se1)b(βe2)b mod p可得
因为上述签名验证过程的第③和第④步需要签名者进行,所以没有签名者的参与,就不能验证签名的真伪。这正是不可否认签名的主要特点之一。(www.daowen.com)
现在我们简单说明,攻击者不能伪造签名而使接收者上当。假设攻击者在知道消息M而不知道签名者的秘密钥a的情况下,伪造一个假签名S′。那么以S′执行验证协议而使接收者认可的概率有多大呢?再假设在执行验证协议时,攻击者能够冒充签名者接收和发送消息,则这一问题变为攻击者成功猜测秘密钥a的概率,因为1≤a≤q-1,所以猜测成功的概率为1/(q-1),加上其他因素,伪造签名而使接收者认可的概率≤1/(q-1)。
(3)否认协议
对于不可否认签名,如果签名者不配合便不能正确进行签名验证,于是不诚实的签名者便有可能在对他不利时拒绝配合验证签名。为了避免这类事件,不可否认签名除了普通签名中的签名产生算法、验证签名算法外,还需要另一重要组成部分:否认协议(Disavowal Protocol)。签名者可利用执行否认协议向公众证明某一文件的签名是假的,反过来如果签名者不执行否认协议就表明签名是真实的。为了防止签名者否认自己的签名,必须执行否认协议。
①接收者选择随机数e1、e2,1≤e1,e2≤p-1。②接收者计算c,并把c发送给签名者。
③签名者计算
并把d发送给接收者。
④接收者验证d=Me1 de2 mod p。
⑤接收者选择随机数f1,f2,1≤f1,f2≤p-1。
⑥接收者计算C=Sf1βf2 mod p,并发送给签名者。
⑦接收者计算D=Cb mod p,并发送给签名者。
⑧接收者验证D=Mf1αf2 mod p。
⑨接收者宣布S为假,当且仅当
上述否认协议的①~④步实际上就是签名的验证协议。⑤~⑧步为否认进行数据准备,第⑨步进行综合判断。
执行上述否认协议可以证实以下两点:
①签名者可以证实接收者所提供的假签名确实是假的;
②接收者提供的真签名不可能(极小的成功概率)被签名者证实是假的。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。