Page 268 - 《软件学报》2020年第10期
P. 268

3244                                  Journal of Software  软件学报 Vol.31, No.10, October 2020

                              xy
                                                        r
          Hash (hk L  , sH  ,c =  ( , ))u e =  u e H z ,ProjH  (hp L  , sH  , ,( , ))c r π  =  hp hp 2 F ()π  .
                                          ,
                ,
                                                       1
             假设用户 A 和用户 B 想要在服务器 S 的协助下进行安全的密钥交换,其中,A 和 B 分别拥有口令 π A 和 π B ,
         服务器 S 拥有相应验证元 (,sH =        s A F π  ) ) 和 (,sH =  s B F π  ) ), 则 I-V3PAKE 协议的具体步骤如下.
                                        ( A
                                                       ( B
                                A
                                   A
                                               B
                                                  B
             (1)  用户 A 选择随机数 r ∈Z    p , 计算口令的预哈希值 P =     g F π  )  对应的 ElGamal 密文 c AS  =  (u =  A  g  A r  ,e =  A
                                                             ( A
                                                        A
                                 A
           A r
          h ⋅ P A ), 然后发送消息 A〈  ,,Bc 〉  AS  给服务器 S;类似地,用户 B 选择随机数 r ∈Z    p , 计算口令的预哈希值 P =
                                                                                              B
                                                                      B
          g F π  )  对应的 ElGamal 密文 c BS  =  (u =  B  g  B r  ,e =  B  h ⋅  B r  P B ), 然后发送消息 B〈  ,,Ac 〉 给服务器 S.
            ( B
                                                                     BS
             (2)  服务器 S 收到消息后,先为用户 A 选择随机数 hk =           (x y z  A ), 计算 hp =  g h y  A , hp 2 A  =  g s , tk  A  ||
                                                                                        y
                                                                             x
                                                                                           z
                                                               ,
                                                            ,
                                                                              A
                                                                                           A
                                                                                         A
                                                                        1A
                                                            A
                                                       A
                                                              A
          mk A =Hash (hk L A ,c A ) u e H=  x A A  y A A  A z A , 设置 l =  A  A || B  || ||S c AS  || hp 1A  || hp 2A ,M =  A  s A  || H  A , 并用 tk A 作为加密的随机数
                     ,
                    A
                                                                                             ,
         计算 c SA  =  Enc ( pk M  A ; ;l tk  A ), 并发送消息 s hp〈  A ,  1A ,hp 2A ,c 〉 给用户 A;类似地,为用户 B 选择随机数 hk =  (x y
                       ,
                                                                                                ,
                                                                                        B
                                                     SA
                                                                                               B
                                                                                            B
                           A
                                                                y
                                  y
                        B x
                                                              x
          z B ), 计算 hp =  1B  g h y B  ,hp 2B  =  g s  B z  ,tk B  || mk B  =Hash (hk L B ,c B ) =  u e H A z A , 设置 l =  B  || || ||A S c BS  || hp 1B  || hp 2B ,
                                                     ,
                                                              A
                                                                A
                                   B
                                                                          B
                                                                A
                                                              A
                                                     B
          M =  s B  || H  B , 并用 tk B 作为加密的随机数计算 c SB  =  Enc ( pk M  B ; ;l tk B ), 同时发送消息 s hp〈  B ,  1B ,hp 2B ,c 〉  SB  给用
                                                         ,
                                                              B
           B
         户 B.
                                                                                         F π
                                                                                     A r
             (3)  用户 A 收到 hp〈  1A ,hp 2A ,c 〉  SA  后,首先计算 tk A  || mk A =ProjH ((hp 1A ,hp 2A ),L A ,c A ,( ,r π A ))= hp ⋅ hp 2A ( A ) , 然后
                                                                            A
                                                                                    1A
         利用 tk A 作为随机数重新计算 c′ =      Enc ( pk M A ; ;l tk A ), 并验证与其接收到的 c SA 是否相等.如果验证不相等,则立
                                          ,
                                  SA
                                               A
         即结束会话;如果验证通过,则用户 A 选择随机数 x∈Z 计算 X =         ,       g  x ,σ AS  =  MAC (mk A , ||A B  || ||S X 然后向服务
                                                                                      ),
                                                    p
         器 S 发送消息 X〈   ,σ 〉  AS  ; 类似地,用户 B 收到消息 hp〈  1B ,hp 2B ,c 〉  SB  后,计算 tk B  || mk 并验证 c SB ,验证通过后选择随
                                                                        B
         机数 y ∈Z  p , 计算 Y =  g y ,σ BS  =  MAC (mk B , ||B A || || ),S Y 然后向服务器 S 发送消息 Y〈  ,σ 〉
                                                                              .
                                                                            BS
             (4)  服务器 S 收到消息后,首先用密钥 mk A 和 mk B 验证 MAC 值 σ            和 σ  是否正确,验证通过后计算
                                                                    AS    BS
         σ SA  =  MAC (mk A , ||A B  || ||S X  || ),Y σ SB  =  MAC (mk B , ||B A  || ||S Y X 然后向用户 A 发送消息 Y〈  ,σ 〉  SA  , 向用户 B 发
                                                         ||
                                                            ),
         送消息 X〈  ,σ 〉  SB  .
             (5)  用户 A 和 B 在收到来自服务器的消息后,分别利用密钥 mk A 和 mk B 验证 MAC 值σ              SA  和σ SB  是否正确,
         验证失败,则结束会话.然后,用户 A 计算会话密钥为 sk              AB  = Y  x , 用户 B 计算会话密钥为 sk BA  =  X  y .
             在用户和服务都诚实运行协议的情况下,对与用户 A 相关的语言 L =                     L  A s  ,H  A  而言,下式成立:
                                                                 A
                                                x
                                                  y
                                        ,
                                 Hash (hk L A ,c A ) =  u e H A z A
                                                   A
                                                A
                                                A
                                       A
                                                  A
                                                     A r
                                             =  g rx  (h g H π  ( A ) y A  H π  ( A z ) A
                                                          ) s
                                                AA
                                                x
                                                    ) (g s
                                             =(gh  y A r A  y  A  A z  ) F π  )               (2)
                                                             ( A
                                                 A
                                                    A r
                                             =  (hp 1A ) (hp 2A ) F π  )
                                                          ( A
                                             =  ProjH ((hp 1A ,hp 2A ),L A ,c A ,( ,r π A ))
                                                                   A
                                                      ,
             可知用户 A 和服务器 S 将计算得到相同的 tk          A  || mk 保证了 c 、  SA  σ 、  AS  σ SA  的正确性;类似地,用户 B 和服务
                                                     A
                                   ,
         器 S 将计算得到相同的 tk     B  || mk 保证了 c 、  SB  σ 、  BS  σ SB  的正确性.因此,协议中验证都将通过,最终 A 和 B 将生成
                                  B
         相同的会话密钥 sk     AB  =  Y =  x  g xy  =  X =  y  sk BA .
             注 1.在 I-V3PAKE 协议中,我们利用具有良好代数性质的口令哈希机制和特别构造的平滑投射哈希函数实
                                                                                      r
                                                                        ,
         现了对口令和验证元的验证.一方面,用户在利用投射密钥计算哈希值 ProjH                        (hp L  , ,( , ))c r π  =  hp hp F ()π  时需要
                                                                          , sH       1  2
                                                                                r
         用到 F  (),π 验证了用户确实拥有 ()F π 和π;另一方面,语言 L           =  {( , ) :u e ∃  , r π∃  ,u =  g r ,e =  h g F ()π  ,H =  s F ()π  } 的定
                                                         , sH
         义方式保证了 e =    h g F ()π  中的 g F ()π  部分相对于 g 的指数与 H 相对于 s 的指数是相等的,即证实了服务器确实拥
                        r
         有与用户相匹配的验证元.
             注 2.I-V3PAKE 协议能够抵御针对 Yang-V3PAKE 协议        [29] 的离线字典攻击.具体地,如果攻击者仿照第 3.2
         节中提到的攻击方法将 I-V3PAKE 协议的第 1 轮消息替换成伪造的消息,则只要攻击者未猜对用户U ∈                            {, }A B 的
         口令,将由于 ElGamal 密文 (, )ue ∉  L  , s H  使得服务器计算得到的 tk U  || mk 对攻击者来说是完全随机的,从而攻击
                                                                 U
         者无法通过验证 c SU 来判别其猜测口令的正确性.
   263   264   265   266   267   268   269   270   271   272   273