格密码(一)

感谢B站空竹_CQU的分享,Simons教授讲的格的数学定义。原视频是中英文字幕版本,我是一个格密码小白,所以想参照中英文字幕,根据自己的理解,手打一遍加深记忆,如果侵权,请提醒一下,我立即删除!

在这里插入图片描述
本次演讲的主题如下,这些是我会讲到的主题,我不会将太多关于算法复杂度的内容,而是主要讲格在数学上的定义,我将从格的基本定义开始讲,然后讲格的一些基本量,很多应用都会使用这些基本量,尤其是在密码学中,其他问题也会涉及到这些基本量,人们已经找到了这些问题对应的格上计算问题,格很有趣的一点是,对于很多问题来说,你可以考虑到这些问题最差情况(worst case)下的变体。这是算法和复杂度理论中使用的标准术语。在实际应用中,人们也常常定义随机格,然后考虑这些问题平均情况下的复杂度,这两类问题在格中以某种方式相联系,可以很好的把这两类问题联系起来,他们常常以不同的语言和记号来表示,在讲座最后,我将会介绍随机格,这类格通常称为q模格,这些格上的所有算数操作都取模一个小整数q。这就简化了q模格以及相关算法的实现,这类格在密码学中很有用,中间的这个话题是今天讲的重点,我将介绍格的对偶性以及对偶格,对于小白来说,对偶格可能会很难懂,有时它的逻辑关系也不是那么清楚,所以我会讲讲这方面的内容,我在这里讲的内容在几何上大多是基于Euclidean(欧式空间)的,最后我会把这些定义和密码学上使用的随机格联系起来。

 
 

在这里插入图片描述

格领域在数学上是一个比较传统的领域。格在拉格朗日,高斯等等这些人的时代就已经开始研究了,还有很多接触的数学家投身格的研究。

格对于很多应用都很关键,甚至在计算机科学出现之前,就用于纯数学的研究了。在数论中,也用格来解决很多问题。例如对于下面的证明,它的证明简单又经典。

每个满足p=1mod4的素数p能够写成两个平方的和的形式。(比如5=1的平方+2的平方,13=2的平方+3的平方等等),这个问题和格没有直接关系,但是你也可以写成与二维格点有关的问题。所以一开始格的研究就与数学有联系,但是后来的事实证明,对其他很多问题来说,格也是很强大的工具,例如在密码分析中。格也用于优化领域中
,也用在密码学中,构造安全的密码函数。传统意义上,密码分析是格的主要应用领域,用于破解密码算法。人们不仅用格破解密码算法,也用格构建安全的密码算法。这是过去20年密码学领域最有趣的发展之一。这次讲座不会讲解格密码太深,但会简要说明格密码发展的是时间线。

 
 
在这里插入图片描述

最初随着LLL算法的提出,格开始用于密码分析,1996年Ajtai展示了计算问题糟糕情况和平均情况复杂度之间的联系。打开了格在密码学中应用的大门。但是最初这些应用非常简单,仅仅是单项函数。他们没起什么作用,比起密码学来说,在复杂度理论的研究中作用更大。

他们的效率也很低,但是他们是一系列改进的基础。之后的2002年的工作我们之前还没提到过,对于具有内部结构的格,我们在2002年得出了与Ajtai相似的结论。我今天不会讲到这种结构格,但我会在第四场讲座,也就是明天上午的讲座中涉及到结构格。明天下午的讲座中也会专门讲这个话题。所以这些格还与代数数论有关。他们是高效应用格的关键。量子在格的研究中有时会以意想不到的方式出现。

首先可以使用格构建两种类型的单向函数。他们基本上是一样的。但可以通过设定参数,控制函数是否满射或者单射,也就是正确选择函数的定义域和值域大小。如果函数是满射的,那么Ajtai证明了这些函数求逆是困难的。如果函数压缩了输入,这些函数就和最糟糕情况下的格计算问题有关。他以一种非常笨重的方式利用了函数是满射这一点。所以人们只能根据这些函数做一点简单的应用。2005年Oded Regev的工作表明,如果函数是单射的,可以用量子规约证明求逆操作困难性。自此以后,格在密码学中有了更加广泛的应用。在后面的讲座中了解到更多关于这方面的内容。现在正式进入数学部分:
 
 
在这里插入图片描述

如果有任何问题,或者想要我讲解的更细一点,请提出来。

格是欧式空间中规律排布的点集。我在白板中画不出来排布这么有规律的格。那么什么是格呢,我先来将一个简单的例子吧。格的最简单的例子就是n维空间中的整数向量集Z^n,这些向量的坐标都是整数。也就是离散的向量空间,这个空间不是连续的,而是一个离散的点集构成。从数学的角度来讲,可以看成是取模整数。这个空间的结构很简单,只是把Z独立地拷贝了n份。所以从代数的角度来看,这个空间非常简单。格有趣的地方就在于,我们不只是考虑格的代数结构,如何把格点加起来得到更多格点。还会考虑这些格点在欧氏空间上的几何意义。
 
 

在这里插入图片描述

一般来说可以把定义格的过程看做在格上施加单射的线性变换的过程,得到的点集是相同的,运算是相同的,代数关系是相同的。但是点在空间中的位置不同。线性变换之后得到的还是规律的点集,但是点的位置改变了。如果把这些点的结构和位置结合起来看的话,就可以考虑一些记号,例如向量的长度,以及其他几何上的量。如果把格看成是n维欧氏空间中的一些点。这样来看格的话,就是在整数格Z^n上施加一个线性变换B,在一些应用中,这种方法很有用。

先想Z^n,然后在上面施加一些扰动,有些格算法确实是以这种方式工作的。先取一个格,然后施加线性变换,变换到另一个格。在另一个格上解决问题,然后再变换回原来的格。

 
 

在这里插入图片描述

更常见的一种定义是把格定义为欧氏空间上n个线性无关量的整数线性组合的集合。我在这里展示的所有图都是二维格。如果扩展到n维格,那么事情将会很有趣。n维格就留给大家自己想象。在二维空间中,可以把线性变换B的列看作是一系列向量的集合。那么,格上的点就正好是基向量的线性组合,而且系数都是整数。这和向量生成的向量空间类似。但我们只取整数的线性组合。

 
 

在这里插入图片描述

需要注意的是,同一个格可以有多种基向量。这里有一组绿色的点,现在这些绿色的点没有变化。现在只改变格点所在的网格,现在我们就有了两组基,这里的每组基都能够生成绿色点集。(也就是PPT的上面两页,b1,b2与c1,c2这两组基虽然不同,但是所生成的格是相同的),但两组基是不同的,而且请看,他们的线性组合的集合是一样的。在计算应用中,我们需要使用某种方法来表示一个格。最常见的方法就是用一组基向量来表示格。在算法,复杂度,密码学等等大多数应用中,作为问题中输入的格是以基向量的形式来表示的。我们需要从输入的基向量出发来计算得到一些量。
 
 
在这里插入图片描述

一个格可以有多种基向量表示,所以根据输入的基不同,问题可能会变难或者变简单。当然,也可以不用基向量来定义格。可以把格定义为欧氏空间上点集的离散子群,这个子群对加法和减法而言是封闭的,而且它是离散的(因为只取整数)。这些点距离其他点都很远。在研究格的基本性质时,如果不考虑基向量,而只把格看作具有这些性质的点集。只在需要计算格上问题的时候再考虑基向量,这种方法很有用。接下来讨论与格有关的一些基本量。
 
 
在这里插入图片描述

首先是格的行列式,这个量在很多地方都有应用。给定基向量B,可以如下定义格的基本区域,也就是这两个基向量张成的平行多面体。可以计算这个平行多面体的体积。这个体积就叫做格的行列式(这里注意,行列式是一个值,很抽象,体积的大小,刚好是格的行列式大小)。由于一个格的基向量表示可以有很多种。
 
 
在这里插入图片描述

考虑不同的基向量,可以得到不同的区域,但它们的体积都是一样的。所以行列式不是某一组基向量的性质,而是格本身的性质。
不仅如此,给定任意一组基向量,计算行列式也是很快的,只需要回想一下几何上的公式,如何计算平面体体积的公式即可。
后面会讲一个简单的计算方法。
 
 
在这里插入图片描述

可以从另一个角度来看格的行列式,也就是格点的密度。
考虑由基向量乘以正负二分之一之间的系数构成的基本区域,这就得到了如上图所示的格。
所以这个格的基本区域就是环绕格点四周的,格点在基本区域的中心。
这样的基本区域堆叠起来能够张成整个空间,且构成空间的一个划分。如果在欧氏空间中取一个足够大的球,可以发现,完整包含在这个球中的基本多面体的数量。这个数量和球体的体积成比例,随着这个球越来越大,可以预测球内的格点能够趋于一个极限。而这个极限的值,就是球的体积除以格的行列式。也就是除以这些“砖块”中任意一块的体积。

从密度的角度来看。马上就能发现,行列式只是根据空间中足够大的一块区域中格点的数量来定义的,所以行列式不应该依赖于具体基向量的取值。

 
 

在这里插入图片描述

还有一些其它的量与格有关,给定一组基向量,我们能够很快给出格的行列式,行列式很容易算出来,还可以看作类似于伸缩因子的量。所以在类似问题中,可以假设行列式的值为1。行列式可以看成是归一化因子,如果行列式不是1,可以伸缩变换让它变成1。它可以用于把格点空间的密度归一化。

即使两个格的密度相同,它们的几何结构仍然可能差别很大,也就是说,平均来说,两个格在单位体积内的格点数量可能相等,但是点在n维空间中的位置排布还是可能大有不同。

还有其它一些量与格相关,但是没有能很快计算出它们的方法。
连续极小是其中之一,这个量源于最小距离的概念。

 
 
 
在这里插入图片描述

在一个二维格中,考虑计算任意两个格点间距离问题。我们可以在这些格点上加或者减,所以可以假设其中一个向量就是原点。只需要把两个向量都剪掉其中一个向量,就能得到一个零向量。如果我们要考虑距离最近的两个格点,只需要考虑距离原点最近的点就可以了。这叫做格的最小距离,也叫做格的第一连续极小。也就是格中最短非0向量的长度。这个量在二维空间中很容易计算。高斯(Gauss)或者说他之前的拉格朗日(Lagrange)已经提出了多项式时间的算法。那个时代可都是手算,还没有多项式时间这种说法。但是现在用于计算二维格中最短向量长度的算法也就是拉格朗日提出的。而且已经很快了。我们还不知道在二维格下计算机要如何更简便地计算最短向量。但是在n维格中,这个问题就困难了很多。尤其是在给定一组基的情况下,因为最短向量不一定就是基向量之一。可以给出一组很长的基向量,之后我们会讲到如何做到这一点。在讲这一点之前,我们先介绍几个其它的参数,它们也用于不同的应用中。
 
 
在这里插入图片描述

可以扩展第一连续极小λ1的定义到一系列这样的值,包括λ1,λ2……λi……λn,其中n是格的维数。其中λi定义为包含至少i个线性无关格向量的最小球的半径。
当我们把球心放在原点,整个球在原点周围,如果球中有非零格向量,那么球中不会只有一个格向量,原点一定在球中,然后有一个非零格向量和它的逆向量,那么就有三个格点,但它们是排在一条线上的。它们张成的是一维空间。如下图
 
 
在这里插入图片描述

如果取一个大一些的球,就可以找到另外的向量,和之前的向量不在一条线上。也就是会得到一个稍长一些的,与之前的格点线性无关的格点。这个大一点的球的半径叫做格的第二连续极小,记作λ2。在二维空间中,到这里就停止了,而在n维空间中我们可以用类似的方法一直取到λn。

举个例子,取整数格Z^n,不施加任何线性变换。
很明显Z^n可以视为n个长度为1的线性无关向量构成的格。也即是整数格的标准基,这种情况下n个连续极小的值都是相等的,而且等于1。但这种情况不适用于一般的格。
 
 
在这里插入图片描述

如果在Z^n上施加线性变换,那么得到的格上n个连续极小λ1到λn是一个递增的序列。这很容易构造。
和格有关的量还有很多,如下所示:

 
 
在这里插入图片描述

例如距离问题,现在不仅仅给定格,还给定一个目标点t。也就是图中蓝色的点,这个点不在格上。考虑这个目标点与格之间的距离。如果目标点就是格点的话,那么距离就是0。如果让这个点远离格,这个距离就会增大。对于每个目标点,考虑它与离它最近的格点之间的距离。

 
 
在这里插入图片描述

这个函数的最小值为0,那么最大值是多少呢?
如果t为格点,那么距离函数就取最小值0。可以在空间中移动目标点,使距离函数的值尽量大。不难看出,当我们达到最大距离时,可以目标点为球心放一个球,球上会有n个不同的点,这就把我们放置的球卡在了某个位置上,不能再移动。所以这里的点,我们可以把它向右移动,这样就增加了球的半径,而不会碰到其它的格点。只要球面上少于n个格点,我们就可以继续移动,增加距离函数的值。在某个位置,我们就可以得到局部最大值。此时不管往哪个方向移动球,要么会把一个格点吞入求内,要么就必须缩小球的半径,这样就减小了到格点的距离。通常来说,这个最大值仅仅是距离函数的局部最大值。

与可以考虑全局最大值,考虑整个空间中距离函数的最大值。这个就叫做格的覆盖半径。

 
 
在这里插入图片描述

也可以理解成从格点出发,能够走到的离格点最远的距离。在同一个线性空间中,如果垂直的移动,如果这个格是低维的格,那么只要向远离格所在的平面方向移动,就可以达到任意远的距离。但我们这里不允许这种情况。以后为了简单起见,假设讲到的所有格都是n维的,能够张成n维空间,这样假设可以简化很多定义。覆盖半径就是距离函数的最大值。也可以用另一种方式来理解,就是以每个格点为球心放置球。

 
 
在这里插入图片描述

这些球在一开始是分开的。增加球的半径,增加到一定值之后,这些求球就会开始有重叠。

当半径超过最小距离的一半时,这些球就会开始重叠。假如有两个格点,格点间距离λ1的距离,那么当球的半径到达λ1的一半时,那么两个球就会在某一点处开始接触。继续增大球的半径,直到这些球覆盖了整个空间。当这些球覆盖了整个空间时,球的半径就正好是格的覆盖半径。

这就是覆盖半径的由来,因为这个半径就是球覆盖到整个空间所需要的半径长度。
 
 
在这里插入图片描述

增大到某个值时,这些球就会覆盖整个空间,这个半径就是覆盖半径。
需要注意,虽然这些球覆盖了整个空间,但有些区域颜色较深,有些区域颜色较浅。也就是说这些球并不是均匀地覆盖了整个空间。继续增大球的半径:

 
 

在这里插入图片描述
在这里插入图片描述

可以发现随着球的半径越来越大,图上的区域也涂抹的越来越均匀。加入让球的半径趋近于无穷大,那么在这种极限情况下每个区域都会是一个颜色。实际上这个半径是有限的值,我们不会得到完全均匀的覆盖,但会趋近于完全均匀。如下:在这里插入图片描述

当这些颜色对我们来说看起来都一样的时候,就可以停止了。在这里插入图片描述

事实证明,我们并不需要把半径加到那么大,但是这个半径至少大于等于覆盖半径。一般来说,这和根号n乘上λn一样大。而对于整数Z^n来说,根号n乘上λn这个量是紧凑的。在这个基础上,如果再乘上一个n的对数因子,得到的覆盖就会很接近于均匀。

噪声的分布我们不应该选择球上的均匀分布,它的界限非常明显。而应该选择高斯分布。
 
 
在这里插入图片描述

因为它的界可以用调和分析证明,所以高斯分布是最简单的方法。这个过程可以写成,施加一个球形的高斯分布。把这个分布加在每个点周围。这个高斯噪声的取值略大于n。如我们所想,半径的每个分量都大致等于λn,略比它大一点。这就叫做光滑参数。光滑参数的值由一个错误项ε决定,这个错误项表示和均匀分布之间的差异。

你在明天可能还会听到更多关于光滑参数的内容。也有可能在今天后面的讲座中某个算法里面会提到。

 
 

在这里插入图片描述那么如果有了这些量我们能做什么?行列式可以简单地计算出来。那么λ1呢?我刚刚讲过,我们不知道怎么去计算λ1。但是我们能够知道连续极小的上界,能够计算出来这个上届。 当然在某些情况下,也可以计算出它们的下界。

这个上界是Minkowski提出的一个基本定理,也叫做凸体定理。因为它最简单的形式只使用了最简单的格Z^n。以及一个任意的对称凸体。

这个定理是说,如果有一个对称凸体,它是空间中的一块区域。这个对称凸体的体积严格大于2^n。那么它一定包含整数点。这个定理的证明不困难,但我不会在这里详细证明,我会举一个例子。

假设有集合Z^n,也就是图上绿色的点。现在我问你们,能够取一个用橙色覆盖的空间,里面没有任何非零的绿色点吗?解这个问题有个好方法,没有比它更好的方法了这个方法可以作为练习。这有点难,但不是不能做,实际上你能够很容易找到下面这个备选答案。

取一个立方体,n维空间中的立方体,中心放在原点。它的边长比2稍小一些,或者把边长设为2,但假设这个立方体是开集合,不包含边界。那么我们就可以得到一个体积为2^n的立方体。
而每个绿色点之间的距离是1。立方体的边长为2。体积为2^n。这个立方体中,除了原点之外,没有其它格点。但当我们增大立方体边长,使它的体积大于2的n次方时,立方体内就会有非零点了。现在我要问,能不能找到一个体积大于2的n次方的区域,这个区域不接触任何绿色的格点?

你可能会尝试在纸上开始画,开始你可能会觉得这个问题有点意思,但是很快你就会放弃。我尝试过证明这不可能,Minkowski的证明只是鸽笼原理的一个应用,在他的基础上增加了几步。这个证明很好很巧妙,但只会用到初等的数学知识。在证明中不会包含很高深的数学。

这和一般格有什么关系呢?这个定理是在Z^n上定义的,看起来不那么有趣。
我们知道可以通过在Z^n上施加线性变换B得到任意一个格。在线性变换之后,对称和凸集的性质是不变的。所以对一个对称凸体施加线性变换,得到还是对称凸体,和变换前不同的对称凸体。这个对称凸体的体积会改变,但是这个改变是由线性变换的行列式精准控制的。
利用这一点,可以施加线性变换,把任意格变回Z^n。假设有任意一个格,基向量组为B,或者说是由线性变换B变换而来。能够计算出格的行列式。取行列式的1/n次方。它是和格成线性关系的,我们把它记为r,现在取边长为2r的立方体。然后施加线性变换B的逆,在这里这个线性变换如图:

 
 

在这里插入图片描述

这是一个旋转变换,因为旋转变换更容易展现在幻灯片上,一般来说,应该是任意的线性变换,这里取的旋转不会改变体积。而一般的线性变换则会改变体积。这是变换之后的立方体。它是一个凸体,体积等于线性变换B的逆的体积乘以立方体的体积。结果是2^n。
那么我们就有了2^n这一项,B的逆的行列式和 (2r)^n中的B的行列式消掉了。我们就是为了这里能够消去行列式,才选择了这个r的值。

于是我们得到了体积等于2^n的凸体,根据凸体定理,它一定包含非零整数点。

 
 
在这里插入图片描述

我们有了非零整数点,再回过去在这个点上施加线性变换B。这样就得到了一个在原来的凸体内部的格点。
我们常常像这样从简单的凸体开始,例如欧氏球。欧氏球可以用于在2范数下给出格上最短向量的上界。但也可以推广到其它范数。例如对于无穷范数来说,可以考虑立方体。对于1范数来说,也可以考虑对应的球。一般来说,任何一个范数都有一个对应的对称凸体。这个凸体定义了范数对应的单位球。这就给我们一个确定这些量的上界的好方法。

在2范数的情况下,格上最短向量,或者说第一连续极小λ1就有下面的上界。这个上界等于根号n乘以r。这里的r是格行列式的1/n次方,可以理解为归一化的因子。根号n取自欧式空间中n维单位球的体积。可以在根号n的前面放一个常数因子,能够稍微改进结果。如果把根号n换成准确的体积值,还可以稍微进一步做一些改进。实际上从渐进意义上来看,这已经是我们得到的最好结果了。

存在这样的格,最短向量的长度和所有λ乘起来开n次方根一样大。
 
 
在这里插入图片描述
这就叫做Minkowski第二定理。它不止证明了这两个定理。Minkowski第二定义是标准的名称,这个定理在这里的形式不是最初论文的形式。第二定理是第一定理的增强。这个定理说明这个上界是根号n乘以格行列式的1/n次方。而这个上界并不只是λ1的上界。还是所有连续极小集合平均数的上界。所以我们不仅可以取λ1的上界,还可以把所有λi乘起来再取1/n次方,再去这个值的上界。这个集合平均数比λ1大,比λn小,是它们中间的某个值。

可以证明这个上界也是成立的。有趣的是这也可以通过在格上施加线性变换来证明。这个线性变换起的作用会大一些。

λ1可能比Minkowski的上界稍小。存在这样的格,行列式很大,但最小距离很小。

构造这样的格很简单,只需要增加一个垂直于格的分量 并增大这个分量的值就好了。这样不会改变最短向量的长度,但是会增加行列式的值。

这个量包含所有的连续极小,所以和格的n个维度都有关。这是连续极小几何平均数的一个上界而这个上界不会小于Minkowski的上界的根号n倍。所以这个几何平均数是距离Minkowski上界更近更陡的一个值。这种情况下这个界很紧凑也就是说存在这样的格,这个格的最短向量长度,甚至是连续极小的乘积。至少是根号n乘以行列式的1/n次方这么大,而且常数项不会太小。

有些格的构造是比较难的。其中涉及到数学,如果使用概率的话,证明也就会简单许多。
使用我们今天后面提到的概率分布,随机选取一个格。
可以证明这个随机格能够在小常数内达到Minkowski的界,实际上这可以作为练习。
我猜这个常数可能是2或者4一类的值,所以这是一个很紧凑的界。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

旺旺的碎冰冰~

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

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

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

打赏作者

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

抵扣说明:

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

余额充值