目录
二. Search CVP与decisional CVP问题之间的关系
一. CVP问题的变式
closest lattice vector problem,简称CVP问题,中文翻译为最近格向量问题。
在格密码领域,有很多计算性困难的问题(computational complexity),本文章将以CVP及其变式问题进行分析在网络安全中的应用。
其实在之前的文章中,我们就介绍过基础版本的CVP问题。也就是给定格(lattice),以及一个目标点,该目标点通常不是格点,我们的目的是找出离其最近的格点,该问题计算上是困难的。
其实CVP问题有三种变式情况,第一种就是找到离其最近的格向量,第二种就是找出最近的距离,第三种是判定其距离是否小于某个已知的常数。
1.1 decisional CVP
我们先来看第一种叫decisional CVP:
首先给定一个格基B,格式如下:
在给出一个目标向量(target vector)t,格式如下:
再给定一个有理数r,格式如下:
确定该目标点t与格的距离是否小于等于r,也就是判定:
应该该问题是判定其距离是否小于r,所以称之为decision CVP问题。
1.2 optimization CVP
第二种变式的问题叫optimization CVP问题。
首先给出格基,格式还是:
可以发现目前我们看到的格基都被定义为正数范畴,其实是可以进行类推的。
接着给出目标向量t:
我们的目的是找出t离格具体的距离等于多少,也就是确定:
1.3 Search CVP
第三种变式叫做search CVP问题。可以发现,三类变式问题解决起来越来越难了。
首先给定一个格基B:
以及一个目标向量t:
我们的目的是确定一个n维的整数x,如下:
使其令如下的式子最小:
||Bx-t||
1.4 小结
对比这三类问题我们很容易就会发现,如果我们能解决serach variant问题,那么就可以马上解决optimation variant问题。同理,如果我们能解决optimation variant问题,那么就可以马上解决decisional variant问题。这三类问题的难度直观上可以得到。
当然,经过格密码的不断发展,其实这三类问题利用多项式时间算法可以互相归约,也就是所谓的polynomial equivalent。
二. Search CVP与decisional CVP问题之间的关系
定理:
如果有一个oracle可以解决decisional CVP问题,那么利用它,在多项式时间内也可以解决search CVP问题。
证明:
给定一个格基B,如下:
以及一个目标向量点t。我们第一步则是需要解决optimization CVP问题,换句话说也就是确定t离格L(B)的实际距离,也就是确定:
接下来我们将介绍一个很有用的算法叫做二分搜寻法(binary search)。
首先我们将所有格基的长度加在一起,得到R,也就是:
当然实际的距离r肯定小于R,也就是:
于是乎,我们就可以把R看成距离的上界。当然,因为此处的距离均指的是l2范数。而且,以上均为整数,所以距离r也肯定是某个整数开平方的结果。那么,如果我们进行穷搜的话,对r来讲,最多穷搜:
当然,穷搜也太傻了。我们采用刚才谈到的二分搜寻法,也就是借助已有的decisional CVP的oracle,确定最终的距离dist(t,L(B))也就只需要2logR步。格基向量的长度是确定的,那么R跟n之间是多项式关系,此算法最多也是多项式形式。第一步完成。
根据第一步的算法,我们搞定了实际的距离:
r=dist(t,L(B))
接下来,我们的目标则是找到离t最近的向量。首先,如果我们从格L(B)中找到一个格点,也就是:
接下里,我们计算t+v,那么原问题就可以变成找到离该点最近的格向量。如果能找到的话,后续直接减去v即可得到离t最近的格向量。
接下来,我们将运用格分析中非常常见的迭代算法(iterative procedure),来令格越来越稀疏。只要格稀疏到一定的程度,那么就可以在多项式时间内找到离其最近的格点。
接下来,我们将解释如何进行迭代操作。原来的格,我们称之为L(B),接着形成子格L(B'),对该格来讲我们的输入是:
(B',t')
上式子中t'的本质则是t+v,其中v代表格点,也就是:
目的则是保证距离不变,也就是:
dist(t',L(B'))=r
那么以上子格怎么选呢?
我们可以定义一个新的格基,如下:
很明显观察到B''对应的格只有之前格的一半点,那么也就可以说L(B'')是L(B')的子格(sublattice)。我们紧跟着,把对应的(B'',t',r)输入到decisional CVP对应的oracle中。如果oracle回答YES,那么说明对应的距离满足:
也就是最近的格点还在里面,那么继续保持原状迭代操作,也就是得到:
(B'',t''=t')
否则的话,那对应输出:
未完待续。