Page 265 - 《软件学报》2020年第12期
P. 265

罗王平  等:一种支持快速加密的基于属性加密方案                                                         3931


                                            ⎡  1...  bc 1n ⎤
                                                    1n
             令 (M =  ρ  i )  att ( ),i M =  (M M 2 ,...,M m ) =  T  ⎢  ⎢  ... ...  ...  ⎥  ⎥  .
                                 ,
                                1
                                            ⎢  ⎣  1... bc ⎥  mn mn⎦
             故对于任意基于访问树 T 的秘密共享方案,存在一个线性秘密共享方案(M,ρ)与之等价.                                       □
             定理 5.  如果 Waters 提出的 CP-ABE 方案   [14] 达到针对性 CPA 安全,那么所提出的支持快速加密的 CP-ABE
         方案在随机预言模型下达到 RCCA 安全            [21] .
             证明:假设攻击者 A 在针对性 RCCA 安全模型中,能在多项式时间内以不可忽略的优势ε攻破本文方案,那
         么可以构造一个模拟器(或敌手)B,它同样能在针对性 CPA 安全模型中以不可忽略的优势ε攻破 Waters 的方案,
         而该方案已被证明在 decisional q-parallel BDHE 假设下是安全的.                                         □
                                                                                     *
                                                     *
             Init:模拟器 B 激活敌手 A,A 选择一个挑战访问树 T ,B 根据定理 4 及其提供的转换方法,将 T 转换成访问结
             *
               *
         构(M ,ρ )并传递给 Waters 方案的挑战者,作为其希望被挑战的访问结构.
                                                       α
                                                          a
             初始化:模拟器 B 获取 Waters 产生的公钥 PK=g,e(g,g) ,g ,{T i } i∈U ,将其作为系统公钥发送给 A.
             阶段 1:模拟器 B 初始化空表 T,T 1 ,T 2 ,一个空的集合 D,一个整数 j=0,攻击者能完成如下查询.
                                                                    *
             •   H 1 (R,M):若(R,M,s)已经在 T 1 中,返回 s;否则,选择一个随机值 s ∈   Z ,将(R,M,s)记录在 T 1 中并返回 s;
                                                                    p
                                                                  k
             •   H 2 (R):若(R,r)已经在 T 2 中,返回 r;否则,选择一个随机值 r∈{0,1} ,将(R,r)记录在 T 2 中并返回 r;
             •   Create(S):B 设定 j:=j+1,采用下面方式中的进行处理:
                                *
                 ¾   如果 S 满足 T ,则按如下方式选择一个“假”转换密钥:
                                       *
                     选择一个随机数 d ∈      Z ,运行 KeyGen((d,PK),S)获取 SK′,令 TK=SK′,SK=(d,TK);
                                       p
                                                                               , ,{L K′
                                  *
                                                                             ,
                 ¾   如果 S 不满足 T ,调用 Waters 的私钥生成算法计算 S 的私钥 SK′ =          (PK K′′   x xS∈  ) .算法选择
                                                                                     }
                                   *
                     一个随机值 z ∈    Z ,并设置转换密钥 TK 为 (PK K =   ,   K′  1/ z ,L =  L′  1/ z ,{K x xS∈  }  =  {K′  x 1/ z } x S∈  ) ,私钥为
                                   p
                     (z,TK);
                 最后,将(j,S,SK,TK)存储在 T 中,并将 TK 返回给 A;
                                                *
             •   Corrupt(i):A 不能询问任何满足访问树 T 的属性集所相对应的私钥.如果 T 中存在第 i 个元素,B 将获取
                该元素(i,S,SK,TK)并设 D:=D∪{S},将 SK 返回给 A;若不存在,则返回⊥;
             •   Decrypt(i,CT):作为输入参数的密文 CT 都已经半解密.B 和 A 知道所有私钥的转换密钥,因此两者都可
                                                            *
                以对所有密文进行半解密.设 CT=(C 0 ,C 1 ,C 2 )为访问树 T 对应的密文,从 T 中获取记录(i,S,SK,TK),若没
                                                                          *
                                   *
                有该记录或 S 不满足 T ,将返回⊥给 A.当第 i 个密钥不满足挑战访问树 T 时,按如下方式处理.
                                             z
                 1.   解析 SK=(z,TK),计算 R =  C 0  /C ;
                                             2
                 2.   从 T 1 中获取记录(R,M i ,s i ),如果该记录不存在,将⊥返回给 A;
                 3.   如在集合 T 1 中存在 y≠x,使得记录(R,M y ,s y )和(R,M x ,s x ),有 M y ≠M x ,s y =s x ,则 B 终止仿真;
                 4.   否则,获取从 T 2 中获取记录(R,r),若不存在,B 输出⊥;
                 5.   对于每个密钥 i,测试 C =  0  R e⋅  (, )g g  α  i s  ,C =  1  M ⊕  i  , r C =  2  e ( , )g g  α  i s  / z  是否成立;
                 6.   通过了上述测试,输出消息 M i ;否则,输出⊥;
                                      *
                当密钥 i 满足挑战访问树 T 时,按如下方式处理:
                 1.   解析 SK=(d,TK),计算 β = C 1/ d  ;
                                           2
                 2.   对于 T 1 中的每个(R i ,M i ,s i ),测试 β =  eg  i s  是否成立;
                                                  (, )g
                 3.   若都不成立,B 向 A 输出⊥;
                 4.   若成立的数量大于 1,则 B 终止仿真;
                 5.   否则,设(R,M,s)唯一成立,从 T 2 中获取记录(R,r),若不存在,则 B 输出⊥;
                                                   ds
                                  αs
                 6.   测试 C 0 =R⋅e(g,g) ,C 1 =M⊕r,C 2 =e(g,g) 是否成立;
                 7.   当所有测试通过时,输出 M;否则,输出⊥.
   260   261   262   263   264   265   266   267   268   269   270