本发明属于路由安全技术领域,尤其涉及一种rpki(resourcepublickeyinfrastructure,资源公共密钥基础架构)中认证机构即ca(certificateauthority)资源异常分配的检测方法。
背景技术:
互联网被划分为许多较小的自治系统(autonomoussystem,as),目前,自治系统之间的路由选择协议是bgp(bordergatewayprotocol,边界网关协议),bgp协议在安全方面的设计存在较大的不足:bgp协议默认接受as发起的任何路由通告,这就意味着,即使一个as在网络上发起一个不属于自己的ip地址前缀的路由通告,这一路由通告也会被其他的as接受并继续传播。bgp的这一安全缺陷容易导致一种典型的互联网安全威胁——路由劫持。现已发生的典型的路由劫持事件包括:1997年4月的as7007事件、2004年12月的土耳其电信集团劫持互联网事件、2008年2月的巴基斯坦劫持youtube事件,以及2014年2月的加拿大流量劫持事件等。路由劫持对互联网的正常运行影响非常大,可能会导致路由黑洞、流量窃听以及拒绝服务攻击等。rpki的提出正是为了解决路由劫持,目前,rpki在全球的部署范围也正在逐步地扩大,尤其是在南美洲和欧洲,以及全球多个国家和地区都已经开始或完成了rpki的实际部署工作。
针对域间路由系统存在的安全问题,rpki通过构建一个公钥证书体系来完成对互联网码号资源(internetnumberresource,inr)的所有权(即分配关系)和使用权(即路由源授权)的认证,并以此“认证信息”来指导bgp中边界路由器的路由决策,帮助其检验bgp报文中路由起源信息的合法性和真实性,从而有效地防止路由劫持的发生。其中,inr包含ip资源和as资源。图1为rpki的模块组成,如图1所示,rpki主要包括ca和rp(relyingparty,依赖方)两个机构,ca机构负责资源分配,即进行证书及相关签名对象的颁发工作,图中的iana、apnic、cnnc等均为ca机构,rp机构用来同步ca机构颁发的证书及签名对象,bgp路由模块通过向rp获取路由授权信息进行路由的起源认证。
rpki依附于inr的分配过程。图2是rpki的资源的层次化分配架构,如图2所示,在inr的分配层次中,最上层的是互联网号码分配机构(internetassignednumbersauthority,iana),iana将inr分配给5个区域性互联网注册机构(regionalinternetregistry,rir),分别为apnic(asia-pacificnetworkinformationcenter,亚太互联网络信息中心),afrinic(africainternetnetworkinformationcenter,非洲互联网络信息中心),ripencc(réseauxipeuropéensnetworkcoordinationcenter,欧洲ip资源网络协调中心),arin(americanregistryforinternetnumbers,美洲互联网号码注册管理中心),lacnic(lationamericanandcaribbeannetworkinformationcenter,拉丁美洲和加勒比地区互联网络信息中心);rir又可以将自己的资源向其下级节点如本地互联网注册机构(localinternetregistry,lir)、国家级互联网注册机构(nationalinternetregistry,nir)和互联网服务提供商isp(internetserviceprovider)分配,然后下级节点再依次逐级向下分配。
为了实现inr所有权和使用权的可认证,在rpki中要求每一层在向下层进行资源(包括as资源和ip资源)分配时,必须签发相应的证书,rpki中的证书主要包括两种:认证权威(certificateauthority,ca)证书和端实体(endentity,ee)证书。ca证书用于实现inr所有权的认证,ca证书中包含ip资源或as资源或两者皆有,将资源持有者和其持有的ip资源或as资源关联起来,伴随着ip地址分配,ca证书可以进一步签发新的ca证书,如图3,节点之间的结构为树形结构,apnic节点有三个下级节点,分别为jpnic节点、cnnic节点、twnic节点。apnic持有一个ca证书,apnic用该ca证书给下级机构jpnic、cnnic、twnic签发证书1、证书2、证书3,apnic节点为证书1、证书2、证书3的证书颁发者。资源证书之间的关系也是树形结构,称为证书树,如图4,apnic节点持有的证书为证书1、证书2、证书3的父证书,证书1、证书2、证书3为apnic持有的证书的子证书(证书的子证书指证书的直接子证书,例如证书1颁发了证书c,证书c并不是apnic持有的证书的子证书,而是apnic持有的证书的子证书1的子证书),证书1、证书2、证书3中的资源均为apnic持有证书的合法资源。如果某个证书是证书树的根,则该证书称为证书树的根证书。ee证书的首要任务是用来验证与资源使用授权相关的签名对象,如roa(routeoriginattestation,路由起源声明),ee证书中包含ip资源,该ip资源和roa中包含的ip资源一致。rpki路由起源认证中最重要的对象就是roa,roa中包含一个as及ip资源,它用于表明资源持有者授权该as,针对特定的ip资源发起路由起源通告。rpki中ca的主要操作包括资源分配过程中ca证书的签发、roa等数字签名对象的签发、资料库的维护等,这些操作依附于资源分配,只有上级节点分配资源、下级节点获得资源后,才有资源的再次分配以及各种数字签名对象签发、资料库的维护等操作。
ca的错误操作可能会导致严重的安全问题,例如,增加一个新的roa可能会导致一个合法的路由被判定为无效;删除合法的ca证书意味着资源的撤销,会导致合法的资源持有者在网络中被迫下线。更为严重的是,一个ca节点(ca机构)的错误操作影响的不仅仅是该节点本身,还包括该节点的各个下级节点。因此,发生错误操作的ca在rpki层次结构中的位置越靠上,则该ca造成的影响也可能越大。例如,如果发生错误操作的ca是一个处于低层次的isp,那么这种错误只会限制在该isp的局部范围内;但如果发生错误操作的ca是rir或nir,那么这种错误会对该区域内所有相关节点(也包括这些节点的下级节点)造成严重影响。因此,ca资源分配操作的安全性、准确性是rpki正确实现其路由起源认证功能的重要保证。
rpki中ca向其下级节点进行资源分配的过程中存在未经授权资源分配、资源再次分配的操作风险。未经授权资源分配是指ca将不属于自己的as资源或ip资源分配给下级节点。未经授权资源分配分为完全未经授权的分配和部分未经授权的分配。完全未经授权的分配指分配给下级节点的所有资源都不属于ca的合法资源。部分未经授权资源的分配指分配给下级节点的部分资源不属于ca的合法资源。如图5,apnic拥有合法资源{as资源:75530-75550;ip资源:200.0.2.0/24,201.0.113.0/24},apnic分配资源{as资源:75540-75544;ip资源:201.0.113.0/25}给jpnic,apnic分配给jpnic的资源属于apnic的合法资源,此过程为正常分配;apnic分配资源{as资源:627;ip资源:172.6.27.0/25}给twnic,apnic分配给twnic的资源都不属于apnic的合法资源,因此,apnic节点颁发证书给twnic节点的过程为完全未经授权的分配;apnic分配资源{as资源:666,75545;ip资源:200.0.2.0/25}给cnnic,apnic分配给cnnic的资源中,资源{as资源:666}不是apnic的合法资源,因此,apnic节点颁发证书给cnnic节点的过程为部分未经授权的分配。资源再次分配是指ca将已经分配给某个子节点的资源再次分配给其他子节点。资源再次分配可分为资源重复分配和资源重叠分配。资源重复分配指分配给某节点的资源和已经被分配给另一个节点的资源(as资源和ip资源)完全相同。如图6,apnic拥有合法资源{as资源:75530-75550;ip资源:200.0.2.0/24,201.0.113.0/24},apnic分配资源{as资源:75540-75544;ip资源:201.0.113.0/25}给jpnic,apnic分配给jpnic的资源属于apnic的合法资源,此过程为正常分配;apnic分配资源{as资源:75540-75544;ip资源:201.0.113.0/25}给cnnic,apnic分配给cnnic的资源和apnic节点分配给jpnic资源相同(ip资源和as资源均相同),此证书过程为资源重复分配。资源重叠分配是指分配给某节点的资源和已经被分配给另一个节点的资源(as资源或ip资源)有重叠。如图7,apnic拥有合法资源{as资源:75530-75550;ip资源:200.0.2.0/24,201.0.113.0/24},apnic分配资源{as资源:75540-75544;ip资源:201.0.113.0/25}给jpnic,apnic分配给jpnic的资源属于apnic的合法资源,此过程为正常分配;之后apnic节点分配资源{as资源:75542-75550;ip资源:200.0.2.0/25}给cnnic节点,apnic节点分配给cnnic节点的资源和apnic节点分配给jpnic节点的资源有重叠的资源{as资源:75542-75544},此证书过程为资源重叠分配。
研究学者认为,可以通过增强ca功能或者rp功能来避免资源异常分配的风险。rpki中的rp用于对rpki中产生的证书和roa等数字签名对象进行验证,但是rp只验证资源证书链,不检测资源分配过程中出现的异常情况。通过完善和改进现有rp的功能来解决资源异常问题的机制属于一种“滞后”操作,在ca产生了错误操作之后,利用改进后的rp对资料库中的数字签名对象进行验证,如果验证不通过,则需要对ca进行通知,以便ca可以及时纠正错误。rp检测错误后发送错误通知给ca,ca接受错误通知后发送新的证书给rp,此过程的时间称为故障恢复等待时间。为了减少由于ca的错误操作所导致的故障恢复等待时间,有学者提出一种“事前控制”机制来解决资源未经授权分配和资源重复分配的问题,通过修改rpki.net提供的rpki-ca源码,在进行证书颁发之前对颁发的资源进行验证,如果属于资源未经授权分配或资源重复分配,那么颁发证书的操作将不被允许。即通过颁发前验证来解决rpki中资源未经授权分配及资源重复分配问题。这种方法需要资源持有者自己进行资源分配之前的验证,如果资源持有者被攻击成为恶意节点,不执行颁发证书前的验证机制,依然可以执行资源重复分配以及资源未经授权分配操作。另外,该方法存在只考虑了资源未经授权分配及资源重复分配的问题,没有考虑资源重叠分配问题的缺陷。
因此,目前仍然没有一种既能检测资源未经授权分配及资源重复分配的情况,又能检测资源重叠分配情况的rpki中ca资源异常分配的检测方法。
技术实现要素:
本发明要解决的技术问题是提供一种rpki中认证机构即ca资源异常分配的检测方法,在rpki系统外添加一个ca资源异常分配检测系统,可以准确检测出rpki的ca资源是否属于异常分配,解决rpki中ca资源分配的资源未经授权分配、资源重复分配及资源重叠分配的资源异常问题。
本发明的技术方案是:在rpki系统外,增加一个ca资源异常分配检测系统。ca颁发资源证书后,ca将资源证书及资源证书的父证书发送到ca资源异常分配检测系统,进行资源的解析、资源未经授权分配的检测、资源重复分配的检测和资源重叠分配的检测。
本发明具体包含如下步骤:
第一步:构建ca资源异常分配检测系统,ca资源异常分配检测系统添加在ca和rp之间,在rpki的ca上添加一个发送模块,用来和ca资源异常分配检测系统进行交互,ca的发送模块将需要颁发的资源证书(命名为rc,rc即resourcecertificate)、rc的父证书和证书树的根证书发送给ca资源异常分配检测系统。ca资源异常分配检测系统对从ca的发送模块接收的rc进行检测,rp(依赖方)对通过ca资源异常分配检测系统检测的证书进行同步。ca资源异常分配检测系统由解析模块、检测模块、存储模块组成,存储模块中存储通过ca资源异常分配检测系统检测的证书,证书的格式为x.509格式(rfc5280:internetx.509publickeyinfrastructurecertificateandcertificaterevocationlist(crl)profile,https://www.rfc-editor.org/pdfrfc/rfc5280.txt.pdf)。证书由版本号、序列号、签名、颁发者、有效期、主体、主体公钥信息、颁发者唯一标识、主体唯一标识、扩展字段组成。版本号标识证书的版本;序列号是标识证书的唯一整数,是证书颁发者分配的标识证书的唯一标识符;签名指证书所用的数字签名算法;颁发者指证书颁发者的名称;有效期指证书的有效期时间段;主体指证书接收者;主体公钥信息指证书接收者的公钥;颁发者唯一标识指证书颁发者的序列号;主体唯一标识指证书接收者的序列号;扩展字段指证书的扩展部分,包含证书的ip资源、as资源。本发明只关心证书的扩展部分的ip资源及as资源,证书的其它字段不在本发明考虑范围内。解析模块从rpki的ca发送模块接收rc的父证书,判断rc的父证书是否存储在存储模块中,即判断rc的父证书是否是ca资源异常分配检测系统检测通过的证书,存储在存储模块中则解析出rc的父证书中的as资源或ip资源;解析模块从rpki的ca发送模块接收rc并解析出rc的as资源或ip资源,从存储模块读取rc的父证书已颁发的子证书并解析出子证书中的as资源或ip资源,将rc、rc的as资源或ip资源、rc的父证书、rc的父证书的as资源或ip资源、rc的父证书已颁发的子证书、子证书中的as资源或ip资源发送给检测模块。检测模块从解析模块获取rc、rc的as资源或ip资源、rc的父证书、rc的父证书中的as资源或ip资源、rc的父证书已颁发的子证书、子证书中的as资源或ip资源,根据rc的父证书的资源和rc的父证书已颁发的子证书的资源对rc中的资源进行资源未经授权分配、资源重复分配、资源重叠分配检测,如果检测通过,检测模块将检测通过的资源证书rc、rc的父证书发送给存储模块。存储模块一方面存储从ca的发送模块接收的证书树的根证书,一方面存储通过检测模块检测的rc。存储模块采用键值对(key-value,key:键,value:值)的方式存储证书树,每个key对应一个value,根据key可以查询到对应的value。存储模块中,key为证书的哈希值,将证书作为输入,通过哈希计算得到固定长度的输出作为证书的哈希值。第一级key为根证书哈希值,假设根证书有m1个子证书,对应的第一级value包含证书(即根证书本身的内容)、根证书的子证书哈希值数组,数组长度为m1。根证书的子证书哈希值数组由子证书1哈希值、子证书2哈希值、......、子证书m1哈希值组成。子证书1哈希值、子证书2哈希值、......、子证书m1哈希值均是第二级key,都指向第二级value,第二级value中包含第二级key中对应证书及证书的子证书哈希值数组,数组长度为m2;第二级value中的子证书哈希值数组中的子证书哈希值为第三级key值,都指向第三级value,第三级value中包含第三级key中对应证书及证书的子证书哈希值数组,数组长度为m3;,......,第q-1级value中的子证书哈希值数组中的子证书哈希值为第q级key值,都指向第q级value,第q级value中包含第q级key中对应证书及证书的子证书哈希值数组,数组长度为mq;......,第q-1级value中的子证书哈希值数组中的子证书哈希值为第q级key值,都指向第q级value,第q级value中包含第q级key中对应证书及证书的子证书哈希值数组,数组长度为mq;以此规律存储在存储模块中,1≤q≤q,m1、m2、m3、,......,mq,......,mq均为正整数。如果证书没有子证书,则该证书value的子证书哈希值数组为空。证书树通过key-value对的方式存储在存储模块中。如果证书为根证书,因为根证书没有父证书,根证书的哈希值只作为key值存储在存储模块中,不会作为子证书哈希值存储在任何value的子证书哈希值数组中。rp周期性地对通过ca资源异常分配检测系统检测的证书进行同步,即将rp中的证书更新为与存储模块中的证书一致。
第二步:ca资源异常分配检测系统按第三步到第十六步对ca颁发的证书进行检测,同时rp周期性地按第十七步到第十九步同步存储模块中的证书。
第三步:rpki的ca生成根证书(令为rootrc,rc即为resourcecertificate)并存储在ca本地,根证书扩展字段中的as、ip资源由ca根据具体情况确定。
第四步:rpki的ca的发送模块将rootrc发送给ca资源异常分配检测系统,ca资源异常分配检测系统的存储模块存储rootrc。此时存储模块中存储的key-value数据为:{key:rootrc的哈希值;value:rootrc的证书、[]},[]表示子证书哈希值数组为空。
第五步:初始化集合变量v={rootrc},v为存储模块中存储的证书的集合。
第六步:rpki的ca选择一个本地存储的资源证书,命名为parentrc,用parentrc签发资源证书rc并存储到ca本地,parentrc为v中的资源证书,ca将parentrc的扩展字段中的ip、as资源赋值到rc证书的扩展字段。
第七步:rpki的ca的发送模块将rc、parentrc(rc的父证书)发送给ca资源异常分配检测系统。
第八步:ca资源异常分配检测系统的解析模块从rpki的ca的发送模块接收rc、parentrc,对rc、parentrc、parentrc已颁发的子证书进行解析,方法是:
8.1解析模块从ca的发送模块接收parentrc,将接收的parentrc发送给存储模块,存储模块做哈希计算得到parentrc的哈希值,并查询存储模块中是否有与parentrc的哈希值相同的哈希值来判断parentrc是否已存储在存储模块中,如果成功查询到,则表明parentrc存储在存储模块中,解析模块从parentrc的扩展字段中获取parentrc中的资源,转8.2;未查询到则转第十三步;
8.2解析模块从rpki的ca的发送模块接收并读取rc证书,检测rc证书的扩展字段是否包含as资源或ip资源,包含则从rc证书的扩展字段获取rc中的资源,转8.3;不包含则转第十四步;
8.3解析模块从存储模块读取parentrc已颁发的所有子证书的资源,方法为:
8.3.1解析模块根据{key:parentrc的哈希值}在存储模块获取对应value字段的子证书哈希值数组,令读取的子证书哈希值数组长度为n,若n=0,直接转第九步;若n>0,转8.3.2;
8.3.2令变量k=1;
8.3.3存储模块读取子证书哈希值数组的第k个子证书哈希值,根据{key:第k个子证书哈希值}在存储模块获取该key对应的value中的证书,该证书即parentrc的第k个子证书;
8.3.4如果k=n,存储模块将parentrc颁发的n个子证书返回给解析模块,转8.3.5;否则k加1,转8.3.3;
8.3.5解析模块从n个子证书的扩展字段获取子证书中的资源。
第九步:ca资源异常分配检测系统的解析模块将rc、rc的资源、parentrc、parentrc的资源、parentrc已颁发的子证书、parentrc已颁发的子证书的资源发送到检测模块,如果n=0,则parentrc已颁发的子证书、parentrc已颁发的子证书的资源为空。
第十步:ca资源异常分配检测系统的检测模块从解析模块获取rc、rc的资源、parentrc、parentrc的资源、parentrc已颁发的子证书、parentrc已颁发的子证书的资源,对rc进行资源异常分配的检测,方法是:
10.1检测模块检测rc中是否包含as资源,包含则转10.2;不包含则转10.5;
10.2检测模块对rc进行as资源未经授权分配检测:
10.2.1检测模块检测rc的as资源是否包含在parentrc的as资源中,不包含则检测未通过,转第十五步;包含则转10.3;
10.3若n=0,转10.5;若n>0,转10.4;
10.4检测模块对rc进行as资源重复分配检测及资源重叠分配检测,令变量i=1:
10.4.1检测模块检测rc中的as资源是否和parentrc已分配的第i个子证书中的as资源相同(as资源重复分配),相同则检测不通过,转第十五步;否则转10.4.2;
10.4.2检测模块检测rc中的as资源是否和parentrc已分配的第i个子证书中的as资源有重叠(as资源重叠分配),有重叠则检测不通过,转第十五步;否则转10.4.3;
10.4.3如果i=n,as资源重复分配检测及资源重叠分配检测完成,转10.5;否则i的值加1,转10.4.1继续检测;
10.5检测模块检测rc中是否包含ip资源,包含则转10.6;不包含则转第十一步;
10.6检测模块对rc进行ip资源未经授权分配检测:
10.6.1检测模块检测rc的ip资源是否包含在parentrc的ip资源中,不包含则检测未通过,转第十五步;包含则转10.7;
10.7若n=0,转第十一步;若n>0,转10.8;
10.8检测模块对rc进行ip资源重复分配检测及资源重叠分配检测,令变量j=1:
10.8.1检测模块检测rc中的ip资源是否和parentrc已颁发的第j个子证书中的ip资源相同(ip资源重复分配),相同则检测不通过,转第十五步;否则转10.8.2;
10.8.2检测模块检测rc中的ip资源是否和parentrc已颁发的第j个子证书中的ip资源有重叠(ip资源重叠分配),有重叠则检测不通过,转第十五步;否则转10.8.3;
10.8.3如果j=n,ip资源重复分配检测及资源重叠分配检测完成,转第十一步;否则j的值加1,转10.8.1继续检测。
第十一步:检测模块将检测通过的rc、parentrc发送给存储模块,存储模块存储rc,方法为:
11.1存储模块对rc做哈希计算,得到rc的哈希值;对parentrc做计算,得到parentrc的哈希值;
11.2存储模块中添加一条记录{key:rc的哈希值;value:rc证书、[]},[]表示子证书哈希值数组为空;
11.3存储模块修改key为parentrc的哈希值对应的value字段,将rc的哈希值添加到value字段的子证书哈希值数组中。
第十二步:将rc添加到集合变量v中,转第十六步。
第十三步:解析模块显示“该资源证书的父证书不存在,解析未通过”错误信息,转第十六步。
第十四步:解析模块显示“资源证书错误,解析未通过”错误信息,转第十六步。
第十五步:检测模块显示“资源分配异常,检测未通过”错误信息,转第十六步。
第十六步:此次资源证书颁发过程结束,转第六步。第十七步:初始化时间变量t=系统时间。
第十八步:读取系统时间,令为t2,判定t2-t是否大于等于阈值t,t为正整数,单位为秒,t大于等于300;若t2-t大于等于阈值t,转第十九步。
第十九步:rp使用数据同步工具获取ca资源异常分配检测系统的存储模块中存储的证书,该工具采用的是rsync-3.1.3或以上版本(https://download.samba.org/pub/rsync/),转第十七步。
本发明提供了rpki中ca资源异常分配的检测方法。采用本发明可以达到以下的技术效果:
1)解决了rpki中的ca的资源未经授权分配、资源重复分配、资源重叠分配的资源异常分配问题,增强了rpki中资源分配的安全性。
2)在rpki系统外增加了独立的ca资源异常分配检测系统,防止了ca恶意进行资源的异常分配。
3)rp只同步通过ca资源异常分配检测系统检测通过的证书,减少了rp同步的证书的冗余性。
附图说明
图1为背景技术所述rpki中的逻辑结构图。
图2为背景技术中rpki的资源的层次化分配架构。
图3为背景技术中证书机构间关系及证书机构签发证书图。
图4为背景技术中rpki的证书间的树形结构关系图。
图5为背景技术公布的未经授权资源分配的图。
图6为背景技术公布的资源再次分配中的资源重复分配图。
图7为背景技术公布的资源再次分配中的资源重叠分配图。
图8为本发明第一步构建的rpki的ca资源异常分配检测系统逻辑结构图。
图9为本发明总体流程图。
图10是图9中第三步到第十六步对ca颁发的证书进行检测的流程图。
图11为x.509证书的结构图。
图12为ca资源异常分配检测系统中存储模块的键值对存储方式图。
具体实施方式
下面对照附图对本发明进行详细说明。
图9为本发明总体流程图。如图9所示,本发明包括以下步骤:
第一步:构建ca资源异常分配检测系统。如图8所示,ca资源异常分配检测系统添加在ca和rp之间,在rpki的ca上添加一个发送模块,用来和ca资源异常分配检测系统进行交互,ca的发送模块将需要颁发的资源证书rc、rc的父证书和证书树的根证书发送给ca资源异常分配检测系统。ca资源异常分配检测系统对从ca的发送模块接收的rc进行检测,rp对通过ca资源异常分配检测系统检测的证书进行同步。ca资源异常分配检测系统由解析模块、检测模块、存储模块组成,存储模块中存储通过ca资源异常分配检测系统检测的证书,证书的格式为x.509格式。如图11所示,证书由版本号、序列号、签名、颁发者、有效期、主体、主体公钥信息、颁发者唯一标识、主体唯一标识、扩展字段组成。版本号标识证书的版本;序列号是标识证书的唯一整数,是证书颁发者分配的标识证书的唯一标识符;签名指证书所用的数字签名算法;颁发者指证书颁发者的名称;有效期指证书的有效期时间段;主体指证书接收者;主体公钥信息指证书接收者的公钥;颁发者唯一标识指证书颁发者的序列号;主体唯一标识指证书接收者的序列号;扩展字段指证书的扩展部分,包含证书的ip资源、as资源。解析模块从rpki的ca发送模块接收rc的父证书,判断rc的父证书是否存储在存储模块中,即判断rc的父证书是否是ca资源异常分配检测系统检测通过的证书,存储在存储模块中则解析出rc的父证书中的as资源或ip资源;解析模块从rpki的ca发送模块接收rc并解析出rc的as资源或ip资源,从存储模块读取rc的父证书已颁发的子证书并解析出子证书中的as资源或ip资源,将rc、rc的as资源或ip资源、rc的父证书、rc的父证书的as资源或ip资源、rc的父证书已颁发的子证书、子证书中的as资源或ip资源发送给检测模块。检测模块从解析模块获取rc、rc的as资源或ip资源、rc的父证书、rc的父证书中的as资源或ip资源、rc的父证书已颁发的子证书、子证书中的as资源或ip资源,根据rc的父证书的资源和rc的父证书已颁发的子证书的资源对rc中的资源进行资源未经授权分配、资源重复分配、资源重叠分配检测,如果检测通过,检测模块将检测通过的资源证书rc、rc的父证书发送给存储模块。存储模块一方面存储从ca的发送模块接收的证书树的根证书,一方面存储通过检测模块检测的rc。存储模块采用键值对的方式存储证书树,每个key对应一个value,根据key可以查询到对应的value。存储模块中,key为证书的哈希值,将证书作为输入,通过哈希计算得到固定长度的输出作为证书的哈希值。如图12(只画了3级key,2级value),第一级key为根证书哈希值,假设根证书有m1个子证书,对应的第一级value包含证书(即根证书本身的内容)、根证书的子证书哈希值数组,数组长度为m1。根证书的子证书哈希值数组由子证书1哈希值、子证书2哈希值、......、子证书m1哈希值组成。子证书1哈希值、子证书2哈希值、......、子证书m1哈希值均是第二级key,都指向第二级value,第二级value中包含第二级key中对应证书及证书的子证书哈希值数组,数组长度为m2;第二级value中的子证书哈希值数组中的子证书哈希值为第三级key值,都指向第三级value,第三级value中包含第三级key中对应证书及证书的子证书哈希值数组,数组长度为m3;,......,第q-1级value中的子证书哈希值数组中的子证书哈希值为第q级key值,都指向第q级value,第q级value中包含第q级key中对应证书及证书的子证书哈希值数组,数组长度为mq;......,第q-1级value中的子证书哈希值数组中的子证书哈希值为第q级key值,都指向第q级value,第q级value中包含第q级key中对应证书及证书的子证书哈希值数组,数组长度为mq;以此规律存储在存储模块中,1≤q≤q,m1、m2、m3、,......,mq,......,mq均为正整数。如果证书没有子证书,则该证书value的子证书哈希值数组为空。证书树通过key-value对的方式存储在存储模块中。如果证书为根证书,因为根证书没有父证书,根证书的哈希值只作为key值存储在存储模块中,不会作为子证书哈希值存储在任何value的子证书哈希值数组中。rp周期性地对通过ca资源异常分配检测系统检测的证书进行同步,即将rp中的证书更新为与存储模块中的证书一致。
第二步:ca资源异常分配检测系统按第三步到第十六步对ca颁发的证书进行检测,同时rp周期性地按第十七步到第十九步同步存储模块中的证书。
第三步:如图10所示,rpki的ca生成根证书(令为rootrc)并存储在ca本地,根证书扩展字段中的as、ip资源由ca根据具体情况确定。
第四步:rpki的ca的发送模块将rootrc发送给ca资源异常分配检测系统,ca资源异常分配检测系统的存储模块存储rootrc。此时存储模块中存储的key-value数据为:{key:rootrc的哈希值;value:rootrc的证书、[]},[]表示子证书哈希值数组为空。
第五步:初始化集合变量v={rootrc},v为存储模块中存储的证书的集合。
第六步:rpki的ca选择一个本地存储的资源证书,命名为parentrc,用parentrc签发资源证书rc并存储到ca本地,parentrc为v中的资源证书,ca将parentrc的扩展字段中的ip、as资源赋值到rc证书的扩展字段。
第七步:rpki的ca的发送模块将rc、parentrc(rc的父证书)发送给ca资源异常分配检测系统。
第八步:ca资源异常分配检测系统的解析模块从rpki的ca的发送模块接收rc、parentrc,对rc、parentrc、parentrc已颁发的子证书进行解析,方法是:
8.1解析模块从ca的发送模块接收parentrc,将接收的parentrc发送给存储模块,存储模块做哈希计算得到parentrc的哈希值,并查询存储模块中是否有与parentrc的哈希值相同的哈希值来判断parentrc是否已存储在存储模块中,如果成功查询到,则表明parentrc存储在存储模块中,解析模块从parentrc的扩展字段中获取parentrc中的资源,转8.2;未查询到则转第十三步;
8.2解析模块从rpki的ca的发送模块接收并读取rc证书,检测rc证书的扩展字段是否包含as资源或ip资源,包含则从rc证书的扩展字段获取rc中的资源,转8.3;不包含则转第十四步;
8.3解析模块从存储模块读取parentrc已颁发的所有子证书的资源,方法为:
8.3.1解析模块根据{key:parentrc的哈希值}在存储模块获取对应value字段的子证书哈希值数组,令读取的子证书哈希值数组长度为n,若n=0,直接转第九步;若n>0,转8.3.2;
8.3.2令变量k=1;
8.3.3存储模块读取子证书哈希值数组的第k个子证书哈希值,根据{key:第k个子证书哈希值}在存储模块获取该key对应的value中的证书,该证书即parentrc的第k个子证书;
8.3.4如果k=n,存储模块将parentrc颁发的n个子证书返回给解析模块,转8.3.5;否则k加1,转8.3.3;
8.3.5解析模块从n个子证书的扩展字段获取子证书中的资源。
第九步:ca资源异常分配检测系统的解析模块将rc、rc的资源、parentrc、parentrc的资源、parentrc已颁发的子证书、parentrc已颁发的子证书的资源发送到检测模块,如果n=0,则parentrc已颁发的子证书、parentrc已颁发的子证书的资源为空。
第十步:ca资源异常分配检测系统的检测模块从解析模块获取rc、rc的资源、parentrc、parentrc的资源、parentrc已颁发的子证书、parentrc已颁发的子证书的资源,对rc进行资源异常分配的检测,方法是:
10.1检测模块检测rc中是否包含as资源,包含则转10.2;不包含则转10.5;
10.2检测模块对rc进行as资源未经授权分配检测:
10.2.1检测模块检测rc的as资源是否包含在parentrc的as资源中,不包含则检测未通过,转第十五步;包含则转10.3;
10.3若n=0,转10.5;若n>0,转10.4;
10.4检测模块对rc进行as资源重复分配检测及资源重叠分配检测,令变量i=1:
10.4.1检测模块检测rc中的as资源是否和parentrc已分配的第i个子证书中的as资源相同(as资源重复分配),相同则检测不通过,转第十五步;否则转10.4.2;
10.4.2检测模块检测rc中的as资源是否和parentrc已分配的第i个子证书中的as资源有重叠(as资源重叠分配),有重叠则检测不通过,转第十五步;否则转10.4.3;
10.4.3如果i=n,as资源重复分配检测及资源重叠分配检测完成,转10.5;否则i的值加1,转10.4.1继续检测;
10.5检测模块检测rc中是否包含ip资源,包含则转10.6;不包含则转第十一步;
10.6检测模块对rc进行ip资源未经授权分配检测:
10.6.1检测模块检测rc的ip资源是否包含在parentrc的ip资源中,不包含则检测未通过,转第十五步;包含则转10.7;
10.7若n=0,转第十一步;若n>0,转10.8;
10.8检测模块对rc进行ip资源重复分配检测及资源重叠分配检测,令变量j=1:
10.8.1检测模块检测rc中的ip资源是否和parentrc已颁发的第j个子证书中的ip资源相同(ip资源重复分配),相同则检测不通过,转第十五步;否则转10.8.2;
10.8.2检测模块检测rc中的ip资源是否和parentrc已颁发的第j个子证书中的ip资源有重叠(ip资源重叠分配),有重叠则检测不通过,转第十五步;否则转10.8.3;
10.8.3如果j=n,ip资源重复分配检测及资源重叠分配检测完成,转第十一步;否则j的值加1,转10.8.1继续检测。
第十一步:检测模块将检测通过的rc、parentrc发送给存储模块,存储模块存储rc,方法为:
11.1存储模块对rc做哈希计算,得到rc的哈希值;对parentrc做计算,得到parentrc的哈希值;
11.2存储模块中添加一条记录{key:rc的哈希值;value:rc证书、[]},[]表示子证书哈希值数组为空;
11.3存储模块修改key为parentrc的哈希值对应的value字段,将rc的哈希值添加到value字段的子证书哈希值数组中。
第十二步:将rc添加到集合变量v中,转第十六步。
第十三步:解析模块显示“该资源证书的父证书不存在,解析未通过”错误信息,转第十六步。
第十四步:解析模块显示“资源证书错误,解析未通过”错误信息,转第十六步。
第十五步:检测模块显示“资源分配异常,检测未通过”错误信息,转第十六步。
第十六步:此次资源证书颁发过程结束,转第六步。
第十七步:如图9所示,初始化时间变量t=系统时间。
第十八步:读取系统时间,令为t2,判定t2-t是否大于等于阈值t,t为正整数,单位为秒,t大于等于300;若t2-t大于等于阈值t,转第十九步。
第十九步:rp使用数据同步工具获取ca资源异常分配检测系统的存储模块中存储的证书,该工具采用的是rsync-3.1.3或以上版本(https://download.samba.org/pub/rsync/),转第十七步。
1.一种rpki中认证机构资源异常分配的检测方法,其特征在于包括以下步骤:
第一步:构建认证机构即ca资源异常分配检测系统,ca资源异常分配检测系统添加在ca和rp即依赖方之间;在rpki即资源公共密钥基础架构的ca上添加一个发送模块,ca的发送模块将需要颁发的资源证书rc、rc的父证书和证书树的根证书发送给ca资源异常分配检测系统;ca资源异常分配检测系统对从ca的发送模块接收的rc进行检测;ca资源异常分配检测系统由解析模块、检测模块、存储模块组成,存储模块中存储通过ca资源异常分配检测系统检测的证书,证书扩展字段中包含证书的ip资源、as资源;解析模块从rpki的ca发送模块接收rc的父证书,判断rc的父证书是否存储在存储模块中,即判断rc的父证书是否是ca资源异常分配检测系统检测通过的证书,存储在存储模块中则解析出rc的父证书中的as资源或ip资源;解析模块从rpki的ca发送模块接收rc并解析出rc的as资源或ip资源,从存储模块读取rc的父证书已颁发的子证书并解析出子证书中的as资源或ip资源,将rc、rc的as资源或ip资源、rc的父证书、rc的父证书的as资源或ip资源、rc的父证书已颁发的子证书、子证书中的as资源或ip资源发送给检测模块;检测模块从解析模块获取rc、rc的as资源或ip资源、rc的父证书、rc的父证书中的as资源或ip资源、rc的父证书已颁发的子证书、子证书中的as资源或ip资源,根据rc的父证书的资源和rc的父证书已颁发的子证书的资源对rc中的资源进行资源未经授权分配、资源重复分配、资源重叠分配检测,如果检测通过,检测模块将检测通过的资源证书rc、rc的父证书发送给存储模块;存储模块一方面存储从ca的发送模块接收的证书树的根证书,一方面存储通过检测模块检测的rc;存储模块采用键值对key-value的方式存储证书树,每个key对应一个value,根据key可以查询到对应的value;key为证书的哈希值,即将证书作为输入,通过哈希计算得到固定长度的输出作为证书的哈希值;value包含证书、证书的子证书哈希值数组;rp周期性地对通过ca资源异常分配检测系统检测的证书进行同步即将rp中的证书更新为与存储模块中的证书一致;
第二步:ca资源异常分配检测系统按第三步到第十六步对ca颁发的证书进行检测,同时rp周期性地按第十七步到第十九步同步存储模块中的证书;
第三步:rpki的ca生成根证书rootrc并存储在ca本地;
第四步:rpki的ca的发送模块将rootrc发送给ca资源异常分配检测系统,ca资源异常分配检测系统的存储模块存储rootrc;存储模块存储的key-value数据为:{key:rootrc的哈希值;value:rootrc的证书、[]},[]表示子证书哈希值数组为空;
第五步:初始化集合变量v={rootrc},v为存储模块中存储的证书的集合;
第六步:rpki的ca选择一个本地存储的资源证书,命名为parentrc,用parentrc签发资源证书rc并存储到ca本地,parentrc为v中的资源证书,ca将parentrc的扩展字段中的ip、as资源赋值到rc证书的扩展字段;
第七步:rpki的ca的发送模块将rc、parentrc发送给ca资源异常分配检测系统;
第八步:ca资源异常分配检测系统的解析模块从rpki的ca的发送模块接收rc、parentrc,对rc、parentrc、parentrc已颁发的子证书进行解析,方法是:
8.1解析模块从ca的发送模块接收parentrc,将接收的parentrc发送给存储模块,存储模块做哈希计算得到parentrc的哈希值,并查询存储模块中是否有与parentrc的哈希值相同的哈希值,如果成功查询到,则表明parentrc存储在存储模块中,解析模块从parentrc的扩展字段中获取parentrc中的资源,转8.2;未查询到则转第十三步;
8.2解析模块从rpki的ca的发送模块接收并读取rc证书,检测rc证书的扩展字段是否包含as资源或ip资源,包含则从rc证书的扩展字段获取rc中的资源,转8.3;不包含则转第十四步;
8.3解析模块从存储模块读取parentrc已颁发的所有子证书的资源;
第九步:ca资源异常分配检测系统的解析模块将rc、rc的资源、parentrc、parentrc的资源、parentrc已颁发的子证书、parentrc已颁发的子证书的资源发送到检测模块,如果读取的子证书哈希值数组长度n=0,则parentrc已颁发的子证书、parentrc已颁发的子证书的资源为空;
第十步:ca资源异常分配检测系统的检测模块从解析模块获取rc、rc的资源、parentrc、parentrc的资源、parentrc已颁发的子证书、parentrc已颁发的子证书的资源,对rc进行资源异常分配的检测,方法是:
10.1检测模块检测rc中是否包含as资源,包含则转10.2;不包含则转10.5;
10.2检测模块对rc进行as资源未经授权分配检测:
10.2.1检测模块检测rc的as资源是否包含在parentrc的as资源中,不包含则检测未通过,转第十五步;包含则转10.3;
10.3若n=0,转10.5;若n>0,转10.4;
10.4检测模块对rc进行as资源重复分配检测及资源重叠分配检测,令变量i=1:
10.4.1检测模块检测rc中的as资源是否和parentrc已分配的第i个子证书中的as资源相同,相同则检测不通过,转第十五步;否则转10.4.2;
10.4.2检测模块检测rc中的as资源是否和parentrc已分配的第i个子证书中的as资源有重叠,有重叠则检测不通过,转第十五步;否则转10.4.3;
10.4.3如果i=n,as资源重复分配检测及资源重叠分配检测完成,转10.5;否则i的值加1,转10.4.1继续检测;
10.5检测模块检测rc中是否包含ip资源,包含则转10.6;不包含则转第十一步;
10.6检测模块对rc进行ip资源未经授权分配检测:
10.6.1检测模块检测rc的ip资源是否包含在parentrc的ip资源中,不包含则检测未通过,转第十五步;包含则转10.7;
10.7若n=0,转第十一步;若n>0,转10.8;
10.8检测模块对rc进行ip资源重复分配检测及资源重叠分配检测,令变量j=1:
10.8.1检测模块检测rc中的ip资源是否和parentrc已颁发的第j个子证书中的ip资源相同,相同则检测不通过,转第十五步;否则转10.8.2;
10.8.2检测模块检测rc中的ip资源是否和parentrc已颁发的第j个子证书中的ip资源有重叠,有重叠则检测不通过,转第十五步;否则转10.8.3;
10.8.3如果j=n,ip资源重复分配检测及资源重叠分配检测完成,转第十一步;否则j的值加1,转10.8.1;
第十一步:检测模块将检测通过的rc、parentrc发送给存储模块,存储模块存储rc;
第十二步:将rc添加到集合变量v中,转第十六步;
第十三步:解析模块显示“该资源证书的父证书不存在,解析未通过”错误信息,转第十六步;
第十四步:解析模块显示“资源证书错误,解析未通过”错误信息,转第十六步;
第十五步:检测模块显示“资源分配异常,检测未通过”错误信息,转第十六步;
第十六步:此次资源证书颁发过程结束,转第六步;第十七步:初始化时间变量t=系统时间;
第十八步:读取系统时间,令为t2,判定t2-t是否大于等于阈值t,t为正整数,单位为秒;若t2-t大于等于阈值t,转第十九步;
第十九步:rp使用数据同步工具获取ca资源异常分配检测系统的存储模块中存储的证书,转第十七步。
2.如权利要求1所述的一种rpki中认证机构资源异常分配的检测方法,其特征在于所述证书的格式为x.509格式,由版本号、序列号、签名、颁发者、有效期、主体、主体公钥信息、颁发者唯一标识、主体唯一标识、扩展字段组成;版本号标识证书的版本;序列号是标识证书的唯一整数,是证书颁发者分配的标识证书的唯一标识符;签名指证书所用的数字签名算法;颁发者指证书颁发者的名称;有效期指证书的有效期时间段;主体指证书接收者;主体公钥信息指证书接收者的公钥;颁发者唯一标识指证书颁发者的序列号;主体唯一标识指证书接收者的序列号;扩展字段指证书的扩展部分,包含证书的ip资源、as资源;ip资源及as资源存放在证书的扩展部分。
3.如权利要求1所述的一种rpki中认证机构资源异常分配的检测方法,其特征在于所述存储模块存储证书的key-value的方式是指:第一级key为根证书哈希值,若根证书有m1个子证书,对应的第一级value包含证书即根证书本身的内容、根证书的子证书哈希值数组,数组长度为m1;根证书的子证书哈希值数组由子证书1哈希值、子证书2哈希值、......、子证书m1哈希值组成;子证书1哈希值、子证书2哈希值、......、子证书m1哈希值均是第二级key,都指向第二级value,第二级value中包含第二级key中对应证书及证书的子证书哈希值数组,数组长度为m2;第二级value中的子证书哈希值数组中的子证书哈希值为第三级key值,都指向第三级value,第三级value中包含第三级key中对应证书及证书的子证书哈希值数组,数组长度为m3;,......,第q-1级value中的子证书哈希值数组中的子证书哈希值为第q级key值,都指向第q级value,第q级value中包含第q级key中对应证书及证书的子证书哈希值数组,数组长度为mq;......,第q-1级value中的子证书哈希值数组中的子证书哈希值为第q级key值,都指向第q级value,第q级value中包含第q级key中对应证书及证书的子证书哈希值数组,数组长度为mq;以此规律存储在存储模块中,1≤q≤q,m1、m2、m3、,......,mq,......,mq均为正整数;如果证书没有子证书,则该证书value的子证书哈希值数组为空。
4.如权利要求1所述的一种rpki中认证机构资源异常分配的检测方法,其特征在于8.3步所述解析模块从存储模块读取parentrc已颁发的所有子证书的资源的方法为:
8.3.1解析模块根据{key:parentrc的哈希值}在存储模块获取对应value字段的子证书哈希值数组,令读取的子证书哈希值数组长度为n,若n=0,说明没有子证书,直接结束;若n>0,转8.3.2;
8.3.2令变量k=1;
8.3.3存储模块读取子证书哈希值数组的第k个子证书哈希值,根据{key:第k个子证书哈希值}在存储模块获取该key对应的value中的证书,该证书即parentrc的第k个子证书;
8.3.4如果k=n,存储模块将parentrc颁发的n个子证书返回给解析模块,转8.3.5;否则k加1,转8.3.3;
8.3.5解析模块从n个子证书的扩展字段获取子证书中的资源。
5.如权利要求1所述的一种rpki中认证机构资源异常分配的检测方法,其特征在于第十一步所述存储模块存储rc的方法为:
11.1存储模块对rc做哈希计算,得到rc的哈希值;对parentrc做计算,得到parentrc的哈希值;
11.2存储模块中添加一条记录{key:rc的哈希值;value:rc证书、[]},[]表示子证书哈希值数组为空;
11.3存储模块修改key为parentrc的哈希值对应的value字段,将rc的哈希值添加到value字段的子证书哈希值数组中。
6.如权利要求1所述的一种rpki中认证机构资源异常分配的检测方法,其特征在于第十八步所述阈值t大于等于300。
7.如权利要求1所述的一种rpki中认证机构资源异常分配的检测方法,其特征在于第十九步所述数据同步工具采用rsync-3.1.3或以上版本。
技术总结