格(Lattice)学习笔记之二:计算问题

东泽 安比技术社区 2020-07-23 12:30

本文作者东泽,来自安比技术社区的小伙伴,目前就读于斯坦福大学,研究方向密码学。

01

SVP问题(Shortest Vector Problem)

一个Lattice中最常见的问题,就是最短向量问题(SVP,Shortest Vector Problem)。问题的定义是这样的:给定一个基为的Lattice ,找到一个这个基构成的格点,使得这个点距离0坐标点的距离最近。
观察发现,因为已经是这个格中点和点之间的最短距离了,所以距离0点的距离其实也不会小于,最多是等于罢了。

Image

图中给出了一个比较经典的例子,加入我们拥有一组格的基向量,我们可以找到一个点,即对应的这个点,正好就是这个格的最短向量
当然,如果我们拿到的基不是很好,其实计算严格的SVP(即找出)是一个很难的事情,所以SVP这个问题也有个宽松的版本:
中,问题的设定大致一样,但是唯一不一样的在于,我们找到的点,并不一定需要恰好是最短向量,而只要满足小于等于的一个倍数就行了。

Image

图上显示的就是当的情况。这个时候我们的问题就有很多个解了。

CVP问题(Closest Vector Problem)

Lattice中另一大常见的问题,就是最近向量问题(CVP,Closest Vector Problem)了。问题的定义是这样的:给定连续空间中任意的一个点,找到距离这个点最近的格点

Image

这里我们的约束距离就是这个Lattice的覆盖半径(即所有可能的中距离格点最长的距离)。同理可得,我们也可以得到CVP的宽松版,即

Image

加上一个宽松的参数之后,CVP问题就会变得简单一些,解的数量也变多了。

SIVP问题(Shortest Independent Vectors Problem)

Lattice中第三大重要的问题,就是最短独立向量问题。问题定义:给定一个Lattice ,找到个线性独立的向量并且这些向量的长度都要小于等于最长的最短向量

Image

这个图就很好的表达了在的情况下,我们找到了两个小于等于的点。和SVP与CVP问题一样,我们也可以给出SIVP问题的宽松版定义,即。在宽松版本中,我们只需要找到范围内的就可以了。

Image

基于Lattice的信息传输

学会了SVP,CVP,SIVP这三件套之后,就可以来了解一下如何通过Lattice来进行可靠的消息传输了。
我们要解决的问题是在一个有噪音的信道中可靠的传输信息(Reliable transmission of information over noisy channels)。结合Lattice的概念之后,其实实现起来很简单。

Image

首先,我们把需要传输的消息映射到Lattice中的一个点上,即,然后我们把发送出去。在接收端我们得到的数据会产生一定程度的偏移,在图上反馈出来就是偏移到了这个点上。我们只需要解决CVP问题,就可以找到原本的格点,然后就可以还原出了。
在解决CVP问题的时候,我们还需要知道这个Lattice中最短向量的值来判断CVP问题是不是能够求解出原本的那个点。我们需要通过求解SVP问题来得到

最后,SIVP问题在这里也有所适用。如果我们在传输的过程中为了压缩数据使用了向量量化(Vector Quantization)的方法,在重建向量的时候,需要用到SIVP的解来修复误差。

CVP问题的两种版本

我们再次系统性的定义一下CVP问题。
给定一个Lattice ,与一个随机点还有搜索距离,并且假设,CVP问题是让我们找到一个合理的格点并且这个点到的距离小于等于

CVP问题对于搜索的范围和结果的大小已经有所约束了,但是并没有约束一共有多少结果和范围究竟有多大。所以CVP问题又可以细分为两种主要的版本。1

01

BDD(Bounded Distance Decoding)问题


BDD问题规定了,也就是说小于最短向量的一半。并且这个CVP问题最多只有一个唯一的解(at most 1 solution),并且这个解一定是距离最近的格点。

02

ADD(Absolute Distance Decoding)问题


ADD问题则不同,规定了,也就是说大于整个格的覆盖半径了。这个时候,这个CVP问题至少会有一个解(at least 1 solution),但是我们找到的解并不一定是距离最近的格点。

Lattice难题之间的相互联系

我们之前提到的SVP,CVP,以及CVP下面的BDD,ADD,都是公认的很难在多项式时间内有效解决的难题。我们来看一看这些难题之间的关联性。

Image

最近的二三十年来的各种paper逐渐的把这些难度的关系给证明了出来。具体的后面再详细研究。

ADD问题规约到SIVP问题上

上一部分的图中,我们发现ADD和SIVP问题被归为同一层(困难度)。这是因为经过一系列的变换,我们可以把ADD问题规约到SIVP问题上。

Image

假设我们需要求解,我们可以首先用SIVP算法得到这个Lattice的个独立最短向量。一旦得到了之后,我们就可以选取这些向量作为基,平分整个多维空间。然后我们只需要看在那个分区中,然后向上或者向下取整一下,找到那个分区对应的格点,就是我们ADD问题的解了。
因为我们是使用了取整的操作来找到格点的,所以这个解的格点到的距离,我们也可以找到一个最大的上限,即:

Lattice的几何构造

分析Lattice问题的时候,几何结构是一个非常强有力的工具。
举个例子,在最简单的笛卡尔坐标系整数格中,CVP问题是非常简单的。给定任意一个点。这也就是说我们只需要通过上下取整,就可以非常快速的的解决中的CVP问题。
为什么这么好解呢?这是因为中的基向量都是相互垂直的(orthogonal basis)。这也就是说,如果我们可以把一个任意的Lattice 转换为一个垂直基的格,那么就可以非常轻松的的解决CVP了。

我们对把一个Lattice的基进行变换,找到一组非常接近垂直的基的过程,称之为Lattice Basis Reduction。这一过程在LLL82这一篇中有详细的描述。

Gram-Schmidt正交化

一个比较常见的Basis Reduction方法是Gram-Schmidt正交化过程。假设我们拥有一个格的基

Image

在这个Lattice中,我们发现这两个基向量是不垂直的。接下来,我们尝试找到一组互相垂直的基
在图中的这个案例中,一共有两个基向量,即。我们首先根据以上等式,得到了第一个垂直基

Image

确定了之后,我们可以计算第二个基。因为就是原本的再加上的任意线性组合,我们可以把这个取值范围用一条线来表示。

Image

随后,我们可以选取在这一条线上符合条件的一个向量作为,即与垂直。

Image

这样一来,我们就得到了一组新的相互垂直的基。仔细观察,我们会发现新的基向量并不在原本的Lattice内,所以并不是原本的格的基。但是值得注意的是,新的这组基组成的Determinant覆盖的空间(长方形),和原本的Lattice的基的Determinant覆盖的(平行四边形)的大小是一样的。我们可以一组等式约束一下这个原有的Lattice

Image


Lattice Rounding(取整)问题

之前说过,如果一个Lattice的基向量是互相垂直的(orthogonal),那么在这个Lattice中解决CVP问题是非常简单的。我们只需要根据这个点的位置,向上或者向下取整,就可以找到最近的格点了。
对于没有垂直基的Lattice,比如说我们这里看到的,我们可以通过Gram-Schmidt正交化的方法,找到一组拥有相同Determinant的垂直基

Image

我们可以用这组垂直基构成的Determinant空间来平分整个空间。然后我们可以稍微的平移一下平分的空间,使得原本的Lattice 的点都在长方形的中央。

Image

这样一来,我们可以把任意的一个点取整到原本的Lattice中的一个点上来。因为我们是在做向上或者向下取整的操作,所以这两个点上的距离不能超过长方体对角线长度的一半。

Image

当我们做取整操作的时候,因为几何形状的原因,最后的得到的结果格点和CVP问题的真正解会略有误差。比如我们看上图,如果的落点在内圈的这个小圆内,那么我们取整得到的一定会是CVP的正确解。如果用等式描述一下的话,那就是:
只要满足这一条件,那么我们通过取整操作就能解决CVP。如果落点在外圈圆的话,那么很有可能就会被取整到隔壁的格点上去,那么那个点就不是最近的了。
Babai86提出了Nearest Plane Algorithm,这一算法正式的指出了取整方法可以逼近CVP问题的答案。这个算法说明了,我们Gram-Schmidt拿到的,可以找到一个在的误差范围内的CVP解。


封面图来自unsplash,作者Markus Spiske

往期回顾

格(Lattice)学习笔记之一:历史与基本概念

初探全同态加密:FHE的定义与历史回顾

初探全同态加密之二:格密码学与LWE问题

初探全同态加密之三:构建GSW全同态加密系统

浅谈零知识证明之一:背景与起源

浅谈零知识证明之二:简短无交互证明(SNARK)

浅谈零知识证明之三:zkSNARK证明体系的实现(上)

浅谈零知识证明之四:zkSNARK证明体系的实现(下)

密码学学习笔记——Sigma Protocol

密码学学习笔记——aSCV

探索零知识证明系列(一):初识「零知识」与「证明」

探索零知识证明系列(二):从「模拟」理解零知识证明

探索零知识证明系列(三):读心术:从零知识证明中提取「知识」

探索零知识证明系列(四):亚瑟王的「随机」挑战:从交互到非交互式零知识证明

探索零知识证明系列(五):云中「秘密」:构建非交互式零知识证明

zkPoD:区块链,零知识证明与形式化验证,实现无中介、零信任的公平交易

PoD-Tiny——实现零信任交易的最简协议

如果量子计算时代到来,我们的比特币安全吗?


零知识证明学习资源汇总

从零开始学习 zk-SNARK(一)——多项式的性质与证明

从零开始学习 zk-SNARK(二)——多项式的非交互式零知识证明

从零开始学习 zk-SNARK(三)——从程序到多项式的构造

从零开始学习 zk-SNARK(四)——多项式的约束

从零开始学习 zk-SNARK(五)—— Pinocchio 协议

零知识证明 Learn by Coding:libsnark 入门篇

链上富人寻「隐私」记(一:Mixer 篇)

理解零知识证明算法Bulletproofs(一):Range Proof

理解零知识证明算法Bulletproofs(二):Improved Range Proof

理解零知识证明算法Bulletproofs(三):Range Proof 实现分析

理解零知识证明算法Bulletproofs(四):Arithmetic Circuits

以太坊颠覆了以太坊:引入密码学实现2.0性能突破


Image

长按二维码添加微信进群技术讨论


info@secbit.io


安比(SECBIT)技术社区

收录于合集 #格(Lattice)学习笔记
 14
上一篇格(Lattice)学习笔记之一:历史与基本概念下一篇格(Lattice)学习笔记之三:对偶格

Scan to Follow