当前位置:文档之家› 第6章 数字签名

第6章 数字签名

第6章数字签名第五章介绍的公钥密码体制不仅能够有效解决密钥管理问题,而且能够实现数字签名(Digital Signature),提供数据来源的真实性、数据内容的完整性、签名者的不可否认性以及匿名性等信息安全相关的服务和保障。

数字签名对网络通信的安全以及各种用途的电子交易系统(如电子商务、电子政务、电子出版、网络学习、远程医疗等)的成功实现具有重要作用。

本章简要介绍数字签名的基本原理,重点给出常用的RSA签名、Rabin签名、ElGamal 签名等数字签名体制,以及数字签名标准DSS。

6.1 数字签名的基本原理6.1.1 数字签名的基本概念第四章讨论的Hash函数和消息认证码能够帮助合法通信的双方不受来自系统外部的第三方攻击和破坏,但却无法防止系统内通信双方之间的互相抵赖和欺骗。

当Alice和Bob进行通信并使用消息认证码提供数据完整性保护,一方面Alice确实向Bob发送消息并附加了用双方共享密钥生成的消息认证码,但随后Alice否认曾经发送了这条消息,因为Bob完全有能力生成同样消息及消息认证码;另一方面,Bob也有能力伪造一个消息及认证码并声称此消息来自Alice。

如果通信的过程没有第三方参与的话,这样的局面是难以仲裁的。

因此,安全的通信仅有消息完整性认证是不够的,还需要有能够防止通信双方相互作弊的安全机制,数字签名技术正好能够满足这一需求。

在人们的日常生活中,为了表达事件的真实性并使文件核准、生效,常常需要当事人在相关的纸质文件上手书签字或盖上表示自己身份的印章。

在数字化和网络化的今天,大量的社会活动正在逐步实现电子化和无纸化,活动参与者主要是在计算机及其网络上执行活动过程,因而传统的手书签名和印章已经不能满足新形势下的需求,在这种背景下,以公钥密码理论为支撑的数字签名技术应运而生。

数字签名是对以数字形式存储的消息进行某种处理,产生一种类似于传统手书签名功效的信息处理过程。

它通常将某个算法作用于需要签名的消息,生成一种带有操作者身份信息的编码。

通常我们将执行数字签名的实体称为签名者,所使用的算法称为签名算法,签名操作生成的编码称为签名者对该消息的数字签名。

消息连同其数字签名能够在网络上传输,可以通过一个验证算法来验证签名的真伪以及识别相应的签名者。

类似于手书签名,数字签名至少应该满足三个基本要求:(1)签名者任何时候都无法否认自己曾经签发的数字签名;(2)收信者能够验证和确认收到的数字签名,但任何人都无法伪造别人的数字签名;(3)当各方对数字签名的真伪产生争议时,通过仲裁机构(可信的第三方)进行裁决。

数字签名与手书签名也存在许多差异,大体上可以概括为:(1)手书签名与被签文件在物理上是一个整体,不可分离;数字签名与被签名的消息是可以互相分离的比特串,因此需要通过某种方法将数字签名与对应的被签消息绑定在一起。

(2) 在验证签名时,手书签名是通过物理比对,即将需要验证的手书签名与一个已经被证实的手书签名副本进行比较,来判断其真伪。

验证手书签名的操作也需要一定的技巧,甚至需要经过专门训练的人员和机构(如公安部门的笔迹鉴定中心)来执行。

而数字签名却能够通过一个严密的验证算法准确地被验证,并且任何人都可以借助这个公开的验证算法来验证一个数字签名的真伪。

安全的数字签名方案还能够杜绝伪造数字签名的可能性。

(3) 手书签名是手写的,会因人而异,它的复制品很容易与原件区分开来,从而容易确认复制品是无效的;数字签名的拷贝与其原件是完全相同的二进制比特串,或者说是两个相同的数值,不能区分谁是原件,谁是复制品。

因此,我们必须采取有效的措施来防止一个带有数字签名的消息被重复使用。

比如,Alice 向Bob 签发了一个带有他的数字签名的数字支票,允许Bob 从Alice 的银行账户上支取一笔现金,那么这个数字支票必须是不能重复使用的,即Bob 只能从Alice 的账户上支取指定金额的现金一次,否则Alice 的账户很快就会一无所有,这个结局是Alice 不愿意看到的。

从上面的对比可以看出,数字签名必须能够实现与手书签名同等的甚至更强的功能。

为了达到这个目的,签名者必须向验证者提供足够多的非保密信息,以便验证者能够确认签名者的数字签名;但签名者又不能泄露任何用于产生数字签名的机密信息,以防止他人伪造他的数字签名。

因此,签名算法必须能够提供签名者用于签名的机密信息与验证者用于验证签名的公开信息,但二者的交叉不能太多,联系也不能太直观,从公开的验证信息不能轻易地推测出用于产生数字签名的机密信息。

这是对签名算法的基本要求之一。

一个数字签名体制一般包含两个组成部分,即签名算法(Signature Algorithm )和验证算法(Verificaton Algorithm )。

签名算法用于对消息产生数字签名,它通常受一个签名密钥的控制,签名算法或者签名密钥是保密的,由签名者掌握;验证算法用于对消息的数字签名进行验证,根据签名是否有效验证算法能够给出该签名为“真”或者“假”的结论。

验证算法通常也受一个验证密钥的控制,但验证算法和验证密钥应当是公开的,以便需要验证签名的人能够方便地验证。

数字签名体制(Signature Algorithm System )是一个满足下列条件的五元组(,,,,)M S K SIG VER ,其中:●M 代表消息空间,它是某个字母表中所有串的集合; ●S 代表签名空间,它是所有可能的数字签名构成的集合; ●K 代表密钥空间,它是所有可能的签名密钥和验证密钥对(,)sk vk 构成的集合; ● SIG 是签名算法,VER 是验证算法。

对于任意的一个密钥对(,)sk vk K ∈,对于每一个消息m M ∈和签名s S ∈,签名变换SIG :sk M KS ⨯→和验证变换VER :M S ⨯{},vk K true false ⨯→是满足下列条件的函数:由上面的定义可以看出,数字签名算法与公钥加密算法在某些方面具有类似的性质,甚至在某些具体的签名体制中,二者的联系十分紧密,但是从根本上来讲,它们之间还是有本质的不同。

比如对消息的加解密一般是一次性的,只要在消息解密之前是安全的就行了;而被签名的消息可能是一个具体法定效用的文件,如合同等,很可能在消息被签名多年以后才需要验证它的数字签名,而且可能需要多次重复验证此签名。

因此,签名的安全性和防伪造的要求应更高一些,而且要求签名验证速度比签名生成速度还要快一些,特别是联机的在线实时验证。

6.1.2 数字签名的特性综合数字签名应当满足的基本要求,数字签名应具备一些基本特性,这些特性可以分为功能特性和安全特性两大方面,分别描述如下:数字签名的功能特性是指为了使数字签名能够实现我们需要的功能要求而应具备的一些特性,这类特性主要包括:(1) 依赖性。

数字签名必须依赖于被签名消息的具体比特模式,不同的消息具有不同的比特模式,因而通过签名算法生成的数字签名也应当是互不相同的。

也就是说一个数字签名与被签消息是紧密相关、不可分割的,离开被签消息,签名不再具有任何效用。

(2) 独特性。

数字签名必须是根据签名者拥有的独特信息来产生,包含了能够代表签名者特有身份的关键信息。

惟有这样,签名才不可伪造,也不能被签名者否认。

(3) 可验证性。

数字签名必须是可验证的,通过验证算法能够确切地验证一个数字签名的真伪。

(4) 不可伪造性。

伪造一个签名者的数字签名不仅在计算上不可行,而且希望通过重用或者拼接的方法伪造签名也是行不通的。

比如希望把一个签名者在过去某个时间对一个消息的签名用来作为该签名者在另一时间对另一消息的签名,或者希望将签名者对多个消息的多个签名组合成对另一消息的签名,都是不可行的。

(5) 可用性。

数字签名的生成、验证和识别的处理过程必须相对简单,能够在普通的设备上快速完成,甚至可以在线处理,签名的结果可以存储和备份。

除了上述功能特性之外,数字签名还应当具备一定的安全特性,以确保它提供的功能是安全的,能够满足我们的安全需求,实现预期的安全保障。

上面的不可伪造性也可以看作是安全特性的一个方面,除此之外,数字签名至少还应当具备如下安全特性:(1) 单向性。

类似于公钥加密算法,数字签名算法也应当是一个单向函数,即对于给定的数字签名算法,签名者使用自己的签名密钥sk 对消息m 进行数字签名是计算上容易的,但给定一个消息m 和它的一个数字签名s ,希望推导出签名者的签名密钥sk 是计算上不可行的。

()()sk sk true s SIG m false s SIG m =≠(,)vk VER m s =(2) 无碰撞性。

即对于任意两个不同的消息m m '≠,它们在同一个签名密钥下的数字签名()()sk sk SIG m SIG m '=相等的概率是可以忽略的。

(3) 无关性。

即对于两个不同的消息m m '≠,无论m 与m '存在什么样的内在联系,希望从某个签名者对其中一个消息的签名推导出对另一个消息的签名是不可能的。

数字签名算法的这些安全特性从根本上消除了成功伪造数字签名的可能性,使一个签名者针对某个消息产生的数字签名与被签消息的搭配是唯一确定的,不可篡改,也不可伪造。

生成数字签名的唯一途径是将签名算法和签名密钥作用于被签消息,除此之外别无它法。

6.1.3 数字签名的实现方法现在的数字签名方案大多是基于某个公钥密码算法构造出来的。

这是因为在公钥密码体制里,每一个合法实体都有一个专用的公私钥对,其中的公开密钥是对外公开的,可以通过一定的途径去查询;而私有密钥是对外保密的,只有拥有者自己知晓,可以通过公开密钥验证其真实性,因此私有密钥与其持有人的身份一一对应,可以看作是其持有人的一种身份标识。

恰当地应用发信方私有密钥对消息进行处理,可以使收信方能够确信收到的消息确实来自其声称的发信者,同时发信者也不能对自己发出的消息予以否认,即实现了消息认证和数字签名的功能。

图6-1给出公钥算法用于消息认证和数字签名的基本原理。

图6-1 基于公钥密码的数字签名体制在图6-1中,发信方Alice 用自己的私有密钥A sk 加密消息m ,任何人都可以轻易获得Alice 的公开秘密A pk ,然后解开密文c ,因此这里的消息加密起不了信息保密的作用。

可以从另一个角度来认识这种不保密的私钥加密,由于用私钥产生的密文只能由对应的公钥来解密,根据公私钥一一对应的性质,别人不可能知道Alice 的私钥,如果收信方Bob 能够用Alice 的公钥正确地还原明文,表明这个密文一定是Alice 用自己的私钥生成的,因此Bob 可以确信收到的消息确实来自Alice ,同时Alice 也不能否认这个消息是自己发送的;另一方面,在不知道发信者私钥的情况下不可能篡改消息的内容,因此收信者还可以确信收到的消息在传输过程中没有被篡改,是完整的。

相关主题