密文策略属性基加密(CP-ABE)

   

目录

   

密文策略属性基加密(CP-ABE)

CP-ABE过程

 参考文献

密文策略属性基加密(CP-ABE)

    在之前的(KP-ABE)中,密文和属性相关联,私钥与访问策略相关联,可以决定能解密的密文,加密者无法控制谁能够访问他加密的数据。在密文策略属性基加密(CP-ABE)中正好与之相反,私钥与属性相关联,密文与访问结构相关联,能够决定拥有哪些属性的用户可以解密密文,这样设置,加密者就能够控制谁有权访问他加密的数据。这与传统的访问控制方法,基于角色的访问控制(RBAC)类似。在CP-ABE中,使用了一种新颖的私钥随机化技术来保证抗共谋性。使用新的两级随机掩蔽的技术。

        在CP-ABE中,与密文相关联的访问结构也被构造为访问树。其中树的内部节点都是一个阈值门,由其子节点和阈值描述。如果num_{x}是其子节点的个数,k_{x}是其阈值,则0< k_{x}\leq num_{x}。与门和或门都可以被构造成阈值门,当k_{x}=1时,就是或门,当k_{x}=num_{x}时就是与门。叶子节点与属性相关联,由属性值和阈值k_{x}=1描述。为了便于使用访问数,还定义了一些函数。parent(x)表示树中节点的父节点。att(x)表示与树中叶节点相关联的属性,只有x节点是叶节点时才定义该函数。对于节点的子节点来说,需要对子节点进行编号,index(x)返回子节点的索引值。

        满足访问树。令\tau为根为r的访问树,用\tau _{x}表示以节点x为根的\tau的子树,因此\tau\tau _{r}是一样的,如果一组属性\gamma满足访问树\tau _{x},我们将其表示为\tau_{x} (\gamma )=1,递归计算\tau _{x}(\gamma )。如果x是非叶子节点,则计算节点x的子节点x{}'的值\tau _{x{}'}(\gamma ),当至少k_{x}个子节点返回1时\tau _{x}(\gamma )返回1。如果x是叶子节点,当且仅当att(x)\in \gamma\tau _{x}(\gamma )返回1。

CP-ABE过程

        G0是素数阶p的双线性群,g是G0的生成元。此外e:G0\times G0\rightarrow G1表示双线性映射。安全参数k将确定群的大小。同时为i\in Z_{p}Z_{p}中元素的集合S定义拉格朗日系数:

                                                     \Delta _{i,S}(x)=\prod_{j\in S,j\neq i}^{}\frac{x-j}{i-j}  

        另外使用一个哈希函数H:\left \{ 0,1 \right \}^{*}\rightarrow G0,将其建模为随机预言机,功能会将任意描述为二进制字符串的属性映射到随机群元素。构造如下:

Setup:选择一个具有生成元g的素数阶p的双线性群G0。接下来选择两个随机指数\alpha ,\beta \in Z_{p},公钥公布如下:

                                             PK=G0,h=g^{\beta },f=g^{\frac{1}{\beta }},e(g,g)^{\alpha }

主密钥MK为:(\beta ,g^{\alpha }),这里的f仅仅用来委托。

Encrypt(PK,M,\tau):加密算法将在访问结构\tau下加密消息M。首先为树\tau中的每个节点选择一个多项式q_{x}。(包括叶子节点),这些多项式从根节点R开始以一种自顶向下的方式选择。

        对于树中的每个节点x,设置多项式q_{x}的次数比节点阈值少一,也就是d_{x}=k_{x}-1。首先,从根节点R开始,随机选择一个s\in Z_{p}并且设置q_{R}(0)=s,然后d_{R}次多项式q_{R}的其他点完全随机的选取。对于任意的其他节点x,设置q_{x}(0)=q_{parent(x)}(index(x)),其他点随机选择来定义q_{x}。令Y为\tau中叶子节点集合,然后通过给出的访问结构\tau构造密文如下:

CT=(\tau ,C\widetilde{}=Me(g,g)^{\alpha s},C=h^{s},\forall y\in Y:C_{y}=g^{q_{y}(0)},C{}'_{y}=H(att(y))^{q_{y}(0)})

KeyGen(MK,S):密钥生成算法以一组属性S作为输入,并输出以该集合表示的密钥。算法首先选择一个随机r\in Z_{p},然后为每个属性j\in S选择随机r_{j}\in Z_{p},然后计算密钥为:

SK=(D=g^{(\alpha +r)/\beta },\forall j\in S:D_{j}=g^{r}\cdot H(j)^{r_{j}},D{}'_{j}=g^{r_{j}})

Delegate(SK,S\widetilde{}):委托算法接受一个密钥SK,用于一组属性S和令一组属性S\widetilde{},其中S\widetilde{}\subseteq S。密钥的形式为SK=(D,\forall j\in S:D_{j},D{}'_{j}),算法选择一个随机r\widetilde{}r\widetilde{}_{k}\forall k\in S\widetilde{},然后它创造一个新的密钥:

\widetilde{SK}=(\widetilde{D}=Df^{\widetilde{r}},\forall k\in \widetilde{S}:\widetilde{D_{k}}=D_{k}g^{\widetilde{r}}H(k)^{\widetilde{r}k},\widetilde{D{}'_{k}}=D{}'_{k}g^{\widetilde{r}k})

得到的密钥\widetilde{SK}是集合\widetilde{S}的密钥。因为这个算法重新随机化了密钥,所以委托密钥等同于直接从权威机构得到一个。

Decrypt(CT,SK):解密过程是一个递归过程。我们首先定义一个递归算法DecryptNode(CT,SK,x),以密文CT=(\tau ,\widetilde{C},C,\forall y\in Y:C_{y},C{}'_{y}),一个与一组属性关联的私钥SK和\tau中的一个节点为输入。如果节点x为叶子节点,令i=att(x),定义如下:如果i\in S,则

DecryptNode(CT,SK,x) =  \frac{e(D_{i},C_{x})}{e(D{}'_{i},C{}'_{x})}

                                     =\frac{e(g^{r}\cdot H(i)^{r_{i}},h^{q_{x}(0)})}{e(g^{r_{i}},H(i)^{q_{x}(0)})}

                                     =e(g,g)^{rq_{x}(0)}

如果i\notin S,定义DecryptNode(CT,SK,x) =\perp

        当x不是叶子节点时,DecryptNode(CT,SK,x) 算法过程如下:对于x的所有子节点z,调用DecryptNode(E,D,z)并保存输出为F_{z},令S_{x}为任意k_{x}大小的子节点z的集合,使得F_{z}\neq \perp,如果这样的集合不存在,则节点不满足,函数返回\perp。否则,计算如下:

                               F_{x}=\prod_{z\in S_{x}}^{}F_{z}^{\Delta _{i,S{}'_{x}}(0)},where i=index(z),S{}'_{x}=\left \{ index(z):z\in S_{x} \right \}

                                    =\prod_{z\in S_{x}}^{}(e(g,g)^{r\cdot q_{z}(0)})^{\Delta _{i,S{}'_{x}}(0)}

                                    =\prod_{z\in S_{x}}^{}(e(g,g)^{r\cdot q_{parent(z)}(index(z))})^{\Delta _{i,S{}'_{x}}(0)}

                                    =\prod_{z\in S_{x}}^{}e(g,g)^{r\cdot q_{x}(i)\cdot \Delta _{i,S{}'_{x}}(0)}

                                    =e(g,g)^{r\cdot q_{x}(0)}

返回结果,如果这个树被集合S满足,设置A=DecryptNode(CT,SK,r)=e(g,g)^{rq_{R}(0)}=e(g,g)^{rs}。这个算法通过计算\widetilde{C}/(e(C,D)/A)=\widetilde{C}/(e(h^{s},g^{(\alpha +r)/\beta })/e(g,g)^{rs})=M,这样就得到了明文信息。

 参考文献

BETHENCOURT J, SAHAI A, WATERS B. Ciphertext-policy attribute-based encryption[C]

 

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值