Hash函数与消息认证码可使合法通信双方不被系统外的第三方攻击与破坏,不过却不可避免系统内通信双方的相互不承认与欺骗。因此,安全的通信只有消息完整性认证是不行的,还需有可阻止通信双方互相作弊的安全机制,数字签名技术恰好能实现这一需求。在数字化和网络化的今天,大量的社会活动正在逐步实现电子化和无纸化,活动参与者主要是在计算机及网络上进行活动,因此传统的手书签名与印章已无法达到新技术下的需求。在此背景下,以公钥密码理论为基础的数字签名技术就产生了。
数字签名一般把某个算法执行在要签名的消息上,得到一种有执行者身份信息的编码。签名操作得到的编码叫做签名者对此消息的数字签名。消息与数字签名一起能在网络上传输,可由验证算法验证签名的真假与对相应签名者进行识别。
数字签名需符合3个基本要求:
(1)签名者何时都不能不承认自己之前签发的数字签名。
(2)接收方能核验与确认收到的数字签名,不过所有人都不能仿造别人的数字签名。
(3)由仲裁机构裁决数字签名的真假。
数字签名和手书签名也有许多不同,大体可概括为:
(1)在物理上,手书签名与被签文件是个整体,缺一不可;需借助某种方法把数字签名和对应的被签消息绑定在一起。
(2)在验证签名时,手书签名是借助物理比对,验证手书签名也要有一定技巧,更甚者要通过专业训练。而数字签名却可由一个严谨的验证算法无误地被验证,且任何人都可用此公开的算法验证数字签名的真假。安全的数字签名方案还可阻止一切仿冒数字签名的可能性。
(3)手书签名因人而不同,它的复制品和原件进行区分非常轻易,从而容易判断复制品无效;数字签名的复制品与原件是完全一样的二进制比特串,即两个相等的数值,无法区分原件与复制品。因此,一定要采取有效的手段避免带数字签名的消息被多次利用。
从以上可知,数字签名须能达到和手书签名一样或更强的功能。为达此目的,签名者必须对验证者给出充足的非保密信息,为了方便验证者能认出签名者的数字签名;不过签名者又不可以透露得到数字签名的任一机密信息,为避免他人伪造其签名。所以,签名算法必须能给出签名者用来验证签名的公开信息,但两者的信息交叉不能太多,联系也不能太直观,从公开的验证信息中不可轻易知道得到数字签名的机密信息,这是对签名算法的基本要求之一。