格初步(四)

LLL算法
LLL算法由Lenstra、Lenstra和Lovász于1982年提出[LLL82],多项式时间内提供了对(搜索型)最短向量问题 \(\mathrm{SVP}_\gamma\) 的近似解,近似因子为 \(\gamma=2^{(n-1)/2}\),因子随着维度的增加呈指数增长 .
尽管如此,这个近似因子仍具有实际意义,因为它仅依赖于格的维度 \(n\),不像下式
中的界限那样依赖于给定基向量的长度,这些长度可能非常大.此外,当维度 \(n\) 较小,或者最短的非零格向量远短于其他非平行格向量时,指数级的近似因子仍然非常有用.正如我们将看到的,在LLL算法的许多应用中,至少有一种情况成立 .
LLL算法将任意的格基转换为生成相同格的“约化”基,约化满足以下条件(符号 \(\mu_{i,j}\) 和 \(\widetilde{\mathbf{b}}_i\) 指代前几节中的Gram-Schmidt正交化的符号):
定义 1 LLL约化基
如果格基 \(\mathbf{B}\) 满足以下两个条件,则称其为LLL约化基:
—对于所有 \(i < j\),有 \(|\mu_{j,i}| \leq \frac{1}{2}\). (此类基称为“size ruduced”)
—对于所有 \(i < n\),有 \(\frac{3}{4} \|\widetilde{\mathbf{b}}_i\|^2 \leq \|\mu_{i+1,i} \widetilde{\mathbf{b}}_i + \widetilde{\mathbf{b}}_{i+1}\|^2\). (这被称为“Lovász条件”)
条件一要求 \(\mathbf{b}_4\) 在 \(\widetilde{\mathbf{b}}_1,\widetilde{\mathbf{b}}_2,\widetilde{\mathbf{b}}_3\) 上的投影长度 \(\leq \frac{1}{2}\|\widetilde{\mathbf{b}}_i\|~i=1,2,3\) 即 \(b_4\) 不能通过 \(\pm \widetilde{b}_i\) 来减小长度。
\(i=1\) 时,条件二相当于 \(\frac{3}{4} \|\widetilde{\mathbf{b}}_1\|^2 \leq \|\mathbf{b}_2\|^2\).
\(i=2\)时,条件二相当于 \(\frac{3}{4} \|\widetilde{\mathbf{b}}_2\|^2 \leq \|\mathbf{b}_3-\mu_{3,1}\widetilde{\mathbf{b}_1}\|^2\).
也就是说条件二确保 \(\mathbf{b}_{i+1}\) 在与 \(\widetilde{\mathbf{b}_i}\) 和 \(\widetilde{\mathbf{b}_{i+1}}\) 张成的平面上的投影分量长度要超过 \(\frac{\sqrt{3}}{2}\| \widetilde{\mathbf{b}}_i\|\)
如下图,红线左边并且保证 \(\|b_{i+1}^{\prime}\|\geq \frac{\sqrt{3}}{2}\|\widetilde{b}_i\|\) 的位置是满足条件一和条件二的 \(b_{i+1}^{\prime}\) 的可能落点.
在草纸上画一个二维版本即可发现LLL条件允许相邻的GS向量之间的长度差异很大。但是条件二又要求了向量之间的排布有一定的有序性,例如,综合两个条件我们可以得出,连续的两个向量之间会满足 \(cos(\mathbf{b}_{i+1},\widetilde{\mathbf{b}}_i)\leq \frac{1}{\sqrt{3}}\)
引理 2
在LLL约化基 \(\mathbf{B}\)中,对于所有\(i < n\),有 \(\|\widetilde{\mathbf{b}}_{i+1}\|^2 \geq \frac{1}{2} \|\widetilde{\mathbf{b}}_i\|^2\).
证明:由于Gram-Schmidt向量是相互正交的,根据勾股定理,有:
由此可得 \(\|\widetilde{\mathbf{b}}_{i+1}\|^2 \geq \frac{1}{2} \|\widetilde{\mathbf{b}}_i\|^2.\square\)
由于格基的Gram-Schmidt向量提供了格的最小距离的下界,因此LLL约化基的第一个向量近似为最短的格向量.
如果 \(\mathbf{b}_1\) 选取的特别小,则条件一很难满足,再加上引理 \(2\),我们有理由认为 \(\mathbf{b}_1\) 近似为最短格向量.
从这个引理我们又可以认为LLL格基的GSO不会缩短的“很快”
推论 3
在LLL约化基 \(\mathbf{B}\)中,有 \(\|\mathbf{b}_1\| \leq 2^{(n-1)/2} \cdot \lambda_1(\mathcal{L}(\mathbf{B}))\).
证明:根据引理 \(2\),对于 \(1 \leq i \leq n\),有 \(\|\widetilde{\mathbf{b}}_{i+1}\| \geq \frac{1}{\sqrt{2}} \|\widetilde{\mathbf{b}}_i\|\).因此,
对于所有 \(i\),有:
因此,\(\|\mathbf{b}_1\| \leq 2^{(n-1)/2} \cdot \lambda_1(\mathcal{L}(\mathbf{B})).\square\)
如下的算法 \(4\) 定义了 LLL 算法,该算法将任何格基变换为同一格的 LLL-约简基.该算法简单地在两个步骤之间交替:对当前基进行size reduced(即使得条件 1 成立),并检查 Lovász 条件(条件 2)是否成立;如果不成立,就交换一对有问题的基向量.从这个描述中,我们可以立刻看出如果算法最终终止,那么该算法是正确的——输出确实是 LLL 约化基.关键的挑战是证明它确实终止,并且在输入大小的多项式时间内终止.
算法 4 LLL 算法
在详细讨论 LLL 算法的细节前,让我们看一看其前身——“二维格高斯约简算法”.
算法 5 二维格高斯约简算法
输入:格 \(L\) 的一组基 \(\boldsymbol{v}_1\) 和 \(\boldsymbol{v}_2\)
输出:一组具有良好正交性的基向量
1.循环
2.如果 \(\left\|\boldsymbol{v}_2\right\|<\left\|\boldsymbol{v}_1\right\|\) ,交换 \(\boldsymbol{v}_1\) 和 \(\boldsymbol{v}_2\)
3.计算 \(m=\left\lfloor\boldsymbol{v}_1 \cdot \boldsymbol{v}_2 /\left\|\boldsymbol{v}_1\right\|^2\right\rceil\)
4.如果 \(m=0\) ,返回基向量 \(\boldsymbol{v}_1\) 和 \(\boldsymbol{v}_2\)
5.用 \(\boldsymbol{v}_2-m \boldsymbol{v}_1\) 替换 \(\boldsymbol{v}_2\)
6.继续循环
高斯宣称:当这个算法终止的时候,向量 \(v_1\) 就是格 \(L\) 中最短的非零向量,因此算法 \(5\) 很好地解决了二维格的 SVP 问题.此时,基向量 \(\boldsymbol{v}_1\) 和 \(\boldsymbol{v}_2\) 之间的夹角 \(\theta\) 满足 \(|\cos \theta| \leqslant\left\|\boldsymbol{v}_1\right\| / 2\left\|\boldsymbol{v}_2\right\|\) ,故夹角 \(\theta\) 范围为 \(\frac{\pi}{3} \leqslant \theta \leqslant \frac{2 \pi}{3}\).
下面给出了向量 \(\boldsymbol{v}_1\) 是格中最小的非零向量的证明过程.
假设算法 \(5\) 已经终止,并返回了结果向量 \(\boldsymbol{v}_1\) 和 \(\boldsymbol{v}_2\) 。也就是说有 \(\left\|\boldsymbol{v}_1\right\|<\) \(\left\|\boldsymbol{v}_2\right\|\) 成立,并且有
从几何学的角度,上式说明不能通过从向量 \(\boldsymbol{v}_2\) 中减去向量 \(\boldsymbol{v}_1\) 整数倍的方法来使向量 \(\boldsymbol{v}_2\) 变得更小.
由此我们看出 size reduced 条件的真正含义 .
现在假设 \(v \in L\) 为格 \(L\) 中的任意一个非零向量,则有
于是
对任意实数 \(t_1\) 和 \(t_2\) ,表达式
除 \(t_1=t_2=0\) 之外,结果均大于零。但在实际情况中,\(a_1\) 和 \(a_2\) 为整数,且不同时为 \(0\) ,这就说明 \(\|v\|^2 \geqslant\left\|v_1\right\|^2\) ,因此向量 \(\boldsymbol{v}_1\) 是格 \(L\) 中的最小的非零向量.
算法 \(5\) 显然会终止,因为我们是在 Z 上考虑问题,下降过程不可能无限进行 .
现在回到算法 \(4\),我们现在可以很容易的看出 \(\mathrm{SizeReduce}\) 这一步确实可以输出一组 size reduced 的基.
现在我们陈述关于 LLL 算法的主要定理.
定理 6
给定一个整数格基 $ \mathbf{B} \in \mathbb{Z}^{n \times n} $,LLL 算法在时间 $ \operatorname{poly}(n, |\mathbf{B}|) $ 内输出格 $ \mathcal{L} = \mathcal{L}(\mathbf{B}) $ 的 LLL-约简基,其中 $ |\mathbf{B}| $ 表示输入基的比特长度(需要消耗的存储空间).
可以想到 \(n\) 和 \(|\mathbf{B}|\) 就是关乎计算速度的两个最重要参数。
本节其余部分致力于(几乎完整地)证明这一定理.首先,很明显,如果 LLL 算法最终终止,它是正确的:对输入基的所有操作都保持了其生成的格,并且算法只能输出一个 LLL-约简基.
接下来我们证明迭代次数为 $ O(N) $,其中 $ N = \operatorname{poly}(n, |\mathbf{B}|) $.这使用了一个“potential argument”,该论证为算法生成的所有中间基分配一个值.我们将证明三个事实:potential 一开始不大于 $ 2^N $;它从不低于 \(1\);并且算法的每次迭代都使 potential 减少至少 $ \sqrt{4 / 3} > 1 $ 的一个因子。所有这些意味着迭代次数至多为 $ \log_{\sqrt{4 / 3}} 2^N = O(N) $.
potential 函数定义如下:对于基 $ \mathbf{B} = (\mathbf{b}_1, \ldots, \mathbf{b}_n) $,令 $ \mathcal{L}_i = \mathcal{L}(\mathbf{b}_1, \ldots, \mathbf{b}_i) $,对于每个 $ i \leq n $。potential 是这些格的行列式的乘积:
命题 7
输入基 $ \mathbf{B} $ 的潜力至多为 $ 2^N $,并且算法生成的每个中间基的潜力至少为 \(1\).
证明:因为对于所有 $ i $,有 $ \left|\widetilde{\mathbf{b}}_i\right| \leq \left|\mathbf{b}_i\right| $ 且 $ \left|\mathbf{b}_i\right| \geq 1 $,所以输入基 $ \mathbf{B} $ 的潜力上界为
每个中间基都是整数基,因此与该基相关联的格 $ \mathcal{L}_i $ 的行列式至少为 \(1\).因此,该基的潜力至少为 \(1\).
接下来我们分析在算法 \(4\) 进行交换步骤时潜力如何变化.
命题 8
假设进行了交换步骤,交换的格基为 $ \mathbf{b}i $ 和 $ \mathbf{b} $,并且令结果基为 $ \mathbf{B}^{\prime} $.则对于所有 $ j \notin {i, i+1} $,有 $ \widetilde{\mathbf{b}}_j^{\prime} = \widetilde{\mathbf{b}}_j $,并且 $ \widetilde{\mathbf{b}}i^{\prime} = \mu \widetilde{\mathbf{b}}i + \widetilde{\mathbf{b}} $。
注意,这个命题使得我们可以优化(在交换之后的)正交化步骤,我们不需要从头开始对 $ \mathbf{B}^{\prime} $ 进行正交化,而只需要更新 $ \widetilde{\mathbf{B}} $ 中的两个向量 .
证明:对于所有 $ j < i $,我们显然有 $ \widetilde{\mathbf{b}}_j^{\prime} = \widetilde{\mathbf{b}}_j $。对于任何 $ j > i + 1 $,细想以下即知我们仍然有 $ \widetilde{\mathbf{b}}_j^{\prime} = \widetilde{\mathbf{b}}_j \(。最后,\) \widetilde{\mathbf{b}}i^{\prime} $ 是 $ \mathbf{b}i^{\prime} = \mathbf{b} $ 的分量,正交于 $ \operatorname{span}(\mathbf{b}1^{\prime}, \ldots, \mathbf{b}^{\prime}) = \operatorname{span}(\mathbf{b}1, \ldots, \mathbf{b}) $,根据构造,这是 $ \mu \widetilde{\mathbf{b}}i + \widetilde{\mathbf{b}} \(.\)\square$
命题 9
假设算法 \(4\) 在第 \(3\) 行交换了 $ \mathbf{b}i $ 和 $ \mathbf{b} $,交换后的基记作 $ \mathbf{B}^{\prime} $。那么,
证明: 设
根据命题 \(8\),有:
其中,最后一个不等式是由于 Lovász 条件(条件 2)未满足(才进行交换)所导致的。\(\square\)
这就完成了关于迭代次数为 $ O(N) = \operatorname{poly}(n,|\mathbf{B}|) $ 的证明。此外,可以直接观察到,算法的每次迭代(在当前基的比特长度意义上)是多项式时间的。然而,这并不必然保证 LLL 算法整体是多项式时间的,因为中间基的比特长度可能会在每次迭代中增长。(例如,如果比特长度在每次迭代中都翻倍,那么最终的比特长度将是初始比特长度 \(i.e.\) 初始参数的 \(2^{O(N)}\) 倍。)
为了完整证明 LLL 算法是多项式时间的,只需证明所有中间基的大小都有一个上界,这个上界是原始基大小的多项式。这一点确实成立,主要归因于规模约减size-reduction步骤。这是一个类似GS正交化的整数版本,仔细想一下并不会出现在size-reduction之后比特长度翻倍的情况,而且这个过程应当使得比特长度在不断减小。所以凭直觉我们知道所有中间基的大小都有一个初始基的比特长度的多项式级别的上界,就不再给出证明了。
最后,我们对 LLL 算法做一些总结性说明。Lovász 条件中的因子 $ 3/4 $ 仅用于方便分析。实际上,我们可以使用任何介于 $ 1/4 $ 和 $ 1 $ 之间的常数,这会在最终的近似因子与迭代次数之间产生权衡,但它们仍然分别保持在指数级和多项式级(相对于 $ n $)。
至于为什么可以介于 \((\frac{1}{4},1)\) 参见引理 \(2\) 前所画的三角形,只有参数选取在这个范围内才能保证三角形的存在性,从而保证引理 \(2\) 的控制关系的存在性,从而保证推论 \(3\) 中近似因子的存在性。由此也很快看出以下因子 \((\frac{2}{\sqrt{3}})^n\) 的来历。
如果选择一个非常接近 \(1\) 的值,我们可以在多项式时间内获得近似因子为 $ (2 / \sqrt{3})^n $ 的解,但使用 LLL 无法进一步提升。此外,Schnorr 在 LLL 的基础上做了推广[Sch87],利用 $ k \geq 2 $ 个连续向量的block来调整 Lovász 条件,从而在多项式时间内获得略微更好的近似因子 $ 2^{O\left(n(\log \log n)^2 / \log n\right)} $。
同时求对数就可以更好看出“略微更好”。
Coppersmith 方法
LLL 的一个重要应用是 Coppersmith 方法[Cop96b],它可以找到多项式方程模数 $ N $ 下的所有小根,即使 $ N $ 的因子分解未知。该方法在密码分析中是一种极为强大的工具,我们将在后续内容中看到其应用。
定理 10
存在一个多项式时间算法,对于任意首一的、次数为 $ d $ 的整系数多项式 $ f(x) \in \mathbb{Z}[x] $ 和任意一个整数 $ N $,该算法能够输出所有满足
且
的整数 $ x_0 $。
关于该定理的各个组成部分,我们做以下几点重要说明:
\(1\). 当 $ N $ 为素数时,即 $ \mathbb{Z}_N $ 是有限域,存在高效算法可以找出模 $ N $ 下次数为 $ d $ 的多项式 $ f(x) $ 的所有根,且最多有 $ d $ 个。同样,也存在高效算法可以分解有理数(或整数)系数的多项式。因此,该定理能够处理合数模 $ N $ 是其一个显著特点。
\(2\). 对于合数 $ N $,即使 $ f(x) $ 是二次多项式,其模 $ N $ 的根的数量也可能接近指数级增长。例如,如果 $ N $ 是 $ k $ 个不同素数的乘积,则任何模 $ N $ 的平方数都有恰好 $ 2^k $ 个不同的平方根(这可由中国剩余定理推出,因为每个素因子模 $ N $ 有两个平方根)。由于 $ k $ 的最大可能值约为 $ \log N / \log \log N $,因此根的数量可以接近 $ \log N $ 的指数级。因此,通常不存在高效算法能够找出模 $ N $ 下 $ f(x) $ 的所有根;定理中对小根的限制正好避免了这个问题。
例如:
\(3\). 另一方面,大小限制的必要性还可以从另一个角度理解:如果知道模合数 $ N $ 的两个平方根 $ r_1 \neq \pm r_2 $,则可以计算 $ \gcd(r_1 - r_2, N) $ 从而获得 $ N $ 的一个非平凡因子。因此,即使根的数量较小,找到所有平方根仍然至少和分解 $ N $ 一样困难。然而,可以证明一个平方数的“小”平方根(即大小至多为 $ N^{1/2} $)最多只有一个。因此,该定理似乎并不导致高效的整数分解算法。(不过,在某些情况下,如果已知因子的一部分信息,该方法可以用来因式分解,如 [Cop96a] 中所示。)
若 \(r_1^2 \equiv r_2^2 \equiv a(\bmod N)\) ,则 \(r_1^2-r_2^2 \equiv 0(\bmod N)\) ,即:\(\left(r_1-r_2\right)\left(r_1+r_2\right) \equiv 0 \quad(\bmod N)\) 这表明 \(N\) 整除乘积 \(\left(r_1-r_2\right)\left(r_1+r_2\right)\)。由 \(r_1 \neq \pm r_2(\bmod N)\) ,可知:\(r_1-r_2 \not \equiv 0(\bmod N)\) ,\(r_1+r_2 \not \equiv 0(\bmod N)\) 。因此,\(N\) 既不单独整除 \(r_1-r_2\) ,也不单独整除 \(r_1+r_2\) ,但整除它们的乘积。
为了突出该方法的核心思想,在本节的剩余部分,我们先证明定理的一个较弱版本,其中 $ B \approx N^{2/(d(d+1))} $(这里省略了一个小的常数因子)。在下次讨论中,我们将证明定理的完整版本,即 $ B \approx N^{1/d} $。
证明策略
我们希望找到另一个非零多项式
使得:
\(1\). $ f(x) $ 在模 $ N $ 下的所有根也是 $ h(x) $ 的根;
\(2\). 多项式 $ h(Bx) $ 是“短的”,即对所有 $ i $ 都有
对于这样的 $ h(x) $ 以及所有满足 $ |x_0| \leq B $ 的 $ x_0 $,我们有
从而推出
因此,对于所有 $ f(x) $ 在模 $ N $ 下的小根(即满足 $ |x_0| \leq B $),我们有 $ h(x_0) = 0 $ 在整数范围内成立(而不仅仅是模 $ N $)。因此,为了找到 $ f(x) $ 在模 $ N $ 下的小根,我们可以因式分解 $ h(x) $(在整数范围内),然后测试其小根是否也是 $ f(x) $ 在模 $ N $ 下的根。
我们现在给出一个高效的算法来寻找这样的 $ h(x) $。基本思想是,添加多项式 $ g_i(x) = N x^i \in \mathbb{Z}[x] $ 的整数倍到 $ f(x) $ 中,显然不会改变 $ f(x) $ 在模 $ N $ 下的根。因此,我们构造一个格,其基底对应于多项式 $ g_i(Bx) $ 和 $ f(Bx) $ 的系数向量,然后在该格中找到一个“短”的非零向量,并将其解释为多项式 $ h(Bx) $。这个格的基底矩阵为
注意,该格的维数是 $ d+1 $,且其行列式为
通过在该基底上运行 LLL 算法,我们可以找到一个非零格向量 $ \mathbf{v} \in \mathcal{L}(\mathbf{B}) $,满足
我们定义 $ h(Bx) $ 为由向量 $ \mathbf{v} $ 给出的多项式,即
由于格基的构造方式,我们可以保证 $ B^i $ 整除 $ v_i $ 对于所有 $ i $,因此 $ h(x) \in \mathbb{Z}[x] \(。此外,由构造可知,\) f(x) $ 在模 $ N $ 下的所有根也是 $ h(x) $ 的根。最后,我们有
当 $ (2 B)^{d / 2}<N^{1 /(d+1)} /(d+1) $ 时成立,该不等式等价于
其中分母可以被常数控制。\(\square\)

浙公网安备 33010602011771号