一种生成安全解密密钥的CP-ABE方法
技术领域
本发明涉及一种生成安全解密密钥的CP-ABE方法,属于信息安全技术领域。
背景技术
现有的基于属性的加密(Attribute Based Encryption,ABE)系统有四种角:
(1)内容拥有者
内容可包含任何数字信息。内容拥有者加密和发布自己的内容。加密过程分为两阶段: 第一阶段,内容拥有者使用对称加密算法加密自己的数字内容。第二阶段,内容拥有者使用 ABE算法加密包含该内容元数据和该加密内容对应的对称密钥信息的消息。
(2)内容申请者
内容申请者可申请内容,获取该内容,用自己的解密密钥来解密该内容。
(3)授权者
授权者可对内容申请者进行授权,根据内容申请者的属性生成内容申请者的解密密钥, 把解密密钥发送给内容申请者。
(4)第三方
第三方为可选的角。第三方可提供辅助功能。如第三方可执行解密过程中的部分计算, 并产生中间结果,来减轻内容申请者的解密计算开销。此中间结果不是最终解密的明文内容。
ABE算法分为四个基本算法组成:
1.建立
在建立算法中,产生公共系统参数,授权者的公共和秘密参数。
2.消息加密
在消息加密算法中,内容拥有者使用ABE算法加密包含该内容元数据和该加密内容对应 的对称密钥信息的消息。
3.解密密钥生成
在解密密钥生成算法中,授权者根据内容申请者的属性生成内容申请者的解密密钥,把 解密密钥发送给内容申请者。
4.消息解密
在消息解密算法中,内容申请者用自己的解密密钥来解密该内容。
相应的,一个ABE系统中,包含建立、消息加密、解密密钥生成和消息解密四个基本的 ABE功能模块。
从策略角度,ABE算法分为密钥策略的ABE(Key Policy Attribute Based Encryption, KP-ABE)算法和密文策略的ABE(Ciphertext Policy Attribute Based Encryption,CP-ABE)算法。 对于KP-ABE算法,密文与一组属性相关联,并且用户的解密密钥与访问控制结构相关联。 只有与密文关联的属性满足相应访问控制结构,用户才能使用解密密钥对密文解密。对于 CP-ABE算法,密文基于访问控制结构加密,而相应的解密密钥基于一组属性创建。只有用 户的解密密钥相关的一组属性满足给定的密文的访问控制结构,用户才能使用解密密钥对密 文解密。
外包解密:内容申请者可将部分解密运算外包给第三方,第三方可可执行解密过程中的 部分计算,并产生中间结果,来减轻内容申请者的解密计算开销。
解密密钥在网络环境中安全传输是一个关键问题。从现有文献检索来看,尚未有文献明 确的针对此问题提出解决方法。现有文献的算法,只能通过离线的方法或者SSL协议的方法 来传输密钥。离线方式对一些应用,比如存在大量用户的公有云计算环境下不适用。对这类 应用,解密密钥只能通过网络进行传输。如果采用SSL协议,则存在以下劣势:(1)产生的 额外开销。SSL协议协商与建立产生开销;对称加密对解密密钥加解密产生开销。(2)不支 持外包解密。
现有的外包解密方式的劣势:用户需要产生随机密钥对解密密钥进行处理后,再发给第 三方,此过程产生计算开销。
发明内容
针对现有技术存在的技术问题,本发明目的在于提出一种生成安全解密密钥的CP-ABE (Attribute Based Encryption Generating Secure Decryption Key,SK-CP-ABE)方法。
本发明的技术方案为:
一种生成安全解密密钥的CP-ABE方法,其步骤为:
1)授权者根据安全参数建立自己的公开/秘密参数,同时内容申请者建立自己的公私钥及 其它公开/秘密参数;
2)内容拥有者利用该授权者的公钥等公开参数,使用CP-ABE算法,对消息M进行加密, 得到密文CT;
3)该内容申请者向该授权者申请解密密钥,该授权者根据该内容申请者的属性生成解密 密钥,生成解密密钥过程中,将该内容申请者的公钥信息嵌入到解密密钥中,然后将 解密密钥发送给该内容申请者;
4)该内容申请者获取该消息M的密文CT后,用自己的私钥和解密密钥对该密文CT进 行解密,得到该消息M。
进一步的,将该内容申请者的公钥嵌入到该解密密钥的方法为:
如果消息加密算法采用基于线性秘密共享方案的访问控制结构,则生成的表达式中所有 以g为底数的部分,αj必表现为g的指数的一个乘数,即以g为底数的部分为Z表示指数 的其余部分;生成的计算过程为:以为底数,Z为指数进行运算,其中, 是一个基于椭圆曲线的乘法循环,其阶为p,生成元为g,αj为内容申请者的私钥,对应 的公钥为
如果消息加密算法采用基于树的访问控制结构,则以 为底数,(α+r)·Y为指数进行运算,生成表达式结果为 其中,α为授权者的秘密参数,Y表示指数的其余部分,r为针对该解密秘钥生成 而产生的随机秘密数。或者以为底数,Z为指数进行运算,Z表示指数的 其余部分,同时Z中包含r;其中,是一个基于椭圆曲线的乘法循环,其阶为p,生成元 为g,αj为内容申请者的私钥,对应的公钥为
进一步的,该内容申请者从所述椭圆曲线上随机选取的一个随机密钥对作为自己的公私 钥对。
进一步的,所述对该密文CT进行解密的方法为:该内容申请者先用解密密钥对该密文 CT进行解密,得到一中间结果,然后利用自己的私钥,并根据计算需要使用解密密钥的一部 分或不使用解密密钥,对该中间结果进行解密,得到该消息M。
进一步的,所述对该密文CT进行解密的方法为:该内容申请者将解密密钥发送给第三 方。第三方对密文CT进行解密计算,生成ElGamal形式的中间结果,并把该中间结果发送 给该内容申请者;该内容申请者根据此中间结果,内容申请者使用自己的私钥,并根据计算 需要使用解密密钥的一部分或不使用解密密钥,计算生成该消息M。
进一步的,所述步骤2)中,该密文CT为CP-ABE算法生成的密文;所述步骤4)中, 该内容申请者对该密文CT进行解密的方法为:如果密文CT的表达式中,除Me(g,g)XY外,对 第i项属性还存在有的表达式,且Ci中不包含M;其中,M为消息,e(g,g) 为双线性映射函数,X,Y为表达式的其余部分,Xi,Yi分别为第i向属性的密文表达式的其余 部分;则将所有Ci修改为C′i其中如果Yi为空,则该内容申请者将其私钥αj增加为所有Ci中底 数e(g,g)的指数的一个乘数即如果Yi不为空,则该内容申请者将其私钥αj增加为所有Ci中底数e(g,g)的指数的一个乘数,并将αj增加为所有底数Yi的指数的一个乘数, 即然后,该内容申请者使用自己的解密密钥和私钥αj对上述结果进行 计算生成该消息M。
SK-CP-ABE方法在CP-ABE算法的不同基本算法中体现如下:
1.建立
输入:安全参数λ。
输出:系统的公共参数,内容申请者公私钥,授权者的公共/秘密参数。
建立算法中,首先系统建立一个基于椭圆曲线的乘法循环其阶为p,生成元为g。
系统可建立一些其它全部公共/秘密参数。
授权者建立自己的公共/秘密参数。
每个内容申请者选择椭圆曲线上的一个随机密钥对作为自己的公私钥对。一个内容申请 者j选择一个随机的αj∈Zp作为自己的私钥,对应的公钥为
2.消息加密
输入:消息M,系统的公共参数,授权者的公共/秘密参数
输出:密文CT
内容拥有者选择一定的访问控制结构,用系统和授权者的公共参数对消息M,采用 CP-ABE算法进行加密,得到密文CT。
3.解密密钥生成
输入:系统的公共参数,授权者的公共/秘密参数,内容申请者公钥及属性,属性集。
输出:解密密钥。
内容申请者向授权者申请解密密钥,授权者根据内容申请者的属性,生成相应的解密密 钥。
在解密密钥生成算法中,当一个授权者为一个内容申请者生成解密密钥的过程中,授权 者将该内容申请者的公钥信息嵌入到该内容申请者的解密密钥中。
具体嵌入过程为:设内容申请者的公钥为
(1)如果消息加密算法采用基于线性秘密共享方案(Linear Secret Sharing Scheme)的访问 控制结构,则生成的表达式中所有以g为底数的部分,αj必表现为g的指数的一个乘数,即以 g为底数的部分为Z表示指数的其余部分,可为单个参数,或多个参数组合运算成的表 示式。生成的计算过程为:以为底数,Z为指数进行运算,
该内容申请者的属性组成集合S′(属性个数为n),令Tx为小于x的自然数的集合,该内 容申请者的解密密钥形式为:
<math> <mrow> <mo>∀</mo> <mi>u</mi> <mo>∈</mo> <msub> <mi>T</mi> <mi>k</mi> </msub> <mo>,</mo> </mrow> </math>
v∈Tm,w∈Tn,r∈Tl,
<math> <mrow> <mi>s</mi> <mo>∈</mo> <msub> <mi>T</mi> <mi>n</mi> </msub> <mo>:</mo> <msup> <mi>g</mi> <mrow> <msub> <mi>α</mi> <mi>j</mi> </msub> <msub> <mi>X</mi> <mi>u</mi> </msub> </mrow> </msup> <msub> <mi>Y</mi> <mi>u</mi> </msub> <mo>,</mo> </mrow> </math>
<math> <mrow> <msup> <mi>g</mi> <mrow> <msub> <mi>α</mi> <mi>j</mi> </msub> <msub> <mi>X</mi> <mi>vw</mi> </msub> </mrow> </msup> <msub> <mi>Y</mi> <mi>vw</mi> </msub> <mo>,</mo> </mrow> </math>
Zrs这里,k,m,n,l∈N,k≥0,l≥0,m≥1,n≥1,
展开为:
<math> <mrow> <msup> <mi>g</mi> <mrow> <msub> <mi>α</mi> <mi>j</mi> </msub> <msub> <mi>X</mi> <mn>1</mn> </msub> </mrow> </msup> <msub> <mi>Y</mi> <mn>1</mn> </msub> <mo>,</mo> <mo>.</mo> <mo>.</mo> <mo>.</mo> <mo>,</mo> <msup> <mi>g</mi> <mrow> <msub> <mi>α</mi> <mi>j</mi> </msub> <msub> <mi>X</mi> <mi>k</mi> </msub> </mrow> </msup> <msub> <mi>Y</mi> <mi>k</mi> </msub> <mo>,</mo> <msup> <mi>g</mi> <mrow> <msub> <mi>α</mi> <mi>j</mi> </msub> <msub> <mi>X</mi> <mn>11</mn> </msub> </mrow> </msup> <msub> <mi>Y</mi> <mn>11</mn> </msub> <mo>,</mo> <mo>.</mo> <mo>.</mo> <mo>.</mo> <mo>,</mo> <msup> <mi>g</mi> <mrow> <msub> <mi>α</mi> <mi>j</mi> </msub> <msub> <mi>X</mi> <mrow> <mn>1</mn> <mi>n</mi> </mrow> </msub> </mrow> </msup> <msub> <mi>Y</mi> <mrow> <mn>1</mn> <mi>n</mi> </mrow> </msub> <mo>,</mo> <mo>.</mo> <mo>.</mo> <mo>.</mo> <mo>,</mo> <msup> <mi>g</mi> <mrow> <msub> <mi>α</mi> <mi>j</mi> </msub> <msub> <mi>X</mi> <mrow> <mi>m</mi> <mn>1</mn> </mrow> </msub> </mrow> </msup> <msub> <mi>Y</mi> <mrow> <mi>m</mi> <mn>1</mn> </mrow> </msub> <mo>,</mo> <mo>.</mo> <mo>.</mo> <mo>.</mo> <mo>,</mo> <msup> <mi>g</mi> <mrow> <msub> <mi>α</mi> <mi>j</mi> </msub> <msub> <mi>X</mi> <mi>mn</mi> </msub> </mrow> </msup> <msub> <mi>Y</mi> <mrow> <mi>mn</mi> <mo>,</mo> </mrow> </msub> </mrow> </math>
Z11,...,Z1n,...,Zl1,...,Zln。
X1,Y1,...,Xk,Yk,X11,Y11,...,X1n,Y1n,...,Xm1,Ym1,...,Xmn,Ymn,Z11,...,Z1n,...,Zl1,...,Zln都 不包含g,表示解密密钥的表达式的其余部分,可为单个参数,或多个参数组合运算成的表示 式。
(2)如果消息加密算法采用基于树的访问控制结构,则以 为底数,(α+r)·Y为指数进行运算,生成表达式结果为 其中,α为授权者的秘密参数,Y表示指数的其余部分,r为针对该解密秘钥生成 而产生的随机秘密数。或者以为底数,Z为指数进行运算,Z表示指数的 其余部分,同时Z中包含r。
该解密密钥可以在网络上明文传输,攻击者截获该密钥也不能用于解密消息,因此是安 全解密密钥。
授权者将解密密钥发送给内容申请者。
4.消息解密
输入:密文CT,系统的公共参数,授权者的公共参数,内容申请者的解密密钥DKj,内容 申请者的私钥αj;
输出:消息M
在消息解密算法中,当一个内容申请者解密CT时,解密过程分为两个阶段。在第1阶 段,不使用该内容申请者的私钥,使用解密秘钥生成ElGamal形式的中间结果。在第2阶段, 该内容申请者使用自己的私钥,并根据计算需要使用解密密钥的一部分或不使用解密密钥, 计算产生最终解密的消息M。
内容申请者可选择是否将第1阶段的计算外包给第三方。如果内容申请者选择将第1阶 段的解密计算外包给第三方,则内容申请者将自己的解密密钥发送给第三方。第三方用内容 申请者的解密密钥进行第1阶段的解密计算,生成ElGamal形式的中间结果,并把中间结果 发送给内容申请者。在第2阶段,根据此中间结果,内容申请者使用自己的私钥,并根据计 算需要使用解密密钥的一部分或不使用解密密钥,计算生成最终的解密消息M。
本发明的方法可对CP-ABE算法进行改造,改造后的算法能支持生成安全解密密钥和外 包解密。该方法也可用于设计新的CP-ABE算法。
与现有技术相比,本发明的优点:
(1)解密密钥产生过程中,通过将内容申请者的公钥信息嵌入解密密钥中,嵌入过程 的计算为轻量级,开销很小。
(2)产生的解密密钥可以直接在网络传输,且安全性高(基于离散对数的安全基础)。
(3)采用外包解密时,用户可以直接发送解密密钥给第三方,不产生额外计算开销。
具体实施方式
下面结合具体实例对本发明进行进一步详细描述。
本发明的方法对CP-ABE算法的改造流程:
对于满足以下条件的CP-ABE算法,SK-CP-ABE算法可以对此算法进行改造形成新的算 法:此CP-ABE算法中没有外包解密的描述。
对满足以上条件的CP-ABE算法改造的通用流程描述如下(只描述修改的部分):
1.建立
输入:安全参数λ。
输出:系统的公共参数,内容申请者公私钥,授权者的公共/秘密参数。
原CP-ABE算法中,全局参数中,是一个基于椭圆曲线的乘法循环,其阶为p,生成 元为g。CP-ABE算法中,如果内容申请者已选择椭圆曲线上的一个随机密钥对作为自己的公 私钥对的描述,则建立算法不需要改造,否则每个内容申请者j选择一个秘密随机数αj∈Zp作 为自己私钥,对应的公钥为
2.解密密钥生成
对于内容申请者j(公钥为),
(1)如果消息加密算法采用基于线性秘密共享方案的访问控制结构,CP-ABE算法φ生 成的内容申请者j的解秘密钥形式如下:
<math> <mrow> <msup> <mi>g</mi> <msub> <mi>X</mi> <mn>1</mn> </msub> </msup> <msub> <mi>Y</mi> <mn>1</mn> </msub> <mo>,</mo> <mo>.</mo> <mo>.</mo> <mo>.</mo> <mo>,</mo> <msup> <mi>g</mi> <msub> <mi>X</mi> <mi>k</mi> </msub> </msup> <msub> <mi>Y</mi> <mi>k</mi> </msub> <mo>,</mo> <msup> <mi>g</mi> <msub> <mi>X</mi> <mn>11</mn> </msub> </msup> <msub> <mi>Y</mi> <mn>11</mn> </msub> <mo>,</mo> <mo>.</mo> <mo>.</mo> <mo>.</mo> <mo>,</mo> <msup> <mi>g</mi> <msub> <mi>X</mi> <mrow> <mn>1</mn> <mi>n</mi> </mrow> </msub> </msup> <msub> <mi>Y</mi> <mrow> <mn>1</mn> <mi>n</mi> </mrow> </msub> <mo>,</mo> <mo>.</mo> <mo>.</mo> <mo>.</mo> <mo>,</mo> <msup> <mi>g</mi> <msub> <mi>X</mi> <mrow> <mi>m</mi> <mn>1</mn> </mrow> </msub> </msup> <msub> <mi>Y</mi> <mrow> <mi>m</mi> <mn>1</mn> </mrow> </msub> <mo>,</mo> <mo>.</mo> <mo>.</mo> <mo>.</mo> <msup> <mi>g</mi> <msub> <mi>X</mi> <mi>mn</mi> </msub> </msup> <msub> <mi>Y</mi> <mi>mn</mi> </msub> <mo>,</mo> </mrow> </math>
Z11,...,Z1n,...,Zl1,...,Zln.
这里,k,m,n,l∈N,k≥0,l≥0,m≥1,n≥1,
X1,Y1,...,Xk,Yk,X11,Y11,...,X1n,Y1n,...,Xm1,Ym1,...,Xmn,Ymn,Z11,...,Z1n,...,Zl1,...,Zln都 不包含g,表示解秘密钥的表达式的其余部分。
改造后的算法生成内容申请者j的解秘密钥的方法为:对于原算法的解密密钥表达式中 所有以g为底数的部分,用替代g到原算法中的解密密钥表达式中进行计算,结果表现为αj被增加为g的指数的一个乘数,形式如下:
<math> <mrow> <msup> <mi>g</mi> <mrow> <msub> <mi>α</mi> <mi>j</mi> </msub> <msub> <mi>X</mi> <mn>1</mn> </msub> </mrow> </msup> <msub> <mi>Y</mi> <mn>1</mn> </msub> <mo>,</mo> <mo>.</mo> <mo>.</mo> <mo>.</mo> <msup> <mi>g</mi> <mrow> <msub> <mi>α</mi> <mi>j</mi> </msub> <msub> <mi>X</mi> <mi>k</mi> </msub> </mrow> </msup> <msub> <mi>Y</mi> <mi>k</mi> </msub> <mo>,</mo> <msup> <mi>g</mi> <mrow> <msub> <mi>α</mi> <mi>j</mi> </msub> <msub> <mi>X</mi> <mn>11</mn> </msub> </mrow> </msup> <msub> <mi>Y</mi> <mn>11</mn> </msub> <mo>,</mo> <mo>.</mo> <mo>.</mo> <mo>.</mo> <mo>,</mo> <msup> <mi>g</mi> <mrow> <msub> <mi>α</mi> <mi>j</mi> </msub> <msub> <mi>X</mi> <mrow> <mn>1</mn> <mi>n</mi> </mrow> </msub> </mrow> </msup> <msub> <mi>Y</mi> <mrow> <mn>1</mn> <mi>n</mi> </mrow> </msub> <mo>,</mo> <mo>.</mo> <mo>.</mo> <mo>.</mo> <mo>,</mo> <msup> <mi>g</mi> <mrow> <msub> <mi>α</mi> <mi>j</mi> </msub> <msub> <mi>X</mi> <mrow> <mi>m</mi> <mn>1</mn> </mrow> </msub> </mrow> </msup> <msub> <mi>Y</mi> <mrow> <mi>m</mi> <mn>1</mn> </mrow> </msub> <mo>,</mo> <mo>.</mo> <mo>.</mo> <mo>.</mo> <msup> <mi>g</mi> <mrow> <msub> <mi>α</mi> <mi>j</mi> </msub> <msub> <mi>X</mi> <mi>mn</mi> </msub> </mrow> </msup> <msub> <mi>Y</mi> <mrow> <mi>mn</mi> <mo>,</mo> </mrow> </msub> </mrow> </math>
Z11,...,Z1n,...,Zl1,Zln.
(2)如果消息加密算法采用基于树的访问控制结构,对于原算法中的解密密钥表达式 中具有以下特点之一的表达式,对于该表达式中所有以g为底数的部分,用 替代g到原算法中的解密密钥表达式中时行计算,结果为将αj增加为g的指数的一个乘数:
(Ⅰ)该表达式为g(α+r)·Y;其中,α为授权者的秘密参数,Y表示指数的其余部分, r为针对该解密秘钥生成而产生的随机秘密数。
(Ⅱ)对于其它所有包含(Ⅰ)描述的随机数r的表达式。
3.消息解密
改造后的消息解密算法:改造后的消息解密算法包含准备阶段,解密过程包含两个阶段。 准备阶段:如果密文的表达式中,除Me(g,g)XY(M为消息,e(g,g)为双线性映射函数,X,Y为 表达式的其余部分,Y可能有空),第i项属性还存在有的表达式(Xi,Yi为 表达式的其余部分,Yi可能为空),则将所有Ci修改为C′i:
(1)如果Yi为空,则内容申请者(私钥为αj)将αj增加为所有Ci中底数e(g,g)的指数的 一个乘数,形式为:
<math> <mrow> <msubsup> <mi>C</mi> <mi>i</mi> <mo>′</mo> </msubsup> <mo>=</mo> <mi>e</mi> <msup> <mrow> <mo>(</mo> <mi>g</mi> <mo>,</mo> <mi>g</mi> <mo>)</mo> </mrow> <mrow> <msub> <mi>α</mi> <mi>j</mi> </msub> <msub> <mi>X</mi> <mi>i</mi> </msub> </mrow> </msup> <mo>∀</mo> <mi>i</mi> <mo>;</mo> </mrow> </math>
(2)如果Yi不为空,内容申请者(私钥为αj)将αj增加为所有Ci中底数e(g,g)的指数的 一个乘数,并将αj增加为所有底数Yi的指数的一个乘数,形式为:
在消息解密算法中,当一个内容申请者解密某消息时,解密过程分为两个阶段。在第1 阶段,内容申请者使用自己的解密密钥来解密消息,不使用该内容申请者的私钥,得到 ElGamal形式的中间结果。在第2阶段,该内容申请者使用自己的私钥,,并根据计算需要使 用解密密钥的一部分或不使用解密密钥,计算生成最终解密的消息。
内容申请者可选择是否将第1阶段的计算外包给第三方。如果内容申请者选择将第1阶 段的计算外包给第三方,则内容申请者将自己的解密密钥发送给第三方。第三方通过网络获 取密文CT,并使用内容申请者的解密密钥进行第1阶段的解密计算,生成ElGamal形式的中 间结果,并把中间结果发送给内容申请者。如果内容申请者不选择将第1阶段的计算外包给 第三方,则内容申请者通过网络获取密文CT,使用解密密钥完成第1阶段的计算。在第2阶 段,根据此中间结果,内容申请者使用自己的私钥,并根据计算需要使用解密密钥的一部分 或不使用解密密钥,计算生成最终的解密消息。
改造例子:
1.对文献“John Bethencourt,Amit Sahai,and Brent Waters.Cipheretxt-Policy Attribute-BasedEncryption.In IEEE Symposium on Security and Privacy,may2007,pp.321-334.”算 法的改造:
改造后的算法如下:
(1)建立
输入:安全参数λ
输出:系统的公共参数,内容申请者公私钥,授权者的公共/秘密参数
算法描述:
建立算法根据安全参数λ,产生这里p是一个λ位的素数阶,和是阶 为p的两个乘法循环,g为上的一个生成元,e为上的一个双线性映射,下一 步选择哈希函数
每个内容申请者j选择一个在整数集上的一个随机的指数αj作为自己的私钥,相应的 公钥为
授权者选择一个在整数集上的随机的指数α,β,将(β,α,gα)作为主密钥,授权者 的公共参数为:g,e(g,g)α,h=gβ,f=g1/β。
(2)消息加密
输入:消息M,系统的公共参数,授权者的公共/秘密参数
输出:密文CT
算法描述:
内容拥有者用一个基于树的访问控制结构加密消息M,
消息加密算法首先对树中的每个节点(包括叶子节点)选择一个多项式参数qx。多项 式选择从根节点开始,以一种自顶向下的顺序进行。对于每个树中的每个节点x,多项式的 阶dx为该节点的阀值kx减1,即dx=kx-1。
算法从根节点R选择一个随机的设置qr(0)=s。然后,随机选择多项式qR上的 dR个其它节点。对任意节点x,设置qx(0)=qparent(x)(index(x)),然后选择dx个随机节点 来完全定义qx。令Y为树上的叶子节点集合。
当内容拥有者加密消息M,内容拥有者构造访问控制结构树使用授权者的公共参数 来加密消息:
(3)解密密钥产生
输入:系统的公共参数,授权者的公共/秘密参数,内容申请者公钥及属性,属性集S。
输出:解密密钥。
算法描述:
内容申请者j具有属性集S上的一组属性,向授权者申请解密密钥,授权者生成内容申 请者j的解密密钥过程如下描述。
对于该解密密钥表达式中具有以下特点之一的表达式,对于该表达式中所有以g为底数 的部分,用替代g到原算法中的解密密钥表达式中进行计算,结果为αj被增加为g的指数的 一个乘数:
(Ⅰ)该表达式为g(α+r)·Y;其中,α为授权者的秘密参数,Y表示指数的其余部分,r为 针对该解密秘钥生成而产生的随机秘密数。
(Ⅱ)对于其它所有包含(Ⅰ)描述的随机数r的表达式。
具体的,解密密钥产生算法选择随机数然后计算解密密钥为:
<math> <mrow> <msub> <mi>DK</mi> <mi>j</mi> </msub> <mo>=</mo> <mrow> <mo>(</mo> <mi>D</mi> <mo>=</mo> <msup> <mi>g</mi> <mfrac> <mrow> <msub> <mi>α</mi> <mi>j</mi> </msub> <mrow> <mo>(</mo> <mi>α</mi> <mo>+</mo> <mi>r</mi> <mo>)</mo> </mrow> </mrow> <mi>β</mi> </mfrac> </msup> <mo>,</mo> <mo>∀</mo> <mi>k</mi> <mo>∈</mo> <mi>S</mi> <mo>:</mo> <msub> <mi>D</mi> <mi>k</mi> </msub> <mo>=</mo> <msup> <mi>g</mi> <mrow> <msub> <mi>α</mi> <mi>j</mi> </msub> <mi>r</mi> </mrow> </msup> <mo>·</mo> <mi>H</mi> <msup> <mrow> <mo>(</mo> <mi>k</mi> <mo>)</mo> </mrow> <msub> <mi>r</mi> <mi>k</mi> </msub> </msup> <mo>,</mo> <msubsup> <mi>D</mi> <mi>j</mi> <mo>′</mo> </msubsup> <mo>=</mo> <msup> <mi>g</mi> <msub> <mi>r</mi> <mi>k</mi> </msub> </msup> <mo>)</mo> </mrow> </mrow> </math>
授权者将解密密钥发送给内容申请者。
(4)消息解密
输入:密文CT,系统的公共参数,授权者的公共参数,内容申请者的解密密钥DKj,内容 申请者的私钥αj;
输出:消息M
算法描述:
此消息解密算法没有准备阶段,因此分为第1阶段和第2阶段。
第1阶段:
内容申请者可选择是否将第1阶段的计算外包给第三方。如果内容申请者选择将第1阶 段的计算外包给第三方,则第三方通过网络获取密文CT。内容申请者将解密密钥发送给第三 方。第三方使用内容申请者的解密密钥进行第1阶段的解密计算,生成中间结果,并把中间 结果发送给内容申请者。如果内容申请者不选择将第1阶段的计算外包给第三方,则内容申 请者通过网络获取密文CT,使用解密密钥,完成第1阶段的计算。
具体的计算过程为:
首先定义递归的过程DecryptNode(CT,DKj,x),x是访问控制结构树的一个节点。该 过程以输入密文CT,解密密钥DKj,x作为输入参数,该过程计算过程为:
<math> <mfenced open='' close=''> <mtable> <mtr> <mtd> <mi>DecryptNode</mi> <mrow> <mo>(</mo> <mi>CT</mi> <mo>,</mo> <msub> <mi>DK</mi> <mi>j</mi> </msub> <mo>,</mo> <mi>x</mi> <mo>)</mo> </mrow> <mo>=</mo> <mfrac> <mrow> <mi>e</mi> <mrow> <mo>(</mo> <msub> <mi>D</mi> <mi>k</mi> </msub> <mo>,</mo> <msub> <mi>C</mi> <mi>x</mi> </msub> <mo>)</mo> </mrow> </mrow> <mrow> <mi>e</mi> <mrow> <mo>(</mo> <msubsup> <mi>D</mi> <mi>k</mi> <mo>′</mo> </msubsup> <mo>,</mo> <msubsup> <mi>C</mi> <mi>x</mi> <mo>′</mo> </msubsup> <mo>)</mo> </mrow> </mrow> </mfrac> <mo>=</mo> <mfrac> <mrow> <mi>e</mi> <mrow> <mo>(</mo> <msup> <mi>g</mi> <mrow> <msub> <mi>α</mi> <mi>j</mi> </msub> <mi>r</mi> </mrow> </msup> <mo>·</mo> <mi>H</mi> <msup> <mrow> <mo>(</mo> <mi>k</mi> <mo>)</mo> </mrow> <msub> <mi>r</mi> <mi>k</mi> </msub> </msup> <mo>,</mo> <msup> <mi>g</mi> <mrow> <msub> <mi>q</mi> <mi>x</mi> </msub> <mrow> <mo>(</mo> <mn>0</mn> <mo>)</mo> </mrow> </mrow> </msup> <mo>)</mo> </mrow> </mrow> <mrow> <mi>e</mi> <mrow> <mo>(</mo> <msup> <mi>g</mi> <msub> <mi>r</mi> <mi>k</mi> </msub> </msup> <mo>,</mo> <mi>H</mi> <msup> <mrow> <mo>(</mo> <mi>k</mi> <mo>)</mo> </mrow> <mrow> <msub> <mi>q</mi> <mi>x</mi> </msub> <mrow> <mo>(</mo> <mn>0</mn> <mo>)</mo> </mrow> </mrow> </msup> <mo>)</mo> </mrow> </mrow> </mfrac> </mtd> </mtr> <mtr> <mtd> <mo>=</mo> <mfrac> <mrow> <mi>e</mi> <mrow> <mo>(</mo> <msup> <mi>g</mi> <mrow> <msub> <mi>α</mi> <mi>j</mi> </msub> <mi>r</mi> </mrow> </msup> <mo>,</mo> <msup> <mi>g</mi> <mrow> <msub> <mi>q</mi> <mi>x</mi> </msub> <mrow> <mo>(</mo> <mn>0</mn> <mo>)</mo> </mrow> </mrow> </msup> <mo>)</mo> <mi>e</mi> <mrow> <mo>(</mo> <mi>H</mi> <msup> <mrow> <mo>(</mo> <mi>k</mi> <mo>)</mo> </mrow> <msub> <mi>r</mi> <mi>k</mi> </msub> </msup> <mo>,</mo> <msup> <mi>g</mi> <mrow> <msub> <mi>q</mi> <mi>x</mi> </msub> <mrow> <mo>(</mo> <mn>0</mn> <mo>)</mo> </mrow> </mrow> </msup> <mo>)</mo> </mrow> </mrow> </mrow> <mrow> <mi>e</mi> <mrow> <mo>(</mo> <msup> <mi>g</mi> <msub> <mi>r</mi> <mi>k</mi> </msub> </msup> <mo>,</mo> <mi>H</mi> <msup> <mrow> <mo>(</mo> <mi>k</mi> <mo>)</mo> </mrow> <mrow> <msub> <mi>q</mi> <mi>x</mi> </msub> <mrow> <mo>(</mo> <mn>0</mn> <mo>)</mo> </mrow> </mrow> </msup> <mo>)</mo> </mrow> </mrow> </mfrac> <mo>=</mo> <mi>e</mi> <msup> <mrow> <mo>(</mo> <mi>g</mi> <mo>,</mo> <mi>g</mi> <mo>)</mo> </mrow> <mrow> <msub> <mi>α</mi> <mi>j</mi> </msub> <mi>r</mi> <msub> <mi>q</mi> <mi>x</mi> </msub> <mrow> <mo>(</mo> <mn>0</mn> <mo>)</mo> </mrow> </mrow> </msup> </mtd> </mtr> </mtable> </mfenced> </math>
如果节点x是访问控制结构树的一个叶子节点,k=att(x),如果k∈S,则
<math> <mfenced open='' close=''> <mtable> <mtr> <mtd> <mi>DecryptNode</mi> <mrow> <mo>(</mo> <mi>CT</mi> <mo>,</mo> <msub> <mi>DK</mi> <mi>j</mi> </msub> <mo>,</mo> <mi>x</mi> <mo>)</mo> </mrow> <mo>=</mo> <mfrac> <mrow> <mi>e</mi> <mrow> <mo>(</mo> <msub> <mi>D</mi> <mi>k</mi> </msub> <mo>,</mo> <msub> <mi>C</mi> <mi>x</mi> </msub> <mo>)</mo> </mrow> </mrow> <mrow> <mi>e</mi> <mrow> <mo>(</mo> <msubsup> <mi>D</mi> <mi>k</mi> <mo>′</mo> </msubsup> <mo>,</mo> <msubsup> <mi>C</mi> <mi>x</mi> <mo>′</mo> </msubsup> <mo>)</mo> </mrow> </mrow> </mfrac> <mo>=</mo> <mfrac> <mrow> <mi>e</mi> <mrow> <mo>(</mo> <msup> <mi>g</mi> <mrow> <msub> <mi>α</mi> <mi>j</mi> </msub> <mi>r</mi> </mrow> </msup> <mo>·</mo> <mi>H</mi> <msup> <mrow> <mo>(</mo> <mi>k</mi> <mo>)</mo> </mrow> <msub> <mi>r</mi> <mi>k</mi> </msub> </msup> <mo>,</mo> <msup> <mi>g</mi> <mrow> <msub> <mi>q</mi> <mi>x</mi> </msub> <mrow> <mo>(</mo> <mn>0</mn> <mo>)</mo> </mrow> </mrow> </msup> <mo>)</mo> </mrow> </mrow> <mrow> <mi>e</mi> <mrow> <mo>(</mo> <msup> <mi>g</mi> <msub> <mi>r</mi> <mi>k</mi> </msub> </msup> <mo>,</mo> <mi>H</mi> <msup> <mrow> <mo>(</mo> <mi>k</mi> <mo>)</mo> </mrow> <mrow> <msub> <mi>q</mi> <mi>x</mi> </msub> <mrow> <mo>(</mo> <mn>0</mn> <mo>)</mo> </mrow> </mrow> </msup> <mo>)</mo> </mrow> </mrow> </mfrac> </mtd> </mtr> <mtr> <mtd> <mo>=</mo> <mfrac> <mrow> <mi>e</mi> <mrow> <mo>(</mo> <msup> <mi>g</mi> <mrow> <msub> <mi>α</mi> <mi>j</mi> </msub> <mi>r</mi> </mrow> </msup> <mo>,</mo> <msup> <mi>g</mi> <mrow> <msub> <mi>q</mi> <mi>x</mi> </msub> <mrow> <mo>(</mo> <mn>0</mn> <mo>)</mo> </mrow> </mrow> </msup> <mo>)</mo> <mi>e</mi> <mrow> <mo>(</mo> <mi>H</mi> <msup> <mrow> <mo>(</mo> <mi>k</mi> <mo>)</mo> </mrow> <msub> <mi>r</mi> <mi>k</mi> </msub> </msup> <mo>,</mo> <msup> <mi>g</mi> <mrow> <msub> <mi>q</mi> <mi>x</mi> </msub> <mrow> <mo>(</mo> <mn>0</mn> <mo>)</mo> </mrow> </mrow> </msup> <mo>)</mo> </mrow> </mrow> </mrow> <mrow> <mi>e</mi> <mrow> <mo>(</mo> <msup> <mi>g</mi> <msub> <mi>r</mi> <mi>k</mi> </msub> </msup> <mo>,</mo> <mi>H</mi> <msup> <mrow> <mo>(</mo> <mi>k</mi> <mo>)</mo> </mrow> <mrow> <msub> <mi>q</mi> <mi>x</mi> </msub> <mrow> <mo>(</mo> <mn>0</mn> <mo>)</mo> </mrow> </mrow> </msup> <mo>)</mo> </mrow> </mrow> </mfrac> <mo>=</mo> <mi>e</mi> <msup> <mrow> <mo>(</mo> <mi>g</mi> <mo>,</mo> <mi>g</mi> <mo>)</mo> </mrow> <mrow> <msub> <mi>α</mi> <mi>j</mi> </msub> <mi>r</mi> <msub> <mi>q</mi> <mi>x</mi> </msub> <mrow> <mo>(</mo> <mn>0</mn> <mo>)</mo> </mrow> </mrow> </msup> </mtd> </mtr> </mtable> </mfenced> </math>
如果x是一个非叶子节点,则采用一个递归过程DecryptNode(CT,DKj,x):
对x的所有叶子节点,调用DecryptNode(CT,DKj,z),结果为Fz。令Sx为任意有kx个孩 子节点z的集合,对每个z,Fz≠⊥。如果没有这样的集合存在,则功能返回⊥。
否则,计算如下:
<math> <mrow> <msub> <mi>F</mi> <mi>x</mi> </msub> <mo>=</mo> <msub> <mi>Π</mi> <mrow> <mi>z</mi> <mo>∈</mo> <msub> <mi>S</mi> <mi>x</mi> </msub> </mrow> </msub> <msup> <msub> <mi>F</mi> <mi>z</mi> </msub> <mrow> <msub> <mi>Δ</mi> <msubsup> <mrow> <mi>i</mi> <mo>,</mo> <mi>S</mi> </mrow> <mi>x</mi> <mo>′</mo> </msubsup> </msub> <mrow> <mo>(</mo> <mi>o</mi> <mo>)</mo> </mrow> </mrow> </msup> <mo>,</mo> </mrow> </math>
其中i=index(x),S′x={index(z):z∈Sx}
<math> <mrow> <mo>=</mo> <munder> <mi>Π</mi> <mrow> <mi>z</mi> <mo>∈</mo> <msub> <mi>S</mi> <mi>x</mi> </msub> </mrow> </munder> <msup> <mrow> <mo>(</mo> <mi>e</mi> <msup> <mrow> <mo>(</mo> <mi>g</mi> <mo>,</mo> <mi>g</mi> <mo>)</mo> </mrow> <mrow> <msub> <mi>α</mi> <mi>j</mi> </msub> <mo>·</mo> <mi>r</mi> <msub> <mi>q</mi> <mi>z</mi> </msub> <mrow> <mo>(</mo> <mn>0</mn> <mo>)</mo> </mrow> </mrow> </msup> <mo>)</mo> </mrow> <mrow> <msub> <mi>Δ</mi> <msubsup> <mrow> <mi>i</mi> <mo>,</mo> <mi>S</mi> </mrow> <mi>x</mi> <mo>′</mo> </msubsup> </msub> <mrow> <mo>(</mo> <mi>o</mi> <mo>)</mo> </mrow> </mrow> </msup> </mrow> </math>
<math> <mrow> <mo>=</mo> <munder> <mi>Π</mi> <mrow> <mi>z</mi> <mo>∈</mo> <msub> <mi>S</mi> <mi>x</mi> </msub> </mrow> </munder> <msup> <mrow> <mo>(</mo> <mi>e</mi> <msup> <mrow> <mo>(</mo> <mi>g</mi> <mo>,</mo> <mi>g</mi> <mo>)</mo> </mrow> <mrow> <msub> <mi>α</mi> <mi>j</mi> </msub> <mi>r</mi> <mo>·</mo> <msub> <mi>q</mi> <mrow> <mi>parent</mi> <mrow> <mo>(</mo> <mi>z</mi> <mo>)</mo> </mrow> </mrow> </msub> <mrow> <mo>(</mo> <mi>index</mi> <mrow> <mo>(</mo> <mi>z</mi> <mo>)</mo> </mrow> <mo>)</mo> </mrow> </mrow> </msup> <mo>)</mo> </mrow> <mrow> <msub> <mi>Δ</mi> <msubsup> <mrow> <mi>i</mi> <mo>,</mo> <mi>S</mi> </mrow> <mi>x</mi> <mo>′</mo> </msubsup> </msub> <mrow> <mo>(</mo> <mi>o</mi> <mo>)</mo> </mrow> </mrow> </msup> </mrow> </math>
<math> <mrow> <mo>=</mo> <munder> <mi>Π</mi> <mrow> <mi>z</mi> <mo>∈</mo> <msub> <mi>S</mi> <mi>x</mi> </msub> </mrow> </munder> <msup> <mrow> <mo>(</mo> <mi>e</mi> <msup> <mrow> <mo>(</mo> <mi>g</mi> <mo>,</mo> <mi>g</mi> <mo>)</mo> </mrow> <mrow> <msub> <mi>α</mi> <mi>j</mi> </msub> <mi>r</mi> <mo>·</mo> <msub> <mi>q</mi> <mi>x</mi> </msub> <mrow> <mo>(</mo> <mi>i</mi> <mo>)</mo> </mrow> </mrow> </msup> <mo>)</mo> </mrow> <mrow> <msub> <mi>Δ</mi> <msubsup> <mrow> <mi>i</mi> <mo>,</mo> <mi>S</mi> </mrow> <mi>x</mi> <mo>′</mo> </msubsup> </msub> <mrow> <mo>(</mo> <mi>o</mi> <mo>)</mo> </mrow> </mrow> </msup> <mo>=</mo> <msup> <mrow> <mi>e</mi> <mrow> <mo>(</mo> <mi>g</mi> <mo>,</mo> <mi>g</mi> <mo>)</mo> </mrow> </mrow> <mrow> <msub> <mi>α</mi> <mi>j</mi> </msub> <mi>r</mi> <mo>·</mo> <msub> <mi>q</mi> <mi>x</mi> </msub> <mrow> <mo>(</mo> <mn>0</mn> <mo>)</mo> </mrow> </mrow> </msup> </mrow> </math>
如上,已定义节点的解密功能。解密算法调用根节点的解密功能。如果S符合访问结构树, 则可得到
<math> <mrow> <mi>A</mi> <mo>=</mo> <mi>DecryptNode</mi> <mrow> <mo>(</mo> <mi>CT</mi> <mo>,</mo> <msub> <mi>DK</mi> <mi>j</mi> </msub> <mo>)</mo> </mrow> <mo>=</mo> <mi>e</mi> <msup> <mrow> <mo>(</mo> <mi>g</mi> <mo>,</mo> <mi>g</mi> <mo>)</mo> </mrow> <mrow> <msub> <mi>α</mi> <mi>j</mi> </msub> <mi>r</mi> <mo>·</mo> <msub> <mi>q</mi> <mi>R</mi> </msub> <mrow> <mo>(</mo> <mn>0</mn> <mo>)</mo> </mrow> </mrow> </msup> <mo>=</mo> <mi>e</mi> <msup> <mrow> <mo>(</mo> <mi>g</mi> <mo>,</mo> <mi>g</mi> <mo>)</mo> </mrow> <mrow> <msub> <mi>α</mi> <mi>j</mi> </msub> <mi>r</mi> <mo>·</mo> <mi>s</mi> </mrow> </msup> <mo>.</mo> </mrow> </math>
如果该第1阶段为第三方计算,则第三方计算出中间结果并发送给内容申请 者。
第2阶段:
内容申请者j使用自己的私钥和部分解密密钥计算出M:
<math> <mrow> <mfrac> <mover> <mi>C</mi> <mo>~</mo> </mover> <msup> <mrow> <mo>(</mo> <mi>e</mi> <mrow> <mo>(</mo> <mi>C</mi> <mo>,</mo> <mi>D</mi> <mo>)</mo> </mrow> <mo>/</mo> <mi>A</mi> <mo>)</mo> </mrow> <mfrac> <mn>1</mn> <msub> <mi>α</mi> <mi>j</mi> </msub> </mfrac> </msup> </mfrac> <mo>=</mo> <mfrac> <mrow> <mi>Me</mi> <msup> <mrow> <mo>(</mo> <mi>g</mi> <mo>,</mo> <mi>g</mi> <mo>)</mo> </mrow> <mi>αs</mi> </msup> </mrow> <msup> <mrow> <mo>(</mo> <mi>e</mi> <mrow> <mo>(</mo> <msup> <mi>h</mi> <mi>s</mi> </msup> <mo>,</mo> <msup> <mi>g</mi> <mfrac> <mrow> <msub> <mi>α</mi> <mi>j</mi> </msub> <mrow> <mo>(</mo> <mi>α</mi> <mo>+</mo> <mi>r</mi> <mo>)</mo> </mrow> </mrow> <mi>β</mi> </mfrac> </msup> <mo>)</mo> </mrow> <mo>/</mo> <mrow> <mo>(</mo> <mi>e</mi> <msup> <mrow> <mo>(</mo> <mi>g</mi> <mo>,</mo> <mi>g</mi> <mo>)</mo> </mrow> <mrow> <msub> <mi>α</mi> <mi>j</mi> </msub> <mi>r</mi> <mo>·</mo> <mi>s</mi> </mrow> </msup> <mo>)</mo> </mrow> <mo>)</mo> </mrow> <mfrac> <mn>1</mn> <msub> <mi>α</mi> <mi>j</mi> </msub> </mfrac> </msup> </mfrac> <mo>=</mo> <mfrac> <mrow> <mi>Me</mi> <msup> <mrow> <mo>(</mo> <mi>g</mi> <mo>,</mo> <mi>g</mi> <mo>)</mo> </mrow> <mrow> <mrow> <mo>(</mo> <mi>α</mi> <mo>+</mo> <mi>r</mi> <mo>)</mo> </mrow> <mi>s</mi> </mrow> </msup> </mrow> <mrow> <mi>e</mi> <msup> <mrow> <mo>(</mo> <mi>g</mi> <mo>,</mo> <mi>g</mi> <mo>)</mo> </mrow> <mrow> <mrow> <mo>(</mo> <mi>α</mi> <mo>+</mo> <mi>r</mi> <mo>)</mo> </mrow> <mi>s</mi> </mrow> </msup> </mrow> </mfrac> <mo>=</mo> <mi>M</mi> </mrow> </math>
2.对文献“Allison Lewko,Tatsuaki Okamoto,Amit Sahai,Katsuyuki Takashima,Brent Waters. fully secure functional encryption attribute based encryption and(hierarchical)inner product encryption,Advances in Cryptology–EUROCRYPT2010,Lecture Notes in Computer Science Volume6110,2010,pp62-91”算法的改造:
改造后的算法如下:
(1)建立
输入:安全参数λ
输出:系统的公共参数,内容申请者公私钥,授权者的公共/秘密参数
算法描述:
选择一个双线性G,阶为N=p1p2p3(p1,p2,p3为3个不同的质数)。令表示G的一 个阶为pi的子。g为的一个生成元。系统的公共参数为N,G,g。
每个内容申请者j选择一个在整数集上的一个随机的指数αj作为自己的私钥,相应的 公钥为
授权者选择一个随机指数α∈ZN作为自己的秘密参数,授权者进一步选择β∈ZN及上的一个生成元X3作为自己的秘密参数。属性集上S为包含所有属性的集合。对于属性集上 S的每个属性,选择一个随机的si∈ZN作为秘密参数。授权者的公共参数包括: gα,e(g,g)β,
<math> <mrow> <msub> <mi>T</mi> <mi>i</mi> </msub> <mo>=</mo> <msup> <mi>g</mi> <msub> <mi>s</mi> <mi>i</mi> </msub> </msup> <mo>∀</mo> <mi>i</mi> <mo>.</mo> </mrow> </math>
(2)消息加密
输入:消息M,系统的公共参数,授权者的公共/秘密参数
输出:密文CT
算法描述:
A是一个l×n的矩阵,ρ为矩阵的每行Ax到属性ρ(x)的一个映射。消息加密算法选择 一个上的随机向量v=(s,v2,...,vn)。对于A上的每行Ax,选择一个随机数
内容拥有者加密消息M,生成密文如下:
C=Me(g,g)αs,C′=gs,
<math> <mrow> <msub> <mi>C</mi> <mi>x</mi> </msub> <mo>=</mo> <msup> <mi>g</mi> <mrow> <mi>β</mi> <msub> <mi>A</mi> <mi>x</mi> </msub> <mo>,</mo> <mi>v</mi> </mrow> </msup> <msubsup> <mi>T</mi> <mrow> <mi>ρ</mi> <mrow> <mo>(</mo> <mi>x</mi> <mo>)</mo> </mrow> </mrow> <mrow> <mo>-</mo> <msub> <mi>r</mi> <mi>x</mi> </msub> </mrow> </msubsup> <mo>,</mo> </mrow> </math>
<math> <mrow> <msub> <mi>D</mi> <mi>x</mi> </msub> <mo>=</mo> <msup> <mi>g</mi> <msub> <mi>r</mi> <mi>x</mi> </msub> </msup> <mo>∀</mo> <mi>x</mi> <mo>.</mo> </mrow> </math>
(3)解密密钥生成
输入:系统的公共参数,授权者的公共/秘密参数,内容申请者公钥及属性,属性集S。
输出:解密密钥。
算法描述:当内容申请者j拥有一组属性组成集合S,授权者生成内容申请者j的解密密 钥。对于原算法的解密密钥表达式中所有以g为底数的部分,用 替代g到原算法中的解密密钥表达式中进行计算,结果表现为αj被增加为g的指数的一个 乘数,具体如下:
解密密钥生成算法选择随机的t∈ZN,和上的随机元素R0,R′,Ri,计算解密密钥为:
<math> <mrow> <msub> <mi>DK</mi> <mi>j</mi> </msub> <mo>=</mo> <mrow> <mo>(</mo> <msub> <mi>K</mi> <mi>j</mi> </msub> <mo>=</mo> <msup> <mi>g</mi> <mrow> <msub> <mi>α</mi> <mi>j</mi> </msub> <mi>α</mi> </mrow> </msup> <msup> <mi>g</mi> <mrow> <msub> <mi>α</mi> <mi>j</mi> </msub> <mi>βt</mi> </mrow> </msup> <msub> <mi>R</mi> <mn>0</mn> </msub> <mo>,</mo> <msub> <mi>L</mi> <mi>j</mi> </msub> <mo>=</mo> <msup> <mi>g</mi> <mrow> <msub> <mi>α</mi> <mi>j</mi> </msub> <mi>t</mi> </mrow> </msup> <msubsup> <mi>R</mi> <mn>0</mn> <mo>′</mo> </msubsup> <mo>,</mo> <msub> <mi>K</mi> <mi>ji</mi> </msub> <mo>=</mo> <msup> <mi>g</mi> <mrow> <msub> <mi>α</mi> <mi>j</mi> </msub> <msub> <mi>s</mi> <mi>k</mi> </msub> <mi>t</mi> </mrow> </msup> <msub> <mi>R</mi> <mi>k</mi> </msub> <mo>∀</mo> <mi>k</mi> <mo>∈</mo> <mi>S</mi> <mo>.</mo> <mo>)</mo> </mrow> </mrow> </math>
授权者将解密密钥发送给内容申请者。
(3)消息解密
输入:密文CT,系统的公共参数,授权者的公共参数,内容申请者的解密密钥DKj,内容 申请者的私钥αj。
输出:消息M
算法描述:
此消息解密算法没有准备阶段,因此分为第1阶段和第2阶段。
第1阶段:
内容申请者可选择是否将第1阶段的计算外包给第三方。如果内容申请者选择将第1阶 段的计算外包给第三方,则第三方通过网络获取密文CT。内容申请者将解密密钥发送给第三 方。第三方使用内容申请者的解密密钥进行第1阶段的解密计算,生成中间结果,并把中间 结果发送给内容申请者。如果内容申请者不选择将第1阶段的计算外包给第三方,则内容申 请者通过网络获取密文CT,使用解密密钥,完成第1阶段的计算。
具体的计算过程为:
计算出常量ωx∈ZN使得∑ρ(x)∈SωxAx=(1,0,...,0).然后计算:
<math> <mrow> <mi>e</mi> <mrow> <mo>(</mo> <msup> <mi>C</mi> <mo>′</mo> </msup> <mo>,</mo> <msub> <mi>K</mi> <mi>j</mi> </msub> <mo>)</mo> </mrow> <mo>/</mo> <msub> <mi>Π</mi> <mrow> <mi>ρ</mi> <mrow> <mo>(</mo> <mi>x</mi> <mo>)</mo> </mrow> <mo>∈</mo> <mi>S</mi> </mrow> </msub> <msup> <mrow> <mo>(</mo> <mi>e</mi> <mrow> <mo>(</mo> <msub> <mi>C</mi> <mi>x</mi> </msub> <mo>,</mo> <msub> <mi>L</mi> <mi>j</mi> </msub> <mo>)</mo> </mrow> <mi>e</mi> <mrow> <mo>(</mo> <msub> <mi>D</mi> <mi>x</mi> </msub> <mo>,</mo> <msub> <mi>K</mi> <mrow> <mi>jρ</mi> <mrow> <mo>(</mo> <mi>x</mi> <mo>)</mo> </mrow> </mrow> </msub> <mo>)</mo> </mrow> <mo>)</mo> </mrow> <msub> <mi>ω</mi> <mi>x</mi> </msub> </msup> <mo>=</mo> <mi>e</mi> <msup> <mrow> <mo>(</mo> <mi>g</mi> <mo>,</mo> <mi>g</mi> <mo>)</mo> </mrow> <mrow> <msub> <mi>α</mi> <mi>j</mi> </msub> <mi>αs</mi> </mrow> </msup> <mo>.</mo> </mrow> </math>
如果该第1阶段为第三方计算,则第三方计算出中间结果并发送给内容申请 者。
第2阶段:内容申请者j使用自己的私钥αj计算出M:
<math> <mrow> <mi>M</mi> <mo>=</mo> <mfrac> <mi>C</mi> <msup> <mrow> <mo>(</mo> <mi>e</mi> <msup> <mrow> <mo>(</mo> <mi>g</mi> <mo>,</mo> <mi>g</mi> <mo>)</mo> </mrow> <mrow> <msub> <mi>α</mi> <mi>j</mi> </msub> <mi>αs</mi> </mrow> </msup> <mo>)</mo> </mrow> <mrow> <mn>1</mn> <mo>/</mo> <msub> <mi>α</mi> <mi>j</mi> </msub> </mrow> </msup> </mfrac> </mrow> </math>
3.对文献“A.Lewko and B.Waters,Decentralizing attribute-based encryption,Advances in Cryptology CEUROCRYPT2011,pp.568-588.”中算法的改造
改造后算法为:
(1)建立算法:
输入:参数λ
输出:系统的公共参数,内容申请者公私钥,授权者的公共/秘密参数
算法描述:
选择一个阶为N=p1p2p3(p1,p2,p3为3个互不相同的素数)的双线性G,g1是的一个生成元。哈希函数H:{0,1}*→G将全局的身份GID映射为G上的元素。系统的公 共参数为:N,g1,H
每个内容申请者者选择一个随机的指数αj作为自己的私钥,相应的公钥为
授权者i选择一个随机的指数αi作为自己的秘密参数,授权者i负责对某项属性i授权, 则选择一个随机指数yi∈ZN作为秘密参数。授权者的公共参数为:
(2)消息加密:
输入:消息M,一个n×l的访问矩阵A,将矩阵A的行映射到属性的函数ρ,系统及 授权者的公共参数
输出:密文CT
算法描述:
消息加密算法选择一个随机s∈ZN和一个随机向量s为v的第一个数。令λx表 示Ax·v,Ax为A的第x行。然后选择一个随机的第一个数为0的向量令ωx表示Ax·ω。 对A的每一行Ax,选择一个随机数rx∈ZN,计算密文CT为:
C0=Me(g1,g1)s,
<math> <mrow> <msub> <mi>C</mi> <mrow> <mn>1</mn> <mo>,</mo> <mi>x</mi> </mrow> </msub> <mo>=</mo> <mi>e</mi> <msup> <mrow> <mo>(</mo> <msub> <mi>g</mi> <mn>1</mn> </msub> <mo>,</mo> <msub> <mi>g</mi> <mn>1</mn> </msub> <mo>)</mo> </mrow> <msub> <mi>λ</mi> <mi>x</mi> </msub> </msup> <mi>e</mi> <msup> <mrow> <mo>(</mo> <msub> <mi>g</mi> <mn>1</mn> </msub> <mo>,</mo> <msub> <mi>g</mi> <mn>1</mn> </msub> <mo>)</mo> </mrow> <mrow> <msub> <mi>α</mi> <mrow> <mi>ρ</mi> <mrow> <mo>(</mo> <mi>x</mi> <mo>)</mo> </mrow> </mrow> </msub> <mo></mo> <msub> <mi>r</mi> <mi>x</mi> </msub> </mrow> </msup> <mo>,</mo> </mrow> </math>
<math> <mrow> <msub> <mi>C</mi> <mrow> <mn>2</mn> <mo>,</mo> <mi>x</mi> </mrow> </msub> <mo>=</mo> <msubsup> <mi>g</mi> <mn>1</mn> <msub> <mi>r</mi> <mi>x</mi> </msub> </msubsup> <mo>,</mo> </mrow> </math>
<math> <mrow> <msub> <mi>C</mi> <mrow> <mn>3</mn> <mo>,</mo> <mi>x</mi> </mrow> </msub> <mo>=</mo> <msubsup> <mi>g</mi> <mn>1</mn> <mrow> <msub> <mi>y</mi> <mrow> <mi>ρ</mi> <mrow> <mo>(</mo> <mi>x</mi> <mo>)</mo> </mrow> </mrow> </msub> <msub> <mi>r</mi> <mi>x</mi> </msub> </mrow> </msubsup> <msubsup> <mi>g</mi> <mn>1</mn> <msub> <mi>ω</mi> <mi>x</mi> </msub> </msubsup> <mo>∀</mo> <mi>x</mi> </mrow> </math>
(3)解密密钥生成算法:
输入:内容申请者j公钥和属性k,系统和授权者的公共参数,授权者的秘密参数
输出:申请者j的解密密钥
算法描述:
内容申请者j向授权者i申请属性k的解密密钥,授权者计算解密密钥。对于原算法的 解密密钥表达式中所有以g1为底数的部分,用 替代g1到原算法中的解密密钥表达式中进行计算,结果表现为αj被增加为g1的指数的一 个乘数,具体为:
<math> <mrow> <msub> <mi>K</mi> <mrow> <mi>j</mi> <mo>,</mo> <mi>k</mi> </mrow> </msub> <mo>=</mo> <msup> <msub> <mi>g</mi> <mn>1</mn> </msub> <mrow> <msub> <mi>α</mi> <mi>j</mi> </msub> <msub> <mi>α</mi> <mi>k</mi> </msub> </mrow> </msup> <mi>H</mi> <msup> <mrow> <mo>(</mo> <mi>GID</mi> <mo>)</mo> </mrow> <msub> <mi>y</mi> <mi>k</mi> </msub> </msup> </mrow> </math>
授权者将解密密钥发送给内容申请者。
(4)消息解密算法
输入:密文,内容申请者的解密密钥Kj,系统和授权者的公共参数;
输出:消息M;
算法描述:
此消息解密算法包含准备阶段,解密过程分为第1阶段和第2阶段。
准备阶段:内容申请者j使用自己的私钥对密文CT中的C1,x进行计算得到:
<math> <mrow> <msubsup> <mi>C</mi> <mrow> <mn>1</mn> <mo>,</mo> <mi>x</mi> </mrow> <mo>′</mo> </msubsup> <mo>=</mo> <mi>e</mi> <msup> <mrow> <mo>(</mo> <msup> <mrow> <mo>(</mo> <msub> <mi>g</mi> <mn>1</mn> </msub> <mo>,</mo> <msub> <mi>g</mi> <mn>1</mn> </msub> <mo>)</mo> </mrow> <msub> <mi>λ</mi> <mi>x</mi> </msub> </msup> <mi>e</mi> <msup> <mrow> <mo>(</mo> <msub> <mi>g</mi> <mn>1</mn> </msub> <mo>,</mo> <msub> <mi>g</mi> <mn>1</mn> </msub> <mo>)</mo> </mrow> <mrow> <msub> <mi>α</mi> <mrow> <mi>ρ</mi> <mrow> <mo>(</mo> <mi>x</mi> <mo>)</mo> </mrow> </mrow> </msub> <msub> <mi>r</mi> <mi>x</mi> </msub> </mrow> </msup> <mo>)</mo> </mrow> <msub> <mi>α</mi> <mi>j</mi> </msub> </msup> <mo>∀</mo> <mi>x</mi> </mrow> </math>
第1阶段:
内容申请者可选择是否将第1阶段的计算外包给第三方。如果内容申请者选择将第1阶 段的计算外包给第三方,则第三方通过网络获取密文CT。内容申请者将解密密钥发送给第三 方。第三方使用内容申请者的解密密钥进行第1阶段的解密计算,生成中间结果,并把中间 结果发送给内容申请者。如果内容申请者不选择将第1阶段的计算外包给第三方,则内容申 请者通过网络获取密文CT,使用解密密钥,完成第1阶段的计算。
具体的计算过程为:
对每个属性x,计算:
<math> <mrow> <msubsup> <mi>C</mi> <mrow> <mn>1</mn> <mo>,</mo> <mi>x</mi> </mrow> <mo>′</mo> </msubsup> <mo>·</mo> <mfrac> <mrow> <mi>e</mi> <mrow> <mo>(</mo> <mi>H</mi> <mrow> <mo>(</mo> <mi>GID</mi> <mo>)</mo> </mrow> <mo>,</mo> <msub> <mi>C</mi> <mrow> <mn>3</mn> <mo>,</mo> <mi>x</mi> </mrow> </msub> <mo>)</mo> </mrow> </mrow> <mrow> <mi>e</mi> <mrow> <mo>(</mo> <msub> <mi>K</mi> <mrow> <mi>j</mi> <mo>,</mo> <mi>ρ</mi> <mrow> <mo>(</mo> <mi>x</mi> <mo>)</mo> </mrow> </mrow> </msub> <mo>,</mo> <msub> <mi>C</mi> <mrow> <mn>2</mn> <mo>,</mo> <mi>x</mi> </mrow> </msub> <mo>)</mo> </mrow> </mrow> </mfrac> <mo>=</mo> <mi>e</mi> <msup> <mrow> <mo>(</mo> <msub> <mi>g</mi> <mn>1</mn> </msub> <mo>,</mo> <msub> <mi>g</mi> <mn>1</mn> </msub> <mo>)</mo> </mrow> <mrow> <msub> <mi>α</mi> <mi>j</mi> </msub> <msub> <mi>λ</mi> <mi>x</mi> </msub> </mrow> </msup> <mi>e</mi> <msup> <mrow> <mo>(</mo> <mi>H</mi> <mrow> <mo>(</mo> <mi>GID</mi> <mo>)</mo> </mrow> <mo>,</mo> <msub> <mi>g</mi> <mn>1</mn> </msub> <mo>)</mo> </mrow> <msub> <mi>ω</mi> <mi>x</mi> </msub> </msup> <mo>∀</mo> <mi>x</mi> <mo>.</mo> </mrow> </math>
然后选择常量cx∈ZN使得∑xcxAx=(1,0,...,0),并计算:
<math> <mrow> <msub> <mi>Π</mi> <mi>x</mi> </msub> <mi>e</mi> <msup> <mrow> <mo>(</mo> <msup> <mrow> <mo>(</mo> <msub> <mi>g</mi> <mn>1</mn> </msub> <mo>,</mo> <msub> <mi>g</mi> <mn>1</mn> </msub> <mo>)</mo> </mrow> <mrow> <msub> <mi>α</mi> <mi>j</mi> </msub> <msub> <mi>λ</mi> <mi>x</mi> </msub> </mrow> </msup> <mi>e</mi> <msup> <mrow> <mo>(</mo> <mi>H</mi> <mrow> <mo>(</mo> <mi>GID</mi> <mo>)</mo> </mrow> <mo>,</mo> <msub> <mi>g</mi> <mn>1</mn> </msub> <mo>)</mo> </mrow> <msub> <mi>ω</mi> <mi>x</mi> </msub> </msup> <mo>)</mo> </mrow> <msub> <mi>c</mi> <mi>x</mi> </msub> </msup> <mo>=</mo> <mi>e</mi> <msup> <mrow> <mo>(</mo> <msub> <mi>g</mi> <mn>1</mn> </msub> <mo>,</mo> <msub> <mi>g</mi> <mn>1</mn> </msub> <mo>)</mo> </mrow> <mrow> <msub> <mi>α</mi> <mi>j</mi> </msub> <mi>s</mi> </mrow> </msup> <mo>.</mo> </mrow> </math>
如果该第1阶段为第三方计算,则第三方计算出中间结果并发送给内容申请 者。
第2阶段:内容申请者使用自己的私钥计算:
<math> <mrow> <mi>M</mi> <mo>=</mo> <mfrac> <msub> <mi>C</mi> <mn>0</mn> </msub> <msup> <mrow> <mo>(</mo> <mi>e</mi> <msup> <mrow> <mo>(</mo> <msub> <mi>g</mi> <mn>1</mn> </msub> <mo>,</mo> <msub> <mi>g</mi> <mn>1</mn> </msub> <mo>)</mo> </mrow> <mrow> <msub> <mi>α</mi> <mi>j</mi> </msub> <mi>s</mi> </mrow> </msup> <mo>)</mo> </mrow> <mfrac> <mn>1</mn> <msub> <mi>α</mi> <mi>j</mi> </msub> </mfrac> </msup> </mfrac> </mrow> </math>
实现SK-CP-ABE系统:
SK-CP-ABE系统的ABE功能模块运行的设备可包含服务器,台式机或智能移动终端, 或其它能运行ABE功能模块的任意计算设备;
SK-CP-ABE系统的ABE功能模块可用软件或硬件实现,或混合实现。
SK-CP-ABE系统包含除ABE功能模块外的其它必要的功能模块。
SK-CP-ABE系统可用于各种需要数据加密和访问控制的应用中。
SK-CP-ABE系统可与其它一个或多个信息系统结合,或者作为其它更大信息系统的一部 分。