§9.3 数字签名


数字签名(又称公钥数字签名):只有信息的发送者通过某种密码运算生成别人无法伪造的一系列符号及代码组成电子密码,对信息的发送者发送信息真实性进行签名,来代替书写签名或印章。数字签名能验证出文件的原文在传输过程中有无变动,确保传输电子文件的完整性、真实性和不可抵赖性。
数字签名与公开密钥加密与解密过程算法是一样的,因此,可采用公开密钥密码系统(非对称密钥密码系统)实现数字签名。
数字签名与公开密钥加密与解密过程算法是一样,密钥的使用不同:
公开密钥密码系统:用收件人的公钥加密,用收件人的私钥解密
数字签名:用发件人的私钥加密,用发件人的公钥解密。
目前,数字签名技术大多基于哈希函数和非对称密钥加密体制来实现。如果签名者想要对某个文件进行数字签名,他必须首先从可信的第三方机构(数字证书认证中心CA)取得私钥和公钥,这需要用到PKI(公钥基础设施)技术,常见的数字签名算法主要有RSA、DSA、ECDSA三种,RSA数字签名算法主要包括MD和SHA两类。
1.有哈希算法的数字签名与验证
利用哈希函数可以把任意长度的输入经散列函数算法变换成固定长度的输出,该输出的哈希值就是消息摘要,也称数字摘要。在正式的数字签名中,发送方首先对发送文件采用哈希算法,得到一个固定长度的消息摘要( Message Digest);再用自己的私钥( Secret key,SK)对消息摘要进行签名,形成发送方的数字签名。数字签名将作为附件和原文一起发送给接收方;接收方首先用发送方的公钥对数字签名进行解密得到发送方的数字摘要,然后用相同的哈希函数对原文进行哈希计算,得到一个新的消息摘要,最后将消息摘要与收到的消息摘要做比较。

2.基于非对称密钥加密体制的数字签名与验证
发送方首先将原文用自己的私钥加密得到数字签名,然后将原文和数字签名一起发送给接收方。接收方用发送方的公钥对数字签名进行解密,最后与原文进行比较,数字签名是目前电子商务、电子政务中应用普遍、技术成熟、可操作性强的一种电子签名方法。它采用了规范化的程序和科学化的方法,用于鉴定签名人的身份以及对一项电子数据内容的认可。使用数字签名技术能够验证文件的原文在传输过程中有无变动,确保传输电子文件的完整性、真实性和不可抵赖性。

数字证书
1. 数字证书
"证书 -- 为公钥加上数字签名"
要开车得先考驾照.驾照上面记有本人的照片、姓名、出生日期等个人信息.以及有效期、准驾车辆的类型等信息,并由公安局在上面盖章。我们只要看到驾照,就可以知道公安局认定此人具有驾驶车辆的资格。
公钥证书(Public-Key Certificate,PKC)其实和驾照很相似,里面记有姓名、组织、邮箱地址等个人信息,以及属于此人的公钥,并由认证机构(Certification Authority、Certifying Authority, CA)施加数字签名。只要看到公钥证书,我们就可以知道认证机构认定该公钥的确属于此人。公钥证书也简称为证书(certificate)。
可能很多人都没听说过认证机构,认证机构就是能够认定 “公钥确实属于此人",并能够生成数字签名的个人或者组织。认证机构中有国际性组织和政府所设立的组织,也有通过提供认证服务来盈利的一般企业,此外个人也可以成立认证机构。
2. 证书的应用场景
下面我们来通过证书的代表性应用场景来理解证书的作用。
下图展示了Alice向Bob发送密文的场景,在生成密文时所使用的Bob的公钥是通过认证机构获取的。认证机构必须是可信的,对于“可信的第三方”,下图中会使用Trent这个名字,这个词是从trust(信任)一词演变而来的。

下面让我们对照着上图来看一看这些步骤具体都做了些什么。
1、Bob生成密钥对
要使用公钥密码进行通信,首先需要生成密钥对。Bob生成了一对公钥和私钥,并将私钥自行妥善保管。在这里,密钥对是由Bob自己生成的,也可以由认证机构代为生成。
2、Bob在认证机构Trent注册自己的公钥
A、在这里Bob则将公钥发送给了认证机构Trent,这是因为Bob需要请认证机构Trent对他的公钥加上数字签名(也就是生成证书)。
B、Trent收到Bob的公钥后,会确认所收到的公钥是否为Bob本人所有(参见附录:身份确认和认证业务准则)。
3、认证机构Trent用自己的私钥对Bob的公钥施加数字签名并生成证书
Trent对Bob的公钥加上数字签名。为了生成数字签名,需要Trent自身的私钥,因此Trent需要事先生成好密钥对。
4、Alice得到带有认证机构Trent的数字签名的Bob的公钥(证书)
现在Alice需要向Bob发送密文,因此她从Trent处获取证书。证书中包含了Bob的公钥。
5、Alice使用认证机构Trent的公钥验证数字签名,确认Bob的公钥的合法性
Alice使用认证机构Trent的公钥对证书中的数字签名进行验证。如果验证成功,就相当于确认了证书中所包含的公钥的确是属于Bob的。到这里,Alice就得到了合法的Bob的公钥。
6、Alice用Bob的公钥加密消息并发送给Bob
Alice用Bob的公钥加密要发送的消息,并将消息发送给Bob。
7、Bob用自己的私钥解密密文得到Alice的消息
Bob收到Alice发送的密文,然后用自己的私钥解密,这样就能够看到Alice的消息了。
上面就是利用认证机构Trent进行公钥密码通信的流程。其中1、2、3这几个步骤仅在注册新公钥时才会进行,并不是每次通信都需要。此外,步骤 4 仅在Alice第一次用公钥密码向Bob发送消息时才需要进行,只要Alice将Bob的公钥保存在电脑中,在以后的通信中就可以直接使用了。
附录:身份确认和认证业务准则
认证机构确认"本人"身份的方法和认证机构的认证业务准则(CertificatePractice Statement, CPS,的内容有关。如果认证机构提供的是测试用的服务,那么可能完全不会进行任何身份确认。如果是政府部门运營的认证机构,可能就需要根据法律规定来进行身份确认。如果是企业面向内部设立的认证机构,那就可能会给部门负责人打电话直接确认。
例如,VeriSign的认证业务准则中将身份确认分为Class1 ~ 3共三个等级
Class1:通过向邮箱发送件来确认本人身份
Class2:通过第三方数据库来确认本人身份
Class3:通过当面认证和身份证明来确认本人身份
等级越高,身份确认越严格。


