一种基于Fabric区块链的云端数据动态访问控制方案
2024-02-27胡睿张功萱寇小勇
胡睿,张功萱,寇小勇
1.南京理工大学,网络空间安全学院,江苏 南京 210094
2.南京理工大学,计算机科学与工程学院,江苏 南京 210094
引 言
伴随着数字化时代的浪潮,云计算、云存储等概念被广泛的应用到社会生产、人们的日常生活以及政府部门的管理中。面对海量的多源异构的数据,用户对存储系统的性能需求越来越高,对于传统的数据存储系统,用户需要使用的数据常常保存在本地的存储设备中,这显然不能满足如今各类应用数据爆发式增长的需求,面对现实挑战,云存储应运而生。
云存储是从云计算概念扩展发展起来的新概念[1]。云存储系统中,用户可以将自己需要存储的数据上传至云端以减少本地主机或移动设备等的存储空间消耗[2],并在任意需要使用数据的时候通过可联网的设备连接至云端访问数据。对于云存储的用户而言,云端数据的安全性至关重要,用户需要云存储服务的提供方能够保证其在云端存储的数据不会丢失、数据内容不被篡改、数据不被泄露等[3]。近年来,云端数据的泄露频繁出现,云服务提供商在云存储系统中并不一定是诚实守信的[4],他们可能会违规删除云端用户长时间未访问的数据、恶意贩卖用户的隐私数据,并且中心化的云存储系统存在存储设备故障导致数据永久性丢失、系统被攻破导致数据泄露等问题。
区块链作为分布式存储的账本[5],经过研究人员的不断探索,它去中心化、难以篡改的特性在信息安全领域发挥着重要的作用。而区块链的这些性质,通过数据上链的方式可以很好的解决用户对云服务提供商的信任问题。
用户存储在云端的数据在物理上不受到用户的控制,对于数据拥有者与数据请求者实现数据共享的应用场景下,密文策略的属性基加密(Ciphertext-policy Attribute-based Encryption,CP-ABE)[6]被提出且被广泛的采用,即数据在云端以密文的形式保存而只有拥有相应属性的用户才能解密云端的数据。
基于原有的密文策略属性基加密方案,Waters 为解决访问控制策略更新的问题[7],提出了动态证书和密文授权的方案,但是其新策略比旧策略要求更严格[8]。传统的CP-ABE方案存在加解密计算消耗大、对数据拥有者与请求者所使用平台的性能要求高、属性授权中心存在安全风险和单点故障问题、难以实现对用户属性的撤销与访问控制策略的动态更新等问题[9]。为了解决这些问题,Lai 等[10]人提出了具有用户属性撤销与访问策略更新功能的CP-ABE 方案,Maesa 等[11]人提出了具有加解密计算外包功能的外包型CP-ABE 方案研究,Chase 等[12]人提出了具有多个属性授权中心(Central Authority,CA)的多机构CP-ABE 方案。然而在上述方案中,加解密计算外包型的方案虽然降低了用户系统的性能要求,但是数据在服务器与用户间传输可能存在泄露的风险[13]。对于多属性授权中心的方案,需要存在完全可信CA,而且CA并不支持对用户属性的撤销或增加[14],当用户属性发生变更时,攻击者可以使用它变更前的属性私钥解密当前不允许其访问的数据。通过结合区块链难以篡改的特性,利用超级账本平台上的Fabric-CA 模块,邱云翔等[15]人提出了一种属性私钥安全分发的方法。但是该方案并没有实现数据访问控制策略与用户属性的变更,并且方案的加解密算法为原生的CP-ABE算法,存在计算负担大的问题。
为了解决上述加解密计算负担大、属性授权可撤销、访问控制策略可更改等问题,本文提出了一种基于Fabric 区块链的云端数据动态访问控制方案,主要贡献如下:
1)基于CP-ABE算法,提出了一种云端数据动态访问控制方案,实现对数据拥有者数据的安全共享,降低了加解密算法对计算资源的消耗。
2)基于Fabric 区块链,在用户属性可变更、访问控制策略可动态变化的云环境下实现了属性私钥的安全分配。
3)对本文方案的安全性进行了分析,对方案的加解密性能与属性私钥申请性能进行了仿真测试,并与现有方案进行了比较。
1 背景技术
1.1 Fabric区块链与Fabric-CA
在2008 年发布的比特币白皮书中,中本聪第一次提出了“区块”与“链”的概念[16]。联盟链又称为许可链,定义为介于公有链与私有链之间的一种区块链,Hyperledger Fabric是其代表性的技术平台之一,它支持可拔插的共识协议,架构高度模块化,在拥有较好性能的同时实现了交易信息的隐私保护。
Fabric 网络的结构如图1 所示,不同的节点通过通道实现区块链网络中业务的隔离,同一组织可以拥有多个节点,Fabric区块链网络的每一个参与者,都需要申请数字证书以确定它的数字身份从而确定它对资源的确切权限以及对参与者在区块链网络中拥有信息的访问权限[17]。Fabric-CA是Fabric提供的内置的CA组件,它提供了身份注册、证书申请、撤销证书或身份等功能,身份的注册证书可以包含一个或多个属性。
图1 Fabric网络模型Fig.1 Fabric network model
1.2 属性基加密
属性基加密(Attribute-based Encryption,ABE)[18]是一种将用户属性与数据访问控制策略嵌入密钥或密文中的技术,根据嵌入对象的不同,又可以分为以下两种类型,即基于密钥策略的属性基加密(Key-policy Attribute-based Encryption,KP-ABE)、基于密文策略的属性基加密CP-ABE。前者将数据访问控制策略嵌入密钥中,用户属性嵌入密文中。后者将数据访问控制策略嵌入密文当中,用户属性嵌入密钥当中,只有当用户属性满足访问控制策略,其密钥才能够解密密文。
1.3 IPFS星际文件系统
星际文件系统(Inter-Planetary File System,IPFS)[19]是一种点对点的分布式文件系统,它结合分布式哈希表,提供一种高吞吐量的内容寻址存储模型。IPFS网络中的文件会被赋予一个哈希值即IPFS hash作为用户访问文件的索引。
1.4 预备知识
1.4.1 双线性映射
设G与GT为阶数为p的乘法循环群,G的生成元为g,对于一个双线性映射e:G×G→GT应当满足以下的性质:
(1)双线性:∀a,b∈Zp,∀R,S∈G,有e(Ra,Sb)=e(R,S)ab;
(2)非退化性:∃g∈G,使得e(g,g)≠1,且e(g,g)是GT的成员;
(3)可计算性:存在有效的算法对于∀R,S∈GT,计算e(R,S)的值。
1.4.2 Shamir秘密共享方案
秘密共享技术是一种将秘密分散到每一个参与方,每个单独分散的秘密都是无用的,只有当满足条件的部分分散的秘密共享在一起时,才能够恢复原始的秘密。
Shamir秘密共享方案构建了t-1 次多项式函数,多项式的常数项即为需要保护的秘密,当拥有该函数的t个点时,即可通过拉格朗日插值差法完整的恢复该多项式,从而恢复秘密。
方案的具体流程如下:
(1)根据设定的秘密共享规则定义门限结构,如至少需要k个参与方才能恢复秘密,并构造多项式函数;
(2)拆分秘密s,n个参与方每人得到一个秘密分片;
(3)当大于k个参与方一起恢复秘密时,秘密即可顺利恢复。
2 系统模型
2.1 系统架构
本文的的系统架构如图2所示,主要包括以下5类实体:
图2 系统架构图Fig.2 System architecture diagram
(1)数据拥有者(Data Owner,DO)负责数据访问控制策略的制定、数据的加密与上传;
(2)数据使用者(Data User,DU),当需要访问数据时将调用区块链上的智能合约申请属性私钥,并发起数据请求;
(3)区块链(Block Chain,BC)通过智能合约实现属性基加密公共参数的初始化、云端数据的上传与获取;
(4)去中心化云(Decentralized Cloud,DC),使用IPFS负责接收并存储密文数据;
(5)Fabric-CA:负责用户证书的管理、验证用户的属性并为其颁发属性证书。
2.2 系统流程
系统的流程可分为以下5个阶段:
(1)系统初始化:DO 制定访问控制策略并调用系统初始化智能合约,智能合约将初始化CP-ABE公共参数GP,生成访问控制树ACT,之后DO在本地生成对称密钥SKP。
(2)数据加密与上传:DO 在本地对明文M进行对称加密得到对称加密密文CT,并利用所述属性基加密公共参数GP、系统公钥对SKP 进行属性基加密得到对称密钥密文SKC,之后将CT 与SKC 以文件的形式组合并一起存储在去中心化云IPFS,并将文件的hash 返回至Fabric区块链中存储。
(3)属性私钥申请与数据解密:DU 向Fabric-CA申请属性证书,之后启动应用程序连接至Fabric 区块链上的peer 节点,并调用智能合约,分别申请属性私钥与密文,收到申请请求后智能合约计算用户属性私钥并将其与密文文件一起返回给DU;之后,DU在本地解密对称密钥密文得到对称密钥,进一步解密对称加密密文,得到明文M。
(4)用户属性变更:DO申请对DU进行属性变更,包括申请撤销DU 的属性和申请增加DU的属性,执行属性撤销时,DO 调用属性撤销合约选择撤销DU的一个或多个属性,执行属性增加时,DO 与Fabric-CA 交互,撤销DU 的属性证书,并为DU申请新的属性证书。
(5)访问控制策略更新:DO 申请访问控制策略更新,调用Fabric区块链上的策略更新智能合约,重新构建ACT,更换当前DO 的对称密钥SKP,重新加密明文、对称密钥得到对称加密密文CT与对称密钥密文SKC,并重新上传至IPFS。
3 方案详细设计
3.1 具体流程
3.1.1 系统初始化
DO调用Setup智能合约初始化属性基加密公共参数GP,并构造双线性映射e:G1×G1→GT,其中G1、GT均为阶为p的乘法循环群,g为G1的生成元,Zp为有限域。选取随机数α∈Zp,并计算Y=e(g,g)α,选取随机数β∈Zp,并计算gβ。计算系统主密钥MK=gα,系统公钥
在本地生成长度为128bit 的AES 对称密钥SKP;制定访问控制策略,并根据相应的访问控制结构构建访问控制树ACT;ACT的Node节点的数据结构如表1所示。
表1 访问控制树数据结构Table 1 ACT data structure
将上述生成的属性基加密公共参数GP 与访问控制树ACT 存储至Fabric 节点私有数据集,并返回给数据拥有者DO。
3.1.2 数据加密与上传
DO 使用上一步生成的对称密钥SKP 对明文M进行AES加密得到对称加密密文CT;
针对对称密钥SKP,选取随机数s∈Zp,计算C=SKP×e(g,g)αs,C0=gs;将s作为秘密,运行秘密共享算法将s沿着访问控制树ACT进行拆分,使得对叶子节点的属性i对应的秘密分片为γi。
对于每个叶子节点属性i,对i进行哈希运算得到H(i)以将属性映射到乘法循环群G1上,随机选取pi∈Zp并计算Ci1=gβγiH(i)-pi,Ci2=gpi,最终得到对称密钥密文LeafNode为叶子节点属性集合。
DO 调用文件上传智能合约将对称密钥密文SKC、对称加密密文CT、数据拥有者标识DOid 以三元组的形式上链,并建立与去中心化云DC 的连接,将三元组组织成文件的形式存储至IPFS,同时将文件的hash、文件名Fid 保存并公开在Fabric区块链的世界状态数据库中。
3.1.3 属性私钥申请与数据解密
为保证属性私钥在Fabric 与DU 之间传递的安全,传递将采用非对称加密的方案。其中PU为DU的公钥,SU为为DU的私钥。
(1)属性私钥申请:DU 向Fabric-CA 申请属性证书Ucert,若DU 未申请过属性私钥,则在本地生成随机数t,并以Ucert、t为参数调用属性私钥申请合约,若申请过,则将t置为-1。
该合约将提取属性证书中的属性列表,并当接收到t不为-1 时,计算D=gαgβt,D0=gt,之后对于DU 属性列表中的每一个属性i,计算Di=H(i)t。若t=-1,则只计算{Di}i∈attList,并将其与存在的部分属性私钥结构D,D0进行组合,用户属性私钥SK=D,D0,{Di}i∈attList,SK被以PU 为公钥进行非对称加密得到属性密钥密文DSK,并发送给DU。
(2)数据解密:DU申请访问密文数据,输入密文文件名Fid 及与之相对应的数据拥有者标识DOid,智能合约与IPFS交互后返回对称加密密文CT、对称密钥密文SKC 给DU;DU 在本地使用SU 解密DSK 得到SK,之后利用属性私钥运行解密算法解密对称密钥密文SKC,通过秘密恢复函数恢复秘密值即对称密钥SKP。最后,运行AES 解密算法解密CT 得到数据明文M。
3.1.4 用户属性变更
DO 申请对数据请求者DU 进行属性变更,包括申请撤销DU 的属性和申请增加DU 的属性。
执行属性撤销时,DO 调用属性撤销合约选择撤销DU 的任意一个或多个属性,属性撤销需要与系统中其余的DO 达成共识,DO 通过调用属性撤销合约向Fabric-CA 申请撤销DU 的属性证书,并更换所有DO 的对称密钥SKP,重新加密明文M、对称密钥SKP 得到对称加密密文CT 与对称密钥密文SKC,最后调用文件上传合约将密文数据上传至IPFS。当DO 需要访问数据时,可以重新向Fabric-CA 申请属性证书。
执行属性增加时,需要与系统中的其余DO达成共识,DO 与Fabric-CA 交互,撤销DU 的属性证书,并为DU申请新的属性证书。
3.1.5 访问控制策略更新
DO申请访问控制策略更新,重新制定访问控制策略,依据表1 中的Node 节点结构重新构建访问控制树ACT。
DO 在本地重新生成128bit 的AES 对称加密密钥SKP,对明文M、对称密钥SKP重新加密得到新的对称加密密文CT 与对称密钥密文SKC,最后调用文件上传合约将密文数据上传至IPFS。
3.2 智能合约与相关算法
3.2.1 秘密共享算法
算法使用了Shamir 秘密分发方案,访问控制结构采用了访问控制树,以下为算法的形式化描述(算法1):
算法1 秘密共享算法Alg.1 Secret sharing algorithm
3.2.2 秘密恢复算法
算法使用了Shamir 秘密恢复方案,采用拉格朗日插值以恢复秘密(算法2)。
算法2 秘密恢复算法Alg.2 Secret recovery algorithm
3.2.3 文件上传智能合约
DO 调用智能合约使密文上链并存储在IPFS。文件上传智能合约具体流程如算法3所示。
算法3 文件上传智能合约Alg.3 File upload smart contract
3.2.4 属性私钥申请智能合约
DU向Fabric-CA申请属性证书,通过解析属性证书可以得到其属性集合。DU调用属性私钥申请合约获取属性私钥,具体流程如算法4所示。
算法4 属性私钥申请智能合约Alg.4 Attribute private key application smart contract
3.2.5 属性撤销、策略更新智能合约
当DO希望撤销DU的某一或者多个属性并达成共识时,将会调用属性撤销智能合约,合约流程如算法5所示。
算法5 属性撤销智能合约Alg.5 Property revocation smart contract
当DO 希望更新数据访问策略时需要执行策略更新合约,合约需要重新构建ACT、重新加密并上传密文,流程与属性撤销合约相似,本文不再赘述。
4 方案分析
4.1 安全性分析
本节将从CA 安全性、云端数据安全性、属性证书申请与分发的安全性、访问控制机制变更的安全性4个方面分析本文方案的安全性。
(1)CA 安全性:CA 负责属性证书的颁发与管理,CA 的安全性直接决定了方案的安全性,Fabric-CA 是Fabric 区块链的内置组件,本文方案采用Fabric-CA 实现属性的授权与认证,利用区块链去中心化、难以篡改的特性解决了CA的可信问题、单点故障问题,保障了其高可用性。
(2)云端数据安全性:数据存储在云端,数据的完整性与不可篡改性应该被保证,本文方案采用IPFS 去中心化存储数据,保证了数据的高可用。而数据文件的hash作为IPFS内容寻址的索引被保存在区块链上,改变云端数据的内容,其hash值就会改变,这保证了云端数据的完整与不可篡改性。
(3)属性私钥申请与分发的安全性:属性私钥在方案中是DU拥有相关属性的描述,属性证书是用户属性的合法性证明。本文方案中属性的认证与属性证书的生成与分发由Fabric-CA完成,属性私钥通过DU 输入属性证书,调用属性私钥申请合约获取,属性私钥用DU的公钥加密,在区块链与DU 之间以密文形式传递,保证了属性私钥分发的安全性。
本文方案在属性私钥的申请中,提出了利用Fabric 私有数据缓存DU 的属性私钥结构D,D0,在本地生成随机数t通过判断DU是否申请过属性私钥决定是否给t重新赋值,以下将讨论缓存方法的安全性:
随机数t存储在用户的私有数据中,不存在泄露的问题,由用户在本地随机选取,并以参数的形式传递给属性私钥申请智能合约,之后不论用户的属性如何变更,属性私钥中的D,D0对于单个用户都不会改变,只需要计算{Di}i∈attList,最后拼接得到完整的属性私钥。对于不同的DU,随机数t完全随机生成、彼此无关且不会泄露,保证了属性私钥申请的安全性。
(4)访问控制机制变更的安全性:在本文方案中实现了用户属性的变更、访问控制策略的更新。用户属性变更:执行属性增加时,增加前能解密的密文之后仍然能够解密,只需要重新为DU 颁发属性证书;执行属性撤销时,撤销前能解密的密文之后不一定能够解密,为保证前向安全性,方案将重新选取对称加解密密钥,重新对明文加密并上传至云端。访问控制策略更新:当DO 希望重新制定数据的访问控制策略时,方案将重新构建访问控制树重新加密并上传数据以保证只有具有满足当前策略属性的用户才能解密相应的密文,保护云端数据的安全。
4.2 安全性证明
本文方案的安全性由CP-ABE 方案的安全性与Fabric-CA 的安全性保证,下面基于挑战者与攻击者之间的博弈过程对方案在选择明文攻击CPA(chosen plaintext attack)下的安全性进行证明。
定义1.如果在多项式时间内,没有攻击者可以以不可忽略的优势赢得游戏,则本文方案是安全的。
证明:定义挑战者与攻击者的博弈过程,挑战者依照定义回答攻击者的查询。
(1)系统初始化:攻击者A选择一种访问控制策略A*发送给挑战者B,B运行Setup初始化算法将生成的公钥PK发送给A并保留系统主密钥MK。
(2)密钥查询阶段1:攻击者A选择一系列不满足访问控制策略A*的属性集合T1,T2,…,Tq并向挑战者B查询属性私钥,B计算后返回对应的属性私钥。
(3)挑战阶段:攻击者A向B提交两个等长的消息ME0,ME1,挑战者B随机选择β∈{0 ,1},并加密MEβ得到挑战密文并发送给A。
(4)密钥查询阶段2:与密钥查询阶段1 相似,攻击者再次选择不满足访问控制策略A*的属性集合Tq+1,Tq+2,…,Tr并向挑战者B查询属性私钥,B计算后返回对应的属性私钥。
(5)猜测阶段:攻击者A输出对β的猜测β*,β*ϵ{0 ,1},若β*=β则A赢得游戏,攻击者在游戏中的优势可被定义为
其概率由随机比特决定。
证毕。
4.3 实验评估
4.3.1 实验环境
本文方案的实现基于Java 语言与Go 语言,开发使用Fabric 区块链的开发工具包Fabric-Java-SDK实现。
本文实验基于PBC 库的Java 封装版本JPBC,使用512bit 的椭圆曲线y2=x3+x构造160bit 的椭圆曲线群。实验采用一台主机(Windows10 64位操作系统、内存为16GB、CPU为Intel(R) Core(TM) i7-8550U),Fabric 版本为2.4.1,区块链的搭建基于Windows10 的linux 子系统wsl2,子系统版本为Ubuntu20.04.6LTS。
4.3.2 性能分析
实验采用10MB的明文进行加解密,所有实验结果均为10次独立重复实验取平均值。本文实验对比了本文方案与文献[13]的方案的加解密性能、属性私钥计算性能,大部分基于密文的属性基加密方案均由传统的CP-ABE 方案改进而来,作为参考,本文方案也与传统的CP-ABE方案进行了对比。
(1)加解密性能
对于本文方案中的加解密算法,需要考虑的属性数量对算法的复杂度起到了决定性的因素,实验由8 至40 个分别选取不同的属性数量对方案的加解密性能进行测试。
如图3、图4所示,本文方案的加解密时间消耗随属性数量的增加接近线性增加,方案的加解密性能与文献[13]相近,并且方案的性能较传统的CP-ABE方案有较大的提升。
图3 方案加密性能对比Fig.3 Scheme encryption performance comparison
图4 方案解密性能对比Fig.4 Scheme decryption performance comparison
(2)属性私钥计算性能
在本文方案中,DU 需要申请属性私钥SK并在本地解密密文才能获取到明文,属性私钥申请与计算的性能与方案的加解密流程的总耗时相关,属性私钥的计算性能越强,方案流程的总耗时越短。
实验结果如图5所示,传统的CP-ABE 方案与文献[13]方案的性能相近,本文方案因为缓存了属性私钥的部分结构相较于文献[13]与传统的CP-ABE方案属性私钥的申请时间减少,属性私钥的计算性能得到了提升。
图5 属性私钥申请时间对比Fig.5 Attribute private key application time comparison
4.3.3 功能分析
本文方案与相关文献方案的功能对比如表2 所示,功能对比从以下角度出发,分别为方案是否存在单点故障、是否需要第三方可信CA、是否支持属性撤销、是否支持策略更新、是否采用去中心化云存储,表中"√" 代表方案具备该功能,"×" 则代表方案不具备该功能。
表2 不同方案功能对比Table 2 Function comparison of different schemes
文献[4]、文献[13]方案的加解密过程中引入了智能合约,利用智能合约自动执行的特性实现了用户属性私钥自动分发、加解密流程的自动执行。文献[4]、文献[13]引入了IPFS 存储数据,解决了中心化云服务器的单点故障问题、“云“是否可信的问题。但文献[13]需要可信的第三方CA提供支持,方案中为用户属性提供证明的CA 存在单点故障的问题,文献[15]引入了Fabric-CA实现用户属性的授权使得方案不再需要额外的可信的第三方CA。
本文方案采用Fabric-CA 实现用户属性证书的颁发,使用智能合约实现属性私钥的获取,方案无需第三方可信CA的支持,解决了私钥申请的单点故障问题。方案支持属性撤销、策略更新并以密文的形式在去中心化云中存储数据,保证了云端数据存储的完整性与不可篡改性。
5 总结与展望
为解决云存储用户数据共享场景的一系列问题,本文提出了一种基于Fabric区块链的云环境下的数据动态访问控制方法。方案利用了区块链难以篡改的特性,系统中数据拥有者DO、数据使用者DU以及去中心化云DC之间不需要相互信任,方案以执行智能合约的形式实现了属性私钥分发的全自动执行,同时结合Fabric私有数据模型,提出了一种属性私钥的缓存模型,提升了私钥分发的性能,减少了属性私钥申请过程中时间的消耗。此外,方案实现了数据拥有者对云上数据动态的访问控制,达成共识后,数据拥有者可以随时执行对数据使用者的属性变更并且数据拥有者也可以随时更新其数据的访问控制策略。
通过实验验证与理论分析,本文方案具有一定的应用前景,使用本文方案为用户提供云端数据共享服务,可以增加云服务的可靠性,可以解决云服务器的单点故障问题,本文方案在加解密阶段与属性私钥获取阶段的性能较传统方案均有一定的提升。但本文方案在每次实现属性撤销、策略更新时都需要对数据重新加密,在未来的研究中应当进一步改进属性基加解密算法,探索更高效的属性撤销、策略更新方法。
利益冲突声明
所有作者声明不存在利益冲突关系。