文章目录
最短向量问题
格的每个量都定义了一个对应的计算问题。对于第一连续极小 λ 1 \lambda_1 λ1而言,其对应的计算问题为最短向量问题。
定义 (Shortest Vector Problem,SVP)最短向量问题,给定一个基为 B \bm{B} B的格 L ( B ) \mathcal{L}(\bm{B}) L(B),找到一个非零格向量 B x \bm{Bx} Bx,使得其长度最多为 ∥ B x ∥ ≤ λ 1 \| \bm{Bx} \| \leq \lambda_1 ∥Bx∥≤λ1,其中 x ∈ Z k \bm{x} \in \mathbb{Z}^k x∈Zk。
以上图为例,基向量 ( b 1 , b 2 ) (\bm{b}_1, \bm{b}_2) (b1,b2)可以不是最短基向量,如果它们很长,那么此时为了找到最短格向量必须枚举所有格点,从而找到 ( 5 b 1 − 2 b 2 ) (5\bm{b}_1 - 2\bm{b}_2) (5b1−2b2)这个向量。对于多维格,目前没有SVP的多项式可行解法,也没有对应放松问题的多项式可行解法。
SVP的放松问题为 SVP γ \text{SVP}_\gamma SVPγ。
定义 (Shortest Vector Problem, SVP γ \text{SVP}_\gamma SVPγ)最短向量问题,给定一个基为 B \bm{B} B的格 L ( B ) \mathcal{L}(\bm{B}) L(B),找到一个非零格向量 B x \bm{Bx} Bx,使得其长度最多为 ∥ B x ∥ ≤ γ λ 1 \| \bm{Bx} \| \leq \gamma \lambda_1 ∥Bx∥≤γλ1,其中 x ∈ Z k \bm{x} \in \mathbb{Z}^k x∈Zk。
举一个例子,如果 γ \gamma γ值取2,问题就变成在浅红色超球体表面找到一个格点。
最近向量问题
定义 (Closest Vector Problem,CVP)最近向量问题,给定一个格 L ( B ) \mathcal{L}(\bm{B}) L(B)和一个目标点 t \bm{t} t,找到一个格向量 B x \bm{Bx} Bx,使得它与目标点之间的距离小于 μ \mu μ,即 ∥ B x − t ∥ ≤ μ \| \bm{Bx} - \bm{t} \| \leq \mu ∥Bx−t∥≤μ。
同样,由于这里的基向量可以非常长,所以必须穷举格点。
CVP的放松问题为 CVP γ \text{CVP}_\gamma CVPγ。
定义 (Closest Vector Problem, CVP γ \text{CVP}_\gamma CVPγ)最近向量问题,给定一个格 L ( B ) \mathcal{L}(\bm{B}) L(B)和一个目标点 t \bm{t} t,找到一个格向量 B x \bm{Bx} Bx,使得它与目标点之间的距离小于 μ \mu μ,即 ∥ B x − t ∥ ≤ γ μ \| \bm{Bx} - \bm{t} \| \leq \gamma\mu ∥Bx−t∥≤γμ。
最短线性无关向量问题
定义 (Shortest Independent Vectors Problem,SIVP)最短独立向量问题,给定一个格 L ( B ) \mathcal{L}(\bm{B}) L(B),找到 n n n个线性独立的格向量,使得这些向量的长度都要小于或等于第 n n n连续极小 λ n \lambda_n λn,即 max i ∥ B x i ∥ ≤ λ n \max_i \| \bm{B}\bm{x}_i \| \leq \lambda_n maxi∥Bxi∥≤λn。
以上图为例,若 n = 2 n=2 n=2,则画出 λ 2 \lambda_2 λ2对应的超球体,在该超球体内找到2个线性无关向量。
SIVP的放松问题为 SIVP γ \text{SIVP}_\gamma SIVPγ。
定义 (Shortest Independent Vectors Problem, SIVP γ \text{SIVP}_\gamma SIVPγ)最短独立向量问题,给定一个格 L ( B ) \mathcal{L}(\bm{B}) L(B),找到 n n n个线性独立的格向量,使得这些向量的长度都要小于或等于第 n n n连续极小 λ n \lambda_n λn,即 max i ∥ B x i ∥ ≤ γ λ n \max_i \| \bm{B}\bm{x}_i \| \leq \gamma \lambda_n maxi∥Bxi∥≤γλn。
基于格的可靠信息传输
这个不是密码方案,而是格编码理论里的东西。通过这里例子,可以简单了解CVP、SVP和SIVP的简单应用。
发送者将消息 m m m编码为格上的点 B x \bm{Bx} Bx,将其传输给接收方。由于传输信道不稳定,受到噪声干扰,接收方只能收到 t \bm{t} t。为了得到正确的 m m m,接收方通过求解CVP问题恢复出 B x \bm{Bx} Bx,然后通过求解SVP问题得到 λ 1 \lambda_1 λ1,接着判断 ∥ B x − t ∥ < λ 1 / 2 \| \bm{Bx} - \bm{t} \| < \lambda_1/2 ∥Bx−t∥<λ1/2是否成立(注意,若矫正距离等于 λ 1 / 2 \lambda_1 / 2 λ1/2,则 t \bm{t} t有2个候选格点,这两个候选格点组成最短格向量,此时 t \bm{t} t是没有意义的,需要发送者重新传输消息)。
最后,SIVP问题在这里也有所适用。如果在传输的过程中为了压缩数据而使用了向量量化(Vector Quantization),在重建向量的时候则需要用到SIVP的解来修复误差,从而避免量化失真。这些简单了解一下即可。
CVP问题的两种版本
再次系统性的定义一下CVP问题。
定义 给定一个格 L \mathcal{L} L,一个随机点 t \bm{t} t,以及一个距离 d d d,假定 μ ( t , L ) ≤ d \mu(\bm{t}, \mathcal{L}) \leq d μ(t,L)≤d,CVP问题即求解一个合理的格点 B x \bm{Bx} Bx使得这个格点到 t \bm{t} t的距离小于或等于 d d d。
-
BDD(Bounded Distance Decoding)问题
BDD问题规定了 d < λ 1 ( L ) / 2 d < \lambda_1(\mathcal{L}) / 2 d<λ1(L)/2。此时,问题至多只有一个解,并且就是距离 t \bm{t} t最近的格点。 -
ADD(Absolute Distance Decoding)问题
ADD问题规定了 d ≥ λ 1 ( L ) / 2 d \geq \lambda_1(\mathcal{L}) / 2 d≥λ1(L)/2。此时,问题至少会有一个解,但是不一定是距离 t \bm{t} t最近的格点。
下图给出了各种困难问题之间的联系,大致分为3类。其中,SIVP和ADD是等价的,可用于构造单向函数和公钥加密等密码学应用。
ADD问题规约到SIVP问题上
注意:下文是一个“不太准确”的规约,主要介绍思路,后面章节再对此进行详细介绍。
已知SIVP问题的解 V = { v 1 , … , v n } \bm{V} = \{ \bm{v}_1, \dots, \bm{v}_n \} V={ v1,…,vn},求解ADD问题。由于是最短线性无关向量,所以可以把整个格空间划分成很多个小区域,接着看 t \bm{t} t落在哪个小区域,对其取整得到相应的格点即可作为ADD问题的解。
如下图所示,假设每个小区域的最大边长度为 λ n \lambda_n λn,每条边都是最大边;对于正交格而言,小区域的直径为 n λ n \sqrt{n} \lambda_n nλn;小区域的直径最大长度不会超过 n λ n n\lambda_n nλn,即半径存在一个上限,有 ∑ i 1 2 ∥ v i ∥ ≤ ( n / 2 ) λ n ≤ n μ \sum_i \frac{1}{2} \| \bm{v}_i \| \leq (n/2) \lambda_n \leq n\mu ∑i21∥vi∥≤(n/2)λn≤nμ。而 t \bm{t} t到小区域各顶点的距离不会超过半径,这个半径可以用来确定ADD的 d d d值。
格的几何构造
接下来具体解释如何用SIVP问题的解找到CVP问题的解。
在分析格困难问题时,几何结构时一种非常强大的工具。
举个例子,对整数格 Λ = Z n \Lambda = \mathbb{Z}^n Λ=Zn,求解CVP问题十分简单。给定任意一个点 t \bm{t} t, C V P ( Λ , t ) = ⌊ t ⌉ \mathsf{CVP}(\Lambda, \bm{t}) = \lfloor \bm{t} \rceil CVP(Λ,t)=⌊t⌉。即直接用 t \bm{t} t不断地减去各个基向量 b i \bm{b}_i bi,然后以此判断 t \bm{t} t落在哪个区域,最后在该区域各顶点中找到CVP问题的解。只要 Λ \Lambda Λ的基向量是正交的,那么很容易求解出CVP问题的解。
当然,也存在某些格,它们的基向量不正交。此时,用SIVP问题的解找到CVP问题的解需要用一些技巧,即施密特正交化。
Gram-Schmidt正交化
下文链接中的视频给出了施密特正交化的一个可视化例子。
对原本格基 B \bm{B} B施加Gram-Schmidt正交化,得到 B ∗ \bm{B}^* B∗。可以看到, B ∗ \bm{B}^* B∗的体积与 B \bm{B} B的体积一样,即 d e t ( Λ ) = ∏ i ∥ b i ∗ ∥ ≤ ∏ i ∥ b i ∥ \mathrm{det}(\Lambda) = \prod_i \| \bm{b}^*_i \| \leq \prod_i \| \bm{b}_i \| det(Λ)=∏i∥bi∗∥≤∏i∥bi∥,它同样划分了格空间。
格的取整问题
用 B ∗ \bm{B}^* B∗划分格 Λ \Lambda Λ,得到下图。
移动一下,使格点处于基本区域的正中心。
好了,现在 B ∗ \bm{B}^* B∗中的向量是正交的,那么可以通过加减操作判断点 t \bm{t} t落在哪个区域内,区域中心的格点有很大可能性就是CVP问题的解。比如下图,如果是落在小圆圈内的点a,那么灰色区域中心的格点即CVP问题的解;如果是落在大圆圈内、小圆圈外的点b,CVP问题的解有可能是隔壁区域中心的格点,而灰色区域中心的格点是错误解。
致谢
- Simons格密码公开课官网
Mathematics of Lattices - Simons Institute for the Theory of Computing
- 哔哩哔哩中英双语视频(字幕组:重庆大学大数据与软件学院 后量子密码研究小组)
【中英字幕】Simons格密码讲座第1讲:格的数学定义_哔哩哔哩_bilibili
- Steven的密码学笔记