栏目分类

热点资讯

你的位置:Electric Vehicle Zone中文网 > CFX 官网 > 一种新的密码学原语研究——流程加密

一种新的密码学原语研究——流程加密


发布日期:2025-01-04 12:09    点击次数:168


1 引言 尽管经典的公钥加密算法能够满足一般的加密需求, 然而, 在密钥管理操作中存在以下问题:由于需要给每个用户设置相应的公钥、私钥对, 因此, 在密钥管理服务器端需要进行大量的运算, 且需要在服务器端公布大量用户的公钥, 导致沉重的系统开销问题.为了解决这个问题, Shamir于1984年首次提出了基于身份的密码学概念[1].利用基于身份的加密(identity based encryption, 简称IBE), 服务器端无需针对每个用户公布其对应的公钥, 而仅需公布若干个公共参数(公共参数的数量大大少于用户的数量).加密者可以利用公共参数以及具体用户的身份, 生成仅供该用户访问的密文.IBE与传统公钥加密相比, 能使得服务器端所需时间与空间花销更少, 大大提高了效率. 然而, IBE使用单一的“身份串”对用户的身份进行描述, 在对身份表达的灵活性以及用户隐私性方面存在缺陷.为了使IBE能够更方便地表达用户的身份, Sahai和Waters在2005年首次提出了基于模糊身份的加密(fuzzy identity based encryption, 简称FIBE), 随后, 该概念被重命名为基于属性的加密(attribute-based encryption, 简称ABE)[2].作为一种密码学中强大而灵活的加密方案, 属性加密引起了许多学者的研究兴趣[3-6].属性加密的原理可以简单叙述如下:给定一个秘密文档, 规定一组属性A, 规定一组访问规则B; 如果属性A能够满足访问规则B的要求, 则允许对秘密文档进行解密.把以上的原理应用到公钥加密机制中, 必须把属性组A、访问策略组B与传统的公钥加密中的两个重要的组件——密钥与密文——进行绑定.根据绑定的组件的不同, 可以把ABE划分为以下两类[2]:密钥策略的属性加密(key-policy attribute based encryption, 简称KP-ABE)与密文策略的属性加密(ciphertext-policy attribute based encryption, 简称CP-ABE).在KP-ABE中, 密文与属性组A相对应, 而用户的私钥则与具体的访问策略B相对应; 在CP-ABE中, 密文与访问策略B相对应, 而用户的私钥则与具体的属性组A相对应.ABE具有高效、安全等优点, 特别是在云计算环境下, 对用户的隐私保护起到了至关重要的作用.ABE可以在不泄露用户隐私的情况下完成秘密共享:以CP-ABE为例, 假设内容提供者(content provider, 简称CP)使用如下访问策略加密文件:“总经理OR(经理AND男性)OR(副经理AND男性AND工程师)”, 而某用户又成功解密了该文件, CP仍无法确定该人员的真实身份, 因为该人员既可能是总经理, 也可能是男性经理, 或者是具有工程师职称的男性副经理.这样, ABE就可以在分享秘密的同时做到保护用户的隐私.因此, 近年来ABE一直是国内外密码学界的研究热点. 虽然ABE方案可以描述现实生活中绝大部分的属性, 但是, 对特殊属性的描述却效率不高.这种特殊的属性是一种类似于“流程”“步骤”等现实生活中经常出现的属性.虽然使用传统的ABE方案也能表达流程, 但将使得流程的表达缺乏灵活性, 同时造成非常大的冗余.基于以上分析, 本文首次进行了基于流程的加密(process based encryption, 简称PBE)的研究, 基于流程的加密可便利地表达流程、步骤等特殊属性, 为了说明PBE的实用性, 本文首先介绍研究的动机. 1.1 本文的动机 在现实应用中, 经常需要使用到一种重要的控制手段——流程.特别是在政府部门、学校、大型企业等组织里, 某个任务通常由多个部门协同合作, 而与该任务相关的一些机密文档需要由指定的与任务相关的人员方可查看.为了严格地对文档进行保密, 对于能够查看机密文档的人员必须进行层层验证:只有依次通过验证的人员才具有查看文档的资格. 例如:假设国家某安全机关需要设计一个专门为专案组服务的文件加密系统, 该系统中保存了绝密的与各个具体案件相关的案件资料.而能够查看某案件资料的人员必须是负责该案件的专案组成员.由于专案组的成立通常由某个部门牵头, 由多个部门协同派出人手组成, 因此, 专案组成员的准入审核通常由各部门按照该部门与案件相关的程度从低到高的顺序审核通过.如, 假设某个案件Z涉及到5个部门:A, B, C, D, E, 且由部门C, E联合牵头组办专案组.专案组成员的加入需要满足以下的审核流程:“A→B→C”OR“D→E”. 首先, 应该注意到, 如果用属性加密中的一个属性表示一个部门, 是无法表达以上语义的.因为属性加密无法表达该应用中的“顺序”关系.例如, 在表达流程“D→E”时, 如果“D”与“E”均为属性, 并且在加密时用“D”与“E”对公文进行加密, 而在颁发密钥时给某用户颁发“D”AND“E”的访问策略, 则此加密方法仅能保证该用户通过了D与E的审查, 而无法表达其通过审查的先后次序关系.此时就会造成一个潜在的重大安全漏洞:如果另外一个案件Z′由部门D牵头, 部门E作为参与部门, 则该案件侦办人员通过部门D, E审核的顺序为“E→D”, 此时, 在属性加密方案下, 无法分清流程“D→E”与“E→D”, 因此, 导致侦办案件Z′的人员也能查看案件Z的资料, 造成严重的后果. 此外, 另一种可行的途径是, 把流程直接定义为一个属性.如, 把流程“D→E”直接定义为一个属性.但这种方法也会导致以下较为严重的问题:首先, 一个属性代表一个流程, 这会加大属性审核人员的负担(因为一个属性中包含过多的逻辑).另外, 更为严重的是, 如果在建立加密系统之初需要考虑到所有可能的流程, 且为每个流程分配相应的公共参数, 将会导致公共参数过多, 系统效率非常低下.关于这一点的论述, 将在第3.6节进行详细论证. 因此, 本文的研究动机是:如何提出一种新的安全的加密方案, 能便捷地对流程进行描述, 使得加密时能对用户的准入流程进行灵活的(flexible)控制.并且, 定义该方案的安全性模型, 并对其进行严格的证明. 1.2 本文的创新 ● 本文提出了一种新的密码学原语:PBE, 并把这个模型划分为两类, 即:密钥策略的基于流程的加密(key-policy process-based encryption, 简称KP-PBE)和密文策略的基于流程的加密(ciphertext-policy process-based encryption, 简称CP-PBE). ● 在KP-PBE方案中, 密文与流程的集合相关联, 而密钥与基于流程的访问结构相关联.当且仅当密文中包含的流程信息满足密钥中所描述的基于流程的访问结构时, 解密方可成功.而相对应地, 在CP-PBE方案中, 密钥与流程的集合相关联, 而密文与基于流程的访问结构相关联.当且仅当密钥中包含的流程信息满足密文中所描述的基于流程的访问结构时, 解密方可成功. ● 运用双线性映射技术与线性秘密共享协议首次构造出一个KP-PBE方案, 并比较了该方案在描述流程时与传统ABE方案的差异, 分析了该方案在流程表达上的优势.最后, 本文对KP-PBE方案进行了严格的安全性模型定义, 并在该定义下证明了KP-PBE方案的安全性. 1.3 本文的技术 本文所借鉴的技术主要包括两大部分:线性秘密共享协议(linear secret sharing scheme, 简称LSSS)[7]和Waters的功能加密(functional encryption, 简称FE)[8]. 首先, 本文需要考虑的是如何描述流程的问题.在解决该问题的过程中, 本文受到文献[7]的启发:在文献[7]中, Waters设计了一个利用有限自动状态机来描述访问策略的功能加密方案:该方案能使有限自动状态机的读写头在接受了符号集Σ上的一个符号wi后, 从一个状态Di跳到另一个状态Dj, 并得到一个e(g, Dj)wi的秘密.Waters的方案在状态转换时的机制非常类似于沿着某个流程进行“行走”的过程.因此, 本文借鉴该机制的原理, 对流程进行了描述.本文为每个流程都设定唯一的起点与终点.如果解密算法能从某个流程的起点依据算法设定的方案依次得到流程中各个点的值, 并最终推算出该流程的终点的值, 则本文认为该解密者满足流程要求. 另外, 由于考虑到实际应用的复杂性, 在检验流程是否满足的过程中, 可能需要用逻辑运算符(如“AND” “OR”等)对多个流程进行连接检验(如第1.1节所述的情况), 因此, 本文还引入了LSSS方案, 以便对复杂流程集合进行检验. 1.4 相关工作 文献[1]首先提出了基于身份的加密方案IBE, 在IBE中, 用户的身份信息(例如他的姓名和电话号码)可以嵌入到公钥里.此后, 国内外的学者们在对身份加密的算法改进上做了许多有意义的工作:熊金波等人结合多级安全与IBE提出了一种面向网络内容隐私的基于身份加密的安全自毁方案[9]; 光焱等人利用容错学习问题构造了基于身份的全同态加密体制[10]; 王少辉等人结合IBE和可搜索加密的技术, 提出了一种指定测试者的基于身份可搜索加密方案[11]; 明洋和王育民则提出了一种标准模型下可证安全的通配符基于身份加密方案[12].Cocks提出了一种基于二次剩余问题的IBE[13]; Boneh和Franklin基于双线性对的工具提出了一种IBE方案[14]; Waters提出了一种不基于随机预言机(random oracle, 简称RO)的IBE方案[15]; Shao与Cao利用层次IBE的思想提出了可重用的、单向的、基于身份的代理重加密方案[16]. Sahai和Waters改进了IBE中身份表示不灵活的特性, 首次在文献[2]中提出了一种模糊身份加密方案.该方案的思想是, 加密者可以设定一个谓词f(·), 规定解密者的身份信息x必须满足该谓词的条件:即f(x)=1时方可解密文档.模糊身份加密的提出使公钥密码学得到了重大的改进:一方面, 加密者可以非常灵活地指定解密者所应满足的特性; 另一方面, 解密者的身份信息相对于传统的公钥加密方案而言也更加模糊, 从而可以保护用户的隐私.在文献[1]中, Sahai和Waters还提出了一个全新的密码学原语:基于属性的加密ABE.基于属性的加密方案在文献[2]中被定义为以下一种机制:用户的证书将用用户的属性集合进行描述, 而谓词f(·)则用来描述作用在这些属性上的一组规则.文献[2]中提出的模糊身份加密方案事实上就是一种原始的属性加密方案, 但该方案中的规则只能用门限的方法进行描述, 导致规则的灵活性较差. 随后, 由Goyal等人在文献[17]中把属性加密进一步细分成密钥策略的属性加密KP-ABE与密文策略的属性加密CP-ABE.KP-ABE在密钥中包含访问结构, 用以指定解密者有权限访问何种文档; 而CP-ABE的访问策略则与密文相关, 用以指定加密内容可被何种人群解密.在文献[17]中, 提出了一种支持属性的“与”和“或”操作的KP-ABE机制, 从而大大丰富了访问结构的形式.在此基础上, Bethencourt等人首次提出了一种支持“与”和“或”操作的CP-ABE方案[3], 而Ostrovsky、Sahai和Waters在文献[4]中首次提出了一种支持“否”操作的ABE方案.至此, ABE方案已可支持非常灵活的访问策略定义操作.另外, Hohenberger和Waters[5]提出了一种密钥策略的、支持快速解密的属性加密方案.Chase则从另一个方面对属性加密进行研究:他提出了一种具有多认证方的属性加密方案(multi-authority attribute based encryption, 简称MA-ABE)[18].MA-ABE与一般的ABE方案的不同点在于, MA-ABE方案中具有多个属性授权方, 很显然, 这在分布式的环境下可以使得属性授权的工作量大大地分散, 从而降低单个属性授权方授权的工作量.Goyal等人[17]和Lewko等人[19]提出了具有代理功能的属性加密方案.Wan等人提出了一种具有层次特性的属性加密方案, 该方案能对属性加密中的属性进行分层[20]; Wang等人则提出了具有撤销功能的层次属性加密方案, 该方案能使系统具有撤销用户属性的能力[21]; Deng等人则提出了一种具有短密文特性的层次属性加密方案, 且证明了该方案的完全安全性[22].此外, 熊金波等人提出了一种基于属性加密的组合文档安全自毁方案[23], 关志涛等人提出了面向云存储的基于属性加密的多授权中心访问控制方案[24], 陈剑洪等人提出了密文策略的属性基并行密钥隔离加密方案[25], 王鹏翩等人[26]提出了一种支持完全细粒度属性撤销的CP-ABE方案. 功能加密[27]作为一种新的加密形式, 可以使得加密者在加密过程中定义任意复杂的访问逻辑.最近, 功能加密研究的热点是利用不可区分的混淆(indistinguishability obfuscation, 简称IO)来构造加密方案, 并取得了一些有趣的结果[28]. 2 背景知识 本节首先给出单调访问结构的定义, 再介绍线性秘密共享协议与双线性映射的技术, 最后给出本文将使用的困难性假设. 2.1 单调访问结构 定义1(访问结构[29]).设{P1, P2, ..., Pn}是一个参与方的集合.称集合A⊆2{P1, P2, ..., Pn}为单调的, 当且仅当对于∀B, C, 如果B∈A并且B⊆C, 则有:C∈A成立.一个访问结构为集合{P1, P2, ..., Pn}中的非空子集A.包含于A内的集合称为授权集, 不包含于A内的集合称为非授权集. 在本文的KP-PBE方案中, 参与方集合所对应的是流程集合. 2.2 线性秘密共享协议 定义2(线性秘密共享协议[29]).假设存在一个参与方的集合P, 称Ⅱ为一个在Zp上的线性秘密共享协议, 如果满足以下条件: (1) 协议里的所有参与方拥有一个在Zp上的秘密分享向量. (2) 称一个l行n列的矩阵M为一个在Ⅱ上的秘密产生矩阵.令ρ为一个把矩阵M里的每一行的行标i通过映射(ρ(i), i=1, ..., l)映射到参与方的下标.假设参与方需要分享一个秘密s∈Zp, 它选定一个列向量v=(s, r2, ..., rn), 其中, r2, ..., rn∈Zpn-1是随机选定的, 参与方可以通过计算得到l个秘密分享值:(Mv)i, i=1, ..., l.其中, 参与方ρ(i)拥有秘密的分割:(Mv)i. 根据文献[29]中的结论, 以上论述的LSSS方案Ⅱ拥有一个秘密的线性重构机制, 具体描述如下:令S是一个定义在A上的授权集, 定义集合I⊂(1, 2, ..., l)为I⊂(i:ρ(i)∈S).那么, 必然存在某个常数集合wi∈Zp满足以下式子: $ \begin{array}{<sup>*</sup>{20}{c}} {\sum\limits_{i \in I} {{\omega _i}} {\lambda _i} = s} \end{array}. $ 另外, 对于任意的关于集合I的非授权集, 必然存在一个向量w满足:w1=1并且w·Mi=0(i∈I). 2.3 双线性映射技术 设G, GT是阶为素数q的循环乘群.令g是一个G上的群生成元, c:G×G→GT是一个双线性映射.那么, c具有以下的性质. (1) 双线性特性:对于任意的u, v∈G和a, b∈Zp, 有c(ua, vb)=c(u, v)ab. (2) 非退化性:c(g, g)≠1. (3) 可计算性:c:G×G→GT可以有效计算.同时, 映射c具有对称的特性, 因为c(ga, gb)=c(g, g)ab=c(gb, ga). 2.4 困难性假设 本文的方案是基于以下的确定性q-BDHE(q-bilinear diffie-Hellman exponent assumption). 定义3(确定性q-BDHE[29]).令G是一个素数阶群, 设其阶为p, g为G上的生成元, 令a, s←Zp, R是群G上的一个随机元素.确定性q-BDHE定义如下. 如果给定向量: $ \begin{array}{<sup>*</sup>{20}{c}} {\vec X = G, p, g, {g^s}, {g^a}, ..., {g^{{a^q}}}, {g^{{a^{q + 2}}}}, ..., {g^{{a^{2q}}}}} \end{array}, $ 定义任何的概率多项式时间(probabilistic polynomial-time algorithm, 简称PPT)算法A能成功解决q-BDHE的优势为 $ \begin{array}{<sup>*</sup>{20}{c}} {Ad{v_{q{\rm{ - BDHE}}}} = |Pr[{\cal A}(\vec X, e{{(g, g)}^{{a^{q + 1}}s}})] - Pr[{\cal A}(\vec X, R) = 0]|} \end{array}. $ 确定性q-BDHE成立的条件是:如果对于任意的PPT算法A, 它解决该假设的优势Advq-BDHE都是可忽略的. 3 KP-PBE加密模型 3.1 流程的相关定义 在描述KP-PBE算法的加密模型之前, 首先给出流程与线性流程的定义. 定义4(流程(process)的定义).设G=〈V, E〉为有向图, 其中, V表示G的顶点集合, 而E表示G的有向边的集合.称P为G中的一个流程, 如果满足:P=p1→p2→...→pn, 其中, p1, ..., pn∈V且p1→p2, p2→p3, ..., pn-1→pn∈E.称集合{p1, ..., pn}为流程P的节点集, 称集合R={p1→p2, p2→p3, ..., pn-1→pn}为流程P的关系集, 称有向图中的边(pi→pj)∈R为流程P的关系. 注意, 首先, 在以上的流程定义中, 流程是有向的, 具体体现为流程关系集中的每个关系均为有向图中的一条有向边; 其次, 流程P中的顶点p1, ..., pn可重复, 如流程P′=a→b→c→d→b→f中, 顶点b出现了两次.此时, 称流程P′中存在环.而KP-PBE算法处理的流程不允许出现环, 因此, 给出以下定义. 定义5(线性流程(linear process)).设LP=lp1→lp2→...→lpn为有向图G=〈V, E〉的一个流程, 其中, lp1, ..., lpn∈V且lp1→lp2, lp2→lp3, ..., →lpn-1→lpn∈E.如果对所有的i≠j(i, j∈[1, ..., n]), 都有lpi≠lpj, 则称LP为线性流程. 由定义5可知, 线性流程不允许流程中出现环, 如上文提到的流程P′=a→b→c→d→b→f不是线性流程(设lp1=a, lp2=b, lp3=c, lp4=d, lp5=b, lp6=f, 则有lp2=lp5=b, 可知b→c→d→b为一个环). 在KP-PBE中, 为了判定用户是否满足一个或多个线性流程, 需要由可信授权中心(trusted authorization center, 简称TAC)为用户颁发与流程相关的密钥.本文用定义6给出用户满足流程的条件. 定义6(用户满足线性流程的条件(condition for the satisfaction of linear process)).设LP=lp1→lp2→... →lpn为有向图G=〈V, E〉的一个线性流程, 其中, lp1, ..., lpn∈V且lp1→lp2, lp2→lp3, ..., →lpn-1→lpn∈E.如果用户持有流程的起点p1的密钥及流程的关系集{lp1→lp2, lp2→lp3, ..., →lpn-1→lpn}中所有关系的密钥, 则该用户满足线性流程LP. 3.2 符号定义 本文涉及的符号定义如下所述.x←Zp表示从Zp中随机选取一个元素, 符号x←Zpn表示从Zp中随机选取n个元素, A→B表示点A, B之间存在一条有向边直接通连; A→→B表示点A, B是连通的(可能由多条有向边连通).用映射函数ρ(·)把任意的矩阵M中的一行映射为一个线性流程的终点, 用映射函数ρ-1(·)把一个线性流程的终点映射成矩阵M中的一行. 3.3 KP-PBE加密模型 KP-PBE总共包括4个子算法, 分别为Setup, Encrypt, KeyGen和Decrypt.需要注意的是, KP-PBE算法在加密文件时允许对文件嵌入多个线性流程的信息, 而在颁发密钥时允许密钥持有者灵活地表述其复杂的多个线性流程的持有信息.因此, 在Setup, Encrypt和KeyGen算法中, 可能涉及到多个线性流程的处理.下面给出算法的严格定义. 定义7(KP-PBE的加密定义). KP-PBE的加密主要包括以下4个算法. Setup(1n, B, R):在Setup算法中, 算法接受安全参数n、线性流程的起点个数B以及线性流程的关系集R的输入.算法输出公共参数PP和主密钥MSK.以上提到, Setup算法颁发的公共参数可能需要支持多个线性流程的表达, 因此, 线性流程的起点个数B≥1. Encrypt(PP, B, R, m):在Encrypt算法中, 算法接受公共参数PP、本次加密所需要用到的线性流程的起点集B、线性流程的关系集R和消息m的输入.算法输出密文CT. KeyGen(MSK, A):在KeyGen算法中, 算法接受主密钥MSK以及与线性流程相关的访问结构A的输入.算法输出私钥SK. Decrypt(SK, CT):在Decrypt算法中, 算法接受密文CT以及私钥SK的输入, 如果私钥的集合满足访问结构A, 算法输出明文m, 否则, 算法输出⊥. 3.4 KP-PBE的安全性模型定义 本小节详细讨论KP-PBE方案的安全性模型.KP-PBE的安全模型主要建立在两个角色之间, 这两个角色分别为: (1) 方案的攻击者, 即敌手A(attacker).敌手A的任务是对KP-PBE方案进行攻击. (2) 难题挑战者C(challenger).难题挑战者的任务是在与敌手A进行交互的过程中, 利用敌手A来攻破一个困难的问题. 本文所提出的KP-PBE方案的安全性模型是建立在选择性安全(selective security)的基础上的.选择性安全模型虽然比现今的另一种安全性模型:完全安全性模型[30]的安全归约要弱, 但相对完全安全性模型, 建立在选择性安全模型下的系统的效率更高.因此, 本文将在选择性安全模型下设计KP-PBE方案. 定义8(KP-PBE的安全模型定义). KP-PBE的安全模型是方案攻击者A和难题挑战者C之间的游戏, 游戏主要包括下面的步骤. Init:方案攻击者A公布他要挑战的线性流程集A*, 并把A*发给挑战者C. Setup:挑战者C调用Setup算法生成公共参数, 并把公共参数PP发给攻击者. Phase 1:攻击者A可以查询任意的访问结构A1, ..., Aq1的私钥集合:SK1, ..., SKq1, 但需要满足以下限制:A在Init阶段所公布的属性集合A*不能满足访问结构集A1, ..., Aq1中任一访问结构. Challenge:攻击者生成两个等长的消息m0和m1并提交给挑战者, 挑战者通过投掷一个随机硬币b∈{0, 1}, 然后利用挑战属性集A*生成对消息mb的挑战密文并将其发给攻击者. Phase 2:攻击者可以重复Phase 1多次, 但是, 和Phase 1一样, 攻击者在Init时公布的属性集A*都不能满足这些访问结构:Aq1+1, ..., Aq. Guess:最终, 敌手会输出一个对b的猜测, 记为b′.敌手赢得这个游戏的优势记为$ {\rm{Pr}}[b' = b] - \frac{1}{2}.$ 定义9(方案安全的定义).如果对于任意的概率多项式时间(probability polynomial time, 简称PPT)的敌手能赢得以上游戏的优势ε均为可忽略的, 则称KP-PBE方案为语义安全(semantic security)的. 3.5 方案构造 下面首先给出方案的构造过程, 随后在选择性安全模型下证明方案的安全性. 3.5.1 算法构造 Setup(1n, B, R):在Setup算法中, 算法接受安全参数n、线性流程的起点个数B以及线性流程的关系集R的输入.算法选择素数p>2n, 创建阶为p的群G, GT.令c:G×G→GT是一个双线性映射.g∈G为群G上的生成元.算法选择B个群G中的元素hj∈G(j∈{1, 2, ..., B})作为线性流程起点的公共参数.如果在关系集合R中存在关系(t→k)∈R, 算法选择G中的元素rt, k∈G作为流程节点间关系的公共参数.最后, 算法选取随机数a∈Zp, 计算c(g, g)a. 本算法的主密钥为MSK=ga, 公共参数为对群G的描述以及: $ \begin{array}{l} PP = (e{(g, g)^\alpha }, g, \\ \;\;\;\;\;\;\;\;\;{h_j}:(j \in \{ 1, 2, ..., B\} ), \\ \;\;\;\;\;\;\;\;\;{r_{t, k}}:\exists (t \to k) \in \Re ). \end{array} $ Encrypt(PP, B, R, m):在Encrypt算法中, 算法接受公共参数PP、本次加密所需线性流程的起点集B、线性流程的关系集R和消息m的输入. 算法选择随机数s∈Zp, 然后创建以下密文. $ \begin{array}{l} {C_m} = m \cdot e{(g, g)^{\alpha s}}, \\ {C_0} = {g^s}. \end{array} $ 随后, 算法创建与线性流程相关的密文部分, 这包括线性流程的起点集$ \mathfrak{B}$的密文以及线性流程的关系集$ \Re $的密文. $ \begin{align} & {{C}_{j}}=h_{j}^{s}:(\forall j\in B), \\ & {{C}_{t, k}}=r_{t, k}^{s}:\forall (t\to k)\in R. \\ \end{align} $ 最后, 算法输出密文. $ \begin{align} & {{C}_{T}} = ({{C}_{m}}\rm{, }{{C}_{0}}\rm{, } \\ & \ \ \ \ \ \ \ \ \ \ {{C}_{j}}:(\forall j\in B), \\ & \ \ \ \ \ \ \ \ \ \ {{C}_{t, k}}:(\forall (t\to k)\in R). \\ \end{align} $ KeyGen(MSK, A):算法接受主密钥MSK以及访问结构A的输入.其中, A中应该包括:一个l行n列的访问矩阵M、线性流程的起点集B、线性流程的终点集D、线性流程的关系集合R以及一个映射函数ρ, 映射函数ρ的作用为把M中的每一行映射到线性流程的每一个终点, 且该映射函数为单射(injective). 注意到, 在KeyGen算法中, 存在着线性流程的终点集D, 而该集合在Setup与Encrypt算法中并未出现.终点集出现的目的是为了对用户满足流程与否进行验证.如图 1所示, 在Setup与Encrypt算法中, 需要给出的参数为起点Node 1以及关系1→2, 2→3对应的项; 而在KeyGen算法中, 除了需要给出Node 1以及关系1→2, 2→3对应的项外, 还需要构造一个终点项:Kend, 3.且在KeyGen算法中, 每个流程节点将被分配一个独立的秘密(即图 1(b)所示中的D1, D2, D3).事实上, KeyGen算法使用了以下的机制把流程的秘密嵌入到密钥中:起点Node 1的密钥中嵌入秘密D1, 关系1→2的密钥中嵌入能从D1推出D2的秘密, 关系2→3的密钥中嵌入能从D2推出D3的秘密, 最后, 终点Kend, 3中嵌入D3与访问矩阵的权限秘密.如果用户能推出D3, 则表示该用户经历了从起点Node 1到Node 3的过程, 则该用户能获得相关的权限秘密.因此, 终点Kend, 3是基于节点Node 3而存在的. Fig. 1 The model of KP-PBE 图 1 KP-PBE模型 算法选择一个秘密向量$ \vec{y}=(\alpha, {{y}_{2}}, ..., {{y}_{n}}), $ 其中, $ ({{y}_{2}}, ..., {{y}_{n}})\leftarrow Z_{p}^{n-1}.$算法计算对于秘密α的l个分割如下: $ \begin{matrix} \vec{\lambda }=({{\lambda }_{1}}, {{\lambda }_{2}}, ..., {{\lambda }_{l}})=M\vec{y} \\ \end{matrix}. $ 令Mi, j表示矩阵M中的第i行第j列的元素.注意, 这里, 算法不能直接得到λi=Mi, 1α+Mi, 2y2+...+Mi, nyn的值, 因为算法只知道私钥MSK=ga的值而不知道α的值.但是算法可以计算出$ {{g}^{{{\lambda }_{i}}}}={{({{g}^{\alpha }})}^{{{M}_{i, 1}}}}+...+{{g}^{{{M}_{i, n}}{{y}_{n}}}}$的值. 对于用户所具有的线性流程的每一个节点(包括起点, 普通节点与终点), 算法秘密地选取一个群元素Di∈G. 算法首先给线性流程的每一个起点i∈B分配密钥如下:算法选取vi∈Zp并计算: $ \begin{matrix} {{K}_{i}}=({{K}_{i, 1}}, {{K}_{i, 2}})=({{D}_{i}}{{({{h}_{i}})}^{{{\nu }_{i}}}}, {{K}_{i, 2}}={{g}^{{{\nu }_{i}}}}) \\ \end{matrix}. $ 随后, 算法用以下方式递归地为用户颁发密钥:对于线性流程的关系集合R中的任意一个关系:(t→k)∈R, 如果用户申请该关系的密钥, 需要满足以下条件:该用户已存在起点μ0, 且存在关系μ0→μ1, μ1→μ2, ..., μn→t的密钥, 即必须满足μ0→→t, 算法方可为该用户颁发关系t→k的密钥. 图 2所示为一个例子, 图 2中, 公式或箭头表示用户已拥有的密钥部分(拥有起点μ0及关系μ0→μ1, μ1→μ2, ..., μn→t), 箭头t→k表示需要颁发的关系密钥.图 2(a)为可颁发的情况(表示用户已完成流程μ0→μ1→μ2, ..., →μn→t, 如果用户通过关系t→k的验证, 则表示该用户完成流程μ0→μ1→μ2, ..., →μn→t→k).而图 2(b)为不可颁发的情况(因为不存在某个起点O满足O→→t).这种颁发策略是符合实际情况的:因为图 2(b)中的情形相当于该用户尚未完成节点t之前的流程(否则, 必然持有从某个起点到t的路径的所有密钥), 因此, 自然无法颁发t之后的流程密钥. Fig. 2 The rule for assigning paivate keys of KP-PBE 图 2 KP-PBE颁发密钥的规则 算法选择ct, k∈Zp, 并创建以下私钥: $ \begin{matrix} {{K}_{t, k}}=({{K}_{t, k, 1}}, {{K}_{t, k, 2}})=((D_{t}^{-1}{{D}_{k}})r_{t, k}^{{{c}_{t, k}}}, {{g}^{{{c}_{t, k}}}}) \\ \end{matrix}. $ 最后, 算法为线性流程集合中的每个终点j∈D分配其对应的访问权限.对于访问矩阵M中的一行j∈ {1, ..., l}, 用映射函数ρ能把该行映射到一个线性流程的终点ρ(j)上, 此时, 算法选取rj∈Zp, 并计算: $ \begin{matrix} {{K}_{end, j}}={{g}^{-{{\lambda }_{j}}}}{{D}_{\rho (j)}}\ :j\in D \\ \end{matrix}. $ 算法公布私钥如下: $ \begin{align} & SK=((M, \rho ), \\ & \ \ \ \ \ \ \ \ \ \ \ {{K}_{i}}, i\in B, \\ & \ \ \ \ \ \ \ \ \ \ \ {{K}_{t, k}}:(t\to k\in R), \\ & \ \ \ \ \ \ \ \ \ \ \ {{K}_{end, j}}:j\in D). \\ \end{align} $ Decrypt(SK, CT):算法接受密文CT以及私钥SK的输入.设L为满足访问结构的线性流程的集合, 设B表示由L中的线性流程的起点组成的集合, 设D表示L所对应的线性流程的终点集合.设集合I表示D所对应的访问矩阵的行所组成的集合, 即I⊂{1, ..., l}且I={i:ρ(i)∈D}.如果密文CT中包含的线性流程的集合满足密钥SK中描述的访问结构A的要求, 则算法将成功解密. 根据第2.3节中的描述, 对于访问矩阵M而言, 如果集合{λi}是对该矩阵秘密α的合法分割, 则必然存在常数集合{ωi}i∈I, 使得式(1) 成立. $ \sum\limits_{i\in I}{{{\omega }_{i}}}{{\lambda }_{i}}=\alpha $ (1) 对于L中任意一个线性流程, 不妨设该流程为μ0→μ1...→μl-1→μl.算法将如下地恢复该流程所对应的秘密. 算法首先计算该流程起点的秘密. $ \begin{matrix} {{B}_{0}}=e({{K}_{{{\mu }_{0}}, 1}}, {{C}_{0}})e{{({{K}_{{{\mu }_{0}}, 2}}, {{C}_{{{\mu }_{0}}}})}^{-1}}=e{{(g, {{D}_{{{\mu }_{0}}}})}^{s}}, ({{\mu }_{0}}\in B) \\ \end{matrix}. $ 然后, 从起点μ0开始, 算法递归地进行如下计算:如果算法已经得到了$ {{B}_{k}}=e{{(g, {{D}_{{{\mu }_{k}}}})}^{s}}(k\in \{0, ..., l-1\})$的值, 则算法将采用如下方式计算Bk+1的值. $ \begin{matrix} {{B}_{k+1}}={{B}_{k}}\cdot e({{C}_{0}}, {{K}_{{{\mu }_{k}}, {{\mu }_{k+1}}, 1}})e{{({{C}_{{{\mu }_{k}}, {{\mu }_{k+1}}}}, {{K}_{{{\mu }_{k}}, {{\mu }_{k+1}}, 2}})}^{-1}}=e{{(g, {{D}_{{{\mu }_{k+1}}}})}^{s}} \\ \end{matrix}. $ 根据上面的描述, L中流程的终点必然对应于访问矩阵M中的一行, 因此, 不妨设ρ(i)=μl, 即, 访问矩阵中的第i行对应本线性流程的终点, 此时, 根据以上的递归计算, 算法最终能得到: $ {{B}_{l}}=e{{(g, {{D}_{{{\mu }_{l}}}})}^{s}}=e{{(g, {{D}_{\rho (i)}})}^{s}}(\rho (i)\in D)$的值. 最后, 算法计算: $ {{(e{{({{C}_{0}}, {{K}_{end, i}})}^{-1}}({{B}_{l}}))}^{{{\omega }_{i}}}}=e{{(g, g)}^{{{\omega }_{i}}{{\lambda }_{i}}s}}. $ 以上为对于L中任意一个线性流程, 算法通过递归运算最终得出其对应的子秘密.通过相似的计算步骤, 算法能得到L中其他线性流程的子秘密.如果λi(i∈I)是对访问矩阵M的秘密α的合法分割, 则算法最终能通过式(2) 计算出明文. $ {{{C}_{m}}}/{\left( e{{(g, g)}^{\sum\limits_{i\in I}{{{\omega }_{i}}}{{\lambda }_{i}}s}} \right)}\;\begin{matrix} =me{{(g, g)}^{\alpha s}}/e{{(g, g)}^{\alpha s}}=m \\ \end{matrix} $ (2) 3.6 方案特性讨论 在KP-PBE方案中, 需要对以下几点加以说明. ● 本方案设置为只允许描述线性流程, 是为了避免多义性的问题.为了说明这一点, 首先介绍回溯攻击的原理[7].回溯攻击是指, 如果用户能根据密钥和密文, 利用双线性对的运算从节点k推出节点k+1的秘密, 则该用户能反过来应用双线性对的运算从节点k+1“回溯”到节点k.举例而言, 在解密的递归公式$ \begin{matrix} {{B}_{k+1}}={{B}_{k}}\cdot e({{C}_{0}}, {{K}_{{{\mu }_{k}}, {{\mu }_{k+1}}, 1}})\\\end{matrix}$ $\begin{matrix}e{{({{C}_{{{\mu }_{k}}, {{\mu }_{k+1}}}}, {{K}_{{{\mu }_{k}}, {{\mu }_{k+1}}, 2}})}^{-1}}=e{{(g, {{D}_{{{\mu }_{k+1}}}})}^{s}} \\\end{matrix}$中, 由于用户已知Bk, 并可从Bk通过上式的计算得到Bk+1, 则该用户显然可以声称其能从Bk+1通过“反向”递推得到Bk(可简单地通过以下公式计算: $ \begin{matrix} {{B}_{k+1}}e{{({{C}_{0}}, {{K}_{{{\mu }_{k}}, {{\mu }_{k+1}}, 1}})}^{-1}}e({{C}_{{{\mu }_{k}}, {{\mu }_{k+1}}}}, {{K}_{{{\mu }_{k}}, {{\mu }_{k+1}}, 2}})= \\ \end{matrix}\begin{matrix} {{B}_{k}} \\ \end{matrix}).$因此, 假设给定起点1与关系1→2, 2→3以及终点3的密钥, 如果KP-PBE方案允许存在环流程, 则用户既可证明其满足流程1→2→3, 也可证明其满足流程1→2→3→2→3, 1→2→3→2→3→2→3, ....因此, 用户满足的流程无法唯一标识, 即流程的表达存在多义性.而如果规定KP-PBE不允许出现环形流程, 则不存在歧义. ● 其次, 本文下面将分析KP-PBE在描述流程时的便捷性.在第1.1节中, 给出了一种用属性加密方法描述流程的平凡方法:即把每一个流程设置为一个属性.而用此方法描述流程将造成公共参数过于冗余的后果.下面将加以阐述. 设某组织内部共有n个部门, 不失一般性, 不妨用{1, 2, ..., n}表示部门编号.下面考察这n个部门共有几种可能的办事流程(假设办事流程均为线性流程).以下用定理1给出分析结果. 定理1(线性流程的数目).设节点集合内共有n个节点, 则该节点集合共能产生$ P_{n}^{2}(P_{n-2}^{0}+P_{n-2}^{1}+...+P_{n-2}^{n-2})$种流程.其中, 符号C, P分别表示组合、排列的符号. 证明:不失一般性, 考虑节点1作为起点, 节点2作为终点这样的设置下可能存在的流程个数, 此时可分成下面几种情况. 节点1作为起点, 节点2作为终点, 中间无任何节点, 此时只有1种可能的流程:1→2, 即Pn-21. 节点1作为起点, 节点2作为终点, 中间通过1个节点, 此时有n-2种可能的流程:1→3→2, 1→4→2, ..., 1→n→2, 即Pn-21. 节点1作为起点, 节点2作为终点, 中间通过2个节点, 此时有(n-2)(n-1) 种可能的流程: 1→3→4→2, 1→3→5→2, ..., 1→3→n→2, ..., 1→4→3→2, 1→4→5→2, ..., 1→4→n→2, ..., 1→n→n-1→2.实质上, 此情况相当于固定1, 2两个点, 在1, 2两点间有序地“填入”不重复的两个数(线性流程的性质不允许流程中的节点重复), 且这两个数为集合{3, ..., n}中的任意两个元素, 这个排列共有(n-2)(n-1) 种情况, 即Pn-22. 以同样的方法分析, 以节点1作为起点, 节点2作为终点, 中间通过k(0≤k≤n-2) 个节点, 此时有(n-2)(n-1)...(n-2-k+1) 种可能的流程, 即Pn-2k. 因此, 明显地, 在集合{1, 2, ..., n}中, 以节点1作为起点, 节点2作为终点所有可能的流程为$ P_{n-2}^{0}+P_{n-2}^{1}+...+P_{n-2}^{n-2}$种. 而由于在集合{1, ..., n}中任选两个有序的不重复的节点共有Pn2种情况, 又, 根据上面分析, 选定两个节点分别作为起点、终点后, 可生成$ P_{n-2}^{0}+P_{n-2}^{1}+...+P_{n-2}^{n-2}$种流程, 因此, 总流程共有$ P_{n}^{2}(P_{n-2}^{0}+P_{n-2}^{1}+...+P_{n-2}^{n-2})$种. 由定理1可知, 如果用普通的属性加密方案加密流程, 在一个有n个部门的组织中, 共存在$ P_{n}^{2}(P_{n-2}^{0}+P_{n-2}^{1}+...+P_{n-2}^{n-2})$种可能的流程.为了区分这些流程, 传统的属性加密[17, 29]在设置公共参数时, 必须定义$ P_{n}^{2}(P_{n-2}^{0}+P_{n-2}^{1}+...+P_{n-2}^{n-2})$个相对应的公共参数. 而使用KP-PBE方案, 若要表示这$ P_{n}^{2}(P_{n-2}^{0}+P_{n-2}^{1}+...+P_{n-2}^{n-2})$种流程, 则只需要在设置公共参数时进行以下设置. 在集合{1, 2, ..., n}中, 为每个节点分配一个起点的公共参数(即公布起点的公共参数集合{h1, h2, ..., hn}, 对应于每个节点). 对于集合{1, 2, ..., n}中的任意两个节点t, k, 分配两个关系的公共参数rt, k, rk, t分别对应于关系t→k, k→t. 若把{1, ..., n}这n个节点的集合想象成一个有向图G=(V, E), 设|V|表示图中顶点的个数, 而|E|表示图中有向边的条数.通过以上对公共参数的设置, 事实上, 使得公共参数的集合组成了一个有向完全图(即任意两个节点间都有两条有向边连接的图).且该有向完全图中任意一个起点均可作为流程的起点, 因此, 这样的设置使得公共参数能够描述所有的存在于图中的流程. 而在有向完全图中, 容易知道|E|=|V|(|V|-1).因此, 当KP-PBE方案表示n个节点间任意的线性流程时, 需要n个起点参数以及n(n-1) 个关系参数, 共需要n+n(n-1)=n2个参数. 根据以上分析, 在表达同样数量的流程时(流程数为$ P_{n}^{2}(P_{n-2}^{0}+P_{n-2}^{1}+...+P_{n-2}^{n-2})$传统的属性加密方案需要$ P_{n}^{2}(P_{n-2}^{0}+P_{n-2}^{1}+...+P_{n-2}^{n-2})$个公共参数, 而KP-PBE方案仅需n2个公共参数.而显然, n2为多项式级的, 而又有: $ P_{n}^{2}(P_{n-2}^{0}+P_{n-2}^{1}+...+P_{n-2}^{n-2})>P_{n}^{2}(C_{n-2}^{0}+C_{n-2}^{1}+...+C_{n-2}^{n-2})=P_{n}^{2}{{2}^{n-2}} $ (3) 由式(3) 可知, 数$ P_{n}^{2}(P_{n-2}^{0}+P_{n-2}^{1}+...+P_{n-2}^{n-2})$为指数级的.因此, 使用KP-PBE方案表示流程的效率比平凡地使用传统属性加密的效率要高许多. 3.7 安全性证明 KP-PBE方案的正确性是显然的, 以下证明该方案的安全性.KP-PBE方案的安全性主要由以下定理保证. 定理2(KP-PBE的选择性安全模型).设KP-PBE的所有线性流程共包含|B*|个起点及|R*|个关系.假设确定性q-BDHE成立, 则不存在PPT的攻击者A能选择性地攻破KP-PBE系统, 其中, |B*|+|R*|≤q. 证明:假定存在概率多项式时间的攻击者A能在选择性安全模型下以不可忽略的优势ε=AdvA攻破KP-PBE系统.那么, 我们可以构造出一个挑战者C来解决确定性q-BDHE. Init:挑战者C首先获取确定性q-BDHE的参数$ \vec{X}=(\mathbb{G}, p, g, {{g}^{s}}, {{g}^{a}}, ..., {{g}^{{{a}^{q}}}}, {{g}^{{{a}^{q+2}}}}, ..., {{g}^{{{a}^{2q}}}})$和T, 其中, $ T=e{{(g, g)}^{{{a}^{q+1}}s}}$或为群G上的随机数. 随后, 攻击者A公布一个挑战的线性流程集合A*.根据定义6, 由于一个线性流程由流程起点以及流程的关系集合组成, 因此, A需要公布的挑战的线性流程集合A*必须包括:A*中所有流程的起点集B*以及A*中所有流程的关系集R*. Setup:挑战者C设置: $ e{{(g, g)}^{\alpha }}=e({{g}^{{{a}^{q}}}}, {{g}^{a}}), \ g=g. $ 由上可知, 尽管挑战者并不知道aq+1的值, 但仍然可以秘密地设置a=aq+1. 挑战者设置其余公共参数如下.根据假设条件, 设KP-PBE的所有线性流程共包含|B*|个起点及|R*|个关系, 则有下式成立: |B*|+|R*|≤q.因此, 可以设定一个单射的映射. $ \pi :{{B}^{*}}\cup {{R}^{*}}\to \{1, 2, ..., q\}. $ 即, 该映射的输入值为起点集B*或关系集R*中的元素, 输出值为集合{1, ..., q}中的元素. 对于任意的线性流程的起点j, 挑战者把其分为属于挑战流程集内的起点(j∈B*)与不属于挑战流程集内的起点(j∉B*), 随后, 挑战者选择随机数zj∈Zp并进行式(4) 的设置. $ {{h}_{j}}=\left\{ \begin{align} & {{g}^{{{z}_{j}}}},\;\;\;\;\;\;\; j\in {{B}^{*}} \\ & {{g}^{{{z}_{j}}}}{{g}^{{{a}^{\pi (j)}}}}, j\notin {{B}^{*}} \\ \end{align} \right. $ (4) 随后, 挑战者选择随机数vt, k∈Zp并进行式(5) 的设置. $ {{r}_{t, k}}=\left\{ \begin{align} & {{g}^{{{v}_{t, k}}}}, \;\;\;\;\;\;\;(t\to k)\in {{R}^{*}} \\ & {{g}^{{{v}_{t, k}}}}{{g}^{{{a}^{\pi (t\to k)}}}}, (t\to k)\notin {{R}^{*}} \\ \end{align} \right. $ (5) 在上面的设置中, 由于映射π的目标集合中的元素都小于q+1, 因此, 挑战者可以顺利地进行设置(因为不会出现gaq+1这样挑战者无法得到的值). Phase 1, 2:在这一步中, 攻击者A可以向挑战者C询问任意关于线性流程的访问结构A的私钥, 但必须符合以下限制:挑战的线性流程集合A*不能满足访问结构A. 设挑战的流程集合中所有的节点组成的集合为R*.根据KeyGen算法的规定, R*中每一个终点必然对应于访问矩阵M中的一行.而由于挑战流程集合A*不能满足访问结构A, 所以根据文献[29]中的结论, 对于所有的满足条件ρ(i)∈R*的i, 必然存在向量$ \vec{w}={{({{w}_{1}}, ..., {{w}_{n}})}^{\bot }}, $其中, w1 =1使得下式成立: $ {{M}_{i}}\cdot \vec{w}=0 $ (*) 利用向量$ \vec{w}$, 攻击者A隐蔽地设置秘密向量$ \vec{y}$如下: $ \vec{y}={{a}^{q+1}}\vec{w}+{{(0, {{y}_{2}}, ..., {{y}_{n}})}^{\bot }}, \ \{{{y}_{2}}, ..., {{y}_{n}}\}\leftarrow Z_{p}^{n-1}. $ 以上的向量$ \vec{y}$的设置是均匀分布的, 因为除了它的第1个分量是α=gaq+1以外(因为w1 =1), 其余的分量都被随机数y2, ..., yn随机化了.因此, 可以推导出: $ {{\lambda }_{i}}={{M}_{i}}\vec{y}={{M}_{i}}\vec{w}{{a}^{q+1}}+{{M}_{i}}{{(0, {{y}_{2}}, ..., {{y}_{n}})}^{\bot }}={{M}_{i}}\vec{w}{{a}^{q+1}}+{{\lambda }_{i}}\prime $ (**) 其中, $ {{{\lambda }'}_{i}}={{M}_{i}}\cdot {{(0, {{y}_{2}}, ..., {{y}_{n}})}^{\bot }}.$ 随后, 挑战者将设置被询问的线性流程集合中每个节点所对应的秘密值.设集合B表示攻击者A所询问的访问结构中流程的起点集合, 设集合D表示攻击者A所询问的访问结构中流程的终点集合.挑战者选择随机数θi∈Zp, 并隐藏地对每个流程节点相对应的秘密Di进行式(6) 的设置. $ {{D}_{i}}=\left\{ \begin{align} & {{g}^{{{\theta }_{i}}}}, \;\;\;\;\;\;\;i\notin D \vee i\in R^{*} \\ & {{g}^{{{\theta }_{i}}}}{{g}^{\langle {{M}_{{{\rho }^{-1}}(i)}}\cdot \vec{w}\rangle {{a}^{q+1}}}}, i\in D \wedge \mathfrak{i}\notin R^{*} \\ \end{align} \right. $ (6) 在以上的构造中, 映射ρ-1(i)的意思是把流程终点i的标号转换为访问矩阵M上的行的标号.该设置把秘密Di的值分为两大类:一类为Di所对应的节点i是流程的终点, 并且该终点并未出现在挑战流程集合所包含的点集中, 此时, 设置$ {{D}_{i}}={{g}^{{{\theta }_{i}}}}{{g}^{\langle {{M}_{{{\rho }^{-1}}(i)}}\cdot \vec{w}\rangle {{a}^{q+1}}}};$而另一类为Di所对应的节点i不是流程的终点, 或是终点但该终点出现在挑战流程集合所包含的点集中, 此时, 设置Di=gθi. 以下挑战者生成关于线性流程起点与线性流程关系的密钥. ● 如果i∈B, 即当i为线性流程中的起点时, 挑战者挑选随机数$ {{{\nu }'}_{i}}\in {{Z}_{p}}, $生成密钥如下: $ {{K}_{i}}=\left( {{K}_{i, 1}}, {{K}_{i, 2}} \right)=({{g}^{{{\theta }_{i}}}}h_{i}^{{{{{v}'}}_{i}}}, g_{i}^{{{{{v}'}}_{i}}}). $ 注意到, 当i∈B时, 必然满足条件i∈D∨i∈R*(由于线性流程的起点不可能为该流程的终点, 因此, 必然满足条件i∉D), 因此, 根据以上设置, 有Di=gθi.由于Di中没有出现挑战者不知道的项gaq+1, 因此, 挑战者可以很简单地构造这个参数. ● 当攻击者A询问关系(t→k)∈R的密钥时, 挑战者挑选随机数$ {{{c}'}_{t, k}}\in {{Z}_{p}}, $生成密钥如下: $ {{K}_{t, k}}=\left( {{K}_{t, k, 1}}, {{K}_{t, k, 2}} \right)=\\ \left\{ \begin{align} & {{g}^{{{\theta }_{k}}-{{\theta }_{t}}}}{{g}^{{{v}_{t, k}}{{e}_{t, k}}{{a}^{(q+1-\pi (t\to k))}}}}, {{g}^{{{e}_{t, k}}{{a}^{(q+1-\pi (t\to k))}}}}, (t\in D \wedge t\notin R^{*})\vee (k\in D \wedge k\notin R^{*}) \\ & {{g}^{{{\theta }_{k}}-{{\theta }_{t}}}}{{g}^{{{v}_{t, k}}{{{{c}'}}_{t, k}}}}, {{g}^{{{{{c}'}}_{t, k}}}}\rm{, else } \\ \end{align} \right. $ (7) 分配关系密钥时, 情况比较复杂.特别需要注意的是, 只要节点t, k中有一个节点是流程的终点, 且该终点并未出现在挑战流程中(即满足逻辑表达式(t∈D∧t∈R*)∨(k∈D∧k∉R*)), 则根据式(6) 对Di的设置, Dt-1Dk中必然存在gaq+1这个挑战者无法构造的项.又, 只要节点t, k中有一个节点是流程的终点, 且该终点并未出现在挑战流程的节点集合中, 则关系t→k不可能为挑战流程中的关系(挑战流程中的关系必然是从挑战流程中的某个节点到挑战流程中的另一个节点的关系).因此, 逻辑表达式(t∈D∧t∉R*)∨(k∈D∧k∉R*)蕴含了逻辑表达式(t→k)∉R*.因此, 此时可以设置式(7) 中的et, k用以消掉项gaq+1, 从而能使挑战者可以产生关系t→k的密钥.具体分为以下3种情况. (1) 当$ (t\in D \wedge t\notin R^{*})\wedge (k\notin D \vee k\in R^{*})$时, 只有Dt含有gaq+1项.因此, $ {{D}_{t}}^{-1}{{D}_{k}}={{g}^{{{\theta }_{k}}-{{\theta }_{t}}}}{{g}^{-<{{M}_{{{\rho }^{-1}}(t)}}\vec{w}>{{a}^{q+1}}}}, $我们只要设置$ {{c}_{t, k}}={{a}^{\langle {{M}_{{{\rho }^{-1}}(t)}}\vec{w}\rangle (q+1-\pi (t\to k))}}, $即得: $ \begin{align} & {{K}_{t, k, 1}}=({{D}_{t}}^{-1}{{D}_{k}}){{r}_{t, k}}^{{{c}_{t, k}}}={{g}^{{{\theta }_{k}}-{{\theta }_{t}}}}{{g}^{-\langle {{M}_{{{\rho }^{-1}}(t)}}\vec{w}\rangle {{a}^{q+1}}}}{{({{g}^{{{v}_{t, k}}}}{{g}^{{{a}^{\pi (t\to k)}}}})}^{\langle {{M}_{{{\rho }^{-1}}(t)}}\vec{w}\rangle {{a}^{(q+1-\pi (t\to k))}}}}=\\ &{{g}^{{{\theta }_{k}}-{{\theta }_{t}}}}{{g}^{{{v}_{t, k}}}}^{\langle {{M}_{{{\rho }^{-1}}(t)}}\vec{w}\rangle {{a}^{(q+1-\pi (t\to k))}}}, \\ & {{K}_{t, k, 2}}={{g}^{{{c}_{t, k}}}}={{g}^{{{a}^{\langle {{M}_{{{\rho }^{-1}}(t)}}\vec{w}\rangle (q+1-\pi (t\to k))}}}}. \\ \end{align} $ 因此, 此时式(2) 中的$ {{e}_{t, k}}=\langle {{M}_{{{\rho }^{-1}}(t)}}\vec{w}\rangle .$ (2) 当$ (k\in D \wedge k\notin {{R}^{*}})\wedge (t\notin D \vee t\in {{R}^{*}})$时, 与情况1使用相似的构造方法即可消去项gaq+1, 此时, 式(7) 中的$ {{e}_{t, k}}=-\langle {{M}_{{{\rho }^{-1}}(k)}}\vec{w}\rangle .$ (3) 当$ (t\in D \wedge t\notin {{R}^{*}})$而$ (k\in D \wedge k\notin {{R}^{*}})$时, 与情况1使用相似的构造方法即可消去项gaq+1, 此时, 式(7) 中的$ {{e}_{t, k}}=\langle {{M}_{{{\rho }^{-1}}(t)}}\vec{w}\rangle -\langle {{M}_{{{\rho }^{-1}}(k)}}\vec{w}\rangle .$ 当以上3种情况皆未发生时, 即$ (t\notin D \vee t\in R^{*})\wedge (k\notin D \vee k\in R^{*})$时(亦即满足式(7) 中的else的情况), 项Dt-1Dk中不存在挑战者不知道的项gaq+1, 因此挑战者选择随机数c't, k即可简单地完成密钥构造. ● 最后, 挑战者需要设置访问结构中每个终点对应的密钥.由于每个终点都与访问矩阵中的一行相对应, 设需要生成终点d的密钥, 且设ρ(i)=d, 即终点d与访问矩阵的行i相对应.挑战者生成密钥如下: $ {{K}_{end, d}}={{g}^{-{{{{\lambda }'}}_{d}}}}{{g}^{{{\theta }_{\rho (d)}}}}. $ 以上的设置基于以下事实: (1) 根据式(6), 当终点d满足ρ(d)∈R*时, $ {{D}_{i}}={{D}_{\rho (d)}}={{g}^{{{\theta }_{_{\rho (d)}}}}}, $而同时根据式(*), 又有$ {{M}_{i}}\cdot \vec{w}=0, $因此, Kend, d中不存在gaq+1这样挑战者无法构造的项. (2) 当终点d满足ρ(d)∉R*时, 根据式(6), $ {{D}_{i}}={{D}_{\rho (d)}}={{g}^{{{\theta }_{_{\rho (d)}}}}}{{g}^{\langle {{M}_{d}}\cdot \vec{w}\rangle {{a}^{q+1}}}}, $而根据式(**), $ {{\lambda }_{d}}={{M}_{d}}\vec{w}{{a}^{q+1}}+{{{\lambda }'}_{d}}, $因此, 挑战者不知道的项gaq+1被顺利消去, 挑战者亦能成功生成该密钥. 综上, 挑战者成功构造了攻击者需要的密钥. Challenge:在这一步中, 挑战者通过投掷随机硬币得到值b←{0, 1}, 并生成密文如下: $ \begin{align} &{{C}_{m}}={{m}_{b}}\cdot T, \\ &{{C}_{0}}={{g}^{s}}, \\ &{{C}_{j}}={{({{g}^{s}})}^{{{z}_{j}}}}\ (j\in {{B}^{*}}), \\ &{{C}_{t, k}}={{({{g}^{s}})}^{{{v}_{t, k}}}}\ ((t\to k)\in {{R}^{*}}). \\ \end{align} $ Guess:最终, 攻击者A输出一个比特b′.如果b=b′, 挑战者输出0(表示它猜测$ T=e{{(g, g)}^{{{a}^{q+1}}}}, $否则, 输出1(表示它猜测T是群上的一个随机数).如果敌手A能以不可忽略的优势ε攻破KP-PBE系统, 那么挑战者将能以不可忽略的优势ε解决确定性q-BDHE.证毕. 4 结论与展望 本文首次研究了一种新的密码学原语:基于流程的加密——PBE, 并把PBE进一步划分为密钥策略的流程加密——KP-PBE和密文策略的流程加密——CP-PBE.随后, 应用双线性对原理及线性秘密共享机制构造出一个KP-PBE的算法, KP-PBE与传统ABE方案相比, 在处理流程的效率上有数量级的提高(把指数级别的流程数降低为多项式级别的流程数), 大大降低了系统冗余.最后, 在选择性安全模型下, 给出了KP-PBE的安全性证明. KP-PBE作为一种新兴的密码学原语, 具有许多全新的挑战:首先, 最为明显地, 如何在KP-PBE方案的基础上提出CP-PBE方案是一个挑战.另外, 如何利用一些现有的安全性证明技术, 如双系统加密的技术(dual system encryption[30])来证明KP-PBE或CP-PBE的完全安全性(fully secure); 而且, KP-PBE方案只能由一个可信中心进行密钥颁发工作, 如何构造出可容纳多个可信中心共同颁发密钥的PBE方案, 也是一个挑战.