PKI(Public Key Infrastructure ) 即"公钥基础设施",是一种遵循既定标准的密钥管理平台,它能够为所有网络应用提供加密和数字签名等密码服务及所必需的密钥和证书管理体系,简单来说,PKI就是利用公钥理论和技术建立的提供安全服务的基础设施。PKI技术是信息安全技术的,也是电子商务的关键和基础技术。PKI的基础技术包括加密、数字签名、数据完整性机制、数字信封、双重数字签名等。TPKI基于抽象语法符号ASN.1描述,采用BER/DER进行编码。实践表明TPKI存在部署复杂繁琐、成本高昂、互联互通困难等问题。针对上述问题,W3C推出了XML密钥管理规范[1](XML Key Management Specification,XKMS)。通过实现XKMS与TPKI的无缝连接,可进一步推广PKI技术的应用,而应用的关键问题之一是解决基于XKMS的证书验证。
1 XML密钥管理规范
XML(Extensible Markup Language)即可扩展标记语言,它与HTML一样,都是SGML(Standard Generalized Markup Language,标准通用标记语言)。Xml是Internet环境中跨平台的,依赖于内容的技术,是当前处理结构化文档信息的有力工具。扩展标记语言XML是一种简单的数据存储语言,使用一系列简单的标记描述数据,而这些标记可以用方便的方式建立,虽然XML占用的空间比二进制数据要占用更多的空间,但XML极其简单易于掌握和使用。
XKMS为用户提供新一代的密钥管理服务,降低了客户端应用程序开发和部署的复杂性。它通过与TPKI服务进行接口,为网络应用提供了可以互操作的安全基础设施。XKMS包括2个部分:(1)XML密钥信息服务规范(XML Key Information Service Specification,XKISS),定义了密钥定位和密钥验证2种服务,为XML应用程序提供密钥处理服务,简化了XML应用程序的负担。(2)XML密钥注册服务规范(XML Key Registration Service Specification,XKRSS),为XML应用程序密钥对注册提供了一种机制,并定义了密钥的注册、重新发布、撤销及恢复等服务。
2 基于XKMS的证书验证机制
2.1 基于TPKI的证书验证
TPKI 安全体系使用数字证书绑定对象(服务、资源、应用)的密钥与身份标识提供和授权服务。在使用证书之前,必须使用证书撤销列表(Certificates Revocation Lists,CRL)、在线证书状态协议[2](Online Certificate Status Protocol,OCSP)和简单证书验证协议[3](Simple Certificate Validation Protocol,SCVP)等机制对其进行有效性验证。证书验证包括如下内容:(1)证书中CA数字签名的有效性。(2)证书完整性。(3)证书有效期。(4)证书是否被撤销。(5)证书的使用方式与任何声明的策略/使用限制的一致性。(6)证书的用途是否与创建它的目的相符。
具体应用时采用的验证策略不尽相同,但大多数策略都被设计成对尽可能多的内容进行验证。
2.2 基于XKMS的证书验证机制设计
目前XKMS还不可能取代TPKI,通过实施二者的无缝连接可进一步推广PKI技术的应用,而实现这一目标的关键问题之一是解决基于XKMS的证书验证。集成证书验证服务模块(Certification Validation Service Module,CVSM)的XKMS服务系统架构如图1所示。CVSM使用TPKI的OCSP、SCVP等机制响应客户端的证书验证请求。

CVSM是一种基于WEB的网管软件,可在用户熟悉的图形化浏览器界面下,对Cisco中低端交换机系列产品实施配置和监控。CVSM能够在IE或Netscape浏览器中显示设备的直观图像,观察相应交换机各种指示灯的状态;用户还可以点击图像中特定端口进入其配置界面,修改工作参数或查看统计数据。参数的设定也可通过鼠标点击,以选择或填空方式来完成。
CVSM包括了6个子模块(图1虚线框部分)。其中,证书路径验证模块(Certificate Path Validation Module,CPVM)、证书状态检查模块(Certificate Status Check Module,CSCM)和证书路径建立模块(Certificate Path Construction Module,CPCM)用于证书路径验证;证书路径管理模块和证书/CRLs控制器模块用于提高证书验证效率;证书策略管理模块则用于管理证书策略以及策略映射信息。下面具体介绍其中3个重要模块。
2.2.1 证书路径验证模块
CPVM负责对主体身份、主体公钥和可能在证书路径中提交的主体属性的绑定等项进行验证,从而确定路径中的证书是否已被撤销,证书路径验证流程如图2所示。具体步骤如下:

(1)客户端产生证书路径验证请求,请求中可以包括客户的信任锚或验证策略。(2)证书路径验证有2种情况:一种是服务器在数据库的证书路径表中检索到客户需要验证的证书路径,服务器返回路径有效的验证结果;另一种情况是服务器检索证书路径失败,此时服务器获取请求中包含的客户信任锚并调用CPCM来建立以客户信任锚为起点的证书路径。若证书路径建立成功,则检查客户请求中是否包含验证策略约束。如果包含,则服务器端使用验证策略约束来验证证书路径,并且调用CSCM检查证书状态;否则,服务器端只需检查证书状态即可。(3)如果上述第二种情况成功执行而且获得了经过验证的证书路径,则将此证书路径保存到证书路径数据库中供以后查询;否则,服务器端处理异常操作,产生一个失败响应,并将失败原因记录到日志文件。
2.2.2 证书状态检查模块
CSCM进行证书状态检查时,首先连接系统的证书/CRLs库。然后检索客户证书:若检索成功,则查看客户证书的状态标识位,若标识位值为"有效",调用CPVM对客户证书路径的有效性进行验证,否则将包含"证书无效"的应答消息返回给客户端;若检索失败,则通过TPKI实现证书状态检查。具体做法如下。(1)获取证书:与TPKI 交互获取客户证书。(2)检查证书状态:使用CRL/OCSP对获取的客户证书进行状态检查。(3)将客户证书存入系统的证书/CRLs库。(4)在库中记录客户证书的状态,以便下次进行证书状态检查时使用。
2.2.3 证书路径建立模块
证书路径的建立在验证过程中完成。服务器调用CPCM按照严格的信任层次建立以客户的信任锚为起点的证书路径。
2.3 XKMS-OCSP机制改进
Moon提出了一种名为XKMS-OCSP的机制,即采用比基于复杂数学问题的数字签名算法至少快10 000倍的单向散列函数对"预生成"应答进行签名(附散列值)。对该机制研究后发现存在以下不足:(1)没有给出具体的实现方式。(2)根据应答中包含的时间来更新散列值不实用。因此,本文提出改进XKMS-OCSP机制实现快速数字签名的措施。思想是:OCSP 服务将"预生成"的"散列链"中的散列值作为其数字签名附加到证书验证应答消息中,确保应答消息的真实性和有效性。详细描述如下:OCSP服务执行单向散列函数式(1)和式(2)生成如式(3)和式(4)所示的"有效散列链"或"无效散列链",并存入数据库备用。

其中:0≤i≤d,d为自然数。
这里,散列初值T和F是2个秘密随机数,其值仅为OCSP服务(或代理)所知。每个散列链中包含了d+1个散列值,每个散列值 与OCSP服务所生成的应答消息一一对应。
如果证书路径验证结果为有效,则OCSP服务从数据库中取出如(3)式所示的有效散列链所含的散列值,构建OCSP服务应答消息,发送给XKMS服务。XKMS服务通过计算多d 次散列函数验证应答结果,判定证书有效。如果证书路径验证结果为无效,则须从数据库中取出如(4)式所示的无效散列链所含的散列值构建应答消息。
鉴于单向散列函数执行的高效性,同时为了防止OCSP服务重放攻击,可以制定以下散列链管理策略:散列链中的每个散列值只能使用,使用后即被删除,散列链长度随即减1.当散列链长度为0时,OCSP服务产生新的秘密随机数,再生成新的散列链备用。发布散列链的散列值作为验证散列链的公钥。
由于单向散列函数具有安全性和计算不可逆性等特点,而且其破译或求解难度是指数级的,所以想从Td推导出T使Td=h(T)是极其困难的,而T通常由OCSP服务加密存储,因此,一个OCSP应答的签名Td是不可伪造的。同理可得,Td-1,Td-2,……T0(即h2(T),h3(T),……hd+1(T))都是不可伪造的,这就保证了OCSP服务签名的有效性。为了提高效率,OCSP服务提供者为每个在其注册的XKMS服务器生成一对散列链。散列公钥的更新发布可以使用传统或特定的签名机制。综上所述,使用XKMS-OCSP机制实现数字签名具有高效、灵活、安全和可靠等优点。
2.4 基于XKMS的证书验证机制实现
XML公钥管理规范(XML Key Management Specification)是由VeriSign、Microsoft和webMethods三家公司在W3C共同推动的公钥配置与注册规范,它为访问和集成公钥基础设施(Public Key Infrastructure)拟出了一种便捷规范的机制。主要用于制定公钥配置及注册规范,并结合XML加密及XML数字签名规范,提高网络数据传输的安全性。随着越来越多的个人和企业依赖于互联网络交换机密数据和敏感信息,因而其安全性已经成为一个热门问题。
下面通过实例给出证书验证的实现过程。XKMS服务收到用户Bob提交的验证Alice证书的请求后,调用OCSP服务(图1中验证协议模块)进行验证。Bob发送的XML格式的请求描述如下:


OCSP 服务收到验证请求后,先进行验证处理,再对返回的应答消息签名。在进行验证之前,OCSP服务必须做到:与XKMS服务交叉、相互注册;采用改进的XKMS-OCSP机制生成2条散列链。证书验证流程如下:
(1)接收XKMS服务发送的验证请求,调用CPVM验证证书的有效性。
(2)根据验证结果生成与验证请求类似的XML格式的验证应答<ValidateResult>,其中包含公钥绑定<KeyBinding>、证书<ds:X509Certificate>、密钥用法<KeyUsage>、证书验证状态<Status>、证书验证理由<Valid-Reason>等元素。
(3)签名应答消息(即附加散列值)。
(4)发送应答消息。
3 结束语
本文在介绍基于TPKI的证书验证的基础上,给出了集成证书验证服务模块的XKMS系统架构,以及对应的证书路径验证流程图和证书验证实现算法,为XKMS客户端与已部署的底层TPKI服务提供者之间进行无缝连接提供了一种新的解决方案,有利于PKI的大规模部署。此外,还提出了改进的XKMS-OCSP机制,具有高效、灵活、安全及可靠的特点,对实际开发有一定的借鉴作用。
免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。