第10章 终极武器—数字证书

本书阐述了大量的密码学算法,用于实现OSI参考模型中的安全服务:消息摘要算法用于验证数据完整性服务,对称加密算法和非对称加密算法用于保证数据保密性服务,数字签名算法用于抗否认性服务。

安全,向来不是一个简单的问题!如果仅仅使用一种单纯的防御手段,很难达到我们所期望的安全强度!安全的网络平台,需要多重密码学算法的有机结合!

数字证书集合了多种密码学算法:自身带有公钥信息,可完成相应的加密/解密操作;同时,还带有数字签名,可鉴别消息来源;且自身带有消息摘要信息,可验证证书的完整性;由于证书本身含有用户身份信息,因而具有认证性。

10.1 数字证书详解

数字证书具备常规加密/解密必要的信息,包含签名算法,可用于网络数据加密/解密交互,标识网络用户(计算机)身份。数字证书为发布公钥提供了一种简便的途径,其数字证书则成为加密算法以及公钥的载体。依靠数字证书,我们可以构建一个简单的加密网络应用平台。

数字证书(Digital Certificate)也称为电子证书,类似于我们生活中的身份证,用于标识网络中的用户(计算机)身份。在现实生活中,我们的身份证需由公安机关的签发,而网络用户(计算机)的身份凭证则需由数字证书颁发认证机构(Certificate Authority, CA)签发,只有经过CA签发的证书在网络中才具备可认证性。

VeriSign(http://www. verisign.com/)、GeoTrust(http://www.geotrust.com/)和Thawte(http://www.thawte.com/)是国际权威数字证书颁发认证机构的“三巨头”。其中,应用最为广泛的是VeriSign签发的电子商务用数字证书。

通常,这种由国际权威数字证书颁发认证机构颁发的数字证书需要向用户收取昂贵的申请和维护费用。但并不是所有的国际权威数字证书颁发认证机构都收费,CAcert(http://www.cacert.org/)就是一个免费的数字证书颁发国际组织。随着用户群的增大和颁发手段的可信性,这种免费的数字证书可信度也越来越高。

我国在每个省、直辖市设置有国家权威的数字证书颁发机构,比如北京市数字证书认证中心、安徽省数字证书认证中心、广东省电子商务认证中心等。

证书的签发过程实际上是对申请数字证书的公钥做数字签名,证书的验证过程实际上是对数字证书的公钥做验证签名,其中还包含证书有效期验证。

数字证书如图10-1所示,这是由CA(www.zlex.org)颁发给自己的数字证书,也称为“根证书”。

通过使用由CA颁发的数字证书,我们可以对网络上传输的数据进行加密/解密和签名/验证操作,确保数据的机密性、完整性和抗否认性。同时,数字证书中包含的用户信息可以明确地标识交易实体身份,具有认证性,保证交易实体身份的真实性,从而保障网络应用的安全性。

实际上,数字证书是采用了公钥基础设施(Public Key Infrastructure, PKI),使用了相应的加密算法确保网络应用的安全性:

❑非对称加密算法用于对数据进行加密/解密操作,确保数据的机密性。

❑数字签名算法对用于对数据进行签名/验证操作,确保数据的完整性和抗否认性。

❑消息摘要算法对用于对数字证书本身做摘要处理,确保数字证书完整性。

目前,数字证书中最为常用的非对称加密算法是RSA算法,与之配套使用的签名算法是SHA1withRSA算法,而最为常用的消息摘要算法是SHA1算法,相关信息如图10-2所示。

图10-2中的签名算法sha1RSA为SHA1withRSA缩写形式,指纹算法(SHA1)即为消息摘要算法。

figure_0346_0078

图 10-1 数字证书

figure_0346_0079

图 10-2 数字证书的详细信息

除了使用RSA算法外,我们还可以使用DSA算法。只是使用DSA算法无法完成加密/解密实现,即这样的数字证书不包括数据加密/解密功能。

数字证书有多种文件编码格式,主要包含CER编码、DER编码等:

❑CER(Canonical Encoding Rules,规范编码格式)是数字证书的一种编码格式,它是BER(Basic Encoding Rules,基本编码格式)的一个变种,比BER规定得更严格。

❑DER(Distinguished Encoding Rule,卓越编码格式)同样是BER的一个变种,与CER的不同之处在于:DER使用定长模式,而CER使用变长模式。

所有证书都符合公钥基础设施(PKI)制定的ITU-T X509国际标准(X.509标准),目前共包含3个版本。

❑PKCS(Public-Key Cryptography Standards,公钥加密标准)由RSA实验室和其他安全系统开发商为促进公钥密码的发展而制定的一系列标准。

PKCS至今共发布过15个标准,常用标准主要包括PKCS#7、PKCS#10和PKCS#12。PKCS常用标准详见表10-1。

figure_0347_0080

以上标准主要用于证书的申请和更新等操作,例如,PKCS#10文件用于证书签发申请,PKCS#12文件可作为Java中的密钥库或信任库直接使用。

通常使用Base64编码格式作为数字证书文件存储格式,如图10-3所示。

figure_0347_0081

图 10-3 数字证书的Base64编码格式

在获得数字证书后,可以将其保存在电脑里,也可以保存在IC卡或USB Key中。

我们在使用银行借记卡或信用卡进行网上交易时,为增强网络数据传输安全性使用银行提供的“U盾”或其他设备。这种设备中实际上存储了银行提供的数字证书,并可通过设备上固化的程序对数字证书做定期升级。