格密码:如何找最近的格点(CVP问题)

目录

一. 摘要

二. 介绍

2.1 简单的CVP问题

2.2 Gram-Schmidt向量

2.3 KZ基

三. 格密码的基本符号

四. CVP问题的发展

五. 如何解决CVP问题

5.1 随机取整算法

5.2 Babai算法+随机取整

5.3 小结

六. 推荐论文


一. 摘要

本文章将解释如何利用随机取整算法(randomized rounding)来找最近的格向量(closest lattice vector),其中最近指的是欧几里得范数(Euclidean norm)最小。将该问题总结如下:

给定格基,给出任意向量x(不在格点上),如何采用启发式算法大概率找到离其最近的格点?

该算法的运行时间取决于:

  1. x离最近格点的距离大小
  2. 格基的质量

二. 介绍

2.1 简单的CVP问题

格密码有一个基本问题叫做最近向量问题,如下指的是同一类:

最近向量问题:closest lattice vector problem 或者nearest lattice point problem,简称CVP问题。

格上CVP问题是NP-hard的,也就是没有多项式时间复杂度的算法能解决此类问题,只有指数时间复杂度的算法才能解决。但是,如果给该类问题外加一些限制的话,可能会变得简单。

Furst和Kannan发现了一类问题,叫做子集和问题,跟CVP问题有异曲同工之妙。如果给CVP问题如下限制的话,那么该问题就可以被解决:

v离格点的距离小于最短Gram-Schmidt向量的一半

在该条件下,很明显,满足条件的格点只有一个。

推荐阅读:

【格密码】最近平面算法解决CVP问题(1)-CSDN博客

2.2 Gram-Schmidt向量

Gram-Schmidt算法可以将任意向量转为正交向量。给定一个格基b_1,\cdots,b_n,正交后的向量叫Gram-Schmidt向量,写做b_1^\dag,\cdots,b_n^\dagb_i垂直于向量空间b_1,\cdots,b_{i-1}的分向量即为b_i^\dag.

2.3 KZ基

KZ基的全称是Korkin-Zolotarev基,最早由Lagarias等人提出。它们发现了最短的Gram-Schmidt向量与格上最短向量(SVP问题)之间的关系:

最短的Gram-Schmidt向量大于等于3/2n倍的最短向量长度。

接下来,我们将演示一个算法,其复杂度为:

n^{k^2+O(1)}

如果以下条件满足的话,那么可以找到离v最近的格向量:

实数点v离格的距离小于最短Gram-Schmidt向量长度的k倍。

也就是当解码半径变大时,时间复杂度也在增大。效率和正确率需要相互平衡。

三. 格密码的基本符号

n个向量b_1,\cdots,b_n,其形成的向量空间为V(b_1,\cdots,b_n),其形成的格记为L(b_1,\cdots,b_n)

输入点x以及格基b_1,\cdots,b_n,尝试输出:

y\in L(b_1,\cdots,b_n)

使得如下最小:

|x-y|

该问题的本质就是BDD问题,其时间复杂度为:

n^{|x-y|^2/min_i|b_i^\dag|^2}

很明显,当x离格的距离比最小的Gram-Schmidt向量的长度大太多,那么该算法的复杂度即为多项式时间复杂度。

四. CVP问题的发展

Kannan提出解决CVP问题的算法复杂度为n^n,其中n代表格的维度。当k<o(\sqrt n)时,本文章的算法就相当于对该算法进行了优化。

当k<1/2时,解决CVP问题的算法复杂度会直接降低到多项式水平。

回顾定理:

给定格基,给出任意向量v,v到格点的距离一定小于Gram-Schmidt向量长度和的一半。

如果实数点v距离格点近,但又不是那么近,会出现什么情况?

五. 如何解决CVP问题

5.1 随机取整算法

可以借助随机取整算法(random rounding)来将一个实数变为整数。这里随机指的是5取整的话,可能会变成其他整数。

我们将该算法记作randRound_c(r)。其中c为下标,r为输入。

将r写做r=p+a,其中p代表整数,a代表小数,也就是:

0\leq a<1

借鉴网络安全领域的离散高斯分布,来看一个特殊的表达:

s=\sum_{i\geq 0}e^{-c(a+i)^2}+\sum_{i\geq 0}e^{-c(b+i)^2}

根据高斯函数的性质,易得:

将该不等式的右边写做s(c),也就是:

s(c)=\sum_{i\geq 0}(e^{-ci^2}+e^{-c(1+i)^2})

当把此算法结合原始的Babai算法时,则可以出现比较好的结果。

5.2 Babai算法+随机取整

将寻找最近格点的算法记作near_A(x,d),其中A为下标代表公共参数,x代表输入,d代表维度。如果x为零向量的话,那么d=0。换句话说,向量x位于空间V(b_1,\cdots,b_d)内。

第一步:将x投影到b_d^\dag的分向量记为r_db_d^\dag

第二步:生成参数c,如下:

c_d=A|b_d^\dag|^2

这一步的c就是上个算法中的c

第三步:r_d进行随机取整,如下:

\lambda_d=randRound_{c_d}(r_d)

第四步:形成x',如下:

x'=x+(\lambda_d-r_d)b_d^\dag

d维结束,接着继续重复计算d-1维即可,此时可得:

near_A(x'-\lambda_db_d,d-1)+\lambda_db_d

5.3 小结

定理1

x'-\lambda_db_d位于空间V(b_1,\cdots,b_{d-1})内。

证明如下:

定理2

x和x'之间的差为(\lambda_d-r_d)b_d^\dag

定理3

对于任意向量满足:

x\in V(b_1,\cdots,b_d)

该算法near_A(x,n)可以输出一个向量满足:

很明显该向量y在格点上,而且该格点满足:

证明:

根据算法的定义,x'如下:

根据归纳假设,d-1维的算法输出的格点y'满足:

由此可得:

带入即可得:

定理4

假定\hat y为格点,x为实数点。以上算法输出\hat y的概率为:

所以要想输出最近的格点,可能需要调用算法多次,让后从这些样本中挑选出最近的。理论上,只有样本足够大,其中肯定包含最近的向量。算法调用的次数取决于三个值:x离格点的距离,1/s的值,参数A的取值。

如果将算法实例化,那么对应的概率为:

实际上借助decision tree,可以将其转为确定性算法。

六. 推荐论文

(1)格上CVP问题介绍

L. Babai, "On Lovhsz' lattice reduction and the nearest lattice point problem," Combinatorica (1986), pp. 1-13.

(2)介绍闵可夫斯基凸体定理

R. Kannan, "Minkowski's convex body theorem and integer programming," Mathematics o] Operations Research, vol. 12 (1987), pp. 415-440.

(3)介绍KZ基

J. C. Lagarias, H. W. Lenstra, and C. P. Schnorr, "Korkin-Zolotarev Bases and successive minima ofa lattice and its reciprocal lattice," Combinatorica (1990), pp. 333-348.

  • 25
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

唠嗑!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值