摘要:计算机和网络技术的迅猛发展使信息化成为现实的同时,也引入了信息安全问题。数字签名技术在身份认证、数据完整性等方面具有其它技术所无法替代的作用,在信息安全领域得到广泛的应用。本文先介绍了数字签名技术的相关背景,接着系统介绍了数字签名的原理及其相关技术,最后通过数字签名的实现例子使读者能深刻理解其实现原理和过程。
关键词:数字签名;加密技术;认证安全
中***分类号:TP309.7文献标识码:A文章编号:1009-3044(2009)14-3638-03
The Principle and Implement for Digital Signature
LI Sha, ZOU Yong-jun
(Shanxi Radio & TV University, Xi'an 710068, China)
Abstract: The information era has arrived with the quick development of computer and network technologies. Thus, the security problem of information has become the fundamental matter. The digital signatures have many applications in a lot of field for it cannot be substituted by other techniques in information security, including authentication, data integrity, and non-repudiation.
First, this paper introduces the research background of the digital signature. Then it introduces systematically the principle of the digital signature and relevant technology. At last, it demonstrated an simulation to understand the course of the digital signature more profound.
Key words: digital signature; encrypt technologies; certification security
1 引言
一直以来,人们对纸质文件主要是通过手写签名或印章来验证其有效性。但随着IT技术的发展,电子文档将逐步代替纸质的文件成为信息交流的主体。证明某一个电子文件是某作者所作的有效办法是模拟普通的手写签名在电子文档上进行电子签名,作者可以通过数字签名表明目己的身份,读者可以通过数字签名验证作者的身份。
电子邮件是互联网上最重要的应用之一,传统的电子邮件都是明文传输,并且发送方可以轻松地伪造自己的身份。随着电子邮件的应用扩展到各种信息敏感领域,电子邮件的内容保密和发送方身份确认的重要性便逐步凸现出来。数字签名能很好地解决电子邮件的身份确认问题。
电子商务是互联网上发展最快的应用方向,而重要的商务信息具有敏感性和保密性,所以通常的商务信息在传输中要进行加密,同时,为了进一步防止欺骗性的篡改,数字签名是必不可少的。
2 数字签名原理及作用
数字签名是指附加在数据单元上的一些数据,或是对数据单元所作的密码变换,这种数据或变换能使数据单元的接收者确认数据单元的来源和数据的完整性,并保护数据,防止被人进行伪造。签名机制的本质特征是该签名只有通过签名者的私有信息才能产生,也就是说,一个签名者的签名只能唯一地由他自己产生。
数字签名方案由签署算法和验证算法组成,可以用五元组[P,A,K,S,V]表示。其中,P表示一切可能的消息;A表示一切可能的签名集合;K表示有限密钥空间;S表示签名算法;V表示验证算法。
签署流程:对于给定的k,有Sigk∈S,Sigk:P->A,对于任意x∈P,有s=Sigk(x),其中(x,s)发给签名验证者。
验证流程:验证方有验证算法Verk,V满足Verk:P->{真,假};收到(x,s)后计算Verk(x,y),若y=Sigk(x),则Verk(x,y)为真,否则为假。
其中:任意k∈K,Sigk和Verk多项式时间函数;Verk为公开的函数,Sigk为私密函数。
公钥体系加密和数字签名的差异:
1) 公钥加密,发送方用接收方的公钥进行信息加密;接收方用其私钥进行信息解密;
2) 数字签名:发送方用其私钥对信息进行加密;接收方用发送方的公钥进行信息解密,从而确认信息的发送者身份。
数字签名提供了一种安全的保障数据完整性和真实性的机制,可以检验数据从数据源到目的地的传输过程中是否被篡改以及数据的真实来源。因此,它能够下面的问题:
1) 身份认证:收方通过发送方的数字签名确认发送方的身份;
2) 保密性:保证信息不被第三方知晓;
3) 完整性:保证信息无法被篡改;
4) 不可抵赖:签发人一旦签发,就不能再否认。
3 签名算法
由于公钥体系受计算速度的制约,直接使用公钥体制对大文件进行数字签名是不可行的,通常的办法是引入摘要函数(如Hash函数、散列函数),下面对几种常用数字签名算法进行论述并比较。
1) RSA数字签名算法
产生签名与验证参数:
a) 签名人A选择两个大素数p、q,计算n=pq及fi(n)=(p-1)(q-1);
b) 寻找e、d属于Zn使满足(e,fi(n)=1及ed=1(mod fi(n));
c) 公开验证参数{n,e}, A保存{p,q,d,fi(n)}作为秘密的签名参数;
d) 选用一通用的散列函数h( )。
签名算法:
a) A将需签名的文件m(含接收人、内容、签名人、日期等)编码后映射成h(m);
b) 计算c1=(h(m))的d次方 mod p, c2=(h(m))的d次方mod q及签名Sa(m)=(c1q1q+c2p1p) mod n,其中q1q=1 mod p,p1p=1 mod q;
c) 将{m, Sa(m)}发送至文件接收人B或仲裁人T(A、 B、T的含义下同)。
验证算法:
B(或T)检验(Sa(m))的e次方=h(m) mod n是否成立,若成立则接收此文件及签名,否则拒绝接收或宣布无效。
2) Rabin数字签名算法
产生签名与验证参数:
a) A选择两个大素数p、q,并计算n=pq;
b) 公开验证参数n,A保存{p,q}作为秘密的签名参数;
c) 选用一通用的散列函数h()。
签名算法:
a) A将需签名的文件m编码后映射成h(m),选取a=bh(m)使满足(a/p)=(b/q)=1, b属于{1,-1,2,-2},其中(/)为Legendre符号;
b) 计算c1=+a的(p+1)/4次方mod p,c2=+a的(q+1)/4次方mod q及签名Sa(m)=(c1q1q+c2p1p) mod n。其中c1、c2固定一种取法,p1、p2满足q1q=1 mod p,p1p= 1 mod q;
c) 将{m,Sa(m),b}发送至B或T。
验证算法:
B(或T)检验(Sa(m))的二次方=bh(m) mod n是否成立,若成立则接收此文件及签名,否则拒绝接收或宣布无效。
3) DSS数字签名算法
产生签名与验证参数:
a) A选择一个大素数p, p-1应具有大素数因子q,选择一个g属于Zp使g的次数为q,选择一个x属于Zp,并计算y=g的x次方mod p;
b) 公开验证参数{p,q,g,y), A保存{x}作为秘密的签名参数;
c) 选用一通用的散列函数h()。
签名算法:
a) A将需签名的文件m编码后映射成h(m),任意选择k属于Zp,计算k的-1次方使k的-1次方k=1 mod q;
b) 计算r=(g的k次方mod p) mod q及s=k的-1次方(h(m)+xr) mod q;
c) 将{m,r,s)发送至B或T。
验证算法:
a) B(或T)先计算u=h(m)s的-1次方 mod q及v=rs的-1 次方mod q;
b) 检验(g的u次方y的v次方mod p) mod q=r是否成立,若成立则接收此文件及签名,否则拒绝接收或宣布无效。
4 数字签名的实现
利用微软的数字签名工具可以实现测试版本的数字签名,对正式对外颁发的软件进行数字签名首先要向证书颁发机构提出请求并获得软件发行证书。为此,必须生成一个密匙对并向证书颁发机构提供标识信息(如名字、地址和公匙),同时还必须作出在法律上具有约束力的保证,保证不能也不会分发含有病毒或将以其他方式恶意损害用户的计算机或代码的软件。
在命令行模式下,微软数字签名工具使用方法如下:
1) 创建用于数字签名的公钥和私钥对,并将其存储在证书文件中。
输入命令 “makecert -sv Test.pvk -n "CN=Tester" -ss My -r -b 01/01/1900 -e 01/01/9999”
其中:
-sv Test.pvk私匙文件名 Test.pvk;
-n "CN= Tester "其中的" Tester "就是签名中显示的证书所有人的名字;
-ss My指定生成后的证书保存在个人证书中;
-r证书是自己颁发给自己的;
-b/-e 证书的有效期,格式为 月/日/年,最低为1900年;
2) 创建发行者证书 (SPC)
输入命令:“cert2spc c:test.cer c:test.spc”,在C:盘生成证书文件
发行者证书测试工具通过一个或多个 X.509 证书创建发行者证书 (SPC)。Cert2spc.exe 仅用于测试目的。可以从证书颁发机构(如 VeriSign 或 Thawte)获得有效的 SPC。
3) 对文件进行签名
输入命令:“signcode /spc c:test.spc /k TEST c:Test.exe”,已经成功对Test.exe文件签名。可以通过文件的属性查看数字签名。
5 结束语
本文首先简要介绍了数字签名的原理、过程及相关技术,在此基础上介绍了微软数字签名工具的使用并实现签名系统。随着Internet技术和安全技术的发展和完善,数字签名作为信息安全的一项重要技术将得到越来越广泛的应用。
参考文献:
[1] 张先红.数字签名原理及技术[M].北京:机械工业出版社,2004.
[2] 王尚平,王育民,张亚玲,等.基于DSA及RSA的证实数字签名方案[J].软件学报,2003,14(3):588.
[3] Stallings W.密码编码学与网络安全:原理与实践[M].3版.北京:电子工业出版社,2004.
[4] Atreya M.数字签名[M].贺***,译.北京:清华大学出版社,2003.