4.3.4数字签名
数字签名与消息认证不同,消息认证使接收方能验证消息发送者是谁及所发消息是否被篡改。当发、收者之间没有利害冲突时,只要防止第三者破坏就足够了。但是,当发、收双方有利害冲突,单是消息认证技术就无法解决他们之间的纠纷,此时就必须采用数字签名了。
众所周知,传统的书信文件是根据亲笔签名和印章来证明其真实性的,这对于在计算机网络中传输的报文自然很不现实。怎么确定网络传输中的文件确实是发送者发送过来的?这个问题用数字签名就可以辨认数字化文件。数字签名必须保证以下3点:
(1)接收者能够核实发送者对报文的签名。
(2)发送者事后不能抵赖对报文的签名。
(3)接收者不能伪造对报文的签名。
由上可见,数字签名必须具有认证的功能。数字签名除了要做到上述3点外,它最好能产生比较容易的识别,签名和验证最好也比较容易。
数字签名比手写的签名更加难以伪造。数字签名是使用公开的算法来验证的,任何人都可以验证其真伪,手写签名则需要经验丰富的人员才可以辨认出来。数字签名中签名和消息是分开处理的,而在传统的手写签名中,签名被认为是消息的一部分。
现在有多种实现各种数字签名的方法,这些方法大致可归为两种:直接方式的数字签名和具有仲裁方式的数字签名。直接方式的数字签名只有通信双方参与,实际上就是单钥体制的认证算法,其方案的有效性取决于发方密钥的安全性。具有仲裁方式的数字签名实际上就是公钥加密体制的认证原理。
发送者a用其私钥SKA和用b的公钥加密算法(比如RSA)对报文x进行加密运算,将结果DSKA(x)传送给接收者b。a的密钥只有a自己知道。b用已知的a的公钥和相应的公钥解密算法对签名的报文解密得出EPKA(DSKA(x))=x。因为除a外没有别人能具有a的私钥SKA,所以除a外没有别人能够产生密文DSKA(x)。这样报文x就被签名了。
假如a要抵赖曾发送报文给b,b可将x及DSKA(x)出示给第三方。第三方很容易用PAK去证实a确实发送消息x给b。反之,如果是b伪造的x,b不能在第三方面前出示DSKA(x),这样就证明b伪造了报文。可以看出,实现数字签名也同时实现了对报文来源的鉴定。SKA为a的私钥,而PKA为a的公钥,这里的第三方实际上就是仲裁机构。