基于智能合约的物联网访问控制系统
2021-04-29张江徽史锦山
张江徽,崔 波,李 茹,史锦山
(1.内蒙古大学计算机学院,呼和浩特 010021;2.内蒙古自治区无线网络与移动计算重点实验室,呼和浩特 010021)
0 概述
物联网是以通信网与互联网为基础,为物理设备提供信息交互和无缝连接的互联网络,在该网络中物理设备可以实现设备之间的精确协作与人机之间的实时联动。目前物联网已经进入相对成熟的发展阶段,物联网设备可随时接入到互联网中被用户所使用。但是物联网设备在使用过程中会产生大量的数据,这些海量数据中包含着具有明显指向性的个人隐私数据,若这些隐私数据发生泄漏,则代表着用户隐私的消失。访问控制作为数据保护的基石性技术之一,可保障数据仅能被拥有相应权限的用户访问[1]。但是当前的访问控制方法采用集中式的授权决策实体进行访问控制决策,即使用中央可信实体授予访问控制权限,在这种情况下容易出现单点故障问题,可靠性较低。
区块链是一种去中心化的分布式技术,区块链中存储的数据具有可追溯与不可篡改的特性,它可在无信任中心的网络环境中建立信任关系。区块链从技术上解决了使用集中式授权决策实体带来的安全问题,其与访问控制结合,可以降低访问控制对单一可信实体的依赖程度,提高访问控制的可靠性和数据的安全性。
2016 年出现了将物联网下的访问控制与区块链相结合的方法。文献[2-3]使用比特币中的授权令牌代表访问权限,文献[4]将机器学习与基于比特币的访问控制相结合,文献[5]则在区块链中存储访问控制信息,而文献[6]提出了一种基于属性的物联网访问控制方法。但上述研究中的访问控制决策过程依然是由一个集中式的中央实体来完成[7]。
在以太坊与访问控制结合的研究中,文献[8]通过智能合约验证用户访问控制权限的合法性,文献[9]则使用智能合约实现了传统的访问控制方法,文献[10]利用智能合约完成访问控制信息的记录,文献[11]设计了3 个智能合约共同实现访问控制的全部功能。上述研究中存在的问题是侧重对物联网设备的保护,并且在以太坊中执行智能合约需要花费数字货币,使得系统使用限制较多。
超级账本中不存在数字货币,并且它对应用环境中的算力规模并没有严格的要求,因此超级账本更适用于物联网环境下的访问控制,文献[12]将超级账本与访问控制相结合,通过智能合约管理访问控制策略。但该研究对于访问控制权限的划分粒度较粗,对于物联网设备的拥有者容易出现越权访问、过度授权等情况。
本文分析当前物联网环境下区块链结合访问控制研究存在的不足,设计并实现一种基于智能合约的物联网访问控制系统,在使用智能合约进行访问控制决策的基础上提供细粒度的访问控制,并严格审查访问控制权限。本文选择超级账本作为执行智能合约的区块链平台。
1 相关研究
1.1 区块链技术发展
2008 年,中本聪提出了一个完全去中心化的数字货币系统,这种数字货币称为比特币[13]。比特币适用于电子金融领域,可以在弱信任环境甚至无信任环境中为参与交易的各方建立起信任关系,每一笔交易需要同一网络中所有节点确认之后才能生效。比特币使用椭圆曲线算法加密数据,运用P2P网络来实现数据的分布式存储,以区块为单位采用链式存储结构存储数据,凭借共识算法保证各个参与方数据的一致性。比特币具有的去中心化、数据不可篡改等特点,为区块链的发展奠定了理论与技术基础。比特币被称为区块链1.0。
文献[14-15]提出以太坊作为下一代的区块链网络架构。以太坊在拥有区块链技术特性的基础上增加了具有图灵完备功能的智能合约。
智能合约是以太坊网络上的可执行程序,以太坊用户将设计好的业务逻辑编写成智能合约部署在以太坊中,由以太坊虚拟机(Ethereum Virtual Machine,EVM)自动调用与执行[16-17]。在以太坊中部署与调用智能合约需要支付以数字货币结算的费用。智能合约可实现复杂的业务逻辑,扩大了区块链的应用范围,使得各种传统业务开始与访问控制、供应链溯源、公证业务等区块链融合。以太坊是区块链2.0 的代表。
比特币与以太坊允许任意未知身份的节点加入到网络中,但对应用环境中的算力规模有着极高的要求,以保证共识算法的正常运行,维护区块链网络的完全性和稳定性。然而,传统领域一般不具备强大的算力,却又需要借助区块链的数据不可逆、不可篡改以及分布式对等网络等特点。因此,研究人员提出了新一代的区块链技术——超级账本。超级账本称为区块链3.0。
超级账本是Linux 基金会在2015 年发起的一个开源项目,它是一个分布式账本平台,具有无币、功能模块化等特点。超级账本[18-19]由以下6 个部分组成:
1)客户端:使用者通过客户端实现应用与区块链网络之间的交互,客户端可以向区块链网络发出一系列操作命令,如提交交易、建立通道、创建节点等。
2)证书颁发机构(Certificate Authority,CA):负责管理超级账本网络中的所有成员身份,CA 也称为Fabric CA,是成员服务提供者(Member Service Provider,MSP)的具体实现,MSP 在超级账本中是管理成员的系统抽象组件。
3)通道(Channel):将一个完整的区块链网络分割成不同的私有子网,每一个通道存在不同的节点,实现了数据的隐私性。
4)peer 节点:根据节点的作用划分为背书节点、提交节点、锚节点和领导者节点。背书节点负责模拟执行客户端所提交的交易并对执行通过的交易签名,提交节点将新的区块加入到区块链中,锚节点用来发现通道中的所有peer 节点,领导者节点则是将新的区块信息广播给组织内的所有peer 节点。
5)排序服务:验证背书节点的签名后,对交易进行排序,并打包成新的区块发送给提交节点,排序服务可由一个排序节点组成,也可由多个排序节点共同组成。
6)链码:在超级账本中运行的智能合约。
超级账本实现一次完整交易的过程如下:
1)客户端构建交易,并将交易打包发送给背书节点。
2)背书节点对接收到的交易进行验证并模拟执行,验证通过后对该交易签名,将结果返回给客户端。
3)客户端将模拟结果发送给排序节点,验证背书节点的签名后,新的交易被排序节点打包至新的区块中,发送给提交节点。
4)提交节点将新的区块写入区块链中。
5)领导者节点在接收到新区块写入的消息后,将消息广播给组织内的其他peer 节点。
超级账本适用于存在多个参与方同时又不具备强大算力的环境中,在这种环境下其仍然具有区块链的所有特性。
1.2 物联网中的区块链与访问控制
1.2.1 基于比特币的访问控制
最初将访问控制与区块链技术相结合的研究是于2016 年开始的,研究者将访问控制与比特币相结合。文献[2-3]将访问控制模型和区块链机制相结合,提出一种物联网场景下的分布式隐私保护访问控制框架FairAccess,使用比特币的授权令牌代表访问权限,通过授权令牌的方式来实现权限的传递,在FairAccess 中,区块链被认为是存储所有访问控制策略的数据库。有学者在FairAccess 的基础上,将机器学习领域中的强化学习结合物联网环境下的访问控制提出一种动态的、分布式的安全策略[4]。文献[5]将比特币与基于属性的访问控制相结合,将访问控制策略与资源部署在区块链上并公开可见,任何用户都可以随时查询与资源配对的策略以及有权访问资源的客体属性。文献[6]提出一种基于属性的物联网访问控制方法,该方法运用区块链存储属性数据,避免了数据被非法篡改,同时简化了访问控制协议,以满足物联网设备的计算能力和功耗要求。
访问控制与比特币的结合只是将区块链作为存储控制策略和决策结果的数据库,以达到策略执行结果可追溯和不可篡改,保障了访问控制策略和决策结果的安全性[7]。但访问控制的决策过程是由集中式的授权实体完成,仍然存在单点故障问题。
1.2.2 基于以太坊的访问控制
智能合约提出后,有学者开始研究基于智能合约的访问控制方法。文献[8]将智能合约作为用户使用物联网设备的权限验证服务器,当用户发出使用请求时,智能合约将用户的权限令牌与物联网设备对应的令牌进行比对,验证用户的合法性,通过验证后将设备的全部使用权限返回给用户。研究者将基于权能的访问控制(Capability-Based Access Control,CapBAC)与基于身份的访问控制(Identity-Based Access Control,IBAC)融合并通过智能合约实现,使用令牌(Token)代表用户的访问控制权限[9]。文献[10]使用以太坊私有链对物联网设备的配置文件进行分布式管理,同时将设备的配置文件存储在区块链中,并使用智能合约记录物联网设备的访问控制操作。文献[11]提出一种基于以太坊智能合约的访问控制方案,包括访问控制合约(Access Control Contract,ACC)、判断合约(Judge Contract,JC)和注册合约(Register Contract,RC)3 种智能合约。访问控制合约通过检查请求者的行为实现基于策略的授权,判断合约检查请求者的错误行为并对请求者进行相应的惩罚,注册合约用于注册上述两个智能合约并提供更新、删除和其他操作。
以太坊中的智能合约技术不仅可以将访问控制策略、决策结果等关键数据写入到区块链中,还可以将访问控制策略转换成智能合约[20],由以太坊中的所有节点共同完成访问控制权限的授予,避免了使用集中式授权实体所带来的单点故障问题。但是上述研究侧重的是提高物联网设备的安全性,对于访问控制权限部分没有过多的考虑。
由于以太坊中发布与执行智能合约需要花费一定的费用,而这些费用是以以太坊中产出的数字货币结算,以太坊用户花费完后则无法申请使用资源或者对资源进行管理操作。此外,以太坊对算力要求较高,对于硬件性能有限的物联网环境并不适用。
1.2.3 基于超级账本的访问控制
文献[12]设计的基于超级账本的访问控制系统,被命名为Fabric-IoT,该系统包含设备合约、策略合约和访问合约3 种智能合约。设备合约负责存储物联网设备的统一资源定位符(Uniform Resource Locator,URL)以及查询设备功能,策略合约为管理员用户提供管理访问控制策略的功能,访问合约负责普通用户的全部访问控制过程。
超级账本中不存在数字货币,无需考虑执行智能合约的费用问题,并且它对算力并没有严格的要求,因此适用于硬件性能有限的物联网环境。上述研究虽然将工作重心放在访问控制与超级账本的结合上,但其设计的访问控制策略在物联网设备的访问控制权限划分上存在着粒度过粗的问题,使用者请求访问控制权限时会出现过度授权、越权访问等不安全情况。
针对上述问题,本文在选择超级账本作为执行智能合约的区块链平台的基础上,设计并实现基于智能合约的物联网访问控制系统,使用智能合约进行访问控制决策,同时为物联网设备设计了一个访问控制策略模型FACP,该模型同样是在超级账本中建立的。本文所设计的系统通过该模型可以实现细粒度的访问控制,防止出现越权访问、过度授权等情况。
2 系统设计
本节主要介绍系统的设计思路,具体内容分为系统架构、系统业务工作流程、访问控制策略模型的组成以及实现系统功能的智能合约设计。
2.1 系统架构
基于智能合约的物联网访问控制系统可实现物联网设备权限的访问控制管理。系统架构分为用户端、区块链和设备端三部分,如图1 所示。
图1 系统架构Fig.1 Architecture of system
本文系统架构主要包括以下3 个部分:
1)用户端。包含4 个模块,分别是资源管理模块、资源请求模块、资源授予模块和资源使用模块。系统中的用户分为资源请求者和资源拥有者两类。每个模块涉及的功能如下:
(1)资源管理模块
上传权限功能:物联网设备的所有者被称为资源拥有者,资源拥有者可以将准备提供给他人使用的物联网设备信息上传到区块链中。
设置访问控制策略功能:资源拥有者输入FACP需要的属性信息,为该设备设置多条访问控制策略以满足不同的资源请求者的使用请求,每条策略都会明确规定满足何种属性的资源请求者在何种情况下方可获取该设备的访问控制权限。
撤回权限功能:资源拥有者若不再继续共享某个物联网设备的访问控制权限,则可通过系统删除区块链中存储的访问控制权限信息,删除之后系统将无法搜索到有关该设备的访问控制权限信息,资源请求者也无法再使用该设备。
(2)资源请求模块
请求资源功能:需要获取某一个物联网设备访问权限的用户被称为资源请求者,系统会在区块链中为资源请求者查找符合其条件的物联网设备的访问控制权限,资源请求者可对这项权限发起访问请求。
(3)资源授予模块
权限授予功能:资源请求者对物联网设备的访问控制权限发起请求时,系统会查询资源拥有者为物联网设备设置的访问控制策略,将资源请求者的属性信息与访问控制策略中的属性信息进行比对,全部符合后,将该设备的访问控制权限授予资源请求者。
(4)资源使用模块
权限使用功能:资源请求者满足访问控制策略,当被授予访问控制权限时,会在区块链中生成记录,当资源请求者需要使用物联网设备时,系统会在区块链中查询用户是否获取该设备的访问控制权限,只有查询到结果,资源请求者才被系统允许使用该设备。
2)区块链。区块链部分是系统中逻辑处理的核心,使用超级账本作为区块链网络架构,并通过智能合约进行访问控制的逻辑判断。它主要具有以下3 个作用:
(1)负责用户端的资源管理模块、资源请求模块、资源授予模块和资源使用模块的逻辑处理。
(2)存储访问控制策略、决策结果以及系统使用过程中产生的数据,如用户信息、用户权限信息等。
(3)提高系统可靠性,通过智能合约实现了分布式的访问控制决策,避免了单点故障问题。
3)设备端。区块链网络存在无数的参与节点,每个参与节点需要具有一定的计算能力与存储能力,以存储当前区块链内的所有交易数据,并且共同完成区块链网络内的每一次共识任务,以此保证所有节点数据的一致性[21],而物联网设备计算和存储能力较弱,并且这些计算和存储能力主要是为物联网设备自身的功能服务,无法将其作为区块链网络中的节点,因此本文中的物联网设备不会以节点的身份参与到区块链网络中,每一个设备拥有唯一的设备ID,以便与其他设备区分,它们会接收系统所传递的访问控制信息,并执行相应的动作。
2.2 系统业务工作流程
本文系统具体业务工作流程如图2 所示。
图2 本文系统业务工作流程Fig.2 Business workflow of the proposed system
业务工作流程由资源管理、资源请求、资源授予和资源使用4 个部分共同处理,每一部分负责处理用户端的相应功能模块的工作请求,具体步骤如下:
步骤1资源所有者通过策略信息点(Policy Information Point,PIP)组件和策略管理点(Policy Administration Point,PAP)组件上传资源的访问控制权限信息和为该资源设置的访问控制策略,并存储在区块链中。
步骤2系统搜索符合条件的资源信息,资源请求者通过策略执行点(Policy Enforcement Point,PEP)组件发起对资源的访问请求。
步骤3策略决策点(Policy Decision Point,PDP)组件通过PAP 组件获得该资源的访问控制策略,通过PIP 获得资源请求者的属性信息。
步骤4PDP 组件比对资源请求者的属性信息和该资源的访问控制策略中设定的属性信息,若决策结果是允许,它会将结果返回给PEP 组件。
步骤5PEP 组件接收PDP 组件的决策结果,并将访问控制策略中规定的权限返回给资源请求者,资源请求者获得访问控制权限。
步骤6资源请求者向PEP 组件发出使用权限申请。
步骤7PEP 组件向PDP 组件发送资源请求者的资源使用申请。
步骤8PDP 组件查找资源请求者的已获取资源列表,确认通过后,向PEP 组件返回确认信息。
步骤9PEP 组件向资源请求者返回允许调用信息,同时资源请求者使用该资源。
业务工作流程中所涉及的名词及含义如表1所示。
表1 工作流程涉及的名词及具体含义Table 1 Nouns and specific meanings involved in the workflow
2.3 访问控制策略模型的组成
策略是由一组规则组成的,它们定义了实现特定结果所需要的实体属性,在将物联网设备的访问控制权限授予资源请求者的过程中,若访问控制策略对于权限的划分过于简单,将会造成授权范围过大、资源请求者获得的访问控制权限超出其权限范围、发生过度授权、出现隐私数据泄露等风险,所以需要将访问控制权限进行细粒度划分。
为实现物联网设备访问权限的细粒度划分,本文设计了基于超级账本的访问控制策略模型FACP,如图3 所示。
图3 FACP 访问控制策略模型Fig.3 FACP access control policy model
FACP 访问控制策略模型的组成如下:
1)策略:资源请求者为物联网设备设置一组访问控制规则,每个规则对应一种访问情况,使资源拥有者可以对物联网设备做一个更精细的权限控制。
2)规则由靶标、先决条件、有效期限、决策结果和规则联合算法组成:
(1)靶标
资源:被请求设备的访问控制权限。
主体:请求资源的访问控制权限的个人或组织,资源拥有者需要确定申请设备的访问控制权限的请求者,保证设备被指定的资源请求者使用。
操作:资源的权限,如开关权限、读写数据权限,对权限整体进行细粒度划分,不需要的权限则不会授予。
关系:需要通过资源拥有者的关系属性区分相同主体名称的不同主体的访问请求,防止规则被错误使用。
(2)先决条件:对规则的应用时间、应用空间、设备的使用原因等一些客观条件做出限定。
(3)有效期限:规定该规则的使用次数或使用时间,避免出现无限使用该设备情况的发生。
(4)决策结果:当资源请求者的属性满足靶标中的属性,并且客观条件满足先决条件中的设定时,系统会将决策结果与有效期限返回给资源请求者。
(5)规则联合算法:为防止规则应用冲突情况的发生,采用许可优先算法,只要有一个规则的决策结果是允许,资源请求者就可以获得对应的访问控制权限。
资源拥有者不需要了解FACP,在系统中的输入框填入所有的属性信息,系统会根据FACP 自动生成该设备专属的访问控制策略,实现细粒度的访问控制,防止资源请求者的访问控制权限超出资源拥有者对于该设备所设置的权限共享范围。
2.4 合约设计
为完成分布式访问控制决策,本文将物联网设备访问控制权限的决策授权以及访问控制策略的设置和用户信息的管理等操作交由4 个部署在超级账本中的智能合约完成,分别是PIP 合约、PAP 合约、PDP 合约和PEP 合约,本节将介绍实现访问控制功能的合约与函数。
1)PIP 合约。资源拥有者通过该合约管理物联网设备的访问控制权限以及注册用户身份,PIP 合约包含以下函数:
(1)AddResource()函数:资源拥有者上传物联网设备的访问控制权限时触发AddResource()函数,该函数将设备的访问控制权限信息写入区块链中,一个合法的访问控制权限信息需要4 个参数,如算法1 所示。
算法1AddResource()函数
(2)DeleteResource()函数:在某种情况下,资源拥有者不再继续共享设备的访问控制权限,通过该函数输入要撤销的资源ID,系统在区块链中删除对应的资源信息,完成对资源的撤销,资源申请者将无法在区块链搜索到关于该资源的信息。
(3)UserRegister()函数:使用者在用户注册页面中输入用户姓名和用户ID,系统通过该函数注册用户身份信息,并在区块链中保存,以便后续系统操作的进行。
2)PAP 合约。PAP 合约负责为已共享的物联网设备设置访问控制策略,该合约由AddPolicy()函数构成。AddPolicy()函数负责提供FACP 所需要的7 个属性信息,伪代码如算法2 所示。
算法2AddPolicy()函数
3)PDP 合约。PDP 合约负责判断资源请求者是否匹配所申请设备的访问控制策略,判断当前的资源请求者是否为该设备的已授权用户。该合约所包含的函数如下:
(1)MatchPolicy()函数:主要负责将资源请求者的属性信息与其请求的物联网设备的访问控制策略中的属性信息做比较,判断其能否获得该设备的访问控制权限,该函数在资源请求者申请资源的访问控制权限时由PEP 合约中的GetPermission()函数调用,MatchPolicy()函数伪代码如算法3 所示。
算法3MatchPolicy()函数
(2)JudgeUser()函数:负责判断当前的资源请求者是否为该设备的已授权用户之一,并将判断结果传递给PEP 合约,判断过程与MatchPolicy()函数类似,因此不再赘述。
4)PEP 合约。PEP 合约负责接收PDP 合约返回的结果,并根据结果执行相应的动作,PEP 合约包含以下4 个函数:
(1)ShowResource()函数:根据输入的用户姓名显示已获得的访问控制权限。
(2)UseResource()函数:根据PDP合约中JudgeUser()函数返回的结果,确定用户的可使用资源列表中是否包含该设备。
(3)FindResourceByRes_ID()函数:在资源请求者搜索可申请设备时由系统调用,根据输入的资源ID 显示对应的搜索结果。
(4)GetPermission()函数如算法4 所示,它根据PDP 合约中MatchPolicy()函数返回的结果,将设备的访问控制权限授予资源请求者,同时将资源请求者所获得的权限信息上传至区块链中。
算法4GetPermission()函数
3 系统实现
3.1 环境配置
本文在主机上安装虚拟机,在虚拟机中搭建超级账本所需要的运行环境,将超级账本部署在虚拟机中,虚拟机的软件环境配置如表2 所示,硬件环境配置如表3 所示。
表2 软件环境Table 2 Software environment
表3 硬件环境Table 3 Hardware environment
3.2 运行环境搭建
在为超级账本搭建的运行环境中,本文设置了4 种不同类型的节点,如表4 所示。
表4 超级账本节点类型Table 4 Node type of hyperledger fabric
超级账本的运行环境搭建过程如下:
1)使用超级账本中的加密工具cryptogen 为peer节点和orderer 节点生成证书和密钥。本文中设置了2 个peer 组织,每个组织包含2 个节点,并设置1 个orderer 节点。
2)使用加密工具configtxgen 读取configtx.yaml文件中的配置信息:
(1)生成orderer 节点需要的创世区块,当系统启动时,该区块将被写入到区块链中,确保peer 节点与orderer 节点的身份信息不会被篡改。
(2)生成通道的配置信息,每一个通道都保存自己的账本信息,通道之间数据独立,保证数据的隐私性。
(3)为每一个peer 节点组织生成锚节点的配置信息,超级账本中的组织通过锚节点与外部组织进行信息交流。
其中第(1)步与第(2)步中的操作已集中在一个generate 的shell 脚本中,执行该脚本即可自动完成上述操作。
3)读取通道的配置信息创建通道,读取每一个锚节点配置信息,为每一个组织设置锚节点,与外部组织通信。根据docker compose 中的配置信息启动镜像创建容器,将每一个节点加入到创建的通道中,至此完成对超级账本运行环境的搭建。
超级账本的网络运行环境搭建结束后,需要安装和实例化链码,链码才可正常使用,链码安装过程如下:
1)将编写完成的链码复制到安装超级账本的文件夹下。
2)执行命令将链码打包并签署,安装到超级账本的每一个peer 节点上。
3)通过任意一个peer节点执行实例化链码操作,在实例化操作的同时执行背书策略。在完成实例化链码后,所有身份对等节点均可对链码进行调用。
对链码进行修改后,可执行升级链码操作使新链码生效,升级过程与安装过程类似。
3.3 系统交互
普通用户使用系统时不需要直接操作超级账本,用户通过最上层的用户端使用系统功能,由系统完成对相应智能合约的调用,这个过程涉及到与超级账本的交互,本文选择超级账本官方提供的SDK完成对超级账本的相关操作。
本文中的系统使用Fabric-Node-SDK 实现对智能合约的调用及其他数据交互。
1)创建一个新的CA 客户端与CA 节点管理超级账本中的成员身份,通过CA 节点注册管理员,并创建一个新的基于文件系统的钱包存储管理员身份信息。
2)使用已存在的管理员身份注册普通用户,将普通用户的身份信息导入到钱包中,并运行客户端。
3)通过已注册的普通用户身份连接到peer 节点上,运用3.2.1 节中创建的通道获取到已部署好的链码,调用指定的函数。
注册用户身份信息需要调用PIP 合约中的UserRegister()函数,如图4 所示。
图4 用户身份注册Fig.4 User identity registration
以用户ID为标识,调用PIP合约的AddResource()函数,上传共享的物联网设备,如图5 所示。
图5 物联网设备的上传Fig.5 Upload of IoT devices
调用 PAP 合约的 AddPolicy()函数,以AddResource()函数上传的物联网设备信息为主体,为其设置访问控制策略,如图6 所示。
图6 访问控制策略的设置Fig.6 Setting of access control policy
调用PIP 合约的DeleteResource()函数,可删除不再继续共享的物联网设备,如图7 所示。
图7 物联网设备的删除Fig.7 Deletion of IoT devices
PEP 合约的FindResourceByRes_ID()函数为资源请求者查找需要的物联网设备,如图8 所示。
图8 可申请设备的查找Fig.8 Finding of available equipment
PEP 合约的GetPermission()函数根据资源请求者的属性信息,判断其可否获取该设备的访问控制权限,如图9 所示。
图9 资源拥有者的属性检查Fig.9 Property check of resource owner
资源请求者通过PEP 合约的ShowCanUse()函数查看可使用的资源,如图10 所示。
图10 已拥有资源的查看Fig.10 View of already owned resources
资源请求者访问某物联网设备时,通过PEP 合约的UseResource()函数,判断该设备是否在其已获取资源列表中,如图11 所示。
图11 已获得物联网设备的使用Fig.11 Using of acquired IoT devices
3.4 性能分析
本节分别对访问控制策略模型的应用性能及系统性能做了详细的测试与分析,并且对本文所设计的基于智能合约的物联网访问控制系统与Fabric-IoT在系统性能上进行了对比实验与分析。
3.4.1 访问控制策略模型应用测试
本文所设计的系统根据访问控制策略模型与用户在系统中输入的信息生成对应的访问控制策略。为测试访问控制策略的生成速度,本文进行了访问次数分别为20 次、50 次、100 次、500 次、1 000 次的并发访问实验,实验结果如图12 所示。
图12 访问控制策略生成时间Fig.12 Generation time of access control policy
从图12 可以看出,在并发访问次数为50 次时,生成访问控制策略所需时间最长,之后所需时间逐渐下降,在并发访问次数为1 000 次时所需时间最少,说明系统根据本文所设计的访问控制策略模型能够以较低的时延为用户生成对应的访问控制策略。
本文中的访问控制策略模型是一个抽象的存在,系统根据该模型生成访问控制策略时,需要将生成的数据写入区块链中,每一次写入都是在重复一次交易提交的过程,因此策略生成的速度会受到该过程的影响,但时延较短,不会影响下一个策略的生成。
3.4.2 系统性能测试与分析
为测试基于智能合约的物联网访问控制系统的使用性能,本文使用hyperledger caliper 作为测试工具,并准备两组模拟多线程客户端对系统进行并发访问的实验,请求访问次数分别为20次、50次、100次、500 次,第1 组测试写入数据函数的平均延迟与吞吐量分别如图13、图14 所示,第2 组测试查询数据函数的平均延迟与吞吐量分别如图15、图16 所示。
图13 写入数据函数的平均延迟Fig.13 Average delay of data writing function
图14 写入数据函数的吞吐量Fig.14 Throughput of data writing function
图15 查询数据函数的平均延迟Fig.15 Average delay of data querying function
图16 查询数据函数的吞吐量Fig.16 Throughput of data querying function
图13 为写入数据函数的平均延迟,从图13 可以看出,写入数据函数平均延迟稳定在0.35 s 以下,并且在请求次数为500 次时,系统平均延迟最小,说明本文所设计的系统向区块链中写入数据时具有较低的平均延迟。
写入数据函数吞吐量的变化如图14 所示,从图14可以看出,写入数据函数的吞吐量在请求次数为20 次时达到峰值,随着访问次数的增加,吞吐量有稍许的下降,但随着请求次数增加,吞吐量逐渐趋于稳定。
外部数据向超级账本中写入时,首先客户端将数据打包成一个新的交易,并向背书节点发送写入数据交易,在所有背书节点模拟执行通过并签名后,返回给客户端,客户端向排序节点提交已经模拟执行过的交易,排序节点验证背书节点的签名后,将交易打包至新的区块内,发送给提交节点,提交节点在确认排序结果后,将新的区块加入到区块链中。每一次的写入数据都会重复此过程,因此写入数据函数的吞吐量和平均延迟会受到该过程的影响,但仍在可接受的范围内。
图15 为查询数据函数的平均延迟,从图15 可以看出,查询数据的函数的平均延迟在0.10 s 以下,随着请求次数的增加会出现小幅波动,在请求次数为500 次时,平均延迟达到最低。
图16为查询数据函数的吞吐量,从图16可以看出,查询数据函数的吞吐量随着请求次数的增加呈现上升的趋势,说明本文所设计的基于智能合约的物联网访问控制系统可以承受较大规模的访问请求。
在超级账本查询数据的过程中,不需要提交新的交易,不会与排序节点、提交节点等进行交互。查询过程是以用户的身份查询需要的数据,不涉及到区块的写入,因此查询函数的吞吐量和平均延迟均优于写入数据函数。
上述两组实验结果说明,本文所设计的基于智能合约的物联网访问控制系统,在请求次数不断上升的过程中能够以较大的吞吐量和较低的延迟,保证系统的正常使用。
3.4.3 性能对比实验与分析
本文设计的系统与Fabric-IoT 的性能对比实验,以本文计算的硬件环境与软件环境为标准,选择负责访问控制方法的读写函数作为对比对象,查询数据函数的吞吐量与延迟时间的对比实验结果如图17和图18 所示。可以看出,读写函数的性能极其接近,但在写入数据函数的对比实验中,本文所设计的系统的吞吐量与平均延迟要优于Fabric-IoT。
图17 吞吐量对比结果Fig.17 Throughput comparison results
图18 平均延迟对比结果Fig.18 Average delay comparison results
图17 中的AddPolicy()函数与AddResource()函数表示本文设计系统的写入函数吞吐量,AddURL()函数与AddStragedy()函数表示Fabric-IoT 中写入数据函数的吞吐量,实验数据显示,本文所设计的系统的写入数据吞吐量要优于Fabric-IoT,可以承受较大的流量访问。
图18 中的AddURL()函数与AddStragedy()函数表示Fabric-IoT 的平均延迟数据,AddPolicy()函数与AddResource()函数表示本文设计的系统写入数据的平均延迟,图中的实验数据说明本文设计系统的写入数据平均延迟时间要低于Fabric-IoT,并且随着访问次数的增加,平均延迟时间也呈现出稳定的趋势。
本文所设计的基于智能合约的物联网访问控制系统获取用户本身的属性信息作为访问控制策略中的相关信息,而在Fabric-IoT 中需要物联网设备的IP地址与MAC 地址作为访问控制策略的属性信息,这两项参数在获取时需要花费一定的时间,该获取过程会影响Fabric-IoT 写入数据时的吞吐量与平均延迟。对比实验结果表明,本文设计的系统在写入数据方面的性能要优于Fabric-IoT,在实现细粒度的访问控制的情况下,可以更好地应用于有大规模写入数据请求的物联网场景。
4 结束语
本文设计并实现一种基于智能合约的物联网访问控制系统。该系统将区块链技术与访问控制相结合,解决了传统访问控制中所面临的中央信任实体问题,提高了访问控制的可靠性与安全性,并且用户根据本文所设计的FACP 访问控制策略模型,可为每一个物联网设备设置访问控制策略,达到细粒度的访问控制,防止过度授权、越权访问等情况的发生。同时本文采用超级账本作为执行智能合约的区块链平台,在保留区块链特性的情况下,使系统更加灵活。性能测试结果表明,该系统具有较高的吞吐量、较低的延迟时间及访问控制策略生成时间,可以满足较大规模请求场景的使用需求。下一步将设计一个改进数据保护方案保护访问控制策略,实现物联网设备访问控制策略与其他数据的隔离,提高访问控制策略的隐私性,以防止被他人非法利用。