最近平面算法(The Nearest Plane Algorithm)

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} BZm×n 和一个点 t ∈ R n \pmb t\in \mathbb{R}^n tttRn,要求找到一个点 x ∈ L ( B ) \pmb x\in \mathcal{L}(B) xxxL(B),满足 ∀ y ∈ L ( B ) , ∣ ∣ x − t ∣ ∣ ≤ γ ∣ ∣ y − t ∣ ∣ \forall \pmb y \in \mathcal{L}(B), ||\pmb{x-t}|| \leq \gamma||\pmb{y-t}|| yyyL(B),xtxtxtγytytyt

定义2 C V P γ CVP_\gamma CVPγ, OPTIMIZATION)) 给定一组格基 B ∈ Z m × n B\in \mathbb{Z}^{m \times n} BZm×n 和一个点 t ∈ R n \pmb t\in \mathbb{R}^n tttRn,要求找到一个数 r ∈ Q r \in \mathbb Q rQ,满足 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} BZm×n ,一个点 t ∈ R n \pmb t\in \mathbb{R}^n tttRn和距离 r ∈ Q r \in \mathbb{Q} rQ,判定 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))rdist(ttt,L(B))>γr

下面描述了最接近向量问题(CVP)的近似算法。 该算法被称为最近平面算法,由 L. Babai 于 1986 年提出。它包含了一个 2 ( 2 3 ) n 2(\frac{2}{\sqrt 3})^n 2(3 2)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 BZm×n,tttRn

OUTPUT: 一个向量 x ∈ L ( B ) \pmb x \in \mathcal{L}(B) xxxL(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)) (xtxtxt)2n/2dist(ttt,L(B))

  1. Run δ − L L L \delta-LLL δLLL on B B B with δ = 3 4 \delta = \frac{3}{4} δ=43

  2. b ← t \pmb b \gets \pmb t bbbttt

    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} bbbbbbcjbjbjbj, 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} tbtbtb

可以看出,该算法在输入维度大小上运行在多项式时间内。理解算法第二步的一种有用的方法如下。对于满秩格来说(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表示施密特正交化向量方向上的单位向量。则施密特正交化的过程可以写成以下的矩阵形式:
img5
其中 μ 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
img6
其中 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,1bbb 1bbb 2μn,1bbb 1μn,2bbb 2bbb 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 10000bbb 2bbb n00,ttt=t1t2tn

最近平面算法通过寻找一个列向量的整数组合 ( 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)TL(B)最接近向量 t \pmb t ttt算法中 b ← b − c j b j \pmb b \gets \pmb b - c_j\pmb{b_j} bbbbbbcjbjbjbj, 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|| ±21b 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|| ±21b b b n的范围内;然后继续找格基第 n − 1 n-1 n1列的整数倍,使得 t \pmb t ttt的第 n − 1 n-1 n1个坐标在 ± 1 2 ∣ ∣ b ~ n − 1 ∣ ∣ \pm{\frac{1}{2}} ||\pmb{\widetilde b}_{n-1}|| ±21b b b n1的范围内;以此类推。以上描述可能有点抽象,我们现在考虑第二步的另一种等效描述。 这种描述是递归的,将最方便我们的分析。 它强调了最近平面算法的几何性质,这也解释了它的名字。如图1所示:
img8

图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)上的投影
  2. 找到一个超平面 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,...,bbbn1)尽可能地接近 s \pmb s sss
  3. s ′ = s − c b n \pmb{s}'=\pmb s - c\pmb{b}_n sss=ssscbbbn。递归调用上述过程,其中输入为 s ′ 和 L ′ ( b 1 , . . . , b n − 1 ) \pmb{s}'和\mathcal{L'}(\pmb b_1,...,\pmb b_{n-1}) sssL(bbb1,...,bbbn1)。令 x ′ \pmb x' xxx是递归的结果。
  4. 返回结果 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,...,bbbn1)中计算出一个与 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,...,bbbn1)中最接近 s \pmb s sss的向量。

以二维格举例说明最近平面算法的过程:
在这里插入图片描述

图2.CVP问题的输入。

给定一组格基 ( 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=0bbb1+1bbb2=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>=bbbbbb2cos(θ)=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 2bbb 2=bbb /bbb 2

在这里插入图片描述

图3.投影系数取整

所以对 ⌈ < 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 bbbbbbc2bbb2=bbbbbb2
在这里插入图片描述

图4.更新向量b

当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 tttbbb.
在这里插入图片描述

图5.返回离t最近的格向量

附录

超平面的定义

在几何学中,超平面是一个子空间,其维度比其环境空间的维度小一。 例如,如果空间是 3 维的,那么它的超平面就是 2 维平面,而如果空间是 2 维的,那么它的超平面就是 1 维的线。

在这里插入图片描述
在这里插入图片描述

施密特正交基的一种几何解释

第n个Gram-Schmidt向量 b ~ n \widetilde b_n b n 有很好的几何解释。考虑由所有向量 x ∈ R n x \in \mathbb{R}^n xRn 定义的超平面,它的最后一个坐标固定为 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=1n1aibbbi+cbbbn
下面通过画一个 n − 1 n-1 n1维的超平面来解释:

在这里插入图片描述

其中 H 0 是 n − 1 H_0是n-1 H0n1维的超平面,且 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 H0Hc之间的距离一般不等于 c ∣ ∣ b n ∣ ∣ c||\pmb{b}_n|| cbbbn。两者之间的距离应该等于 c b n c\pmb{b}_n cbbbn垂直于 H 0 H_0 H0的部分,即 c ∣ ∣ b ~ n ∣ ∣ c||\pmb{\widetilde b}_n|| cb 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 n1维格超平面, { , . . . , H − 1 , H 0 , H 1 , . . . , } \{,...,H_{-1},H_0,H_1,...,\} {,...,H1,H0,H1,...,},相邻的超平面由 b ~ n \pmb{\widetilde b}_n b b b n分隔。每一个超平面都是由前 n − 1 n-1 n1个基向量生成的子格 L ′ L^{'} L复制而来。第 i i i个超平面是格 L ′ L^{'} L平移 i b n i\pmb{b}_n ibbbn得到。下图是二维的描述:

在这里插入图片描述

当然,其他 Gram-Schmidt 向量也可以类似地解释。由前 n − 1 n-1 n1个基向量生成的子格 L ′ L^{'} L可以被划分为 n − 2 n-2 n2维的超平面,每一个的间隔为 b ~ n − 1 \pmb{\widetilde {b}}_{n-1} b b b n1。因为 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

一个正在学习格密码的菜鸡笔记,欢迎一起学习交流~
在这里插入图片描述

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值