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

目录

一. 最近平面算法介绍

二. 简单的取整算法解决CVP问题

三. 最近平面算法

3.1 算法介绍

3.2 矩阵角度理解最近平面算法

四. 最近平面算法的图形理解


一. 最近平面算法介绍

在1986年,L.Babai曾提出最近平面算法(Nearest Plane Algorithm)来解决CVP问题,利用n代表格的秩,该算法的输出近似值如下:

2(\frac{2}{\sqrt{3}})^n

CVP:最近向量问题,全称Closest Vector Problem

解释:最近的格点不一定能找到,但该算法可以找到离最近格点2(\frac{2}{\sqrt{3}})^n倍的格点。这一点也说明,CVP问题在网络安全领域是困难的,很难找到最近的格点,只能是接近。

CVP问题的六种变式,如下:

\gamma=1时,后三种问题就与前三种一样了。这里给出直观的解释:

计算CVP:找离其最近的格点;

优化CVP(optimization CVP):计算出离最近格点的距离;

判定CVP(decision CVP):判断最小距离与某值r的大小关系;

剩下的三个问题只不过加入了近似因子(approximation factor),理解起来是类似的。之所以分成这么多的版本是因为,密码学把困难问题分成了三大类:

  • search问题;
  • optimization问题;
  • decision问题,gap问题;

如果解决了计算CVP_\gamma问题,由于计算、优化和Gap问题三者困难性一样,那么剩下的优化和Gap问题也就可以解决了。这三类问题通过调整参数是可以互相归约的。

最近平面算法可以解决近似的计算CVP问题,且此时近似因子的取值为:

\gamma=2(\frac{2}{\sqrt{3}})^n

为了简化分析的思路,后续仅仅讨论\gamma=2^{\frac{n}{2}}的情况,通过修改算法相关的参数也可以达到想要的近似值。

二. 简单的取整算法解决CVP问题

简单的取整算法就是把给定向量的系数全部直接取整(可以是上取整,也可以是下取整),该算法得到的格点与格基的选择有很大关系。

我们来看一张直观的图形:

蓝色的线是原始的格基。对于任意的向量t而言,如果直接对格基进行取整的话,那么对应格点就跑到了最右端,很明显就太远了。

如果我们把格基转化一下,变成棕色线。现在对格基的系数取整得到的格点就会近很多。

以上讨论说明,格基的正交性会极大影响CVP问题的求解。这个时候也能说明LLL格基约化的重要性,推荐系列文章:

格密码LLL算法:如何解决最短向量SVP问题(1)-CSDN博客

格密码LLL算法:如何解决最短向量SVP问题(2)_lll算法复杂度-CSDN博客

格密码LLL算法:如何解决最短向量SVP问题(3)(完结篇)-CSDN博客

三. 最近平面算法

3.1 算法介绍

该算法主要有两步。

第一步针对输入的格,输出LLL约化基(LLL reduction)。

第二步,将约化后的格基进行整数线性组合,来保证与给定的向量t足够近。这个步骤跟LLL算法的内循环约化操作很类似。

算法步骤如下:

这里给一个简单的分析:

输入m行n列的格基,给定任意的m维空间实数点。需要注意的是格点也肯定是m维的;

第一步希望把格基尽量正交,其中参数选择3/4,具体理解请参看前面LLL格基约化的文章;

第二步:迭代结构,从n维到1维,不断实现降维的过程。其中c_j的计算如下:

这一步是最近平面算法的核心精髓,可以利用投影的思想来解释,然后进行就近取整。

最后一步剩下的b就是实数点和格点之间的向量,所以t-b即为最终的格点。

显然,前面已经证明LLL算法(第一步)与约化步骤的算法(第二步)都属于多项式时间算法,由此可得该最近平面算法与输入的规模n之间也是多项式时间关系。以下的讨论分析将包含满秩格与非满秩格。

3.2 矩阵角度理解最近平面算法

给定单位正交基(orthonormal set),如下:

\frac{\tilde b_1}{||\tilde{b}_1||},\cdots,\frac{\tilde b_n}{||\tilde{b}_n||}

对于满秩的格来讲,这个格基可以直接形成全部整数格点Z^n.其中“~”代表正交化。

对于非满秩格来讲,假定m大于n,那么格基的列向量也要形成m维。换句话,则需要增加m-n行零向量。由此对应的矩阵B与组合形成的t如下:

第一个代表约化后的格基矩阵;

第二个列向量代表格基的线性组合,因为向量t不一定为格点,所以这种组合可能非整数。

最近平面算法则是寻求对矩阵B列向量的整数组合,为保求出的格点与向量t足够近,其整数组合肯定是需要限定范围的,如下:

[-\frac{1}{2}||\tilde b_i||,\,\frac{1}{2}||\tilde b_i||]

该算法是先从第n列开始,对于这一列向量的整数,则是介于:

[-\frac{1}{2}||\tilde b_n||,\,\frac{1}{2}||\tilde b_n||]

接着计算第n-1列,不断往格基矩阵的左边递推计算。整个迭代过程需要重复n次。

根据线性代数的基础知识,我们知道如果为非满秩格,那么余下的m-n维空间则是与原格的扩展空间是垂直的。

四. 最近平面算法的图形理解

举一个3维的例子,通过最近平面算法降到2维,如下图:

算法的核心思想可以分成四步: 

  1. 考虑非满秩格,首先需要把t投影到格对应的扩展空间span(b_1,\cdots,b_n),形成点s;
  2. 找到对应的数c,使得超平面c\tilde b_n+span(b_1,\cdots,b_{n-1})尽可能接近点s;
  3.  令s'=s-cb_n。迭代去求,找点s'和格\,L(b_1,\cdots,b_{n-1})之间的关系,假定此时求得的答案为x'
  4. 最终返回的答案为x=x'+cb_n

第一步投影过程操作的目的是为了格点到t的最短距离,转化为到s的最短距离,此步的操作在非满秩格时非常有必要。往后的步骤就是每次选择最近的超平面,然后逐个维度去移动。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

唠嗑!

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

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

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

打赏作者

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

抵扣说明:

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

余额充值