电子商务是建立在一个开放式的Internet上,维护商业机密是电子商务获得全面推广应用的重要保障。保证电子商务各方信息的完整性是电子商务应用的基础。数字签名技术可以实现数据的完整性、身份认证性、不可抵赖性。贸易双方的如何确定要进行交易的贸易方正是进行交易所期望的贸易方这一问题也可通过数字签名来实现。而数字签名技术本身的安全性则由密码技术来保证。
公钥密码体制的思想是在1976年由Diffie和Hellman提出。公钥密码体制的想法是:可以找到一种密码体制,使由给定的ek来求dk是计算不可行的。如果可以的话,加密规则ek是一个公钥,可以在一个目录中发布(这就是公钥体制名称的由来)。
1977年由Rivest、Shamir和Adleman发明的著名的RSA密码体制就是公钥体制的一种典型代表。其优点是甲可以利用公钥加密规则ek发出一条加密的消息给乙,而不需要预先共享密钥的通信。乙将是唯一能够利用dk(私钥)来对密文解密的人。乙可以让任何人发布他的公钥,任何人用公钥将数据加密后在网络中传输,即使在传输过程中被别人截获同时这人也拥有乙的公钥,也无法利用这些资料来破译加密数据:而只有乙通过私钥才能顺利解密密文。这样便能实现数据的安全传输。
1.RSA算法简介
RSA是第一个既能用于数据加密也能用于数字签名的算法。它易于理解和操作,也很流行。
1.1 RSA算法的表述:
(1) 寻找两个大素数:p和q。为了提高安全性,两个素数的长度要求一样。并计算出其乘积N(N=p*q)。
(2) 随后计算出N 的欧拉函数φ(N)=(p-1)(q-1),φ(N)定义为不超过N并与N互素的数的个数。
(3) 从[0,φ(N)-1]中随机选取加密密钥e,使得e和φ(N)互为素数。
(4) 计算出满足公式e×d = 1modφ(N)中的d,d为解密密钥。
(5) 若用整数X表示明文,整数Y表示密文(X,Y均小于N),则加解密运算为:
加密:Y=Xe mod N
解密:X=Yd mod N
其中的d和N也互素、e和N是公开密钥、d和N是秘密密钥。两个素数p和q应舍弃,但不能泄密。 1.2 RSA实现的安全性和效率
RSA是被研究得最广泛的公钥算法,从提出到现在已近二十年,经历了各种攻击的考验,逐渐为人们接受,普遍认为是目前最优秀的公钥方案之一。RSA的安全性依赖于大数的因子分解。下表给出了在计算机每一微秒做一次操作的假定下分解不同大小的N所需要的时间:
N的十进位数 时间
50 3.9小时
5 104天
100 4年
200 3.8×1015年
RSA的缺点主要有:A)产生密钥很麻烦,受到素数产生技术的限制,因而难以做到一次一密。B)分组长度太大,为保证安全性,n至少也要 600bits以上,使运算代价很高,尤其是速度较慢,较对称密码算法(如DES)慢几个数量级;且随着大数分解技术的发展,这个长度还在增加,不利于数据格式的标准化。目前,SET(Secure Electronic Transaction)协议中要求CA采用2048比特长的密钥,其他实体使用1024比特的密钥.
2.RSA数字签名体制
2.1数字签名(Digital Signature)
对文件进行加密只解决了传送信息的保密问题,而防止他人对传输的文件进行破坏,以及如何确定发信人的身份还需要采取其它的手段,这一手段就是数字签名(Digital Signature)。在电子商务安全保密系统中,数字签名技术有着特别重要的地位,在电子商务安全服务中的源鉴别、完整性服务、不可否认服务中,都要用到数字签名技术。在电子商务中,完善的数字签名应具备签字方不能抵赖、他人不能伪造、在公证人面前能够验证真伪的能力。
目前的数字签名是建立在公共密钥体制基础上,它是公用密钥加密技术的另一类应用。它的主要方式是,报文的发送方从报文文本中生成一个128位的散列值(或报文摘要)。发送方用自己的私人密钥对这个散列值进行加密来形成发送方的数字签名。然后,这个数字签名将作为报文的附件和报文一起发送给报文的接收方。报文的接收方首先从接收到的原始报文中计算出128位的散列值(或报文摘要),接着再用发送方的公用密钥来对报文附加的数字签名进行解密。如果两个散列值相同、那么接收方就能确认该数字签名是发送方的。通过数字签名能够实现对原始报文的鉴别。
数字签名与书面文件签名有相同之处,采用数字签名,也能确认以下两点:第一,信息是由签名者发送的;第二,信息自签发后到收到为止未曾作过任何修改。这样数字签名就可用来防止电子信息因易被修改而有人作伪,或冒用别人名义发送信息。或发出(收到)信件后又加以否认等情况发生。
应用广泛的数字签名方法主要有三种,即:RSA签名、DSS签名和Hash签名。这三种算法可单独使用,也可综合在一起使用。数字签名是通过密码算法对数据进行加、解密变换实现的,用DES算法、RSA算法都可实现数字签名。
2.2 RSA数字签名体制
RSA算法中数字签名技术实际上是通过一个Hash函数来实现的。数字签名的特点是它代表了文件的特征,文件如果发生改变,数字签名的值也将发生变化。不同的文件将得到不同的数字签名。一个最简单的Hash函数是把文件的二进制码相累加,取最后的若干位。Hash函数对发送数据的双方都是公开的。
只有加入数字签名及验证才能真正实现在公开网络上的安全传输。加入数字签名和验证的文件传输过程如下:
(1) 发送方首先用Hash函数从原文得到数字签名,然后采用公开密钥体系用发达方的私有密钥对数字签名进行加密,并把加密后的数字签名附加在要发送的原文后面;
(2) 发送一方选择一个秘密密钥对文件进行加密,并把加密后的文件通过网络传输到接收方;
(3) 发送方用接收方的公开密钥对密秘密钥进行加密,并通过网络把加密后的秘密密钥传输到接收方;
(4) 接受方使用自己的私有密钥对密钥信息进行解密,得到秘密密钥的明文;
(5) 接收方用秘密密钥对文件进行解密,得到经过加密的数字签名;
(6) 接收方用发送方的公开密钥对数字签名进行解密,得到数字签名的明文;
(7) 接收方用得到的明文和Hash函数重新计算数字签名,并与解密后的数字签名进行对比。如果两个数字签名是相同的,说明文件在传输过程中没有被破坏。
如果第三方冒充发送方发出了一个文件,因为接收方在对数字签名进行解密时使用的是发送方的公开密钥,只要第三方不知道发送方的私有密钥,解密出来的数字签名和经过计算的数字签名必然是不相同的。这就提供了一个安全的确认发送方身份的方法。
2.3 RSA数字签名体制的基本算法表述
(1)体制参数
假设用户甲使用如下的参数:
大合数n=p1*p2,其中p1和p2是大素数;
用户甲将公开模数n和公钥e,而将p1,p2与私钥d严格保密。
(2)签名算法
假设用户甲对数据M∈Zn进行签名,计算
S=Sig(M)=Md mod n
并将S作为用户甲对数据M的数字签名附在数据M后。

(3)验证算法
假设用户乙需要验证用户甲对数据M的签名S,用户乙计算M’=Sdmod n并判断M’是否等于M,如果M’=M,则说明签名S确实是用户甲所产生的,否则,签名S可能是由攻击者伪造生成的。
完整地,验证算法可以表述如下:
Ver(M,S)=(M=Sdmod n) true:false
如果(M=Sdmod n )为真,则表达式的值为true,否则表达式的值为false。
(4)实现过程
RSA数字签名体制的实现过程如图1所示。发送方用户甲发送报文M时,先用自己的私钥d1对报文进行加密,产生密文d1(M);再用接收方用户乙的公钥e2进行第二次加密,产生密文e2(d1(M))。接收方用户乙收到密文后,先用自己的私钥d2进行第一次解密,还原出密文d1(M),即d2(e2(d1(M)))=d1(M);再用发送方用户甲的公钥e1进行第二次解密,得到明文P,即e1(d1(M))=M。
RSA数字签名体制必须同时使用收。发双方的私钥d1和公钥e1才能获得原文(明文),也才能完成发送方的身份认证和接收方无法伪造或篡改报文的功能。因为只有发送方才有其私钥d1,所以,只要能用其公钥e1还原,发送方就无法否认所发送的报文。
3. 一种将DES算法和RSA算法结合起来的数据加密和数字签名协议
实现数字签名也可以用一种数据加密的对称体制与非对称体制结合的方法。
假设有甲和乙进行通信,乙要确认信是甲发出的。数字签名的基本协议很简单:
协议I:
(1) 甲用他的私人密钥对文件加密,从而对文件签名;
(2) 甲将签名的文件传给乙;
(3) 乙用甲的公开密钥解密文件,从而验证签名。
在实际的实现过程中,明文m都是长文件,则上述第(1)步效率太低。为了节约时间,可以引入单向散列函数进行使用。甲并不对整个文件签名,而是对文件的散列值进行签名。下面介绍一种将DES算法和RSA算法结合起来的数据加密和数字签名协议:
协议II:
(1)客户端和服务器建立一个连接;
(2)顾客进入个人信息加密网页;
(3)顾客申请服务器生成服务器的一个公钥和一个私钥;
(4)顾客生成顾客的一个公钥和一个私钥;
(5)顾客得到服务器的公钥后用它对一个会话密钥加密并传送给服务器;
(6)服务器用自己的私钥对加密了的会话密钥进行解密,得到会话密钥;
(7)顾客产生要传送文件m的单向散列值h;
(8)顾客用他的私人密钥对单向散列值h进行加密得到数字签名a;
(9)顾客用与服务器共享的会话密钥加密m和a并将结果传送给服务器;
(10)服务器用会话密钥解密这传送过来的信息,得到明文文件m和数字签名a;
(11)服务器用明文文件m产生文件m的单向散列值m’,同时用顾客的公钥对传过来的散列签名a进行解密,得到恢复的散列值。如果恢复的散列值与从m产生的散列值m’相同,则证明是顾客的签名。
上一节介绍的密钥对与数字摘要也可以结合起来使用,数字签名就是它们结合的结果。下面我们就讲解一下数字签名是怎么一回事。
数字凭证(Digital Certificate或Digital ID)又称为数字证书或数字标识,是Internet上使用电子手段证实用户身份和用户访问网络资源权限的一种安全防范手段。网上活动的当事双方如果都出示了各自的数字凭证,并且用它们进行各种操作,那么双方都不必为对方身份的真伪而担心。也就说,数字凭证保证了信息处理参与各方的身份真实性。
数字凭证的内部格式是由CCITT X.509国际标准规定的,包含以下6项内容:
普通Internet网络的数字凭证主要有以下3种类型:
WAP系统中使用的数字凭证采用了普通Internet网络数字凭证的基本思想。因为WAP实现安全防范的专门协议就是无线传输层安全协议WTLS(Wireless Transport Layer Security),所以WAP针对WTLS用户提供了两种数字凭证,另外还针对WAP网关制定的数字凭证。
微型凭证
WAP服务器、客户端及网关使用的数字凭证,大都属于小型化的凭证,我们称这种凭证为微型凭证(Mini-Certificate)。由于这些凭证需要在无线网络中传输,需要在具有有限资源的无线用户端进行处理,所以它的格式非常重要,采用普通有线网络的数字凭证格式显然不能满足要求,所以针对无线网络的传输特点,以及手机等无线设备的内存小、屏幕小、速度慢的特点,数字凭证的提供商优化了传统的凭证格式,在密钥长度、凭证序列号、数字签名大小以及密钥有效期等方面都作了调整,使得微型凭证既能满足实际需求,又能有效抵挡攻击、破解和伪证等。