原文连接https://ieeexplore.ieee.org/abstract/document/8964343/
摘要:物联网设备具有一些特殊特征,如移动性、性能受限、分布式部署等,使得传统的集中式访问控制方法在当前大规模物联网环境中难以支持访问控制。为了应对这些挑战,本文提出了一种基于Hyperledger Fabric区块链框架和基于属性的访问控制(ABAC)的物联网访问控制系统,称为fabric-iot。该系统包含三种智能合约,分别是设备合约(DC),合约合约(PC)和访问合约(AC)。DC 提供了一种存储设备生成的资源数据的 URL 的方法,以及一种查询该 URL 的方法。PC 为管理员用户提供了管理 ABAC 合约的功能。AC是为普通用户实现访问控制方法的核心程序。结合ABAC和区块链技术,Fabric-iot可以在物联网中提供分散,细粒度和动态的访问控制管理。为了验证该系统的性能,设计了两组仿真实验。结果表明,fabric-iot能够在大规模请求环境中保持高吞吐量,并在分布式系统中高效达成共识,从而保证数据一致性。
关键字:区块链、物联网、ABAC、hyperledger fabric、分布式系统。
随着互联网和计算机硬件的发展,越来越多的设备通过无线网络相互连接,使得物联网的规模越来越大。物联网是由大量传感器和网关组成的分布式网络。物联网设备始终与环境交互,产生不同类型的数据资源,如图像、音频、视频、数字信号等。物联网的所有系统和应用都可以接入互联网,有效共享资源和信息[1]。也就是说,我们生活在一个万物相连的世界。然而,由于物联网设备的分布式部署及其数量和规模,设备资源的访问控制面临巨大挑战。物联网设备产生的资源往往包含隐私和敏感数据,因此非法获取这些资源将带来严重后果。访问控制技术是保护资源的重要手段,已广泛应用于各种系统和环境[3]。传统的访问控制方法包括自主访问控制(DAC)、基于身份的访问控制(IBAC),但这些方法都是集中式设计,存在单点失效、扩展困难、可靠性低、吞吐量低等缺点。事实上,物联网设备可能属于不同的组织或用户,并且可能具有移动性和有限的性能,这使得集中式访问控制难以满足物联网环境中访问控制的要求。基于属性的访问控制(ABAC)是一种逻辑访问控制模型,它根据条目、操作和相关环境的属性控制对象和对象之间的访问[4]。ABAC首先分别提取用户(主体)、资源(对象)、权限和环境的属性,然后灵活组合这些属性之间的关系,最后将权限管理转化为属性管理,提供了一种细粒度的动态访问管理方法。区块链[5]是另一种新兴的数据管理技术,它通过分布式存储确保数据的可靠性。数据的读取或修改记录作为一个事务写入一个块中,并通过哈希算法将这些块链接为一个链,以确保数据的完整性。通过P2P网络和共识算法同步节点间的数据,使区块链网络各方达成共识,因此来确保数据一致性。Hyperledger Fabric[6]是一个开源区块链开发平台,它不仅具有区块链的特点,如分散的分类账、不可变的和群体共识,还提供更高效的共识机制、更高的吞吐量、智能合约,以及对多个组织和分类账的支持。
在本文中,我们将区块链技术应用于物联网访问控制,设计和实现一个名为fabic-iot的访问控制系统,该系统基于Hyperledger Fabric和ABAC。通过使用分布式架构,fabric-iot可以跟踪记录,提供动态访问控制管理,并解决物联网中的访问控制问题。
本文的主要贡献是:
本文的其余部分组织如下。第二节介绍相关工作。第三节详细介绍了Hyperledger Fabric的结构和运行机制,以及ABAC模型。第四节介绍了智能合约的资源模型、合约模型、系统结构、工作流程和实现。在第五节中,我们将演示如何设置fabric-iot系统,以及如何使用它来管理物联网资源的访问控制。我们设置了两组比较实验,然后分析结果。在第六节中,我们为本文得出结论,并为进一步的工作提供预览。
物联网的快速发展需要更高的分布式访问控制标准。区块链技术在评估控制方面具有四个优势,即去中心化,数据加密,可扩展性和不可篡改性。目前,区块链技术已经发展到3.0版本。作为其核心技术,智能合约为应用程序构建了安全可靠的运行环境,并赋予区块链更强大的功能。因此,基于现有的访问控制方法,许多学者通过将其与区块链和智能合约相结合,提出了多种物联网访问控制方法。
参考文献[7]提出了一种基于安全Fabric的数据传输技术,实现了工业物联网中的电力交易中心,解决了安全性低、管理成本高、监管困难等问题。在参考文献[8]中,提出了一种针对物联网设备的分散式访问控制方案。该方案使用单个智能合约来降低节点之间的通信成本。称为管理中心的节点旨在与设备交互,避免区块链和 IoT 设备之间的直接交互。它有六个优点,即移动性,可访问性,并发性,轻量级,可扩展性和透明度。在参考文献[9]中,提出了一种基于以太坊智能合约的访问控制方案,其中包括三个智能合约:访问控制合约(ACC),判断合约(JC)和注册合约(RC)。ACC 通过检查对象的行为实现了基于合约的授权。JC被用来判断错误的行为并返回相应的惩罚。RC用于注册上述两个智能合约并提供更新,删除和其他操作。最后,该架构是用一台PC,一台笔记本电脑和两台Raspberry Pi实现的。在参考文献[10]中,提出了一种基于以太坊的分布式应用程序(DAPP)。它将SaaS商业模式与区块链相结合,区块链用于买卖传感器数据。参考文献[11]提出了一个改进的区块链结构。在企业网络中,私有链用于以分布式方式管理物联网的设备配置文件。它将设备配置文件存储在区块链上,并使用智能合约监控操作。在参考[12]中,路由器节点的路由信息被保存到区块链中,以确保路由信息不会被篡改和跟踪。在参考文献[13]中,提出了一种基于属性的物联网访问控制方法,该方法通过区块链保存属性数据。这种方法避免了数据篡改,简化了访问控制协议,以满足物联网设备的计算能力和能源限制。参考[14],提出了一种多区块链分布式密钥管理架构(BDKMA),并引入雾计算方法,以减少多链操作的延迟,从而更好地保证用户的隐私和安全。在参考文献[15]中,区块链用于车辆互联网的信任管理。通过结合工作量证明(PoW)和权益证明(PoS)两种共识机制,可以动态改变挖矿节点的难度,从而更有效地达成共识。参考文献[16]提出了一种基于雾计算的高效、安全的道路状况监测认证方案。在参考文献[17]中,提出了一种边缘链,它使用区块链的货币系统将边缘计算资源与账户和物联网设备之间的资源使用情况联系起来。边缘链建立了基于设备行为的信任模型,以控制物联网设备从边缘服务器获取资源。在参考[18]中,为无线传感器网络设计了可扩展的物联网安全管理架构,并将其性能与现有的物联网管理解决方案进行了比较。在参考文献[19]中,提出了一种基于比特币的权限管理系统,该系统允许用户发布和传输访问合约。优点是访问合约将向所有用户开放,并防止任何一方拒绝合约的真实性。参考[20]将区块链和RBAC结合起来,实现了基于以太坊的跨组织RBAC,允许小型组织参与,因此用户可以完全控制自己的角色。在参考文献[21]中,提出了公平获取隐私保护和权限管理框架,该框架使用智能合约以细粒度的方式管理访问合约并检查合约重用。在参考文献[22]中,提出了一个名为EduRSS的方案。它使用基于以太坊的区块链来存储和共享教育记录。参考文献[23]提出了一种新型的基于信任的推荐方案(TBRS),以确保车辆CPS网络中的安全性和实时数据传输。在参考文献[24]中,提出了一种基于超图的区块链模型。该模型采用超边缘结构组织存储节点,将整个网络的数据存储转换为本地网络存储,降低了存储消耗,提高了安全级别。
以比特币为代表的数字货币取得了巨大的成功,并吸引了全世界对区块链技术的关注。但是,这种公链有许多缺点,如下所列:
为了解决这些问题,Linux基金会在2015年启动了Hyperledger项目,该项目建立了一个企业区块链开发平台。作为其中一个程序,Hyperledger Fabric使用模块化结构来提供可扩展的组件,包括加密,身份验证,共识算法,智能合约,数据存储和其他服务。
Hyperledger Fabric的所有程序都在 docker容器中运行。容器提供沙盒环境,将应用程序与物理资源分开,并将容器彼此隔离,以确保应用程序的安全性。Hyperledger Fabric是一种联盟链,其中所有节点都需要被授权才能加入区块链网络。在此基础上,Fabric提供了一种基于Kafka消息队列的共识机制,可以在大规模应用场景中快速达成共识。Hyperledger Fabric克服了公有链的这些缺点。
1. 主要组件:CA、CLIENT、PEER、ORDERER
CA对成员节点的数字证书进行统一管理,生成或取消成员的身份证书。
Client用于与对等节点交互,同时操作区块链系统。该操作分为两类。第一个是管理类别,主要用于管理节点,包括启动,停止,配置节点等。另一种是链码范畴,主要用于链码的生命周期管理,包括链码的安装、实例化、升级和执行等。客户端通常是命令行客户端或 SDK 开发的应用程序。
Peer节点是分布式系统中的一个等足点节点,该组件存储区块链的分类账和链码。应用程序连接到对等节点,并通过调用链代码来查询或更新分类帐。有两种类型的对等方:背书方和提交方。背书方节点负责验证、模拟和背书交易。提交者负责验证交易的合法性以及更新区块链和分类帐状态。
Orderer负责接受对等节点发送的交易,根据一定的规则对交易进行排序,将交易按一定顺序打包成块,并发送到对等节点。对等节点用新的区块更新本地账本,最后达成共识。
2. 通道
大多数企业应用程序的一个重要要求是数据隐私和机密性。Fabric设计了一个通道系统来隔离不同组织的区块链数据。在每个通道中,都有一个独立的私有分类账和一个区块链。因此,Fabric是一个具有多通道,多分类账和多区块链的系统。
3. 账本
Fabric 的数据存储为分布式账本,该账本中的数据项以键值对的形式存储。所有键值对都构成分类帐的状态,称为"世界状态",如图 1 所示。
图 1. Hyperledger Fabric中分类帐的结构
4. 链码
Fabric中的智能合约称为链码。Chaincode是用golang编写的程序(支持其他编程语言,如Java),并实现预定义的接口。Transactons可以通过链码生成,这是外部与区块链系统交互的唯一方式。通过提交或评估交易,外部人员可以更改或读取状态数据库(SDB)的数据,而交易将被写入Fabric的分类帐。业务逻辑可以通过编写链码来实现,因此开发人员可以编写不同的链码来实现不同的应用程序。
基于属性的访问控制(ABAC)是一种访问控制技术,它考虑了主体,对象,权限和环境的属性。它通过判断其请求是否包含正确的属性来确定是否向请求者授予访问权限。由于主体和对象的属性是单独定义的,因此 ABAC 可以有效地将合约管理和访问控制分开。可以根据实际情况更改合约,例如添加或减少其属性,以实现可扩展的目的。此外,可以从各个角度定义实体的属性,以实现细粒度的访问控制。属性是 ABAC 的核心,可以定义为具有四个元素的集合:,每个字段的含义解释如下:
A表示属性,A={name:value} .具有键值对的结构。
S表示主体属性,即发起访问请求的实体的身份和特征,如个人身份ID、年龄、姓名、职位等。
O 表示对象的属性,表示被访问资源的属性,例如资源类型、服务 IP 地址、网络协议等。
P 表示权限的属性,表示主体对对象的操作,例如读取、写入、执行等。
E 表示环境的属性,表示生成访问请求时的环境信息,例如时间、位置等。
ABACR(基于属性的访问控制请求)定义为: ABACR= {AS∧AO∧AP∧AE},这是一个包含上述四个属性的集合。它表示AE(环境属性)下AO(对象属性)上AS(主体属性)的AP(操作属性)。
ABACP(基于属性的访问控制合约)定义为:ABACP= {AS∧or∨AO∧or∨AP∧or∨AE},代表主体对客体的访问控制规则。它表示访问受保护资源所需的属性集。
物联网设备产生的数据种类繁多,其中大多数是非结构化数据[25]。例如,摄像机可以捕获真实世界的图像并产生图片或视频数据,麦克风可以捕获外部声音并产生音频数据。传感器可以捕获温度、湿度、光线等物理信号,并将其转换为数字信号数据。这些数据中的大多数都是非结构化的,因此它们不能直接存储在关系数据库中。而且由于它们都是实时数据,因此需要及时推送给授权用户。通常,语音和视频数据都是流数据。设备收集的数据经过编码,然后通过WiFi或4G推送到云服务器。最后,生成一个资源 URL。用户可以根据视频传输协议(如HLS和RTMP)通过URL提取流数据。对于传感器数据,设备通过基于 MQTT 的 [26] 服务或其他协议将数据发送到主题。客户端获得授权后,订阅相应的主题(可以用URL表示),服务器将主题下的消息推送给客户端。此外,这类数据主要用于控制物联网设备执行绑定、解绑、打开、关闭、调整等操作。通常,客户端可以通过基于 HTTP 的 restful API 向服务器发送请求。服务器验证权限后,可以通过 MQTT 或其他协议将控制信号发送回设备。表1 显示了几种不同类型的资源的 URL 格式。总而言之,本文定义了一个设备资源模型:{Device}→{resource}→{url} .
表1. 资源URL的示例
使用者(用户)对对象(资源)的访问权限由访问合约定义。用户无需直接从设备请求资源,而是根据区块链系统中的URL获取资源数据,并进行权限验证。
设备资源和用户之间的连接如图 2 所示。简短的工作流程如图中的1 – 5 序列号所示。
图2. 用户和资源之间的连接
结合ABAC模型和物联网设备生成的数据特征,设备访问控制合约模型定义如下:
P(合约):它表示属性访问控制的合约。此集包含四个元素:AS、AO、AP 和 AE。
AS(主体属性):它表示使用者(用户)的属性,包括三种类型:userID(唯一标识用户)、角色(用户角色)和组(用户组)。
AO(对象属性):它表示对象(资源)的属性,该属性由设备 ID 或设备的 MAC 地址组成。在此模型中,我们不直接将资源 URL 视为属性。相反,我们使用唯一标识作为设备的属性。因为在现实中,设备的网络是可变的,设备产生的数据是动态的。我们假设系统中一个设备的功能是单一的,每个ID或MAC一次只能对应一个资源URL。
AP(权限属性):它指示用户是否有权访问资源。值 1 代表"允许",2 代表"拒绝"。AP 初始化时,默认值为 1。管理员可以根据具体情况撤销访问授权,方法是将 AP 的值设置为 0。
AE(环境属性):它指示访问控制所需的环境属性。AE 有三种属性:时间、结束时间和允许的 IP。时间代表合约的创建时间。结束时间代表合约的过期时间。当当前时间晚于结束时间时,该合约将无效。允许的 IP 旨在防止网段外部的 IP 地址访问系统。
Fabric-iot是一种基于区块链的物联网访问控制系统,由四部分组成:用户、区块链、智能网关和设备,如图3所示。
图3. Fabric-iot的架构
1) 用户
此系统将用户分为两种类型:管理员和普通用户。
管理员负责管理区块链系统和维护智能网关的程序。管理员需要提供证书才能访问区块链系统。允许的具体操作如下所示。
普通用户(即设备的所有者)通过向区块链系统发送基于属性的授权请求来获取资源 URL。
2) 区块链
它是系统的核心。所有节点在加入区块链系统之前都需要获得CA认证。区块链是基于Hyperledger Fabric开发的,它通过智能合约实现访问控制。区块链系统公开API供用户和智能网关访问。它主要实现以下三个功能。
3) 智能网关
作为设备和区块链系统之间的桥梁,它可以接收来自设备的消息并将其包含的URL放到区块链上,避免了直接访问设备对区块链系统造成的压力。
4) 物联网设备
作为最大的群体,物联网设备一般不具备较强的计算能力、足够的存储空间和耐用的电池。因此,不可能直接将物联网设备部署为区块链的对等节点。物联网设备具有唯一的MAC地址或产品ID,可以与其他设备区分开来。通常,设备可能同时属于某些用户或组。每当设备生成新资源时,都会向智能网关发送一条包含资源 URL 的消息。在此系统中,MQTT 协议用作消息传输协议。
如图4所示,整个系统工作流程主要包括四个部分。本节详细介绍了每个部分的中间步骤。表 2 中描述了所使用的符号。
图4. fabric-iot的工作流程
表2. 符号描述
Part1 区块链网络初始化和链码安装是系统的基本过程。这些操作需要管理员在内部网中工作。流程1主要包括三个步骤。
Step1 在设置Hyperledger Fabric网络之前,我们需要为所有成员创建证书,例如对等节点,排序节点,通道,用户等。所有证书均由 CA 生成。
对等节点和排序节点在docker容器中运行。在运行之前,证书需要打包到docker映像中。
成功设置所有对等节点和排序节点后,我们开始创建通道。每个通道都加入了一个独立的区块链和分类账。
Step2 到目前为止,已经建立了一个基本的Hyperledger Fabric网络。为了构建应用程序,我们需要设计链码。我们的链码源代码是用Golang编写的。
管理员使用 Hyperledger Fabric SDK 或客户端来安装 CC(链码)。所有 CC 都将安装到对等节点。
Step3 安装链码后,需要对其进行初始化。调用函数用于初始化链码。每个实例化的链码都将作为背书保存在容器中。
Part2 制定访问控制合约并将其保存到区块链系统。此过程需要用户和管理员一起工作,提前决定和自定义访问合约,并由管理员将其上传到区块链系统。
Step1 管理员和用户共同制定访问合约,这些合约是根据主体(用户)、对象(设备资源)、操作和环境的属性定义的。
Step2 定义访问合约后,管理员将其上传到区块链网络。
Step3 管理员连接到区块链,通过运行合约合同来添加、修改和删除合约。合约的值保存在 SDB 中,操作记录写入分类帐。
Part3 设备将资源URL上报给智能网关,之后智能网关将其上传到区块链系统。
Step1 设备生成包含设备 ID 和 URL 的消息,并通过 MQTT 将其发送到智能网关。
Step2 智能网关解析消息并为区块链生成操作。
Step3 智能网关连接到区块链客户端以运行操作。
Step4 区块链通过调用 DC 的函数来保存设备资源的 URL。
Part4 基于属性获取资源的过程是系统的核心。它有三个步骤,如下所示:
Step1 用户发起基于属性的请求。
Step2 在收到请求后调用 AC 的功能。
Step3 如果验证通过,区块链系统通过调用 DC 中的函数来查询 URL,并将其返回给用户。如果失败,403 错误(403 代表 HTTP 状态代码中的禁止)将返回给用户。
智能合约是访问控制实现的核心。该系统中有三种智能合约:合约合约(PC),设备合约(DC)和访问合约(AC)。
1)合约合约
它提供了以下方法来操作 ABACP。
Auth(): Admin为用户定义 ABACP,并发送将 ABACP 添加到区块链系统的请求。ABACPR(基于属性的访问控制合约请求)的示例如表 3 所示。管理员使用 PC 节点的公钥对数据进行加密,然后使用私钥对请求进行签名。PC 调用 Auth() 来验证管理员及其公钥的身份,并使用 self 的私钥解密数据。
表3. ABACPR的一个例子
CheckPolicy():如算法 1 所示。PC需要检查ABACP的有效性。合法的 ABACP 需要包含上述四个属性,并且每个属性的类型也需要满足要求。
AddPolicy():如算法 2 所示。在通过CheckPolicy()验证ABACP是否合法后,PC调用AddPolicy()将ABACP添加到SDB,同时,所有操作记录都将写入账本。
UpdatePolicy():在某些情况下,管理员需要修改 ABACP。函数UpdatePolicy()实现了更新SDB的接口,更新的操作记录也将写入区块链。UpdatePolicy() 类似于 AddPolicy(),后者还调用应用程序接口的 put 方法来覆盖旧值。
DeletePolicy():ABACP 有过期时间,管理员可以取消它。有两种情况会发生删除。当管理员通过调用此函数主动删除合约时,会发生一种情况。另一种发生在CheckAccess()方法执行时,如果属性"endTime"已过期,则它将在PC中调用此功能以删除相关合约。如算法 3 所示。
QueryPolicy():它实现了数据库查询的接口,该接口提供了一个函数来获取其他链码的ABACP。我们选择 CouchDB 作为 SDB。虽然它是一个键值文档数据库,但CouchDB支持类似于mongoDB的富查询。在这种情况下,QueryPolicy() 支持通过 AS 或 AO 查询 ABACP。
2)设备合约
DC主要负责将设备的资源URL存储到SDB中。DC有2个输入参数{DeviceId,URL}。提供的功能如下。
AddURL():它使用 DeviceId 作为键,将 URL 用作要存储在 SDB 中的值。
GetURL():它根据 DeviceId 从 SDB 查询相应的 URL 值。
3)访问合约
它验证用户的 ABACR 是否与 ABAC 合约匹配。与PC一样,请求数据由用户的私钥签名,之后,AC验证签名,通过用户的公钥检查用户的身份。提供的方法如下。
Auth():与同名的PC方法类似,它使用用户的公钥验证请求并检查其身份的真实性。
GetAttrs():它在验证签名后解析属性数据字段。ABACR中只包含部分ABAC属性:{AS,AO},而AE需要由AC确定。最后,这些属性组合为{AS,AO,AE}。
CheckAccess():实现访问控制管理是核心功能,如算法4所示。首先,它获取 GetAttrs() 设置的属性。其次,它调用PC的QueryPolicy()方法,根据AS和AO查询相应的ABACP。如果返回的结果为空,则表示没有合约支持该请求,则会直接返回 403 错误(表示没有权限)。如果返回的结果不为空,则表示将获得一个或多个 ABACP。第三,它开始逐个判断请求的AE是否与ABACP的AE匹配,以及AP的值是否为1(代表允许)。如果所有属性都与合约匹配,则验证通过。最后,调用 DC 的 GetURL() 函数获取资源的 URL 并将其返回给用户,否则将返回 403 错误。
本节介绍实验过程和结果对比,以演示我们提出的fabric-iot的功能和性能。在第一部分中,我们列出了此实验中使用的硬件和软件。在第二部分中,我们展示了设置系统的过程以及基于它的访问控制的实现。在最后一部分中,我们给出了性能测试,比较实验和结果分析。
fabric-iot项目的源代码在GitHub上是开源的:GitHub - newham/fabric-iot: fabric-iot is a Blockchain Based Decentralized Access Control System in IoThttps://github.com/newham/fabric-iot
本文的实验是在两台PC上进行的。表 4 中列出了硬件和软件环境。
表4. 硬件和软件环境
实验分为三个部分。第一部分主要介绍fabric-iot的结构,以及初始化配置和启动步骤。第二部分介绍链码安装的过程。第三部分介绍了如何通过调用三种智能合约(PC、AC、DC)来实现基于ABAC的物联网资源访问控制方法。
1. Fabric-iot的结构和初始化
Fabric-iot 由表 5 所示的 8 种 Docker 节点组成。系统初始化的步骤如下。
Step1: 使用Hyperledger加密工具为节点(对等节点,排序器等)生成根证书和密钥对。
Step2: 将这些证书和密钥对移动到指定的目录,该目录将由 CA 的 docker 映像挂载,并在容器运行时生效。其他节点可以使用其签名向 CA 验证其身份。
Step3: 使用 configtxgen 工具生成一个创世块,用于打包包含节点和通道配置的交易。当fabric-iot启动时,创世块被写入区块链,确保整个系统中每个节点的身份信息不会被篡改。之后,其他节点的镜像将根据 docker 撰写的初始化配置启动。当所有容器成功运行时,对等节点将添加到通道中。
表5. 节点的 Docker 映像
2. 链码的安装和升级
网络设置成功后,我们开始安装链码。链码是通过使用超级分类账客户端执行命令来安装的。步骤如下。
Step1: 将链码的源代码复制到客户机节点挂载的目录中。
Step2: 运行命令将链码打包到通道中的对等节点。
Step3: 将每个编译的链码传输到其他对等节点并对其进行实例化。每个链码的副本将作为背书保存到单独的容器中。
升级过程类似于安装。但是,只有首先安装了链码的节点才会立即升级到新版本,其他对等节点只有在生成事务时才会同步升级。
3. ABAC的实施
有一些方法可以在Hyperledger Fabric平台中调用链码。外部人员可以使用客户端或SDK(支持Java,golang,node)在Hyperledger Fabric平台中调用链码。
Fabric-iot 使用节点 SDK 编写的客户端来调用链码。步骤如下。
要添加 ABAC 合约,请调用 PC 的 AddPolicy() 方法,如图 5 所示。
为了验证合约是否成功添加,我们调用PC.QueryPolicy()方法进行查询。查询中使用的密钥是根据以下公式获得的:sha256(UserId,DeviceId)→ key 查询如图6所示。
如果实际环境中的属性发生了更改或需要更新合约,则可以调用PC.UpdatePolicy()函数,如图7所示。删除操作可以通过PC.DeletePolicy()方法实现,如图8所示。 图 7. 在 PC 中调用 UpdatePolicy()的结果
如图 9 所示,设备可以通过调用 DC.AddUrl() 来报告资源地址,该 URL 通过 DeviceId 或 MAC 地址与合约相关联。
可以通过调用 DC.GetURL() 来查询 URL,如图 10 所示。
收到用户的请求后,AC 将调用 CheckAccess() 方法。它首先调用PC根据AO和AS查询相关合约,然后检查AE和AP属性是否符合条件。如果满足条件,则证明满足ABAC的属性约束。最后,调用 DC 的 GetURL() 方法来获取设备资源 URL。如果不满足属性条件,将返回错误,如图 11 所示。
图 11. 在 AC 中调用 CheckAccess()的结果
C. 结果和比较
为了测试fabric-iot系统的性能,通过模拟多线程客户端对系统的并发访问,设计了两组比较实验。在第一组实验中,我们计算了具有不同并发请求数的PC,AC和DC的处理时间。虚拟客户端的数量设置为 50、100、200、500、1000。统计结果如图 12–17 所示。从数字中可以看出:
图 12. 不同数量的并发请求的 PC 成本时间
图 15.不同并发请求数下DC平均成本时间的趋势
图 16. 不同数量的并发请求时 AC 的开销时间
图 17.不同并发请求数下AC的平均成本时间趋势
在第二组实验中,我们使用MQTT消息队列,根据Hyperledger Fabric中的共识机制原理对交易进行排序,模拟fabric-iot的共识算法。我们用golang语言实现了PoW共识算法,并设置了合理的难度以适应实验环境。我们通过比较不同节点数下fabric-iot和PoW共识机制的成本时间和成本时间来测试分布式系统的数据一致性效率。实验中的节点数设置为 5 到 100。结果如图18所示。从图中可以看出,在保证PoW安全的难度下,在fabric-iot中达成共识的成本时间远远小于PoW。
图18. 比较fabric-iot和PoW之间的共识速度
以上两组实验可以证明,fabric-iot在大规模请求环境下能够保持高吞吐量,在分布式系统中能够有效达成共识,保证数据的一致性。
本文将区块链技术与ABAC模型相结合,利用去中心化、防篡改、可追溯等区块链技术的优势,解决了传统基于集中式设计的门禁方法难以满足物联网门禁要求的问题。首先,根据物联网设备的实际生产数据,我们提出了一个设备权限模型。其次,根据ABAC模型,我们实现ABAC合约管理,通过实现智能合约应用来保证设备资源的访问安全。此外,还设计和实现了基于Hyperledger Fabric的名为fabric-iot的开源访问控制系统。本系统采用分布式架构,可为物理网络提供细粒度、动态的访问控制管理。最后,详细描述了区块链网络建设、链码安装、智能合约调用等步骤,实验结果令人信服。最重要的是,本文为其他研究人员开展相关研究提供了实用的参考。
今后的工作可以在以下几个方面加以改进: