格密码基础 —— LLL Algorithm
\(Intuitive\ understanding\)
- 在\(Lattice-bases\ Cryptography\)中,\(SVP\)被当作一个困难数学问题,当格的维度(\(n\))很高时,找到绝对最短的向量是\(NP-hard\)的。
- \(A.K.Lenstra\)、\(H.W.Lenstra\)、\(Jr.\)和\(L.Lovasz\)在\(1982\)年提出的\(LLL\)算法能够在多项式时间内找到一个足够短的向量。它可以给出一个近似比为\(({2\over\sqrt{3}})^n\)的解,也就是说,它找到的向量长度,最坏情况下也只会比真正的最短向量长\(({2\over\sqrt{3}})^n\)倍,如果\(n\)是一个常数,我们就可以得到一个常数级别的近似解。
- 在\(1801\)年,\(Gauss\)给出了一种算法,可以看作是求解二维\(SVP\)的算法,在某种程度上来讲,\(LLL\)算法是\(Gauss\)算法向高维格的推广。在\(1987\)年,\(Schnorr\)提出了一种改进的\(SVP\)算法,这个改进算法得到了一个\(2^{O({n(loglogn)^2\over logn})}\)的近似因子。
\(Reduced\ basis\)
-
\(Gram-Schmidt\ orthogonalization\):
给定\(n\)个线性无关的向量\(\vec{b_1},\cdots,\vec{b_n}\in\mathbb{R}^n\),其\(Gram-Schmidt\ orthogonalization\)定义为\(\vec{b_i}^*=\vec{b_i}-\sum_{j=1}^{i-1}\mu_{i,j}\vec{b_j}^*[\mu_{i,j}={\left<\vec{b_i},\vec{b_j}^*\right>\over\left<\vec{b_j}^*,\vec{b_j}^*\right>}]\) -
定义1:一个基\(B=\{\vec{b_1},\cdots,\vec{b_n}\}\in\mathbb{R}^{n×n}\)是一个\(\delta-LLL\)约化基,如果满足以下条件:
- \(\forall1\leq i\leq n,j<i\),满足\(\left|\mu_{i,j}\right|\leq{1\over2}\)
- \(\forall1\leq i\leq n\),满足\(\delta\Vert\vec{b_i}^*\Vert ^2\leq \Vert\mu_{i+1,i}\vec{b_i}^*+\vec{b_{i+1}}^*\Vert ^2\)
算法中通常考虑\(\delta={3\over 4}\)的情况,实际上算法适用于任何\({1\over4}<\delta<1\)。
- 条件\(1\)是长度约化,因为\(\mu_{i,j}\)代表着原基向量\(\vec{b_i}\)在正交向量\(\vec{b_j}^*\)上的投影系数,\(\left|\mu_{i,j}\right|\leq{1\over2}\)意味着任何一个基向量在前面的正交基上的投影都足够小(不超过其一半),这在几何上保证了基向量之间尽可能地“垂直”。\(c={\left<\vec{a},\vec{b}\right>\over\left<\vec{b},\vec{b}\right>}={\Vert\vec{a}\Vert\cdot\Vert\vec{b}\Vert\cdot cos\left<\vec{a},\vec{b}\right>\over\Vert\vec{b}\Vert^2}\),其中\(\Vert\vec{a}\Vert\cdot cos\left<\vec{a},\vec{b}\right>\)就是向量\(\vec{a}\)在向量\(\vec{b}\)上的投影长度,为了让\(c\)尽可能地小,可以通过采用两种方式:保持\(\vec{a}\)方向(\(cos\left<\vec{a},\vec{b}\right>\))不变,缩短\(\vec{a}\)的长度;改变\(\vec{a}\)的方向,令\(\vec{a}\)与\(\vec{b}\)尽可能正交,此时\(cos\)函数值会减小(\(cos {\pi\over2}=0\))。
- 条件\(2\)是洛瓦兹条件,因为\(\vec{b_i}^*\)与\(\vec{b_{i+1}}^*\)是正交的,该条件可以展开并转化为等价形式:\(\delta\Vert\vec{b_i}^*\Vert ^2\leq \Vert\mu_{i+1,i}\vec{b_i}^*+\vec{b_{i+1}}^*\Vert ^2\rightarrow \delta\Vert\vec{b_i}^*\Vert^2\leq(\mu_{i+1,i}\Vert\vec{b_i}^*\Vert)^2+\Vert\vec{b_{i+1}}\Vert^2\rightarrow\Vert\vec{b_{i+1}}^*\Vert^2≥(\delta-\mu_{i+1,i}^2)\Vert\vec{b_i}^*\Vert^2≥(\delta-{1\over4})\Vert\vec{b_i}^*\Vert^2\),其本质意义是在说后一个正交化向量\(\vec{b_{i+1}}^*\)的长度不能比前一个正交化向量\(\vec{b_i}^*\)短太多(下界被确定为了\((\delta-{1\over4})\Vert\vec{b_i}^*\Vert^2\))。如果没有这个条件,施密特正交化后的向量长度可能会急剧衰减,导致基极其扁平化;加上这个条件后,基的长度会被强制进行某种排序。
举个例子:设向量\(\vec{b_1}=\left(\begin{matrix}2\\1\end{matrix}\right),\vec{b_2}=\left(\begin{matrix}4\\4\end{matrix}\right)\),由于\(Gram-Schmidt\ orthogonalization\)的顺序会影响其最终的向量结果,但是我们希望找到一组更“好”的正交基,所谓的好就是“不扁平”,如下图,我们会认为蓝色系(蓝色与青色)的正交基是要比红色系(橙色与红色)的正交基要更“好”。

在下面介绍的\(LLL\)算法的迭代过程中,如果检测到当前的正交基状态像“红色系箭头”这样出现了剧烈的长度衰减,即\(\delta\Vert\vec{b_i}^*\Vert^2>\Vert\mu_{i+1,i}\vec{b_i}^*+\vec{b_{i+1}}^*\Vert^2\),就会强制交换两个原向量的顺序,交换后,系统就转化成了“蓝色系箭头”的均衡状态。
-
为了更直观地分析\(LLL-Reduced\ basis\)的两个条件,以\({\vec{b_1}^*\over\Vert\vec{b_1}^*\Vert},\cdots,{\vec{b_n}^*\over\Vert\vec{b_n}^*\Vert}\)为基表示原基\(B=\{\vec{b_1},\cdots,\vec{b_n}\}\),那么就有
\[B=\left(\begin{matrix}{\vec{b_1}^*\over\Vert\vec{b_1}^*\Vert} & {\vec{b_2}^*\over\Vert\vec{b_2}^*\Vert} & {\vec{b_3}^*\over\Vert\vec{b_3}^*\Vert} & \cdots & {\vec{b_n}^*\over\Vert\vec{b_n}^*\Vert}\end{matrix}\right)\cdot\left(\begin{matrix}\Vert\vec{b_1}^*\Vert & \mu_{2,1}\Vert\vec{b_1}^*\Vert & \mu_{3,1}\Vert\vec{b_1}^*\Vert & \cdots & \mu_{n,1}\Vert\vec{b_1}^*\Vert\\0 & \Vert\vec{b_2}^*\Vert & \mu_{3,2}\Vert\vec{b_2}^*\Vert & \cdots & \mu_{n,2}\Vert\vec{b_2}^*\Vert\\0 & 0 & \Vert\vec{b_3}^*\Vert & \cdots & \mu_{n,3}\Vert\vec{b_3}^*\Vert\\\vdots & \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & 0 & \cdots & \Vert\vec{b_n}^*\Vert\end{matrix}\right) \]- 设\(B\)在\(\{{\vec{b_1}^*\over\Vert\vec{b_1}^*\Vert},\cdots,{\vec{b_n}^*\over\Vert\vec{b_n}^*\Vert}\}\)的坐标矩阵为\(L\),此时\(Reduced\ basis\)中的条件\(1\)代入\(L\),矩阵的第\(i\)列、第\(j\)行(\(j<i\))的元素是\(\mu_{i,j}\Vert\vec{b_j}^*\Vert\),因为\(\mu_{i,j}\leq{1\over2}\),所以这个元素的绝对值\(\vert\mu_{i,j}\vert\Vert\vec{b_j}^*\Vert\leq{1\over2}\Vert\vec{b_j}^*\Vert\),而\(\Vert\vec{b_j}^*\Vert\)正好是同一行(第\(j\)行)对角线上的元素,因此第\(1\)条性质保证了任何非对角线元素的绝对值最多是同一行对角线元素值的一半。即:\[\left(\begin{matrix}\Vert\vec{b_1}^*\Vert & \leq{1\over2}\Vert\vec{b_1}^*\Vert & \leq{1\over2}\Vert\vec{b_1}^*\Vert & \cdots & \leq{1\over2}\Vert\vec{b_1}^*\Vert\\0 & \Vert\vec{b_2}^*\Vert & \leq{1\over2}\Vert\vec{b_2}^*\Vert & \cdots & \leq{1\over2}\Vert\vec{b_2}^*\Vert\\0 & 0 & \Vert\vec{b_3}^*\Vert & \cdots & \leq{1\over2}\Vert\vec{b_3}^*\Vert\\\vdots & \vdots & \vdots & \ddots & \vdots \\0 & 0 & 0 & \cdots & \Vert\vec{b_n}^*\Vert\end{matrix}\right) \]
这保证了整个矩阵的主导地位集中在对角线上,非对角线元素被极大的限制。
2. 条件\(2\)为\(\delta\Vert\vec{b_i}^*\Vert^2\leq\Vert\mu_{i+1,i}\vec{b_i}^*+\vec{b_{i+1}}^*\Vert^2=\mu_{i+1,i}^2\Vert\vec{b_i}^*\Vert^2+\Vert\vec{b_{i+1}}^*\Vert^2\),现在我们观察矩阵相邻两列\(i\)和\(i+1\),并取它们相交处的\(2×2\)连续对角子块,这个子块如下:\[T=\left(\begin{matrix}\Vert\vec{b_i}^*\Vert & \mu_{i+1,i}\Vert\vec{b_i}^*\Vert\\0 & \Vert\vec{b_{i+1}}^*\Vert\end{matrix}\right) \]- \(T\)的第一列向量长度的平方为\(\Vert\vec{b_i}^*\Vert^2+0^2=\Vert\vec{b_i}^*\Vert^2\)
- \(T\)的第二列向量长度的平方为\((\mu_{i+1,i}\Vert\vec{b_i}^*\Vert)^2+\Vert\vec{b_{i+1}}^*\Vert^2\)
- 可以看到洛瓦兹不等式的右边就是\(T\)第二列向量长度的平方,因此约减基的条件\(2\)可以等价为:在这个局部\(2×2\)子块中,第二列向量的长度平方≥\(\delta\)×第一列向量的长度平方,这意味着在\(L\)的任意\(2×2\)连续对角子块中,第二列的长度几乎和第一列一样长。(这里的“几乎”是由\(\delta\)决定的缓冲因子,保证正交化向量不要衰减的太快)
- 设\(B\)在\(\{{\vec{b_1}^*\over\Vert\vec{b_1}^*\Vert},\cdots,{\vec{b_n}^*\over\Vert\vec{b_n}^*\Vert}\}\)的坐标矩阵为\(L\),此时\(Reduced\ basis\)中的条件\(1\)代入\(L\),矩阵的第\(i\)列、第\(j\)行(\(j<i\))的元素是\(\mu_{i,j}\Vert\vec{b_j}^*\Vert\),因为\(\mu_{i,j}\leq{1\over2}\),所以这个元素的绝对值\(\vert\mu_{i,j}\vert\Vert\vec{b_j}^*\Vert\leq{1\over2}\Vert\vec{b_j}^*\Vert\),而\(\Vert\vec{b_j}^*\Vert\)正好是同一行(第\(j\)行)对角线上的元素,因此第\(1\)条性质保证了任何非对角线元素的绝对值最多是同一行对角线元素值的一半。即:
-
可以证明,总是能够将一个基转化为\(Reduced\ basis\),而这个转化的过程就是\(LLL\)算法的功能。
-
\(LLL-Reduced\ basis\)的一个重要性质是其第一个向量相对较短,如下命题所示。
命题1:\(Let\ \vec{b_1},\cdots,\vec{b_n}\in\mathbb{R}^n\ be\ a\ \delta-LLL-reduced\ basis.Then\ \Vert\vec{b_1}\Vert\leq({2\over\sqrt{4\delta-1}})^{n-1}\lambda_1(\mathcal{L})\)。当\(\delta={3\over4}\)时,该命题形式为\(\Vert\vec{b_1}\Vert\leq2^{n-1\over2}\lambda_1(\mathcal{L})\)。
证明:
Successive minima中我们证明了\(\lambda_1(\mathcal{L})\ge min_i\{\vec{b_i}^*\}\)
由\(LLL\)的第\(2\)个条件(洛瓦兹条件)可知:\(\Vert\vec{b_{i+1}}\Vert^2\ge(\delta-{1\over4})\Vert\vec{b_i}^*\Vert^2\)
显然有\(\Vert\vec{b_n}^*\Vert^2\ge(\delta-{1\over4})\Vert\vec{b_{n-1}}^*\Vert^2\ge\cdots\ge(\delta-{1\over4})^{n-1}\Vert\vec{b_1}^*\Vert^2\rightarrow \Vert\vec{b_i}^*\Vert^2\ge(\delta-{1\over4})^{i-1}\Vert\vec{b_1}^*\Vert^2\)
在\(Gram-Schmidt\ orthogonalization\)中,\(\vec{b_1}=\vec{b_1}^*\),所以最后一项可以写成\((\delta-{1\over4})^{n-1}\Vert\vec{b_1}\Vert^2\rightarrow \Vert\vec{b_i}^*\Vert^2\ge(\delta-{1\over4})^{i-1}\Vert\vec{b_1}\Vert^2\rightarrow \Vert\vec{b_1}\Vert\leq(\delta-{1\over4})^{-{i-1\over2}}\Vert\vec{b_i}^*\Vert\)。
因为\({1\over4}<\delta<1\rightarrow 0<\delta-{1\over4}<{3\over4}\),所以\(\Vert\vec{b_1}\Vert\leq(\delta-{1\over4})^{-{i-1\over2}}\Vert\vec{b_i}^*\Vert\leq(\delta-{1\over4})^{-{n-1\over2}}\Vert\vec{b_i}^*\Vert\)。
结合连续极小值的下界,可以推得\(\Vert\vec{b_1}\Vert\leq(\delta-{1\over4})^{-{n-1\over2}}\lambda(\mathcal{L})\rightarrow \Vert\vec{b_1}\Vert\leq({2\over\sqrt{4\delta-1}})^{n-1}\lambda_1(\mathcal{L})\)。 -
至此,完成了\(LLL\ reduced\ basis\)的定义,并且证明了这组基的第一个向量满足\(\leq(\delta-{1\over4})^{n-1}\lambda_1(\mathcal{L})\),假设我们能够从给定的输入基中生成一个\(\delta-LLL\)约减基,俺么我们可以将\(\vec{b_1}\)作为答案返回,回应了我们可以找到\(SVP\)问题的一个近似解。
\(The\ LLL\ Algorithm\)
- 输入:格基\(\{\vec{b_1},\cdots,\vec{b_n}\vert\vec{b_i}\in\mathbb{Z}^n\}\)
- \(\mathcal{L}(B)\)的\(\delta-LLL\)约减基。
上述算法过程中的\(Reduction\ Step\)中的\(\lceil\cdot\rfloor\)表示四舍五入到最近的整数,例如\(\lceil3.3\rfloor=3\)且\(\lceil3.8\rfloor=4\)。
- 观察\(LLL\)算法的执行流程,\(Swap\ Step\)保证了约减基的第\(2\)个性质。因为如果算法最终终止且有输出,那么它的输出一定是满足洛瓦兹条件的。
- \(Reduction\ Step\)处理了第\(1\)个性质,下面着重讲解一下这一过程,首先注意到整个\(Reduction\ Step\)中,\(Gram-Schmidt\ basis\)并没有改变(因此不需要重新计算\(\vec{b_1}^*,\cdots,\vec{b_n}^*\))。这是因为我们只执行了形式为\(\vec{b_i}=\vec{b_i}+a\vec{b_j}\)的列变换,其中\(i>j\)且\(a\in\mathbb{Z}\),这样的操作不会改变\(Gram-Schmidt\ orthogonalization\)的结果。
在外层循环的第\(i\)次迭代中,\(Reduction\ Step\)确保了对于任何\(j<i\),\(\vec{b_i}\)在\(\vec{b_j}^*\)上的投影的绝对值最多为\({1\over2}\Vert\vec{b_j}^*\Vert\),特别需要注意的是内层循环从\(i-1\)到\(1\)非常重要。- 为什么\(Gram-Schmidt\ basis\)不改变?
\(Gram-Schmidt\ orthogonalization\)的本质是由前\(k\)个原向量生成前\(k\)个正交向量。操作\(\vec{b_i}\leftarrow\vec{b_i}-c_{i,j}\vec{b_j}[i<j]\)只是把前面的基向量加到了后面的基向量上。因为\(Gram-Schmidt\ orthogonalization\)中的\(\vec{b_i}^*\)的几何意义就是“原向量\(\vec{b_i}\)剔除掉前\(i-1\)个向量张成空间的分量,剩下的那部分垂直的分量”,而\(Reduction\ Step\)的操作并不会改变前\(i-1\)个向量张成的空间,前\(i-1\)个向量张成的线性子空间并没有任何改变,因此它们生成的正交基也维持原状。
代数证明,我们可以举个例子验证一下:假设我们现在迭代到\(i=3\),此时已经经历过\(\vec{b_2}=\vec{b_2}-c_{2,1}\vec{b_1}\),而在\(\vec{b_3}=\vec{b_3}-c_{3,2}\vec{b_2}\)中,\(c_{3,2}\)的计算是需要用到\(\vec{b_2}^*\)的,我们需要证明\(\vec{b_2}^*\)并没有因为\(\vec{b_2}\)的改变而改变。证明:
设\(\vec{b_2}'=\vec{b_2}-c\vec{b_1}\),利用新的\(\vec{b_2}'\)去计算正交基\({\vec{b_2}^*}'=\vec{b_2}'-{\left<\vec{b_2}',\vec{b_1}^*\right>\over\left<\vec{b_1}^*,\vec{b_1}^*\right>}\cdot\vec{b_1}^*\),代入\(\vec{b_2}'\),得到\({\vec{b_2}^*}'=(\vec{b_2}-c\vec{b_1})-{\left<(\vec{b_2}-c\vec{b_1},\vec{b_1}^*)\right>\over\left<\vec{b_1}^*,\vec{b_1}^*\right>}\rightarrow {\vec{b_2}^*}'=\vec{b_2}-c\vec{b_1}-\left({\left<\vec{b_2},\vec{b_1}^*\right>\over\left<\vec{b_1}^*,\vec{b_1}^*\right>}-{c\left<\vec{b_1},\vec{b_1}^*\right>\over\left<\vec{b_1}^*,\vec{b_1}^*\right>}\right)\vec{b_1}^*\rightarrow {\vec{b_2}^*}'=\vec{b_2}-c\vec{b_1}-\left({\left<\vec{b_2},\vec{b_1}^*\right>\over\left<\vec{b_1}^*,\vec{b_1}^*\right>}-c\right)\vec{b_1}^*\),再向下推导可以证明\({\vec{b_2}^*}'=\vec{b_2}^*\),因此在\(i=3\)等后续需要使用前面的正交基时,我们并不需要更新正交基。 - 为什么内层循环必须是倒序(\(j\)从\(i-1\)递减至\(1\))?
这是\(LLL\)算法实现中容易被忽略的细节。假设我们在处理\(\vec{b_i}\),并需要约化它在前面所有正交基上的投影系数。如果正向枚举,当我们减去\(c_{i,j}\vec{b_i}\)时,由于\(\vec{b_j}\)不仅包含了\(\vec{b_j}^*\)的分量,还包含了\(\vec{b_{j-1}}^*\)、\(\vec{b_{j-2}}^*\)等更前面分量,这会导致已经被约化过的更小索引的系数再次被破坏。而倒序执行可以避免这个问题:当我们约化\(\vec{b_j}^*\)方向的系数时,引入的变化只涉及更前面的方向,这样层层递减,前面的系数会被不断更新,但当前处理完毕的较大索引方向系数将不再受影响。
需要注意的是,在内层迭代的过程中\(c_{i,j}\)会改变,虽然\(\vec{b_j}^*\)并没有发生改变,但是\(\vec{b_i}\)在不断地更新呢。因为\(\vec{b_j}=\vec{b_j}^*+\mu_{j,j-1}\vec{b_{j-1}}^*+\mu_{j,j-2}\vec{b_{j-2}}^*+\cdots+\mu_{j,1}\vec{b_1}^*\),所以\(\vec{b_j}\)只包含\(\vec{b_j}^*\)以及比\(j\)更小地正交基成分,在约减\(\vec{b_j}\)时,我们执行的操作其实是想消除\(\vec{b_i}\)在\(\vec{b_j}^*\)方向上的投影系数\(\mu_{i,j}\)。此时,你减去一个\(c_{i,j}\vec{b_j}\),它会产生我们目的之外的效果,那就是改变了\(\vec{b_{j-1}}^*\cdots\)方向上的投影系数,从后往前的规则是由正交化决定的。
- 为什么\(Gram-Schmidt\ basis\)不改变?
- 正确性证明:如果上述\(LLL\)过程最终终止,那么其输出是由输入基\(\vec{b_1},\cdots,\vec{b_n}\)张成的格的\(\delta-LLL\)约减基。
证明:
我们需要证明\(LLL\)算法的输出是\(\mathcal{L}(B)\)的基,并且满足\(\delta-LLL\ Reducted\ basis\)的两个条件。- \(\delta-LLL\ Reducted\ basis\)的第\(2\)个条件由\(Swap\ Step\)强制保证。
- 算法输出确实是\(\mathcal{L}(B)\)的基是因为我们只执行了\(\vec{b_i}\leftarrow\vec{b_i}+a\vec{b_j}\)的列操作,其中\(i≠j\)且\(a\in\mathbb{Z}\)(这种幺模变换不会改变格本身)
- \(Reduction\ Step\)之后,\(\vec{b_1},\cdots,\vec{b_n}\)满足对于所有\(i>j\),\(\mu_{i,j}\leq{1\over2}\):
在\(Reduction\ Step\)的过程中,\(Gram-Schmidt\ basis\)不发生变化。考虑某个\(i>j\),并考虑在外层循环第\(i\)次迭代中,内存循环运行至第\(j\)次迭代时的状态,此时\(\mu_{i,j}\)可以被写成:\[\mu_{i,j}=\left\vert{\left<\vec{b_i}-c_{i,j}\vec{b_j},\vec{b_j}^*\right>\over\left<\vec{b_j}^*,\vec{b_j}^*\right>}\right\vert=\left\vert{\left<\vec{b_i},\vec{b_j}^*\right>\over\left<\vec{b_j}^*,\vec{b_j}^*\right>}-\left\lceil{\left<\vec{b_i},\vec{b_j}^*\right>\over\left<\vec{b_j}^*,\vec{b_j}^*\right>}\right\rfloor \cdot{\left<\vec{b_j},\vec{b_j}^*\right>\over\left<\vec{b_j}^*,\vec{b_j}^*\right>}\right\vert\leq {1\over 2} \]其中,第一个等式是由\(Reduction\ Step\)的定义得到的,最后一个不等式之所以成立,是因为\(\left<\vec{b_j},\vec{b_j}^*\right>=\left<\vec{b_j}^*,\vec{b_j}^*\right>\),一个实数减去最接近它的整数,其绝对值必然小于等于\({1\over2}\)。
- 至此,我们完成了\(LLL\)算法的描述并且证明了其正确性,也就是说,给定\(\Lambda\)的基\(B\),作为\(LLL\)算法的输入,当\(LLL\)算法终止时,我们就能得到\(\Lambda\)的\(\delta-LLL\ reduced\ basis\)。那么接下来的任务就是证明\(LLL\)算法对于任何的输出都能在多项式时间内终止。
\(Analyzing\ the\ Running\ Time\)
-
为了证明\(LLL\)算法总体运行时间是输入规模的多项式函数,分为两步进行:界定总的迭代次数(证明不会出现死循环)、界定单次迭代的运行时间(防止计算过程中的数值位宽爆炸)。
-
定义一个输入规模的粗略下界\(M:=max\{n,log(max_i\Vert\vec{b_i}\Vert)\}\)。这是因为表示\(n\)个向量至少需要\(n\)个比特,而比哦是一个范数(长度)为\(r\)的向量至少需要\(log\ r\)个比特。接下来只需要证明算法的整体运行时间是\(M\)的多项式。
-
引理4:迭代次数是\(M\)的多项式
- 势函数:设\(B=\{\vec{b_1},\cdots,\vec{b_n}\}\)为格基。基\(B\)的势\(\mathcal{D}_B\)定义为\(\prod_{i=1}^n\Vert\vec{b_i}^*\Vert^{n-i+1}=\prod_{i=1}^n\mathcal{D}_{B,i}\),其中\(\mathcal{D}_{B,i}:=det(\Lambda_i)\),而\(\Lambda_i\)是由前\(i\)个基向量\(\vec{b_1},\cdots,\vec{b_i}\)张成的格。
可以把势函数想象成算法运行时的“总能量”,这个公式赋予了排在前面的基向量更大的权重(指数\(n-i+1\)更大)。并且因为 \(\vert{}\vert{}\tilde{b}_i\vert{}\vert{} \le \vert{}\vert{}b_i\vert{}\vert{}\),势函数的初始值 \(\mathcal{D}_{B,0}\) 存在一个上界 \((\max_i \vert{}\vert{}b_i\vert{}\vert{})^{n(n+1)/2}\)。这个初始值的对数是 \(M\) 的多项式。
- 子格行列式:其中\(\mathcal{D}_{B,i}:=det\ \Lambda_i\),而\(\Lambda_i\)是由前\(i\)个基向量\(\vec{b_1},\cdots,\vec{b_i}\)张成的格。
- 当且仅当发生\(Swap\ Step\)(如\(\vec{b_i}\)与\(\vec{b_{i+1}}\)交换)时,只有子格\(\Lambda_i\)对应的\(\mathcal{D}_{B,i}\)会改变为\(\mathcal{D}_{B,i}'\),由于\(GS-basis\)并没有改变,因此\(\mathcal{D}_B\)并没有改变。
- 此时势能比值为:\({\mathcal{D}_{B,i}'\over\mathcal{D}_{B,i}}={det\ \mathcal{L}(\vec{b_1},\cdots,\vec{b_{i-1}},\vec{b_{i+1}})\over det\ \mathcal{L}(\vec{b_1},\cdots,\vec{b_i})}={(\prod_{j=1}^{i-1}\Vert\vec{b_j}^*\Vert)\Vert\mu_{i+1,i}\vec{b_i}^*+\vec{b_{i+1}}^*\Vert\over\prod_{j=1}^i\Vert\vec{b_j}^*\Vert}={\Vert\mu_{i+1,i}\vec{b_i}^*+\vec{b_{i+1}}^*\Vert\over\Vert\vec{b_i}^*\Vert}<\sqrt{\delta}\)
- 由于触发交换的条件使得上式小于\(\sqrt{\delta}\),总迭代次数被对数严格限制,最大不超过\({1\over log({1\over\sqrt{\delta}})}\cdot{n(n+1)\over2}log(max_i\Vert\vec{b_i}\Vert)\),从而证明了多项式步数。
形象的解释就是算法之所以不会死循环,是因为这个“总能量”在不断衰减,且存在底线: - 约化步骤不改变势能:在约化步骤中,正交基没有改变,所以势函数\(\mathcal{D}_B\)保持不变。
- 交换步骤严格降低势能:假设\(\vec{b_i}\)与\(\vec{b_{i+1}}\)发生了交换。对于所有\(k≠i\),\(\Lambda_k\)不变,因此只有\(\mathcal{D}_{B,i}\)发生改变。经过上述推导,由于触发交换的条件是洛瓦兹条件被打破,交换后的新势能与旧势能之比严格小于\(\sqrt{\delta}\)。
- 由于\(\delta<1\),每一次交换都会使势函数\(\mathcal{D}_B\)乘上一个小于\(1\)的系数进行缩水。由于\(\mathcal{D}_B\)始终是一个非零整数(最小为\(1\)),它不可能无限次地缩小。因此,交换操作不可能无限进行下去,算法必定咋多项式步数内终止。即使 \(\delta\) 取一个极其接近 1 的值(如 \(\frac{1}{4} + (\frac{3}{4})^{\frac{n}{n-1}}\)),运行时间依然是多项式的,并且此时 LLL 算法能达到其最佳近似因子 \((\frac{2}{\sqrt{3}})^n\)。若需更好的因子,则需要 Schnorr 算法。
-
引理6:单次迭代的运行时间是\(M\)的多项式
- 断言2:利用克莱姆法则界定正交基位宽
为了防止数字爆炸,需要证明\(\vec{b_i}^*\)可以被多项式空间表示。- 设\(\vec{b_i}^*=\vec{b_i}+\sum_{j=1}^{i-1}a_j\vec{b_j}\)。由于\(\vec{b_i}^*\)与\(\vec{b_l}\)正交,可构建线性方程组:\(a_1\left<\vec{b_1},\vec{b_l}\right>+\cdots+a_{i-1}\left<\vec{b_{i-1}},\vec{b_l}\right>=-\left<\vec{b_i},\vec{b_l}\right>\)
- 利用克莱姆法则求解\(a_j\),其分母为\((det\ \Lambda_{i-1})\)。这证明了\(\mathcal{D}_{B,i}^2\vec{b_i}^*\)以及\(\mathcal{D}_B^2\vec{b_i}^*\)必为整数向量。
- 结合定义,其长度上限为\(\Vert\vec{b_i}^*\Vert={\mathcal{D}_{B,i}\over\prod_{j=1}^{i-1}\Vert\vec{b_j}^*\Vert}\leq\mathcal{D}_{B,i}\prod_{j=1}^{i-1}\mathcal{D}_{B,j}^2\leq\mathcal{D}_B^2\)
- 断言3:约化步骤中的原基向量界定
即使在对\(\vec{b_i}\)进行减法操作,其长度膨胀也是可控的。- 在约化步骤后,\(\Vert\vec{b_i}\Vert^2=\Vert\vec{b_i}^*\Vert^2+\sum_{j=1}^{i-1}\mu_{i,j}^2\Vert\vec{b_j}^*\Vert^2\leq\mathcal{D}_B^4+{n\over4}\mathcal{D}_B^4\leq n\mathcal{D}_B^4\)
- 在约化操作中,系数满足\(\vert c_{i,j}\vert=\vert\lceil{\left<\vec{b_i},\vec{b_j}^*\right>\over\left<\vec{b_j}^*,\vec{b_j}^*\right>}\rfloor\vert\leq{\Vert\vec{b_i}\Vert\over\Vert\vec{b_j}^*\Vert}+1\leq 2\mathcal{D}_B^2\Vert\vec{b_i}\Vert\)。
- 每次减去\(c_{i,j}\vec{b_j}\)后,\(\Vert\vec{b_i}\Vert\)增加的系数小于\(4n\mathcal{D}_B^4\)。在至多\(n\)次内循环中,范数最多扩大\((4n\mathcal{D}_B)^{4n}\)倍,仍处于多项式位宽内。
- 断言2:利用克莱姆法则界定正交基位宽
\(References\)
- Oded Regev. Lattices in Computer Science Lecture 2: LLL Algorithm [Z]. Tel Aviv University, 2004.

格密码基础 —— LLL Algorithm
浙公网安备 33010602011771号