数字签名是随着网络发展而出现的一种计算机认证方式,相比手写签名更方便、更可靠。数字签名可长期存储在计算机中备查,同时容易辨别真伪。签名采用加密技术通信,可保证信息安全传输,即使被第三方窃取,也无法了解信息内容。
加密并不能解决所有信息安全问题,特别是在收、发双方争执的情况下。如网络中的用户A向用户B发送一份报文,则可能出现如下问题:A不承认发送过这份报文;B伪造一份来自A的报文;B对A的报文进行篡改;B重复使用签名后的文件(如签名后文件为电子支票,B多次使用该支票兑换现金);网络中另一用户冒充A或B。
为防止出现上述问题,一般公文常采用签字或盖章方法解决。但在网络环境下无法使用这些方法,即使可传送手写签名等,也存在伪造、模仿可能。因此产生了数字签名认证方法。
1.数字签名原理
数字签名是用数字代替手工签名,用来证明消息发送者的身份和消息的真实性。公钥密码体制最重要的一种应用就是数字签名。
数字签名与传统的手写签名有如下不同。
签名:手写签名是被签文件的物理组成;而数字签名不是被签消息的物理部分,因而需要将签名连接到被签消息上。
验证:手写签名是通过将它与真实的签名进行比较来验证;而数字签名利用已公开的验证算法验证。
数字签名消息复制品与其本身是一样的;而手写签名纸质文件的复制品与原品是不同的。与手写签名类似,数字签名至少应满足3个基本条件:签名者不能否认自己的签名;接收者能验证签名,而其他任何人都不能伪造签名;当出现针对签名真伪发生争执时,存在一个仲裁机构或第三方能够解决争执。
只要在数字签名文件中加上一些特有的凭证,如时间戳等就可避免签名后的文件被重复使用,因此,数字签名已广泛地应用在需要识别、确认的场合。
目前已有多种数字签名体制,既可采用传统的加密方法也可采用公开密钥加密技术来实现,但大致可分成两类:直接数字签名和需要仲裁的数字签名。
直接数字签名:直接数字签名仅涉及通信双方,它假定接收方知道发送方的公开密钥。数字签名通过使用发送方的私有密钥对整个消息进行加密或使用发送方的私有密钥对消息的报文摘要进行加密来产生。数字签名过程如图10-10所示,这里假设发送方为A,接收方为B。
图10-10 数字签名
●A采用散列算法对原始消息M进行运算,得到一个较短的、固定长度的数字串h(消息摘要h=H(M)),由M可很快生成h,已证明由h几乎不可能生成M。(www.xing528.com)
●A用自己的私钥Kd。对消息摘要h进行加密来形成发送方的数字签名S。
●A将该数字签名S作为消息附件和消息M一起发送给B,即A将M[S]发送给B。
●B收到M[S]后,再验证S是否是A的签名,B首先从接收到的原始消息中用同样的算法计算出新的消息摘要:hl=H(M),再用A的公钥Ke,对消息附件的数字签名S进行解密得到消息摘要h2;比较两个消息摘要,如hl=h2,B就能确认数字签名S是发送方的;原始消息M未被篡改过;事后当A否认曾发过此消息时,B可出示原始消息M和Kd,及加密的数字签名S来证明A确实给B发送过这段消息M。
以上方法实际上就是把签名过程从对原文件的签名者身份和真实性转化为一个很短的Hash值上,并加以验证。
直接数字签名的弱点。签名的有效性依赖于发送方私有密钥的安全性。如发送方的私有密钥丢失或被盗用,攻击者就可伪造签名。但这个弱点可通过使用仲裁方法解决。
需要仲裁的数字签名一般流程如下:发送方A对消息签名后,将附有签名的消息发送给仲裁者C,C对其验证后,连同一个通过验证的证明发送给接收方B。运用这个方法,A无法对自己发出的消息予以否认,但仲裁者必须是得到所有用户信任的负责任者。
采用对称密钥加密方法的数字签名:设用户A为发送方,用户B为接收方,C为仲裁方。其中用户A和仲裁方C具有相同的密钥Ka,用户B和仲裁C具有相同的密钥Kb。假定A、B之间已事先统一了数字签名的格式,其过程如图10-11所示。
A先发送消息E'(Ka)给C,C用Ka解密,证实消息来源于A并要求发往B后,C向B发送消息E'(Kb)。B收到后用Kh解密,得知消息内容和仲裁方C保证消息来源于A。与此同时,B还收到A发来的消息E(Ka),由于采用Ka加密,B无法解密,但保留下E(Ka)的备份,以防今后发生争执。仲裁方C声明消息发自A,证实消息是真实的。若A事后否认,C可拿出A发来的消息E'(Ka)来说明,C可用Ka重新加密消息,证明只有A能产生产E'(Ka),因为A拥有密钥Ka,由此说明消息的非伪造性。
图10-11 采用对称密钥加密方法的数字签名
采用公开密钥加密技术的数字签名。公开密钥加密技术最适合数字签名,用公开密钥加密方法发送签名消息时,每个用户应公布和登记其公开密钥,以确保公开密钥不被改变。
2.数字签名标准DSS
DSS数字签名标准由美国国家标准技术研究所(NIST)于1991年提出,它利用了安全散列算法(SHA),并提出了一种新的数字签名技术,即数字签名算法(DSA)。
在这种数字签名方法中,签名方先利用安全散列算法产生消息的消息摘要,然后将消息摘要和一个专用于该签名的随机数k作为签名函数的输入,该签名函数还依赖于签名方的私有密钥(Kr)和一个全局公开密钥(KUc,事实上是一组相关联的参数)。签名由两个分量组成,记为s和r。验证方将计算消息的散列码,该散列码和签名作为验证函数的输入。验证函数同时还依赖于全局公开密钥和与签名方的私钥配对的验证方的公钥。如签名是有效的,验证函数的输出等于签名分量r。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。