后量子秘密:格密码入门(一)

历史背景

人们对格的探索最早可以追溯至19世纪的数论研究。1801年,高斯在《算术研究》中系统梳理了二次型和数的几何等基础理论,这些工作后来成为格理论的数学基石。不过在当时,格尚未作为一个独立的数学对象被明确提出,在随后近两百年的时间里,它仅仅作为纯粹数学的分支存在,没有人将它与保密、加密、密码产生任何关联。

直到1996年,这一局面被彻底改写。美国数学家Miklós Ajtai发表了一篇开创性论文,首次将格上的几何困难问题与密码学绑定,正式开辟了格密码这一研究方向。在此之前,传统公钥密码体系大多依托大整数分解、离散对数两类数学难题搭建。1994年,数学家Peter Shor提出了著名的Shor算法,从理论上表明量子计算机可以在多项式时间内破解这两类难题。Ajtai的工作,为后量子时代的密码技术埋下了一颗至关重要的种子。

1.1 格密码学的起点:解方程

我们在高中都学过解方程组,比如:

2x+3y=52x+3y=52x+3y=5

4x+y=64x+y=64x+y=6

对这个方程组,只需要用加减消元法,几秒钟就能算出 x=1,y=1x=1, y=1x=1,y=1。这在数学上叫线性方程组,写成矩阵就是 Ax=bAx=bAx=b。

现在往方程组里的右边加上噪音,例如5加上1变成6,6减去1变成5:

2x+3y=62x+3y=62x+3y=6

4x+y=54x+y=54x+y=5

用矩阵形式表示是 b=A⋅s+eb = A \cdot s + eb=A⋅s+e,这里的 eee 是一个极小的、随机的误差向量(比如每个分量只取 −1,0,1-1, 0, 1−1,0,1)。加上噪声 eee 后,并且要求 xxx 和 yyy 都是整数,解方程组是否还能继续用消元法呢?答案是不行,消元过程中误差会被各种放大,算出来的解会乱七八糟,完全不是真正的 sss。这是因为加上噪声 eee,把原来的线性关系打破了,这个带噪声的解方程问题,就是密码学里的 LWE(带误差学习问题)

你可能觉得,加个噪声而已,使用计算机暴力枚举误差 eee 不就行了?误差 eee 每个分量只有 −1,0,1-1, 0, 1−1,0,1 三种可能,对于上面两个方程,计算机可瞬间试出来,但如果有100个分量呢?组合的数值变成 31003^{100}3100 种。可能有人说,这个数虽然大,但也许有捷径?

答案是没有捷径,因为这个问题一旦换一个角度看,就变成了一个几何问题,而那个几何问题,数学界已经研究了近两百年,至今没有高效解法,这个几何对象,就叫格(Lattice)

1.2 格的定义

格的英文单词 Lattice,本意是格栅、栅栏,就像窗户上整齐排布的格纹,线条均匀,结构也规整,在数学中,格的形状和格栅类似,是整齐排布的离散点的集合,其正式的数学定义如下:

给定 nnn 个线性无关向量 b1,b2,...,bn∈Rmb_1, b_2, \dots, b_n \in \mathbb{R}^mb1,b2,...,bn∈Rm,由其生成的格可以表示为:

L(b1,b2,...,bn)={∑i=1nxibi  |  xi∈Z}\mathcal{L}(b_1, b_2, \dots, b_n) = \left\{ \sum_{i=1}^n x_i b_i \;\middle|\; x_i \in \mathbb{Z} \right\}L(b1,b2,...,bn)={i=1∑nxibi xi∈Z}

其中向量组 b1,b2,...,bnb_1, b_2, \dots, b_nb1,b2,...,bn 被称作格的 ,xix_ixi 为整数系数。这个公式本质其实十分简单,就是基向量的整数线性组合所得到的全部点的集合。

例如二维平面的格,选取基向量 b1=(1,0)b_1=(1,0)b1=(1,0)、b2=(0,1)b_2=(0,1)b2=(0,1),任意整数组合可表示为:

x1⋅(1,0)+x2⋅(0,1)=(x1,x2),x1,x2∈Zx_1 \cdot (1,0) + x_2 \cdot (0,1) = (x_1, x_2), \quad x_1, x_2 \in \mathbb{Z}x1⋅(1,0)+x2⋅(0,1)=(x1,x2),x1,x2∈Z

通过令 x1,x2x_1, x_2x1,x2 取不同的整数值,我们就能得到一系列具体的格点:

  • 当 (x1,x2)=(1,0)(x_1, x_2) = (1,0)(x1,x2)=(1,0) 时,格点为 (1,0)(1,0)(1,0)
  • 当 (x1,x2)=(1,1)(x_1, x_2) = (1,1)(x1,x2)=(1,1) 时,格点为 (1,1)(1,1)(1,1)

这些点的横纵坐标均为整数,且彼此之间等距排布,构成了一张无限延伸、横平竖直的规整网格,这就是最简单的整数格 Z2\mathbb{Z}^2Z2。

值得注意的是,同一个格可以拥有多组不同的基。不同基生成的格点集合完全一致,但几何特征差异很大:正交规整的基,基向量之间夹角接近垂直、长度均衡,容易直观理解,例如上面例子中 b1=(1,0)b_1=(1,0)b1=(1,0)、b2=(0,1)b_2=(0,1)b2=(0,1);歪斜扭曲的基,基向量之间夹角很小或很大、长度悬殊,空间关系复杂难辨,例如 Z2\mathbb{Z}^2Z2 的另外一组基 b1=(2,1)b_1=(2,1)b1=(2,1)、b2=(1,1)b_2=(1,1)b2=(1,1),基向量之间夹角约 18.4∘18.4^\circ18.4∘。这就好比铺地板,正方形瓷砖规则整齐,容易看清整体布局;不规则瓷砖歪斜交错,空间结构杂乱,难以直接把握。

为了量化基的优劣,数学家提出了基本平行多面体 的概念。它是格的最小基础单元,通过平移便可无重叠、无空隙地铺满整个空间。叫多面体是因为在不同的维度不一样,二维空间中它是平行四边形,三维空间中为平行六面体,高维空间则是超平行体,基向量越规整,单元结构越对称紧凑;越扭曲,则单元形态越狭长扁平。

1.3 格的难题

经过前面的介绍,我们对格已经有了一个初步印象:无论二维、三维还是更高维度,格就是离散点的集合。接下来一个自然的问题是,这些密密麻麻的点,究竟能构成什么难题,从而被用于密码学?

站在外行的角度,你可能会想,是不是像手机九宫格解锁那样,在格点之间连线,把连接路径当作难题?或者是把秘密藏在某个格点上,只有知道坐标的人才能找到?

这两种直觉和实际格的难题有点沾边,实际上,格密码的难题是,在所有非零格点中,找到距离原点最近的那一个 ,它有一个专门的名字:最短向量问题(Shortest Vector Problem, SVP)

第一次看到这个问题时,你可能会本能地想:这也能算难题?因为三维整数格 Z3\mathbb{Z}^3Z3 给了我们这个直觉,我们可以一眼看出来距离原点最近的非零格点就是 (1,0,0)(1,0,0)(1,0,0)。

实际上,在三维整数格里,这确实不是个难题。但这种一目了然其实建立在两个侥幸条件之上:一是我们日常生活的空间恰好是三维,对三维坐标有着天生的几何直觉;二是我们习惯使用的恰好是单位基向量,格点横平竖直,最短的那个就摆在坐标轴上,不需要任何计算。

如果把这两个条件拿掉,情况就完全不同了。从四维开始,格点已经无法使用几何直观呈现,我们失去了"看一眼就能找到"的能力。我们对高维格的全部了解,只能通过基向量构成的代数公式来完成。

虽然我们知道,无论多少维,格点都是整齐排列的,但在三维以上的格点,我们对格结构的感知窗口只剩下基向量本身。如果我们拿到的是优质基,比如单位向量,那么最短向量就明摆在公式表面,但如果我们拿到的是歪斜扭曲的劣质基,最短向量就可能被隐藏在某个复杂的整数系数组合里,导致无法直接从基向量判断出它在哪里。

最早启发人们利用这一特性的是一种被称为 GGH 的加密框架,它直接将优质基作为私钥、劣质基作为公钥。虽然这套具体方案后来被攻破,但它所揭示的"同一格、两种风格的基"思想,却是理解格密码直觉的绝佳入口。现代格密码方案(如 Kyber、Dilithium)虽然不再直接输出显式的坏基作为公钥,但困难性的本质并未改变。

这就是最短向量问题之所以成为难题的根本原因。

1.3.1 最短向量问题(SVP)

最短向量问题是格密码最基础的困难问题:给定任意一组格基,求解格内长度最短的非零向量。

这个最短向量的长度,数学家记作 λ1\lambda_1λ1(读作"兰姆达一"),例如二维整数格 Z2\mathbb{Z}^2Z2 中,离原点最近的格点是 (1,0)(1,0)(1,0) 和 (0,1)(0,1)(0,1),因此 λ1=1\lambda_1=1λ1=1。λ1\lambda_1λ1 是格本身的固有属性,无论用哪组基来描述这个格,它的数值都不会改变。

前面提过,低维场景下,该问题简单易懂。但在密码应用场景中,公开的永远是扭曲劣质基,向量冗长、夹角杂乱,最短向量被隐藏在复杂的线性组合之中。

随着维度升高,问题难度发生质变。格中任意向量都可以表示为基向量的整数线性组合:

v=∑i=1nxibi,xi∈Zv = \sum_{i=1}^n x_i b_i, \quad x_i \in \mathbb{Z}v=i=1∑nxibi,xi∈Z

整数系数 xix_ixi 可以取遍所有整数,这也就意味着,基向量的组合方式有无穷多种。

假设有人想寻找这些组合中长度最短的非零向量,他知道,最短向量本身的长度必然存在物理上限,不可能无限拉长,这样他给搜索划定了边界,而不用遍历无穷空间,只需在有限范围内搜索候选向量。

具体来说,他可以依托基向量的长度,推算出最短向量 λ1\lambda_1λ1 的长度上界 RRR。最简单的估算方式,那是将所有基向量的长度直接相加,得到一个粗糙但有效的上限。这样一来,任何长度超过 RRR 的向量,都不可能是最短向量,完全可以直接剔除。

这样,于是问题变成在满足向量长度约束 ∥∑xibi∥≤R\left\|\sum x_i b_i\right\| \leq R∥∑xibi∥≤R 的前提下,筛选出整数系数组合,从中找出长度最小的向量。这个长度约束会限制每一个系数的绝对值,记作 ∣xi∣≤K|x_i| \leq K∣xi∣≤K。KKK 是一个有限常数。

从组合逻辑来看,单个系数的取值范围为 −K-K−K 到 KKK,一共存在 2K+12K+12K+1 种取值可能。如果格的维度为 nnn,那么所有候选向量的总量是 (2K+1)n(2K+1)^n(2K+1)n。当维度 n=50n=50n=50、系数边界 K=10K=10K=10 时,候选向量数量约为 106610^{66}1066(因为 2150≈106621^{50} \approx 10^{66}2150≈1066)。要知道,可观测宇宙的原子总数仅约 108010^{80}1080。

另外,KKK 并不是攻击者直接知道的值。攻击者只知道最短向量存在某个长度上界 RRR,而 KKK 是由 RRR 和基向量的具体方向共同决定的。他无法提前知道 KKK 到底是3、10还是100。

很多人会产生疑问:如果最短向量对应的系数本身很小,比如 KKK 仅为1或2,那暴力枚举搜索不是变得轻而易举?

在成熟的密码学方案中,这种简单破解的可能性会被人为、刻意地排除。

我们可以用生活中的锁具逻辑通俗理解:一款合格的防盗锁,绝不会设置 001 这类简单密码,因为暴力破解的成本太低,设计者会刻意提高密码复杂度,拉高试错成本,从根源上杜绝简单破解。格密码的设计逻辑也是如此,方案中的核心参数,包括空间维度 nnn、基向量的选取规则、私钥的分布规律,全部经过密码学优化。设计者会刻意保证,在普通坏基条件下,私钥对应的整数系数不会偏小,迫使攻击者不得不面对海量的搜索空间,无法通过暴力枚举破解。

这就是高维最短向量问题在计算层面难以破解的核心原因。

根据求解目标的精细程度,SVP可以划分为三类问题,分别如下:

  1. 搜索型SVP:要求精准找出格中最短的非零向量,如同在规整网格中,定位距离原点最近的格点。
  2. 优化型SVP:无需定位最短向量的具体位置,只需要测算出最短向量的精确长度,等价于只测量原点到最近网格点的距离,忽略点位坐标。
  3. 判定型SVP :判定规则最为简洁:给定一个长度阈值 rrr,仅需给出"是"或"否"的回答,判断格中是否存在长度小于 rrr 的向量,好比判断最近网格点是否在设定半径范围内。

这三类问题本质上互通等价,求解难度一致。如果能够找出最短向量,自然可以测得其长度,也能完成任意阈值的判定;如果可以测算最短长度,也就能通过不断试算、逼近的方式定位最短向量;如果能够完成长短判定,也可借助二分法思想,逐步收敛范围,最终锁定答案。

不过在真实的密码学应用场景中,几乎不会是求解精确的最短向量,因为精准求解的算力成本实在过高。行业内普遍采用折中方案,求解近似最短向量 。我们引入近似因子 γ\gammaγ 衡量求解精度:γ=1\gamma=1γ=1 时为精确解,γ\gammaγ 的数值越大,求解允许的误差范围越宽,问题的计算难度也就越低。

对应三类基础SVP问题,近似版本也衍生出三种变体:

  • 搜索型SVPγ_\gammaγ :无需找到绝对最短向量,只需找出一条非零向量,且其长度不超过精确最短向量的 γ\gammaγ 倍即可。
  • 优化型SVPγ_\gammaγ :求解一个长度数值 ddd,确保真实最短向量的长度,落在区间 d,γ⋅dd, \\gamma \\cdot dd,γ⋅d 之内。
  • 承诺型SVPγ_\gammaγ (也常被称作间隙SVP / GapSVPγ_\gammaγ):给定阈值 rrr,明确区分两种情况:最短向量长度小于等于 rrr,或是最短向量长度大于 γ⋅r\gamma \cdot rγ⋅r,做出非此即彼的判定。

1.3.2 最近向量问题(CVP)

在格密码体系中,除了SVP之外,还有另一款同等重要的基础难题,这个问题被称为最近向量问题 ,简称 CVP 。如果说SVP是寻找格中离原点最近的点,那CVP就是把问题拓展到了任意位置:给定一个格以及一个不在格上的目标点 ttt,我们需要在格中找出距离目标点 ttt 最近的格点。

用公式表示,就是寻找某一个属于格的向量 v∈Lv \in \mathcal{L}v∈L,使得 ∥v−t∥\|v - t\|∥v−t∥ 取得最小值。从数学定义不难看出,SVP本身就是CVP的一种特殊情况。当目标点 ttt 设定为原点时,寻找距离原点最近的格点,就是求解最短向量,也就是说,SVP是一种特殊的CVP。数学家证明了SVP与CVP在计算复杂度上完全等价。

为了方便直观理解,可以把格想象成一片规整的稻田,每一株稻苗对应一个格点。现在我们在稻田里随意丢下一把钥匙,这把钥匙的位置就是目标点 ttt;而最近向量问题CVP,就是要求我们找出离这把钥匙最近的那一株稻苗。

和SVP一致,求解高维CVP目前不存在可行的高效算法。实际使用近似版本,用近似因子 γ\gammaγ 控制难度:γ=1\gamma=1γ=1 是精确解,γ\gammaγ 越大,误差容忍度越高,计算越容易。近似CVP同样分为三类,与SVP对称:

  1. 搜索型CVPγ_\gammaγ:要求直接定位最优格点;
  2. 优化型CVPγ_\gammaγ:不需要锁定格点位置,只求测出目标点与最近格点的直线距离,只看远近、不问位置;
  3. 承诺型CVPγ_\gammaγ :判定逻辑最简单:给定距离 rrr,仅需回答最近格点是否落在 rrr 范围之内,给出"是"或"否"的判定结果即可。

这三类CVP问题同样可以相互转化、彼此等价。能够搜索出最近点,就可以测算距离、完成判定;能够精准判定距离范围,也可以依靠二分逼近的思想,反向缩窄区间,最终锁定目标格点。

1.4 从理论难题到实用密码:SIS与LWE

SVP与CVP是格密码整个理论体系的基石,所有格上密码方案的安全根基,最终都能回溯到这两个经典难题。但在密码算法的实际设计与工程落地中,几乎不会直接拿SVP和CVP来构造加密或签名方案。

原因很简单,SVP和CVP都是搜索型数学问题,核心是在抽象的格空间中寻找特定向量。这种纯粹几何化的原始表达很难直接搭建出可用的密码算法。就像我们熟悉的大数分解难题,RSA并没有直接使用大数分解,而是把分解的困难性嵌入到模幂运算的加解密流程中,才变成了可用的密码算法。格密码的改造思路类似,以SVP和CVP为基础,发展出本节要介绍的短整数解问题(SIS)带误差学习问题(LWE)

如果说SVP和CVP像计算机底层的汇编语言,贴近机器本质,是一切程序的根基,但过于琐碎,不适合直接用来开发应用,那么SIS和LWE就像高级语言,底层机理没有变,只是把繁杂细节做了封装,让人可以专注于算法设计。

从数学根源来看,SIS对应格的最短向量问题SVP,LWE对应格的最近向量问题CVP。原本这两个都是几何层面的难题,人们把它们改写成矩阵、向量这类代数的表达形式。

经过这样改造封装之后,原本偏向几何的难题,就换成了密码研究者很熟悉的一套代数工具。可以直接拿矩阵当公钥,依靠向量运算就能实现加密、解密、签名,做密码方案设计就简单多了。

下面我们来看两个SIS和LWE如何和格对应起来。

1.4.1 短整数解问题(SIS)

SIS的定义如下:给定矩阵 A∈Zqn×mA \in \mathbb{Z}_q^{n \times m}A∈Zqn×m,寻找非零短向量 x∈Zmx \in \mathbb{Z}^mx∈Zm,满足 Ax≡0(modq)Ax \equiv 0 \pmod qAx≡0(modq),同时 ∥x∥≤β\|x\| \leq \beta∥x∥≤β,也就是向量长度不能超过一个预设的上限。

这个长度限制是SIS安全性的关键。如果不要求 xxx 足够短,找一个解太容易了,比如直接取 x=(q,0,...,0)x = (q, 0, \dots, 0)x=(q,0,...,0),代入显然满足方程。但加上"短"这个条件之后,问题就变得棘手了。

我们看一个具体的例子,感受一下SIS的难度。

设定 n=1n=1n=1,模数 q=7q=7q=7,给定矩阵行向量 A=3,5,2A = 3, 5, 2A=3,5,2。目标是找一个非零整数向量 x=(x1,x2,x3)x = (x_1, x_2, x_3)x=(x1,x2,x3),同时满足两个条件:一是满足同余线性方程 3x1+5x2+2x3≡0(mod7)3x_1 + 5x_2 + 2x_3 \equiv 0 \pmod 73x1+5x2+2x3≡0(mod7),二是满足短向量约束:采用无穷范数,向量每一个分量的绝对值都不超过2,保证向量足够短。

如果没有这个"短"的限制,随便就能找到一个解,比如取 x=(7,0,0)x=(7,0,0)x=(7,0,0),代入后 21≡0(mod7)21 \equiv 0 \pmod 721≡0(mod7),满足方程。但有了短向量约束,每个分量只能在 −2,−1,0,1,2-2, -1, 0, 1, 2−2,−1,0,1,2 这五个数中选取。三个变量组合下来,总共也只有 53=1255^3 = 12553=125 种可能。

我们可以试几个:(1,1,1)(1,1,1)(1,1,1) 代入后 3+5+2=10≡3(mod7)3+5+2 = 10 \equiv 3 \pmod 73+5+2=10≡3(mod7),不行;(2,1,−1)(2,1,-1)(2,1,−1) 代入得 6+5−2=9≡2(mod7)6+5-2 = 9 \equiv 2 \pmod 76+5−2=9≡2(mod7),还是不行。一直试到 (1,−1,1)(1,-1,1)(1,−1,1),计算 3−5+2=03-5+2 = 03−5+2=0,这才刚好满足条件,成为一个合格的短向量解。

这个例子只有三个变量,125种组合,手动枚举也不是不行。但实际密码学中的SIS问题,变量数量是几百甚至上千。比如常见的 m=512m=512m=512,所有可能的组合数是 55125^{512}5512,这个数大到完全没法想象。普通计算机算不了,超级计算机也算不了。

更麻烦的是,这个问题没有已知的捷径。它本身是模运算下的线性方程组,同时又要求向量足够短。我们熟悉的高斯消元在这里直接失效,因为高斯消元依赖精确的等式关系,满足条件的解通常藏得很深,从方程表面看不出来,只能靠格基约化算法去逼近,而且维度越高,计算量增长得越快。这种在大量离散点中找短向量的困境,本质上就是最短向量难题。SIS其实就是SVP在一个特定格上的具体表现。

具体来说,上面构造的那个集合:

Λ⊥(A)={z∈Zm∣Az≡0(modq)}\Lambda^\perp(A) = \{ z \in \mathbb{Z}^m \mid Az \equiv 0 \pmod q \}Λ⊥(A)={z∈Zm∣Az≡0(modq)}

本身就是一个格,因为所谓格,就是空间里一个个离散的、排列整齐的点阵,Λ⊥(A)\Lambda^\perp(A)Λ⊥(A) 是从整数点阵里按规则 Az≡0(modq)Az \equiv 0 \pmod qAz≡0(modq) 挑选出的子点阵,它自己也是一个格。于是SIS问题就变成了:在这个格 Λ⊥(A)\Lambda^\perp(A)Λ⊥(A) 里,找一个长度不超过 β\betaβ 的非零向量,这正好是SVP。

1996年,数学家阿杰泰(Miklós Ajtai)证明了一个关键结论:如果最坏情况下的SVP是困难的,那么平均情况下的SIS也是困难的。

这个结论有点绕,我们先拆开看两个关键词。

最坏情况指的是:在所有可能的格中,最难解的那些格,SVP也没有高效算法。注意,这不代表每个格都难,实际上存在一些格,看一眼就能找到最短向量(比如前面提到的整数格)。这里说的是:哪怕是最难的那批格,也攻不破。

平均情况指的是:随机生成一个SIS实例,它很难解。密码学方案运行时,密钥和实例都是随机生成的,所以攻击者面对的就是随机实例。如果随机生成的实例里容易解的比例很高,攻击者就可以反复尝试、碰运气。平均情况安全保证的就是:容易解的实例占比极小,小到攻击者几乎不可能碰到。

阿杰泰把这两者联系了起来。他不是在说"最坏难,所以平均也难",他证明的是另一件事:

如果有人能破解随机生成的SIS实例,那么他就能用同样的方法破解最坏情况下的SVP。

其中的逻辑是:假设有人声称存在算法能够破解随机SIS。阿杰泰给出一套数学变换,可以把最坏情况的SVP实例,转化生成一大批服从随机分布的SIS实例,反复交给这个算法处理。如果该算法能够求解这批SIS实例,就可以把多份结果组合,得到原SVP问题的解,最坏情况SVP就此被攻破;反之,如果算法无法求解,就证明所谓破解随机SIS的能力并不成立。换句话说,破解随机SIS这个动作本身,就是破解最坏SVP的步骤。这两个难题被绑定在了一起,谁也甩不掉谁。

所以整个推理链条是:

如果随机SIS能被破解 → 那么最坏SVP也能被破解

但我们相信最坏SVP很难

所以随机SIS也很难

这个结论在当时是开创性的。在阿杰泰之前,密码学家设计的大多数方案只是假设攻击者找不到解法,没有数学依据。RSA就是这种情况,它的安全性建立在大数分解很难这个假设上,但没有人能证明它真的难。大数分解的困难性是一个孤立的假设,一旦它被攻破,整个RSA体系就没有退路了。

阿杰泰的归约虽然没有证明SVP本身是难的(那依然是未被证明的假设),但它把SIS的安全性绑定到了SVP的难度上。这意味着,如果你相信SVP是难的,那你就必须承认SIS也是难的。SIS的困难性不再是一个孤立假设,而是与格理论中最核心的问题挂钩了。这正是归约的价值所在------它不是证明难题本身,而是建立难题之间的连接。

所以两者的区别在于:RSA的假设是独立且无退路的;SIS的假设是绑定且可追溯的------它把安全性引向了格理论中最基础、被研究得最久的那个难题。虽然这个难题本身也未被证明,但至少它不是凭空出现的。

到今天,SIS已经不只是数学理论中的概念。NIST后量子密码标准中的CRYSTALS-Dilithium签名方案,其安全根基就建立在Module-SIS和Module-LWE之上。

1.4.2 带误差学习问题(LWE)

SIS让格密码学第一次拥有了最坏情况到平均情况的安全性归约,并成功构造出抗碰撞哈希函数、数字签名等基础组件。SIS的齐次线性形式(常数项全部为零,即 Az≡0(modq)Az \equiv 0 \pmod qAz≡0(modq))在形式上偏向于"证明自己知道某个短向量让其归零",常用于证明类方案,如签名和哈希。如果要直接实现公钥加密、密钥封装或者全同态加密,SIS的齐次线性形式就不太够用了。

2005年,奥代德·雷格夫(Oded Regev)提出了另一个格密码上的里程碑式成果------带误差学习问题(Learning With Errors,LWE) ,这其实就是本节开头那个带噪声的解方程问题。

如果把SIS看作是找一组短的"零解",那么LWE就相当于解一组带误差的非齐次方程:给定 AAA 和 b=As+eb = As + eb=As+e,其中 eee 是一个很小的未知误差,要求恢复出 sss。相比SIS,LWE的结构更加灵活,能够直接构造出加密方案,因此迅速成为后量子密码学的主角。接下来,我们就来详细拆解LWE的定义、参数与背后的几何直觉。

我们先把LWE写成标准形式。

给定一个矩阵 A∈Zqm×nA \in \mathbb{Z}_q^{m \times n}A∈Zqm×n 和一个秘密向量 s∈Zqns \in \mathbb{Z}_q^ns∈Zqn,随机选取一个小误差向量 e∈Zme \in \mathbb{Z}^me∈Zm(每个分量通常取 −1,0,1-1, 0, 1−1,0,1 这样的小整数),计算:

b=As+e(modq)b = As + e \pmod qb=As+e(modq)

公开的是 AAA 和 bbb,秘密的是 sss 和 eee。问题是:从 AAA 和 bbb 出发,能不能恢复出 sss?

没有噪声的时候(e=0e=0e=0),这就是一个普通的线性方程组,高斯消元法可以直接求解。但加上噪声之后,情况就完全不同了,这正是LWE名称中"误差"二字的含义。

现在要回答LWE与格有什么联系,可以通过一个几何变换看清楚。

把矩阵 AAA 的每一列看作高维空间中的基向量,让 xxx 遍历所有可能的取值,所有 AxAxAx 的集合就构成了一个格。具体来说,密码学中常用的是 q-元格

Λq(A)={y∈Zm∣∃x,  y≡Ax(modq)}\Lambda_q(A) = \{ y \in \mathbb{Z}^m \mid \exists x,\; y \equiv Ax \pmod q \}Λq(A)={y∈Zm∣∃x,y≡Ax(modq)}

直观理解:把 AAA 的列向量当作基底,在整数空间里张成网格,再对整体做模 qqq 折叠,就得到了这个离散的格点集合。

再看LWE公式 b=As+e(modq)b = As + e \pmod qb=As+e(modq)。误差向量 eee 的分量都很小,这意味着向量 bbb 离格点 AsAsAs 的距离很近。换句话说:bbb 就是格中一个标准格点 AsAsAs,被微小误差 eee 轻轻偏移后得到的附近点。

而前面章节介绍的最近向量问题(CVP)正好是:给定一个格和一个不在格点上的目标点,找出离它最近的格点。

放到LWE场景,格就是 Λq(A)\Lambda_q(A)Λq(A),待定位的目标点就是公开向量 bbb。因为误差 eee 足够短,还小于格本身的最小间隔距离,所以离 bbb 最近的格点,一定就是 AsAsAs。一旦攻击者通过CVP找出这个最近格点,再结合矩阵的线性关系,就可以解出秘密向量 sss。

Regev在提出LWE时,将其划分为两个版本:搜索版LWE判定版LWE。两者在数学上是等价的,但在密码学中扮演的角色不同,一个负责精准定位,一个负责混淆视听。

1)搜索版LWE(Search-LWE):还原秘密向量

任务:给定一堆带噪声的线性方程样本 (ai,bi)(a_i, b_i)(ai,bi),满足:

bi=ai⋅s+ei(modq)b_i = a_i \cdot s + e_i \pmod qbi=ai⋅s+ei(modq)

我们要做的,就是从这些被轻微噪声干扰的算式里,完整还原出隐藏的秘密向量 sss。

打个比方:有人把私钥拆成碎片,藏进一堆模糊的数学式子里。没有噪声的时候,高斯消元法可以容易算出答案;但一旦噪声混进去,每一条方程都不再精确成立,消元法彻底失效。想要把秘密向量从噪声中"抠"出来,就变成了一个极难的数学问题。

在密码学中,搜索版LWE对应的是最直接的攻击方式------密钥恢复。只要搜索版LWE是困难的,就意味着攻击者无法从公钥中逆向推出私钥,这是密码系统最底线的安全要求。

2)判定版LWE(Decision-LWE):区分真假随机

判定版LWE的任务更简单,但用途同样关键:它不需要找出秘密向量 sss,只需要判断一组样本是真的由LWE规则生成的,还是纯粹的随机数据。

面对一组未知数据,我们要判断它究竟是由同一个秘密 sss 按照LWE规则生成的合规样本,还是毫无关联、纯粹随机生成的杂乱数据。

用生活场景类比:就像给你一堆矿石,不用拆解成分、不用溯源矿脉,只需要分辨这些矿石是不是出自同一条有内在规律的矿脉,还是随手捡拾、毫无关联的普通碎石。不必知晓内核细节,只需判别有无隐藏规律。

判定版LWE的价值在于,它直接对应密码学中的语义安全。如果攻击者无法区分密文和随机数据,那他就不可能从密文中解读出任何有效信息。目前主流的LWE加密方案(包括 Kyber),其安全性都建立在判定版LWE的困难性之上,而不是搜索版。

Regev在2005年同时证明了一个关键结论:搜索版LWE和判定版LWE在多项式时间内是等价的。也就是说,破解其中一个,就能以相近的复杂度破解另一个。所以两者虽然在功能上有分工,但在安全强度上是一体的。

相关推荐
网安蟹佬霸4 天前
# 网络流量分析实战:从Wireshark到入侵检测系统构建(2026最新版,附完整流量分析链与IDS规则集)
网络·测试工具·安全·开源·wireshark·密码学·哈希算法
小杨不想秃头5 天前
信息安全工程师教程第二章密码学
运维·服务器·密码学
汽车网络安全爱好者7 天前
AUTOSAR SecOC 深入解析(一):从 Freshness Value 到 MAC 认证的完整流
物联网·网络安全·汽车·密码学
小网洞8 天前
免费WPA无线握手包在线分析跑包网站
网络·网络安全·密码学·wps
网安蟹佬霸9 天前
密码学安全实战:从加密原理到哈希破解的完整攻防指南
网络·算法·安全·web安全·开源·密码学·哈希算法
Sagittarius_A*10 天前
公钥密码基础(三):RSA 数学原理:欧拉定理、模逆与快速幂
信息安全·密码学·rsa·公钥密码·密钥分发
曲无忆11 天前
密码学三大核心技术解析
python·密码学
笨鸟先飞,勤能补拙13 天前
从预测到决策:人工智能与机器学习的系统方法、工程闭环与现实边界
大数据·人工智能·windows·python·机器学习·密码学
艺杯羹13 天前
古典密码学攻防演进全景:从凯撒移位、频率分析到一次一密与恩尼格玛机破译
网络·人工智能·安全·网络安全·密码学·密码安全