Page 405 - 《软件学报》2025年第7期
P. 405

3326                                                       软件学报  2025  年第  36  卷第  7  期



                                          i−1        i−1         i−1           i−1
                                         x 0         x 1        x 2           x d −1
                                                …                      …
                                             F i

                                                            …
                                          i           i            i           i
                                          x 0        x 1          x d−2       x d−1
                                             图 6 第  i 轮类  MARS  广义  Feistel 结构

                 3   Grover 算法及其应用


                    对于从   N  个无序元素列表中搜索出一个目标元素的问题, 一般情形下, 经典算法平均需要                         N/2 次查询列表.
                                                           √
                 而基于量子计算的并行计算特性, Grover 算法仅需要               N  次查询, 相比于经典搜索进行了二次加速. Grover 算法
                 具体过程如算法      1  所示. 此外, Brassard  等人  [33] 又在  Grover 算法的基础上拓展出幅度放大算法, 并且针对密码分
                 析中常见的碰撞问题, 提出了         BHT  碰撞搜索算法    [34] .
                 算法  1. Grover 算法  [12] .

                 输入: 量子   Oracle   O f  可执行变换  O f |x⟩|q⟩ = |x⟩|q⊕ f(x)⟩, 其中, 布尔函数   f(x) = 1  仅当  x = x 0 0 ⩽ x ⩽ 2 −1 n+1
                                                                                                n
                                                                                         ,
                                                                                                    ;
                 个量子比特;
                 输出:  x 0 .
                                  ⊗n
                 1. 制备初始态   |φ 1 ⟩ = |0⟩ |0⟩.
                                                                                     2 n −1  [   ]
                                                                                   1  ∑    |0⟩−|1⟩
                                        ⊗n
                 2. 在前  n 个量子比特上执行     H , 以及在最后一个量子比特上执行           HX, 得到态  |φ 2 ⟩ = √  |x⟩  √  .
                                                                                   2 n  x=0   2
                                                                                               2 n −1
                          ⌈ √   ⌉                                           [            ] R 1  ∑
                       R ≈ π 2 /4  次                [            ]
                              n
                 3. 执行              Grover 迭代算子  G = (2|φ 2 ⟩⟨φ 2 |− I)O f   得到态  |φ 3 ⟩ = (2|φ 2 ⟩⟨φ 2 |− I)O f  √  |x⟩
                                                                                             2 n
                  [      ]    [      ]                                                         x=0
                   |0⟩−|1⟩     |0⟩−|1⟩
                      √   ≈ |x 0 ⟩  √  .
                      2           2
                 4. 测量前  n 个量子比特, 得到  .
                                       x 0
                    在量子密码分析中, 通常利用          Grover 算法直接穷举搜索正确密钥, 因此复杂度由密钥空间大小决定, 但是该
                 方法的复杂度不一定低于利用经典分析方法               (不利用量子计算机) 来恢复密钥. 但是, 利用           Grover 算法直接穷举搜
                 索正确密钥的方法仅需要几个已知明文与其对应的密文, 这也是该方法相比于其他量子密码分析方法的另一优
                 势, 只需要经典查询且数据复杂度仅为常数项级别. 为了发挥这一优势, Daiza 等人                    [19] 针对  3  轮  Feistel-KF  结构  (或
                 称为  Feistel-2  结构) 提出了新的量子密钥恢复攻击, 而不需要量子查询. 其基本思想是根据                  3  轮  Feistel-KF  结构的
                 一些特性, 利用    Grover 算法搜索出所需的中间状态值, 并根据这些中间状态值搜索出正确轮密钥. 相比于其他量
                                                                     n/4
                 子攻击, 该攻击仅需要经典查询且数据复杂度为               O(1). 尽管需要  O(2 ) 时间  n (   为分组长度), 但依然优于经典分析
                      n/2
                 的  O(2 ).

                 4   对  Lai-Massey  结构的密钥恢复攻击
                    受  Daiza 等人  [19] 工作的启发, 本文将分析   3  轮  Lai-Massey  结构, 并利用  Grover 算法辅助进行搜索计算, 提出
                 新型量子密钥恢复攻击.
                    如图  7  所示的  3  轮  Lai-Massey  结构, 其中  F 1 、 F 2  和  F 3  为轮函数,  σ(x L , x R ) = (x R , x L ⊕ x R ) x L  和   x R  分别表示   x i
                                                                                         (
                                                                                                      1
                                                     n
                                                                                                    0
                                                            a
                 的左半部分和右半部分比特). 设           [a,b] ∈ {0,1} , 其中,  、  b  分别表示高位  n/2  比特和低位  n/2  比特. 设  [x , x ],
                                                                                                    i  i
                 [y ,y ] ∈ {0,1} i = 0,1,2,3 [x , x ] [y ,y ]  为  3  轮  Lai-Massey  结构的输入,  [x , x ] [y ,y ]  作为输出.
                                                                                 0
                                                                                   1
                                                                               ,
                                                                             1
                                                                           0
                                       0
                  0
                                          1
                                     .
                    1
                           n
                            ,
                                           ,
                                             0
                                               1

                                               0
                                                                             3
                    i
                                                                           3
                                                                                 3
                                                                                   3
                                          0
                                             0
                                       0
                  i
   400   401   402   403   404   405   406   407   408   409   410