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

3928                                Journal of Software  软件学报 Vol.31, No.12, December 2020

             •   Create(S):挑战者设置 j:=j+1,利用外包私钥生成算法获取属性集 S 对应的(SK,TK),并将(j,S,SK,TK)存储
                在 T 中,然后将转换密钥 TK 发送给敌手.在相同输入的情况下,Create 能够被重复的查询;
             •   Corrupt(i):如果在表 T 中存在第 i 个记录,挑战者获取该记录(i,S,SK,TK),并设置 D:=D∪{S},然后将私钥
                SK 返回给敌手;若不存在该记录,则返回⊥;
             •   Decrypt(i,CT):如果在表 T 中存在第 i 个记录,挑战者获取该记录(i,S,SK,TK),并将以(SK,CT)为输入的解
                密运算输出结果返回给敌手;若不存在该记录,则返回⊥.
                                                                *
                                                                                      *
             挑战:敌手提交两个等长的明文 M 0 和 M 1 ;提交一个挑战访问树 T ,使得任意 S∈D 都不满足 T .挑战者抛硬
                                                                *
                                                        *
                                               *
         币获得一个随机值 b,计算明文 M b 关于访问树 T 的密文 CT ,并将 CT 返回给敌手.
             阶段 2:重复阶段 1 的查询,但不能进行如下查询.
             •   获取能解密挑战密文的私钥;
             •   解密挑战密文.
             猜测:敌手给出一个关于 b 的猜测值 b′.
         4    面向公有云的快速加密与共享方案

             方案包括初始化、私钥生成、加密和解密这 4 个模块,利用 Spark 技术的 Map 操作和 Reduce 操作并行化
         计算用户私钥和数据密文.
             (1)  初始化:Setup(U,k)
             k 为系统安全参数,选择一个阶为大素数 p 的双线性群 G 和 G T ,从 G 中选择一个元素 g 并记为 G 的生成元,
                                                                                        α
                                                                           *
                                            *
                                      ,,α ∈
         双线性映射 e:G×G→G T ,选择 g ∈  2  Ga    Z ,对于系统中每个属性 i∈U,选择 t ∈        Z ,计算 Y=e(g,g 2 ) ,系统属性
                                                                           p
                                            p
                                                                       i
              i t
         T =  g .定义哈希函数 H   1  :{0,1} →  *  Z * p ,H  2  :{0,1} →  *  {0,1} .将系统公钥 PK 向所有用户及云服务器公开,而系统主
                                                     k
          i
         密钥 MK 由授权中心秘密保存.系统公钥 PK 如下:
                                               a
                                       PK=〈p,g,g ,G,G T ,e,Y,{T i } i∈U ,H 1 ,H 2 〉.
             系统主密钥 MK: MK = 〈   g α ,{ }t ii U∈  . 〉
                                 2
             (2)  生成用户私钥:KeyGen(PK,MK,S)
             用户私钥先由用户完成初步计算,再外包给云服务器完成最后的计算.
                                           *
             首先,用户客户端选择随机数 ,,tt β ∈       Z ,生成用户部分转换密钥:
                                           p
                                      0
                                                 ) ,L =
                                              at
                                  TK′ = 〈  , S K =  (g g αβ  g  t β  ,T =  g  0 t  ,{t tβ  / }t 0 i S  . 〉
                                                2
                                                                     ∈
                                                                i
                                                                                  t β
             将 TK′发送至云服务器,再利用 Spark 技术的 Map 操作并行计算私钥子项 K =              i  T  i ttβ  /  0 t  =  T ,完整的用户转换
                                                                                 i
         密钥 TK 如下:
                                    TK =〈  , S K =  (g g αβ  g  t β  ,{K =  T  t β } 〉
                                                   ) ,L =
                                                at
                                                                     .
                                                                   ∈
                                                  2          i  i  i S
             最终解密密钥 DK=〈β〉由用户秘密保存,而转换密钥 TK 由云服务器保存在转换密钥库中.
                                   k
             (3)  加密:Encrypt(T,M∈{0,1} ,PK)
             加密计算过程由用户客户端和云服务器共同完成(如图 3 所示).首先,用户客户端随机选择 R∈G T ,计算
                                                  s
                                      αs
                                                      s
                             s
         s=H 1 (R,M),r=H 2 (R),C=R⋅Y =R⋅e(g,g 2 ) ,C′=M⊕r,C 0 =g ,将 g 和共享访问逻辑表达式发送至云服务器.
             云服务器根据共享访问逻辑表达式构建密文共享访问树 T,采用 Spark 技术的 Map 和 Reduce 两种操作完
         成访问树 T 的秘密值分发与叶子节点属性加密计算,其中:Map 操作并行计算访问树 T 的每个节点(包括叶子节
         点和非叶子节点),而 Reduce 操作针对访问树 T 的每个叶子节点作进一步计算.令 I j,child 为非叶子节点 I j 的孩子
         节点,其包含的叶子节点 L i 集合为{}L       iL i I∈  , j child  ,则非叶子节点 I j 包含的叶子节点集合为 L set  = {{ }L i  i L ∈  I  , j child } I  , j child I∈  j .
             •   Map 操作
             该部分按非叶子节点 I j 和叶子节点 L i 分为如下两种情况.
             ¾   针对非叶子节点 I j ,Map 操作输入的键值对为(I j ,L set ).首先,根据其阈值 d,随机选择一个一元 d−1 次多
   257   258   259   260   261   262   263   264   265   266   267