邵艺雯 赵一鸣
(复旦大学软件学院 上海 201203)
随着信息时代数据的飞速增长,数据共享越来越成为人们生活中不可或缺的部分,云服务器则是实现数据共享最重要的应用平台。因为云服务器不完全受信任,所以需要加密和访问控制[1-3]来保护数据安全性和隐私性。
2012年Xu等[4]提出了基于属性的加密在云服务器上实现细粒度文件共享的方案,将基于属性的加密和分层加密密钥管理相结合,对不同安全等级的用户生成相应等级的密钥,从而使得用户可以根据不同优先级解密密文,但该方案不具备可投射性等特征。
2016年Vladimir等[5]提出了对通用策略的基于属性密钥交换(后文简称ABKE),通过将基于属性的证书[6-10]和基于属性的加密[11-14]相结合,主要目标为:在服务器和客户端之间通过交互的方式,只有当客户端的属性集满足服务器的访问策略时,两者才能建立共享密钥。该方案具有属性隐私、抗碰撞等优点。但该方案不具备细粒度的特征,因此不支持云环境中不同优先级的分层访问特征。
随着海量数据的分权限访问在云环境中越来越重要,满足细粒度、抗碰撞、属性隐私等特征的文件共享具备非常广泛的应用场景。以云环境中的个人健康记录(PHR)为例,患者数据的安全等级不同,主治医生和医学研究者访问权限也不同。假设患者的信息包括私人信息和医疗记录两部分,私人信息安全等级较高,而医疗记录等级较低。通过基于属性的分层密钥交换,主治医生可以获取高安全等级密钥,从而同时解密私人信息和医疗记录,而医学研究者只能获取较低安全等级密钥,解密部分数据,即医疗记录。在这样的实际应用场景中,不仅要保证数据的有效获取并用于医学治疗与研究,也要最大程度地保证患者的隐私信息。类似的,在军事机构以及大小型企业数据共享系统等一系列应用场景中,当不同用户具有不同优先级时,上传到云环境中的加密数据也需要实现分层的文件共享效果。
为了在云环境中同时实现细粒度的数据访问、属性隐私、可投射性以及不可链接的性质,本文在Xu和Vladimir两者的基础上,提出基于属性的分层密钥交换协议(后文简称为H-ABKE)。通过更改基于属性的密钥交换,结合单向函数链,用于云计算中细粒度的文件共享,并使其同时满足分层、属性隐私、抗碰撞及不可链接的优点。
本文的主要贡献在于将基于属性的密钥交换与分层密钥管理结合,引入单向函数链[4]与循环算法,提出了云环境中基于属性的分层密钥交换协议。
乱码电路[5]是基于属性的密钥交换主要构件之一。定义一个可验证的乱码机制[15-17],由一系列函数元组构成:G=(Gb,Ev,Ve)。
评估算法Ev(GC,{Xj}j∈[m]):一个确定性算法,用于计算当输入线标签为{Xj}j∈[m]时乱码电路GC的值,也就是判断该标签是否满足乱码电路。
一个可验证的乱码机制必须满足三个安全特性:
1) 正确性:一个正确的乱码电路GC输出结果必须与原始电路C的结果一致。
2) 真实性:评估者仅仅可以得到其输入对应的值,除此以外不能得到任何其他的值。
3) 可证实性:检验乱码电路GC是否真正实现了给定的明文电路。一旦验证通过,即Ve的结果为接受,那么该乱码电路就不可能再产生错误值。
在属性选择加密[5](下文简称为ASE)中,明文由消息组合构成,客户端的属性决定能够被解密的子集。这就确保了数据使用者只能解密出自己对应的属性集合。每个客户端拥有一个m位的向量χ∈{0,1}m,其中χ[j]=1,当且仅当其拥有第j个属性。任何人可以基于其公钥对2m个消息进行解密:
客户端只能对x1,χ[1],x2,χ[2],…,xm,χ[m]解密成功。在ASE中,n表示安全参数,m表示属性向量的长度,客户端收到对应公钥,一个ASE机制由概率多项式时间算法元组构成:
初始化Setup(1n,m):以属性集大小m和安全参数n为输入,输出为主验证密钥和主私钥(mVK,mSK),以及公共参数PP。
密钥生成GenCert(mSK,χ):输入为主私钥mSK和属性向量χ,输出与属性集对应的、经验证的密钥对(pkχ,skχ)。
验证Vrfy(mVK,pkχ):以主验证密钥mVK和公钥pkχ为输入,当且仅当pkχ是有效的公钥时,该算法输出1,否则为0。
加密Enc(pkχ,x):以公钥pkχ和向量x为输入,该算法输出为密文c。其中,x是大小为的消息集合,形式如下:
解密Dec(skχ,c):输入为私钥skχ和密文c,输出基于属性集χ的m个明文。
本文使用单向函数链来实现分层的性质[4]。假设加密哈希函数H:{0,1}*→{0,1}ρ,那么单向函数链可定义为:
Keyi=H(Keyi-1)i∈[1,n-1]
单向函数链可以构造分层密钥结构。在已知Keyi-1的条件下,密钥Keyi可以通过计算Keyi-1的哈希值生成。较高安全等级的密钥可以生成较低安全等级密钥,反之则不然。同时,定义安全等级SC={yi|i∈[0,n-1]}。用户可以根据其密钥Keyi对安全等级为yi及以下的数据内容进行解密。
1)Fcom函数[17]:运行commitment协议,主要内容如下:发送者输入为(commit,sid,i,m),若没有格式为(sid,i,m)的消息被存储,那么存储(sid,i,m)并发送(committed,sid,i,|m|)给接收者。当发送者输入为(reveal,sid,i)时,如果格式为(sid,i,m)的消息被存储,那么发送(reveal,sid,i,m)给接收者,函数终止。
2)Ftosscoin函数[5]:生成随机密钥,当输入为(toss,sid)时,若格式为(sid)的消息未存储,那么存储(sid),否则选取r←{0,1}n,并发送(tossed,sid,r)。
3)Fsetup函数[5]:为系统中的参与方Pi生成密钥对。在长度参数m初始化之后,Fsetup函数运行算法(PP,mVK,mSK)←Setup(1n,m),存储(mVK,mSK):一旦收到Pi发的(generate,sid,Xi),Fsetup验证是否有(i,Xi)格式的消息存储记录,若存在记录,发送(result,sid,⊥)给Pi;若该记录不存在,则运行(pkχ,skχ)←GenCert(mSK,Xi)算法,存储(i,Xi)并发送(result,sid,mVK,pkχ,skχ)给参与方Pi。
为了在云环境中实现细粒度、属性隐私、抗碰撞、不可链接以及可投射性等特征,本文提出了基于属性的分层密钥交换协议。协议整体框架为数据拥有者将不同安全等级的数据分别根据相应密钥进行加密后上传到服务器,只有当数据访问者的属性集合满足拥有者某一等级的访问策略时,才能满足密钥交换的条件,从而对该安全等级及以下等级的数据内容进行解密。以云环境中细粒度的PHR数据共享为例,假设数据M包括两部分,分别为:
私人信息m0:包括患者姓名、年龄、住址、联系电话等,安全等级为y0。
医疗记录m1:包括医疗检查结果、治疗方案以及治疗记录等,安全等级为y1。
主治医生需要同时访问m0和m1来进行诊断,而医学研究者为了相关领域研究目的仅需要获取数据m1。访问策略为T0={“医学研究者”AND“主治医生”},T1= {“医学研究者”}。其中,主治医生一定是医学研究者,反之则不然。为了保证数据M在云环境中安全地进行共享,私人信息和医疗记录将分别根据密钥Key0与Key1进行加密,通过H-ABKE中的分层密钥交换,用户根据其属性集获取对应等级密钥。主治医生的属性集满足访问策略T0,将获取对应密钥Key0,并通过单向函数链获取Key1,从而对私人信息m0和医疗记录m1解密。而医学研究者仅满足访问策略T1,获取对应密钥Key1,解密医疗记录m1。
H-ABKE基本框架如图1所示。
图1 H-ABKE框架
此外,H-ABKE通过单向函数链和密钥管理机制来体现分层的特征,实现细粒度的文件访问。单向函数链作用在于实现细粒度的访问控制。图2是分层访问策略[18]与单向函数链的一个实例:分层访问结构T包括三个子访问策略,由高到低分别为T0-T1-T2,对应安全等级为y0-y1-y2,密钥为Key0-Key1-Key2,若用户属性集满足T0,则可以获取密钥Key0,进而通过单向函数生成Key1和Key2;若用户仅拥有Attr c,只满足访问策略T2,获取密钥Key2。
图2 分层访问策略与单向函数链
H-ABKE协议的实现思路为将基于属性的密钥交换运用于云环境的数据共享中,在数据拥有者和访问者之间以一种交互的方式实现属性隐私、抗碰撞、不可链接以及抗碰撞等性质。为了保护属性隐私,数据拥有者需要将访问策略发送给访问者进行计算,ASE确保了访问者解密得到的明文,即加密电路的输入线标签,要与其属性集相匹配。
数据拥有者基于Key={Key0,Key1,Key2}对文件进行加密,数据访问者则根据其相应属性集合分别对访问策略T的一部分或整个进行解密。如用户1的属性{Attra,b,c}满足整个访问策略,则可以获取密钥Key0,进而通过单向函数链获取Key1和Key2。
本文系统中有四个角色,整体模型如下:
1) 数据拥有者:为了保护数据隐私,需要在上传数据到云服务器之前对其进行加密,使得只有满足数据拥有者访问策略的用户才可以对其进行解密,从而实现访问控制。此外,数据拥有者确定数据访问策略,并可以对其不断更新。
2) 数据使用者:从云服务中获取文件,但只有满足拥有者访问策略的情况下才能进行解密。同时,不管是否在授权范围内,用户都会试图尽可能访问更多数据内容。恶意用户可能会串通,通过共享私人信息来试图解密其授权以外的数据。
3) 授权中心:负责将属性和密钥分发给用户,是一个受信任的机构。
4) 云服务提供商:运行大量连接的服务器,具有强大的运算能力和存储能力,为用户提供各项服务。但同时也会对数据内容产生好奇,是一个半信任机构。此外,本文假设所有用户和服务器间的交流信道是安全的,如SSL。
在H-ABKE中,数据拥有者确定访问策略,并将加密后的密文上传到云服务器,数据访问者获取文件,但只有满足某一安全等级的用户才能对该安全等级以及较低等级的密文进行解密。
方案整体流程为系统初始化、新用户授权、创建文件、基于属性的分层密钥交换、文件解密。
方案流程如图3所示。
图3 H-ABKE流程
2.2.1 系统初始化
授权中心AC运行初始化算法Setup(1n,m),以属性集大小m和安全参数n为输入,输出为主验证密钥和主私钥(mVK,mSK),以及公共参数PP。
2.2.2 新用户授权
在系统初始化之后,新用户被赋予属性集S,运行Fsetup算法,通过调用其中的GenCert(mSK,χ)生成该用户的公钥和私钥。
2.2.3 新文件创建
用户可以创建新文件并通过与授权中心交互对文件进行加密,随后将密文上传到云服务器。
1) 加密过程如下所示:根据安全等级SC,数据拥有者通过Ftosscoin函数生成最高安全等级密钥Key0,随后依据单向函数链Keyi=H(Keyi-1),进一步生成单向分层密钥链Key1,Key2,…,Keyn-1。
2) 需要上传到云服务器上共享的数据将通过不同等级的对称密钥加密。安全等级为yi的数据将根据密钥Keyi加密,对应的密文格式为{Datai}Keyi。之后数据拥有者将密文上传到云服务器,并发送(commit1,sid,{Key0,Key1,…,Keyn-1})给授权中心AC。
2.2.4 基于属性的分层密钥交换
分层密钥交换核心算法具体流程如下:
1) 数据拥有者公布一个分层的访问策略(policy circuit),授权中心AC检查该访问策略是否合法,若合法广播给数据使用者,否则终止。
6) 数据使用者发送(commit2,sid,1,Z)给Fcom,Fcom发送(committed2,sid,1,|Z|)给数据拥有者。
8) 数据拥有者检验是否Z=1,若相等,发送(reveal1,sid,Keyi)给Fcom,Fcom发送给数据使用者对应其安全等级的文件加密密钥Keyi,算法结束。否则i=i+1,返回步骤3进行下一次循环,直到满足某一层访问策略Ti,或i=n-1为止。
分层密钥交换核心算法如下所示:
(pk',sk')←Unlink(pk,sk)if(
2.2.5 文件解密
在密钥交换之后,数据访问者可以通过Keyi解密从而访问共享文件。根据密钥间的分层关系,该用户可以生成所有较低等级的密钥。假设访问策略有三种安全等级,单向密钥链为Key0-Key1-Key2,三种等级代表公司中的老板、部门经理、普通员工,那么部门经理在密钥交换后获取对应密钥Key1,再根据哈希函数获得密钥Key2,进而对安全等级为y1和y2的文件进行解密。
在云环境中实现细粒度的文件共享需要满足以下安全性指标:
1) 属性隐私:数据使用者的属性永远不会被暴露。唯一被了解到的信息就是该用户的属性集合是否满足访问策略,从而确定是否进行密钥交换。除此之外,用户属性不会泄露。
2) 不可链接:对同一用户来说,与其他用户的交互不会链接到一起。
3) 抗碰撞:对敌手来说,给定某些用户的不同属性集,在其中任一用户都不能满足访问策略的情况下,该敌手在概率多项式时间内也不能满足该访问策略。
4) 可投射性:用户可以将自己属性集中存在的某些属性授权给其他用户。
5) 细粒度:如果一个用户有第i层的安全等级,那么他只能得到当前等级的密钥,不能通过共享私人信息来获取更高层密钥。
以下将对本文的H-ABKE方案满足以上五个特征进行证明:
定理1H-ABKE满足属性隐私、不可链接、可投射和抗碰撞的性质。
证明:Vladimir等人提出的基于属性密钥交换满足以上性质,下面将证明H-ABKE与其安全强度相同,因此H-ABKE也满足以上四个性质。
本文在基于属性的密钥交换基础上,引入的额外因素为哈希函数和安全等级,以及针对分层访问策略的从上到下循环算法,单向函数链和安全等级的具体内容分别如下所示:
Keyi=H(Keyi-1)i∈[1,n-1]
SC={yi|i∈[0,n-1]}
这些算法实现了分层密钥交换的功能,与用户属性集没有关联,不会暴露任何与用户有关的属性,也不会对方案安全性造成影响,因此该方案与ABKE方案安全性相同。
定理2H-ABKE满足细粒度的文件共享性质。
证明:为了保证数据拥有者的隐私性,不暴露其属性,方案引入了ASE,使得数据拥有者在不知道访问者属性的情况下,将加密后的电路发送给使用者,让其自行计算属性集是否满足访问策略。这保证了数据使用者的隐私性,同时为了防止恶意访问,ASE的加密算法中,Enc(pkχ,x)以公钥pkχ和向量x为输入,该算法输出密文c。
因为每个用户的公钥pkχ不同,所以面对恶意用户合谋攻击时,解密算法Dec(skχ,c)中仅能解密出每对密文中的一个,即大小为2m的密文最终解密m个。
因此本方案具有抗碰撞的特征,数据拥有者通过访问者的公钥进行加密,不同用户的公钥不同,无法对密文进行解密。即使恶意用户共享属性信息,H-ABKE也会将其限制在当前等级。根据循环算法及密钥链的单向性,用户仅能生成较低安全等级的密钥。
在效率方面,因为要实现分层的特征,所以引入了循环算法。对每个数据使用者来说,循环算法都将从最高等级的访问策略开始,逐层判断该用户属性集是否满足该层策略,若满足则获取当前密钥,算法终止,否则将继续循环直到最后一层策略,或满足某一层策略为止。这使得H-ABKE方案比原有ABKE效率要低,但要在ABKE基础上实现分层的性质,该算法是必要的折衷。同时,加密电路的使用以及云环境中强大的计算能力,也使得H-ABKE方案的效率大大提升。除此之外,通过使用线下的随机化以及批量验证,也会很大程度降低线上工作量,从而进一步提高方案效率。
本文的主要贡献在于将基于属性的密钥交换与单向函数链相结合,实现一种新的H-ABKE方案,使得ABKE在原有基础上实现了分层的特性,从而在云环境中对不同安全等级的数据内容实现了细粒度的访问控制。属性选择加密实现了属性隐私、抗碰撞、不可链接、隐私性和可投射性,确保数据使用者对乱码电路的计算结果正确有效。乱码电路的主要优势在于支持任意复杂的访问策略,且非常高效。
未来该方案可针对私有访问策略、证书撤回、多授权中心碰撞等方面展开进一步研究。