Abstract
在一些分布式系统中,只有当用户拥有一组特定的凭证或属性时,用户才能访问数据。目前,实施这种策略的唯一方法是使用一个受信任的服务器来存储数据并协调访问控制。但是,如果存储数据的任何服务器被泄露,那么数据的机密性也会被泄露。本文提出了一种对加密数据进行复杂访问控制的系统——Ciphertext-Policy基于属性的加密。
通过使用我们的技术,即使存储服务器不可信,加密数据也能保持机密;此外,我们的方法对共谋攻击是安全的。以前的属性加密系统使用属性来描述加密数据,并将策略构建到用户的密钥中;而在我们的系统中,属性被用来描述用户的凭证,而加密数据的一方则为谁可以解密制定策略。因此,我们的方法在概念上更接近传统的访问控制方法,如基于角色的访问控制(RBAC)。此外,我们提供了我们的系统的实现,并给出了性能测量。
1 Introduction
在许多情况下,当用户加密敏感数据时,必须建立一个特定的访问控制策略,以确定谁可以解密该数据。例如,假设FBI在诺克斯维尔和旧金山的公共腐败办公室正在调查一项涉及旧金山说客和田纳西州国会议员的贿赂指控。联邦调查局的首席特工可能想要加密一份敏感的备忘录,这样只有那些有特定凭证或属性的人可以获取它。例如,头代理可以指定以下访问结构来访问该信息:((“Public Corruption Office”AND (“Knoxville” OR “San Francisco”)) OR(management-level > 5) OR “Name: CharlieEppes”).这么说,首席特工的意思可能是,这份备忘录只应该被诺克斯维尔或旧金山的公共腐败办公室的特工、在管理链上非常高的联邦调查局官员,以及一位名叫查理·埃普斯(Charlie Eppes)的顾问看到。
正如这个示例所说明的,拥有秘密数据的人能够基于对底层数据的特定知识选择访问策略是至关重要的。此外,这个人可能不知道所有其他应该能够访问数据的人的确切身份,但她可能只有一种方法来根据描述性属性或凭据描述他们。
传统上,这种类型的表达式访问控制是通过使用一个受信任的服务器在本地存储数据来实现的。服务器被委托为一个参考监视器,在允许用户访问记录或文件之前检查用户是否提供了正确的认证。然而,服务越来越多地以分布式方式跨多个服务器存储数据。跨多个位置复制数据在性能和可靠性方面都有优势。这种趋势的缺点是,越来越难以用传统方法保证数据的安全性;当数据存储在多个位置时,其中一个位置被泄露的可能性就会显著增加。出于这些原因,我们希望敏感数据以加密形式存储,这样即使服务器被泄露,这些数据也将保持私有。
大多数现有的公钥加密方法允许一方向特定用户加密数据,但不能有效地处理更具表达性的加密访问控制类型,如上面所示的示例。
Our contribution
在这项工作中,我们提供了一个密文策略基于属性的加密(CP-ABE)的第一个构造来解决这个问题,并给出了这样一个方案的第一个构造。在我们的系统中,任意数量的属性集生成了用户的私钥。另一方面,当一方在我们的系统中对消息进行加密时,他们会在属性之上指定相关的访问结构。只有当用户的属性通过密文的访问结构时,用户才能解密密文。在数学层次上,系统的访问结构用单调的方法来描述“访问树”,其中访问结构的节点由门限门和描述属性的叶组成。我们注意到AND门可以构造为n-of-n门限门,OR门可以构造为1-of-n门限门。此外,我们还可以处理更复杂的访问控制,比如将数字范围转换为小型访问树(请参阅实现部分中的讨论以了解更多细节)。
Our techniques
在高水平上,我们的工作与Sahai和Waters[24]和最近的工作相似,Goyal等人的[15]关于基于密钥策略属性的加密(KP-ABE),但我们需要大量的新技术。在基于key-policy属性的加密中,密文与描述性属性集相关联,用户密钥与策略相关联(我们处境的反面)。我们强调,在KP-ABE中,加密者不控制谁可以访问她加密的数据,除非她为数据选择描述性属性。相反,她必须信任密钥颁发者发出适当的密钥来授予或拒绝对适当用户的访问。换句话说,在[24,15]中,假定“智能”与密钥颁发者在一起,而不是与加密者在一起。在我们的设置中,加密者必须能够智能地决定谁应该或不应该访问她加密的数据。因此,[24,15]的技术不适用于我们的环境,我们必须开发新的技术。
在技术层面上,我们必须达到的主要目标是抵制合谋:如果多个用户串通,他们只有在至少一个用户能够自己解密的情况下才能解密密文。特别地,回顾一下本文开头的例子,假设一个在旧金山反恐办公室工作的联邦调查局特工与一个在纽约腐败办公室工作的朋友勾结。我们不希望这些共谋者能够通过组合他们的属性来解密秘密备忘录。在我们的设置中,这种类型的安全是访问控制的必要条件。
在[24,15]的工作中,通过使用秘密共享方案并将独立选择的秘密股份嵌入到每个私钥中,来保证抗合谋性。由于在秘密共享方案的每次调用中所使用的随机性是独立的,因此出现了抗合谋性。在我们的场景中,用户的私钥与属性集相关联,而不是与它们之上的访问结构相关联,因此不适用秘密共享方案。
相反,我们设计了一种新的私钥随机化技术,它使用了一种新的两级随机掩蔽方法。该方法利用了具有高效可计算双线性映射的群,这是我们在通用双线性群模型中给出的安全证明的关键[6,28]
最后,我们提供了一个系统的实现,以表明我们的系统在实践中表现良好。我们提供了API和实现结构的描述。此外,我们还提供了几种优化解密性能的技术,并通过实验测量我们的性能特性。
Organization:我们论文的其余部分结构如下。在第二节中,我们将讨论相关的工作。在第3节中,我们给出了具有高效可计算双线性映射的群的定义和背景。然后在第4节给出我们的结构。然后,我们将在第5节介绍我们的实现和性能度量。最后,我们在第6节结束。
2 Related Work
Sahai和Waters[24]提出了基于属性的加密(ABE)作为加密访问控制的新方法。在基于属性的加密系统中,密文不一定要像传统的公钥密码学那样加密给一个特定的用户。相反,用户的私钥和密文将与一组属性或基于属性的策略相关联。如果用户的私钥和密文之间存在“匹配”,则用户能够解密密文。在Sahai和Waters的原始系统中,他们提出了一种阈值ABE系统,在该系统中,密文被标记为一组属性S,用户的私钥与一组阈值参数k和另一组属性S '相关联。为了让用户解密密文,密文和他的私钥之间必须至少有k个属性重叠。这样做的最初动机之一是设计一个容错(或模糊)基于身份的加密方案[27,7,12],可以使用生物识别身份。
Sahai-Waters[24]阈值ABE系统的主要缺点是,阈值语义表达能力不强,因此限制了设计更通用的系统。Goyal等人提出了一种更通用的基于属性的密钥策略加密系统。在它们的构造中,密文与一组属性相关联,用户的密钥可以与任何单调的树访问结构相关联。1 Goyal等人的构建。可以看作是Sahai-Waters技术的扩展,其中权威机构为单调访问树嵌入了更通用的秘密共享方案,而不是在私钥中嵌入Shamir[26]秘密共享方案。Goyal等人也提出了一种加密文本策略ABE方案的可能性,但没有提供任何结构。
Pirretti等[23]给出了阈值ABE加密系统的实现,演示了基于属性的加密方案的不同应用,并讨论了密钥撤销等几个实用概念。在最近的工作中,Chase[11]给出了一个基于多权限属性的加密系统的构造,其中每个权限将管理不同的属性域。创建多权限ABE的主要挑战是防止从不同权限获取关键组件的用户之间的合谋攻击。Chase系统使用阈值ABE系统作为每个权限的底层ABE系统,而多权限ABE问题通常与寻找更具表现力的ABE系统是正交的。
此外,对由服务器中介的数据进行访问控制的历史也很长。例如,看到[18, 14, 30, 20, 16, 22]及其参考文献。我们将重点放在加密访问控制上,这样即使存储数据的服务器遭到破坏,数据也会受到保护。
Collusion Resistance and Attribute-Based Encryption:
基于属性的定义属性加密系统是他们对合谋攻击的抵抗。该属性对于构建加密访问控制系统至关重要;否则,就不可能保证系统将显示所需的安全属性,因为将存在来自设法获得少量私钥的攻击者的毁灭性攻击。虽然我们可以考虑具有不同表现形式的ABE系统,但之前的工作[2415]明确指出,抗共谋是任何ABE系统的必要特性.
在引入基于属性的加密之前,还有一些系统试图通过使用秘密共享方案[17,9,26,5,3]结合基于身份的加密来解决加密数据的访问控制[29,8];然而,这些方案并没有解决抵抗合谋攻击的问题。最近,
Kapadia, Tsang和Smith[19]给出了一个使用代理服务器的密码访问控制方案。他们的工作探索了使用代理服务器隐藏策略和对属性小空间使用非单调访问控制的新方法。我们注意到,尽管他们称该方案为CP-ABE的一种形式,但该方案并不具有抗共谋的特性。因此,我们认为他们的工作不应该被考虑在一类基于属性的加密系统,因为它缺乏对合谋攻击的安全性。
3 Background
首先给出了密文策略属性加密(CP-ABE)安全性的形式化定义。
接下来,我们给出双线性映射的背景信息。与Goyal等人[15]的工作类似,我们定义了一个访问结构,并在安全定义中使用它。但是,在这些定义中,属性将描述用户,访问结构将用于标记不同的加密数据集。
3.1 Definitions
定义1(访问结构[1])
在我们的上下文中,参与者的角色由属性承担。因此,访问结构A将包含授权的属性集。我们只关注单调的访问结构。然而,也有可能(低效地)使用我们的技术将not属性作为一个单独的属性来实现一般的访问结构。因此,系统中的属性数量将增加一倍。从现在开始,除非另有说明,否则我们所说的访问结构是指单调的访问结构。
基于ciphertext-policy属性的加密方案由四种基本算法组成:设置、加密、KeyGen和解密。此外,我们还允许选择第五种算法Delegate
设置。除了隐式安全参数外,设置算法不接受任何输入。它输出公共参数PK和主键MK。
加密(PK, M)。加密算法以公共参数PK,一条消息作为输入M,和属性域上的访问结构A。该算法对M进行加密,生成密文CT,只有拥有一组满足访问结构的属性的用户才能解密该消息。我们假设密文中隐式地包含了A。
密钥生成(MK, S).密钥生成算法以主密钥MK和一组描述密钥的属性S作为输入。输出私钥SK。
解密(PK, CT, SK)。解密算法以公共参数PK为输入,该参数为密文CT,包含访问策略A和私钥SK,私钥SK是一组属性S的私钥。如果属性集S满足访问结构然后算法将解密密文并返回消息M。
委托(SK,˜S)。委托算法以某一组属性S的密钥SK作为输入and a set S˜ ⊆ S. It output a secret key S˜K for the set of attributes ˜ S.
现在我们描述一个ciphertextpolicy abe的安全模型。与基于身份的加密方案[27,7,12]类似,安全模型允许对手查询任何不能用于解密挑战密文的私钥。In CP-ABE密文通过访问结构和带有属性的私钥来识别。因此,在我们的安全定义中,攻击者将选择被质疑对访问结构A∗的加密,并可以要求任何私钥S,以使S不满足S∗。现在我们给出一个正式的安全游戏。
CP-ABE安全模型
设置。挑战者运行Setup算法,并向敌手提供公共参数PK。(把问题B的一个实例的输入转化为方案A的一个实例的相关参数)
阶段1。敌手生成与属性集相对应的重复私钥S1, . . . , Sq1 .。(实现上述描述的输入格式的转化,如何去破解方案A,模拟器是完全不用考虑的,可简单认为是调用敌手算法)
——模拟器给定敌手算法输入,然后利用敌手算法的输出来给出问题B的解
挑战。敌手提交两个长度相等的消息M0和M1。此外,攻击者提供了挑战访问结构a∗,以便没有一个集合S1, . . . , Sq1从阶段1满足访问结构。挑战者抛出随机硬币b,并在A∗下加密Mb。将密文CT∗交给对手。
阶段2。阶段1是重复的,但有一个限制,即属性Sq1+1,…, Sq满足了相应的访问结构的挑战。
猜测。敌手给出一个猜测b′ of b.
——敌手的输出可能是成功伪造了一个数字签名,而利用这个伪造的签名,模拟器可以给出下层困难问题B的解。
在这个博弈中,敌手A的优势被定义为Pr[b′ = b] −1/2.我们注意到,该模型可以很容易地扩展到通过允许在阶段1和阶段2中进行解密查询来处理选定的密文攻击
——进一步,给出困难问题B的解是不可能的,或者说只能以可忽略的优势来给出B的解,所以敌手成功伪造一个签名的优势是可忽略的,也就说明了所设计的签名方案在某种模型下是安全的。
定义2
如果所有多项式时间对手在上述游戏中最多具有可以忽略不计的优势,那么基于密文策略属性的加密方案是安全的。
3.2双线性映射
我们提出了一些与具有高效可计算双线性映射的群有关的事实。
4 Our Construction
在本节中,我们将介绍系统的构造。我们首先描述访问树的模型,以及分别描述密文和私钥的属性。接下来,我们给出我们的方案的描述。最后,我们接着讨论安全性、效率和密钥撤销。我们在附录A中提供了安全证明
4.1 Our Model
在我们的构造中,私有密钥将被标识为一组描述性属性S。希望加密消息的一方将通过访问树结构指定私有密钥必须满足的策略来解密。
树的每个内部节点都是一个阈值门,叶子与属性相关联。(我们注意到这个设置非常有表现力。For example, we can represent a tree with “AND” and “OR” gates by using respectively 2 of 2 and 1 of 2 threshold gates.)当且仅当将私密钥分配给树的节点以满足树时,用户才能够使用给定密钥解密密文。我们使用与[15]相同的表示法来描述访问树,即使在我们的例子中,属性被用于识别密钥(而不是数据)。
访问树T。设T是一个表示访问结构的树。树的每个非叶节点代表一个阈值门,由它的子节点和一个阈值描述。如果numx是节点x的子节点数,kx是节点x的阈值,则0 < kx≤numx。当kx = 1时,阈值门是OR门,当kx = numx时,阈值门是and门。树的每个叶节点x由一个属性和一个阈值kx = 1来描述
为了方便使用访问树,我们定义了几个函数。我们用parent(x)来表示树中节点x的父节点。函数att(x)仅当x是一个叶节点并表示与树中的叶节点x相关联的属性时才被定义。访问树T还定义了每个节点的子节点之间的顺序,即节点的子节点从1编号到num编号。函数index(x)返回与节点x相关联的该数字。其中,索引值以任意方式唯一地分配给给定键的访问结构中的节点。
满足访问树。设T是一棵根为r的访问树,用Tx表示T的子树根为节点x。因此,T与Tr相同。如果一组属性γ满足访问树Tx,则表示为Tx(γ)= 1。我们递归地计算Tx(γ)如下。如果x是一个非叶节点,对节点x的所有子节点x '求Tx ' (γ)。当且仅当至少有kx子节点返回1时,Tx(γ)返回1。如果x是叶节点,则当且仅当att(x)∈γ时,Tx(γ)返回1。
4.2 Our Construction
设G0是素数阶p的双线性群,设g是G0的生成元。另外,设e: G0 × G0→G1表示双线性映射。一个安全参数κ,将决定组的大小。定义拉格朗日系数∆i,S对于i∈Zp和Zp中元素的集合S:我们将另外使用一个哈希函数H,我们将其建模为一个随机oracle。
这个函数将把任何描述为二进制字符串的属性映射到一个随机的group元素。
设置。算法将选择一个素数阶p的双线性群G0和生成元g,然后选择两个随机指数α,β∈Zp。公钥的发布方式为:
主键MK为(β,g^α)。(注意f仅用于委托。)
加密(PK, M,T)。加密算法在树访问结构T下加密消息M。算法首先为树T中的每个节点x(包括叶子)选择一个多项式qx。这些多项式按照下面的方式从根节点R开始,以自上而下的方式选择.对于树中的每个节点x,设置多项式qx的次数dx比该节点的阈值kx小1,即dx = kx−1。算法从根节点R开始,随机选取s∈Zp,设qR(0) = s。然后,随机选取多项式qR的其他点,完全定义多项式qR。对于任何其他节点x,它设置,并随机选择dx其他点来完全定义qx。
(19条消息) 密文策略基于属性加密(CP-ABE)访问树构造与解密_e小王同学V的博客-CSDN博客
设Y是T中的叶节点集合。然后通过给出树的访问结构T和计算来构造密文
密钥生成(MK,S).密钥生成算法将接受一组属性S作为输入,并输出与该集合标识的密钥。算法首先选取随机的r∈Zp,然后对每个属性j∈S选取随机的rj∈Zp。然后计算密钥为
代理(SK, S˜)。委托算法接受一个密钥SK,即一组属性S,以及另一组S˜,即S˜⊆S。密钥的形式为SK=(D,∀j∈S:Dj,D‘j)。随机选择˜r和˜rk∀k∈S˜。然后它创建一个新的密钥
由此得到的密钥˜SK是集合S˜的密钥。由于算法将密钥重新随机化,因此委托密钥等同于直接从授权机构接收的密钥。
解密(CT, SK)。我们将解密过程指定为递归算法。为了便于说明,我们将介绍解密算法的最简单形式,并在下一小节中讨论潜在的性能改进。
解密处理(引自/ping802363/article/details/65639016)。
对于叶子节点,在数据访问者属性集中寻找出和此节点属性与属性值一致的属性,用找出的属性解密出此节点的秘密值(即公式1),当然不能完全解密出,他是秘密值和加密时对此属性设置的加密值的乘积。
解密出叶子节点后,开始解密其父节点(非叶子节点),在解密出叶子节点后,即可得到多对值;如在上述访问树的“3/3”节点,其孩子节点解密出三个值19,44,83(推理过程忽略随机数),在生成这三个数时,f(1)=19,f(2)=44,f(3)=83,其中f(x)=8+4x+7x^2(解密时并不知道此多项式,只知道后面的三个点),因此在f(x)上有三个点是(1,19),(2,44),(3,83);因为此节点存储的秘密值是多项式的常数项,即f(0)=秘密值,故我们需要根据这三个点得到0所对应的值是多少,根据拉格朗日公式就能求出0所对应的值,即解密出秘密值(即公式2);对于非叶子节点均可按照上述方式解密出秘密值,在根节点处解密出整个树所隐藏的秘密值(是秘密值和加密时对此属性设置的加密值的乘积,所有节点解密出的秘密都存在一个随机数,解密出的值都是随机数和秘密值的乘积,只是讲述过程中为了方便忽略了随机数,最后根节点解密出的随机数在最后的解密过程中会抵消掉(公式3))。
1.我们首先定义一个递归算法DecryptNode(CT, SK,x),取作为输入的密文、私钥SK(它与一组属性S相关联)和来自T的一个节点x。如果节点x是叶节点,则设i = att(x),定义如下:如果i∈S,则
如果i /∈S,则定义DecryptNode(CT, SK,x) =⊥
2.现在我们考虑x是非叶节点时的递归情况。算法DecryptNode(CT, SK,x)接着进行如下操作:对于x的所有子节点z,它调用DecryptNode(CT, SK,z)并将输出存储为Fz。设Sx是任意kx大小的子节点z集合,使fz\ =⊥。如果不存在这样的集合,则节点不满足,函数返回⊥.
否则,我们计算
现在我们已经定义了函数DecryptNode,我们可以定义解密算法。算法首先简单地调用树T的根节点R上的函数。如果树满足S,我们设A = DecryptNode(CT, SK,r) = 。现在算法通过计算解密
4.3 Discussion
现在我们简要讨论一下我们的方案的安全性直觉(完整的证明在附录a中给出),我们的方案的效率,以及我们如何处理密钥撤销
Security intuition.
与之前基于属性的加密方案一样,设计我们的方案的主要挑战是防止合谋用户的攻击。就像Sahai和Waters[24]的方案一样,我们的解决方案将用户的私钥随机化,这样它们就不能被组合;然而,在我们的解决方案中,秘密共享必须嵌入到密文中,而不是私钥中。为了解密,攻击者显然必须恢复e(g,g)αs。为了做到这一点,攻击者必须将来自密文的C与来自某个用户私钥的D组件配对。当且仅当用户有足够的正确的关键组件来满足嵌入在密文中的秘密共享方案时,该值可以被忽略。共谋攻击不会有帮助,因为盲值是随机由特定用户的私钥随机化的
Effiffifficiency.密钥生成和加密算法的效率都相当简单。加密算法需要对密文访问树中的每个叶子取两次幂。密文大小将包括每个树叶的两个组元素。密钥生成算法要求对给定给用户的每个属性取两次幂,私钥由每个属性的两个组元素组成。在其最简单的形式中,解密算法可能需要对访问树的每个叶子(与私钥属性相匹配)进行两次配对,并(最多2次)在从这个叶子到根的路径上对每个节点进行一次幂运算。然而,可能有几种方法来满足策略,因此更智能的算法可能会尝试沿着这些路线进行优化。在第5节的实现描述中,我们描述了各种性能增强。
Key-revocation and numerical attributes
在基于身份的加密[27,7]和相关方案中,密钥撤销通常是一个困难的问题。核心的挑战是,由于加密数据的一方不能在线获得接收方的证书,他无法检查接收方是否被撤销。在基于属性的加密中,问题更加棘手,因为几个不同的用户可能会匹配解密策略。通常的解决方案是为每个标识或描述性属性附加一个属性过期的日期。例如,Pirretti等人建议为每个属性设置一个过期日期。例如,不使用属性"计算机科学"我们可以使用"计算机科学:10月17日"。这种方法有几个缺点。由于属性包含一个确切的日期,因此加密数据的一方和密钥颁发机构必须就此达成一致。如果我们希望某一方能够在细粒度的规模上指定关于撤销日期的策略,那么用户将被迫经常去授权机构并维护大量的私钥存储,每个时间段都有一个密钥。
理想情况下,我们希望基于属性的加密系统允许密钥授权机构给出一个过期日期为X的单个密钥,而不是在X之前的每个时间段都提供一个单独的密钥。当一方在某个日期Y对消息进行加密时,使用在日期X到期的密钥的用户应该能够解密如果 X≥Y,并且策略的其余部分匹配用户的属性。通过这种方式,可以给不同的用户提供不同的过期日期,加密数据的各方和权威机构之间不需要任何密切的协调。
这种功能可以通过扩展属性来支持数值,通过扩展策略来支持整数比较来实现。为了表示某个n位整数k的数值属性“a = k”,我们将其转换为“比特包”表示,产生n(非数值)属性,指定k中每个比特的值。例如,要给出一个带有4位属性“a = 9”的私钥,我们应该包括“a: 1***”、“a: *0**”、“a: **0*”和
“a: ***1”。然后,我们可以使用AND和OR门策略实现对这些属性的整数比较,如图1中的“a < 11”所示。常数11的位和门的选择之间有直接的对应关系。对于≤、>、≥和=的策略,可以类似地使用最多n个门来实现,或者根据常数可能更少。也可以使用大约3n个门来构造两个数值属性(而不是属性和常量)之间的比较,尽管这在实践中何时有用还不太清楚。
5 Implementation
在本节中,我们将讨论实现第4节构造中的实际问题,包括几个优化、对我们开发的工具包的描述,以及对其性能的度量。5.1解密效率提升
1.优化解密策略
第4节给出的递归算法为每个由私钥属性匹配的叶节点生成两对,并为从该节点到根的路径上出现的每个节点生成最多一次幂次(不包括根)。递归部分之后的最后一步是添加一个额外的配对。当然,在每个阈值为k的内部节点,除k之外的所有子节点的结果都会被丢弃。通过提前考虑哪些叶节点是满意的,并从中选取一个子集,使整个访问树满足,可以避免评估DecryptNode,其中最终不会使用结果。
更准确地说,设M是访问树T中节点的子集。我们将restrict(T,M)定义为通过删除以下节点而形成的访问树T(同时保持阈值不变)。首先,我们删除所有不在M中的节点。接下来,我们删除任何不连接到T的原始根的节点,以及任何内部节点x,现在它的子节点比其阈值kx更少。这样重复,直到没有节点被删除,结果是restrict(T,M)。因此,给定一个访问树T和一组满足它的属性γ,自然的问题是选择一个集合M,使γ满足限制(T,M),并且M中的叶节点数量最小化(考虑配对是最昂贵的操作)。这很容易通过简单的递归算法完成,只需对树进行一次遍历。然后我们可以在restrict(T,M)上使用DecryptNode,得到相同的结果。
通过提前考虑哪些叶节点是满意的,并从中选取一个子集,使整个访问树满足,可以避免评估
DecryptNode,其中最终不会使用结果。更准确地说,设M是访问树T中节点的子集。我们将restrict(T,M)定义为通过删除以下节点而形成的访问树T(同时保持阈值不变)。
2.直接计算DecryptNode
进一步的改进可以通过放弃DecryptNode函数并进行更直接的计算。直观地,我们设想将对DecryptNode的递归调用树扁平化,然后将指数合并为每个(使用的)叶节点一个。准确地说,设T为根为r的访问树,γ为一组属性,M基于三角形数据统计T使γ满足约束(T,M)。还假设M被最小化,因此内部节点的子节点数不会超过其阈值。设L图3.m为M中的叶节点。则对于每个ℓ∈L,我们表示从ℓ到r的路径为
同样,将节点x(包括它自己)的兄弟姐妹集合表示为sibs(x) = {y | parent(x) = parent(y)}。有了这种表示法,我们就可以直接计算的结果DecryptNode (CT, SK, r)。首先,对于每个ℓ∈L,计算zℓ如下所示。
使用该方法,整个解密算法的求幂次数从|M|−1减少到|L|(即除根节点外每个节点都有一个)。配对的数量是2|L|
合并配对
通过使用相同的属性组合叶子,还可以进一步减少(这次是对的数量)。如果att(ℓ1)=att(ℓ2)=i为一些ℓ1,ℓ2在L,那么
使用这个事实,我们可以结合L中每个不同属性的所有配对,将总配对减少到2m,其中m是L中出现的不同属性的数量。但是,注意,指数的数量增加,一些指数现在必须在G0而不是G1中执行。具体来说,如果m '是与至少一个其他叶子共享其属性的叶子的数量,我们必须执行G0和|L|−m '的2m '指数,而不是分别为0和|L|。如果对G0求幂(一个椭圆曲线组)比G1(一个相同阶的有限场)慢,这种技术有可能增加解密时间。我们将在第5.3节进一步研究这种权衡。
6 Conclusions and Open Directions
我们创建了一个基于密文策略属性的加密系统。我们的系统允许一种新型的加密访问控制,其中用户的私钥由一组属性指定,加密数据的一方可以在这些属性上指定一个策略,指定哪些用户能够解密。我们的系统允许策略表示为任何单调的树访问结构,并能够抵抗攻击者可能获得多个私钥的共谋攻击。最后,我们提供了我们的系统的一个实现,其中包括几种优化技术。
在未来,考虑具有不同类型的可表达性的基于属性的加密系统将是有趣的。同时,Key-PolicyABE和Ciphertext-Policy ABE捕获了两种有趣的、互补的系统类型,当然还有其他类型的系统。这一行的主要挑战是找到一种新的系统,具有优雅的表达形式,产生的不仅仅是任意的技术组合。
我们的系统的一个局限性是,它在一般群启发式下被证明是安全的。我们相信,一个重要的努力是证明一个更标准和非交互的假设下系统的安全。这种类型的工作会很有趣,即使它会导致我们现有系统效率的适度效率损失。