田秀霞,杨明夷
(上海电力大学 计算机科学与技术学院,上海 201306)
随着物联网(Internet of Things,IoT)技术的日益成熟[1-2],越来越多的居民选择在家中安装入侵报警器、远程监控等家庭物联网设备,这使得家庭物联网数据呈爆炸式增长趋势。根据Statista 的预测,到2025年,全球出货的家庭智能设备数量将达到4.819亿台。通过物联网中的智能家居设备[3-4],将采集到的用户姓名、联系地址、联系方式等相关数据自动提交给电网公司,电网公司再传到数据库进行保存,并与政府机关(如疫情防控应急管理部门、公安机关等)共享家庭数据。由于目前需要存储并处理海量的家庭数据,居民用户和电网公司对数据安全存储和高效查询的需求越来越大。电网公司需要通过随时随地按需使用数据库中的资源信息,并将其安全高效地共享给政府机关或公共服务部门,以此在家庭物联网中为居民建立一个安全可靠的生活环境。然而,家庭物联网对未经授权访问的漏洞会使居民的财产和安全处于危险之中[5-6]。2020 年12 月,英国能源供应商People's Energy 发生重大数据泄露事件,整个数据库被黑客窃取,使所有270 000 名客户的信息被盗取,包括用户姓名、联系地址、出生日期、电话号码、关税和电表ID。因此,如何设计安全高效的访问控制机制来确保家庭数据的安全共享是国内外相关学者需要考虑的重要问题[7-8]。
目前,研究人员已经提出了多种面向家庭物联网数据安全性的访问控制方案。文献[9]提出一种基于区块链的分布式访问控制方案,其创建一个智能合约来定义管理系统的策略规则,以实时对设备提供访问控制信息,同时帮助物联网建立一个去中心化、可信且可公开验证的数据库,使得亿万互联的事物实现分布式信任。但是,对于家庭物联网中的海量数据,该系统维护难度极大,电网公司难以承受其巨大的系统开销。为了能够处理家庭中的动态数据,文献[10]提出基于以太坊的数据共享和访问控制系统,其设计多个智能合约来对网络用户进行高效、安全、授权和基于信任的访问管理。该系统虽然支持高效的数据共享,但是每执行一个命令都要消耗Gas(交易费),这将造成较大的开销,因此并不能满足居民用户和电网公司的需求。
本文提出一种基于Hyperledger Fabric 的家庭物联网访问控制机制ACHF(Access Control Mechanism Based on Hyperledger Fabric for Home IoT)。以基于属性的访问控制(Attribute-Based Access Control,ABAC)模型为基础并进行改进,使用统一的可扩展访问控制标记语言(eXtensible Access Control Markup Language,XACML)标准来描述家庭物联网环境下的访问控制策略,同时设计分组策略检索算法以提高策略的检索效率,最后基于智能家居实例,对ACHF 的可追溯性、自主性、细粒度检索、高效动态访问等方面进行分析与评估。
区块链技术是比特币等现代加密货币系统的核心[11],其本质上是P2P 网络管理的分布式数据库,网络中所有的对等节点需要维护相同的区块链副本,并同步更新区块链。尽管区块链最初是作为分布式数据库而开发的,但是由于出现了一种称为智能合约的新功能,因此目前已发展为一个分布式计算平台,这种新型区块链最具代表性的实现是超级账本[12-13]。与公有区块链相比,Hyperledger Fabric 作为联盟链,能执行更高效且低成本的共识算法。
在Hyperledger Fabric 中,将数据以事务的形式打包成区块并存放在区块链中,该区块格式如图1 所示,其中,B 表示区块链账本,区块B1 包括区块头部H1、区块数据D1 和区块元数据M1。H1 由区块数量、当前区块和前一区块的哈希值组成。M1 包括创建区块的时间以及客户端的身份证书、公钥和签名。D1 包括创建区块时的交易。例如,交易T3包括交易头H3、签名S3、交易提案P3,交易提案返回R3 和背书E3。H3 中包括链码的名称、版本等重要数据。S3 包括由客户端创建并由用户私钥生成的加密签名。P3 包括客户端发起交易的请求参数。R3 包括背书节点返回的读写集,该数据集合作为模拟提案的结果,如果交易验证通过,这些数据会被用于更新世界状态。E3 是指交易的背书,通常返回一次会对应多个背书。
图1 区块结构Fig.1 Block structure
区块链中的智能合约是一个可执行程序,与交易一样存储在区块链上。智能合约使用变量作为其状态和函数,称为应用程序二进制接口(Application Binary Interface,ABI),用于查看和更改状态[14]。要执行智能合约,需要发送事务并将其广播到P2P 网络。所有接收此交易的对等节点将执行合约内容,以确保执行结果的有效性。因此,通过智能合约功能,区块链技术可以进一步实现分布式和防篡改计算。
为了解决家庭物联网中的访问控制问题,文献[15]采用类似比特币的区块链来设计基于访问控制列表(Access Control Lists,ACL)的访问控制方案。在每个家庭中应用区块链来维护ACL,其中,每个条目对应一个内部或外部主体、一个内部资源以及被允许的访问权限。每个家庭内部的访问控制由内部矿工执行,该矿工充当网关接收来自主体的访问请求。然而,矿工的存在导致每个家庭内部的集中访问控制,这会带来单点故障问题。为此,文献[16]通过应用以太坊智能合约存储ACL,并提出一个基于ACL 的访问控制框架,在该框架中,每个主体-资源对使用一个智能合约来实现相关的访问控制。当访问资源时,主体发送一个包含所需访问信息的事务,以执行相应的智能合约,最后自动向主体和资源返回结果(允许或拒绝)。然而,由于一个合约只负责一个主体-资源对的访问控制,因此该方案在部署合约时会存在巨大的金钱成本,特别是在大规模家庭物联网中,系统开销更大。为解决该问题,文献[17]设计一个基于角色的访问控制(Role-Based Access Control,RBAC)方案,其部署一个智能合约来维护RBAC 模型中分配给每个用户的角色,以便任何服务提供商都可以在提供服务时验证用户对角色的所有权。但是,在用户和资源数量巨大的家庭物联网环境下,该系统的维护难度将大幅提高。
文献[18]提出ABAC 方案,其中,ABAC 策略的统一资源定位器(Uniform Resource Locator,URL)链接存储在区块链上,并部署一个智能合约接收主体的访问请求,然后执行访问控制。但是,该方案的主要局限性在于将策略和属性存储在外部数据库中,这使得信息容易受到篡改攻击,无法保证策略和属性的可信度,此外,该文没有提供实现,因此方案的可行性未知。文献[19]对文献[18]方案进行改进,提出一个基于智能合约的框架,该框架由多个访问控制合约、一个注册合约和一个判决合约组成,以实现物联网系统的分布式访问控制,并通过以太坊平台进行案例研究以演示该框架的应用。
虽然以太坊的部署较为简单,但其扩展性较差,智能合约必须使用固定的、非标准的或特定领域的语言编写,并需要借助货币奖励矿工来防止攻击,而超级账本无须借助代币,其低成本的优势更适合应用于企业间的业务。因此,文献[20]提出一个基于Hyperledger Fabric 许可链的ABAC 框架,但是其只将属性信息存储在区块链上,没有使用智能合约来处理访问请求。于是,文献[21]对文献[20]框架进行改进,在Hyperledger Fabric 平台上使用3 个智能合约(分别为设备合约、策略合约和访问合约)来进行实现,但是,其没有给出事务的数据格式与工作流程,且策略的检索效率较低。
综上,目前针对家庭物联网中的访问控制研究仍处于起步阶段,需要在访问控制的效率和动态细粒度检索方面进行改进。本文通过在Hyperledger Fabric 联盟链上设计3 个智能合约来实现ABAC 模型,并构造一种分组策略检索算法来缩短策略检索的时间,同时给出事务的数据格式与工作流程。
本文设计的访问控制机制体系架构如图2 所示,该系统架构可分为3 层,从左往右分别为数据层、服务层、应用层。
图2 系统架构Fig.2 System architecture
各层信息具体如下:
1)数据层。将分布式存储在不同地理位置上的数据资源以事务的形式存储在区块链上,该数据包括属性信息、属性间的关系、访问控制策略、智能合约、资源URL 等信息。
2)服务层。服务层由单个组件组成,这些组件共同处理数据层中的数据访问请求,同时对请求的数据和标记的数据执行计算,并实时监控对数据执行的每个操作,然后将所有的操作结果都广播到一个区块链网络中,使其不可被修改,以保证公平地审计。此外,该层负责验证访问资源过程中的每一个请求和操作。服务层包括以下模块:
(1)验证机制。许可链中的可信机构MSP 负责维护系统中所有节点的身份,颁发用于身份验证和授权的节点凭据,默认实现基于数字签名认证的标准PKI 方法,并在确认了平台许可的参与者身份后将其加入区块链网络中。
(2)共识机制。通过共识算法,使区块链系统中所有的参与者和节点间的各种数据达成一致,从而保证区块链的可信度。
(3)智能合约。在区块链中使用智能合约技术取代传统ABAC 访问控制模块进行逻辑操作,包括3 种合约:策略信息合约用于查询实体属性信息和属性间的关系;策略管理合约用于管理访问控制策略,并对策略规则进行编码和分组;策略判决合约用于判决访问控制请求。
(4)区块链网络。许可区块链Hyperledger Fabric是一个分布式操作系统,用于执行由通用编程语言(如Go、Java、Node.js)编写的分布式应用程序,且仅在复制的账本数据结构中安全地追踪溯源其历史操作记录,并不使用加密货币。
3)应用层。为不同类型的用户提供相应的功能,如查询操作,事务的创建、更新、撤销操作等。
本文对传统ABAC 模型进行改进[22],将访问控制技术与区块链技术相结合,提出一种ACHF 框架,如图3 所示,该框架包括策略执行点(Policy Enforcement Point,PEP)客户端、策略管理点(Policy Administration Point,PAP)合约、策略判决点(Policy Decision Point,PDP)合约、策略信息点(Policy Information Point,PIP)合约。
图3 ACHF 框架Fig.3 ACHF framework
图3 中的虚线部分是进行访问请求前的准备操作,具体如下:
1)PIP 合约负责存储从云端服务器接收到的设备资源URL,并管理区块链事务中的属性信息,使得PAP合约与PDP 合约可以进行属性和资源信息查询。
2)PAP 合约需要管理访问控制策略信息、对策略集中的每条规则使用二进制位进行编码,并完成哈希加密。
图3 中的实线部分是判断访问请求时的执行操作,具体如下:
1)当PEP 客户端收到用户提交的访问请求时,先通过PIP 合约解析属性数据字段,生成基于属性的访问控制请求,再将其发送给PDP 合约。如果资源请求者不希望公开请求,则PEP 客户端会使用资源拥有者的公钥对该请求进行加密。
2)PDP 合约会根据收到的基于属性的访问控制请求,自动生成一个二进制编码,并用sha256 进行加密得到一个哈希值,然后通过PAP 合约进行策略信息查询,对查询结果做一个判决,同时用资源请求者的公钥对判决结果与资源URL 进行加密。
3)PDP 合约将加密后的判决结果(允许或拒绝访问)和URL 地址返回给PEP 客户端,PEP 客户端会根据判决结果来决定是否同意用户的访问请求。
为了便于叙述,给出如下定义:
定义1属性(Attr)是具有指定数据类型和值域的变量,本文使用xAttr,x∈{Sub,Res,Ac,En}分别表示主体属性、资源属性、操作属性和环境属性。用xAttrValue,x∈{Sub,Res,Ac,En}分别表示主体、资源、操作和环境的属性值范围。用xAttrSet,x∈{Sub,Res,Ac,En}分别表示主体、资源、操作和环境的属性集。用xAttrTuple,x∈{Sub,Res,Ac,En}表示属性名和属性值之间的关系,分别表示主体、资源、操作和环境的属性名值对。用xAttrTupleSet,x∈{Sub,Res,Ac,En}分别表示主体、资源、操作和环境的属性名值对集合。
定义2访问控制策略包括对资源进行特定操作所需要的属性集合,用三元组Policy←
定义3基于属性的访问请求(AAR)由一组主体、资源、操作和环境的属性名值对集合构成,用四元组表示为AAR=
3.1.1 事务的数据格式
本文在区块链中以事务的形式执行访问控制策略,该事务的数据格式如图4 所示。其中:clientID 表示事务发布者的编号;chaincodeID 表示事务调用的智能合约编号;publicKey 表示事务发布者的公钥;txType 表示事务类型,包括属性事务attrTx、策略事务policyTx;txPayLoad 表示事务的具体数据,包括属性事务数据attrData、策略事务哈希txHash 及相应的URL;operType 表示操作类型,包括创建、撤销和更新;timestamp 表示创建事务的时间戳;clientSig 表示发布者对事务数据的签名。
图4 事务的数据格式Fig.4 Data format of transaction
在区块链中,无论对策略事务执行哪类操作以及执行多少次,该操作的历史记录都将永远保留在链中,不可被修改,以便日后审计能掌握整个访问控制动态,并验证PIP、PAP 和PDP 合约是否完全按照访问控制策略对资源进行授权访问,从而杜绝错误授权或过度授权的问题。
3.1.2 事务的工作流程
如图5所示,对等节点接收事务的工作过程可分为4个阶段:提交交易预案;背书节点处理并返回响应结果;发送结果给排序节点进行处理;交易提交并更新账本。
图5 事务的工作流程Fig.5 Workflow of transaction
事务工作流程中的4 个阶段具体如下:
1)提交交易预案。客户端按照图4 的数据格式发起一个事务交易tx=
2)背书节点处理并返回响应结果。背书节点收到tx 后,先验证clientSig 是否合法,再评估签名者是否有权参与此次交易。若两者均合法,背书节点会通过执行chaincodeID 对应的链码来进行模拟提案。然后,每个背书节点都会生成一个读写集Read/Write_Set,作为该提案的模拟执行结果,并将签名EndorSig 一并发回客户端。
3)发送结果给排序节点进行处理。客户端收到背书响应Response=
4)交易提交并更新账本。排序节点会自动将背书广播给通道中的所有成员,包括记账节点CP1 以及背书节点EP1、EP2 和EP3,从而建立交易共识。所有节点收到交易数据块后,先检查tx 和EndorSig的合法性,然后判断背书数量是否符合背书策略的条件,再校验交易的Read/Write_Set 与当前账本是否一致。如果结果一致,则表示交易的写入集是有效的,将其更新到状态数据库中,同时触发一个事件通知客户端其发起的交易已被写入区块链中。
通过以上流程,将数据以事务的形式存储在Hyperledger Fabric 许可链中,使其具有可追溯性、透明性和可靠性。
目前对基于XACML 访问控制策略的评估需要遍历所有策略才能做出判断,因此,为了提高策略的检索效率,本文设计二进制编码和哈希算法,构造一种分组策略检索算法。将ABAC 模型中所有属性的个数作为二进制编码的总位数N,每位取值为0 或1,其中,0 表示不包含该属性,1 表示含有该属性。因此,策略集中的每条规则均可以表示为二进制编码的形式,并将该编码作为组号使用,具有相同组号的规则合并成一组。
策略集的分组如图6 所示,根节点表示策略集的所有规则信息RuleSet,每条规则R中又有若干个属性。除第一级的根节点外,每个节点都表示一个组,若策略集中的某条规则不包含第一个属性,则暂时并入组号为011…111 的组中,再依次判断后面的属性是否存在,最终确定该规则的二进制编码,即组号。具有相同二进制编码的规则位于同一组中,规则组的数量由策略的复杂性决定,最多可分为2N-1 组。
图6 策略集分组Fig.6 Policy set grouping
通过对ABAC 策略规则进行二进制编码将其分为多个组,可以在搜索策略时过滤掉大量不相关的策略,从而缩短策略检索的时间。但是,在规则组中检索时,需要将所有规则的每个属性值xAttrTuple(x∈{Sub,Res,Ac,En})依次与AAR 的属性值进行匹配,检索时最坏的情况是每次检测到规则的最后一个属性时发现不匹配,如果此类规则太多,则检索策略的效率较低。因此,本文对访问控制策略的4 个属性ID 进行sha256 的哈希加密,在找到匹配的规则组后,只需比较访问请求和访问控制策略的哈希值,以此来减少策略检索的时间。
对于本文分组策略检索算法,作如下定义:
定义4(二进制编码规则)将所有属性按照特定的顺序排列,属性中包含的属性值也需要按照特定的顺序排列,形成一个大的属性数组。如果规则中出现了特定的属性,则相应的位置设为1。
定义5(群组选择原则)对基于属性的访问控制请求AAR 执行二进制编码,并将其与规则组的组号进行逻辑或操作。若计算结果与AAR 的二进制编码一致,则为合适规则组。
定义6(规则选择原则)将AAR 的哈希值与策略规则的哈希值进行比较,如果结果相等,则该规则满足要求。
本文所提机制使用智能合约技术,为系统提供相关属性查询及策略管理或判决服务。其中,PIP 合约提供资源URL 以及属性信息查询,PAP 合约提供策略信息管理,并对策略规则进行编码和哈希运算,PDP 合约提供策略判决服务。
3.3.1 策略信息点PIP 合约
传统ABAC 模型中的策略信息点PIP 只负责提供实体的属性信息,本文为了确保属性间关系的可信度,将属性信息和属性间的关系都以事务的形式存储在区块链中,同时PIP 还负责管理资源URL 地址,并分别为PAP 和PDP 提供属性信息和资源地址的查询服务。PIP 合约的伪代码如算法1 所示。
算法1策略信息合约PIP
3.3.2 策略管理点PAP 合约
传统ABAC 模型中的策略管理点PAP 只负责管理访问控制策略规则,本文为了确保策略的共享性和可信度,不仅使用标准XACML 体系结构细粒度地描述访问控制策略,并按上述的数据格式封装后存储在区块链中,同时还为PDP 提供策略集中每条规则的二进制编码和哈希值。
PAP 合约的伪代码如算法2 所示,其中,管理访问控制策略这一功能包含4 个ABI,分别为添加策略AddPolicy()、查询策略QueryPolicy()、更新策略UpdatePolicy()和删除策略DeletePolicy(),其功能代码与管理URL 地址相类似,此处不做赘述。
算法2策略管理合约 PAP
3.3.3 策略判决点PDP 合约
传统ABAC 模型中的策略判定点PDP 只负责对访问控制策略进行判决,本文结合所设计的分组策略检索算法,策略判决点PDP 合约具体流程为:首先,PDP 会根据收到的AAR 自动生成一个二进制编码,并用sha256 加密得到一个哈希值;然后,将AAR的二进制编码与规则组的组号做“或运算”,找到与其结果相同的规则组,再依次比较规则组中策略的哈希值。当返回结果均不为空时,调用PAP 的QueryPolicy()ABI,判断访问请求的环境属性是否满足要求,即申请访问时生成的时间戳的值不能大于策略规则中的截止时间,以此来解决一次授权多次访问的问题。如果所有属性均符合策略,则验证通过,最后调用PIP 的GetURL()ABI 获取资源URL并返回给用户,否则,返回相应的报错信息。PDP 合约的伪代码如算法3 所示。
算法3策略判决合约 PDP
本文结合智能家居场景提供一个具体的案例分析。首先介绍实验环境配置,然后详细阐述访问实现的具体流程,最后对本文机制进行评估,并将其与其他相关方案作比较,以此来分析该机制在家庭物联网环境下的性能优势。
本文实验在两台PC 机上进行,硬件(上半部分)和软件(下半部分)环境配置如表1 所示。
表1 实验环境Table 1 Experimental environment
在家庭物联网中,每个参与者都处于不同的地理位置,并且具有互惠互利的关系,这使得每个参与者要时时共享数据来获取所需的信息,但是,参与者在链中的角色不同,导致无法共享所有的数据。因此,每个参与者应根据自身的安全需求来制定相应的访问控制策略。同时,智能家居数据具有一定的普遍性,并且包含大量具有相同属性的主体和资源信息,本文所设计的机制适用于此类场景。如图7所示,电网公司C、普通用户U 和政府机关G 将属性信息和访问控制策略存放在共同维护的区块链中。
图7 区块链中参与者的关系Fig.7 Relationship of participants in the blockchain
电网公司C、普通用户U 和政府机关G 都能在Hyperledger Fabric 平台上通过各自的终端设备请求服务,因此,可以构造相关的属性信息。在本例中,定义属性顺序为:主体属性SubAttr 包括1~3 号属性项;资源属性ResAttr包括4~6 号属性项;操作属性AcAttr包括7~8 号属性项;环境属性EnAttr 包括9~12 号属性项,如表2 所示。同时,主体编号、资源编号、操作编号和环境编号为主键且不能为空。如上所述,单个规则中属性的个数为12,因此,使用12 个二进制位对策略进行编码,并利用其属性信息来构造ABAC 策略。其中,定义的属性值顺序为主体属性值SubAttrValue、资源属性值ResAttrValue、操作属性值AcAttrValue、环境属性值 EnAttrValue,并用policyBinarycode 表示策略哈希值。当PAP 对策略集的每个规则执行二进制编码后,也会对相应规则的subId、resId、acId 和enId 进行sha256 的哈希加密。
表2 属性信息Table 2 Attribute information
若某一政府机关G 想读取某个智能门锁资源,则进行以下操作:
1)将原始请求发送给G 的客户端PEP,PEP 调用PIP 合约请求查询属性信息,然后根据PIP 合约返回的属性结果集将原始申请构造为AAR。
2)如果G 不希望公开请求,则使用电网公司C 的公钥对该AAR 进行加密,并按照第3.1.1 节的事务格式将加密后的AAR 进行封装并在区块链网络中广播。
3)区块链中的背书节点负责模拟执行该事务tx,将执行结果Read/Write_Set 返回给客户端,客户端收到背书响应Response 后将该事务提交给排序服务,排序节点会对其进行排序分类,并将该事务打包成数据块后进行广播。
4)C 收到该事务后调用PDP 合约,PDP 合约会先根据该AAR 生成一个二进制编码和一个哈希值,然后调用PAP 合约查询策略信息,通过二进制编码找到相匹配的规则组,再依次比较哈希值,找到满足要求的策略规则后,判断AAR 中时间戳的值是否大于规则中截止时间的值。如果验证均通过,则判决结果为允许访问,如图8 所示。
图8 允许访问Fig.8 Allow access
5)C 用G 的公钥来加密所请求的资源URL,将其与G 的公钥和访问控制结果一起封装为事务,在区块链网络中进行广播,链中所有成员会验证事务并更新账本,同时触发一个事件通知G,G 收到响应后解析访问结果和URL 密文,通过浏览器访问解密的URL 链接中的资源信息。
6)如图9 所示,如果判决结果为拒绝访问,则电网公司C 把所有数据封装为事务并在区块链网络中进行广播,其中资源URL 为空。链中的所有成员会验证事务,并触发一个事件通知政府机关G,内容是背书策略拒绝了其访问申请。
图9 拒绝访问Fig.9 Deny access
为了保护家庭物联网中的数据安全,本文所提机制首先需要满足美国国家标准与技术研究院(National Institute of Standards and Technology,NIST)定义的3 项安全要求,即机密性、完整性和可用性[23]:
1)机密性。本文机制规定所有用户节点必须得到授权后才能加入区块链网络中、账本只能在同一组织间共享,并严格设置了用户对实体资源的访问权限,从而确保只有授权实体才能访问信息。
2)完整性。根据第3.1.1 节设计的事务数据格式以及第3.1.2 节阐述的事务工作流程,表明每次执行事务操作时都需要区块链通道中的所有成员对其进行验证并签名,从而确保消息在传输过程中不被篡改。
3)可用性。第4.2 节的案例实现证明当用户需要服务或数据时,本文所提机制具有可用性。
除以上3 项基本安全要求外,本文机制还可以抵抗与家庭物联网相关的安全攻击[24-25],具体如下:
1)分布式拒绝服务(Distributed Denial of Service,DDoS)攻击。本文机制继承了比特币和以太坊抵御DDoS 攻击的解决方案,如限制事务交易中的区块大小和签名次数。
2)修改攻击。假设攻击者修改了广播的事务或返回的数据,那么通过验证签名的合法性、比较背书策略的条件,该操作将被发现并拒绝。
3)重放攻击。本文机制设计了一个时间戳,在用户提交访问请求时会自动生成,其值只有不大于策略规则中的截止时间才可以被允许访问资源,以此来解决一次授权多次访问的问题。
4)其他攻击。由于Hyperledger Fabric 中证书授权机构(Certificate Authority,CA)的存在,只有在相应组织中获取证书的用户才可以顺利访问。此外,即使恶意用户可以向区块链发送访问请求,通过设计访问控制机制,其属性也无法与策略相匹配,因此,将无法获得请求的资源。
4.4.1 ACHF 性能测试与分析
本文基于XACML 提供的标准策略一致性测试包中的属性集和策略集来进行测试,将策略样本扩充为2 400、4 800、7 200、9 600 和12 000 条规则,以此映射家庭物联网中不断增加的用户和设备,并构造2 000、4 000、6 000、8 000 和10 000 个不同的并发请求进行测试。本次测试使用的数据库为CouchDB,排序服务为kafka,并依赖于zookeeper。
固定并发请求数量为10 000,在不同的策略样本下,分别调用AddPolicy()、DeletePolicy()、UpdatePolicy()和QueryPolicy()ABI 并测试其性能,结果如图10 所示。由图10(a)可知,随着策略规则数量的大幅增加,调用ABI 花费的总时间也会相应增多,但总体变化不明显。由图10(b)可知,在相同的策略规则数量下,添加和删除策略ABI 的吞吐量比更新和查询策略ABI 的吞吐量更大,因此,前者的性能效率更高,而随着策略规则数量的增加,这4 个ABI 的吞吐量性能指标会趋于平稳,表明其在管理访问控制策略方面具有良好的性能。
图10 策略函数性能对比Fig.10 Policy function performance comparison
在不同的策略规则数量下,分别构造不同数量的并发请求,测试AccessControl()ABI 的性能,结果如图11 所示。由图11(a)可知,在相同的访问数量、不同的策略数量下,访问控制花费的时间增多但相差不大,然而,随着并发访问数量的增加,该ABI 花费的时间呈线性增加。由图11(b)可知,在相同的策略数量、不同的访问数量下,访问控制的吞吐量几乎一致,然而,随着策略规则数量的增加,该ABI 的吞吐量缓慢下降,最后趋于平稳,表明其在访问控制判决方面具有良好的性能。
图11 策略判决性能测试结果Fig.11 Policy decision performance test results
4.4.2 性能对比与分析
本文对比实验构造30、60、150 和600 个不同的并发请求进行测试,并从策略检索时间方面分析分组策略检索算法的效率,结果如图12 所示。从图12可以看出,随着访问数量的增加,两种策略的时间开销都呈上升趋势,但是本文策略的高效动态性特点更加显著。
图12 策略检索时间对比Fig.12 Policies retrieval time comparison
将本文方案与相关方案进行比较,结果如表3所示。文献[15]提出基于比特币的家庭物联网框架,其研究并概述了智能家居中的各种核心组件,但该方案不支持可追溯性、自主性、细粒度和高效动态访问。文献[16]提出一种基于以太坊的访问控制框架,该框架通过预定义的访问控制策略实现静态访问验证,并通过检查主体的行为来实现动态访问验证,虽然其支持可追溯性和动态访问,但是没有自主性、细粒度检索且动态访问的效率不高。文献[26]提出一个基于属性的访问控制和通信控制框架,以确保家庭物联网体系结构中不同实体之间的访问和通信安全,虽然其具有自主性,但是没有可追溯性、细粒度和高效动态访问。文献[21]提出基于超级账本和ABAC 模型的访问控制系统,并介绍了网络初始化、链码安装和智能合约调用,该系统虽然支持可追溯性、自主性和细粒度检索,但动态访问效率偏低。本文引入超级账本来保证整个访问过程的可追溯性,由于链中的每个参与者都可以根据自身的安全需求自主制定相应的访问控制策略,保证了其自主性,此外,本文方案基于ABAC 模型实现细粒度的权限控制,同时设计分组策略检索算法来实现高效动态访问,缩短了数据检索的时间。
表3 不同方案的性能对比结果Table 3 Performance comparison results of different schemes
将本文ACHF 机制与文献[21]中提出的基于区块链的物联网访问控制系统(Fabric-IoT)、文献[27]中提出的基于层级区块链的物联网分布式体系架构(DAHB)以及文献[28]中提出的基于区块链的IoT访问控制系统(BBIAC)进行性能对比实验,结果如图13 所示,以表1 的硬件和软件环境为标准,选择访问控制函数作为比较对象。从图13 可以看出,本文所提机制的吞吐量优于其他3 种访问控制方案,更适合大规模家庭物联网环境下的访问请求场景。
图13 4 种方案的吞吐量对比Fig.13 Throughput comparison of four schemes
本文提出一种家庭物联网访问控制机制ACHF,该机制将智能合约技术与ABAC 模型相结合,解决了集中式访问控制存在的单点故障和策略判决中心化的问题,同时使用URL 地址读取数据资源以减轻链上存储大量数据区块的负担并简化数据共享的方式。通过区块链事务管理访问控制策略,数据具有不可伪造性、防篡改性、可追溯性的特点,并提出对策略的标准化定义,遵循标准XACML 体系结构,提高了互操作性,同时设计分组策略检索算法,有效缩短了处理访问请求的响应时间。借助Hyperledger Fabric 联盟链平台实现ACHF 机制,并将其与相关方案进行对比,实验结果表明,在包含大量具有相同属性的主体和资源的家庭物联网环境下,ACHF 机制能有效保障数据安全和用户自主权,同时实现高效动态、细粒度的访问控制,可以提高系统的灵活性、可扩展性和处理能力。由于本文ACHF 机制中的属性信息都是以明文形式进行存储的,因此下一步将对属性信息的加密方式进行研究,在保证用户数据隐私的情况下实现更安全高效且动态细粒度的访问。