区块链中匿名属性验证可搜索加密方案
2024-03-21万文豪王静宇武彦君
万文豪,王静宇+,武彦君
(1.内蒙古科技大学 信息工程学院,内蒙古 包头 014010;2.中国科学技术大学 科学岛分院,安徽 合肥 230022)
0 引 言
近年来,随着大数据和智能化时代的不断向前发展,每天有大量的相关数据产生,数据安全存储与共享成为一个十分重要的问题[1]。传统第三方云存储的方式共享数据存在数据中心化存储等问题,数据隐私容易泄露[2]。区块链是一个分布式数据库,在所有参与方之间共享[3]。区块链具有去中心化的特点,基于区块链技术的分布式数据存储与共享方案可以解决中心化存储模式的单点故障和数据易被第三方篡改等问题,打破“数据孤岛”[4]。为了保证数据的机密性,数据外包到第三方前需要进行加密,但这样会影响数据的可用性。为了解决数据共享和搜索问题,可搜索加密技术及时产生。
针对属性基可搜索加密搜索数据时存在的数据用户属性隐私泄露问题。本文提出基于区块链的匿名属性验证可搜索加密数据共享方案,主要贡献如下:
(1)引入非交互式Schnorr协议实现数据用户属性隐私保护,可以有效保护用户隐私。
(2)使用智能合约提供搜索服务,相比于云服务器搜索,可以避免服务器作恶返回错误搜索结果。
1 相关工作
可搜索加密是指数据或文件在加密状态下实现搜索功能,相比于传统的明文搜索具有较好的隐私保护效果。Zhang等[5]、Wang等[6]和Li等[7]分别提出了一种对称可搜索加密算法。但是现有云服务器大多是半可信的,为了解决云服务器存在不可信的问题,Zhu等[8]提出了一种多用户通用可验证可搜索加密模型,利用Merkle Patricia Tree(MPT)和Incremental Hash构建具有数据更新支持的证明索引。
属性基加密是一类具有细粒度访问控制权限的加密算法。只有属性满足的用户才具有访问权限解密数据。传统的CP-ABE算法密文绑定了一个显式的访问结构,存在隐私泄露的风险。Niu等[9]在多用户环境下提出一种属性基可搜索加密方法,该方法支持策略隐藏并具有较好的功能和性能。Lyu等[10]、Miao等[11]提出的属性基加密都没能解决数据用户属性隐私的问题。
区块链作为一种分布式去中心化前沿技术,基于区块链辅助的可搜索加密方案可以达到较好的数据共享与隐私保护效果。Huang等[12]提出了一种支持属性撤销的多关键字可搜索加密方案,在属性撤销过程中不需要更新密钥。Li等[13]使用比特币区块链技术实现了一种对用户和服务器都公平的对称可搜索加密方案。Liu等[14]提出了一种基于区块链的具有高效撤销和解密功能的属性基可搜索加密(BC-SABE)。针对传统的属性基可搜索加密开销较大,无法在资源受限的移动设备上应用的问题,Brij B等[15]提出使用区块链技术降低属性基可搜索加密的开销,使用区块链中不同节点分担不同的计算任务。
2 相关理论基础
2.1 双线性映射
(2)非退化性:∃m,n∈G1,使e(m,n)≠1;
(3)可计算性:∀m,n∈G1,存在有效算法计算e(m,n)。
2.2 非交互式Schnorr协议
已知椭圆曲线E和点G,Q,随机选择一个整数d,可以得到Q=d*G,非交互式Schnorr协议流程如下:
(1)Prover随机选择a∈Zp作为私钥SK,然后随机选取椭圆曲线上的点G,计算公钥PK=a*G随机选择整数r并计算R=r*G,c=Hash(R,PK),Z=r+c*sk,然后Prover生成证明 (R,Z)。
(2)验证者Verifier计算e=H(PK,R),然后Verifier验证Z*G=R+c*PK
2.3 困难问题
3 方案设计
3.1 方案模型
本方案构造的系统模型如图1所示,定义了5个实体,分别是:数据拥有者、数据用户、星际文件系统、区块链和密钥生成中心。
图1 方案模型
(1)数据拥有者(data owner,DO):数据拥有者产生数据后需要将数据存储到云端。数据拥有者负责定义属性访问控制策略,并在发布到云端之前对在该策略下的数据加密。
(2)数据用户(data user,DU):数据用户是一个想要访问云端数据的第三方实体。数据用户在查询需要的数据之前要证明自己拥有相应的属性,只有拥有合法属性的数据用户才可以查询存储在云端的数据。
(3)星际文件系统(inter-planetary file system,IPFS):星际文件系统是一个分布式的数据存储系统,与云服务器类似。数据拥有者将加密后的数据存储在分布式星际文件系统中,最后将会返回一个存储地址到数据拥有者。
(4)区块链(Blockchain):区块链中存储密文的Hash值和索引信息。同时区块链中的智能合约可以完成授权、审计和验证等交易,并且可以高效、可信的完成交易。
(5)密钥生成中心(key generation center,KGC):密钥生成中心是一个可信的密钥生成机构,主要负责初始化系统,生成系统参数、公钥和私钥等。
3.2 方案概述
本文中使用的符号见表1。本文方案大致可以分为4个阶段,分别是系统初始化阶段、数据加密阶段、关键字搜索阶段和数据解密阶段。系统初始化阶段主要为系统后续阶段做准备。在数据加密阶段主要使用属性基加密完成对数据的加密和上传;关键字搜索阶段使用非交互式零知识证明协议完成对用户属性的验证以及关键字令牌的匹配,匹配通过则进行关键字搜索,否则中止算法。解密阶段完成数据的解密操作。
表1 主要参数
系统初始化阶段:系统初始化阶段主要完成属性基加密的相关参数生成和系统公钥、主密钥和数据用户属性私钥生成。
数据加密阶段:加密数据由DO上传到IPFS后,IPFS返回加密数据的地址给DO,DO将提取出来的关键字集合和对称加密算法AES的密钥SKAES使用属性可搜索加密算法加密后与IPFS返回的地址组成一个元组上传到区块链中。当DU需要访问某个DO的数据时,DU先确定所需关键字信息并生成搜索令牌,在区块链上搜索相关数据。若DU满足相关条件,智能合约将保存在区块链上的数据存储地址发送给DU,DU使用解密密钥解密该地址,DU通过这个地址去访问IPFS并获取数据。
关键字搜索阶段:属性验证采用非交互式Schnorr协议完成,DU使用非交互式Schnorr协议生成零知识证明,并将零知识证明发送给智能合约,智能合约收到DU发送的零知识证明后验证该零知识证明是否符合要求。使用Schnorr协议可以在不暴露DU属性的情况下在区块链上搜索加密的关键字。属性验证通过后,DU生成搜索令牌向区块链上的智能合约发起搜索请求,智能合约接收DU发来的搜索令牌,然后验证令牌是否匹配,验证通过后才执行关键字匹配。搜索到相关信息后返回区块链上存储的相关信息。
数据解密阶段:数据解密阶段首先恢复出对称加密密钥,然后使用对称加密密钥解密数据密文得到数据明文。
本方案设计了6种算法,算法形式化定义如下:
(1)Setup(1λ)→(PK,MK):该算法由KGC执行,输入安全参数λ,输出系统公钥PK和主密钥MK。
(2)Keygen(PK,MK,S)→SKu:该算法由KGC执行,输入系统公钥PK,主密钥MK和用户属性集输出用户私钥SKu。
(3)Encrypt(PK,KW,SKAES,A):加密算法包含以下3个步骤:
1)DO输入需要加密的数据D,以及对称加密算法AES的密钥SKAES,输出数据密文CTdata。DO将密文CTdata上传到IPFS,并记录IPFS返回的存储地址Daddr,将存储地址Daddr使用相同的对称加密算法AES加密后组成元组上传到区块链中。
2)DO执行此步操作,输入系统公钥,访问结构A,数据关键字集KW,将关键字加密然后上传到区块链中。
3)DO执行此步操作,构建访问树,并将秘密值存储在树的节点中,属性值存储在叶节点中。
(4)TokenGen(PK,SKu,S,w′)→Tw:该算法由DU执行,输入公钥PK、用户私钥SKu、属性集S和查询关键字w′,输出搜索令牌Tw。
1)AttBlind(G,Qd,S)→(δj,φj):属性盲化,使用盲化后的属性生成用户属性私钥。
2)Verify(G,Qd,Pnizkp)→res:属性验证由智能合约执行,智能合约验证DU是否具备访问数据的。
(5)Search(PK,Tw′,S)→CTaddr:该算法由区块链上的智能合约执行,输入公钥PK、搜索令牌Tw和属性集S,输出密文存储地址。
(6)Decrypt(PK,SKu,S)→SKAES:该算法由DU执行,输入系统主密钥MK,用户私钥SKu和地址密文CTaddr,输出数据属主明文地址address。
3.3 具体方案
3.3.1 系统初始化
系统初始化阶段包括两个算法,分别是setup()和keygen()。
(2)Keygen(PK,MK,S):用户输入属性集S,KGC使用Schnorr协议将每个属性盲化并生成用户私钥SKu。
DU使用Hash函数H1计算挑战δj
δj=H1(G‖Qd‖P‖j)
(1)
DU计算φj对挑战δj的响应
φj=m+δj*kd(modp)
(2)
DU将上述信息打包成Pnizkp,其中包含4条信息,分别是P,Qd,φj和δj,然后将Pnizkp发送给智能合约。
(3)
3.3.2 数据加密阶段
Encrypt(PK,KW,SKAES,A):在数据加密和上传阶段DO运行该算法,首先加密数据并上传到区块链中,然后提取关键字集KW,将关键字加密后上传到区块链中。最后构造访问树将秘密值存储于访问树中。主要步骤如下:
(3)DO输入公钥PK,访问结构A,关键字KW。对于访问树T中的每一个节点(包括叶节点和非叶节点),DO选择一个阶为dx的多项式qx,其中dx=kx-1,kx表示该节点的阈值。对于访问树T的根节点R,DO设置根节点的多项式qR(0)=v,然后,选择多项式qx的dx个点完成对qx的定义。对于其它非根节点x,设置多项式qx(0)=qparent(x)(index(x)),其中index(x) 的值表示x的父节点parent(x) 在第index(x) 个左孩子节点。设Υ为访问树T中的叶节点集合,然后,计算元组 (Dx,D′x),对于x∈Υ,有
(4)
其中,att(x) 表示与访问树中叶子节点相关联的属性。最后,DO将元组 2={σi,σ′i,Dx,D′x} 上传到区块链中。
3.3.3 关键字搜索阶段
(5)
(2)Search(PK,Tw′,S):智能合约接收DU的搜索令牌和属性集后。智能合约首先检查DU的属性集是否满足访问结构A,检查属性是否匹配的过程由非交互式Schnorr协议验证,避免泄露用户的属性数据。如果属性集满足嵌入到索引关键字中的访问策略,数据用户具有对关键字w的搜索权限,然后智能合约将通过搜索令牌匹配密文关键字。如果关键字匹配成功,则通过以下步骤返回相关的元组:
(1)Verify(G,Qd,Pnizkp):
智能合约使用Qd计算点P′=φjG-δjQd,并检查P是否等于P′。如果P=P′,那么DU属性验证通过进入匹配过程,否则属性验证失败,算法中止。
(2)匹配过程:①若x是叶节点,并且满足x=j∈S。那么,计算Dx,如果叶节点x∉S,则Fx=⊥
(6)
②若x是非叶节点,Fx定义如下,对于x的每个孩子节点τ,智能合约计算输出Fτ,设λx为任意阈值的孩子节点集合,因此,Fτ≠null;如果没有此集合,那么,Fτ=null,否则通过下式计算Fτ,其中
(7)
(8)
③用户的属性集满足访问结构A,进行部分解密得到FR=e(g,g)rsv。然后,智能合约检查索引I是否满足令牌Tw′,如果公式成立,智能合约将返回相关的相关的密文集给DU,否则返回⊥。
正确性
e(σi,t2)=e(ga(μ+v)·gbμH1(w),gcs)
e(ρ,t1)·FR·e(t3,σ′i)=
e(gcμ,gas·gbsH1(w′))·e(g,g)rsv·e(gs(ac-r)/b,gbv)=
e(gcμ,gas)·e(gcμ,gbsH1(w′))·e(g,g)rsv·e(gss(ac-r)/b,gbv)=
e(g,g)aμcs·e(g,g)bμH1(w′)cs·e(g,g)avcs=
e(ga(μ+v)·gbμH1(w′),gcs)
得证
3.3.4 解密
Ci/φi=(SKAES·e(g,g)αv)/e(g,g)αv=SKAES
(9)
最后,DU使用对称密钥解密从IPFS获得的数据密文。DU从DO处获得存储在IPFS上的加密数据地址,DO从该地址下载数据,使用对称加密算法密钥解密该数据。
3.4 智能合约设计
智能合约可以诚实的执行用户提交的请求,并返回正确的搜索结果。以下是设计的两个智能合约,分别是添加索引合约和搜索合约。
添加索引合约,由DO执行。当DO新上传一些数据到IPFS时,从这些数据中选择一个关键字集,并建立相应的加密关键字索引,存储到智能合约。函数的第一个参数是事务id txid,第二个参数是加密的关键字索引key。
Contract 1:addIndex
Input:txid,key
Output:bool
(1)if msg.sender == DO
(3) index[I].push(tmp)
(4)else
(5) throw
(6) return true
搜索合约,这个合约由授权集合中的用户和契约的创建者DO执行。该合约传递加密的关键字索引key,并返回与key关联的密钥集。
Contract 2:Search
Input:T
Output:searchresult
(1)if msg.sender == DU
(2) len =index[T].length;
(3) if len=0
(4) searchresult=null;
(5) else if S∈A
(6) for(i=0;i (7) Search(result:index[T][i]) (8) If search.len!=0 (9) searchresult=Pkey (10) end (11) end (12) end (13) else (14) throw (15) end (16) return searchresult 4.1.1 隐私保护 本文从隐私数据信息的全生命周期,包括隐私产生/收集保护,数据发布/存储/流转保护,隐私提取/使用保护3个阶进行保护。隐私产生/收集阶段,非交互式Schnorr协议未提交私钥而完成身份认证的过程是身份隐私保护的一种方式使得在数据拥有者、数据查询者身份信息的隐藏且具备不可欺骗的特性。数据用户提交搜索请求,使用非交互式Schnorr协议将数据用户属性集中的每一个属性盲化得到φj,KGC使用盲化后的属性为数据用户生成密钥π′j=gφj。数据发布/存储/流转保护阶段,数据发布/存储过程关键字密文和数据密文分布式存储,数据流转过程采用对称加密算法AES保证数据机密性,数据用户属性集对区块链上的智能合约不可见,数据用户的具体属性信息对区块链上的智能合约不可见,因此智能合约不具备通过密文存储地址恢复密文数据能力,从而保障数据隐私性、机密性。隐私提取/使用阶段,采用属性基加密实现了用户数据的细粒度访问控制,及智能合约方式保障数据隐私性。从数据隐私全生命周期解决了数据保护和数据共享这两个相互之间存在冲突的问题,同时保护了数据的所有权、数据安全和隐私、并解决了价值的合理分配。 4.1.2 选择明文攻击下的不可区分性 定理1 该方案在随机预言机模型下对DBDH困难问题具有不可区分性。 证明:假设敌手A以不可忽略的优势ε打破该方案的CPA安全,那么,我们构造一个可以区分DBDH元组和随机元组。给定双线性映射参数 (G,GT,e,p,g),挑战者首先选择 (a′,b′,c′)∈Zp,l∈{0,1}*,v∈GT,其中g是群G的生成元,然后,如果l=0,设V=e(g,g)a′b′c′;否则,V=v。最后,将元组 (g,ga′,gb′,gc′,V) 发送给模拟器B。输入数据D和对称加密密钥SKEAES,数据拥有者生成密文。接下来在A,B之间进行CPA安全游戏。 初始化:A首先挑战访问结构A*,然后将其发送给B。 挑战:A发送两条消息m0,m1给B,B选择一个随机位l∈{0,1},并调用加密算法生成密文,并将密文发送给A。 询问阶段2:这个阶段同询问阶段1。 猜测:A返回猜测位l′∈{0,1},如果l′=l,B输出0表明V=e(g,g)a′b′c′;否则,输出1表明V是群GT中的一个随机元素v。 最后,B在选择明文安全游戏中的优势可以被下式定义 从上述分析可以得出,该方案在DBDH假设成立下是安全的。 本文方案的与其它文献进行功能对比,见表2。其中方案[11]采用与门的访问控制策略,支持可搜索加密,但是不支持数据用户隐私保护。方案[12]在区块链架构下实现了可搜索加密,对用户数据隐私具有一定的隐私保护,但不能保护数据用户的隐私。除了方案[16]和方案[17]没有使用区块链,数据存储在中心化云服务器中,存在较大的安全风险,其它方案均使用区块链实现去中心化。在访问控制策略方面,主要包括访问树和与门两种方案。本方案基于访问树的访问结构,实现了细粒度的访问控制,并且使用非交互式Schnorr协议实现了数据用户属性隐私保护。链上结合链下的方式实现了关键字密文和数据密文的分布式存储,达到了安全高效的搜索效果。 表2 不同方案系统功能对比 4.3.1 理论分析 在算法开销方面,为了方便统计,本文只统计了配对运算,G1群上的取幂操作和Hash到G1群的操作。在表3中Tp表示配对运算的时间,Te表示指数运算的时间,Th表示Hash运算时间。 表3 不同方案各算法效率对比 在表3中,分别用|S|、|X|表示用户的属性集、1个访问树的叶子节点集合和满足访问树的最小属性集,比较结果见表3,从表3可以看出本文提出的方案,在密钥生成阶段和令牌生成阶段的开销较大,在关键字加密阶段的开销优于文献[18]和文献[19],在关键字搜索阶段与文献[18]相当。 4.3.2 模拟实验 本文实验环境的硬件配置为Intel(R) Core(TM) i7-9700 CPU @ 3.00 GHz的CPU,16GRAM,操作系统是64位Windows 10专业版。实验代码实现是基于Java配对的密码学库(JPBC),实验代码采用Java语言编写,实验中使用JPBC中提出的TypeA型椭圆曲线y2=x3+x,其中p,q分别为160 bits和512 bits。测试结果取100次计算的平均值。 实验主要对比了4个算法的性能,分别是密钥生成时间,密文生成时间,搜索令牌生成时间和搜索时间,测试将属性个数从0增加到50,可以从图中看出随着属性个数增加,所消耗的时间随属性线性增长,结果如图2所示。本文方案中密文生成算法较优于文献[18]和文献[19],搜索算法与文献[18]持平,但优于文献[19]。在密钥生成阶段,由于需要将访问树中叶子节点的属性映射到群G1中,所以开销高于其它两种方案。从整体效率来看本文方案的效率具有可行性。 图2 各算法时间消耗 在以太坊区块链中部署和执行智能合约都会产生消耗,消耗用gas计算,本实验在2022年5月23日进行,以太坊和美元的汇率为1ETH=1973USD,gas的价格为1 gas price=10-9ETH,智能合约消耗测试见表4。 表4 智能合约消耗测试 表4中展示了部署合约、添加索引和搜索合约的消耗。首先是部署合约deploy合约,gas消耗为548 902,添加索引合约的gas消耗为90 862,搜索操作的gas消耗为41 139。从表4中数据可以看出本方案实现的搜索操作消耗较低,可以较好达到隐私保护的效果。 本文提出了一种基于区块链的属性匿名验证可搜索加密方案。使用Schnorr协议对数据用户的属性集隐藏,保护用户的隐私安全。使用区块链实现了数据的安全和去中心化共享,相对于传统的中心化模型,该方案具有较高的安全性和隐私性。使用智能合约提供关键字搜索服务,可以避免半可信的服务器返回错误的搜索结果。使用属性基加密实现了用户数据的细粒度访问控制。通过功能分析、性能对比等,本方案具有较高的效率和可行性。下一步工作将考虑具有属性撤销功能的可搜索加密方案。4 方案分析与对比
4.1 安全性分析
4.2 功能对比
4.3 性能分析
5 结束语