- 计算机网络安全技术研究
- 董仕
- 5516字
- 2020-06-24 14:33:08
第六节 数字签名的应用
一、数字签名概述
1.数字签名的概念
有许多种技术可以保证信息的安全不受侵犯,如加密技术、访问控制技术、认证技术以及安全审计技术等,但这些技术大多数是用来预防的,信息一旦被攻破,不能保证信息的完整性。
对文件进行加密只解决了传送信息的保密问题,而防止他人对传输的文件进行破坏,以及如何确定发信人的身份还需要采取其他的手段,这一手段就是数字签名。在电子商务安全保密系统中,数字签名技术占有特别重要的地位,在电子商务安全服务中的源鉴别、完整性服务、不可抵赖服务中,都要用到数字签名技术。在电子商务中,完善的数字签名应具备签字方不能抵赖、他人不能伪造、在公证人面前能够验证真伪的功能。那么,什么是数字签名技术?它有什么特殊功能呢?
在数字签名技术出现之前,曾经出现过一种“数字化签名”技术,简单地说就是在手写板上签名,然后将图像传输到电子文档中,这种“数字化签名”可以被剪切,然后粘贴到任意文档上,这样非法复制非常容易实现,所以这种签名的方式是不安全的。
数字签名技术与数字化签名技术是两种截然不同的安全技术,数字签名与用户的姓名和手写签名形式毫无关系,它实际使用了信息发送者的私有密钥变换所需传输的信息。对于不同的文档信息,发送者的数字签名并不相同。没有私有密钥,任何人都无法完成非法复制。
从这个意义上来说,数字签名的含义是通过一个单向函数对要传送的报文进行处理得到的,用以认证报文来源并核实报文是否发生变化的一个字母数字串。
数字签名的作用就是为了鉴别文件或书信的真伪,传统的做法是相关人员在文件或书信上亲笔签名或盖印章。签名起到认证、核准、生效的作用。数字签名用来保证信息传输过程中信息的完整和提供信息发送者的身份的确认。
2.数字签名原理
数字签名技术在具体工作时,首先由发送方对信息施以数学变换,所得的信息与原信息唯一对应;接收方进行逆变换,得到原始信息。只要数学变换方法优良,变换后的信息在传输中就具有很强的安全性,很难被破译、篡改。这一过程称为加密,对应的反变换过程称为解密。
现在有两类不同的加密技术,一类是对称加密,双方具有共享的密钥,只有在双方都知道密钥的情况下才能使用,通常应用于孤立的环境之中,例如,在使用自动取款机(ATM)时,用户需要输入用户识别号码(PIN),银行确认这个号码后,双方在获得密码的基础上进行交易。当用户数目过多,超过了可以管理的范围时,这种机制并不可靠。
另一类是非对称加密,密钥是由公有密钥和私有密钥组成的密钥对,用私有密钥进行加密,利用公有密钥可以进行解密,但是由于公有密钥无法推算出私有密钥,所以公有密钥并不会损害私有密钥的安全,公有密钥无需保密,可以公开传播,而私有密钥必须保密,丢失时需要报告鉴定中心及数据库。
目前的数字签名建立在非对称密钥体制基础上,它是公用密钥加密技术的另一类应用。它的主要方式是,报文的发送方从报文文本中生成一个128位的散列值(或报文摘要)。发送方用自己的私有密钥对这个散列值进行加密来形成发送方的数字签名。然后,这个数字签名将作为报文的附件和报文一起发送给报文的接收方。报文的接收方首先从接收到的原始报文中计算出128位的散列值(或报文摘要),再用发送方的公有密钥来对报文附加的数字签名进行解密。如果两个散列值相同、那么接收方就能确认该数字签名是发送方的。通过数字签名能够实现对原始报文的鉴别。
在书面文件上签名是确认文件的一种手段,其作用有两点:第一,因为自己的签名难以否认,从而确认了文件已签署这一事实;第二,因为签名不易仿冒,从而确定了文件是真的这一事实。
数字签名与书面文件签名有相同之处,采用数字签名,也能确认以下两点:第一,信息是由签名者发送的;第二,信息自签发后到收到为止未曾做过任何修改。这样数字签名就可用来防止电子信息因易被修改而有人作伪,或冒用别人名义发送信息,或发出(收到)信件后又加以否认等情况发生。
应用广泛的数字签名方法主要有三种,即RSA签名、DSS签名和Hash签名。这三种算法可单独使用,也可综合在一起使用。数字签名是通过密码算法对数据进行加、解密变换实现的,用DES算法、RSA算法都可实现数字签名。但三种技术或多或少都有缺陷,或者没有成熟的标准。
数字签名的原理归纳如下。
1)被发送文件采用哈希算法对原始报文进行运算,得到一个固定长度的数字串,称为报文摘要(Message Digest),不同的报文所得到的报文摘要也可能相同,但对相同的报文它的报文摘要却是唯一的。
2)发送方生成报文的报文摘要,用自己的私有密钥对报文摘要进行加密来形成发送方的数字签名。
3)这个数字签名将作为报文的附件和报文一起发送给接收方。
4)接收方首先从接收到的原始报文中用同样的算法计算出新的报文摘要,再用发送方的公有密钥对报文附件的数字签名进行解密,比较两个报文摘要,如果值相同,则接收方能确认该数字签名是发送方的。
3.数字签名算法
(1)Hash签名
Hash签名不属于强计算密集型算法,应用较广泛。很多少量现金付款系统,如DEC的Millicent和Cyber Cash的Cyber Coin等都使用Hash签名。它可以降低服务器资源的消耗,减轻中心服务器的负荷。Hash签名的主要局限是接收方必须持有用户密钥的副本以检验签名,因为双方都知道生成签名的密钥,所以较容易攻破,存在伪造签名的可能。如果中心或用户计算机中有一个被攻破,那么其安全性就受到了威胁。
Hash签名是最主要的数字签名方法,也称之为数字摘要法(Digital Digest)或数字指纹法(Digital Finger Print)。它与RSA数字签名是单独的签名不同,该数字签名方法是将数字签名与要发送的信息紧密联系在一起,它更适合于电子商务活动。将一个商务合同的个体内容与签名结合在一起,与合同和签名分开传递相比,更增加了可信度和安全性。
数字摘要加密方法亦称安全Hash编码法(Secure Hash Algorithm, SHA)或MD5(MD Standard For Message Digest),由RonRivest所设计。该编码法采用单向Hash函数将需加密的明文“摘要”成一串128位的密文,这一串密文亦称为数字指纹(Finger Print),它有固定的长度,且不同的明文摘要必定一致。这样这串摘要使可成为验证明文是否是“真身”的“指纹”了。
(2)DSS和RSA签名
DSS和RSA采用了公钥算法,不存在Hash的局限性。RSA是最流行的一种加密标准,许多产品的内核中都有RSA的软件和类库。早在Web飞速发展之前,RSA数据安全公司就负责数字签名软件与Macintosh操作系统的集成,在Apple的协作软件PowerTalk上还增加了签名拖放功能,用户只要把需要加密的数据拖到相应的图标上,就完成了电子形式的数字签名。RSA与Microsoft、IBM、Sun和Digital都签订了许可协议,使在其生产线上加入了类似的签名特性。与DSS不同,RSA既可以用来加密数据,也可以用于身份认证。和Hash签名相比,在公钥系统中,由于生成签名的密钥只存储于用户的计算机中,因此安全系数大一些。
RSA或其他非对称密钥密码算法的最大方便是没有密钥分配问题(网络越复杂、网络用户越多,其优点越明显)。因为非对称密钥加密使用两个不同的密钥,其中有一个是公有的,另一个是保密的。公有密钥可以保存在系统目录内、未加密的E-mail信息中、电话黄页(商业电话)上或公告牌中,网上的任何用户都可获得公有密钥。而私有密钥是用户专用的,由用户本身持有,它可以对由公开密钥加密信息进行解密。
RSA算法中数字签名技术实际上是通过一个哈希函数来实现的。数字签名的特点是它代表了文件的特征,文件如果发生改变,数字签名的值也将发生变化。不同的文件将得到不同的数字签名。一个最简单的哈希函数是把文件的二进制码相累加,取最后的若干位。哈希函数对发送数据的双方都是公开的。
DSS数字签名是由美国国家标准化研究院和国家安全局共同开发的。由于它是由美国政府颁布实施的,因此主要用于与美国政府有商务往来公司,其他公司则较少使用,它只是一个签名系统,而且美国政府不提倡使用任何削弱政府窃听能力的加密软件,认为这才符合美国的国家利益。
4.数字签名功能
在传统的商业系统中,通常利用书面文件的亲笔签名或印章来规定契约性的责任,在电子商务中,传送的文件是通过数字签名证明当事人身份与数据真实性的,数据加密是保护数据的最基本方法。
数字签名可以解决否认、伪造、篡改及冒充等问题。具体要求:发送者事后不能否认发送的报文签名,接收者能够核实发送者发送的报文签名,接收者不能伪造发送者的报文签名,接收者不能对发送者的报文进行部分篡改,网络中的某一用户不能冒充另一用户作为发送者或接收者。数字签名的应用范围十分广泛,在保障电子数据交换(EDI)的安全性上是一个突破性的进展,凡是需要对用户的身份进行判断的情况都可以使用数字签名,如加密信件、商务信函、订货购买系统、远程金融交易、自动模式处理等。
二、数字签名实现
实现数字签名有很多方法,目前数字签名采用较多的是非对称加密算法技术,如基于RSA Date Security公司的PKCS(Public Key Cryptography Standards)、Digital Signature Algorithm、x.509、PGP(Pretty Good Privacy)。1994年美国标准与技术协会公布了数字签名标准(DSS)而使公钥加密技术广泛应用。
1.用非对称加密算法进行数字签名
非对称加密使用两个密钥:公有密钥(Public Key)和私有密钥(Private Key),分别用于对数据进行加密和解密,即如果用公有密钥对数据进行加密,只有用对应的私有密钥才能进行解密;如果用私有密钥对数据进行加密,则只有用对应的公有密钥才能解密。签名和验证过程如下。
1)发送方首先用公开的单向函数对报文进行一次变换,得到数字签名,然后利用私有密钥对数字签名进行加密后附在报文之后一同发出。
2)接收方用发送方的公有密钥对数字签名进行解密变换,得到一个数字签名的明文。发送方的公钥是由一个可信赖的技术管理机构即验证机构(Certification Authority, CA)发布的。
3)接收方将得到的明文通过单向函数进行计算,同样得到一个数字签名,再将两个数字签名进行对比,如果相同,则证明签名有效,否则无效。
这种方法使任何拥有发送方公有密钥的人都可以验证数字签名的正确性。由于发送方私有密钥的保密性,使得接收方既可以根据验证结果来拒收该报文,也能使其无法伪造报文签名及对报文进行修改,原因是数字签名是对整个报文进行的,是一组代表报文特征的定长代码,同一个人对不同的报文将产生不同的数字签名。这就解决了银行通过网络传送一张支票,而接收方可能对支票数额进行改动的问题,也避免了发送方逃避责任的可能性。
2.用对称加密算法进行数字签名
对称加密算法所用的加密密钥和解密密钥通常是相同的,即使不同也可以很容易地由其中的任意一个推导出另一个。在此算法中,加、解密双方所用的密钥都要保密。由于计算速度快而广泛应用于对大量数据如文件的加密过程中,如RD4和DES。
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个密钥检验验证信息,从而确认报文是否由发送方所发送。
这种方法由于它是逐位进行签名的,只要有一位被改动过,接收方就得不到正确的数字签名,因此其安全性较好,其缺点是签名太长(对报文先进行压缩再签名,可以减少签名的长度);签名密钥及相应的验证信息不能重复使用,否则极不安全。
3.加入数字签名和验证
只有加入数字签名和验证才能真正实现在公开网络上的安全传输。加入数字签名和验证的文件传输过程如下。
1)发送方首先用哈希函数从原文得到数字签名,然后采用非对称密钥体系用发送方的私有密钥对数字签名进行加密,并把加密后的数字签名附加在要发送的原文后面。
2)发送一方选择一个私有密钥对文件进行加密,并把加密后的文件通过网络传输到接收方。
3)发送方用接收方的公有密钥对私有密钥进行加密,并通过网络把加密后的私有密钥传输到接收方。
4)接收方使用自己的私有密钥对密钥信息进行解密,得到私有密钥的明文。
5)接收方用私有密钥对文件进行解密,得到经过加密的数字签名。
6)接收方用发送方的公有密钥对数字签名进行解密,得到数字签名的明文。
7)接收方用得到的明文和哈希函数重新计算数字签名,并与解密后的数字签名进行对比。如果两个数字签名是相同的,则说明文件在传输过程中没有被破坏。
如果第三方冒充发送方发出了一个文件,因为接收方在对数字签名进行解密时使用的是发送方的公有密钥,只要第三方不知道发送方的私有密钥,解密出来的数字签名和经过计算的数字签名必然是不相同的。这就提供了一个安全的确认发送方身份的方法。
安全的数字签名使接收方可以得到保证:文件确实来自声称的发送方。鉴于签名私钥只有发送方自己保存,他人无法做一样的数字签名,因此发送方不能否认其参与了交易。
数字签名的加密解密过程和私有密钥的加密解密过程虽然都使用非对称密钥体系,但实现的过程正好相反,使用的密钥对也不同。数字签名使用的是发送方的密钥对,发送方用自己的私有密钥进行加密,接收方用发送方的公有密钥进行解密。这是一个一对多的关系,即任何拥有发送方公有密钥的人都可以验证数字签名的正确性,而私有密钥的加密解密则使用的是接收方的密钥对,这是多对一的关系,即任何知道接收方公有密钥的人都可以向接收方发送加密信息,只有唯一拥有接收方私有密钥的人才能对信息解密。在实用过程中,通常一个用户拥有两个密钥对,一个密钥对用来对数字签名进行加密解密,一个密钥对用来对私有密钥进行加密解密。这种方式提供了更高的安全性。