格基规约算法 ¶
Lenstra–Lenstra–Lovasz¶
基本介绍 ¶
LLL 算法就是在格上找到一组基,满足如下效果
而且,这种方法生成的基所具有的如下性质是非常有用的
简单应用 ¶
这里我举一下 LLL paper 中给的第二个例子。给定 n 个实数 αi,...,αn,找到这 n 个数的有理线性逼近,即找到 n 个数 mi,使得 n∑i=1miαi 尽可能等于 0。 我们可以构造这样的矩阵,这里 ai 为 αi 的有理逼近。
A=[100⋯0ca1010⋯0ca2001⋯0ca3⋮⋮⋮⋱⋮000⋯1can]
矩阵为 n*(n+1) 的,我们可以根据格求行列式的方法来求一下这个格对应的行列式。
det(L)=√AAT
我们进一步考虑这样的矩阵
A=[100⋯0a1010⋯0a2001⋯0a3⋮⋮⋮⋱⋮000⋯1an]
那么
AAT=[1+a21a1a2a1a3⋯a1ana2a11+a22a2a3⋯a2ana3a1a3a21+a23⋯a3an⋮⋮⋮⋱⋮ana1ana2ana3⋯1+a2n]
进一步我们从低维到高维大概试一试(严格证明,可以考虑添加一行和一列,左上角为 1),得到格的行列式为
√1+n∑i=1α2i
可以参见考研宇哥的如下证明
那么经过 LLL 算法后,我们可以获得
||b1||≤2n−14(1+n∑i=1α2i)12(n+1)
一般来说后一项在开 n 次方时趋向于 1,因为 ai 都是常数,一般不会和 n 相关,所以
||b1||≤2n−14∗k
k 比较小。此外,b1 又是原向量的线性组合,那么
b1[n]=n∑i=1mic∗ai=cn∑i=1mi∗ai
显然如果 c 足够大,那么后面的求和必须足够小,才可以满足上面的约束。
参考 ¶
- Survey: Lattice Reduction Attacks on RSA