APP下载

基于区块链上策略密文检索的属性访问控制方案*

2024-01-11陈立全贾继广王泽雨于坤良

密码学报 2023年6期
关键词:请求者访问控制密文

陈立全, 贾继广, 王泽雨, 于坤良

东南大学 网络空间安全学院, 南京210096

1 引言

物联网、大数据等新兴技术的飞速发展使得人们的生活方式发生了巨大的变化.在信息时代中, 数据是技术发展的关键.然而, 个人掌控的数据往往是有限的, 因此数据的共享聚合已经成为了不可避免的趋势.近些年来, 共享数据的前景对人们的吸引力也越来越大[1], 数据的共享、收集、分析、存储也催生出了越来越多的实体[2,3].而在数据共享的过程中, 能够防止非法用户恶意访问和合法用户越权访问的访问控制技术是保护数据安全共享的重要手段之一.

如今的访问控制系统虽然可以实现对客体资源的权限控制, 但大多引入了中心实体概念.系统在该实体中存储访问控制策略并进行授权决策.在这个基础上, 为了保证系统的安全性, 中心实体的可信性需要由法律来约束.然而, 中心化的系统往往容易遭受到黑客的攻击, 并且随着业务量的增加, 中心化实体的存储能力、决策效率也会逐渐接近瓶颈.除此之外, 过度依赖中心实体也使得系统的扩展性受到限制, 从而影响系统的性能.由于区块链技术具有去中心化、不可篡改、难以伪造的特性, 因此将区块链技术引入访问控制系统, 为中心化问题提供了最佳的解决方案.另一方面, 访问控制策略作为访问控制技术的重要组成部分之一, 定义了对访问请求的行为进行验证、授权和记录的方式.而传统访问控制技术中的访问控制策略存在中心化明文存储问题, 即便是去中心化存储后, 以明文存储的隐私策略也易收到攻击[4].为了增强策略的隐私性, 系统应该利用加密技术对访问控制策略进行主动保护, 以避免攻击者获取存储在系统中的访问控制策略.

针对访问控制模型中心化问题,在物联网领域,史锦山等人[5]提出了基于区块链的物联网(IoT)访问控制框架(blockchain based access control frame for Internet of things, BBIAC).该框架使用ABAC 模型中的属性作为决策要素, 同时利用区块链进行数据的存储和运算.杜瑞忠等人[6]提出了一种基于区块链的分布式访问控制方法(distributed architecture based on hierarchical blockchain, DAHB), 引入层级概念, 以ABAC 模型为基础, 利用区块链技术实现IoT 设备的灵活、动态访问.Figueroa 等人[7]着重解决设备射频识别(radio frequency identification, RFID) 技术的安全访问问题.该方法利用ABAC 模型并结合区块链技术在RFID 系统中实现了访问控制模型, 并将系统部署在本地以及测试网络环境中, 验证了系统的可行性.Dorri 等人[8]引入了token 来缓解区块链存储时间开销大的问题.Ma 等人[9]的基于区块链的分布式密钥管理架构(blockchain-based distributed key management architecture, BDKMA)方案可以实现跨域访问.Novo 等人[10]提出一种基于区块链技术的物联网全分布式访问控制的新型架构,该模型在可伸缩性方面做了优化.Lin 等人[11]提出了一个由四个有形层组成的分层框架, 该方案可以对资源实现细粒度的访问.上述方案中虽然引入区块链技术来避免访问控制模型过度依赖中心化, 但是框架中访问控制策略以明文存储于链中, 没有考虑到策略的隐私保护性问题.同时, 在这些方案中, 访问控制策略和客体资源的存放会给区块链带来巨大的存储开销.

现有的一些基于区块链的访问控制方案将一些敏感信息,如用户角色、用户属性直接明文存储到链上,使用智能合约来执行访问策略, 虽然使用区块链解决了传统访问控制方案中的单一节点故障问题和信任需求问题, 但是对于访问控制过程中, 用户的隐私泄露问题没有进行解决, 该类方案中, 任意接入区块链的节点都能获取链上存储的所有敏感信息, 为了进行隐私保护, 需要引入一些技术如可搜索加密、环签名、同态加密、属性基加密、属性基签名等.其中可搜索加密技术在复杂的多用户多属性场景下可以通过公私钥对实现明文的加密和密文检索功能, 适用于更加丰富的场景.为了解决隐私保护问题, Do 等人[12]设计了一个利用区块链技术来提供一个安全的分布式数据存储与关键字搜索服务的系统, 该方案使用区块链作为链下数据存储访问、权限授予和搜索令牌生成的主干, 可以使数据所有者对需要在远程加密数据集上搜索部分有用信息的数据请求者进行权限授予.Feng 等人[13]将分层属性加密与线性秘密共享相结合, 提出一种基于可搜索属性加密的区块链数据隐私保护控制方案.这两个方案都结合了区块链和可搜索加密技术,解决了数据隐私问题, 但没有引入基于属性的概念, 不能实现对资源进行细粒度的访问.Zhang 等人[14]提出了一种用于物联网设备授权访问的访问控制模型.该方案基于属性并结合区块链技术, 但引入中间认证节点作为代理接受并处理设备的认证请求, 这使得该模型扩展性强且可满足高并发要求.同时该方案对授权过程以及结果进行了加密, 起到了一定的隐私保护作用.然而, 该方案中区块链只起到了存储访问记录的作用, 并没有完全摆脱对中心化实体的依赖.

综上所述, 目前区块链与ABAC 模型融合的难点和方向如下: 第一, 以往两种技术融合时, 有的侧重于应用区块链的去中心化能力, 摆脱第三方的依赖, 但忽略了访问控制模型中的隐私保护问题.有的侧重于利用密码技术保护模型中的数据隐私, 而区块链仅作为记录工具, 对第三方还存在依赖, 需要一种可以既保护模型数据隐私又可以充分利用区块链特性的方案; 第二, 区块链的存储能力有限, 不能应对大数据量的存储.客体资源和访问控制策略都存放于链上可能会使得区块链的负担较重, 新的方案应该尽可能地降低区块链的存储压力; 第三, 考虑到模型的应用场景, 在方案设计时应兼顾考虑ABAC 模型的细粒度、访问效率等问题.为了解决这些问题, 本方案使用公钥可搜索加密技术对访问控制策略进行加密, 生成的策略密文占据很小空间, 在保护了策略隐私的同时缓解了区块链的存储压力.同时, 使用区块链系统的智能合约会对策略密文进行判别, 以此兼顾ABAC 模型的细粒度.

本文第2 节给出了BPCS-ABAC 的系统模型和设计目标, 并详细阐述了BPCS-ABAC 的方案构造,包括方案的智能合约设计以及方案的运行流程.第3 节从时间和空间两个角度, 仿真分析了BPCS-ABAC中的关键步骤, 包括访问控制策略密文生成时间、陷门匹配时间、索引搜索时间、策略密文空间消耗、陷门请求空间消耗等, 并与ABAC 和其他方案进行对比.第4 节总结全文.

2 预备知识与定义

2.1 区块链技术

区块链技术的本质是一种去中心化的分布式技术, 通俗来说, 是多个数据区块基于一种可信共识机制,通过时间顺序连接起来的链式结构, 结合现代密码学技术, 拥有不可篡改、匿名性、可追溯、不可伪造等特性.

区块链技术发展至今, 大体可分为区块链1.0 时代和区块链2.0 时代, 其技术架构图如图1 所示,图1(a)为区块链1.0 时代架构图, 图1(b)为区块链2.0 时代架构图.借助传统网络分层方式, 可将区块链技术分为应用层、激励层、共识层、网络层、数据层.在区块链1.0 时代, 作为一种分布式去中心化架构下保证数字货币交易可信的技术方案, 区块链利用共识机制和P2P 网络技术实现区块链数据传输、验证和冗余备份, 利用带时间戳且加密的链式区块结构存储数据, 来保证不可篡改及可追溯性[15].随着技术的不断发展, 区块链进入2.0 时代, 区块链被当成是一种分布式、去中心化的计算与存储架构, 提供了链上脚本技术, 以以太坊智能合约为代表, 实现了各种顶层复杂应用场景的业务逻辑, 为区块链的可编程性提供了基础, 进一步加速了区块链在不同领域的应用[16–21].

图1 区块链技术架构图Figure 1 Blockchain technology architecture diagram

2.2 智能合约技术

智能合约是“执行合约条款的计算机化交易协议”[22], 合约的字节码和交易都存储在区块链上, 对所有用户可见.以太坊主要有两种账户类型, 一类是外部拥有账户(external owned account, EOA), 一类是智能合约账户, 这两类账户类型都使用20 字节的地址作为其在以太坊网络内的唯一身份标识.EOA 由一对公私钥对进行控制, 用于管理以太坊, 并通过发送交易与智能合约进行互动.合约账户则是由没有密钥的代码控制, 主要用于实现不同的功能要求和记录合约状态的变化.与EOA 账户不同的是, 智能合约账户不能发送交易, 但可以通过发送消息调用来调用其他的智能合约.智能合约的创建是通过一个外部账户发起一个转账交易到0x0 的地址.其中转账金额为0, 但是要支付Gas 费.当一个全节点打包交易时,有一些交易是对智能合约的调用, 那么全节点应先执行完智能合约后再进行挖矿.智能合约在执行过程中,任何状态的修改都只是对全节点本地的状态树的修改, 只有当该全节点获得记账权发布一个区块时才能获得Gas 费, 其他节点不获得Gas 费, 并且全网的矿工节点必须更新自己本地的全节点的状态信息, 最终形成全网共识.由于以太坊是一个只添加的分布式账本, 一旦智能合约被部署到区块链上, 即使检测到错误,也不可以对已部署的智能合约进行修改.以太坊区块链主要使用以太坊虚拟机(EVM) 来运行智能合约.EVM 是一种基于堆栈的架构, 它提供了一个分离的执行环境, 以保护合同执行不受外部攻击, 避免恶意合同影响整个系统.智能合约的执行取决于其代码, 例如, 如果一个合同不包含可以转移Ethers 的功能, 即使合约的创建者也不能提取Ethers.智能合约一旦被部署到区块链网络中, 只要整个网络存在, 除非执行自毁功能, 合约就会一直存在.自毁是合约的一种特殊功能, 如果执行自毁功能, 合约将消失, 其余额将转移到一个特定的地址中.

2.3 基于属性的访问控制模型

基于属性的访问控制(attribute-based access control, ABAC) 模型的提出解决了开放式环境下的访问控制需求, 该模型授权较为灵活, 同时能实现细颗粒度的访问控制.

ABAC 模型中的主要实体为资源请求者、被访问资源、操作以及环境.在模型中这些实体的表现形式都为属性, 分别通过主体属性、客体属性、权限属性以及环境属性来描述, 根据不同的访问需求从而灵活设置属性间的关系.ABAC 模型的示意图如图2 所示.

图2 ABAC 模型示意图Figure 2 ABAC system model

ABAC 模型细化为如下几个部分: 用户集、策略实施点(policy enforcer point,PEP)、资源集、策略裁决点(policy decision point, PDP)、策略管理点(policy arrangement point, PAP)、属性权威(attribute authority, AA).

用户集发送原始请求, 首先经过策略执行点(PEP) 后, 由属性权威(AA) 负责提供主体、客体和环境属性.随后PEP 构造出基于属性的访问请求, 并再次经过PEP 发送给策略裁决点(PDP).紧接着PDP从策略管理点(PAP)处得到策略信息,并对此属性访问请求进行判定并发送结果至PEP 处,最终由PEP执行判定结果.

2.4 公钥可搜索加密技术

公钥可搜索加密技术首先由Boneh 等人[23]提出, 与对称可搜索加密技术不同之处在于该方案使用双线性对构造生成密钥, 运算效率较低, 但数据发布者和请求者不需要事先进行密钥协商, 更加适用于数据共享的场景.该算法一般包括以下5 个步骤:

(1) 初始化Params=Setup(k): 输入安全参数k, 输出全局参数Params.

(2) 密钥生成(pk,sk)=KeyGen(Params): 输入参数Params, 生成数据请求者公钥pk 和私钥sk.

(3) 密文和索引生成(Cw,Iw) = PEKS(w0,pk): 输入数据请求者的公钥pk 和关键词w0, 输出关键词密文Cw和密文索引Iw.

(4) 陷门生成Tw=Trapdoor(sk,w1): 数据请求者的私钥sk 和输入关键字w1, 输出陷门Tw.

(5) 匹配搜索算法b=Test(pk,Cw,Tw,Iw): 输入数据请求者的公钥pk、密文Cw、陷门Tw和密文索引Iw, 将陷门Tw与密文索引Iw进行匹配, 匹配成功后比较密文中的关键字w0=w1, 如果相等, 输出1, 否则输出0.

公钥可搜索加密技术方案如图3 所示, 包括云服务器、数据发布者和数据请求者三个实体.

图3 公钥可搜索加密方案示意图Figure 3 Schematic diagram of public key searchable encryption scheme

3 BPCS-ABAC 方案

3.1 设计目标

在以往的传统访问控制模型中, 所有的访问控制策略都存于一个权威实体, 并由其来实现决策授权,中心化问题严重, 所以本文所提出的方案希望引入区块链来解决此问题; 同时, 由于访问控制策略是系统安全的关键, 并且区块链上的数据公开透明, 如何保护访问控制策略的隐私性也是重点关注的问题; 与此同时, 还需要考虑优化数量巨大的访问控制策略所消耗的空间, 并使其能够被合理存储.因此, 本方案应具有如下设计目标:

(1) 利用区块链的去中心化、不可篡改等特性, 解决传统访问控制模型中依赖中心化实体的问题; 同时交易数据被存储在区块链上, 方便了溯源工作的进行.

(2) 针对访问控制策略的隐私保护性的问题, 利用公钥可搜索加密技术特性, 将访问控制策略进行加密后上链存储, 相比于明文存储访问控制策略的访问控制模型, 进一步提升访问控制方案的安全性, 避免被攻击者找到漏洞, 并对方案的安全性进行证明.

(3) 保证方案的存储高效性, 区别于将数量巨大的客体资源和访问控制策略都存放于链上, 仅将访问控制策略高效地存储在区块链上, 降低区块链的存储压力, 为访问控制策略提供一个安全有效的存储空间.

3.2 系统模型

本文提出新的BPCS-ABAC 系统模型如图4 所示.本方案将传统的ABAC 模型与区块链相融合,使用区块链的智能合约实现ABAC 中属性权威、策略管理点和策略决策点的功能, 主要包括资源请求者(resource requester)、资源发布者(resource publisher) 和区块链(blockchain) 系统.

图4 提出的BPCS-ABAC 系统模型Figure 4 Proposed BPSC-ABAC system model

资源请求者: 实质上是BPCS-ABAC 方案的主体, 可以是用户、物联网设备等.资源请求者发送资源访问请求, 拥有密钥生成节点生成的公私钥以及作为身份Id 的区块链节点账户信息, 同时负责构造陷门,将生成的陷门发送至区块链进行陷门匹配.

资源发布者: 实质上是BPCS-ABAC 方案的客体, 作为客体发布访问控制策略和客体资源, 拥有作为身份Id 的区块链的节点账户信息, 同时负责使用资源请求者公钥加密访问控制策略并将策略密文上传至区块链.

区块链: 本方案采用区块链应用模式中的联盟链架构进行构造, 联盟链具有部分去中心化的特点, 由多个组织或机构共同管理, 在保留公有链的大部分特征, 如建立节点间的信任、保证链上的数据不易被篡改等特征的条件下, 还加入了认证机制, 只有经过认证的节点才准许加入联盟链内.本方案普通矿工节点通过POW 机制进行共识, 除了普通的矿工节点外, 还有密钥生成节点, 由主要负责系统的初始化, 保存系统主密钥, 将生成的用户公私钥通过安全信道响应给用户.同时区块链系统还代替ABAC 中属性权威(AA)、策略管理点(PAP) 和策略裁决点(PDP) 的功能.其中, 此处的AA 只用来存放主客体属性、动作属性和环境属性之间的关系; PAP 执行访问控制策略密文的管理; PDP 负责访问控制权限的授予.区块链系统中主要存储了属性信息、资源发布者所上传的策略密文、资源请求者发送的陷门请求, 同时主要负责策略搜索、陷门匹配、访问权限授予等工作.

3.3 方案构造

3.3.1 智能合约构造

此处对BPCS-ABAC 方案中涉及到的智能合约的伪代码进行了说明和分析.

(1) 属性权威合约设计

属性权威(attribute authority, AA) 本质上是存放了主体属性、客体属性、动作属性和环境属性相互之间关系的主体.BPCS-ABAC 方案中的AA 是基于智能合约实现的, 代替传统访问控制技术中的AA提供属性查询.该智能合约具体实现的伪代码如算法1 所示.

AA 智能合约算法流程描述如下:

①接收并解析原始访问请求, 得到进行属性请求构造的元素.

②遍历区块链存储节点中存储属性类事务的数据块.

③依次将存储节点中的属性与原始请求中的各项元素匹配, 得到对应关系的属性.④将各项相关属性组成属性请求AAR, 作为响应返回.

算法1 AA 智能合约Input: 原始请求(NAR), 区块链存储节点数据BlocksData Output: 相关的基于属性的请求(AAR)1 NarDict = narRequestParser(NAR); this = currentBlocksData;2 for i = 1 to blocksData.length do 4 for k = 1 to NarDict.length do 3 for j = 1 to this.length do 5 if match(NarDict[k]) then 6 AAR.add(this.transaction.attribute); continue; //组成属性请求7 end end 9 end 10 end 11 return AAR.8

(2) 策略管理合约设计

BPCS-ABAC 方案中的策略管理点(policy arrangement point, PAP) 主要采用智能合约实现, 代替PAP 实现策略管理, 具体实现的伪代码如算法2 所示.

PAP 策略管理算法流程描述如下:

①接收并解析策略搜索索引请求, 得到进行搜索所需要的元素.

②遍历区块链存储节点中存储访问控制策略密文事务的数据块.

③根据请求者身份RRID 以及客体资源OID 找到对应的策略密文,加入到Correlate_CPolicy_Set集合中.

④将Correlate_CPolicy_Set 集合返回给PDP 进行策略判决.

算法2 PAP 智能合约Input: 策略搜索索引IndexPolicy, 区块链存储节点数据BlocksData Output: 相关策略集Correlate_CPolicy_Set 1 (RRID, OID) = elementExtraction(IndexPolicy); this = currentBlocksData;2 for i = 1 to BlocksData.length do 4 if RRID == this.data.RRID and OID == this.data.OID then 3 for j = 1 to this.length do 5 Correlate_CPolicy_Set.add(this.data.CPolicy) //密文加入策略集合end 7 end 8 end 9 return Correlate_CPolicy_Set.//返回策略集合.6

(3) 策略判决合约设计

BPCS-ABAC 方案中的策略裁决点(policy decision point, PDP) 主要采用智能合约实现, 代替传统访问控制技术中的PDP 实现访问结果判定的功能.具体实现的伪代码如算法3 所示.

PDP 决策算法流程描述如下:

①输入由属性请求构成的陷门Tr元素和经过索引筛选得到的访问控制策略密文的集合.

②遍历策略密文集合, 利用trapDoorTest 函数依次判断与属性请求是否匹配, 如果匹配, 则将策略PID 加入到Permit 集合, 不匹配且符合属性约束要求的将策略PID 加入到Deny 集合, 否则加入到Unknown 集合.

③遍历Permit 集合, 如果存在元素说明匹配成功, 返回Permit, 允许访问; 否则, 遍历Unknown 集合, 如果不存在元素说明匹配失败, 返回Deny, 拒绝访问; 如果前两种情况都不符合则都归于Unknown情况, 返回Unknown.

算法3 PDP 智能合约Input: 由属性访问请求AAR 构成的陷门Tr, 访问控制策略密文集CPolicy_Set Output: 判决结果Result 1 Permit_Result_Set = null; Deny_Result_Set = null; Unknown_Result_Set = null;2 for i = 1 to CPolicy_Set.length do Permit_Result_Set.add(CPolicy_Set[i].PID); //添加permit 集合元素6 end 7 else if result = deny then 3 result = trapDoorTest(T, CPolicy_Set[i]);4 if result = permit then 5 Deny_Result_Set.add(CPolicy_Set[i].PID); //添加deny 集合元素9 else if result = unknown then 8 10 Unknown_Result_Set.add(CPolicy_Set[i].PID); //添加unknown 集合元素11 end 12 if Permit_Result_Set! = null then 13 return Permit; //允许访问14 end 15 else if Unknown_Result_Set == null then 16 return Deny; //拒绝访问17 else return Unknown; //未知的访问请求;

3.3.2 方案工作流程

本节所设计的方案实质上是对传统ABAC 基于区块链技术和公钥可搜索加密技术的扩展.该方案的工作流程主要分为准备阶段和执行阶段.准备阶段包括系统初始化、系统参数生成、访问控制策略加密、访问控制策略密文上链; 执行阶段包括原始请求访问、属性请求构造、访问陷门构造、策略密文匹配、访问记录存储.

BPCS-ABAC 方案整体的流程图如图5 所示.图中RR 代表资源请求者、RP 代表资源发布者、BC 代表区块链系统、KGN 代表密钥生成节点、SCAA 代表属性权威合约、SCPAP 代表策略管理合约、SCPDP代表策略判决合约、NAR 代表原始访问请求、AAR 代表属性访问请求.

图5 BPCS-ABAC 方案流程图Figure 5 Flow chart of BPCS-ABAC scheme

(1) 系统初始化

密钥生成节点处生成系统公私钥的过程如式(1)所示.系统选择并输入安全参数k后, 输出系统的主密钥msk =sN(s ∈Z∗q).系统的公共安全参数设定为Par = (G1,G2,f,q,N,h), 其中G1、G2为阶数为q的大素数群,N为G1群中的随机生成元且为大素数,f为双线性映射, 且f:G1×G1→G2,h=(N,N), 哈希函数为H0:G1→{0,1}∗,H1:{0,1}∗→Z∗q,H0:G1→M,M为H2的哈希运算结果,H3:M×G1→Z∗q,H4:G1×Z∗q×G1→Z∗q.

访问控制模型定义如下.定义一, 关于属性的定义: 使用属性名att 来作为属性的标识, ATT 表示属性名的集合.关系Domain(att) 表示该属性的类型, 一般而言, 属性的类型可分为四种: 主体(Subject) 类型, 用s表示; 客体(Object) 类型, 用o表示; 操作(Operation) 类型, 用op 表示; 环境(Environment)类型, 用e表示.单个属性的取值可以使用att-name = value 表示, 其中att-name∈ATT, value∈Domain(att-name).

(2) 系统参数生成

①私钥生成.密钥生成节点监听到请求后, 链下执行生成私钥的操作, 再经安全信道将公私钥响应给资源请求者.在式(2)中, 输入系统的公共安全参数Par 由KeyGen 生成密钥, 资源请求者随机选择(ska1,ska2,ska3)∈Z∗q作为私钥skRR, 并计算pka1= ska1N, pka2= ska2N, pka3= ska3N, 输出其公钥为pkRR=(pka1,pka2,pka3).

②访问控制策略生成.资源发布者对客体资源O生成访问控制策略, policyo=<s.v,o.v,op.v,e.v,d.v >, 其中s.v,o.v,op.v,e.v分别代表四种不同属性的值,s.v是主体属性集合s.v1,s.v2,···,s.vn中的一个操作,o.v,op.v,e.v也是如此,d.v代表策略判定评估的值, 是判定评估集合PE 中的任意操作.

③访问控制策略密文生成.资源发布者对客体资源O的访问控制策略进行加密, 如式(3).加密函数的输入为系统的公共安全参数Par, 策略明文MPo, 资源请求者的公钥pkRR, 随机选取r1∈Z∗q,计算C1=H1(MPo),C2=r1pka2,C3=H3(O,C2)(pka1+C1N)+r1C1N,C4=H3(O,C2)pka3,C5=H4(hH3(O,C2),C3,C2).输出的策略密文CPo=(C1,C2,C3,C4,C5).

④访问控制策略密文索引生成.资源发布者生成搜索索引, 如式(4).索引生成函数的输入为资源请求者的身份IdRR、资源IdRe和策略密文的交易CPOHash, 输出为生成的搜索索引IPo.

(3) 数据上链

策略密文和其安全索引生成后, 由资源发布者向区块链发出请求, 将策略密文和其安全索引发送至区块链上, 区块链节点将交易向全链进行广播.具有存储功能的记账节点收到策略信息后以交易的形式将其计入区块链中, 其中策略密文的交易形式为savePolicyCipherTextForth : CPo, 安全索引的交易形式为saveSearchIndex:Index.

(4) 请求访问

①资源请求者发起原始访问请求后, 区块链首先对资源请求者身份进行验证, 无效则拒绝访问, 成功则将请求转送至属性权威处, 由属性权威进一步构造基于属性的访问请求.

②属性权威在收到请求后, 根据属性权威合约算法中的步骤依次执行, 找到对应的相关属性信息, 构造属性访问请求返回至资源请求者.

(5) 访问陷门构造

资源请求者在收到属性访问请求后, 于请求信息的末端以与策略明文相同的形式附加d.v= permit,随后进行陷门生成工作, 该过程如式(5)所示.输入资源请求者的ReAAR以及对应身份IdRR和私钥skRR, 计算T1=N/(ska1+H1(ReAAR)+ska3IdRR),T2=T1/ska2, 输出Tr=(T1,T2).

计算得到的陷门将被发送至区块链中的计算节点, 用于搜索匹配运算.

(6) 策略密文匹配

区块链中的计算节点在收到陷门Tr, 资源请求者身份的IdRR和客体资源的OId后, 遍历存储搜索索引的区块链节点.在找到对应的搜索索引IPo= (IdRR,OId,CPO) 后, 对陷门进行如式(6)的匹配运算.式(6)的输入为陷门Tr, 资源请求者身份IdRR和对应搜索索引IPo中的CPO.计算U1=e(C3+IdRRC4,T1),U2=e(C2,T2)C1, 并验证H4(U1/U2,C2,C3) =C5, 如果相等, 输出b= 1, 表示匹配成功, 否则输出b=0, 该资源请求者无权访问资源.

搜索匹配算法中等式的正确性证明如式(7).

(7) 访问记录存储

区块链中计算节点在搜索匹配计算执行完成后, 随即将访问记录以Request : IdRR的形式写入交易中, 向区块链广播.获得记账权力的节点则将交易打包记录到链中.

3.4 安全性分析

根据下文定义的威胁模型, 本节主要从外部恶意用户和区块链中的矿工两个角度进行安全性分析.

3.4.1 威胁模型

本文考虑的威胁对象包括区块链中的矿工和外部恶意用户, 本文中的关键字实质上指的就是访问控制策略.假设区块链中矿工遵守所有协议的规定, 不会存在欺骗行为, 但会进行关键字猜测攻击.同样, 外部恶意用户也会进行关键字猜测攻击, 主要是根据区块链中所公开的策略密文数据进行关键字猜测攻击.

3.4.2 安全模型

定义1 假设存在一个恶意敌手A和一个挑战者C, 本文中的安全模型考虑在任意概率多项式时间(probabilistic polynomial time, PPT) 是否存在一个不可忽略的优势可以使得A胜出, 如果不存在, 那么BPCS-ABAC 方案能够无视关键字猜测攻击.模型的流程如下:

(1) 系统初始化

挑战者C初始化系统, 输出系统的公共安全参数, 并发送至恶意敌手A.

(2) 查询阶段1①私钥查询

恶意敌手A发送Id 至挑战者C,C执行KeyGen(Par)→(sk,pk) 生成公私钥.

②哈希查询

恶意敌手A发送关键字W至挑战者C, 挑战者C计算H1(W)、H3(m,r1Ka2)、H4(V,B,A) 并回应查询.

③陷门查询

恶意敌手A发送关键字W、身份Id 至挑战者C, 挑战者C根据身份Id 找寻恶意敌手A的私钥,并根据私钥、身份Id 以及关键字W生成执行Trapdoor(sk,Id,W)→Tr生成陷门.

(3) 挑战阶段1

恶意敌手A向挑战者C提交(Id∗,W0,W1), 此操作中提交的Id∗需要在之前查询阶段没有被A查询.然后挑战者C随机选取d ∈{0,1}, 运行Encrypt(Par,pk,W∗)→CId∗, 生成CId∗作为关键字挑战密文.

(4) 查询阶段2 除不能对Id∗的私钥查询和对关键字挑战密文查询外, 其他同查询阶段1.

(5) 猜测阶段恶意敌手A猜测d′∈{0,1}, 若d′=d, 则恶意敌手A胜出.

3.4.3 安全性证明

定理1 若恶意敌手A在定义1 的模型下能以概率ϵ攻破关键字, 则挑战者C同样可以以概率ϵ/8解决CDH 困难问题.

证明: 假设存在一个CDH 困难问题实例(aP,bP), 恶意敌手A和挑战者C做如下模拟, 最终证明挑战者C可以计算出abP.

(1) 系统初始化

恶意敌手A发送身份Id 至挑战者C, 挑战者C选择随机元u ∈Z∗P, 生成系统安全公共参数Par = (G,e,q,N,h), 并且生成列表LH1、LH3、LH4, 将数组(W,r(1),R(1)) 放入列表LH1中, 数组中的各项初始值为null; 将数组(Id,u,W,R(3),β) 放入列表LH3, 数组中的W,R(3),β值为null; 将数组(V,A,B,r(4),R(4)) 放入列表LH4, 数组中各项初始值为null.

(2) 查询阶段1

①恶意敌手A发起私钥查询.

挑战者C选择三个随机元生成恶意敌手A的私钥skId= (ska1,ska2,ska3), 其中ska1,ska2,ska3∈Z∗q.恶意敌手A公钥为pkId= (pka1,pka2,pka3), 其中pka1= ska1N, pka2= ska2N, pka3= ska3N.此时挑战者C从之前生成的列表LH3中找到数组(Id,u,W,R(3),β), 查看数组中的β值, 如果β=1, 将私钥skId发送给恶意敌手A; 如果β=0, 输出失败.

②恶意敌手A发起哈希查询.

挑战者C收到关键字W, 从列表LH1中搜索数组(W,r(1),R(1)), 若数组中的W.value̸= null、R(1).value̸= null, 挑战者C将R(1).value 返回至恶意敌手A.否则, 挑战者C随机设置β ∈{0,1}, 若β=1, 则将R(1).value 设置为a; 若β=0, 选择随机数r(1)∈Z∗q, 将R(1).value 设置为r(1).

挑战者C收到身份Id、明文m、r(1)pka2, 从列表LH3中搜索数组(Id,u,W,R(3),β), 若数组中R(3).value̸= null, 挑战者C将R(3).value 返回至恶意敌手A.否则, 根据数组中的β.value 进行数组赋值工作, 若β= 1, 则将R(3).value 设置为b −u; 若β= 0, 选择随机数r(3)∈Z∗q, 将R(3).value 设置为r(3).

挑战者C收到T1/T2,C2,C3,从列表LH4中搜索数组(V,C1,C2,r(4),R(4)),若数组中R(4).value̸=null, 挑战者C将R(4).value 返回至恶意敌手A.否则, 选择随机数r(4)∈Z∗q, 将R(4).value 设置为r(4).

③恶意敌手A发起陷门查询.

挑战者C收到关键字W, 从列表LH3中搜索数组(Id,u,W,R(3),β), 若β= 1, 挑战者C不输出任意值; 若β= 0, 挑战者C输出陷门Tr= (T1,T2) 至恶意敌手A, 其中T1T2的表示形式为:T1=N/(ska1+b −R(3)+ska3Id),T2=T1/ska2.

(3) 挑战阶段

恶意敌手A首先选取关键字(W0,W1), 以及恶意敌手A的身份Id′, 然后将上述信息发送给挑战者C.挑战者C对两个关键字分别进行哈希查询, 此时查看列表LH3中的数组(Id′,u,W0,R(3),β0) 和(Id′,u,W1,R(3),β1), 如果β0.value = 0 且β1.value = 0, 则挑战者C不输出任何内容; 否则, 挑战者C任意选取其中一个数组, 给予恶意敌手A关键字密文CW=(C′1,C′2,C′3,C′4,C′5), 其中各项的表示形式如下所示:

(4) 查询阶段2

恶意敌手A除不能做对ID′的私钥查询和对关键字挑战密文查询外, 其他同查询阶段1.

(5) 猜测阶段

恶意敌手A对返回的密文进行猜测, 如果猜测正确, 则挑战者C返回的关键字密文CW中的C′3−(b −u′)p=abP可以解决CDH 困难问题, 但是解决此问题的前提是恶意敌手A在之前的阶段中不会被挑战者C在陷门查询和挑战阶段终止流程, 两个阶段终止流程的概率取决于β的值.陷门查询阶段,β.value = 1 时终止流程的概率为1/2, 恶意敌手A进行查询的次数为2 次, 则该事件发生的概率为Pr0= (1−1/2)2.挑战阶段,β.value = 0 时终止流程的概率为1/2, 则该事件发生的概率为Pr1= 1/2.基于恶意敌手的优势, 则解决CDH 问题的优势为AdvCDHB= Pr0Pr1β=β/8, 而CDH 问题是困难, 所以假设不成立, 证毕.

3.4.4 区块链安全性分析

目前区块链所面临的危险主要来自于对共识机制的攻击, 攻击者通过对共识机制的攻击达到篡改区块链上数据的目的.本文中所采用的Ganache 客户端测试链使用PoW 共识机制, 所以下面着重对PoW 共识机制的安全性进行分析.假设区块链网络中存在诚实节点和恶意节点, 两种节点之间存在的竞争关系可由二叉树随机漫步的过程来描述, 当诚实节点的节点数量大于恶意节点数量时, 诚实节点挖矿成功产生一个区块, 否则, 恶意节点挖矿成功产生一个区块.假设恶意节点需要弥补z个区块从而使得恶意节点伪造的恶意链长度超过诚实链的长度, 达到攻击的目的, 该过程可近似被看作赌徒破产问题, 所谓赌徒破产问题就是A 和B 两个赌徒使用抛硬币模式进行对赌, 如果抛硬币的结果是硬币正面在上, A 赢, B 给A 一个筹码, 如果硬币反面在上, B 赢, A 给B 一个筹码, 两人这样不停赌博, 直到一方筹码输光为止游戏结束, 本文攻击过程的概率如式(8):

其中, 用p来表示区块链中诚实节点挖矿成功的概率, 用q来表示区块链中恶意节点挖矿成功的概率,qz表示恶意节点最终弥补z个区块差距的概率.假设诚实节点按照预期耗费时间产生区块, 则恶意节点的进展符合泊松分布计算, 期望值如式(9):

为了计算恶意节点所生成的区块链长度能赶上诚实节点所生成的区块链长度的概率, 将恶意节点所生成的区块链长度的泊松分布取值概率与此时能追赶上诚实节点链的长度相乘, 即可得到成功篡改链上数据的概率Pz, 如式(10):

实验的仿真结果如图6 所示, 由仿真结果可以得出, 当恶意节点成功产生下一区块的概率大于等于0.5时, 恶意节点就可以百分之百地篡改区块链数据, 反之, 恶意节点成功产生下一区块的概率小于0.5 时, 随着区块数的慢慢增加, 恶意节点成功篡改的概率也变得越来越小.也就是说, 只有恶意节点占据区块链上50% 以上的算力时, 才能随意篡改区块链中存储的数据, 而由于区块链去中心化、分布式的特性, 想要占据整个链中50% 以上的算力要付出巨大的成本, 所以使用区块链可以很好抵抗恶意篡改数据的攻击.

图6 攻击成功概率Figure 6 Attack success probability

4 实验仿真

本节将通过仿真实验证明提出的BPCS-ABAC 方案在时间和空间两方面相比于类似方案具有优势.本节选取了传统ABAC 模型、文献[5] 中史锦山等人的BBIAC 模型、文献[12] 中Do 等人的安全分布式数据存储与关键字搜索服务方案、文献[13] 中Feng 等人的基于可搜索属性加密的区块链数据隐私保护控制方案和本文提出的BPCS-ABAC 方案进行对比分析.本节所展示的时间性能主要包括对同样引入属性概念的方案进行了访问耗时分析, 对引入可搜索加密的方案进行了关键阶段算法时间性能分析; 空间性能主要包括策略密文存储空间消耗和陷门请求存储空间消耗.鉴于以属性作为决策要素的细粒度访问控制方案中, 访问耗时是体现时间性能的关键因素, 选取BBIAC 模型和传统ABAC 模型进行了访问耗时分析.在可搜索加密方案中, 关键步骤耗时直接体现了方案的时间性能, 因此选取了Do 等人和Feng 等人同样在区块链系统中使用可搜索加密技术的方案对比分析了关键步骤的耗时, 包括密文生成时间、陷门生成时间、策略索引搜索时间和陷门匹配时间.

4.1 实验环境

为了进一步评估本方案的性能和效率, 本文通过仿真实验对BPCS-ABAC 方案进行测试.所有仿真均基于本地虚拟机VMware, 每个节点独立运行在相同的实验环境里.其中虚拟机的硬件条件为: 双核Intel® Core(TM) i5-7300HQ CPU @ 2.5 GHz, 2G 内存; 操作系统为Ubuntu 16.04; 区块链部分采用以太坊Ganache 客户端测试链; 加密部分基于Python 语言的Pypbc 模块以及Pycharm 工具, 同时使用XACML 语言生成的访问控制策略进行测试.

4.2 BPCS-ABAC 时间分析

(1) 访问耗时分析

考虑到BPCS-ABAC 方案的应用场景, 访问耗时是衡量该方案优劣的重要指标.本节仿真分析了所提出方案的访问耗时.采用文献[24] 对访问耗时的分析方法, 将方案中用户及设备的不断增加映射为访问控制策略的不断增加.当访问控制策略数为10 000 时, 主体对客体发送10 次访问请求, 记录每次访问所需的时间.本方案选取了传统ABAC 模型和文献[5] 中的BBIAC 模型与BPCS-ABAC 进行对比实验,仿真结果如图7 所示.由仿真结果可以看出, 初次访问时, BBIAC 和本文的BPCS-ABAC 模型由于初次访问需要进行区块链系统的初始化, 等待首次共识需要一定的时间, 所以初次访问时所需要的访问控制响应时间略高于传统的ABAC 模型, 随着共识的建立, 后续的几次访问时间较短且比较平滑时因为后续的访问均不需要进行初始化, 直接执行判决合约, 也就是说可以先进行判决后进行共识, 这一过程比较简单.此外, ABAC 模型每次实验进行初始化时, 访问控制策略和访问请求客体都不同, 时间上容易产生较大波动.同时, 由于BBIAC 中区块链在授予访问权限时, 除了根据策略判断权限外, 还需要额外生成token,所以该方案访问所需的时间大于BPCS-ABAC.此外, 本方案还使用不同设备代表不同主体对客体发送了10 次访问请求, 所需时间与图7 中的结果相近.综上所述, BPCS-ABAC 在访问耗时方面优于其他方案.

图7 访问控制响应时间对比Figure 7 Comparison of access control response time

(2) 方案关键步骤时间性能分析

本节对BPCS-ABAC 方案运行流程中关键步骤的耗时, 包括密文生成时间、陷门生成时间、策略索引搜索时间和陷门匹配时间进行了仿真分析, 多角度分析了所提方案的时间性能.

①策略密文生成时间

仿真中使用的访问控制策略数据集使用XACML 语言生成, 模拟了访问控制策略密文生成的时间, 即资源发布者在客户端对某个资源的访问控制策略进行加密时所需要的等待时间, 并对比了文献[12]、文献[13] 中的方案, 得到的结果如图8 所示.由仿真结果可以看出, 一千条策略的加密时间仅需0.808 s.然而, 由于加密过程中需要用到计算较为复杂的双线性运算, 随着加密的访问控制策略数量增加, 加密时间也随之增加.但对于资源发布者而言, 增加的等待时间也在可接受的范围内, 且时间增长趋势平稳.同时本方案加密时所消耗的时间少于其他两种模型.

②陷门生成时间

本方案与文献[12]、文献[13] 两种方案的陷门生成时间进行了对比, 根据关键字数量不同生成不同陷门所需的时间如图9 所示.由仿真结果可以看出, BPCS-ABAC 方案在陷门生成时间上优于其他两种方案, 且随着关键字数量的不断增加, 优势越发明显.同时, BPCS-ABAC 方案中的陷门生成时间不会随着关键字大小变化而产生很大的波动, 主要原因在于本节中陷门生成时所涉及到的运算仅为哈希运算, 计算开销小, 且计算时间稳定, 所以在陷门生成时间的效率和稳定性方面都具有一定优势.

③策略索引搜索时间

定义区块链上索引搜索时间IndexSearchBCTime 为遍历不同区块, 根据身份Id 和客体资源Id 定位到策略密文位置的时间.以太坊区块链中根据Merkle Patricia Tree 来定位每一笔交易的位置, Merkle Patricia Tree 数据结构的特性使得进行搜索时理论上的时间复杂度为O(log(N)),N代表所查询数据的长度.本方案在仿真中构造出了不同数据量大小的Merkle Patricia Tree 来模拟在区块链中进行查找的场景.在本文的实验环境中, 链上索引检索时间IndexSearchBCTime 可以近似认为是Merkle Patricia Tree从根节点定位到具体某一笔交易的时间.定义区块链下的索引搜索时间IndexSearchNBCTime 为通过遍历整组交易数据找到特定交易的时间, 理论上搜索时间复杂度为O(N),N为数据组长度.仿真中根据不同策略密文数量所需的搜索时间如图10 所示.由仿真结果可以看出, 对于不同的策略密文数量, 在搜索一条特定的策略密文时, 在以太坊区块链上所花费的时间基本趋于一致, 且在毫秒级别.其根本原因在于在Merkle Patricia Tree 中的键是由keccak256 函数计算所得, 所有的策略密文被打包成交易发布到链中时,都由一串特定长度的Hash 值代替.而在查询时, 所消耗的查询时间本质上与数据长度有关, 且与数据量关系不大, 而在链下的搜索时间随着数据量的增多而逐渐增加.综上所述, 本方案在区块链上进行索引查询效率较高且稳定.

④陷门匹配时间消耗对比

此外, 本文还对比了本方案中的陷门匹配时间与文献[12]、文献[13] 中的方案所消耗的时间.陷门匹配时间指的是在区块链上将收到的陷门(即资源访问请求) 与策略密文相对比的时间消耗, 该时间消耗根据关键字的数量不同所需要的时间如图11 所示.

图11 陷门匹配时间Figure 11 Trapdoor matching time

由仿真结果可以看出, BPCS-ABAC 所消耗的时间完全少于另外两种方案, 并随着关键字数量增多,优势愈发明显.这主要因为本方案中在进行陷门匹配运算时进行了两次双线性运算, 计算开销小于另外两种方案.

4.3 BPCS-ABAC 空间分析

本小节对BPCS-ABAC 方案中需要存储的内容的空间大小进行仿真, 以此验证本方案可以在区块链上进行高效存储.区块链上存储空间的消耗主要包括访问控制策略密文存储空间消耗以及陷门请求存储空间消耗.

(1) 策略密文存储空间消耗

本方案首先仿真分析了访问控制策略密文存储所需要的空间.与访问控制策略明文进行对比, 存储不同数量的访问控制策略所消耗的空间如表1 所示.由仿真结果可以看出, 相对于访问控制策略的明文, 密文所需要的存储空间小了大约10 倍左右, 且当存储数据量越多时节约的空间也越多.考虑到在实际应用场景中, 不同访问控制策略的大小不同, 本方案还生成了5000 条不同大小的访问控制策略进行了仿真实验, 策略明文所需要的存储空间为16.73 MB, 生成的策略密文大小为1.56 MB, 存储空间也缩小了约十倍.除此之外密文所消耗的空间增量趋势稳定, 并不会产生剧烈的波动.

表1 策略密文存储空间Table 1 Storage space of policy ciphertext

(2) 陷门请求存储空间消耗

因为所提出的方案发送至区块链的资源访问请求, 即构造完成的陷门, 也会被打包记录至区块链中,所以还对陷门请求所消耗的存储空间进行了仿真, 并与文献[12]、文献[13] 中的两个方案进行对比.存储不同关键字数量的陷门请求所消耗的空间如表2 所示.由仿真结果可以看出, 相对于文献[12] 和文献[13]中的方案来说, BPCS-ABAC 方案中, 陷门请求所需要的存储空间更小, 这对于减轻区块链上的存储压力来说是至关重要的.

表2 陷门请求存储空间Table 2 Trapdoor request storage space

5 总结

本文提出了一种基于区块链的密文检索属性访问控制(BPCS-ABAC) 方案, 该方案利用区块链技术和公钥可搜索加密技术特性改进了ABAC 模型, 主要利用了区块链的去中心化、不可篡改的特性解决了第三方依赖问题, 利用公钥可搜索加密技术特性实现对访问控制策略进行了加密, 既保护了策略的隐私性,又解决了区块链上存储压力过大的问题.论文详细阐述了BPCS-ABAC 方案的系统模型、工作流程以及智能合约设计, 其中工作流程包括系统初始化、系统参数生成、访问策略加密、访问控制策略密文上链、原始请求访问、属性请求构造、访问陷门构造、策略密文匹配、访问记录存储等, 最后对BPCS-ABAC进行了仿真实验, 由仿真结果得出BPCS-ABAC 在时间和空间上优于其他方案模型, 适用于物联网、大数据等应用场景.但是在BPCS-ABAC 方案中, 用户/设备直接向区块链发送访问请求, 而区块链会将用户/设备信息记录到链中, 用户/设备的身份可能存在暴露的危险, 如何将用户真正匿名化, 例如使用环签名、盲签名等, 还有待更进一步的深入研究.

猜你喜欢

请求者访问控制密文
一种针对格基后量子密码的能量侧信道分析框架
一种支持动态更新的可排名密文搜索方案
基于模糊数学的通信网络密文信息差错恢复
基于D2D 多播通信的合作内容下载机制
群智感知中基于云辅助的隐私信息保护机制
汉语自然会话中请求行为的序列结构
ONVIF的全新主张:一致性及最访问控制的Profile A
基于差值诱导的Web服务评价可信度的评估
动态自适应访问控制模型
浅析云计算环境下等级保护访问控制测评技术