0 引言
在当前的大数据环境下,各种组织都在依赖数据来做出决策和进行分析,通过深入挖掘大量数据,开发出广泛应用的推荐算法和大规模语言模型等。然而,如果数据不能进行有效流通,则会出现数据孤岛的现象,所以企业需要在可控的范围内实现数据的流通和共享。
为了解决上述需求,许多访问控制技术方案应运而生,其中较为经典的方案包括基于角色的访问控制(RBAC)[1]和基于属性的访问控制(ABAC)[2]。基于属性的加密(ABE)[3-4]访问控制方案是一种从ABAC衍生出来的以密码学为基础的访问控制方案,其具备许多优良特性使其可以很好地适应各种复杂的应用场景,如供应链[5]、医疗[6-7]、物联网[8]、云存储[9]、区块链[10]、智慧网格[11]等。ABE借鉴了基于模糊身份的加密方案(Fuzzy-IBE)[12],Fuzzy-IBE的核心思想是通过使用一组属性以标识一个身份,只要解密实体持有的属性与数据约定的属性集之间的差距在一定范围内,就可以解密得到原始数据。通过这种方式,一个数据访问者不再是某个特定的实体,而可以是一组满足一定属性条件的多个实体,从而解决了传统加密控制方案只能支持一对一加密的缺陷。
基于属性的加密访问控制方案在2006年由GOYAL等[3]提出,在其论文中把ABE方案分为KP-ABE与CP-ABE两类。在此之后,许多ABE方案的变体涌现,其中得到最广泛应用的便是基于属性的分布式加密(DABE)方案[13],它支持多个分布式的机构来弥补原先ABE方案中仅支持单个机构的不足。
工业物联网与个人智慧移动终端的普及为属性加密方案带来了新的挑战。这些设备往往与工业或个人使用者的敏感数据相关,同时其拥有的计算资源有限,一般难以负担大量数据解密所带来的计算开销。为了解决这个问题,外包解密的概念被引入属性加密中[14-19],其中LIU等[14]提出了一种适用于物联网设备的属性加密方案,通过将解密工作外包给云端减轻设备负担,同时引入策略隐藏技术保证隐私性。ZIEGLER等[17]同样设计了一个可外包的方案,并使用对偶向量空间技术实现了策略隐藏。LI等[18]提出了一个可用于物联网设备的外包属性加密方案,并在RCCA安全模型下证明了方案的安全性。此外,郭瑞等[19]基于区块链技术设计了一个可外包的属性加密方案,并引入白盒可追溯性对恶意用户进行追踪。
在智能化的时代下,如何实现数据的跨域流通与共享成为一个亟须解决的问题,同时随着数据受控共享所涉及的场景愈发复杂,企业要求实现数据流通过程的透明与更细粒度的控制、属性密钥的全周期管控等。此外,传统的CP-ABE方案中缺乏对属性申请者的身份验证的统一且规范的认证模式以及存在数据持有者进行加密后就会失去对数据的后续控制权的缺陷。针对上述需求,本文引入区块链技术[20]与可验证凭证(VC)[21]概念,提出基于区块链的可问责可验证外包分层属性加密方案。本文方案支持分布式架构,可由多个独立属性机构自行管理属性,与区块链的去中心化特性相契合,通过区块链技术保障数据流通期间的透明可信,利用VC与问责机制保证属性密钥的合法生成与正确使用。为了解决数据可控性问题,本文方案引入分层概念,在保留一对多加密的灵活性的同时保留了持有者对数据的全生命周期的监管。属性加密方案可以为持有者初步筛选符合访问策略的访问者,而持有者具有最终决定权。综上所述,本文主要工作如下:
1) 利用VC概念和问责机制,用户在申请属性密钥之前需要先得到属性机构的VC作为持有该属性的认证。生成属性密钥时需要先验证此凭证,保证了密钥生成的合法性。问责机制可以判断属性密钥是否有效以及确认其属权。
2) 引入区块链技术,利用其去中心化与不可篡改的特性,通过编写智能合约,将数据流通的全流程记录在链上,以实现更高的透明度,同时满足跨域共享的需求。
3) 借助外包技术,用户可以生成一次性外包解密密钥,并将数据部分加解密计算过程交给算力充足的云节点,减轻物联网设备的计算负担。
4) 通过对数据进行分层加密,实现更加细粒度的控制,其中第一层数据由设定的访问策略控制,第二层数据的控制权交回给数据持有者本身。
1 预备知识
1.1 素数阶双线性群
设G和GT是两个阶为素数p的循环群,g表示群G的生成元。e: G×G→GT是一个双线性映射,其满足以下性质:
1) 双线性:∀a, b∈Zp, e(ga, gb)=e(g, g)ab。
2) 非退化性:存在g∈G使得e(g, g)在GT中的阶为p。
3) 可计算性:∀g, h∈Zp,可以在多项式时间内计算双线性映射e(g, h)。
1.2 单调访问结构
设U=P1, P2, …, Pn是一个属性集合,定义U上的一个访问结构A⊆2P1, P2, …, Pn是属性集合U的非空子集构成的集合。A中的子集称为授权集,而不在A中的子集称为非授权集。一个访问结构如果满足∀B, C∈A: if B∈A and B⊆C, then C∈A, 则是单调的[22]。
1.3 DDH假设
设q是一个大素数,G为阶是q的群,g是G的生成元。给定两个元组(g, ga, gb, gc)和(g, ga, gb, gab),其中a、b、c是从Zq中随机选取的。如果不存在任何概率多项式时间的敌手A可以以不可忽略的概率区分随机选取的R=(g, ga, gb, gc)与D=(g, ga, gb, gab),即AADDH= |Pr[A(R)=1]-Pr[A(D)=1]|, 该值可忽略不计,则DDH假设[23]成立。
1.4 q-SDH假设
设G是一个阶为p的循环群,g为群G的生成元。在群G上的q-SDH问题[24]定义如下:首先随机选择一个元素x∈Zp,以及相应的一个q+1元组(g, gx, gx2, …, gxq);然后随机选择另一个元素c∈Zp并计算元素对(c, g1/(x+c))。若敌手A可以以ε的优势解决群G上的q-SDH问题,则其满足如下条件:
Pr[A(g,gx,gx2,⋯,gxq)=(c,g1/(x+c))]⩾ε
如果不存在任何多项式时间敌手A可以以不可忽略的优势破解群G上的q-SDH问题,则称q-SDH假设在群G上成立。
1.5 线性秘密分享方案
线性秘密分享方案(LSSS)定义[22]如下:设p是一个素数,U是属性集合,如果一个秘密分享方案Π在Zp的U上是一个线性访问结构,则它满足以下2个条件。
1) 每个U中的属性对应的Zp上的秘密分享值构成Zp上的一个向量。
2) 对于U上的每个访问结构A,存在一个对应的矩阵A(称为秘密生成矩阵)以及一个函数ρ,将A的每行映射到U中的每个属性,且满足以下条件:在生成秘密时,考虑这样的一个列向量ν=(s, r2, r3, …, rn)T,其中s是需要分享的秘密值,r2, r3, …, rn是在Zp中随机选取的,则每个属性对应的秘密分享值可以表示成λj=Aj·ν。
(A, ρ)是访问结构A的一个访问策略。每个秘密分享方案都满足重构性与安全性,重构性即每个授权集都可以重构出秘密值,安全性即任意非授权集都无法重构出秘密值。更加具体地说,令S表示一个授权集,I表示S中属性所对应的行下标集合,则存在一组Zp上的常量ci满足对于任意的有效秘密分享值λi都有∑i∈Iciλi=s成立,即有∑i∈IciAi=(1,0,⋯,0)成立,而对于非授权集S′不存在这样一组常量。
1.6 Boneh-Boyen签名方案
Boneh-Boyen(BB)签名方案由BONEH与BOYEN[24]于2008年提出,目的是基于SDH假设,在选择消息攻击下构造一个不可伪造的签名方案。设(G1, G2)是一对双线性群,其素数阶为|G1|=|G2|=p,待签名的消息m∈Zp。BB签名方案由以下3种算法组成:
1) KeyGeneration:随机选择生成元g1∈G1、g2∈G2以及随机整数x、y∈Zp,计算u=g2x∈G2、v=g2y∈G2和z=e(g1, g2)∈GT,最终方案的公钥是一个五元组(g1, g2, u, v, z),私钥为(g1, x, y)。
2) Signing:给定一个私钥(g1, x, y)以及一个消息m∈Zp,随机选择一个r∈Zp,算法输出签名σ=g11/(x+m+y·r)∈G1。
3) Verification:给定一个公钥(g1, g2, u, v, z)以及一个消息m、一个签名σ,验证等式e(σ, u·g2m·vr)=z。如果等式成立,则此签名有效。
BB签名方案已被证明在SDH假设下可以抵抗选择消息攻击。
2 方案模型与安全性模型
2.1 通用流程
本文方案的通用流程如图 1所示,每个数据管理域可以独立设置属性机构,而用户根据其不同需求承担不同角色,例如:用户需要加密分享数据,则成为系统中的数据持有者;用户需要解密访问数据的用户,则成为系统中的数据访问者。数据可以根据访问策略的不同而在不同域间进行流转。具体的操作流程如下:
图1 方案通用流程Fig.1 General process of the scheme |
1) 用户注册:用户选择系统中用户唯一标识符GID并执行用户信息初始化操作。
2) 属性机构注册:属性机构声明本机构的名称并执行属性机构信息初始化操作。
3) 属性机构声明属性:属性机构声明本机构可以授予的属性,其间会生成该属性对应的私钥ASK与公钥APK。一个属性机构可以声明多个属性。
4) 用户申请VC:用户向对应的属性机构申请其管理的属性对应的VC,VC与GID绑定,用于后续申请属性密钥时的验证。
5) 属性机构生成VC:属性机构在查验申请用户提交的相关资料后,为其生成合法VC。
6) 用户申请属性密钥:用户向对应的属性机构申请其管理的属性对应的属性密钥,需要提供相应的VC进行验证。
7) 属性机构授予属性密钥:属性机构在接收到用户的属性申请后通过验证VC判断是否为用户授予属性,如果验证通过则为其生成对应的属性密钥。
8) 外包计算节点加密数据:作为数据持有者的用户可以设定数据的访问策略,并请求外包计算节点进行部分加密。
9) 数据持有者本地加密数据并上传:作为数据持有者的用户根据计算节点返还的部分密文进行最终加密,并上传到区块链。
10) 数据访问者进行外包解密:身为数据访问者的用户先生成一个外包加密密钥TK并提供给外包计算节点NODE进行部分解密。
11) 数据访问者获取一级解密数据:作为数据访问者的用户可以从服务器中获取想要访问的密文,然后使用部分解密的数据进行一级解密。
12) 数据访问者申请二级解密数据:当数据访问者想要查阅更为详细的二级数据时,需要直接向数据持有者发起申请。
13) 数据持有者授权二级数据:如果数据持有者同意对方查阅二级数据,则会提供一个密钥用以解密二级数据。这样保证了持有者可以持续对数据的访问权进行管理,也保留了访问者需要满足访问策略才可以进行解密的特性。
14) 验证属性密钥属权:数据访问者在获取加密数据时需要进行密钥属权的验证,防止密钥滥用、盗用等情况的发生。
2.2 IND-CPA安全模型
本文方案在选定访问结构的选择明文攻击下的不可区分性(IND-CPA)安全模型可以通过敌手A与挑战者L之间的交互游戏描述:
1) 设置:L运行方案的全局初始化算法,并将得到的全局参数GP提供给A。
2) 密钥询问1:A向L询问一系列属性密钥{Sj, GGIDj}j=1m, L响应对应的属性密钥{KUSSj, GIDj}j=1m。
3) 挑战:A选择两个消息M0、M1以及一个访问控制策略(A, ρ)并提供给L以获取挑战密文。要求对于任意一个GGIDj,KUSSj, GIDj不能满足(A, ρ)。L随机选择一个b∈{0, 1},计算Mb对应的挑战密文CT返回给A。
4) 密钥询问2:A继续向L询问一系列属性密钥{Sj, GIDj}j=1m, L响应对应的属性密钥{KUSSj, GIDj}j=1m,但对于任意一个GGIDj,KUSSj, GIDj不能满足(A, ρ)。
5) 猜测:A给出对于b的猜测b′。A在这个交互游戏中的优势为Pr[b=b′]−12。
定义1 如果没有任意概率多项式时间的敌手能以不可忽略的优势赢得上述交互游戏,则本文方案是IND-CPA安全的。
3 方案流程
3.1 符号说明
表 1列出了基于区块链的可问责可验证外包分层属性加密方案使用的符号及其含义。
表1 系统符号及其说明Table 1 System notation and its description |
|
3.2 系统初始化
GlobalSetup(1λ)→GP:GlobalSetup算法首先输入一个安全参数λ,随后选定一个阶为p的双线性群G,g为群G的生成元,另外选择两个哈希散列函数H: {0, 1}*→G和F: {0, 1}*→G分别负责将用户GID或属性映射为G中的一个元素,最后算法会输出系统全局参数: GP=(e, g, G, GT, H, F)。
3.3 属性机构初始化与属性生成
AuthoritySetup(GP, Nameθ)→{KASi, KAPi}:AuthoritySetup算法输入属性机构的机构名Nameθ进行属性机构的初始化,初始化会生成ASKMap与APKMap两个结构用于存放机构管理的属性公私钥对,每个属性机构AAθ会管理一组属性Uθ,AAθ初始化一个Epoch指示器t。在生成属性Attri时,机构需要随机选择3个元素αi、βi、γi∈Zp,最终输出生成的属性公私钥:
KAPi={gαi,gβi,gγi}KASi={αi,βi,γi}
(1)
3.4 用户属性VC生成
GenerateVC(GP, GGID, Attri)→CVi, GID:GenerateVC算法由管理Attri的属性机构AAθ或其下级负责的分管模块运行,其中GGID∈Zp,首先计算m=H(Attri‖GGID‖t),然后随机选择r∈Zp, 计算σ=g1αi+m+βi⋅r,最后得到属性VC:
Cvi,GID=(σ,r)
(2)
t用于指示VC的有效期,每经过一段时间,属性机构可以更新t,此时用户需要重新申请VC,以达到用户定期进行认证的目的。
3.5 用户属性密钥生成
VerifyAndGen(GP, GGID, CVi, GID, {KASi}, S)→KUSS, GID:VerifyAndGen算法由属性机构AAθ或其下级负责的分管模块运行。首先验证CVi, GID的有效性,计算m′=H(Attri‖GGID‖t),然后验证e(σ, gαi·gm′·gβi·r)=e(g, g),如果等式不成立,则算法终止,输出⊤,随后对于每个属性Attri∈S,随机选择一个元素ti∈Zp并计算:
KS1,i=H(GGID)βiγi⋅gαiγi⋅GGD⋅F(Atrri)tiKS2,i=gγi⋅GGIDti
(3)
最后得到属性密钥:
KUSS,GGD={KS0=GGID,(KS1,i,KS2,i)∀i∈S}
(4)
3.6 外包解密密钥生成
TransKey(GP, KUSS, GID)→KTS, GID:TransKey算法由用户运行。首先随机选择一个n∈Zp,计算:
KT1,i=KS1,i1n,KT2,i=KS2,i1nKT3=g1n,KT4=H(GGID)GGIDn
(5)
然后得到外包解密密钥:
KTS,GID=(KT0=KS0,{KT1,i,KT2,i}∀i∈S,KT3,KT4)
(6)
3.7 数据外包加密
OutSourcedEncrypt(GP, (A, ρ), {KAPi})→CT*:OutSourcedEncrypt算法由外包计算节点运行,输入访问策略(A, ρ),其中, A是一个n×l的矩阵,ρ是一个将矩阵行映射到属性集合的函数。同时,需要输入访问策略中涉及的属性公钥集合{KAPi},算法按如下方式生成部分密文CT*:
首先算法随机选择一个秘密s1∈Zp,并生成一个列向量ν=(s1, v2, v3, …, vn)∈Zpl,其中,v2, v3, …, vn也是从Zp中随机选取的,同时生成另一个向量ω=(0, w2, w3, …, wn)∈Zpl, w2, w3, …, wn同样是从Zp中随机选取的。然后,对于矩阵的每一行Ai,计算λi=Ai·ν, ωi=Ai·ω。
随后对矩阵的每行随机选择一个ri∈Zp,计算:
C1,i∗=gλi⋅gαρ(i)⋅ri,C2,i∗=g−γρ(i)⋅riC3,i∗=gβρ(i)⋅ri⋅gωi,C4,i∗=F(ρ(i))ri
(7)
最后返回部分密文:
CT∗={s1,(C1,i∗,C2,i∗,C3,i∗,C4,i∗)∀i∈I}
(8)
3.8 数据分层本地加密
LocalHEncrypt(GP, M1, M2, (A, ρ), CT*)→CT:LocalHEncrypt算法由用户运行。输入需要加密的一级数据M1、二级数据M2以及相应的访问策略(A, ρ),得到部分密文CT*,并按如下方式生成最终密文CT:
算法首先随机选择两个秘密s2、d0∈Zp,秘密为s=s1·s2,计算C=M1·e(g, g)s、C*=M2·e(g, g)s+d0。然后对于矩阵的每一行计算:
C1,i=(C1,i∗)s2,C2,i=(C2,i∗)s2C3,i=(C3,i∗)s2,C4,i=(C4,i∗)s2
(9)
最后得到密文:
CT={C,C∗,(C1,i,C2,i,C3,i,C4,i)∀i∈I}
(10)
式中:C为一级概括性数据;C*为二级详细数据。当访问者持有的属性满足访问策略时,只能解密C,而详细数据C*的访问权依旧由持有者控制。一般而言,一级数据量较小,持有者可以快速判断是否需要申请访问二级数据,而无需在一开始就阅读大量数据。
3.9 数据外包解密
OutSourcedDecrypt(GP, CT, (A, ρ), KTS, GID)→X:OutSourcedDecrypt算法由计算节点运行,输入密文CT与解密密钥集合KTS, GID,S表示KTS, GID对应的属性集合,I={i: ρ(i)∈S}表示属性对应的矩阵行集合,Ai表示矩阵的第i行。算法首先计算一组常量{ci},满足∑i∈Ici⋅Ai=(1,0,⋯,0),然后对I中的每一行计算:
e(C1,i,KT3)⋅e(KT1,ρ(i),C2,iKT0)⋅e(KT4,C3,i)⋅e(C4,i,KT2,ρ(i))=e(g,g)λin⋅e(H(GGID),g)ωi⋅GGIDn
(11)
随后对得到的每行的值进行乘方并累乘,由于∑i∈Iλi⋅ci=∑i∈I(Ai⋅v)⋅ci=v⋅(1,0,⋯,0)=s以及∑i∈Iωi⋅ci=∑i∈I(Ai⋅ω)⋅ci=ω⋅(1,0,⋯,0)=0,因此可以得到:
∏i∈I(e(g,g)λin⋅e(H(GGID),g)ωi⋅GGIDn)ci=e(g,g)sn
(12)
最后返回部分解密结果X=e(g,g)sn。
3.10 本地一级解密
FirstLevelLocalDecrypt(GP, CT, X, n)→M1:FirstLevelLocalDecrypt算法由用户本地运行,首先输入部分解密结果X以及KT对应的n,计算Xn=e(g, g)s。然后计算得到M1=C/Xn。
3.11 本地二级解密
SecondLevelLocalDecrypt(GP, CT, e(g, g)d0)→ M2:SecondLevelLocalDecrypt算法由用户运行,当用户在查阅一级解密数据之后,如果对更详尽的二级数据感兴趣,则可以向数据持有者申请解密二级数据的密钥e(g, g)d0,计算M2=C∗e(g,g)s⋅e(g,g)d0。
3.12 密钥问责
AccountKey(GP, {KAPi}, KUS)→GGID:AccountKey算法由需要进行问责的用户执行,输入需要确认属权的属性密钥KUS以及其相关的属性公钥集合{KAPi},算法首先验证KUS是否满足如下形式:KUS={KS0, (KS1, i, KS2, i)∀i∈S}。如果不满足以上形式,则算法输出⊤,否则算法会进行如下密钥有效性校验:
、KS1,i、KS2,i∈G,KS0∈Zpe(KS1,i,gγi⋅KS0)=e(H(GGID),gβi)KS0⋅e(g,g)αi⋅e(F(Atrri),KS2,i)
(13)
如果KUS通过了有效性校验,则算法输出GID,否则算法输出⊤。如果算法输出⊤,则说明属性机构未诚实生成密钥;如果算法输出的GID与使用密钥者的GID不一致且区块链上存在密钥生成记录,则说明使用者存在恶意行为;如果算法输出的GID在区块链上未找到对应的密钥生成记录,则说明属性机构恶意伪造了密钥。
4 正确性与安全性证明
4.1 正确性分析
通过以下计算可以证明本文方案的正确性:
Di=e(C1,i,KT3)⋅e(KT1,ρ(i),C2,iKT0)⋅e(KT4,C3,i)⋅e(C4,i,KT2,ρ(i))
(14)
e(C1,i,KT3)=e(gλi⋅gαρ(i)⋅ri,g1n)⋅e(g,g)λin⋅e(g,g)αρ(i)⋅rin
(15)
e(KT1,ρ(i),C2,iKT0)=e(H(GGID)βρ(i)γρ(i)⋅n⋅gαρ(i)γρ(i)⋅n⋅GGID⋅F(ρ(i))tρ(i)n,g−ri⋅γρ(i)⋅GGID)=e(H(GGID)βρ(i)ρρ(i)⋅n,g−ri⋅γρ(i)⋅GGID)⋅e(gαρ(i)γρ(i)⋅n⋅GGID,g−ri⋅γρ(i)⋅GGID)⋅e(F(ρ(i))tρ(i)n,g−ri⋅γρ(i)⋅GGID)=e(H(GGID),g)−βρ(i)⋅ri⋅GGIDn⋅e(g,g)−αρ(i)⋅rin⋅e(F(ρ(i))tρ(i)n,g−γρ(i)⋅ri⋅GGID)
(16)
e(KT4,C3,i)=e(H(GGID)GGIDn,gβρ(i)⋅ri⋅gωi)=e(H(GGID)GGIDn,gβρ(i)⋅ri)⋅e(H(GGID)GGIDn,gωi)=e(H(GGID),g)βρ(i)⋅ri⋅GGIDn⋅e(H(GGID),g)GGID⋅ωin
(17)
e(C4,i,KT2,ρ(i))=e(F(ρ(i))ri,grρ(i)⋅GGIDtρ(i)n)
(18)
将式(15)~式(18)代入式(14)中可得Di=e(g,g)λin⋅e(H(GGID),g)ωi⋅GGIDn,然后对得到的每行的值进行乘方并累乘,由于∑i∈Iλi⋅ci=∑i∈I(Ai⋅ν)·ci= ν·(1, 0, …, 0)=s以及∑i∈Iωi⋅ci=∑i∈I(Ai⋅ω)⋅ci=ω⋅(1,0,⋯,0)=0,因此可以得到:
∏i∈I(e(g,g)λin⋅e(H(GGID),g)ωi⋅GGIDn)ci=e(g,g)sn
(19)
由此可得本文方案满足正确性要求。
4.2 安全性证明
定理1 设DDH假设是困难的,则本文方案在随机预言机模型下能够满足选定访问结构的选择明文安全。
证明:假设存在敌手A以不可忽略的概率ε攻破本文方案,则可以构造另一个敌手B以ε2的优势破解DDH假设,设L是敌手B的挑战者。L设置t0=(g, ga, gb, gc)与t1=(g, ga, gb, gc=a·b),并随机选择一个τ∈{0, 1},将τ交给敌手B,然后敌手B充当敌手A的挑战者,进行以下交互:
1) 设置:B运行方案的全局初始化算法,并将得到的全局参数GP=(e, g, G, GT, H, F)提供给。
2) 密钥询问1:A向B询问一系列属性密钥{Sj, GGIDj}j=1m,当B收到询问时,首先向L询问、H(GGID)bc、gac以及gc,然后按照密钥生成算法计算对应的属性密钥{KUSSj, GIDj}j=1m以响应A。
3) 挑战:A选择两个消息M0、M1以及一个访问控制策略(A, ρ)并提供给B以获取挑战密文,要求对于任意一个GGIDj,KUSSj, GIDj不能满足(A, ρ)。B随机选择一个b∈{0, 1},按照加密算法计算Mb对应的挑战密文CT返回给A。
4) 密钥询问2:A继续向B询问一系列属性密钥{Sj, GGIDj}j=1m,B按照同样的方式响应对应的属性密钥{KUSSj, GIDj}j=1m,但对于任意一个GGIDj,KUSSj, GIDj不能满足(A, ρ)。
5) 猜测:A给出对于b的猜测b*。如果b=b*,则B输出其猜测τ*=1,否则输出猜测τ*=0。
当τ=1时,c=a·b,假设敌手L以优势ε攻破本文方案,则敌手B也可以相同的优势ε破解DDH假设,此时B赢得游戏的概率为Pr[τ*=τ|τ=1]=ε+12。
当τ=0时,c是随机选取的,敌手A无法获取任何关于c的信息,因此敌手B赢得游戏的概率为Pr[τ*=τ|τ=0]=12。
敌手B攻破DDH假设的优势如下:
ABDDH=∣Pr[τ=0]⋅Pr[τ∗=τ∣τ=0]+Pr[τ=1]⋅Pr[τ∗=τ∣τ=1]−12|=|12⋅12+12⋅(ε+12)−12|=ε2
证毕。
5 方案分析
5.1 功能特性对比
表 2展示了本文方案与文献[14-16]方案的功能特性对比。由对比结果可见,4个方案都支持LSSS的访问表达策略且支持外包解密,但仅有本文方案支持外包加密,通过将加解密算法的部分开销都交给计算节点承担,因此本文方案更加适用于算力有限的场景。文献[15-16]方案不支持分布式多属性机构,即需要由单一属性机构管理属性,机构需要自行记录在生成属性密钥时为每个用户生成的随机数,以达到抗合谋性,不适用于跨域多机构的场景。文献[15]方案没有密钥问责机制,恶意用户或机构的行为无法得到跟踪并进行惩处。文献[14, 16]方案没有使用区块链技术,数据的流转不能进行公开记录,而是需要各个机构自行维护,存在记录透明度低、可信度差、难以达成一致等问题,这些会导致数据的可用性低。文献[14-16]方案都未考虑用户身份认证的问题,每个机构都需要自行实现一套验证架构,并且无法共通,难以应用在实际场景中。文献[14-16]方案也没有对数据进行分层加密处理,数据持有者一旦进行数据加密,就失去了后续的数据处理权,全权交由属性加密方案托管。综上分析,本文方案在保留分布式架构、外包解密和问责机制这三大特性的基础上,通过引入区块链技术与VC的概念,实现了数据的公开透明性与身份可验证性,同时对数据分层加密,在保留属性加密的一对多特性下,将数据的可支配权交还给持有者,以此达到更加细粒度的访问控制。
表2 方案功能特性对比Table 2 Comparison of functional features of schemes |
|
5.2 理论计算开销对比
表 3展示了本文方案与文献[14-16]方案的理论计算开销对比,仅考虑在算法运行过程中涉及的指数运算与双线性映射运算两种计算开销较大的操作,而忽略了加法、哈希、网络通信等开销,其中“—”表示原文献中没有该指标值。令EGT表示群GT上的指数运算开销,EG表示群G上的指数运算开销,P表示双线性映射的运算开销,|C|表示数据加密算法中涉及的属性个数,|S|表示外包密钥生成算法中涉及的属性个数。由表 3的对比结果可知,本文方案的大部分计算开销与文献[14]方案持平,但考虑到本文方案提供了数据分层与身份认证的特性,因此本文方案在计算开销与功能特性之间取得了更好的平衡。虽然本文方案的计算开销相比于文献[15-16]方案略高,但文献[15]方案不具备可问责机制,且这两个方案都依赖于单一的属性机构,不具备可扩展性,更无法支持跨域访问,因此本文方案在实际应用场景下是更具优势的选择。
表3 方案计算开销对比Table 3 Comparison of computational cost of schemes |
|
5.3 仿真实验
实验仿真的目的是测试本文方案与文献[14, 16]方案在各个算法上的运行时间对比。所使用的实验仿真主机CPU型号为8核Apple M1 Pro,运行内存为16 GB,使用Nik-U开源的Golang Pbc库,每个算法默认运行1 000次。为了进一步还原方案各算法在资源有限的物联网设备上的运行情况,使用Docker容器作为测试环境。通过限制Docker容器的CPU核数为1、内存最大占用量为128 MB,以模拟资源受限的情况。测试基准的各种指数运算和配对运算所需的时间如表 4所示。
表4 基准运算耗时Table 4 Benchmark operation time |
|
图 2展示了文献[14, 16]方案与本文方案在本地运行的加密算法中的运行时间对比。从图 2中对比可知,由于本文方案引入了外包加密,因此相较于文献[14, 16]方案,设备在加密时的本地计算开销更小。同时,文献[16]方案不支持分布式的多属性机构,不具备数据分层加密的特性,这些导致其应用场景受限。在属性个数为30时,本文方案的本地加密算法的耗时在800 ms左右,考虑到加密算法的使用频率,此开销仍在设备的承受范围内。综上,本文方案在加密算法的性能与特性上取得了更好的表现。
图2 本地加密算法运行开销Fig.2 Running overhead of local encryption algorithm |
图 3展示了文献[14, 16]方案与本文方案在外包解密算法中的运行时间对比。由图 3可知,由于使用素数阶双线性映射群,本文方案在3个方案中具有更小的计算开销,且随着属性个数的增加,本文方案的开销增长速率明显更缓慢,可以更好地应对属性数量较大的场景。由于是在算力有限的仿真情况下运行,因此本文方案的运行开销较大,在属性个数为30时将近1.5 s。但实际使用时,解密过程会外包给算力充足的外包节点,因此运行开销会显著下降。
图3 外包解密算法运行开销Fig.3 Running overhead of outsourced decryption algorithm |
图 4展示了本文方案的各个算法耗时,所有算法均以属性个数为30进行实验。由于属性密钥生成时需要额外进行VC验证的步骤,因此开销略高。密钥问责算法并非高频使用,仅在存在需要确认密钥属权时使用。因此,对于资源有限的小型物联网设备,其最频繁调用的本地加解密算法开销都在1.5 s以内,可以满足实际场景的使用需求。
图4 本文方案中各个算法的开销Fig.4 Overhead of each algorithm in the proposed scheme |
6 结束语
如何在不同的实际应用场景下实现对数据的灵活访问控制是一个颇具现实意义的研究方向,传统的访问控制方案(如RBAC)难以独立于某一特定的使用场景而单独存在,且一般适用于单一企业内部的使用,可扩展性较差,在当下需要多个企业协作的全球化背景下局限性较大,因此基于属性加密的数据访问控制方案是更为合适的选择,其中分布式多属性机构的加密架构得到了广泛的研究与应用。本文提出的方案基于当下的物联网背景,使用外包技术减轻小型设备的解密开销,并针对愈发复杂的数据共享访问控制的应用场景以及对于跨域访问的需求,利用VC概念将身份验证与密钥生成解耦,最后引入分层思想,将数据的控制权交回到持有者,同时实现更细粒度的访问控制。通过对本文方案进行功能特性与计算开销的分析并进行实验仿真来验证其特性与可用性。此外,本文方案没有绑定的应用模型,可以作为插件灵活地适配于各种实际应用场景。未来的研究方向将聚焦于对方案的功能特性进行升级并对计算开销进一步优化,以及进一步增强方案的隐私性。