格密码
了解和学习中
参考
2012年BIU密码学冬令营-04-Basic Cryptanalysis(中文字幕)_哔哩哔哩_bilibili
定义
格(lattice)是一种数学结构,给定一组线性无关的非零基向量 (basis)(称作格基)的整系数线性组合,格就是这些基向量的线性组合
简单来说给定一组格基(向量) a1, a2, …, an,对任意的整数 c1, c2, …, cn,并将其作为格基的系数,则 c1a1, c2a2, …, cnan都是属于这个格的向量,而n为该格的维数。

这里的(2,2)就是由向量i(1,0)和向量j(0,1)组成的(2,2)=2i+2j,这就是一个基础的二维格。
再这个二维格上的任意一点都可以由这对基向量组成,所以我们通常用格基代表格,所以就可以写成
一些补充定义
基
在向量空间中的每个点,都可以由基的线性变化得到,被称为基向量。 一个格可能会有很多的基并不唯一构成,例子如上。
正交基
两个基直接是相互垂直的
格基规约
找到最接近正交基的基向量
格运算(行列式运算)
1 | #sage |
所以我们就可以将各种这种向量问题转化为矩阵计算的方式,同样我们可以反过来将计算矩阵转化为空间中的图示。
格密码的难题
而在格学说里,有两个知名难题:
SVP (最短向量问题, Shortest Vector Problem): 最短向量问题(The Shortest Vector Problem,SVP)是指在格L中找到一个最短的非零向量,即寻找一个v满足欧几里得范数最小(指该集合的每一个元素的平方和再开方)范数就是指长度
CVP (最近向量问题, Closest Vector Problem): 是指一个向量w不在格L中,然后在格L上找到一个向量v与w最接近。
上面的两个问题都在广义上被证明是 NP-hard 问题,求解起来十分困难,而且会随维数的增加而变得越来越困难。有些问题可以通过对CVP加上一维之后转变为SVP问题,因为SVP相比CVP稍微简单一些
LLL算法
LLL算法(Lenstra-Lenstra-Lovász算法)是一种求解最短向量问题的近似算法。其基本思路是将给定的格分解为一个格基,然后找到一个新的格基,其基向量更短,并且更接近于原格。这个过程可以通过不断地将格分解为更小的子格并找到更短的基向量来实现。
具体的来说就是根据给定的格基通过规约的方式在当前的格的空间中得到一组更简单的格(类似辗转相除的方式),然后优化得到的最优格基便是我们所需要的最短非零向量。
但是LL算法的使用前提要满足Hermite定理
Hermite定理
这个定理给出了最短向量的上界
对于n维的格ℒ, 都包含一个非零向量v⃗ ∈ ℒ, 满足
其中n表示维度,也就是基向量的个数
det(L) = 行列式的值
施密特正交化
这个定理给出了最短向量的下界
其作用是把一组基转换成一组正交基。

如图所示
将基b1, b2转变为了
过程如下 首先, 给定一组线性无关的向量
施密特正交化应用(QR分解)
对于一组格基
- 该矩阵是上三角行列式所以行列式
- 我们能得到λ1的下界,即λ1 ≥ min (||b̃i||)
严谨的证明
证明: 设x ∈ ℤn是任意的非零整数向量,让我们证明
LLL算法的应用
在n维空间中,LLL算法实际上即使要让施密特正交化的程度达到最大化
官方解答是,LLL算法要找一个基,使得Gram-Schmidt向量的正交程度不会下降太快
LLL算法的实际运用是这样的
LLL的性质
所有的 |μi, j| ≤ 0.5
(这个性质的大致意思是得到的向量不能太短)
由上述两个性质我们可以得到一个结论
LLL的目标就是要得到满足这个要去的基
LLL算法的实施过程
我们有一个基用b表示,写成列向量的形式
中间是施密特正交基
然后在正交基上乘以右边的矩阵才能得到b
如何使|μi, j| ≤ 0.5
减去足够多次的第一列即可满足
如何确保向量下降的不够快
如果下降的过快就与前一列的向量交换位置,然后就会得到一个更好的基(类似于辗转相除的思想)