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

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


         节点且由用户客户端完成计算,而其左子树的计算工作则交由 MapReduce 完成.首先,将根节点分发给左孩子节
         点的秘密值分成 N 份,针对每一份秘密值,启动一个 Map 完成左子树秘密值分发和叶子节点密文计算,而 Reduce
         针对左子树每个叶子节点,将 Map 的输出结果连乘得到最后完整的加密结果.然而该方案基于 MapReduce 集群
         的主节点和至少一个数据节点是可信的,在实际应用环境中难以实施.2013 年,Lai 等人                         [17] 提出一种可验证的外
         包解密方案,该方案首先选择一个随机因子,将其和数据明文采用哈希运算和幂运算生成一个用于验证的密文
         子项,对随机因子和数据明文同时用基于属性加密算法加密.解密时,用与 Green 类似的外包解密方案分别解密
         出随机因子和数据明文,重新生成用于验证的密文子项并与加密时生成的密文子项做一致性对比,以达到可验
         证的目的.但该方案同时对随机因子和数据明文进行基于属性加密,其用户客户端的加密计算量与一般方案相
         比增长了一倍.2015 年,Qin 等人      [18] 提出的一个高效率且可验证的外包解密方案则较好地解决了这一问题,该方
         案与 Lai 的方案一样,首先选择一个随机因子,并对其进行基于属性加密;但对于数据明文,仅使用随机因子对其
         进行对称加密,并采用哈希方式对外包解密进行正确性验证.同年,Lin 等人                       [19] 也提出一种可验证的外包解密方
         案.与其他方案不同的是,该方案生成所有密文子项但数据明文不嵌入其中,并将随机因子和数据明文级联后与
         访问控制策略解密后的秘密值做异或运算.与 Lai 的方案相比,该方案将通信带宽和计算成本降低了近一半.
         2017 年,Huang 等人 [20] 将具有强大计算能力的雾计算引入到 CP-ABE 方案的设计之中,提出一种外包加密的访
         问控制方案.该方案首先选择一个随机因子,将随机因子外包给雾计算进行基于属性加密,而用户客户端利用随
         机因子作为对称加密密钥加密数据明文,并对雾计算的计算结果做进一步处理,得到完整的密文数据.该方案使
         得大部分计算工作得到外包,而用户客户端仅需要完成少量的计算工作.但该方案将共享访问树的秘密值完全
         暴露给雾计算节点,使得其存在安全问题.
             上述分析表明:已有一些 CP-ABE 方案通过外包加密来解决 ABE 加密慢、效率低的问题,但这些方案只是
         简单地将部分加密工作外包给云计算这样的外包环境,并没有利用并行化计算方法来提升加密速度和效率.另
         外,基于属性加密主要利用树和矩阵两种结构来表示访问策略和实现秘密共享;而和访问矩阵相比,访问树具有
         更容易构造、可读性更强、加密效率更高等优点.鉴于以上原因,该文对利用树表示访问策略的 CP-ABE 方案
         的外包加密的并行化开展研究.

         2    面向公有云的快速加密与共享框架

         2.1   基于Spark的快速加密方法
             计算秘密共享数是 CP-ABE 实现密文共享十分重要的一个环节.已有的基于访问结构树的 ABE 方案,计算
         秘密数基本都是从根节点到叶子节点逐层依次按串行方式进行,难以快速计算出各叶子节点秘密共享数.通过
         观察发现(如图 1 所示),叶子节点的秘密共享数为从根节点到叶子节点路径上每个节点(根节点除外)在其父节
         点对应多项式(去掉常数项)的取值以及秘密数之和.基于以上观察,可以得出定理 1.
             定理 1.  访问结构树各叶子节点的秘密共享数为从根节点到叶子节点路径上每个节点(根节点除外)在其
         父节点对应多项式(去掉常数项)的取值以及秘密数之和.
             证明:设秘密数为 s,访问结构树从根节点到某叶子节点的路径为 r 0 →r 1 →…→r n ,r 0 和 r n 分别对应根节点和
         叶子节点;节点 r i (i∈[0,n])对应的多项式为 f i (x),对应的无常数项多项式记作 f ′        i ()x ;函数 index(x)表示求节点 x 在
         兄弟节点中的序号.各节点的秘密共享数如下:
                      f 0 (0) =  , s
                      f  (0) =  f ′ (index ( ))r  +  , s
                       1    0     1
                      f  (0) =  ′  ( f index ( ))r  +  f  (0) =  ′  ( f index ( ))r  +  f ′  (index ( ))r  +  , s
                       2    1      2   1    1      2   0      1
                      ...,
                                                      ( )) ...+
                                   ( )) +
                                                                   ( )) +
                                                                              ( )) s
                      f  (0) =  f ′  (index r  f  (0) =  f ′  (index r  +  ′  ( f index r  f ′  (index r  +  .
                       n    n−  1   n   n−  1  n−  1   n      1      2   0     1
             所以,命题成立.                                                                          □
             定理 1 表明,各个叶子节点秘密共享数的计算可以按照并行方式进行.因此,设计一个基于 Spark 并行计算
   254   255   256   257   258   259   260   261   262   263   264