论文部分内容阅读
摘要: 随着互联网的发展,PKI结构日益复杂。本文分析了目前存在的几种典型的PKI信任模型,并设计了一种基于深度优先的递归算法来构建证书路径,描述了详细的算法流程。最后对该算法进行了优化,使其能提前排除无效路径,减轻路径验证的负担。
关键词: PKI;信任模型;证书路径构建;LDAP
【中图分类号】TP309【文献标识码】A【文章编号】2236-1879(2017)19-0239-02
0 引言
公钥基础设施PKI(Public Key Infrastructure)[1]是一种解决Internet上种种安全问题的框架和遵循既定标准的密钥管理平台,它已经成为信息安全技术的核心和关键技术。由于互联网不断发展,PKI信任域互操作性有着越来越强的需求,信任模型越来越复杂。在复杂的信任模型下,不同信任域的实体间需要进行交叉认证,包含交叉证书的证书路径的跨信任域构建问题成为难题之一。本文提出了一种基于深度优先的递归算法来构建证书路径,并对构建过程进行优化,提高证书验证的效率。
1 PKI信任模型
信任模型提供了一种用于建立并管理信任关系的框架,在PKI體系中,它的焦点是用户与CA、CA之间的相互信任的关系。当前PKI系统包含三种最基本的信任模型,即层次模型、对等模型和网状模型。
然而实际情况要复杂很多,仅用这三种基本的模型无法满足实际需求。许多企业和机构采用了一些混合信任模型,比较成功的是ISO银行业模型和桥CA模型[2-3]。
ISO银行业模型如图1,它是网状模型与层次模型的结合体。同一信任域内采用层次信任模型,各信任域的根CA间采用网状模型。域内或域间连接两个中介CA的高频路径可以建立直接交叉认证。
桥CA模型如图2所示。桥CA实际上是一个中心级的交叉认证机构,用于连接不同的PKI体系。桥CA作为公共信任锚,用于各参与CA的交叉认证,管理各CA间的策略映射。该模型成功地运用于美国联邦政府。任何结构类型的PKI,通过桥CA,都可以连接并实现相互之间的信任,因此在该种模型上实现的路径构建算法,实际上必须支持几乎所有的信任模型[4]。
2 证书路径的构建
证书使用前必须先验证,为了验证证书,就必须建立一条认证路径,并验证此路径中的每个证书。该认证路径包括了从待验证的目标证书到信任锚之间的一系列证书。证书路径构建通常有两种方向[4],一种是前向(Forward)构建,即从目标证书到信任锚;另一种是反向(Reverse)构建,即从信任锚到目标证书。针对上述典型的PKI信任模型,本文研究并实现了一种较通用的基于深度优先搜索的前向路径构建算法。
2.1 侯选证书的获取。
证书以及CRL存储于诸如FTP,HTTP或LDAP服务器、X.500目录服务器等载体中,这些载体一般都是公共且易于访问的。证书中具有一些扩展项,可以用来提供URI信息。主体信息访问扩展SIA(Subject Info Access)可以获得由该证书所颁发的下级证书,具有该扩展的证书适合采用反向路径构建方法。权威信息访问扩展AIA(Authority Info Access),可以用来获得上级颁发者证书信息或OCSP服务器的URI信息。通过AIA可以获得一个或多个颁发者的证书,这些证书可以是CA证书也可以是交叉证书。具有AIA扩展的证书适合采用前向路径构建,这也是本算法实现时获取侯选证书所采用的主要方法。除此以外,还有很多其他的方法可以获得证书,这主要依赖于PKI体系中证书的存储结构和方式。本论文在具体实现时,证书和CRL存放于支持LDAP[5-6]的OpenLDAP目录服务器[7]中。
Openssl函数库[8]以及OpenLdap函数库提供了很多底层函数,以下其中两个关键函数:
int X509_get_ext_by_NID(X509 * x, int nid, int lastpos);
X509_EXTENSION * X509_get_ext(X509 * x, int loc);
X509_get_ext_by_NID函数通过给定的参数nid从证书扩展中对其进行定位,函数X509_get_ext通过定位loc,获得该扩展。当想要获得AIA扩展时,参数nid为NID_info_access,当想要获得SIA扩展时,参数nid为NID_sinfo_access。
2.2 路径构建算法。
路径构建的过程类似于对图中两顶点之间的路径进行搜索的过程,PKI体系中的实体相当于图的顶点,证书相当于图中的弧(由颁发者指向被颁发者)。搜索算法动态地从证书存储库中获得候选证书(指向当前顶点的弧)。本文采用的这种深度优先的递归算法能够返回所有存在的路径。通过对算法进行优化,还能够排除部分肯定无效的路径,从而提高所得路径的健壮性,减轻证书路径验证的负担。本算法基于Openssl库实现,主要函数如下:
STACK_OF(PATH) * getPath_depthfirst(X509* endCert, X509* anchor, int CurrentDepth)
CurrentDepth即路径长度,该算法将建立从目标证书endCert到信任锚之间的多条路径,anchor为信任锚证书。PATH表示一条路径,其定义为STACK_OF(X509)。所有路径以栈的形式返回。其调用递归函数为:
void certPathbuildNodes( X509 *currentCert, X509 *anchor, PathNode *previousNode, STACK_OF(PathNode) *endNodes, int CurrentDepth, int MaxDepth)。 PathNode数据结构为:
typedef struct path_node_st PathNode;
struct path_node_st {
X509* referenceCert;
PathNode* previousPathNode; } ;
流程为图3所示。endNods中存放每条路径最后一个结点。该递归函数执行完成后,其参数endNodes中的PathNode建立完成。
PathNode中都具有前向指针previousPathNode,通过这个指针,可以由最后结点向前,从而建立出完整的路径由流程图可以看出,路径终止原因可能是超过路径最大长度MaxDepth,某个证书无符合要求的颁发者证书(排除可能形成回路的颁发者证书),或者是已经到达信任锚。如何判断CurrentCert是否已经到达信任锚是一个难点。参数anchor是信任锚的证书,但并不意味着CurrentCert必须与anchor为同一张证书才表明已到达信任锚。例如anchor是信任锚的CA证书,而CurrentCert为其他CA颁发给信任锚的交叉证书,二张证书虽然不同,但是实际上已经搜索到信任锚了。本算法采用可区分名DN和公钥相结合的方法解决此问题。如果CurrentCert与anchor只是DN相同,并不能表示二者都为信任锚的证书。很可能CurrentCert只是碰巧和信任锚具有相同DN的实体的证书。所以采用DN加上公钥进行判断是最合适的方法。
获得currentCert的颁发者证书集 lookupCertPool,意思即为获得当前证书currentCert所签发出去的所有证书,可以通过SIA扩展项到对应的LDAP目录中获得。对lookupCertPool中的证书优化排序后,一部分中间证书被排除,另一部分中间证书将按照优先级别进行排序。iNocrossSubjectFound标志是否已经没有后续证书了,如果为是则将对应结点放入endNodes栈中。
2.4 路径构建需解决的问题。
1) 死端(Dead Ends)
在非层次模型中,可能会由于“死端”而使得某条路径构建失败。以图4为例。
目标证书为EE,信任锚为CA1。CA1.1有两张证书,一个是由CA2.1颁发的交叉证书,一个是由信任锚CA1颁发的中介CA证书。路径构建算法能够得到路径EE(CA1.1),CA1.1(CA2.1),CA2.1(CA2),CA2(CA2)。CA2没有其他实体给其颁发证书,并且CA2并非目标证书信任锚,因此此路径不完整而且无效。采用本算法,则此例中CA2 的自签名证书也会生成PathNode结点入endNodes栈。但是本算法规定若endNodes栈中的结点所对应的证书不是信任锚证书,则不再通过该结点的前向指针previousPathNode向前建立完整路径,该条无效路径将被放弃。
2) 回路检测。
当信任模型中出现回路时,可能会导致路径构建算法的死循环。回路检测不仅仅要判断同一张证书是否出现两次,还要检查相同主体名与主体可选名以及主体公钥是否都出现了两次。因为两张不同的证书可能都是同一个实体的证书,如果不排除,就有可能造成循环。
3.结束语
本文针对日益复杂的PKI信任模型,提出了一种基于深度优先搜索的前向路径构建算法。本算法解决了路径构建过程中出现的死端和回路问题。对于具有多个信任锚的情况,本算法采用了多进程并行处理的方式。认证路径处理由路径构建和路径验证两个阶段组成[9-11],并非所有的路径都能通过验证。今后可以进一步对路径构建过程进行优化研究,提前终结一部分无效路径的构建,也可以增加Cache机制,进一步提高路径构建的效率。
参考文献
[1]Yee P. Updates to the Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile[S]. RFC 6818, January 2013.
[2] [美] Andrew Nash. 公钥基础设施 (PKI) 实现和管理电子安全[M]. 张玉清, 译. 北京: 清华大学出版社, 2002: 249-251.
[3]Qinghai Bai. Research on Mechanism of PKI Trust Model: Proc of 2011 IEEE International Conference on Information Theory and Information Security(ICITIS 2011), 2011[C]. Washington DC: IEEE Computer Society, 2011: 151-153.
[4] Cooper M, Dzambasow Y, Hesse P, Joseph S, Nicholas R. Internet X.509 Public Key Infrastructure: Certification Path Building[S]. RFC 4158, September 2005.
[5]zeilenga K. Lightweight Directory Access Protocol (LDAP) Schema Definitions for X.509 Certificates[S]. RFC4523, June 2006.
[6]Zeilenga K, Lightweight Directory Access Protocol (LDAP) Transactions[S]. RFC5805, March 2010.
[7]http://www.openldap.org
[8]http://www.openssl.org
[9] Freeman T, Housley R, Malpani A, Cooper D, Polk W. Server-Based Certificate Validation Protocol (SCVP)[S]. RFC5055, December 2007.
[10]徐蕾, 孙尚波. 基于嚴格二叉树的证书路径构造方法[J]. 计算机应用, 2010, 12:107-109.
[11]Fujishiro T, Sato A, Kumagai T, et al. Development of hi-speed X.509 certification path validation system: Proc of the 4th International Conference on Advanced Information Networking and Applications Workshops, 2010[C]. Washington DC: IEEE Computer Society, 2010:269-274.
基金项目:国家自然科学基金资助项目(61373164)
作者简介: 刘艳(1981-), 女, 江苏南通人, 讲师, 硕士, 主要研究方向为计算机网络、信息安全(xinnr@126.com); 杨哲(1978-), 男, 博士, 副教授, 主要研究方向为计算机网络、物联网应用.
关键词: PKI;信任模型;证书路径构建;LDAP
【中图分类号】TP309【文献标识码】A【文章编号】2236-1879(2017)19-0239-02
0 引言
公钥基础设施PKI(Public Key Infrastructure)[1]是一种解决Internet上种种安全问题的框架和遵循既定标准的密钥管理平台,它已经成为信息安全技术的核心和关键技术。由于互联网不断发展,PKI信任域互操作性有着越来越强的需求,信任模型越来越复杂。在复杂的信任模型下,不同信任域的实体间需要进行交叉认证,包含交叉证书的证书路径的跨信任域构建问题成为难题之一。本文提出了一种基于深度优先的递归算法来构建证书路径,并对构建过程进行优化,提高证书验证的效率。
1 PKI信任模型
信任模型提供了一种用于建立并管理信任关系的框架,在PKI體系中,它的焦点是用户与CA、CA之间的相互信任的关系。当前PKI系统包含三种最基本的信任模型,即层次模型、对等模型和网状模型。
然而实际情况要复杂很多,仅用这三种基本的模型无法满足实际需求。许多企业和机构采用了一些混合信任模型,比较成功的是ISO银行业模型和桥CA模型[2-3]。
ISO银行业模型如图1,它是网状模型与层次模型的结合体。同一信任域内采用层次信任模型,各信任域的根CA间采用网状模型。域内或域间连接两个中介CA的高频路径可以建立直接交叉认证。
桥CA模型如图2所示。桥CA实际上是一个中心级的交叉认证机构,用于连接不同的PKI体系。桥CA作为公共信任锚,用于各参与CA的交叉认证,管理各CA间的策略映射。该模型成功地运用于美国联邦政府。任何结构类型的PKI,通过桥CA,都可以连接并实现相互之间的信任,因此在该种模型上实现的路径构建算法,实际上必须支持几乎所有的信任模型[4]。
2 证书路径的构建
证书使用前必须先验证,为了验证证书,就必须建立一条认证路径,并验证此路径中的每个证书。该认证路径包括了从待验证的目标证书到信任锚之间的一系列证书。证书路径构建通常有两种方向[4],一种是前向(Forward)构建,即从目标证书到信任锚;另一种是反向(Reverse)构建,即从信任锚到目标证书。针对上述典型的PKI信任模型,本文研究并实现了一种较通用的基于深度优先搜索的前向路径构建算法。
2.1 侯选证书的获取。
证书以及CRL存储于诸如FTP,HTTP或LDAP服务器、X.500目录服务器等载体中,这些载体一般都是公共且易于访问的。证书中具有一些扩展项,可以用来提供URI信息。主体信息访问扩展SIA(Subject Info Access)可以获得由该证书所颁发的下级证书,具有该扩展的证书适合采用反向路径构建方法。权威信息访问扩展AIA(Authority Info Access),可以用来获得上级颁发者证书信息或OCSP服务器的URI信息。通过AIA可以获得一个或多个颁发者的证书,这些证书可以是CA证书也可以是交叉证书。具有AIA扩展的证书适合采用前向路径构建,这也是本算法实现时获取侯选证书所采用的主要方法。除此以外,还有很多其他的方法可以获得证书,这主要依赖于PKI体系中证书的存储结构和方式。本论文在具体实现时,证书和CRL存放于支持LDAP[5-6]的OpenLDAP目录服务器[7]中。
Openssl函数库[8]以及OpenLdap函数库提供了很多底层函数,以下其中两个关键函数:
int X509_get_ext_by_NID(X509 * x, int nid, int lastpos);
X509_EXTENSION * X509_get_ext(X509 * x, int loc);
X509_get_ext_by_NID函数通过给定的参数nid从证书扩展中对其进行定位,函数X509_get_ext通过定位loc,获得该扩展。当想要获得AIA扩展时,参数nid为NID_info_access,当想要获得SIA扩展时,参数nid为NID_sinfo_access。
2.2 路径构建算法。
路径构建的过程类似于对图中两顶点之间的路径进行搜索的过程,PKI体系中的实体相当于图的顶点,证书相当于图中的弧(由颁发者指向被颁发者)。搜索算法动态地从证书存储库中获得候选证书(指向当前顶点的弧)。本文采用的这种深度优先的递归算法能够返回所有存在的路径。通过对算法进行优化,还能够排除部分肯定无效的路径,从而提高所得路径的健壮性,减轻证书路径验证的负担。本算法基于Openssl库实现,主要函数如下:
STACK_OF(PATH) * getPath_depthfirst(X509* endCert, X509* anchor, int CurrentDepth)
CurrentDepth即路径长度,该算法将建立从目标证书endCert到信任锚之间的多条路径,anchor为信任锚证书。PATH表示一条路径,其定义为STACK_OF(X509)。所有路径以栈的形式返回。其调用递归函数为:
void certPathbuildNodes( X509 *currentCert, X509 *anchor, PathNode *previousNode, STACK_OF(PathNode) *endNodes, int CurrentDepth, int MaxDepth)。 PathNode数据结构为:
typedef struct path_node_st PathNode;
struct path_node_st {
X509* referenceCert;
PathNode* previousPathNode; } ;
流程为图3所示。endNods中存放每条路径最后一个结点。该递归函数执行完成后,其参数endNodes中的PathNode建立完成。
PathNode中都具有前向指针previousPathNode,通过这个指针,可以由最后结点向前,从而建立出完整的路径由流程图可以看出,路径终止原因可能是超过路径最大长度MaxDepth,某个证书无符合要求的颁发者证书(排除可能形成回路的颁发者证书),或者是已经到达信任锚。如何判断CurrentCert是否已经到达信任锚是一个难点。参数anchor是信任锚的证书,但并不意味着CurrentCert必须与anchor为同一张证书才表明已到达信任锚。例如anchor是信任锚的CA证书,而CurrentCert为其他CA颁发给信任锚的交叉证书,二张证书虽然不同,但是实际上已经搜索到信任锚了。本算法采用可区分名DN和公钥相结合的方法解决此问题。如果CurrentCert与anchor只是DN相同,并不能表示二者都为信任锚的证书。很可能CurrentCert只是碰巧和信任锚具有相同DN的实体的证书。所以采用DN加上公钥进行判断是最合适的方法。
获得currentCert的颁发者证书集 lookupCertPool,意思即为获得当前证书currentCert所签发出去的所有证书,可以通过SIA扩展项到对应的LDAP目录中获得。对lookupCertPool中的证书优化排序后,一部分中间证书被排除,另一部分中间证书将按照优先级别进行排序。iNocrossSubjectFound标志是否已经没有后续证书了,如果为是则将对应结点放入endNodes栈中。
2.4 路径构建需解决的问题。
1) 死端(Dead Ends)
在非层次模型中,可能会由于“死端”而使得某条路径构建失败。以图4为例。
目标证书为EE,信任锚为CA1。CA1.1有两张证书,一个是由CA2.1颁发的交叉证书,一个是由信任锚CA1颁发的中介CA证书。路径构建算法能够得到路径EE(CA1.1),CA1.1(CA2.1),CA2.1(CA2),CA2(CA2)。CA2没有其他实体给其颁发证书,并且CA2并非目标证书信任锚,因此此路径不完整而且无效。采用本算法,则此例中CA2 的自签名证书也会生成PathNode结点入endNodes栈。但是本算法规定若endNodes栈中的结点所对应的证书不是信任锚证书,则不再通过该结点的前向指针previousPathNode向前建立完整路径,该条无效路径将被放弃。
2) 回路检测。
当信任模型中出现回路时,可能会导致路径构建算法的死循环。回路检测不仅仅要判断同一张证书是否出现两次,还要检查相同主体名与主体可选名以及主体公钥是否都出现了两次。因为两张不同的证书可能都是同一个实体的证书,如果不排除,就有可能造成循环。
3.结束语
本文针对日益复杂的PKI信任模型,提出了一种基于深度优先搜索的前向路径构建算法。本算法解决了路径构建过程中出现的死端和回路问题。对于具有多个信任锚的情况,本算法采用了多进程并行处理的方式。认证路径处理由路径构建和路径验证两个阶段组成[9-11],并非所有的路径都能通过验证。今后可以进一步对路径构建过程进行优化研究,提前终结一部分无效路径的构建,也可以增加Cache机制,进一步提高路径构建的效率。
参考文献
[1]Yee P. Updates to the Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile[S]. RFC 6818, January 2013.
[2] [美] Andrew Nash. 公钥基础设施 (PKI) 实现和管理电子安全[M]. 张玉清, 译. 北京: 清华大学出版社, 2002: 249-251.
[3]Qinghai Bai. Research on Mechanism of PKI Trust Model: Proc of 2011 IEEE International Conference on Information Theory and Information Security(ICITIS 2011), 2011[C]. Washington DC: IEEE Computer Society, 2011: 151-153.
[4] Cooper M, Dzambasow Y, Hesse P, Joseph S, Nicholas R. Internet X.509 Public Key Infrastructure: Certification Path Building[S]. RFC 4158, September 2005.
[5]zeilenga K. Lightweight Directory Access Protocol (LDAP) Schema Definitions for X.509 Certificates[S]. RFC4523, June 2006.
[6]Zeilenga K, Lightweight Directory Access Protocol (LDAP) Transactions[S]. RFC5805, March 2010.
[7]http://www.openldap.org
[8]http://www.openssl.org
[9] Freeman T, Housley R, Malpani A, Cooper D, Polk W. Server-Based Certificate Validation Protocol (SCVP)[S]. RFC5055, December 2007.
[10]徐蕾, 孙尚波. 基于嚴格二叉树的证书路径构造方法[J]. 计算机应用, 2010, 12:107-109.
[11]Fujishiro T, Sato A, Kumagai T, et al. Development of hi-speed X.509 certification path validation system: Proc of the 4th International Conference on Advanced Information Networking and Applications Workshops, 2010[C]. Washington DC: IEEE Computer Society, 2010:269-274.
基金项目:国家自然科学基金资助项目(61373164)
作者简介: 刘艳(1981-), 女, 江苏南通人, 讲师, 硕士, 主要研究方向为计算机网络、信息安全(xinnr@126.com); 杨哲(1978-), 男, 博士, 副教授, 主要研究方向为计算机网络、物联网应用.