Setup(系统初始化):输入一个安全参数k,输出系统参数param、和系统私钥mk,该算法由密钥产生机构PKG运行,最后PKG公开params,保存mk。Extract(用户密钥生成):输入params、mk和用户的身份ID,输出用户的私钥diD,该算法由PKG完成,PKG用安全的信道将diD返回给用户。Sign(签名):输入一个安全参数r、params、diD以及消息M,输出对}肖息M的签名盯,该算法由用户实现。Verify(验证):输入params、签名人身份ID、消息m和签名,输出签名验证结果1或0,代表真和伪,该算法由签名的验证者完成。其中,签名算法和验证算法与一般签名方案形式相同。
4数字签名在电子政务中的应用
4.1意义
数字签名的过程和政务公文的加密/解密过程虽然都使用公开密钥体系,但实现的过程正好相反,使用的密钥对也各不相同。数字签名使用的是发送方的密钥对,发送方用自己的私钥进行加密,接收方用发送方的公钥进行解密。这是一个一对多的关系,即任何拥有发送方公钥的人都可以验证数字签名的正确性。政务公文的加密/解密则使用接收方的密钥对,这是多对一的关系,即任何知道接收方公钥的人都可以向接收方发送加密公文,只有唯一拥有接收方私钥的人才能对公文解密。在实际应用过程中,通常一个用户拥有两个密钥对,一个密钥对用来对数字签名进行加密,解密;另一个密钥对用来对公文进行加密懈密,这种方式提供了更高的安全性。
4.2形式
4.2.1个人单独签名
由于政务公文的文件相对来说都比较大,所以一般需要先对所要传输的原文进行加密压缩后形成一个文件摘要,然后对这个文件摘要进行数字签名。一般由两个阶段组成:对原文的数字签名和对数字签名的验证。
(1)对原文的数字签名
先采用单向散列哈希算法对所要传输的政务公文x进行加密计算和压缩,推算出一个文件摘要z。然后,公文的发送方用自己的私钥SKA对其加密后形成数字签名Y,并将该数字签名附在所要传送的政务公文后形成一个完整的信息包(X+Y)。再用接收方的公钥PKB对该信息包进行加密后,通过网络传输给接收方。
(2)对数字签名的验证
接收方收到该信息包后,首先用自己的私钥SKB对整个信息包进行解密,得到两部分信息:数字签名部分Y和政务公文原文部分x;其次,接收方利用发送方的公钥PKA对数字签名部分进行解密,得到一个文件摘要Z;接着,接收方也采用单向散列哈希算法对所收到的政务公文原文部分进行加密压缩,推算出另外一个文件摘要z1。由于原文的任何改动都会使推算出的文件摘要发生变化,所以只要比较两个文件摘要z和z1就可以知道公文在传输途中是否被篡改以及公文的来源所在。如果两个文件摘要相同,那么接收方就能确认该数字签名是发送方的,并且说明文件在传输过程中没有被破坏。通过数字签名能够实现对原始报文的鉴别。
4.2.2多重数字签名
在电子政务的应用中,有时也需要多个人批阅同一份文件,这就需要用到多重数字签名,多重数字签名与现实环境中多人书面签名的最大区别在于书面签名的长度与签名人数成正比,而多重数字签名的长度与个人单独签名长度相同。根据签名顺序和过程的不同,又可分为有序多重签名和广播多重签名。
有序多重数字签名是由文件的发送者规定好签名的顺序,每一位签名者只要验证前一位签名者的签名信息,如果通过验证,就在原来的基础上加上自己的数字签名后把文件发送给下一位签名者,如果验证失败则终止签名过程。最后一名签名者要负责把文件和最终的签名传输给接收者。多重数字签名的实现可以与电子政务的实际工作流程结合应用,以达到简单实用的目的。