现在的位置: 首页 > 综合 > 正文

PKI系统深入介绍

2013年08月19日 ⁄ 综合 ⁄ 共 18045字 ⁄ 字号 评论关闭

        公钥基础设施(Public Key Infrastructure,简称PKI)是目前网络安全建设的基础与核心,是电子商务安全实施的基本保障,因此,对PKI技术的研究和开发成为目前信息安全领域的热点。本文对PKI技术进行了全面的分析和总结,其中包括PKI组成、证书认证机构CA、PKI应用、应用编程接口和PKI标准等,并对CA的开发做了简要分析。本文对PKI,特别是CA的开发、应用和普及具有一定的促进作用。

1 前言

随着网络技术和信息技术的发展,电子商务已逐步被人们所接受,并在得到不断普及。但由于各种原因,国内电子商务的安全性仍不能得到有效的保障。在常规业务中,交易双方现场交易,可以确认购买双方的身份。利用商场开具的发票和客户现场支付商品费用,无须担心发生纠纷和无凭证可依。但通过网上进行电子商务交易时,由于交易双方并不现场交易,因此,无法确认双方的合法身份,同时交易信息是交易双方的商业秘密,在网上传输时必须保证安全性,防止信息被窃取;双方的交易非现场交易,一旦发生纠纷,必须能够提供仲裁。

因此,在电子商务中,必须从技术上保证在交易过程中能够实现身份认证、安全传输、不可否认性、数据完整性。在采用数字证书认证体系之前,交易安全一直未能真正得到解决。由于数字证书认证技术采用了加密传输和数字签名,能够实现上述要求,因此在国内外电子商务中,都得到了广泛的应用。

PKI采用证书进行公钥管理,通过第三方的可信任机构(认证中心,即CA),把用户的公钥和用户的其他标识信息捆绑在一起,其中包括用户名和电子邮件地址等信息,以在Internet网上验证用户的身份。PKI把公钥密码和对称密码结合起来,在Internet网上实现密钥的自动管理,保证网上数据的安全传输。

因此,从大的方面来说,所有提供公钥加密和数字签名服务的系统,都可归结为PKI系统的一部分,PKI的主要目的是通过自动管理密钥和证书,为用户建立起一个安全的网络运行环境,使用户可以在多种应用环境下方便的使用加密和数字签名技术,从而保证网上数据的机密性、完整性、有效性。数据的机密性是指数据在传输过程中,不能被非授权者偷看;数据的完整性是指数据在传输过程中不能被非法篡改;数据的有效性是指数据不能被否认。

一个有效的PKI系统必须是安全的和透明的,用户在获得加密和数字签名服务时,不需要详细地了解PKI的内部运作机制。在一个典型、完整和有效的PKI系统中,除证书的创建和发布,特别是证书的撤销,一个可用的PKI产品还必须提供相应的密钥管理服务,包括密钥的备份、恢复和更新等。没有一个好的密钥管理系统,将极大影响一个PKI系统的规模、可伸缩性和在协同网络中的运行成本。在一个企业中,PKI系统必须有能力为一个用户管理多对密钥和证书;能够提供安全策略编辑和管理工具,如密钥周期和密钥用途等。

PKI发展的一个重要方面就是标准化问题,它也是建立互操作性的基础。目前,PKI标准化主要有两个方面:一是RSA公司的公钥加密标准PKCS(Public Key Cryptography Standards),它定义了许多基本PKI部件,包括数字签名和证书请求格式等;二是由Internet工程任务组IETF(Internet Engineering Task Force)和PKI工作组PKIX(Public Key Infrastructure Working Group)所定义的一组具有互操作性的公钥基础设施协议。在今后很长的一段时间内,PKCS和PKIX将会并存,大部分的PKI产品为保持兼容性,也将会对这两种标准进行支持。

PKI的发展非常快,已经从几年前的理论阶段过渡到目前的产品阶段,并且出现了大量成熟技术、产品和解决方案,正逐步走向成熟。PKI的发展受应用驱动的影响,比如,早期的Internet商务和Web安全要求主要依赖于SSL,并要求应用首先对证书进行处理,所以,在很多公司的消息和群组产品中都提供了公钥和证书系统,如Exchange和Notes等。另外,基于标准的基础设施和应用也同样促进了PKI的发展,它能够保证基于Internet的安全消息传送的可交互性,如S/MIME等。

目前,PKI产品的生产厂家很多,比较有代表性的主要有VeriSign和Entrust。VeriSign作为RSA的控股公司,借助RSA成熟的安全技术,提供了PKI产品,为用户之间的内部信息交互提供安全保障。另外,VeriSign也提供对外的CA服务,包括证书的发布和管理等功能,并且同一些大的生产商,如Microsoft、Netscape和JavaSoft等,保持了伙伴关系,以在Internet上提供代码签名服务。

Entrust作为北方电讯(Northern Telecom)的控股公司,从事PKI的研究与产品开发已经有很多年的历史了,并一直在业界保持领先地位,拥有许多成熟的PKI及配套产品,并提供了有效的密钥管理功能。

另外,一些大的厂商,如Microsoft、Netscape和Novell等,都开始在自己的网络基础设施产品中增加PKI功能。Netscape已经开始把证书服务器作为了SuiteSpot的一部分,虽然其证书服务器没有Entrust产品的功能全面和完善,但提供了基本的证书生成和管理功能。即使没有密钥管理功能,但由于Netscape把证书服务器同SuiteSpot服务器和Communicator客户端产品的集成,依靠广泛的市场基础,也取得的越来越多的市场份额。由SUN和Netscape联盟组成的iplanet公司(Sun|Netscape Alliance)也在PKI方面做了很大的努力,凭借其在网络和电子商务方面的优势,发展了很多性能优越的PKI产品,如LDAP目录服务器和证书管理系统等。

2 PKI组成

PKI作为一组在分布式计算系统中利用公钥技术和X.509证书所提供的安全服务,企业或组织可利用相关产品建立安全域,并在其中发布密钥和证书。在安全域内,PKI管理加密密钥和证书的发布,并提供诸如密钥管理(包括密钥更新,密钥恢复和密钥委托等)、证书管理(包括证书产生和撤销等)和策略管理等。PKI产品也允许一个组织通过证书级别或直接交叉认证等方式来同其他安全域建立信任关系。这些服务和信任关系不能局限于独立的网络之内,而应建立在网络之间和Internet之上,为电子商务和网络通信提供安全保障,所以具有互操作性的结构化和标准化技术成为PKI的核心

PKI在实际应用上是一套软硬件系统和安全策略的集合,它提供了一整套安全机制,使用户在不知道对方身份或分布地很广的情况下,以证书为基础,通过一系列的信任关系进行通讯和电子商务交易。

                                                         图 1       PKI组成

一个典型的PKI系统如图1所示,其中包括PKI策略、软硬件系统、证书机构CA、注册机构RA、证书发布系统和PKI应用等。

1. PKI安全策略建立和定义了一个组织信息安全方面的指导方针,同时也定义了密码系统使用的处理方法和原则。它包括一个组织怎样处理密钥和有价值的信息,根据风险的级别定义安全控制的级别。一般情况下,在PKI中有两种类型的策略:一是证书策略,用于管理证书的使用,比如,可以确认某一CA是在Internet上的公有CA,还是某一企业内部的私有CA;另外一个就是CPS(Certificate Practice Statement)。一些由商业证书发放机构(CCA)或者可信的第三方操作的PKI系统需要CPS。这是一个包含如何在实践中增强和支持安全策略的一些操作过程的详细文档。它包括CA是如何建立和运作的,证书是如何发行、接收和废除的,密钥是如何产生、注册的,以及密钥是如何存储的,用户是如何得到它的等等。 

2. 证书机构CA是PKI的信任基础,它管理公钥的整个生命周期,其作用包括:发放证书、规定证书的有效期和通过发布证书废除列表(CRL)确保必要时可以废除证书。后面将会在CA进行详细介绍。 

3. 注册机构RA提供用户和CA之间的一个接口,它获取并认证用户的身份,向CA提出证书请求。它主要完成收集用户信息和确认用户身份的功能。这里指的用户,是指将要向认证中心(即CA)申请数字证书的客户,可以是个人,也可以是集团或团体、某政府机构等。注册管理一般由一个独立的注册机构(即RA)来承担。它接受用户的注册申请,审查用户的申请资格,并决定是否同意CA给其签发数字证书。注册机构并不给用户签发证书,而只是对用户进行资格审查。因此,RA可以设置在直接面对客户的业务部门,如银行的营业部、机构认识部门等。当然,对于一个规模较小的PKI应用系统来说,可把注册管理的职能由认证中心CA来完成,而不设立独立运行的RA。但这并不是取消了PKI的注册功能,而只是将其作为CA的一项功能而已。PKI国际标准推荐由一个独立的RA来完成注册管理的任务,可以增强应用系统的安全。 

4. 证书发布系统负责证书的发放,如可以通过用户自己,或是通过目录服务。目录服务器可以是一个组织中现存的,也可以是PKI方案中提供的。 

PKI的应用非常广泛,包括在web服务器和浏览器之间的通讯、电子邮件、电子数据交换(EDI)、在Internet上的信用卡交易和虚拟私有网(VPN)等。 

 

一个简单的PKI系统包括证书机构CA、注册机构RA和相应的PKI存储库。CA用于签发并管理证书;RA可作为CA的一部分,也可以独立,其功能包括个人身份审核、CRL管理、密钥产生和密钥对备份等;PKI存储库包括LDAP目录服务器和普通数据库,用于对用户申请、证书、密钥、CRL和日志等信息进行存储和管理,并提供一定的查询功能。

3 证书认证机构CA

3.1 数字证书基础

数字证书是一种数字标识,可以说是Internet上的安全护照或身份证明。当人们到其他国家旅行时,用户护照可以证实其身份,并被获准进入这个国家。数字证书提供的是网络上的身份证明。

数字证书是一个经证书授权中心数字签名的包含公开密钥拥有者信息和公开密钥的文件。最简单的证书包含一个公开密钥、名称以及证书授权中心的数字签名。一般情况下证书中还包括密钥的有效时间,发证机关(证书授权中心)的名称,该证书的序列号等信息,证书的格式遵循ITUT X.509国际标准。

3.1.1 证书格式 
在Internet网络中,应用程序使用的证书都来自不同的厂商或组织,为了实现可交互性,要求证书能够被不同的系统识别,符合一定的格式,并实现标准化。X.509为证书及其CRL格式提供了一个标准。但X.509本身不是Internet标准,而是国际电联ITU标准,它定义了一个开放的框架,并在一定的范围内可以进行扩展。 

为了适应PKI技术的发展,IETF也必须制定在Internet上使用X.509和CRL的标准。PKIX工作组就提供了一个Internet草案"Part I: X.509 Certificate and CRL Profile"(详细内容可见:ftp://ftp.ietf.org/internet-drafts/draft-ietf-pkix-ipki-part1-11.txt),用于定义在Internet PKI中使用X.509和CRL的方法和规范。该草案把X.509作为标准,并对各标准项和扩展做了说明,基本接收了X.509作为Internet中的证书标准,但也定义了被PKI应用的X.509 V3和CRL V2标准格式的设置,这些设置包含了PKIX工作组对X.509所做的一些新的扩展。

X.509目前有三个版本:V1、V2和V3,其中V3是在V2的基础上加上扩展项后的版本,这些扩展包括由ISO文档(X.509-AM)定义的标准扩展,也包括由其他组织或团体定义或注册的扩展项。X.509由ITU-T X.509(前身为CCITT X.509)或ISO/IEC 9594-8定义,最早以X.500目录建议的一部分发表于1988年,并作为V1版本的证书格式。X.500于1993年进行了修改,并在V1基础上增加了两个额外的域,用于支持目录存取控制,从而产生了V2版本。

为了适应新的需求ISO/IEC和ANSI X9发展了X.509 V3版本证书格式,该版本证书通过增加标准扩展项对V1和V2证书进行了扩展。另外,根据实际需要,各个组织或团体也可以增加自己的私有扩展。

X.509 V1和V2证书所包含的主要内容如下:

· 证书版本号(Version):版本号指明X.509证书的格式版本,现在的值可以为0、1、2,也为将来的版本进行了预定义。 

· 证书序列号(SerialNumber):序列号指定由CA分配给证书的唯一的数字型标识符。当证书被取消时,实际上是将此证书的序列号放入由CA签发的CRL中,这也是序列号唯一的原因。 

· 签名算法标识符(Signature):签名算法标识用来指定由CA签发证书时所使用的签名算法。算法标识符用来指定CA签发证书时所使用的公开密钥算法和hash算法,须向国际知名标准组织(如ISO)注册。 

· 签发机构名(Issuer):此域用来标识签发证书的CA的X.500 DN名字。包括国家、省市、地区、组织机构、单位部门和通用名。 

· 有效期(Validity):指定证书的有效期,包括证书开始生效的日期和时间以及失效的日期和时间。每次使用证书时,需要检查证书是否在有效期内。 

· 证书用户名(Subject):指定证书持有者的X.500唯一名字。包括国家、省市、地区、组织机构、单位部门和通用名,还可包含email地址等个人信息等 

· 证书持有者公开密钥信息(subjectPublicKeyInfo):证书持有者公开密钥信息域包含两个重要信息:证书持有者的公开密钥的值;公开密钥使用的算法标识符。此标识符包含公开密钥算法和hash算法。 

· 签发者唯一标识符(Issuer Unique Identifier):签发者唯一标识符在第2版加入证书定义中。此域用在当同一个X.500名字用于多个认证机构时,用一比特字符串来唯一标识签发者的X.500名字。可选。 

· 证书持有者唯一标识符(Subject Unique Identifier):持有证书者唯一标识符在第2版的标准中加入X.509证书定义。此域用在当同一个X.500名字用于多个证书持有者时,用一比特字符串来唯一标识证书持有者的X.500名字。可选。 

· 签名值(Issuer's Signature):证书签发机构对证书上述内容的签名值。 

X.509 V3证书是在v2的基础上一标准形式或普通形式增加了扩展项,以使证书能够附带额外信息。标准扩展是指由X.509 V3版本定义的对V2版本增加的具有广泛应用前景的扩展项,任何人都可以向一些权威机构,如ISO,来注册一些其他扩展,如果这些扩展项应用广泛,也许以后会成为标准扩展项。

3.1.2 CRL格式 
证书废除列表CRL(Certificate revocation lists,又称证书黑名单)为应用程序和其它系统提供了一种检验证书有效性的方式。任何一个证书废除以后,证书机构CA会通过发布CRL的方式来通知各个相关方。目前,同X.509 V3证书对对应的CRL为X.509 v2 CRL,其所包含的内容格式如下: 

· CRL的版本号:0表示X.509 V1 标准;1表示X.509 V2 标准;目前常用的是同X.509 V3证书对应的CRL V2版本。 

· 签名算法:包含算法标识和算法参数,用于指定证书签发机构用来对CRL内容进行签名的算法。 

· 证书签发机构名:签发机构的DN名,由国家、省市、地区、组织机构、单位部门和通用名等组成。 

· 此次签发时间:此次CRL签发时间,遵循ITU-T X.509 V2标准的CA在2049年之前把这个域编码为UTCTime类型,在2050或2050年之后年之前把这个域编码为GeneralizedTime类型。 

· 下次签发时间:下次CRL签发时间,遵循ITU-T X.509 V2标准的CA在2049年之前把这个域编码为UTCTime类型,在2050或2050年之后年之前把这个域编码为GeneralizedTime类型。 

· 用户公钥信息,其中包括废除的证书序列号和证书废除时间。废除的证书序列号是指要废除的由同一个CA签发的证书的一个唯一标识号,同一机构签发的证书不会有相同的序列号。 

· 签名算法:对CRL内容进行签名的签名算法。 

· 签名值:证书签发机构对CRL内容的签名值。 

另外,CRL中还包含扩展域和条目扩展域。CRL扩展域用于提供与CRL有关的额外信息部份,允许团体和组织定义私有的CRL扩展域来传送他们独有的信息;CRL条目扩展域则提供与CRL条目有关的额外信息部份,允许团体和组织定义私有的CRL条目扩展域来传送他们独有的信息。

3.1.3 证书的存放 
数字证书作为一种电子数据格式,可以直接从网上下载,也可以通过其他方式。 

· 使用IC卡存放用户证书。即把用户的数字证书写到IC卡中,供用户随身携带。这样用户在所有能够读IC卡证书的电子商务终端上都可以享受安全电子商务服务。 

· 用户证书直接存放在磁盘或自己的终端上。户将从CA申请来的证书下载或复制到磁盘或自己的PC机或智能终端上,当用户使用自己的终端享受电子商务服务时,直接从终端读入即可。 

· 另外,CRL一般通过网上下载的方式存储在用户端。


3.2 CA框架模型

证书机构CA用于创建和发布证书,它通常为一个称为安全域(security domain)的有限群体发放证书。创建证书的时候,CA系统首先获取用户的请求信息,其中包括用户公钥(如果用户端是个人使用或者测试用,则公钥一般由用户端产生,如电子邮件程序或浏览器等或者使用第三方开发的具有独立CSP的智能终端如USBkey),CA将根据用户的请求信息产生证书,并用自己的私钥对证书进行签名。其他用户、应用程序或实体将使用CA的公钥对证书进行验证。如果一个CA系统是可信的,则验证证书的用户可以确信,他所验证的证书中的公钥属于证书所代表的那个实体。

CA还负责维护和发布证书废除列表CRL(certificate revocation lists,又称为证书黑名单)。当一个证书,特别是其中的公钥因为其他原因无效时(不是因为到期),CRL提供了一种通知用户和其他应用的中心管理方式。CA系统生成CRL以后,要么是放到LDAP服务器中供用户查询或下载,要么是放置在Web服务器的合适位置,以页面超级连接的方式供用户直接查询或下载。

一个典型的CA系统包括安全服务器、注册机构RA、CA服务器、LDAP目录服务器和数据库服务器等。如图2所示。

                                                   图2    典型CA框架模型

安全服务器:安全服务器面向普通用户,用于提供证书申请、浏览、证书撤消列表以及证书下载等安全服务。安全服务器与用户的的通信采取安全信道方式(如SSL的方式,不需要对用户进行身份认证)。用户首先得到安全服务器的证书(该证书由CA颁发),然后用户与服务器之间的所有通信,包括用户填写的申请信息以及浏览器生成的公钥均以安全服务器的密钥进行加密传输,只有安全服务器利用自己的私钥解密才能得到明文,这样可以防止其他人通过窃听得到明文。从而保证了证书申请和传输过程中的信息安全性。 

CA服务器:CA服务器使整个证书机构的核心,负责证书的签发。CA首先产生自身的私钥和公钥(密钥长度至少为1024位),然后生成数字证书,并且将数字证书传输给安全服务器。CA还负责为操作员、安全服务器以及注册机构服务器生成数字证书。安全服务器的数字证书和私钥也需要传输给安全服务器。CA服务器是整个结构中最为重要的部分,存有CA的私钥以及发行证书的脚本文件,出于安全的考虑,应将CA服务器与其他服务器隔离,任何通信采用人工干预的方式,确保认证中心的安全。 

注册机构RA:登记中心服务器面向登记中心操作员,在CA体系结构中起承上启下的作用,一方面向CA转发安全服务器传输过来的证书申请请求,另一方面向LDAP服务器和安全服务器转发CA颁发的数字证书和证书撤消列表。 

LDAP服务器:LDAP服务器提供目录浏览服务,负责将注册机构服务器传输过来的用户信息以及数字证书加入到服务器上。这样其他用户通过访问LDAP服务器就能够得到其他用户的数字证书。 

数据库服务器:数据库服务器是认证机构中的核心部分,用于认证机构中数据(如密钥和用户信息等)、日志合统计信息的存储和管理。实际的的数据库系统应采用多种措施,如磁盘阵列、双机备份和多处理器等方式,以维护数据库系统的安全性、稳定性、可伸缩性和高性能。 

3.3 证书的申请和撤销

证书的申请有两种方式,一是在线申请,另外一个就是离线申请。在线申请就是通过浏览器或其他应用系统通过在线的方式来申请证书,这种方式一般用于申请普通用户证书或测试证书。离线方式一般通过人工的方式直接到证书机构证书受理点去办理证书申请手续,通过审核后获取证书,这种方式一般用于比较重要的场合,如服务器证书和商家证书等。下面讨论的主要是在线申请方式。

当证书申请时,用户使用浏览器通过Internet访问安全服务器,下载CA的数字证书(又叫做根证书),然后注册机构服务器对用户进行身份审核,认可后便批准用户的证书申请,然后操作员对证书申请表进行数字签名,并将申请及其签名一起提交给CA服务器。

CA操作员获得注册机构服务器操作员签发的证书申请,发行证书或者拒绝发行证书,然后将证书通过硬拷贝的方式传输给注册机构服务器。注册机构服务器得到用户的证书以后将用户的一些公开信息和证书放到LDAP服务器上提供目录浏览服务,并且通过电子邮件的方式通知用户从安全服务器上下载证书。用户根据邮件的提示到指定的网址下载自己的数字证书,而其他用户可以通过LDAP服务器获得他的公钥数字证书。

证书申请的步骤如下:

1. 用户申请 

用户首先下载CA的证书,又叫根证书,然后在证书的申请过程中使用SSL安全方式与服务器建立连接,用户填写个人信息,浏览器生成私钥和公钥对,将私钥保存客户端特定文件中,并且要求用口令保护私钥,同时将公钥和个人信息提交给安全服务器。安全服务器将用户的申请信息传送给注册机构服务器。 

2. 注册机构审核 

用户与注册机构人员联系,证明自己的真实身份,或者请求代理人与注册机构联系。 注册机构操作员利用自己的浏览器与注册机构服务器建立SSL安全通信,该服务器需要对操作员进行严格的身份认证,包括操作员的数字证书、IP地址,为了进一步保证安全性,可以设置固定的访问时间。操作员首先查看目前系统中的申请人员,从列表中找出相应的用户,点击用户名,核对用户信息,并且可以进行适当的修改,如果操作员同意用户申请证书请求,必须对证书申请信息进行数字签名。操作员也有权利拒绝用户的申请。操作员与服务器之间的所有通信都采用加密和签名,具有安全性、抗否认性,保证了系统的安全性和有效性。 

3. CA发行证书 

注册机构RA通过硬拷贝的方式向CA传输用户的证书申请与操作员的数字签名,CA操作员查看用户的详细信息,并且验证操作员的数字签名,如果签名验证通过,则同意用户的证书请求,颁发证书。然后CA将证书输出。如果CA操作员发现签名不正确,则拒绝证书申请, CA颁发的数字证书中包含关于用户及CA自身的各种信息,如:能唯一标识用户的姓名及其他标识信息,如个人的email地址;证书持有者的公钥。公钥用于为证书持有者加密敏感信息、签发个人证书的认证机构的名称、个人证书的序列号和个人证书的有效期(证书有效起止日期)等 

4. 注册机构证书转发 

注册机构RA操作员从CA处得到新的证书,首先将证书输出到LDAP目录服务器以提供目录浏览服务,最后操作员向用户发送一封电子邮件,通知用户证书已经发行成功,并且把用户的证书序列号告诉用户到指定的网址去下载自己的数字证书。并且告诉用户如何使用安全服务器上的LDAP配置,让用户修改浏览器的客户端配置文件以便访问LDAP服务器,获得他人的数字证书。 

5. 用户证书获取 

用户使用证书申请时的浏览器到指定的网址,键入自己的证书序列号,服务器要求用户必须使用申请证书时的浏览器,因为浏览器需要用该证书相应的私钥去验证数字证书。只有保存了相应私钥的浏览器才能成功下载用户的数字证书。 

这时用户打开浏览器的安全属性,就可以发现自己已经拥有了CA颁发的数字证书,可以利用该数字证书与其他人以及web服务器(拥有相同CA颁发的证书)使用加密、数字签名进行安全通信。

认证中心还涉及到CRL的管理。用户向特定的操作员(仅负责CRL的管理)发一份加密签名的邮件,申明自己希望撤消证书。操作员打开邮件,填写CRL注册表,并且进行数字签名,提交给CA,CA操作员验证注册机构操作员的数字签名,批准用户撤消证书,并且更新CRL,然后CA将不同格式的CRL输出给注册机构,公布到安全服务器上,这样其他人可以通过访问服务器得到CRL。

证书撤销流程步骤如下:

1. 用户向注册机构操作员CRLManager发送一封签名加密的邮件,声明自己自愿撤消证书。 

2. 这册机构同意证书撤消,操作员键入用户的序列号,对请求进行数字签名。 

3. CA查询证书撤消请求列表,选出其中的一个,验证操作员的数字签名,如果正确的话,则同意用户的证书撤消申请,同时更新CRL列表,然后将CRL以多种格式输出。 

4. 注册机构转发证书撤消列表。操作员导入CRL,以多种不同的格式将CRL公布于众。 

5. 用户浏览安全服务器,下载或浏览CRL。 

在一个PKI,特别是CA中,信息的存储是一个非常核心的问题,它包括两个方面:一是CA服务器利用数据库来备份当前密钥和归档过期密钥,该数据库需高度安全和机密,其安全等级同CA本身相同;另外一个就是目录服务器,用于分发证书和CRL,一般采用LDAP目录服务器。

3.4 密钥管理

密钥管理也是PKI(主要指CA)中的一个核心问题,主要是指密钥对的安全管理,包括密钥产生、密钥备份、密钥恢复和密钥更新等。

1. 密钥产生 
密钥对的产生是证书申请过程中重要的一步,其中产生的私钥由用户保留,公钥和其他信息则交于CA中心进行签名,从而产生证书。根据证书类型和应用的不同,密钥对的产生也有不同的形式和方法。
对普通证书和测试证书,一般由浏览器或固定的终端应用来产生,这样产生的密钥强度较小,不适合应用于比较重要的安全网络交易。而对于比较重要的证书,如商家证书和服务器证书等,密钥对一般由专用应用程序或CA中心直接产生,这样产生的密钥强度大,适合于重要的应用场合。 
另外,根据密钥的应用不同,也可能会有不同的产生方式。比如签名密钥可能在客户端或RA中心产生,而加密密钥则需要在CA中心直接产生。 

2. 密钥备份和恢复 
在一个PKI系统中,维护密钥对的备份至关重要,如果没有这种措施,当密钥丢失后,将意味着加密数据的完全丢失,对于一些重要数据,这将是灾难性的。所以,密钥的备份和恢复也是PKI密钥管理中的重要一环。 
使用PKI的企业和组织必须恩能够得到确认:即使密钥丢失,受密要加密保护的重要信息也必须能够恢复,并且不能让一个独立的个人完全控制最重要的主密钥,否则将引起严重后果。 
企业级的PKI产品至少应该支持用于加密的安全密钥的存储、备份和恢复。密钥一般用口令进行保护,而口令丢失则是管理员最常见的安全疏漏之一。所以,PKI产品应该能够备份密钥,即使口令丢失,它也能够让用户在一定条件下恢复该密钥,并设置新的口令。 
例如,在某些情况下用户可能有多对密钥,至少应该有两个密钥:一个用于加密,一个用于签名。签名密要不需要备份,因为用于验证签名的公钥(或公钥证书)广泛发布,即使签名私钥丢失,任何用于相应公要的人都可以对已签名的文档进行验证。但PKI系统必须备份用于加密的密钥对,并允许用户进行恢复,否则,用于解密的私钥丢失将意味着加密数据的完全不可恢复。 
另外,使用PKI的企业也应该考虑所使用密钥的生命周期,它包括密钥和证书的有效时间,以及已撤销密钥和证书的维护时间等。 

3. 密钥更新 
对每一个由CA颁发的证书都会有有效期,密钥对生命周期的长短由签发证书的CA中心来确定,各CA系统的证书有效期限有所不同,一般大约为2-3年。 
当用户的私钥被泄漏或证书的有效期快到时,用户应该更新私钥。这时用户可以废除证书,产生新的密钥对,申请新的证书。 

3.5 证书的使用

在实际应用中,为了验证信息的数字签名,用户首先必须获取信息发送者的公钥证书,以及一些额外需要的证书(如CA证书等,用于验证发送者证书的有效性)。

证书的获取可以有多种方式,如发送者发送签名信息时附加发送自己的证书,或以另外的单独信息发送证书,或者可以通过访问证书发布的目录服务器来获得,或者直接从证书相关的实体处获得。在一个PKI体系中,可以采取某种或某几种上述方式获得证书。

在电子商务系统中,证书的持有者可以是个人用户、企事业单位、商家、银行等。无论是电子商务中的哪一方,在使用证书验证数据时,都遵循同样的验证流程。一个完整的验证过程有以下几步:

1. 将客户端发来的数据解密 (如解开数字信封)。 

2. 将解密后的数据分解成原始数据,签名数据和客户证书三部分。 

3. 用CA根证书验证客户证书的签名完整性。 

4. 检查客户证书是否有效 (当前时间在证书结构中的所定义的有效期内)。 

5. 检查客户证书是否作废 (OCSP方式或CRL方式)。 

6. 验证客户证书结构中的证书用途。 

7. 客户证书验证原始数据的签名完整性。 

如果以上各项均验证通过,则接受该数据。

4 PKI应用

---PKI技术的广泛应用能满足人们对网络交易安全保障的需求。当然,作为一种基础设施,PKI的应用范围非常广泛,并且在不断发展之中,下面给出几个应用实例。

1. 虚拟专用网络(VPN) 
VPN是一种架构在公用通信基础设施上的专用数据通信网络,利用网络层安全协议(尤其是IPSec)和建立在PKI上的加密与签名技术来获得机密性保护。基于PKI技术的IPSec协议现在已经成为架构VPN的基础,它可以为路由器之间、防火墙之间或者路由器和防火墙之间提供经过加密和认证的通信。虽然它的实现会复杂一些,但其安全性比其他协议都完善得多。 

2. 安全电子邮件 
----作为Internet上最有效的应用,电子邮件凭借其易用、低成本和高效已经成为现代商业中的一种标准信息交换工具。随着Internet的持续增长,商业机构或政府机构都开始用电子邮件交换一些秘密的或是有商业价值的信息,这就引出了一些安全方面的问题,包括:消息和附件可以在不为通信双方所知的情况下被读取、篡改或截掉;发信人的身份无法确认。电子邮件的安全需求也是机密、完整、认证和不可否认,而这些都可以利用PKI技术来获得。目前发展很快的安全电子邮件协议是S/MIME (The Secure Multipurpose Internet Mail Extension),这是一个允许发送加密和有签名邮件的协议。该协议的实现需要依赖于PKI技术。 

3. Web安全 
----浏览Web页面是人们最常用的访问Internet的方式。如果要通过Web 进行一些商业交易,该如何保证交易的安全呢?为了透明地解决Web的安全问题,在两个实体进行通信之前,先要建立SSL连接,以此实现对应用层透明的安全通信。利用PKI技术,SSL协议允许在浏览器和服务器之间进行加密通信。此外服务器端和浏览器端通信时双方可以通过数字证书确认对方的身份。-结合SSL协议和数字证书,PKI技术可以保证Web 交易多方面的安全需求,使Web上的交易和面对面的交易一样安全。 

5 应用编程接口API

协议标准是系统具有可交互性的前提和基础,它规范了PKI系统各部分之间相互通信的格式和步骤。而应用编程界面API(Application programming interfaces)则定义了如何使用这些协议,并为上层应用提供PKI服务。当应用需要使用PKI服务,如获取某一用户的公钥、请求证书废除信息或请求证书时将会都会用到API。目前API没有统一的国际标准,大部分都是操作系统或某一公司产品的扩展,并在其产品应用的框架内提供PKI服务。

目前,有很多可以让开发者选择的API类型。IETF建议标准为通用安全服务API:GSS-API(Generic Security Service Application Program Interface),它提供了一种接口与网络机制和网络协议相互独立的实现。

欧洲建立的SESAME(Secure European System for Applications in a Multi-Vendor Environment)定义了一些安全界面,并作为该组织发展的安全技术的一部分,该接口得到了欧洲许多著名厂商的支持,如Bull SA、ICL和Seimens等,但没有在美国得到支持,特别是一些大的厂商,如Microsoft和Netscape等。

Entrust也为其产品提供了一套API,如Entrust证书管理服务API(CMS API,Entrust's Certificate Management Services API),该API允许应用使用Entrust的证书管理和分发服务。在1996年指定,并与1997年更新的PKIX Internet草案"Architecture for Public Key Infrastructure"定义了PKI结构,并建议了许多标准,其中就包括API。 

目前,在API市场处于领先地位的是Microsoft的CryptoAPI和Intel的公用数据安全框架CDSA(Common Data Security Architecture),他们凭借自己的产品优势相互竞争。Microsoft利用其广泛的操作系统市场,而Intel则凭借其PC芯片的优势,并与其它厂商,如IBM、Entrust和Netscape等进行联合,共同支持CDSA。现在也有很多厂商的PKI产品同时支持这两种API,如Entrust等。PKIX在很多情况下支持CDSA,并建议其为"Architecture for Public Key Infrastructure"草案的标准。

除此之外,Entrust、IBM、Intel、 Netscape和TIS等联合向开放组织(Open Group)提议了一个基于CDSA的加密和证书管理接口,并使用了Entrust的CMS API、IBM的密钥恢复API。但开放组织同时也在考虑使用PKCS #11作为安全API接口。

下面介绍目前两个比较常用的安全API接口:CryptoAPI和CDSA接口。

5.1 CryptoAPI

微软加密应用程序接口CryptoAPI(Microsoft Cryptographic Application Programming Interface)为Win32应用程序提供了认证、编码、加密和签名等安全处理,它可使用户在对复杂的加密机制和加密算法不了解的情况下,而对应用程序增加安全功能。这样很符合Windows的设计风格,就像用户可是使用图形库而不需要了解图形硬件一样。

目前CryptoAPI的最新版本是2.0版,在包含CryptoAPI 1.0的全部功能外,还增加了证书管理功能,为网络身份认证提供的基本保证。

CryptoAPI通过一系列的库函数来对应用程序提供PKI安全服务,其整体系统结构如图3所示:

                                                                                    图3    CryptoAPI结构图

CryptoAPI的编程模型同Windows系统的图形设备接口 GDI比较类似,其中加密服务提供者CSP(Cryptographic Service Providers)等同于图形设备驱动程序 ,加密硬件(可选)等同于图形硬件,其上层的应用程序也类似,都不需要同设备驱动程序和硬件直接打交道

CryptoAPI共有五部分组成:简单消息函数(Simplified Message Functions)、低层消息函数(Low-level Message Functions)、基本加密函数(Base Cryptographic Functions)、证书编解码函数(Certificate Encode/Decode Functions)和证书库管理函数(Certificate Store Functions)。其中前三者可用于对敏感信息进行加密或签名处理,可保证网络传输信心的私有性;后两者通过对证书的使用,可保证网络信息交流中的认证性。

5.2 CDSA

CDSA(Common Data Security Architecture)为安全应用服务提供了一个整体框架和解决方案,提供了诸如证书管理等许多PKI功能。

同CryptoAPI类似,CDSA也是以一个分层的服务提供者框架为基础,其的应用模式可分为四层,最上层是应用程序,应用程序的下层是中间件,例如SSL、IPSEC接口、语言接口转换器等,接下来是CSSM层,CSSM层是CDSA的核心层,CSSM的下层是具体的服务提供者,如加密服务、证书服务、政策服务、数据存储服务等,如图4所示。

                                                                                           图4      CDSA系统结构

--- CSSM 是CDSA的核心部分,它表现为一组公开的应用编程接口(API),为应用程序提供安全功能的调用,共包含4个基本的安全模块。

· 加密服务提供(Cryptographic Service Provider,CSP)模块。 CSP负责加/解密、数字签名和私钥保存等工作,是整个CDSA结构的基础。 

· 信任策略(Trust Policy,TP)模块。TP负责信任策略的具体实施,判定特定行为(如开支票或访问涉密信息)所需的信任级别。由于具有模块化的结构,TP能够对不同的机构应用不同的策略,比如,对商业银行和政府机构运用的策略就有所不同。 

· 证书库(Certificate Library,CL)模块。CL提供证书的维护、撤销和数字签名等功能。 

· 数据存储库(Data Storage Library,DL)模块。DL进行安全相关数据对象的存储,包括证书、密钥和信任规则对象等,而实际的存储位置可能在大型数据库、原始的文件系统或某种特定的硬件设备中。 

---- 另外,任何软、硬件厂商都可以建立自己的服务提供模块,无缝嵌入到CDSA的开放式框架中。在CDSA 2.0中又增加任选模块管理,支持更方便地增加模块。

另外,还可以对CSSM进行更高一层的抽象,提供高层的API,使开发者更容易使用CDSA提供的PKI安全功能。

6 PKI标准

随着PKI的发展和应用的不断普及,PKI的产品也越来越多,为了保持个产品之间的兼容性,标准化成了PKI不可避免的发展趋势。

PKI的标准可分为两个部分:一类用于定义PKI,而另一类用于PKI的应用。

6.1 定义PKI的标准

在PKI技术框架中,许多方面都经过严格的定义,如用户的注册流程、数字证书的格式、CRL的格式、证书的申请格式以及数字签名格式等。

国际电信联盟ITU X.509协议,是PKI技术体系中应用最为广泛、也是最为基础的一个国际标准。它的主要目的在于定义一个规范的数字证书的格式,以便为基于X.500协议的目录服务提供一种强认证手段。但该标准并非要定义一个完整的、可互操作的PKI认证体系。

PKCS是由美国RSA数据安全公司及其合作伙伴制定的一组公钥密码学标准,其中包括证书申请、证书更新、证书作废表发布、扩展证书内容以及数字签名、数字信封的格式等方面的一系列相关协议。到1999年底,PKCS已经公布了以下标准:

· PKCS#1:定义RSA公开密钥算法加密和签名机制,主要用于组织PKCS#7中所描述的数字签名和数字信封。 

· PKCS#3:定义Diffie-Hellman密钥交换协议。 

· PKCS#5:描述一种利用从口令派生出来的安全密钥加密字符串的方法。使用MD2或MD5 从口令中派生密钥,并采用DES-CBC模式加密。主要用于加密从一个计算机传送到另一个计算机的私人密钥,不能用于加密消息。 

· PKCS#6:描述了公钥证书的标准语法,主要描述X.509证书的扩展格式。 

· PKCS#7:定义一种通用的消息语法,包括数字签名和加密等用于增强的加密机制,PKCS#7与PEM兼容,所以不需其他密码操作,就可以将加密的消息转换成PEM消息。 

· PKCS#8:描述私有密钥信息格式,该信息包括公开密钥算法的私有密钥以及可选的属性集等。 

· PKCS#9:定义一些用于PKCS#6证书扩展、PKCS#7数字签名和PKCS#8私钥加密信息的属性类型。 

· PKCS#10:描述证书请求语法。 

· PKCS#11:称为Cyptoki,定义了一套独立于技术的程序设计接口,用于智能卡和PCMCIA卡之类的加密设备。 

· PKCS#12:描述个人信息交换语法标准。描述了将用户公钥、私钥、证书和其他相关信息打包的语法。 

· PKCS#13:椭圆曲线密码体制标准。 

· PKCS#14:伪随机数生成标准。 

· PKCS#15:密码令牌信息格式标准。 

另外,PKCS#2和PKCS#4已经合并到PKCS#1之中。PKIX是由IETF组织中的PKI工作小组制定的系列国际标准。此类标准主要定义基于X.509和PKCS的PKI模型框架。PKIX中定义的四个主要模型为用户、认证中心CA、注册中心RA和证书存取库。

6.2 PKI应用标准

目前世界上已经出现了许多依赖于PKI的安全标准,即PKI的应用标准,如安全的套接层协议SSL、传输层安全协议TLS、安全的多用途互连网邮件扩展协议S/MIME和IP安全协议IPSEC等。

· S/MIME是一个用于发送安全报文的IETF标准。它采用了PKI数字签名技术并支持消息和附件的加密,无须收发双方共享相同密钥。S/MIME委员会采用PKI技术标准来实现S/MIME,并适当扩展了PKI的功能。目前该标准包括密码报文语法、报文规范、证书处理以及证书申请语法等方面的内容。 

· SSL/TLS是互连网中访问WEB服务器最重要的安全协议。当然,他们也可以应用于基于客户机/服务器模型的非WEB类型的应用系统。SSL/TLS都利用PKI的数字证书来认证客户和服务器的身份。 

· IPSEC是IETF制定的IP层加密协议,PKI技术为其提供了加密和认证过程的密钥管理功能。IPSEC主要用于开发新一代的VPN。 

另外,随着PKI的进一步发展,新的标准也在不断的增加和更新。

7 结论

从目前的发展来说,PKI的范围非常广,而不仅仅局限于通常认为的CA机构,它还包括完整的安全策略和安全应用。因此,PKI的开发也从传统的身份认证到各种与应用相关的安全场合,如企业安全电子商务和政府的安全电子政务等。

另外,PKI的开发也从大型的认证机构到与企业或政府应用相关的中小型PKI系统发展,既保持了兼容性,又和特定的应用相关。在以后的文章中,我们会对PKI的源代码工程OpenCA进行详细分析,为PKI的开发提供借鉴。


参考资料 

· http://www.pkiforum.org/:PKI论坛,可以获取更多关于PKI的信息。 

· http://www.pki-page.org/:其中包含了大量PKI站点的链接。 

· http://www.openca.org:是一个CA开放源代码机构,可以获取更多的关于CA开发的信息。 

 

 

 

 

 

抱歉!评论已关闭.