1. Closest Vector Problem
可以将近似 CVP 定义为搜索(search)问题、优化(optimization)问题或判定(decision)问题(后者通常称为Gap问题)。在以下定义中, γ ≥ 1 \gamma ≥ 1 γ≥1 是近似因子。 通过设置 γ = 1 \gamma = 1 γ=1,我们获得了问题的确切版本。
定义1 ( C V P γ CVP_\gamma CVPγ, SEARCH)给定一组格基 B ∈ Z m × n B\in \mathbb{Z}^{m \times n} B∈Zm×n 和一个点 t ∈ R n \pmb t\in \mathbb{R}^n ttt∈Rn,要求找到一个点 x ∈ L ( B ) \pmb x\in \mathcal{L}(B) xxx∈L(B),满足 ∀ y ∈ L ( B ) , ∣ ∣ x − t ∣ ∣ ≤ γ ∣ ∣ y − t ∣ ∣ \forall \pmb y \in \mathcal{L}(B), ||\pmb{x-t}|| \leq \gamma||\pmb{y-t}|| ∀yyy∈L(B),∣∣x−tx−tx−t∣∣≤γ∣∣y−ty−ty−t∣∣。
定义2 ( C V P γ CVP_\gamma CVPγ, OPTIMIZATION)) 给定一组格基 B ∈ Z m × n B\in \mathbb{Z}^{m \times n} B∈Zm×n 和一个点 t ∈ R n \pmb t\in \mathbb{R}^n ttt∈Rn,要求找到一个数 r ∈ Q r \in \mathbb Q r∈Q,满足 d i s t ( t , L ( B ) ) ≤ r ≤ γ ⋅ d i s t ( t , L ( B ) ) dist(\pmb t,\mathcal{L}(B)) \leq r \leq \gamma \cdot dist(\pmb t,\mathcal{L}(B)) dist(ttt,L(B))≤r≤γ⋅dist(ttt,L(B))。
定义3( C V P γ CVP_\gamma CVPγ, DECISION))给定一组格基 B ∈ Z m × n B\in \mathbb{Z}^{m \times n} B∈Zm×n ,一个点 t ∈ R n \pmb t\in \mathbb{R}^n ttt∈Rn和距离 r ∈ Q r \in \mathbb{Q} r∈Q,判定 d i s t ( t , L ( B ) ) ≤ r 或 d i s t ( t , L ( B ) ) > γ ⋅ r dist(\pmb t,\mathcal{L}(B))\leq r或dist(\pmb t,\mathcal{L}(B)) \gt \gamma \cdot r dist(ttt,L(B))≤r或dist(ttt,L(B))>γ⋅r。
下面描述了最接近向量问题(CVP)的近似算法。 该算法被称为最近平面算法,由 L. Babai 于 1986 年提出。它包含了一个 2 ( 2 3 ) n 2(\frac{2}{\sqrt 3})^n 2(32)n的近似系数,其中 n n n是格的维度。
2. The Nearest Plane Algorithm
该算法有两个主要的步骤。第一步,使用LLL约减输入的格基。第二步,寻找格基向量的整数组合,使得最接近目标向量 t \pmb t ttt。算法描述如下:
INPUT: 格基 B ∈ Z m × n , t ∈ R n B\in \mathbb{Z}^{m \times n},\pmb t \in \mathbb{R}^n B∈Zm×n,ttt∈Rn
OUTPUT: 一个向量 x ∈ L ( B ) \pmb x \in \mathcal{L}(B) xxx∈L(B)满足 ∣ ∣ ( x − t ) ∣ ∣ ≤ 2 n / 2 d i s t ( t , L ( B ) ) ||(\pmb{x-t})||\leq 2^{n/2} dist(\pmb t,\mathcal{L}(B)) ∣∣(x−tx−tx−t)∣∣≤2n/2dist(ttt,L(B))
-
Run δ − L L L \delta-LLL δ−LLL on B B B with δ = 3 4 \delta = \frac{3}{4} δ=43
-
b ← t \pmb b \gets \pmb t bbb←ttt
for j = n j=n j=n to 1 do
b ← b − c j b j \pmb b \gets \pmb b - c_j\pmb{b_j} bbb←bbb−cjbjbjbj, where c j = ⌈ < b , b ~ j > / < b ~ j , b ~ j > ⌋ c_j = \lceil<\pmb{b,\widetilde{b}_j}>/<\pmb{\widetilde{b}_j,\widetilde{b}_j}> \rfloor cj=⌈<b,b jb,b jb,b j>/<b j,b jb j,b jb j,b j>⌋
Output t − b \pmb{t-b} t−bt−bt−b
可以看出,该算法在输入维度大小上运行在多项式时间内。理解算法第二步的一种有用的方法如下。对于满秩格来说(m=n),令
b
~
1
/
∣
∣
b
~
1
∣
∣
,
.
.
.
,
b
~
n
/
∣
∣
b
~
n
∣
∣
\widetilde{\pmb b}_1/||\widetilde{\pmb b}_1||,...,\widetilde{\pmb b}_n/||\widetilde{\pmb b}_n||
bbb
1/∣∣bbb
1∣∣,...,bbb
n/∣∣bbb
n∣∣表示施密特正交化向量方向上的单位向量。则施密特正交化的过程可以写成以下的矩阵形式:
其中
μ
i
,
j
=
<
b
i
,
b
~
j
>
/
<
b
~
j
,
b
~
j
>
\mu_{i,j}=<\pmb{b}_i,\pmb{\widetilde b}_j>/<\pmb{\widetilde b}_j,\pmb{\widetilde b}_j>
μi,j=<bbbi,b
b
b
j>/<b
b
b
j,b
b
b
j>,令
B
B
B是格的一组基,那么
B
=
B
~
U
B=\widetilde BU
B=B
U。
其中
B
~
\widetilde B
B
是施密特化向量,
B
~
=
Q
D
\widetilde B=QD
B
=QD,其中
Q
Q
Q是正交矩阵(
Q
T
Q
=
I
Q^TQ=I
QTQ=I),
D
D
D是对角矩阵。因为旋转矩阵是正交矩阵,所以上述式子可以写成:
Q
T
B
=
(
∣
∣
b
~
1
∣
∣
μ
2
,
1
∣
∣
b
~
1
∣
∣
⋯
μ
n
,
1
∣
∣
b
~
1
∣
∣
∣
∣
b
~
2
∣
∣
⋯
μ
n
,
2
∣
∣
b
~
2
∣
∣
⋱
⋮
∣
∣
b
~
n
∣
∣
)
Q^TB=\left(\begin{matrix} ||\widetilde{\pmb{b}}_1|| & \mu_{2,1}||\widetilde{\pmb{b}}_1|| & \cdots &\mu_{n,1}||\widetilde{\pmb{b}}_1|| \\ & ||\widetilde{\pmb{b}}_2|| & \cdots & \mu_{n,2}||\widetilde{\pmb{b}}_2|| \\ & & \ddots & \vdots \\ & & & ||\widetilde{\pmb{b}}_n|| \end{matrix}\right)
QTB=⎝⎜⎜⎜⎛∣∣bbb
1∣∣μ2,1∣∣bbb
1∣∣∣∣bbb
2∣∣⋯⋯⋱μn,1∣∣bbb
1∣∣μn,2∣∣bbb
2∣∣⋮∣∣bbb
n∣∣⎠⎟⎟⎟⎞
即,我们可以将原始的格基旋转后得到新的基。
对于一般情况,我们可以对其进行扩展,然后我们可以将格基
B
B
B和目标向量
t
\pmb t
ttt写成以下形式:
B
=
(
∣
∣
b
~
1
∣
∣
∗
⋯
∗
0
∣
∣
b
~
2
∣
∣
⋯
∗
⋮
⋱
⋮
0
⋯
∣
∣
b
~
n
∣
∣
0
⋯
0
⋮
⋯
⋮
0
⋯
0
)
,
t
=
(
t
1
t
2
⋮
∗
∗
∗
⋮
t
n
)
B= \left( \begin{matrix} ||\widetilde{\pmb{b}}_1|| & * & \cdots & * \\ 0 & ||\widetilde{\pmb{b}}_2|| & \cdots & * \\ \vdots & & \ddots & \vdots \\ 0 & \cdots & & ||\widetilde{\pmb{b}}_n|| \\ 0 & \cdots & & 0 \\ \vdots & \cdots & & \vdots \\ 0 & \cdots & & 0 \\ \end{matrix} \right) , \pmb t = \left( \begin{matrix} t_1 \\ t_2\\ \vdots \\ *\\ *\\ *\\ \vdots \\ t_n \end{matrix} \right)
B=⎝⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎛∣∣bbb
1∣∣0⋮00⋮0∗∣∣bbb
2∣∣⋯⋯⋯⋯⋯⋯⋱∗∗⋮∣∣bbb
n∣∣0⋮0⎠⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎞,ttt=⎝⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎛t1t2⋮∗∗∗⋮tn⎠⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎞
最近平面算法通过寻找一个列向量的整数组合
(
c
1
,
.
.
.
,
c
n
)
(c_1,...,c_n)
(c1,...,cn),使得
x
=
(
c
1
,
.
.
.
,
c
n
)
T
∈
L
(
B
)
\pmb x=(c_1,...,c_n)^T \in \mathcal{L}(B)
xxx=(c1,...,cn)T∈L(B)最接近向量
t
\pmb t
ttt。算法中
b
←
b
−
c
j
b
j
\pmb b \gets \pmb b - c_j\pmb{b_j}
bbb←bbb−cjbjbjbj, where
c
j
=
⌈
<
b
,
b
~
j
>
/
<
b
~
j
,
b
~
j
>
⌋
c_j = \lceil<\pmb{b,\widetilde{b}_j}>/<\pmb{\widetilde{b}_j,\widetilde{b}_j}> \rfloor
cj=⌈<b,b
jb,b
jb,b
j>/<b
j,b
jb
j,b
jb
j,b
j>⌋这句话的意思是:找到的整数组合
(
c
1
,
.
.
.
,
c
n
)
(c_1,...,c_n)
(c1,...,cn)使得
t
\pmb t
ttt的第
i
i
i个坐标在
±
1
2
∣
∣
b
~
i
∣
∣
\pm{\frac{1}{2}} ||\pmb{\widetilde b}_i||
±21∣∣b
b
b
i∣∣的范围内。该算法首先找一个格基第
n
n
n列的整数倍使得
t
\pmb t
ttt的第
n
n
n个坐标在
±
1
2
∣
∣
b
~
n
∣
∣
\pm{\frac{1}{2}} ||\pmb{\widetilde b}_n||
±21∣∣b
b
b
n∣∣的范围内;然后继续找格基第
n
−
1
n-1
n−1列的整数倍,使得
t
\pmb t
ttt的第
n
−
1
n-1
n−1个坐标在
±
1
2
∣
∣
b
~
n
−
1
∣
∣
\pm{\frac{1}{2}} ||\pmb{\widetilde b}_{n-1}||
±21∣∣b
b
b
n−1∣∣的范围内;以此类推。以上描述可能有点抽象,我们现在考虑第二步的另一种等效描述。 这种描述是递归的,将最方便我们的分析。 它强调了最近平面算法的几何性质,这也解释了它的名字。如图1所示:
- 令 s \pmb s sss是 t \pmb t ttt在 s p a n ( b 1 , . . . , b n ) span(b_1,...,b_n) span(b1,...,bn)上的投影
- 找到一个超平面 H c H_c Hc使得超平面 H c = c b ~ n + s p a n ( b 1 , . . . , b n − 1 ) H_c=c\widetilde{\pmb b}_n + span(\pmb b_1,...,\pmb b_{n-1}) Hc=cbbb n+span(bbb1,...,bbbn−1)尽可能地接近 s \pmb s sss。
- 令 s ′ = s − c b n \pmb{s}'=\pmb s - c\pmb{b}_n sss′=sss−cbbbn。递归调用上述过程,其中输入为 s ′ 和 L ′ ( b 1 , . . . , b n − 1 ) \pmb{s}'和\mathcal{L'}(\pmb b_1,...,\pmb b_{n-1}) sss′和L′(bbb1,...,bbbn−1)。令 x ′ \pmb x' xxx′是递归的结果。
- 返回结果 x = x ′ + c b n \pmb x=\pmb x' + c\pmb b_n xxx=xxx′+cbbbn
很容易验证,上面确实等价于算法的第二步。 我们的第1步是将 t \pmb t ttt投影到 s p a n ( b 1 , . . . , b n ) span(\pmb b_1,...,\pmb b_n) span(bbb1,...,bbbn) 上。这一步是有意义的,这使得最接近 s \pmb s sss的格向量与最接近 t \pmb t ttt的格向量相同。在第2步,我们确定了子格 L ′ \mathcal{L'} L′的一个平移,即离 s \pmb s sss最近的一个格向量的位置。第三步,在找到的平移平面中,算法递归调用。更准确地说,在第3步和第4步中,我们在 H c = c b n + s p a n ( b 1 , . . . , b n − 1 ) H_c = c\pmb b_n + span(\pmb b_1,...,\pmb b_{n-1}) Hc=cbbbn+span(bbb1,...,bbbn−1)中计算出一个与 s 接近的向量。 由于 H c H_c Hc不是格(它不包含零向量),我们将它(与 s \pmb s sss一起)移动 − c b n -c\pmb b_n −cbbbn。 然后,当我们得到答案 x ′ x' x′时,我们将其移回 c b n c\pmb b_n cbbbn。 因此,答案 x x x确实是 H c = c b n + s p a n ( b 1 , . . . , b n − 1 ) H_c = c\pmb b_n + span(\pmb b_1,...,\pmb b_{n-1}) Hc=cbbbn+span(bbb1,...,bbbn−1)中最接近 s \pmb s sss的向量。
以二维格举例说明最近平面算法的过程:
给定一组格基 ( b 1 , b 2 ) (\pmb b_1,\pmb b_2) (bbb1,bbb2)和点 t \pmb t ttt,找到离 t \pmb t ttt最近的格向量,答案应为 x = 0 ⋅ b 1 + 1 ⋅ b 2 = b 2 \pmb x=0 \cdot \pmb b_1+1 \cdot \pmb b_2=\pmb b_2 xxx=0⋅bbb1+1⋅bbb2=bbb2。下面一步一步看如何确定 b 1 , b 2 \pmb b_1,\pmb b_2 bbb1,bbb2的系数。
假设算法第一步格基约减的结果为 ( b 1 , b 2 ) (\pmb b_1,\pmb b_2) (bbb1,bbb2),根据算法第二步:
令 b = t \pmb b=\pmb t bbb=ttt
当
i
=
2
时
i=2时
i=2时,
c
2
=
⌈
<
b
,
b
~
2
>
/
<
b
~
2
,
b
~
2
>
⌋
c_2=\lceil <\pmb b, \widetilde{\pmb b}_2>/<\widetilde{\pmb b}_2, \widetilde{\pmb b}_2> \rfloor
c2=⌈<bbb,bbb
2>/<bbb
2,bbb
2>⌋,这里理解为
b
\pmb b
bbb在
b
~
2
\widetilde{\pmb b}_2
bbb
2方向上的投影系数取整。将式子展开
<
b
,
b
~
2
>
=
∣
∣
b
∣
∣
⋅
∣
∣
b
2
∣
∣
⋅
c
o
s
(
θ
)
=
∣
∣
b
~
∣
∣
⋅
∣
∣
b
~
2
∣
∣
<\pmb b, \widetilde{\pmb b}_2>=||\pmb b||\cdot ||\pmb b_2|| \cdot cos(\theta) = ||\widetilde{\pmb b}|| \cdot ||\widetilde{\pmb b}_2||
<bbb,bbb
2>=∣∣bbb∣∣⋅∣∣bbb2∣∣⋅cos(θ)=∣∣bbb
∣∣⋅∣∣bbb
2∣∣,
所以
<
b
,
b
~
2
>
/
<
b
~
2
,
b
~
2
>
=
∣
∣
b
~
∣
∣
⋅
∣
∣
b
~
2
∣
∣
/
∣
∣
b
~
2
∣
∣
⋅
∣
∣
b
~
2
∣
∣
=
∣
∣
b
~
∣
∣
/
∣
∣
b
~
2
∣
∣
<\pmb b, \widetilde{\pmb b}_2>/<\widetilde{\pmb b}_2, \widetilde{\pmb b}_2>=||\widetilde{\pmb b}|| \cdot ||\widetilde{\pmb b}_2||/||\widetilde{\pmb b}_2|| \cdot ||\widetilde{\pmb b}_2||=||\widetilde{\pmb b}||/||\widetilde{\pmb b}_2||
<bbb,bbb
2>/<bbb
2,bbb
2>=∣∣bbb
∣∣⋅∣∣bbb
2∣∣/∣∣bbb
2∣∣⋅∣∣bbb
2∣∣=∣∣bbb
∣∣/∣∣bbb
2∣∣
所以对
⌈
<
b
,
b
~
2
>
/
<
b
~
2
,
b
~
2
>
⌋
\lceil <\pmb b, \widetilde{\pmb b}_2>/<\widetilde{\pmb b}_2, \widetilde{\pmb b}_2> \rfloor
⌈<bbb,bbb
2>/<bbb
2,bbb
2>⌋取整就得到
c
2
=
1
c_2=1
c2=1。然后更新
b
←
b
−
c
2
b
2
=
b
−
b
2
\pmb b \gets \pmb b-c_2\pmb b_2=\pmb b - \pmb b_2
bbb←bbb−c2bbb2=bbb−bbb2。
当i=1时, c 1 = ⌈ < b , b ~ 1 > / < b ~ 1 , b ~ 1 > ⌋ c_1=\lceil <\pmb b, \widetilde{\pmb b}_1>/<\widetilde{\pmb b}_1, \widetilde{\pmb b}_1> \rfloor c1=⌈<bbb,bbb 1>/<bbb 1,bbb 1>⌋,这里理解为 b \pmb b bbb在 b ~ 1 \widetilde{\pmb b}_1 bbb 1方向上投影系数取整,结果为 c 1 = 0 c_1=0 c1=0
所以最终输出结果为
t
−
b
\pmb t-\pmb b
ttt−bbb.
附录
超平面的定义
在几何学中,超平面是一个子空间,其维度比其环境空间的维度小一。 例如,如果空间是 3 维的,那么它的超平面就是 2 维平面,而如果空间是 2 维的,那么它的超平面就是 1 维的线。
施密特正交基的一种几何解释
第n个Gram-Schmidt向量 b ~ n \widetilde b_n b n 有很好的几何解释。考虑由所有向量 x ∈ R n x \in \mathbb{R}^n x∈Rn 定义的超平面,它的最后一个坐标固定为 c c c,
H
c
:
=
∑
i
=
1
n
−
1
a
i
b
i
+
c
b
n
H_c:={\sum_{i=1}^{n-1}a_i \pmb{b}_i + c\pmb{b}_n}
Hc:=i=1∑n−1aibbbi+cbbbn
下面通过画一个
n
−
1
n-1
n−1维的超平面来解释:
其中 H 0 是 n − 1 H_0是n-1 H0是n−1维的超平面,且 H c = H c + c b n H_c = H_c+c\pmb{b}_n Hc=Hc+cbbbn。但是由于 b n \pmb{b}_n bbbn一般不垂直于 H 0 H_0 H0, H 0 与 H c H_0与H_c H0与Hc之间的距离一般不等于 c ∣ ∣ b n ∣ ∣ c||\pmb{b}_n|| c∣∣bbbn∣∣。两者之间的距离应该等于 c b n c\pmb{b}_n cbbbn垂直于 H 0 H_0 H0的部分,即 c ∣ ∣ b ~ n ∣ ∣ c||\pmb{\widetilde b}_n|| c∣∣b b b n∣∣:
由格基 ( b 1 , . . . , b n ) (\pmb{b}_1,...,\pmb{b}_n) (bbb1,...,bbbn)构成的一个格向量的最后一个坐标是整数(当然其他坐标也是整数),所以对于整数 c c c,每一个格点都在超平面 H c H_c Hc内。举个例子,格可以被划分为 n − 1 n-1 n−1维格超平面, { , . . . , H − 1 , H 0 , H 1 , . . . , } \{,...,H_{-1},H_0,H_1,...,\} {,...,H−1,H0,H1,...,},相邻的超平面由 b ~ n \pmb{\widetilde b}_n b b b n分隔。每一个超平面都是由前 n − 1 n-1 n−1个基向量生成的子格 L ′ L^{'} L′复制而来。第 i i i个超平面是格 L ′ L^{'} L′平移 i b n i\pmb{b}_n ibbbn得到。下图是二维的描述:
当然,其他 Gram-Schmidt 向量也可以类似地解释。由前 n − 1 n-1 n−1个基向量生成的子格 L ′ L^{'} L′可以被划分为 n − 2 n-2 n−2维的超平面,每一个的间隔为 b ~ n − 1 \pmb{\widetilde {b}}_{n-1} b b b n−1。因为 H c H_c Hc包含了 L ′ L^{'} L′的复制(每次平移 c b n c\pmb{b} _n cbbbn),我们可以在 H c H_c Hc中找到 L ′ L^{'} L′的格超平面,通过平移 c b n c\pmb{b} _n cbbbn。
参考
https://cims.nyu.edu/~regev/teaching/lattices_fall_2004/ln/cvp.pdf
http://www.noahsd.com/mini_lattices/05__babai.pdf
https://en.wikipedia.org/wiki/Hyperplane
一个正在学习格密码的菜鸡笔记,欢迎一起学习交流~