基于区块链和策略分级的访问控制模型
2022-05-23王静宇
王静宇,杨 力
(内蒙古科技大学 信息工程学院,内蒙古 包头 014010)
0 引 言
在传统的访问控制方法中主要分为两种:一种是自主访问控制(discretionary access control,DAC),另外一种是强访问控制技术(mandatory access control,MAC),两者都是面向特定的非开放环境,所制定的访问控制策略粒度比较粗放,难以适应当前的数据共享的挑战。DAC是指对某个客体具有控制权的主体能够将对客体的一种访问权自主地授予其它主体,并随时可将其授予的权限收回。虽然具有灵活性、易用性与可扩展性,但其开销过大、效率低效、自主性强,不适合复杂的系统。MAC是由系统管理员制定相关的访问策略,以此来进行多层级别的访问控制操作,但由于MAC中的访问策略缺乏灵活性,导致此方法应用率过低。以目前情况分析,访问控制的方法分为两类:一类为角色访问控制[1,2](role-based access control,RBAC)模型,另一类为属性访问控制[3,4](attribute based access control,ABAC)模型,以RBAC为例,其通过用户-角色-权限进行相关的授权操作,用户通过角色聚拢的过程达到访问客体资源目的,故RBAC在一定的程度上使授权的复杂性和管理开销有所降低。由于RBAC不能根据自身属性和环境属性对用户进行动态授权,只是对用户身份进行标识,在RBAC的使用范围上有局限性。ABAC通过考虑各种不同实体属性来实现更加细粒度的数据共享与访问控制,许多研究者对ABAC模型[5-11]进行了相关研究。Jemel等[12]在区块链和密文策略属性加密基础上,提出一种通过广播交易将带有时间属性的访问控制发布到区块链。只有在特定时间内,用户属性满足访问策略请求者才能获得解密密钥,但该方案难以实时部署众多的访问策略,易被恶意节点攻击。Ouaddah等[13]提出方案中将策略存储在区块链交易中,并引入比特币钱包概念,为不同的物联网设备配置自己的钱包,并授权令牌的形式进行权限管理,令牌通过资源拥有者的私钥签名来保证其不可伪造。Maesa DDF等[14]利用区块链实现一种基于属性的访问控制方案,该方案通过策略创建交易和权限转移交易实现策略的创建、更新和撤销,但该方案需要的算力运行开销较大。
综上所述,对于现有技术中存在的不足,本文以ABAC模型为基础,结合区块链技术和策略分级,提出了基于区块链和策略分级的访问控制模型(ABAC based on blockchain and policy grading,BP-ABAC)。本方案将访问控制策略和智能合约相结合,在合约中进行策略分级。对数据请求者进行等级评估,通过用户等级评估结果获得相应的策略集的访问权限。区块作为一种去中心化、分布式策略存储系统。通过这两者结合使得该方案具有良好的查询效率、动态性、安全性。
1 预备知识
1.1 ABAC模型及相关定义
与基于角色的访问控制(RBAC)不同的是,基于属性的访问控制(ABAC)是通过实体属性而不是用户身份来判决允许或拒绝用户对资源的访问控制请求。ABAC的突出优点是它具备强大的表达能力。具体表现在3个方面:聚合度高、灵活性高、可扩展性高。模型中主要有主体属性、客体属性、操作属性、环境属性四大核心属性。在ABAC模型中,主体和客体都是通过各自的属性集来描述的,而属性集是用属性和对应的属性值来表示。如图1所示。
图1 ABAC授权模型
以下为其进行形式化定义:
定义1 属性项:用 {AttrName=AttrValue} 表示,AttrName表示属性名,AttrName表示属性值,引用前缀 (S,O,E,P) 区分实体属性类型
定义2 属性访问请求(attribute access request,AAR):其含义是访问时,主体属性(SA)在环境属性(EA)下对资源客体属性(OA)进行操作,即: AAR={sattr,oattr,eattr,pattr}。
定义3 访问控制策略(Policy):根据访问请求相关属性预先设定的访问判定规则,判定结果主要为允许(Permit)、拒绝(Refuse)、未知(Unknow)3种状态。
结合当前的系统的复杂性和实时变化的特征,需要对细粒度访问控制进行优化,同时更好应对大规模的用户扩展机制问题。在访问控制策略描述、模型设计和完成授权机制3个方面都对主体、客体、环境、和操作属性统一建模形成实体属性(组)的概念。以此对授权和访问控制约束进行描述,使其拥有良好的灵活性和可扩展性。
1.2 区块链技术
区块链系统架构是由数据层、网络层、共识层、激励层、合约层和应用层组成。区块链技术是将P2P网络技术、密码学技术、共识机制、智能合约等多种技术结合而形成的链式数据结构,如图2所示。本质上区块链是一种去中心化的、分布式的共享账本和数据库。数据区块根据时间戳的先后顺序以链条的形式链接起来形成特定的数据结构。整个系统没有明确中心节点,任何节点都可以参与和获得完整的数据副本并存储,实现了去中心化的数据管理方式。通过所有参与节点维护和保证数据链条不断增加,以及非集中式的共识机制来实现事物的持久性,并保证数据的可信性和安全性。区块分为区块头和区块体,区块头中封装了快高度、时间戳、Merkle树、块哈希、前一个块的哈希值等。基于以上特特征,区块链具有以下性质:去中心化、不可篡改、集体维护等。
图2 区块链基础构架
1.3 智能合约
智能合约(Smart Contract),定义为:智能合约是将合约内容以数字方式的实现承诺,包括合约参与方可按照合约规定内容执行承诺的协议[15]。其存储在区块链上,是能够在每个分布式网络节点上自动运行的脚本。只要满足合同协议条款,交易不需要第三方信任平台监督,按顺序触发设定的合约内容并完成一系列安全的自动化操作,执行相关条款。将智能合约以数字化的形式写入区块链中,可以避免恶意行为对合约正常执行的干扰。结合区块链的共识算法构建的状态机系统,不但保证合约在存储、读取和执行的过程中状态机制透明、可追踪和不可篡改的特性,也可以使智能合约保持高效运行。
2 基于区块链和策略分级的访问控制模型
2.1 BP-ABAC总体框架及流程
本方案提出的基于区块链和策略分级的访问控制框架,如图3所示。在传统的ABAC模型基础上与区块链和智能合约相结合,以及在用户等级和策略分级的前提下对数据资源进行访问控制。前期根据属性收集和属性间关系对区块链事务中访问控制策略进行描述、整合和管理。包括对访问控制策略的发布、更新、撤销的管理。同时将相关策略集和用户等级权限以智能合约的方式发布到区块链上。
图中模块均使用区块链中的智能合约的方式来实现,功能模块解释如下:
(1)策略信息点(policy information point,PIP):获取资源请求者(Subject)、资源及资源发布者(Object)等相关实体属性,并上传资源的访问控制权限。
(2)策略管理点(policy administration point,PAP):负责对资源拥有者发布的策略及整个策略集的管理和维护。
(3)策略决策点(policy decision point,PDP):根据Subject的等级确定其是否有相关的访问权限,同时根据Subject的实体属性和资源的访问控制策略及系统当前的状态做出授权决定。
(4)策略执行点(policy enforcement point,PEP):负责接收资源请求者的访问请求,并结合实体属性生成AAR。接受策略决策点对资源请求者的决策,并执行PDP的决策,允许或拒绝访问。
图3 BP-ABAC框架
BP-ABAC访问控制流程步骤描述如下:
(1)当PEP模块收到资源请求者发来的访问请求,分析后根据访问请求中的实体属性以及从AA中得到的属性信息生成AAR,并将AAR发送给PDP模块。
(2)PDP模块收到AAR后通过智能合约发起策略信息查询,请求判断资源请求者用户是否合法。若不合法,则此次访问请求终止。
(3)若合法,获取该用户的等级权限,以此作为向PIP模块发起获取资源请求者的属性信息的请求,向PAP模块发起获取该资源的访问控制策略的请求。根据用户等级匹配相应访问控制策略集,若同等级的策略集无法匹配成功,则获取下一等级的策略集进行策略匹配。
(4)PDP模块使该资源的访问控制策略属性与资源请求者的属性信息进行对比判决,将判决结果发送给PEP模块。
(5)资源请求者根据PEP的判决结果对数据资源进行相关的授权操作。
2.2 BP-ABAC智能合约设计
基于区块链的智能合约包括合约参与者、合约资源集合、自动状态机、合约事务集合4部分组成。将数据信息以事件的形式进行描述,发送的数据则是相对应的事务。整个事务的保存和自身状态的处理都需要在区块链进行。当事务以及相关的事件数据信息传入智能合约后,合约中的资源会进行状态更新处理,以此触发智能合约的状态判断机制。假如自动状态机能满足某些指令的触发条件,状态机则会根据先前预设的信息选择对应的合约指令执行。
合约参与者模块:
AddUser()函数:主要在智能合约中添加用户的身份属性,并将用户信息传送到区块链上保存。以便后面PIP合约对用户属性进行调用。
DeleteUser()函数:因某种原因需要撤销该用户的访问控制权限或完全删除用户。则通过该函数在区块链中删除对应的用户属性。
合约资源集合模块:
AddResource()函数:由资源拥有者发送与共享数据相关的访问控制权限,通过此函数将访问控制策略存入区块链中,当智能合约触发时,以供PAP传送访问客体资源时需要的策略信息。函数伪代码如算法1所示。
DeleteResource()函数:出于某种因素,资源拥有者想收回共享数据的访问控制权限,通过此函数可以将区块链中的相关数据信息删除,完成共享权限策略的撤销。
算法1: AddResource()函数算法
INPUT: ResourceName,ResourceId,Action,SubjectId
OUTPUT: Add resource success/failed
(1)if input==null
(2) return error
(3)end if
(4)err=ARIstub.GetState(ResourceId)
(5)if err!=nil
(6) return resource not exist
(7)end if
(8)ResourceBytes=json.Marshal(resource)
(9)err=ARIstub.PutState(ResourceId,ResourceBytes)
(10)if err=nil
(11) return Add resource success
(12)else if
(13) return Add resource failed
(14)end if
自动状态机模块:
自动状态机能够根据控制协议产生控制信号,使其按照预先设定的状态进行状态转移,进而完成特定操作的控制中心。状态机触发过程如图4所示:
图4 智能合约的状态机触发过程
JudgeLevel()函数:首先检查此次访问是否合法。其次,结合实体属性对资源请求者的用户等级进行判定,根据结果触发状态机,查询匹配相应等级的策略或者策略集。
PolicySet()函数:负责提供访问控制时所需要的属性信息和为共享数据设置访问控制策略,为后面Compare-Policy()函数提供属性和策略。
合约事务集集合模块:
ComparePolicy()函数:主要负责将资源请求者的实体属性信息与资源发布者的访问控制策略的实体属性信息进行一个对比,通过判断两者的相同性来决定资源请求者是否能获得该客体资源的访问控制权限。函数伪代码如算法2所示。
GetPermission()函数:主要根据PDP合约中的ComparePolicy()函数返回的结果,将客体资源的访问权限授予资源请求者,同时将此次“交易”上传到区块链。
ExecuteRequest()函数:当资源请求者根据PEP合约中的GetPermission()函数返回的结果,来对资源客体执行相关访问操作(Permit、Refuse、Unkonw)
算法2: ComparePolicy()函数算法
INPUT: PolicySet()函数提供的属性、 策略参数
OUTPUT: allowAccess,AccessTime
(1)if input==null
(2) return error
(3)end if
(4)resultIterator=ARIstub.GetHistoryForKey(ResourceId)
(5)for resultIterator.next do
(6) querySet= resultIterator.Next()
(7) Json.unmarshel(querySet.value,&plo)
(8) policy_set=pol
(9)end for
(10)AllowAccess=false
(11)for j=0;j (12) if input∈policy_set[j] (13) AllowAccess=true (14) Access.Time=policy_set[j].AccessTime (15) break (16)end for (17)return AllowAccess,AccessTime 每条策略对于不同的实体属性拥有不同的可信值,可信值会受到访问请求和系统交互行为的影响。当访问请求对客体资源进行正常或者恶意访问时,对应的策略的可信值会进行提升或者降低。当策略的可信值提高或者降低到一定数值时,会映射到不同的可信等级。每条策略的可信值根据初始可信值和历史可信值得出最终可信值,以其作为策略可信等级的映射依据。 每次当策略拥有者发布访问控制策略,系统都会根据该策略的主体属性和环境安全的关联度R(s,e), 客体属性和环境安全的关联度R(o,e), 操作行为和环境安全关联度R(a,e) 进行加权计算,得出该策略的初始可信值 (1) 当访问控制策略第一次进行授权时,会产生首个历史可信值。随着后面的策略访问授权的次数增加,策略的历史可信值则需要根据时间片的改变而变化 (2) 由初始可信值和历史可信值得出最终可信值 FinalT(u)=a*CurrentT(u)+b*HistoryT(u) (3) 其中,a表示初始可信值的权重,b表示历史可信值的权重,且两者满足a+b=1的关系。在最终可信值计算中,CurrentT(u)比HistoryT(u)更具有参考价值,故a>b。根据策略FinalT(u)的值可以通过映射得到相应的策略可信等级。最终可信值与可信等级映射见表1。 表1 可信值与可信等级映射 根据实际情况,本方案将可信值划分为5个区间,对应策略等级划分为5个可信等级,访问控制策略根据可信值计算可以归为以上5类,不同的可信等级包含不同的策略集。资源访问者可以根据可信等级匹配相应的策略,获得到访问授权。资源访问者的用户等级评判与策略可信值计算类似,在这里就不做过多的阐述。 为测试基于区块链和策略分级的访问控制策略检索的效率问题,在配置为I7-8700处理器、16 G内存的Windows10系统下利用JAVA语言描述智能合约,本文根据XACML提供的标准策略测试包进行测试。其中由全部属性构成的访问请求AAR形成关联属性集:Attr_SetAAR, 由访问控制策略中的属性形成的关联属性集:Attr_SetPolicy。 当Attr_SetAAR与Attr_SetPolicy属性集相符合,则ExecuteRequest()函数会执行Permit授权操作,倘若Attr_SetAAR与Attr_SetPolicy属性集不相符合,则会返回Refuse或Unkonw,表示拒绝此次访问或访问请求不完整无法进行相关的授权操作。 在不同策略规模下,分别对传统检索方法、文献[4]、文献[16]及本文的检索方法进行了测试。策略规模为100、200、400、600、800、1000条共6组单一测试集样本。每一级别的策略规模实验6次且取6次实验的平均值。实验结果中,不同曲线代表不同的检索方法在不同的策略规模下的查询效率。策略查询对比如图5所示。 图5 策略查询对比 由图5对比可知,随着策略规模的扩大,传统访问控制和文献[4]以及文献[16]与本方案的查询效率有逐步扩大的趋势。通过6次取值的平均值计算,本方案与传统的访问控制相比,查询效率提高了大约44.32%的查询时间。与文献[4]相比,本方案提高了16.88%的查询时间。与文献[16]相比,本方案大概提高了10.34%。所以在一般情况下,本方案与以上3种方法在查询效率上有明显的优势。 随着策略规模的扩大,策略判决结果的正确性是一个值得关注的问题。由于策略规模增加,致使策略间的发生冲突的概率上升。针对此类问题,本文目前还未对策略冲突处理方案进行引入,将在后续部分的工作中对此类问题进行研究和完善。所以图6只将本方案和传统访问控制的判决结果成功率作对比。由图中对比显示两者准确率的差值在可控范围内。如图6所示。 图6 策略判决成功率对比 基于区块链的主要挑战是共识机制受到安全威胁,为了对区块链本身的抗攻击性进行分析,主要以共识机制的工作量证明机制(Proof of Work)为主,来分析区块链的面临的安全问题,根据文献[17]提出的攻击模型对此进行分析。可信节点产生的可信链与恶意节点产生的攻击链,两者之间存在一种相互竞争的关系。可以用二叉树随机漫步过程对此竞争关系进行描述。在相比之下,当可信节点产生的可信链居多时,可信链条加一个区块;否则,恶意节点的攻击链加一个区块。要想使区块链受到安全威胁,则需要恶意节点产生的攻击链的长度大于可信节点产生的可信链。而恶意节点要追赶z个区块差概率性问题类似于赌徒破产问题。故而,恶意节点成功追赶z个区块链的概率为 (4) 其中,p为可信节点获得下一个记账权的概率,q为恶意节点获得下一个区块记账权的概率,qz为恶意节点成功追赶z个区块差的概率,z值越大成功的概率越低。假设可信节点产生一个区块的时间为预期的平均耗时,则恶意节点潜在区块追赶进度符合泊松分布的数学规律,其期望值为 λ=z*q/p (5) 为得出恶意节点攻击区块链成功的概率,即恶意节点产的攻击链超过可信节点的区块链长度。将恶意节点生成的区块长度的泊松分布概率密度、该时刻恶意节点能够成功可信节点可信链的概率,两者相乘得pα为 (6) 恶意节点与可信节点的区块差,恶意节点篡改区块成功的概率,两者关系如图7所示。 图7 攻击成功的概率 由图7分析可知,当区块差取一定值时,恶意节点成功篡改区块的概率会随着算力的提升而效率得到显著提高。当q小于0.5时,区块差值与恶意节点篡改区块的概率成反比。只有当恶意节点q大于或等于0.5才能获得下一区块的记账权,把握区块链数据的整体趋势。而掌握区块链的50%以上的算力控制时需要高昂的成本,攻击难以取得成功。故区块链在访问控制过程中能取得良好的安全性。 本文提出的BP-ABAC模型是以基于属性的访问控制(ABAC)为基础,通过区块链和策略分级的结合,使访问控制过程更加灵活和安全,与传统的访问控制模型相比之下,该模型具有以下优点: 策略及访问过程上:与传统访问控制相比,该模型不需要建立中心数据库节点来存储策略,依托区块链的特性使得策略具有更高的防篡改性。资源拥有者发布的访问控制策略都会由全网节点共同表决分级。策略匹配时只需查询相应分级策略,增强了授权的灵活性,同时保证了策略更新和访问记录的一致性。 约束性上:每次资源请求者访问时,都会对用户进行评估,只有当满足触发状态集的条件时,才会转换当前访问控制的状态。通过对访问控制过程状态进行监控,当访问控制完成后,会重新对策略进行评估分级。与传统模型相比,增加了约束,对约束性的加强可以减少非法访问的隐患。 决策形式上:传统的访问控制模型大多采用集中式第三方信任平台进行决策,整个访问控制过程的安全性依赖第三方的可靠性。将访问控制策略上传到区块链上,有效遏制了访问者的越权操作,攻击者需要控制超过一半以上的网络节点才可能对决策行为产生影响,避免了中心节点被破坏而导致访问控制过程错误授权或瘫痪的情况。 本方案提出了一种以ABAC模型为基础的BP-ABAC模型,利用区块链的去中心化、不可篡改等特性,摆脱了传统的第三方信任机制的限制,提高了访问控制的可靠性、安全性以及判决的透明性。智能合约的引用,实现了整个访问控制授权过程自动化,使访问控制模型更加灵活。通过用户等级评判和策略分级,保证了资源请求者合法性,防止了过度授权和越权访问的发生。能够有效为主体授权,实现数据共享,保证访问控制过程安全。 在接下来的研究中将会就属性加密技术对区块链中的交易隐私数据进行加密,实现对区块链中交易敏感数据信息的隐私保护机制。解决数据完全公开所带来的隐私泄露安全问题。2.3 策略分级设计
3 实验仿真和安全性分析
3.1 仿真实验分析
3.2 安全性分析
4 结束语