5.6.5 代理签名
代理签名是通过指定的代理人(受委托人)来代替自己实施签名的技术,有时也称作委托签名。在这个签名方案中需要解决的主要问题是如何在不暴露自己私钥的情况下,使得代理人获得足够的能力来代替自己进行合法的签名。譬如,当你不在本地,而有一份重要的文件需要你即刻签署时,可以使用该协议来委托指定的代理人完成这份文件的签署。
代理签名可以从授权的权限上分为三类:完全授权方式、部分授权方式和许可证授权方式。完全授权方式是指委托人将自己所有的秘密参数都交给代理人,此时委托人和代理人不分彼此。部分授权方式是指委托人将自己的秘密参数进行某种变换后得到一个值,将此值交给代理人用于签名。当然通过这个变换值无法反算出委托人的私有参数。许可授权方式又可以分为两种:一种是授权代理签名,它表示委托人用自己的私钥按普通的数字签名方式签署一份文件(许可证)声明授权某人作为代理人代替自己签名;第二种是持票签名,委托人用自己的私钥签署一份文件(许可证),里面包含一个全新的公钥,而私钥则秘密交给代理人保存,代理人利用该私钥来代替委托人进行签名。
在此,主要介绍部分授权方式的代理签名方案。
委托人(原签名者)密钥的产生过程如下:
(1)选择一个大素数p,满足2511<p<2512,以及乘法群Z*p上的一个生成元g,公开(p,g)作为全局参数;
(2)选择秘密参数s,满足0<s<p-1,则公钥为v=gs mod p,私钥为s。
部分授权签名协议的过程如下:
(1)委托人产生参数k,满足0<k<p-1,则公钥为K=gk mod p,σ=s+k K mod(p-1);
(2)委托人将参数σ,K()发给代理人,从而授予代理人部分权力;
(3)代理人计算并比较gσmod p与v KK mod p是否相等,若相等,则表明自己得到了合法的授权,否则,授权不合法;
(4)代理人用σ进行签名Signσ,m(),K(
);
(5)接收方计算v′=v KK mod p,然后将v′看作公钥参数,进行普通的验证算法即可。
例5-12 利用小参数来举例说明代理人密钥的产生过程。假设委托人选择p=7,g=2,并选择秘密参数s=3,所以可以得到v=gs mod p=23 mod 7=1。
按照协议有:
(1)委托人产生参数k=2,满足0<k<p-1,则公钥为K=gk mod p=22 mod 7=4;σ=s+k K mod(p-1)=3+2×4 mod 6=5;
(2)委托人将参数5,4()发给代理人,从而授予代理人部分权力;
(3)代理人计算并比较gσmod p与v KK mod p是否相等。在此,有如下计算:
25 mod 7=4;1×44 mod 7=4
所以两者相等,表明自己得到了合法的授权。从而代理人可以用σ(为5)来进行签名。
代理签名一般具有以下特点。
(1)可区分性
代理人所进行的代理签名结果与委托人自己的签名结果是可以区分的。
(2)不可伪造性
只有委托人和代理人才能构造出合法的签名。
(3)代理签名的差异
由于代理签名和某个实体亲自的签名是可以区分的,因此代理人无法构造出一个无法辨别其代理身份的签名。
(4)可证实性
从代理的签名中,验证者可以相信委托人确实授权了该代理人签名权。
(5)可识别性
委托人能够从签名中识别出代理人的身份。
(6)不可抵赖性
代理人在合法签名后不能对该签名进行否认。