一种基于属性的区块链物联网分布式访问控制方法与流程

文档序号:20039034发布日期:2020-02-28 11:40阅读:355来源:国知局
一种基于属性的区块链物联网分布式访问控制方法与流程

本发明属于电子信息技术领域,涉及一种基于属性的分布式访问控制方法。该方法是在基于物联网属性的访问控制的基础上,融合区块链技术和智慧合约系统来实现安全高效的物联网分布式访问控制。



背景技术:

随着物联网技术的飞速进步,物联网与我们生活的联系越来越密切。然而,物联网在给我们带来更多便利的同时,也增加了我们安全和隐私方面的风险。由于物联网的运作环境规模庞大、开放性高,且每个设备节点都可能会为其他设备节点提供服务,所以传统的集中式访问控制方法不适合分布式的物联网系统。为了构造出一种安全可靠的分布式访问控制方法,研究学者们纷纷将目光投向了区块链技术并且提出了一些有效的措施。这些措施主要可分为三种方案,但这三种方案都有各自的缺点和不足。第一种方案是利用区块链技术设计出一个访问控制的算法,但是这种方案仅仅确保了访问策略的安全,却忽视了区块链可以提供安全可靠的运行环境的能力。第二种方案是在访问控制方法中应用区块链锁定脚本的计算能力,可是我们需要注意的是锁定脚本的计算能力是有限的。第三种方案是基于以太坊智慧合约利用访问控制列表去实现访问控制,但是后期的扩展和维护对于这种利用列表的方式将会显得比较困难和麻烦。总的来说,这些方案没有充分利用物联网设备的计算和存储能力去维持块链的安全。



技术实现要素:

本发明设计了一个基于属性的分布式访问控制框架,将每个物联网设备看做一个的账户、访问控制请求看做区块链交易,利用区块链技术来保证访问控制框架的安全,以此来实现安全的基于属性的物联网分布式访问控制方法。

本发明是通过以下技术方案来实现:

在智慧合约上基于属性的分布式访问控制框架,包括:

主体合约,管理合法制造商的账户、物联网设备的账户以及物联网的所有主体属性(sa)数据,并提供相应的应用程序二进制接口(abi)。

客体合约,与主体合约类似,负责管理所有物联网设备的客体属性(oa),提供相应的应用程序二进制接口(abi)。

多个策略合约,通过一个用户创建并且在访问控制合约中必须绑定一个用户的设备。所有的pc可以符合多个物联网设备,但是只能有一个拥有者,并且只有这个拥有者才有权对策合约略进行添加和删除操作。该策略合约提供管理客体属性信息的应用程序二进制接口。

访问控制合约,用来判定请求是否符合用户自定义的策略,返回判定结果并履行某些义务。

在区块链上利用基于属性的分布式访问控制框架实现可靠的访问控制,包括如下步骤:

步骤1:合法物联网设备制造商通过主体合约为其各自设备进行注册,并且设置相应的制造商属性。设备拥有者通过主体合约和客体合约未设备账户设置主客队属性和客体属性,通过策略合约设计控制策略,通过访问控制合约将控制策略与物联网设备绑定。

步骤2:物联网设备提交访问请求。如果是超轻量节点,则提交给网关或网关代理。

步骤3:网关在智能合约中运行的访问控制程序,访问控制合约(acc)在收到请求后,将从主体合约(sc)、客体合约(oc)和区链中获取属性,然后从多个策略合约(pcs)获取策略,最后做出授权判断。若授权访问,则将交易广播到网络中,

步骤4:接收交易的节点将在自己的区块链上运行访问控制来验证交易。如果这个节点是矿工节点,并且此节点竞争到了一个新块,那么矿工节点就将交易写进新块中,然后广播这个新块。

步骤5:网络上的其他节点验证新块中事务的合法性。如果大多数节点都确认了新块,并将附加到最长法律链的末尾,则访问控制将生效。

本发明设计出了基于属性的分布式访问控制方法(adac),这种方法结合了区块链技术和物联网设备属性来提高访问控制的可靠性。换句话说,该分布式访问控制方法是在基于物联网属性的访问控制的基础上融合区块链技术和智慧合约系统来实现安全高效的物联网分布式访问控制。

本发明汇集了基于属性的访问控制、区块链和智慧合约的优点。基于属性的访问控制满足以主体、客体和环境的属性为基础的命令式和自主式访问控制的需求。区块链技术能够通过设备本身的请求来验证访问权限,而不需要通过一个集中的实体来验证。智慧合约可以确保访问控制程序的正确执行。通过融合以上三个优点,本发明可实现可靠的、安全的和可扩展的分布式访问策略。

附图说明

图1为典型性的物联网场景。

图2为区块链上分布式访问控制的流程。

图3为基于智慧合约系统。

图4为仿真实验场景。

图5为subject1账户的请求返回结果。

图6为object1账户的请求返回结果。

图7为块链所存储的访问记录。

具体实施方式

本发明是在物联网环境中实现一种基于设备属性的分布式访问控制方法,常见的的物联网场景如图1所示。在此物联网场景中有三类实体,分别是物联网设备、网关和服务设备。其中如移动手机、计算机和智能tv的这些设备可以直接访问网络,而一些轻量级的物联网设备就需要专用的物联网网关设备。按照设备的计算和存储能力我们将设备分为三类,分别是矿工节点(minernode)、轻量节点(lightnode)和超轻量节点(ultralightnode)。矿工节点是一种具有足够计算和存储能力的设备(如服务器、台式机等),它不仅可以提交访问控制请求,运行访问控制程序,还可以负责存储访问控制信息,维护访问控制框架的安全性。轻量是计算和存储能力有限的设备(如手机、智能电视),它们只能存储部分访问控制信息并发送请求并运行访问控制程序。超轻量节点是一种计算存储资源非常有限的设备,例如物联网传感器,它需要一个特殊的网关来代理访问控制。

本发明方法的实现分为两大部分,一部分是在区块链上实现可靠的访问控制,另一部分是在智慧合约的基础上实现基于属性的分布式访问控制,两部分具体如下。

a、在区块链上实现可靠的访问控制。

在物联网场景中,我们可以将每个设备视为一个帐户(账户是区块链中用户的身份,帐户由一对公钥和私钥组成,其中公钥将用作用户的帐户地址,私钥通常用于证明帐户的所有权),并将每个访问控制请求视为一个交易(通过帐户签名发送到另一个帐户的数据包称为交易,由于数字签名算法的存在,每个交易都是不可否认的),矿工节点可以看做是运行挖矿程序(寻找新块的程序。运行这个程序的节点称为矿工,它通过解决一个复杂的数学问题得到添加新块的权利,然后将新块广播出去,其他节点验证新块的合法性之后,将这个新块添加到块链上)的以太坊客户机,轻量节点可以视作轻量簇成员(轻量簇成员仅存储每个块的块头信息。当一个轻量簇成员需要验证一个事务时,它通过网络从附近的节点请求默克尔认证和事务数据,它只需要很小的存储空间和很低的计算能力,这意味着手机等移动设备可以以分布式方式访问区块链)。因此,区块链的安全性可以确保分布式访问控制的可靠性。在区块链上的访问控制流程如图2所示,分为以下步骤。

步骤1(提交访问请求):物联网设备提交访问请求。如果是超轻量节点,则提交给网关和网关代理。

步骤2(访问控制事务):在智能合约中运行的访问控制程序广播新事务(传输到合约地址)。

步骤3(交易记录到新块中):接收交易的节点将在自己的区块链上运行访问控制来验证交易。如果这个节点是矿工节点,并且此节点竞争到了一个新块,那么矿工节点就将交易写进新块中,然后广播这个新块。

步骤4(选择最长链):网络上的其他节点验证新块中事务的合法性。如果大多数节点都确认了新块,并将附加到最长法律链的末尾,则访问控制将生效。

b、在智慧合约的基础上实现基于属性的分布式访问控制

智能合约是一个带有相关代码和数据的特殊帐户,存在于以太坊上。我们可以通过每个智能合约的帐户地址和应用程序二进制接口(abi)与合约进行交互。如果与合同的交互改变了区块链上的数据,将生成一个交易。将本发明基于的智慧合约设计为四个子合约,分别是主体合约(subjectcontract)、客体合约(objectcontract)、多个策略合约(multiplepolicycontracts)和访问控制合约(accesscontrolcontrast)。主体合约(sc)和客体合约(oc)分别负责管理主体属性和客体属性,多个策略合约(pcs)负责管理访问控制策略,访问控制合约(acc)通过访问属性和策略来执行授权判断。智慧合约系统如图3所示,基于此的访问控制过程如下。访问控制合约(acc)在收到请求后,将从主体合约(sc)、客体合约(oc)和区链中获取属性,然后从多个策略合约(pcs)获取策略,最后做出授权判断。每一个子合约具体内容如下。

1、主体合约(sc):主体合约管理合法制造商的账户、物联网设备的账户以及物联网的所有主体属性(sa)数据。本合约提供的应用程序二进制接口(abi)如下:

⑴addmanufacturer():此abi接受制造商的address属性,并将此address添加到合法制造商列表中。此abi使用智能合约中的msg:sender变量和require()函数来确定用户是否是sc的所有者。区块链中的每个交易都是通过一个账户签署的,所以msg:sender在智能合约中记录当前交易的发起人。区块链中的每个交易都是通过一个账户签署的,所以msg:sender在智能合约中记录当前交易的发起人。当condition为真时,require(condition)将继续执行代码,否则,它将引发异常并取消交易。在智能合约中,这是一个非常常见的权限控制,因此当它再次出现时,不会有额外的解释。

⑵addsubject():此应用程序二进制接口负责注册新的物联网设备。同样,我们使用msg:sender和require()来确保只有合法的制造商才能注册他们的设备。因此,只有调用者的addresss属性属于合法制造商时,此次调用才会成功,否则会失败。

⑶addobattr():客体对象调用此abi为其指定的主体设置主客对属性(soa)。它接收一个物联网设备的address属性和一个描述属性的字符串。类似地,我们使用msg:sender来确保每个人都不会被过度使用。

2、客体合约(oc):本合约与主体合约类似,负责管理所有物联网设备的客体属性(oa)。本合约提供的应用程序二进制接口(abi)如下:

⑴addobattr():这个abi接受一个物联网设备的address属性和一个描述客体属性(oa)的字符串,然后它将客体属性添加到这个设备中。

⑵deleteobattr():该abi接收一个物联网设备的address属性,并删除该设备的客体属性。

⑶getattr():该abi接受一个物联网设备的address属性并返回这个物联网设备的所有客体属性(oa)

3、policycontract(pc):这个合约通过一个用户创建并且在访问控制合约中必须绑定一个用户的设备。所有的pc可以符合多个物联网设备,但是只能有一个拥有者,并且只有这个拥有者才有权对策合约略进行添加和删除操作。该策略合约提供管理客体属性信息的主要应用程序二进制接口如下:

(1)addpolicy():该abi会在一个用户的设置中添加一个新的策略,这个策略接受描述资源、动作、责任和算法的四个字符串作为参数,并且将这个新的策略添加到策略列表中。

(2)addrule():该abi负责为策略添加一个新的规则。它接受六个字符串作为参数,这六个字符串分别代表资源、动作、主体属性、客体属性、环境属性和结果。

(3)delepolicy():该abi接受资源和动作的两个字符串为参数,并且删除响应的策略。

(4)delerule():该资源接受资源、动作、主体属性、客体属性、环境属性和结果这六个字符串作为参数,并删除响应的规则。

4、accesscontrolcontract(acc):访问控制合约用来判定请求是否符合用户自定义的策略,返回判定结果并履行某些义务(例如记录区块链的历史记录)。该合约具有的应用程序二进制接口(abi)如下:

(1)initialization():此abi接收主体合约和客体合约的address属性作为参数,并将其记录在访问控制中。这是为了与主体合约和客体合约交互。为了安全起见,本合约拥有者只能设置一次。

(2)setobjectpolicyaddress():此abi负责将用户自己的pc地址绑定到物联网设备的地址。它需要两个参数:一个pc地址和一个物联网设备地址。同样,我们使用msg:sender来确保只有当用户使用iot地址时交易才会生效。

(3)accesscontrol():此abi接收主体地址、客体地址和来描述资源和操作的两个字符串作为参数,用于执行访问控制。

基于上述内容,我们通过一个案例来进一步阐述次基于智慧合约的分布式控制访问方法。此次实验所用到的硬件和软件如图4所示,由两台笔记本电脑组成,一台作为轻量节点,另一台作为网关代理节点。本次实验在由以太坊官方提供的ropsten测试网络上进行,在这个网络中,有许多完整的节点可以保存完整的区块链信息并进行挖掘工作,因此我们只需要模拟我们的轻节点和网关节点。我们使用笔记本电脑作为光节点,使用笔记本电脑作为网关节点来代理其他物联网设备。为了方便我们的账户管理和与智能合约的交互,我们在两台笔记本电脑上都安装了metamask轻量级钱包。我们还使用nodejs开发了基于javascript和html的浏览器客户端(abac-dapp)。该客户端分为四个接口:accesscontrol.html、object.html、policyset.html、manufacturer.html,简化了调用合约函数的繁琐步骤

此次实验总共有5个人账户:合法制造商帐户m、subject1、subject2与object1三个物联网设备帐户和一个策略合约帐户p。具体的实现过程如下:

第一步:合法制造商m通过manufacturer.html在主体合约(sc)中调用addsubject()方法,分别为其设备subject1、subject2注册和设置ma。

subject1的ma为:[type:remotecontrol][mac:00efefefefef]

subject2的ma为:[type:remotecontrol][mac:00da7eef12ef]

第二步:object1的所有者通过在object.html中调用客体合约(oc)的addobattr()函数为设备分配客体属性(oa),并通过在object.html中调用主体合约(sc)的addobattr()函数为subject1和subject2分配主客对属性(soa)。

object1的oa为:[type:tv][location:living]

subject1的soa为:[group:owner][role:parent]

subject2的soa为:[group:owner][role:chlidren]

第三步:object1的所有者通过在accesscontrol.html中调用访问控制合约(acc)的setobjectpolicyaddress()函数将策略合约p绑定到object1,并通过在policy.html中调用策略合约(pc)的addpolicy()和addrule()函数添加策略和规则。

策略为:[resource:switch][action:on][duty:record][algorithm:denyoverrides]

规则1(rule1)为:

subjectattribute:[group:owner][role:parent][type:remotecontrol]

objectattribute:[type:tv][location:livingroom]

environmentattribute:[time:*-*]

result:allow

规则2(rule2)为:

subjectattribute:[group:owner][role:chlidren][type:remotecontrol]

objectattribute:[type:tv][location:livingroom]

environmentattribute:[time:21:0023:00]result:deny

可以将此规则1理解为:在所有者中,家长拥有的所有远程控制设备都可以随时打开客厅电视。同样,本规则2如下:所有儿童拥有的远程遥控设备在晚上9点到11点之间不能打开客厅电视。

第四步:subject1和subject2通过在accesscontrol.html中调用访问控制合约(acc)的accesscontrol()函数来访问object1的开关

当subject1发出开启object1开关的请求时,根据相应的规则,我们知道最终的访问结果应该是允许的。同样,当subject2想要打开开关时,如果环境变量time在21:00到23:00之间,则返回允许,否则返回notapplicable。subject1和object1的请求返回结果分别如图5和图6所示。块链所存储的访问记录如图7所示。

从此次实验可以看出,本发明对主体和客体的请求都能够返回正确的结果。基于属性的分布式访问控制通过设备的属性抽象化它们之间的共性,从而实现更灵活的访问控制。更重要的是,我们通过使用轻量簇成员来降低对物联网设备存储和计算能力的要求,这就允许我们在块链上运行如智能手机等轻量级节点。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1