发明内容
为了解决解决物联网中访问控制中心化,权限的动态授予以及区块链中节点安全的问题,本发明提出一种基于区块链和信任系统的访问控制方法,具体包括以下步骤:
S1、搭建联盟链平台,管理员对区块链网络进行初始化,包括为该网络中的用户创建证书;
S2、在Hyperledger Fabric平台上使用golang编写链码,包括策略管理链码、权限验证链码、信任管理链码、资源管理链码,将链码安装到区块链并进行初始化;
S3、用户和管理员一起制定访问管理策略,由管理员将制定的访问策略上传到区块链中;同时管理员对用户的属性进行验证,利用策略管理链码将用户属性保存在区块链上;
S4、调用资源管理链码,将资源URL储存到区块链上;
S5、用户通过区块链向资源请求访问,用户发送请求后,链码将检查相应的访问策略和用户的属性,如果用户的属性和策略匹配,则生成一个令牌发送给用户,并将令牌的哈希值保存在区块链上,以便进行权限验证;
S6、区块链记录步骤S5中的并调用信用管理链码对用户的信任值进行计算,得出的结果将储存在区块链上,并对用户的信任值属性进行更新保存。
进一步的,策略管理链码用于实现用户的属性认证和储存,并为系统添加基于属性的访问控制模型的访问控制策略,该链码包括以下接口:
Auth()结构,用于存储用于属性,即当用户向管理员发送属性注册请求,管理员根据规范验证其属性,验证完成后通过该接口将用户属性储存到区块链中;
AddPolicy()接口,用于添加新的基于属性的访问控制模型的访问策略到区块链中;
UpdatePolicy()接口,用于将使用新接收的访问控制策略对旧的进行覆盖,以达到访问控制策略更新的效果;
DeletePolicy()接口,用于将删除储存在区块链中的访问控制策略;
QueryPolicy()接口,用于实现使用索引搜索目标策略的功能。
进一步的,属性验证链码通过调用策略管理链码获得访问策略和用户属性,再通过属性验证链码中的接口验证属性和策略是否匹配,若匹配则发送令牌来代表用户的访问权限,令牌由有效时间、主体账户和客体ID、主体信任值、主体对客体操作权限组成,该链码包括以下接口:
GetAttrs()接口,用于搜索储存在区块链中的用户属性,并返还对应的属性;
CheckAccess()接口,用于完成资源请求用户与资源持有用户之间的交互,即该端口调用QueryPolicy()端口和GetAttrs()端口获得访问控制策略和用户属性,逐一判断属性和策略是否匹配,若匹配则生成令牌发送给资源请求用户,并将令牌的哈希值储存到区块链上,否则返回错误信息,并根据该次交互更新信任值。
进一步的,信任管理链码用于计算每个节点的信任值,包括以下端口:
TrustCaculate()端口,通过储存在区块链中的节点交互行为分别计算直接信任值和推荐信任值,最后对直接和推荐信任值进行加权求和,得出来的最终信任值会作为一种属性储存在区块链上。
进一步的,资源管理链码用于将资源的URL储存到区块链上,包括以下端口:
AddURL()端口,用于以DeviceId作为键,把资源的URL储存到区块链SDB上;
GetURL()端口,用于根据DeviceId从SDB中获得相应的URL。
进一步的,用户的属性包括主体属性、客体属性、操作属性以及环境属性,所述主体属性至少包括用户的ID、角色、组织、信任值和所属的域;所述客体属性至少包括设备的ID和设备的MAC地址;所述操作属性,即主体对客体资源的属性也,包括读、写、执行三种操作;所述环境属性,即策略所需求的上下文条件,至少包括时间、位置、安全级别。
进一步的,步骤S5中用户通过区块链向资源请求访问的过程包括:
S51:用户通过调用存储在区块链网络上的属性验证链码对资源发起请求;
S52:区块链上的属性管理链码收到来自节点的请求后,调用策略管理链码,以此来获得区块链上的访问策略和节点属性,并进行验证;
S53:若请求节点满足访问策略要求,则发送访问令牌给请求节点,并将令牌的哈希值储存在区块链上;
S54:请求节点发送令牌到区块链进行验证,区块链确认令牌的正确性后,将资源发送给请求节点。
进一步的,步骤S6中计算信任值的过程包括以下步骤:
S61、根据存储在区块链中的两个节点间的交互行为,计算出直接信任值Direct_T;
S62、从区块链中获取节点和其他节点间的交互行为,计算出推荐信任值Recommend_T;
S63、对直接信任值和推荐信任值进行加权求和得出最终信任值T,将得出的信任值对节点属性进行更新,最终信任值T表示为:
T=aDirect_T+bRecommend_T;
其中,a是一个随着交互次数增加而增加的值,b是一个随着交互次数增加而减少的值,且a+b=1。
进一步的,若当前用户第n次与网络中节点的交互,则选取最近的n-m次交互计算当前节点的直接信任值,直接信任值Direct_T表示为:
其中,γn-m为老化参数,且0<γ<1;δi为交互的权重,根据节点是否积极互动选择权值,本发明不对该权重的具体值进行限定,但是选取的权重值应当满足δpos>0且vneg<0且|δpos|<|δneg|;a、b和c为常数,e为自然数。
进一步的,若前用户与N个其他域的节点有过交互,则当前用户的间接信任值的计算包括:
其中,x为最少的推荐节点个数,即若有过交互的节点数N小于x则认为当前用户的间接信任值不可信,此时当前用户的间接信任值取0;z为一个常数;Tj为作为资源请求用户与其他域的d第j个用户节点的直接信任值,wj为Tj对应的权重,N为当前节点交互的节点中其他域节点的数量;Nj为第j个其他域节点与当前节点交互过的次数;M为在直接信任值时选取的当前用户与网络中其他节点的交互次数;S为资源敏感度。
本发明使用部署在区块链中的信任管理链码将区块链中的节点可信度作一个量化,通过策略管理链码为资源的访问设置限制,以此来实现权限的动态授予,撤销;同时降低区块链中节点的作恶能力,保证区块链网络的安全,使用令牌的概念进一步减少了区块链的存储压力,加快了访问速度。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明提出一种基于区块链和信任系统的访问控制方法,具体包括以下步骤:
S1、搭建联盟链平台,管理员对区块链网络进行初始化,包括为该网络中的用户创建证书;
S2、在Hyperledger Fabric平台上使用golang编写链码,包括策略管理链码、权限验证链码、信任管理链码、资源管理链码,将链码安装到区块链并进行初始化;
S3、用户和管理员一起制定访问管理策略,由管理员将制定的访问策略上传到区块链中;同时管理员对用户的属性进行验证,利用策略管理链码将用户属性保存在区块链上;
S4、调用资源管理链码,将资源URL储存到区块链上;
S5、用户通过区块链向资源请求访问,用户发送请求后,链码将检查相应的访问策略和用户的属性,如果用户的属性和策略匹配,则生成一个令牌发送给用户,并将令牌的哈希值保存在区块链上,以便进行权限验证;
S6、区块链记录步骤S5中的并调用信用管理链码对用户的信任值进行计算,得出的结果将储存在区块链上,并对用户的信任值属性进行更新保存。
本实施例的流程如图1,具体包括以下步骤:
搭建联盟链平台,管理员对区块链网络进行初始化,包括为该网络中的用户创建证书;
在Hyperledger Fabric平台上使用golang编写链码,包括策略管理链码、权限验证链码、信任管理链码、资源管理链码,将链码安装到区块链并进行初始化;
调用策略管理合约将属性和访问策略上传到区块链中,策略管理合约由编写的链码构成,主要包括策略管理链码;
服务请求者调用属性验证合约请求资源,属性验证合约由编写的链码构成,主要包括属性验证链码;
属性验证合约判断访问请求者时候符合访问要求,若符合则生成令牌传递给访问请求者;否则根据此次交互调用信任管理链码更新访问请求者的信任值;
资源持有者通过属性验证合约验证令牌是否正确,并计算对应的信任值。
在本实施例中,用户的属性包括主体属性、客体属性、操作属性和环境属性四个部分,主体属性(简称SA)主要包括ID、角色、组织、信任值和所属的域;客体属性(简称OA)由设备ID和设备的MAC地址组成;操作属性(简称AA)代表着主体对客体资源的权限,其由二进制数表示(0x001-读,0x010-写,0x100-执行),作为一种优选的实施方式,通过简单的与或运算来对权限进行调整,即进行主体对客体资源的权限可以同时具有一种或者一种以上;环境属性代表策略所需求的上下文条件,比如时间、位置、安全级别等。
图2给出一种用户属性的具体样例,在该样例中,主题属性包括主体ID、角色、组织以及所属域,每种属性对应一个属性值,例如角色对应工人;客体属性包括客体ID和MAC地址;该实例的操作属性的属性值为0x011,该值为0x001-读与0x010-写两个值的与或操作,表示可进行读操作、写操作;该示例中给出两个环境属性,包括介质时间和允许的IP,表示用户只能在该时间和IP地址的条件进行操作,时间是一个编码值,可以根据实际情况进行编码设置,即环境属性包括当前用户在当前时间、空间以及当前用户的安全等级下可以进行操作的条件,安全等级为用户自定义等级。
在本实施例中,在Hyperledger Fabric平台上使用golang编写的策略管理链码、属性验证链码、信任管理链码、资源管理链码,具体包括:
(一)策略管理链码
策略管理链码用于实现用户的属性认证和储存,并为系统添加基于属性的访问控制模型的访问控制策略,该链码包括以下接口:
Auth()接口:用户像管理员发送属性注册请求,管理员根据规范验证其属性,验证完成后通过该接口将用户属性储存到区块链中。
AddPolicy()接口:该接口被用来添加新的基于属性的访问控制模型的访问策略到区块链中。
UpdatePolicy()接口:该接口将使用新接收的访问控制策略对旧的进行覆盖,以达到访问控制策略更新的效果。
DeletePolicy()接口:该接口将删除储存在区块链中的访问控制策略。
QueryPolicy()接口:该接口实现了使用索引搜索目标策略的功能。
(二)属性验证链码
属性验证链码通过调用策略管理链码获得访问策略和用户属性,再通过属性验证链码中的接口验证属性和策略是否匹配,若匹配则发送令牌来代表用户的访问权限。令牌由有效时间、主体账户和客体ID、主体信任值、主体对客体操作权限组成。图3给出一个令牌的示例,在该示例中,另外包括信任等级Rep、令牌有效时间T、访问的主体账户Asubject、访问的客体账户Aobject以及主体对客体资源的权限R,其中访问的主体账户Asubject、方位的客体账户Aobject分别可以用主体、客体的ID进行表示。属性验证链码包括以下端口:
GetAttrs():该接口能够搜索储存在区块链中的用户属性,并返还对应的属性。
CheckAccess():该接口实现了访问控制管理。该端口首先调用QueryPolicy()和GetAttrs()接口获得访问控制策略和用户属性,然后逐一判断属性和策略是否匹配,若匹配则生成令牌发送给请求者,并将令牌的哈希值储存到区块链上,否则返回错误信息。并根据此次交互行为对信任值进行更新。
CheckToken():根据请求者所发过来的令牌验证其哈希值是否和链上的值匹配。并根据此次交互行为对信任值进行更新。
(三)信任管理链码
信任管理链码通过评估和计算每个节点的信任值。信任值将作为一种属性储存在区块链中,为访问控制提供更为可信的判断依据,实现动态权限控制。该链码包括以下端口:
TrustCaculate():通过储存在区块链中的节点交互行为分别计算直接信任值和推荐信任值,最后对直接和推荐信任值进行加权求和,得出来的最终信任值会作为一种属性储存在区块链上。
(四)资源管理链码
资源管理链码主要负责将资源的URL储存到区块链上,主要包括以下端口:
AddURL():以DeviceId作为键,把资源的URL储存到区块链SDB上。
GetURL():根据DeviceId从SDB中获得相应的URL。
节点通过区块链网络对资源发起访问请求,具体包括以下步骤:
S51:节点通过调用存储在区块链网络上的属性验证链码对资源发起请求;
S52:区块链上的属性管理链码收到来自节点的请求后,调用策略管理链码,以此来获得区块链上的访问策略和节点属性,并进行验证;
S53:若请求节点满足访问策略要求,则发送访问令牌给请求节点,并将令牌的哈希值储存在区块链上;
S54:请求节点发送令牌到区块链进行验证,区块链确认令牌的正确性后,将资源发送给请求节点;
区块链网络会记录节点通过区块链网络对资源发起访问请求过程中节点的访问行为,储存在区块链中。在访问结束后,区块链会调用信任管理合约计算信任值,并对节点信任属性进行更行。
本实施例把信任值计算分为直接信任值和推荐信任值两部分。直接信任值是通过发生在同一个域内的交互作用计算得到的,推荐信任值由跨域交互作用计算得到。该交互作用可能是正的,也可能是负的。积极的交互能够获得正的交互值,而消极的互动则相反。具体步骤如下:
S61:根据存储在区块链中的两个节点间的交互行为,计算出直接信任值Direct_T。
本实施例采用公式(3)来计算直接信任值。与现实中的社交互动一样,积极的互动会使信任增长,而消极的互动会使信任下降。除此之外,本实施例还认为最近的互动会比以前的互动更具有参考价值。所以,引入了一个老化函数,为最近的交互分配更高的权重。老化函数公式如下:
公式(1)中,γn-m是老化参数,其中0<γ<1;在计算直接信任值时,本实施例只选取最近的n-m次交互计算信任值,δi是交互的权重,δpos>0、δneg<0,且|δpos|<|δneg|,因此建立信任比失去信任更难。
公式(1)的输出将被输入到信任增长函数(3)中,具体公式如下:
其中,a、b和c为常数,表示的是直接信任值函数的渐近线、沿x轴的位移参数和增长率;e为自然数。
S62:再从区块链中获取节点和其他节点间的交互行为,计算出推荐信任值Recommend_T。
在某些情况下,没有足够的证据或经验来证明请求者的直接信任值,所以需要对间接信任进行评估。间接信任或是推荐信任是通过请求者和其他域中的交互历史的情况评估得到的。其中推荐域的重要性和共谋是间接信任评估中应该考虑的突出问题。间接信任值的具体计算公式如下:
其中公式(4)对请求者和其他域进行交互后的信任值进行加权求和,并取其平均值。同时,为了避免请求者通过与少数几个节点进行交互来建立欺骗性的信任值,本实施例将纳入参考的信任值个数设置为大于x个,x可以由用户自行设定;Nj为第j个其他域节点与当前节点交互过的次数;Tj为请求者与其他域的直接信任值,wj为权重,z为一个常数,本发明中出现的常数均可由用户自定义设置,本发明不对此做进一步讨论。
公式(5)是权重的计算方式,Nj为请求者与该节点的交互次数,M为在直接信任值时选取的当前用户与网络中其他节点的交互次数计算直接信任值,即公式(1)中的n-m,可以根据该值对间接信任值,这是因为在计算当前用户节点与其他域的用户节点交互情况时,如果一个用户节点比另一个用户节点与当前用户节点有更多的交互次数,且交互次数较多的用户节点是善意的,那么这个节点的推荐肯定比交互次数较少的节点的推荐更可靠。由于不同的节点有着不同的安全目标,其中所包含的资源的重要性也有所不同,推荐信任值的价值也不同。所以,给不同的节点设置不同的敏感度S(S=1,2,3,4,5),该值由用户节点自行根据实际情况选择,本发明不对此进行深入探讨。
S63:对直接信任值和推荐信任值进行加权求和得出最终信任值T,将得出的信任值对节点属性进行更新。
最终信任值计算公式如下:
T=aDirect_T+bRecommend_T (6)
其中,a是一个随着交互次数增加而增加的值,b与a相反,即b是一个随着交互次数减少而减少的值,且二者相加为1。
以上所举实施例,对本发明的目的、技术方案和优点进行了进一步的详细说明,所应理解的是,以上所举实施例仅为本发明的优选实施方式而已,并不用以限制本发明,凡在本发明的精神和原则之内对本发明所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。