【格密码基础】:详解closest lattice vector problem(CVP)问题

目录

一. CVP问题的变式

1.1 decisional CVP

1.2 optimization CVP

1.3 Search CVP

1.4 小结

二. 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 CVPt\in Z^m

第二种变式的问题叫optimization CVP问题。

首先给出格基,格式还是:

B\in Z^{m\times n}

可以发现目前我们看到的格基都被定义为正数范畴,其实是可以进行类推的。

接着给出目标向量t:

t\in Z^m

我们的目的是找出t离格具体的距离等于多少,也就是确定:

dist(t,L(B))

1.3 Search CVP

第三种变式叫做search CVP问题。可以发现,三类变式问题解决起来越来越难了。

首先给定一个格基B:

B\in Z^{m\times n}

以及一个目标向量t:

t\in Z^m

我们的目的是确定一个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来讲,最多穷搜:

R^2

当然,穷搜也太傻了。我们采用刚才谈到的二分搜寻法,也就是借助已有的decisional CVP的oracle,确定最终的距离dist(t,L(B))也就只需要2logR步。格基向量的长度是确定的,那么R跟n之间是多项式关系,此算法最多也是多项式形式。第一步完成。

根据第一步的算法,我们搞定了实际的距离:

r=dist(t,L(B))

接下来,我们的目标则是找到离t最近的向量。首先,如果我们从格L(B)中找到一个格点,也就是:

v\in L(B)

接下里,我们计算t+v,那么原问题就可以变成找到离该点最近的格向量。如果能找到的话,后续直接减去v即可得到离t最近的格向量。

接下来,我们将运用格分析中非常常见的迭代算法(iterative procedure),来令格越来越稀疏。只要格稀疏到一定的程度,那么就可以在多项式时间内找到离其最近的格点。

接下来,我们将解释如何进行迭代操作。原来的格,我们称之为L(B),接着形成子格L(B'),对该格来讲我们的输入是:

(B',t')

上式子中t'的本质则是t+v,其中v代表格点,也就是:

v\in L(B)

目的则是保证距离不变,也就是:

dist(t',L(B'))=r

那么以上子格怎么选呢?

我们可以定义一个新的格基,如下:

很明显观察到B''对应的格只有之前格的一半点,那么也就可以说L(B'')是L(B')的子格(sublattice)。我们紧跟着,把对应的(B'',t',r)输入到decisional CVP对应的oracle中。如果oracle回答YES,那么说明对应的距离满足:

也就是最近的格点还在里面,那么继续保持原状迭代操作,也就是得到:

(B'',t''=t')

否则的话,那对应输出:

(B'',t''=t'-b_1')

未完待续。

  • 15
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

唠嗑!

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

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

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

打赏作者

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

抵扣说明:

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

余额充值