标题：数字签名技术
简介
Internet的迅猛发展使电子商务成为商务活动的新模式。电子商务包括管理信息系统MIS、电子数据交换EDI、电子订货系统EOS、商业增值网VAN等，其中EDI成为电子商务的核心部分，涉及到多个环节的复杂的人机工程。网络的开放性与共享性也导致了网络的安全性受到严重影响，在开放的Internet平台上，社会生活中传统的犯罪和不道德行为将变得更加隐蔽和难以控制。人们从面对面的交易和作业，变成网上互不见面的操作、没有国界、没有时间限制，就产生了更大的安全隐患。因此，在电子商务的发展热潮中，电子商务的安全性已成为制约电子商务发展的重要瓶颈。 
如何保证网上传输的数据的安全和交易对方的身份确认是电子商务是否得到推广的关键，可以说电子商务最关键的问题是安全性问题；而数字签名(Digital Signatures)技术是保证信息传输的保密性、数据交换的完整性、发送信息的不可否认性、交易者身份的确定性的一种有效的解决方案，是电子商务安全性的重要部分。
数字签名技术即进行身份认证的技术。在数字化文档上的数字签名类似于纸张上的手写签名，是不可伪造的。接收者能够验证文档确实来自签名者，并且签名后文档没有被修改过，从而保证信息的真实性和完整性。在指挥自动化系统中，数字签名技术可用于安全地传送作战指挥命令和文件。
条件
完善的签名应满足以下三个条件：
1.签名者事后不能抵赖自己的签名；
2.任何其它人不能伪造签名；
3.如果当事人双方关于签名的真伪发生争执，能够在公正的仲裁者面前通过验证签名来确认其真伪。
电子商务中数据传输的几个安全性需求
1. 数据的保密性：用于防止非法用户进入系统及合法用户对系统资源的非法使用；通过对一些敏感的数据文件进行加密来保护系统之间的数据交换，防止除接收方之外的第三方截获数据及即使获取文件也无法得到其内容。如在电子交易中，避免遭到黑客的袭击使信用卡信息丢失的问题。 
2. 数据的完整性：防止非法用户对进行交换的数据进行无意或恶意的修改、插入，防止交换的数据丢失等。 
3. 数据的不可否认性：对数据和信息的来源进行验证，以确保数据由合法的用户发出；防止数据发送方在发出数据后又加以否认；同时防止接收方在收到数据后又否认曾收到过此数据及篡改数据。 
上述需求对应于防火墙、加密、数字签名、身份认证等技术，但其关键在于数字签名技术。
数字签名的含义和功能
数字签名是通过一个单向函数对要传送的报文进行处理得到的用以认证报文来源并核实报文是否发生变化的一个字母数字串。 
在传统的商业系统中，通常都利用书面文件的亲笔签名或印章来规定契约性的责任，在电子商务中，传送的文件是通过电子签名证明当事人身份与数据真实性的.数据加密是保护数据的最基本方法，但也只能防止第三者获得真实数据。电子签名则可以解决否认、伪造、篡改及冒充等问题，具体要求：发送者事后不能否认发送的报文签名、接收者能够核实发送者发送的报文签名、接收者不能伪造发送者的报文签名、接收者不能对发送者的报文进行部分篡改、网络中的某一用户不能冒充另一用户作为发送者或接收者。
数字签名的实现方法
实现数字签名有很多方法，目前数字签名采用较多的是公钥加密技术，如基于RSA Date Security 公司的PKCS( Public Key Cryptography Standards )、Digital Signature Algorithm、x.509、PGP(Pretty Good Privacy). 1994年美国标准与技术协会公布了数字签名标准(DSS)而使公钥加密技术广泛应用。&127;公钥加密系统采用的是非对称加密算法。（一）用非对称加密算法进行数字签名1、算法的含义 
此算法使用两个密钥：公开密钥（public key)和私有密钥（private key）,&127;分别用于对数据的加密和解密,即如果用公开密钥对数据进行加密，只有用对应的私有密钥才能进行解密；如果用私有密钥对数据进行加密，则只有用对应的公开密钥才能解密。 
2 签名和验证过程 
（1）发送方首先用公开的单向函数对报文进行一次变换，得到数字签名，然后利用私有密钥对数字签名进行加密后附在报文之后一同发出。 
（2）接收方用发送方的公开密钥对数字签名进行解密变换，得到一个数字签名的明文。发送方的公钥是由一个可信赖的技术管理机构即验证机构（CA: Certification Authority）发布的。 
（3）接收方将得到的明文通过单向函数进行计算，同样得到一个数字签名，再将两个数字签名进行对比，如果相同，则证明签名有效，否则无效。 
这种方法使任何拥有发送方公开密钥的人都可以验证数字签名的正确性。由于发送方私有密钥的保密性，使得接收方既可以根据验证结果来拒收该报文，也能使其无法伪造报文签名及对报文进行修改，原因是数字签名是对整个报文进行的，是一组代表报文特征的定长代码，同一个人对不同的报文将产生不同的数字签名。这就解决了银行通过网络传送一张支票，而接收方可能对支票数额进行改动的问题，也避免了发送方逃避责任的可能性。（二）用对称加密算法进行数字签名1 算法的含义 
对称加密算法所用的加密密钥和解密密钥通常是相同的，即使不同也可以很容易地由其中的任意一个推导出另一个。在此算法中，加、解密双方所用的密钥都要保守秘密。由于计算速度快而广泛应用于对大量数据如文件的加密过程中，如RD4 和DES。 
2 签名和验证过程 
Lamport发明了称为Lamport-Diffie的对称加密算法：利用一组长度是报文的比特数（n）两倍的密钥A,来产生对签名的验证信息，即随机选择2n个数B，由签名密钥对这2n个数B进行一次加密变换，得到另一组2n个数C。 
（1）发送方从报文分组M的第一位开始，依次检查M的第i位，若为0时，取密钥A的第i位，若为1则取密钥A的第i+1位； 直至报文全部检查完毕。所选取的n个密钥位形成了最后的签名。 
（2）接收方对签名进行验证时，也是首先从第一位开始依次检查报文M，如果M的第i位为0时，它就认为签名中的第I组信息是密钥A的第i位，若为1则为密钥A的第i+1位； 直至报文全部验证完毕后，就得到了n个密钥，由于接收方具有发送方的验证信息C，所以可以利用得到的n个密钥检验验证信息，从而确认报文是否是由发送方所发送。 
这种方法由于它是逐位进行签名的，只要有一位被改动过，接收方就得不到正确的数字签名，因此其安全性较好，其缺点是：签名太长（对报文先进行压缩再签名，可以减少签名的长度。）；签名密钥及相应的验证信息不能重复使用，否则极不安全。 
（三）几个认证产品 
认证产品可分两大类：一是用户认证，主要是通过单独签名访问网络资源；二是对象认证，即判定传递信息和文件的认证及其真实性。数字签名技术就主要用于信息、文件以及其他存储在网上的传输对象的认证。AT&T Government Market的Secret Agent 便通过将数字签发的文档作为E-mail消息的文件附件来发表的形式，将现有客户机运行的环境 E-mail系统 、Web浏览器等应用密切地结合在一起；Regnoc Software 的Signature 使用OLE 2.0可对Windows 下的任何文本作数字签名；ViaCrypt 的ViaCrypt PGP可从传递信息的应用中切割文本至Windows 或Macintosh裁剪板，在那里对它进行数字签名后将它粘贴到传递信息中，其面对电子商务的一个功能是，无论雇员发送或接收的所有密文都能破译，可设置成在公司密钥下去自动破译所有外发信息，且要求雇员须使用职权范围允许的解密密钥。
数字签名的算法及数字签名的保密性
数字签名的算法很多,应用最为广泛的三种是: Hash签名、DSS签名、RSA签名。1.Hash签名Hash签名不属于强计算密集型算法，应用较广泛。很多少量现金付款系统，如DEC的Millicent和CyberCash的CyberCoin等都使用Hash签名。使用较快的算法,可以降低服务器资源的消耗,减轻中央服务器的负荷。Hash的主要局限是接收方必须持有用户密钥的副本以检验签名, 因为双方都知道生成签名的密钥，较容易攻破，存在伪造签名的可能。如果中央或用户计算机中有一个被攻破,那么其安全性就受到了威胁。2.DSS和RSA签名DSS和RSA采用了公钥算法,不存在Hash的局限性。RSA是最流行的一种加密标准，许多产品的内核中都有RSA的软件和类库,早在Web飞速发展之前,RSA数据安全公司就负责数字签名软件与Macintosh操作系统的集成,在Apple的协作软件PowerTalk上还增加了签名拖放功能,用户只要把需要加密的数据拖到相应的图标上,就完成了电子形式的数字签名。RSA与Microsoft、IBM、Sun和Digital都签订了许可协议,使在其生产线上加入了类似的签名特性。与DSS不同,RSA既可以用来加密数据,也可以用于身份认证。和Hash签名相比，在公钥系统中,由于生成签名的密钥只存储于用户的计算机中,安全系数大一些。 
数字签名的保密性很大程度上依赖于公开密钥。数字认证是基于安全标准、协议和密码技术的电子证书，用以确立一个人或服务器的身份，它把一对用于信息加密和签名的电子密钥捆绑在一起，保证了这对密钥真正属于指定的个人和机构。数字认证由验证机构CA进行电子化发布或撤消公钥验证，信息接收方可以从CA Web站点上下载发送方的验证信息。Verisign是第一家X.509公开密钥的商业化发布机构，在它的Digital ID 下可以生成、管理应用于其它厂商的数字签名的公开密钥验证。
数字签名的发展前景展望
生成和验证数字签名的工具需要完善,只有广泛使用SSL（安全套接层）建立安全链接的Web浏览器,才可能频繁用到数字签名技术。比如一个公司要对其雇员在网络上的行为进行规范，就要建立广泛协作机制来支持数字签名的实现。支持数字签名是Web发展的目标,确保数据保密性、数据完整性和不可否认性才能保证在线商业的安全交易。 
和数字签名有关的复杂认证能力就像现在操作、应用环境中的口令保护一样直接做进操作系统环境、应用、远程访问产品、信息传递系统及Internet防火墙中，像Netscape 支持X.509标准的Communicator 4.0 Web客户机软件；Microsoft支持X.509的Internet Explorer 4.0客户机软件及支持对象签名检查的Java虚拟机等。 
安全问题是阻碍电子商务广泛应用的最大问题，改进数字签名在内的安全技术措施、确定CA认证权的归属问题是解决电子商务安全问题的关键。
数字签名技术的应用
应用于网上书店解决方案的总体介绍 
网上书店实现了基于web的在线购书活动，使用户可以穿着睡衣享受购物的便利和愉悦。但是，随着电子商务在全球范围内的迅猛发展，随之而来的电子商务信息安全问题也日益突出，目前电子商务的安全威胁主要来自于（1）信息的截获和窃取；(2)信息的篡改；（3）信息假冒；（4）交易抵赖。在这种背景下，本解决方案使用数字签名技术来保证网上购书过程中的信息安全，并且本文只涉及网上书店方与需求量大的客户之间的信息安全。 
解决方案的总体流程如下： 
(1)大客户与网上书店签定物理合同，规定双方的权利和义务； 
(2)由虚拟的第三方（软件）给大客户颁发数字证书，同时产生大客户的数字签名用的私钥； 
(3)在给对方发送信息时，首先计算信息的数据摘要，然后通过本方的私钥对其数据摘要进行加密得数字签名，发方将原文与数字签名一起发送给接受方； 
(4)收方验证签名，即用发方公钥解密数字签名，得出数字摘要；收方将原文采用同样哈希算法又得一新的数字摘要，将两个数字摘要进行比较，如果二者匹配，说明经数字签名的电子文件传输成功。
下面对关键技术进行简单叙述： 
3.1 证书的创建 
3.1.1 设计证书的数据结构。 
交易的双方在网络上要进行通信，双方的身份要进行认证，交易的敏感信息要进行加密和进行数字签名，因此，必须有一个第三方所发行的数字证书。每一个大客户（Customer）都要领取一个数字证书，其中包含本客户的身份证明，如主体名称，发行方的公钥，主体（本客户）的非对称加密算法的公钥，以及发行方对本证书信息的数字签名。 
3.1.2 生成网上书店RSA密钥对 
想要产生证书，首先应该由虚拟的第三方（本软件）来为网上书店一方产生一对用于非对称加密及进行数字签名的公私钥对。这里采用RSA加密提供者来产生RSA密钥对，其算法如下： 
a)定义RSA加密提供者对象 
b)获取公钥并将XML文档形式的密钥信息分别存入公钥文件 
c)获取私钥并将XML文档形式的密钥信息分别存入私钥文件 
3.1.3 客户数字证书的生成算法 
a)注册客户信息 
b)生成客户唯一RSA公/私钥对
c)将信息进行链接，以便进行计算SHA1数字摘要 
d)对链接的信息进行数字签名 
e)以证书数据结构的物理存储顺序，依次写入证书文件 
至此，整个数字证书文件即告生成。需要说明的是，此证书同时在网上书店的服务器上保留一个副本，因此证书含有客户的基本信息及公钥，可用此验证客户对信息的数字签名。由于此证书也包含有发行者的公钥（这里也是网上书店），因此，客户方可对网上书店的确认信息的数字签名进行验证。 
3.2 消息认证的总体框架与流程 
3.2.1 订单的生成 
大客户在生成数字证书的同时，也在网上书店的服务器上生成了客户的登录密码；用户可用任何一台计算机在Web浏览器上进行登录，进入定单填写界面，此界面可为多种形式，如购物筐等。用户在确定所购图书后，提交定单。但由于大客户已经事先和网上书店之间签写了物理的合同，网上书店方应该根据用户的要求来实施交易。一般情况下，定单的数量可能较大，为避免不必要的纠纷，以及防止恶意的攻击、信息变更、伪造假定单等。在这里要充分利用所签发的数字证书的功能，进行验证。而且双方都要进行签名。 
其基本步骤及协议如下： 
a)用户登录进入浏览器； 
b)填写定单信息，由服务器端程序自动生成一份定单的详细信息，分别以数数据库字段的形式及文件形式进行存储； 
c)用户下载此文件形式定单信息，并采用生成数据证书时获得的本用户的私钥对此信息进行签名，将此文件及其签名链接后，上传至服务器； 
d)网上书店的工作人员登录进入浏览器；检查大客户的定单，并对客户的定单信息进行核对及数字签名的验证。验证后，将所回复的信息及对信息的签名一并放入服务器，让客户下载。 
e)客户下载经网上书店方经过签名的订单文件，进行签名验证。通过后，保存此文件，以备以后发生纠纷时作为证据。 
这里需要说明的是，由于客户端是一个浏览器，浏览器不能直接读取本地的私钥文件，因此在第3步，需要由用户人工下载定单信息文件，然后由本地程序进行签名，然后再上传。而网上书店所在的服务器可以直接处理数据签名，相对而言，用户的操作稍显繁琐。 
3.2.2 定单信息的身份识别与认证 
a.大客户对定单信息的签名 
运行在Web服务器端的Web程序，可很容易地对定单信息文件进行判定（读出文件头标志信息），在得知定单还没有被客户下载签名时，可在用户查看订单信息的界面中，动态生成网页信息，以便用户下载。下载后再由专门的验证签名软件进行处理，处理后，在web页面下进行上传，存储后，由web服务器程序自动进行验证客户的数字签名的正确性（因服务器端有客户的数字证书），同时登记已签名标志。其中时间戳的目的是防止信息的重放。 
b.网上书店方由专门人员在浏览器中打开客户已经签名的信息，在确认签名的情况下（由第1步自动完成），加上时间戳和书店方对定单的承诺及签名，放入服务器，交通知客户端下载。 
c.客户端再次下载附有书店方签名的定单文件，在客户端进行解析并验证数字签名的合法性。这是由专门在第1步中运行的软件，根据存储在数字证书上的网上书店的公钥自动完成的。若能够根据书店方的公钥通过本定单及附加信息的验证，说明此文件已经被书店方所处理，而不是任何第三方。在此意义上，双方对此定单的承诺都将作为日后的交易证据，从而起到认证和识别等目的。 
4 本解决方案存在的问题 
本网上书店的信息安全解决方案在如下几个方面还没有给出满意的结果： 
(1)没有解决客户端在提交定单时，从浏览器到WEB服务器之间的一段通信的数据加密问题。 
由于采用.NET的C#语言进行程序设计，而C#语言是在服务器端运行的，因此在数据提交时，数据已经传输到服务器，基于微软在.NET里面内置的加密方案以此难以实施，看来只有借助于其它的技术如：运行在客户端的Java或VB 脚本来实现；或考虑采用在客户端运行插件的形式来解决此问题，采用c#进行Web程序设计，数据的加密传输是今后要解决的一个问题。 
(2)客户端对定单的数字签名是通过运行在客户端的特定的验证、签名软件进行，而不是直接在浏览器中实现。 
这是因为，数字证书在发放以后，其私钥由用户收藏，其位置绝对不能放到网络书店所在的服务器上，否则网络书店在得到客户私钥的情况下，不排除用此进行伪造签名的可能，使认证出现严重问题。而浏览器在一般情况下是不能够直接读取客户端的文件的。即使能够读取，其采用Ｃ＃编写的签名验证及签名程序也是运行在服务器端的。因此，此时也会将私钥信息进行传递至服务器，这是不可以的，是绝对不安全的一种方式。